Skip to content

mropean/VideoStore

Repository files navigation

VideoStore.

1. 구상

비디오 가게의 알고리즘을 생각해보자, 비디오 가게에는 비디오가 있어야 한다. 가게를 새로 열었을 때 새 비디오를 들여와야 하므로 비디오 입고 시스템이 필요하다. 또 그 비디오를 빌려 갈 회원도 필요하다. 가게에 처음 온 사람이라면 그 가게의 회원이 되어야 대여가 가능할 것이므로 회원가입 시스템이 필요하고, 가입된 회원이라면 비디오를 빌려 갈 수 있어야 하므로 대여 시스템도 필요할 것이다. 또 빌려 간 비디오를 계속 가지고 있을 수는 없으니 반납시스템도 있어야 한다. 마지막으로 비디오와 회원을 검색할 수 있는 검색 시스템도 있어야 할 것이다.

2. 각 구상의 구체화

기본적으로

비디오와 회원의 숫자 제한이 없어야 하므로 동적 메모리를 활용하여 이중 연결리스트로 구성했다. 프로그램 종료 후 재실행 시에도 기존 데이터에서 작업할 수 있게 파일 입출력을 사용하였다. 비디오와 회원에게 각 고유 번호를 지급하여 똑같은 이름이 있어도 비교 및 확인할 수 있게 하였다. 비디오와 회원의 추가 시 이름순으로 정렬되게 하였는데 회원의 경우 같은 이름이 존재할 시 나이순으로 정렬 되게 하였고, 나이도 같다면 이전 데이터의 뒤에 추가되게 하였으며 비디오의 경우 같은 제목이 존재할 시 낮은 연도순으로 정렬 되게 하였고, 연도도 같다면 똑같은 비디오로 판단하여 추가를 거부하게 하였다. 로그 파일을 저장하는 함수를 생성하여 프로그램 시작과 종료, 비디오의 입고, 회원의 추가, 대여, 반납, 삭제 시의 순간을 기록하게 하였다.

프로그램 시작 시

프로그램 가동 시간 (년, 월, 일) 순으로 로그 파일에 입력되게 하였고 이어서 이전에 저장된 회원 파일과 비디오 파일을 불러오게 하였다. 만약 파일이 존재하지 않으면 처음부터 작성하게 된다. 파일의 데이터를 기준으로 비디오와 회원 각각의 연결리스트를 만들게 하였다.

‘회원가입 및 비디오 입고’ 메뉴

추가 메뉴를 세분화하여 회원과 비디오를 선택할 수 있게 하였다. 비디오 입고 시 비디오의 개봉연도, 제목, 수량을 입력하고 카테고리를 선택하여 해당 비디오의 장르를 선택할 수 있게 하였다. 또 카테고리로 비디오의 고유 번호의 첫 번째 인덱스를 구성하게 하여 그 번호만으로도 해당 비디오의 장르를 알 수 있게 하였다. 비디오 리스트에 같은 제목이 존재하여도 연도가 다르다면 다른 비디오로 판단하여 추가되게 되는데 연도마저 똑같다면, 똑같은 비디오로 판단되어 추가가 안 되게 하였다. 회원가입 시 회원의 이름, 전화번호, 나이를 입력하게 하였고 고유 번호를 부여하여 회원 리스트에 같은 이름이 존재하여도 다른 고유 번호 때문에 각 회원의 차이를 알 수 있게 된다. 만약 회원 리스트에 있는 전화번호와 추가를 원하는 회원의 전화번호가 같게 된다면 같은 회원이 두 명 이상 있을 필요는 없으니 추가가 안 되게 하였다. 처음 회원이 가입될 때 비디오 코드의 첫 번째 인덱스의 값이 ‘0’인 노드의 주솟값을 가지게 되는데 그 회원이 비디오를 대여 중인 상태가 아니라는 것을 알게 해준다. 회원가입 및 비디오 입고가 끝나게 되면 각 추가된 시간(시, 분, 초)이 로그 파일에 입력되게 된다.

‘회원 목록 및 비디오 목록’ 메뉴

출력메뉴를 세분화하여 현재 존재하는 회원과 비디오의 데이터들을 출력하게 되는데 회원 목록의 경우 회원들의 데이터들과 빌려 간 비디오의 제목을 출력하게 되고 비디오 목록의 경우 비디오의 데이터와 대여 개수를 출력하여 대여 여부를 알 수 있게 하였다.

‘비디오 대여’ 메뉴

탐색을 활용하여 회원의 이름 또는 전화번호를 입력받아 회원 리스트에서 똑같은 데이터를 가진 노드를 찾고 비디오의 제목 또는 카테고리를 입력받아 비디오 리스트에서 똑같은 데이터를 가진 노드를 찾아 회원 노드가 비디오 노드의 주솟값을 가지게 하여 대여를 끝내게 된다. 만약 회원 노드가 가지는 주솟값의 비디오 코드의 첫 번째 인덱스의 값이 ‘0’이 아니라면 그 회원이 비디오를 대여하고 있다는 뜻으로 대여를 거부하게 된다. 또 한 비디오의 카테고리 즉, 비디오 코드의 첫 번째 인덱스의 값이 2 또는 3이고 회원의 나이가 20세 미만이라면 대여를 거부하게 된다. 대여가 완료되면 대여된 시간(시, 분, 초)을 로그 파일에 기록하게 된다.

‘회원 검색 및 비디오 검색’ 메뉴

검색 메뉴를 세분화하여 각각 검색할 수 있게 하였다. 검색 시 탐색을 활용하였는데 회원 검색 시 이름 또는 전화번호로 검색할 수 있게 하였고 비디오 검색 시 비디오의 제목 또는 카테고리로 검색할 수 있게 하였다.

‘비디오 반납’ 메뉴

대여 메뉴와 마찬가지로 탐색을 활용하여 회원을 탐색하게 된다. 그 회원이 가지는 노드의 비디오 코드의 첫 번째 인덱스의 값이 ‘0’이라면 대여 중이 아닌 상태로서 처음 메뉴로 나가게 된다. 그게 아니라면 정상적으로 비디오의 반납이 이루어진다. 반납 또한 반납한 시간(시, 분, 초)을 로그 파일에 입력한다.

‘회원 삭제 및 비디오 삭제’ 메뉴

가입된 회원을 삭제하거나 입고된 비디오를 삭제한다. 연결리스트의 장점 중 하나가 삭제가 쉽다는 것인데 이 덕분에 삭제를 원하는 비디오 또는 회원을 리스트 중에서 찾고 해당 리스트에서 발견했다면 해당 노드의 메모리를 해제하면 된다. 그 후 총 회원의 수 또는 비디오의 개수를 한 개 줄이게 된다. 삭제 또한 삭제된 시간을 로그 파일에 입력하게 된다.

프로그램 종료 시

프로그램 종료를 선택하면 현재까지의 작업내용을 저장하게 된다. 비디오는 비디오 파일에 회원은 회원 파일에 각각 저장하는데 저장된 데이터는 바로바로 메모리를 해제하여 메모리의 오남용을 막았다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages