Giter Site home page Giter Site logo

oop-metro's Introduction

🚇oop-metro

전철역에서 사용자가 지하철에 승차하거나 교통카드를 충전하는 시스템

💰지하철 기본 요금은 일반 1,400원, 청소년 800원, 어린이 500원, 노약자는 무료입니다.

🚎정거장 10개 이하 이동 시 기본 요금이며, 그 이후엔 4개마다 50원씩 추가로 부과됩니다.

🔄환승은 4번 이하 무료이며, 그 이후엔 4번마다 기본요금이 추가로 부과됩니다.

🚫선불카드인 경우, 승차 도중 추가 요금을 지불할 잔액 부족 시 강제 하차될 수 있습니다.

💳교통카드의 종류로 선불카드, 후불카드, 기후동행카드가 있습니다.

  • 선불카드는 잔액 부족 시 승차할 수 없으며, 승차 전에 먼저 금액을 충전합니다.

  • 후불카드는 이용 금액을 누적하여 한 달 후에 지불합니다.

  • 기후동행카드는 한 달 동안 횟수 제한없이 승차할 수 있습니다. 요금은 62,000원입니다.

🔨기능 설명

  • 최초에 임의의 사용자 객체를 생성하여 프로그램을 실행시키고, 하차시 userList.txt파일에 사용자 기록을 저장합니다. 그 후 userList.txt에서 이용자 정보를 읽어와 프로그램을 실행합니다.

  • 나이에 따라 일반, 청소년, 어린이, 노약자 요금을 내는 사용자들은 기후동행카드, 선불카드, 후불카드 중 하나를 가지고 있습니다.

  • 사용자들은 Station에서 승차하거나 카드를 충전할 수 있고, 승차후 환승하거나 하차할 수 있습니다. 하차시 user의 카드와 나이에 따른 정보 출력 후 프로그램이 종료됩니다.

🏁다이어그램

oop-metro

📍 Station

승차와 충전 메뉴 제공

  • 임의의 사용자 객체를 생성
  • 사용자가 아이디를 입력하면 그 아이디의 사용자 정보를 가져옴
  • 사용자는 메뉴에서 1. 승차, 2. 교통카드 충전을 선택
  • 사용자가 승차하거나 충전했을 경우 잔액/사용 날짜/유효기간 날짜를 변경한 내역을 userList.txt파일에 저장

📍 Gate

승차 시 이동 거리, 환승 여부를 물어보는 메뉴 제공

  • 승차하기 전, 사용자의 선불카드에 잔액이 부족하거나, 기후동행카드의 유효기간이 만료되었을 경우 다시 Station 메뉴로 돌아감 (check 메소드)
  • 사용자는 승차 시 정거장 이동 수를 입력
  • 사용자는 이동 후 하차할지, 환승할지 여부를 입력
  • 사용자가 입력한 총 정거장 이동 수(stops), 환승 횟수(transfer)와 사용자의 정보(Card 객체, 선불카드일 경우 잔액)를 FeeInvoice에 전달
  • FeeInvoice에서 사용자의 정보에 따라 계산한 요금과 잔액/누적 금액 정보를 사용자에게 제공

📍 Charger

카드 충전 메뉴 제공 및 카드 현황 출력

  • 카드 충전 메뉴 제공
  • user가 보유한 카드의 충전 메소드 호출하여 충전 진행
  • 카드 현황 출력

📍 FeeInvoice

승하차시 요금 정보 출력 / 탑승 후 잔액 체크

  • Gate에서 Card의 정보(card 종류, card가 가지고 있는 user의 기본 요금, card의 잔액(or 누적 금액)), 이동한 정거장 수, 환승 횟수를 받아 승하차 시 ClimateCard라면 만료일 정보를, DeferredCard와 PrepaidCard라면 기본요금과 잔액(or 누적금액) 보여줌
  • 탑승 후 잔액을 체크하여 잔액 부족 시 하차 시킴

📍 User

사용자 정보에 들어갈 필드 값을 설정/가져오기

  • 사용자 정보에 들어갈 userId, name, age, price (나이에 맞는 기본 요금), card 종류

📍 UserRepository

사용자 정보 리스트 저장소

  • 임의의 사용자 정보를 리스트에 저장

📍 Card

사용자가 가지고 있는 카드 객체 저장

  • 카드 객체의 생성자, getter/setter, toString 오버라이드를 선언한 부모 클래스

📍 ClimateCard

기후동행카드의 정보

  • 카드 정보 저장(필드, 생성자, getter/setter)
  • 충전 기능 제공(충전일 입력, 유효성 체크)

📍 DeferredCard

후불카드의 정보

  • 카드 정보 저장(필드, 생성자, getter/setter)
  • 충전 기능 제공(자동결제 날짜 입력, 유효성 체크)

📍 PrepaidCard

선불카드의 정보

  • 카드 정보 저장(필드, 생성자, getter/setter)
  • 충전 기능 제공(충전금액 입력, 유효성 체크)

💜프로젝트 소감

🍒나지영

  • Gate, UserRepository, User, Station 담당

주제 선정과 요구사항 정리는 수월하게 진행하였습니다. 하지만 어떤 객체만 도출할지, 그 객체들이 서로 어떻게 상호작용하는지에 대한 3명의 생각이 다 달랐기 때문에 그 의견을 취합하는 과정이 오래 걸렸습니다. 그렇지만 그만큼 다들 구체적으로 생각했기에 많은 경우의 수를 제거할 수 있었고, 열정을 가지고 좀 더 완성도 있는 프로젝트를 제작할 수 있었다고 생각합니다.

전에 프로젝트를 진행했을 땐 주제 선정 후 각자 맡은 부분을 바로 코딩했기 때문에, 제가 맡은 것 외에는 다른 객체들이 어떻게 흘러가는지 이해하기 힘들었습니다. 이번 경험을 통해 프로젝트에 대한 이해와 집중력이 높아질 수 있도록 사전에 객체의 상호작용을 정리하는 시간이 매우 중요하다는 것을 깨달았습니다.

각자의 의견을 존중하고, 이해가 안 가는 부분은 바로 물어볼 수 있도록 이끌어준 팀의 분위기가 너무 좋았습니다. 예상치 못 한 사고로 따로 떨어져 있게 된 저의 참여도를 높일 수 있도록 현장에 있다고 생각할 만큼 소통을 잘해준 팀원분들에게 미안하고 감사합니다.

🍉박수빈

  • FeeInvoice, UserReposiotry, Station 담당

처음엔 헤매기도 하고 요구사항 도출도 이슈 작성도 쉬운 것 하나 없었습니다. 하지만 많은 대화를 나누고 UseCase 작성도 해보면서 서로의 생각을 맞춰나갔습니다. 그럼에도 아직 요구사항 도출과 이슈 작성 등은 부족하고 어렵지만 당연한 것이라 생각합니다.

테스트하는 과정에서도 많은 테스트 케이스가 발생할 수 있다는 점, 예상치 못한 부분, 여러명이 여러 테스트를 진행해야 한다는 점들을 다시 상기할 수 있던 점도 많은 도움이 된 것 같습니다. 그리고 제가 담당한 파트만 보는 것이 아니라 다른 팀원이 작성한 코드를 보며 전반적인 흐름을 파악하는 것이 중요하다는 사실도 한번 더 깨닫게 되어 배움이 많았던 프로젝트였습니다.

여러 시행착오가 있었음에도 불구하고 팀원들의 노력이 있어서 만족스러운 결과를 만들어내었습니다.

🥕정예진

  • Card, ClimateCard, DeferredCard, PrepaidCard, Charger, UserRepository, User, Station 담당

추상화하는 과정에서 각자가 생각한 클래스의 구조가 다 달라서 세세한 요구사항들을 합의해 나가는 것이 쉽지는 않았습니다. 그러나 이슈 하나 하나를 해결하면서 객체지향프로그래밍에 대한 이해의 깊이가 한층 깊어지는 것을 느꼈습니다. 각자 맡은 역할에 충실하면서도 서로의 오류를 함께 고민하며 시너지를 얻는 재미를 알게 되었습니다. 다양한 경우의 수를 생각해내고 테스트하면서 보충에 보충을 더했고 마지막까지도 긴장을 놓을 수 없던 것 같습니다. 그만큼 여기까지 온 프로그램을 보니 뿌듯합니다.

oop-metro's People

Contributors

yeahjinjeong avatar jyna120 avatar subkka avatar shqkel avatar

oop-metro's Issues

ClimateCard, DeferredCard, PrepaidCard 클래스 생성

🌈 Success criteria

  1. 각 카드에 해당하는 충전 메소드를 생성한다.
  2. ClimateCard의 사용 여부를 확인하는 메소드를 생성한다.

👷To-do

  • 각 카드에 해당하는 필드, 생성자, getter/setter, toString을 생성
  • ClimateCard, DeferredCard, PrepaidCard의 충전 메소드 생성

Station은 Gate와 Charger 중 선택할 메뉴를 제공합니다.

🌈 Success criteria

  1. 사용자는 id를 입력합니다.
  2. 사용자는 승차(Gate) 또는 충전(Charger)을 선택합니다.
  3. 승차 선택 시 요금 / 환승 사용법을 안내합니다.
  4. 충전 선택 시 카드 사용법을 안내합니다.

👷To-do

  • run.Station userMenu method 생성

Gate는 메뉴를 제공합니다.

🌈 Success criteria

  1. 사용자의 카드에 잔액이 부족하거나, 유효기간이 만료되었을시 승차를 거부당할 수 있습니다.
  2. 사용자는 승차시 정거장 이동 수를 입력합니다.
  3. 사용자는 환승 여부를 선택합니다.

👷To-do

  • Gate 생성
  • gate.menu() 생성
  • gate.check() 생성

Charger는 Card에 따라 충전 메뉴를 제공합니다.

🌈 Success criteria

  1. 사용자가 Station에서 충전을 선택한 경우입니다.
  2. ClimateCard는 고정된 충전 금액(62,000원)을 받고, 유효기간을 입력 받습니다.
  3. DeferredCard는 유효기간을 입력받습니다.
  4. PrepaidCard는 충전 금액을 입력 받습니다.

👷To-do

  • #19
  • Charger 생성

UserRepository에서 사용자의 정보를 저장합니다.

🌈 Success criteria

  1. UserRepository에서 사용자와 사용자 카드의 정보를 임의로 여러 개 저장합니다.
  2. UserRepository는 Card의 객체 - [userId:int, name:String, age:int, card:String, card:Card]가 있습니다.
  3. userId, name, age, card는 부모 클래스 User에 상속받습니다.
  4. card:Card는 카드의 종류에 따라 저장할 수 있는 객체가 다릅니다.

👷To-do

  • User 생성
  • UserRepository 생성
  • 사용자 임의 정보 저장

Gate는 사용자가 선택한 값을 FeeInvoice에 전달합니다.

🌈 Success criteria

  1. 사용자가 선택한 승차시 총 정거장 이동 수 (stops), 환승 횟수(transfer), 사용자의 정보(Card 객체)-(나이, 카드 정보(종류, 잔액, 남은 기간 등))를 FeeInvoice에 전달합니다.

👷To-do

  • Gate의 menu 메소드의 매개변수를 Card 객체로 받아오기
  • Gate에서 FeeInvoice의 승차시 반환 메소드를 호출 (파라미터는 Card 객체)

FeeInvoice 클래스 내 요금 계산 메소드 생성

🌈 Success criteria

  1. FeeInvoice 클래스 내에 Gate에서 매개인자를 매개변수로 받아 호출할 수 있는 메소드를 생성한다.

👷To-do

  • 탑승 시 기본 요금과 잔액(or 누적 금액)을 보여주는 메소드 작성
  • 하차 시 추가 요금과 잔액(or 누적 금액)을 보여주는 메소드 작성

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.