2014학년도 2학기컴퓨터공학실습2:C++ (CSE2013-42) 기말 프로젝트 보고서치킨집 회원 및 주문 관리 시스템프로그램 목적Linked list, priority queue와 같은 자료구조를 실제로 구현해보고 그 자료구조를 이용해 정렬, 삽입, 검색 등 대표적인 알고리즘을 실생활에 적용해본다.프로그램 구현을 위한 자료 및 기술프로그램에 사용한 자료 및 기술프로그램을 작성하기 위해서 C++에서 제공해주는 기본 라이브러리와 클래스를 사용하였고, 프로그램을 보다 체계적으로 만들기 위해 헤더 파일을 작성해서 사용하였다. 사용한 기본 라이브러리는 다음과 같다.stringiostreamstdlib.hfstream작성한 헤더는 다음과 같다.handler.hmember.hmemberHandler.horder.horderHandler.h프로그램 구현에 사용한 특징적인 기술은 다음과 같다.Priority queueVIP고객을 주문 리스트의 앞쪽에 우선 배치하여 먼저 치킨을 배달한다.Linked list동적인 고객 리스트와 주문 리스트를 만들어서 원하는 위치에 삽입 및 삭제를 하고, 필요 없는 메모리의 소비를 방지한다.Modified Bubble sort고객을 조건에 따라 정렬할 때 사용한다. Bubble sort를 사용하되, 불필요한 swap을 줄여서 보다 빠른 정렬을 할 수 있도록 한다.SearchLinked list를 traverse하여 원하는 정보를 검색한다.또한 객체지향성을 살리기 위하여 다섯 가지의 클래스를 만들었고, 클래스 간의 참조와 상속을 선언했다.개발 환경프로그램 개발은 Microsoft Visual Studio Professional 2013 (버전: 12.0)을 이용하였다.프로그램 기능 소개 및 구현Figure SEQ Figure * ARABIC 1 메인 메뉴프로그램을 실행시키면 크게 네 가지의 기능을 수행할 수 있다. Member 메뉴는 멤버 관리 모드를 실행하고, Order 메뉴는 주문 관리 모드를 실행한다. Clear는 현재 화면을 지우고 Ex을 검색해서 나온 회원을 삭제한다.DeleteAll리스트에 존재하는 모든 회원을 삭제한다.Display현재 리스트에 존재하는 모든 회원을 출력한다. 이름, 전화번호, 주소, 포인트가 출력되며, vip 회원의 경우 vip 여부와 외상 여부가 출력된다.Search리스트를 처음부터 탐색하여 조건에 맞는 회원을 출력한다. Name의 경우 같은 이름의 회원을 출력하고, Phone의 경우 핸드폰번호로 검색한다. Vip의 경우 vip인 회원 모두를 출력한다.Sort조건에 맞춰 회원을 정렬한다. Bubble sort를 사용하였는데, 필요 없는 swap을 줄여서 보다 빠른 정렬을 했다. Name의 경우 이름 오름차순으로 정렬하고, Point는 내림차순, Vip는 vip 회원들을 앞쪽으로 보이게 정렬한다.Save현재 리스트에 입력된 멤버를 입력 받은 파일 이름에 저장한다. 이 때 .member 확장자로 저장된다.Load회원 정보를 저장한 파일에서 현재 리스트로 정보를 불러온다. 이미 리스트에 회원이 있을 경우, 초기화하고 새로 불러올 것인지 묻는다. .member 확장자를 갖는 파일만 불러올 수 있다.OrderFigure SEQ Figure * ARABIC 3 Order 메뉴의 서브메뉴Order 메뉴로 들어가면 다음과 같은 기능들을 실행할 수 있다.Add주문을 추가한다. 고객이 회원일 경우 포인트를 증가시켜주고, vip 회원인 경우 외상으로 처리할 것인지 아닌지 묻는다. 외상으로 처리할 경우 현재 수익에 추가하지 않는다. Linked list를 이용한 Priority queue로 구현하였으며, vip회원의 주문은 queue에 저장될 때 우선순위를 가져 앞쪽으로 이동한다.Complete주문 받은 순서대로 주문을 한 개씩 처리한다. Priority queue이기 때문에 Vip 고객의 주문이 먼저 처리된다.ShowIncome현재 수익을 보여준다.Display현재 리스트에 있는 모든 주문 정보를 출력한다. Vip 회원의 경우 외상 여부도 출력한다.PayVip 고객의 외상값을 처리하는andler와 MemberHandler 클래스를 위한 추상 클래스이다. OrderHandler와 MemberHandler에 포함되는 기본 기능인 print(), save(), load()에 대한 순수 가상 함수만 포함하고 있다.OrderHandlerOrderHandler 클래스는 Order 객체를 담는 node로 이루어진 linked list를 만들어 주문 관리를 하는 클래스이다.struct Node, struct List주문 정보 Node와 Node로 이루어진 List 구조체이다.int sell현재 수익을 저장한다.생성자와 소멸자Linked list를 초기화하고 프로그램 종료 시 동적 할당된 메모리를 지운다.Add 함수주문을 add 할 때 addOrder( ) 함수를 호출한다. 일반 회원이거나 비회원인 경우 add( ) 함수를 호출하고, vip 회원인 경우 addVip( ) 함수를 호출한다. Vip 회원은 우선 순위를 갖기 때문에 queue의 앞에 (vip 회원 주문의 바로 뒤) 추가한다.completeOrder( )주문 queue에서 가장 첫 번째 원소를 제거하여 치킨 배달을 완료한다. Vip 회원의 주문이 가장 먼저 완료된다.getSell( )현재 수익을 보여준다.print, save, load기반 클래스인 Handler 클래스의 함수를 오버라이딩한다. 각각 현재 리스트를 출력하고, 저장하고, 불러오는 함수이다. 정보를 저장할 때는 .order 확장자로 저장되고, 불러올 때는 .order 확장자를 갖는 파일만 불러올 수 있다. Load 함수에서 이미 리스트에 주문 정보가 있을 때는 현재 리스트를 초기화하고 불러올 것인지 묻는다.initializeList( )List를 초기화한다. 이 때 List에 들어있던 주문 정보만 삭제하고, list 자체의 동적 메모리는 유지한다.MemberHandlerMemberHandler 클래스는 Member 객체를 담는 node로 이루어진 linked list를 만들어 멤버들의 정보를 처리하는 클래스이다.struct Membe 전화번호를 이용하고, searchVip( )는 vip인 회원을 모두 출력한다. searchName( )과 searchPnum( )은 각각 회원이 존재할 경우 해당 MemberNode 포인터를 반환한다.sort 함수sort 함수는 불필요한 swap을 줄인 bubble sort를 이용하여 조건에 따라 정렬하는 함수이다. sortName( )의 경우 이름을 오름차순으로 정렬하고, sortPoint( )는 포인트를 내림차순으로 정렬한다. sortVip( )는 vip인 회원들을 모두 리스트의 앞쪽으로 보내어 정렬한다.print, save, load기반 클래스인 Handler 클래스의 함수를 오버라이딩한다. 각각 현재 회원 리스트의 모든 회원을 출력하고, 파일에서 정보를 불러오고, 파일에 정보를 저장하는 함수이다. 저장할 때는 .member 확장자로 저장하고, 불러올 때는 .member 확장자를 갖는 파일만 불러올 수 있다. 현재 멤버 리스트에 멤버가 저장되어 있을 때는 리스트를 초기화하고 불러올 것인지 묻는다.OrderOrder는 주문 정보 클래스로, 각 주문 정보를 저장하는 객체를 생성한다.Private 멤버 변수치킨 정보를 포함하는 Chicken chicken 변수와 주문자 정보 변수를 private 멤버 변수로 갖는다.Public 멤버 변수Public 멤버 변수는 회원인지 아닌지 구분하는 bool mem, vip인지 아닌지 구분하는 bool vip, 외상인지 아닌지 구분하는 bool unpaid가 있다.접근 함수들 (set, get)각 private 멤버에 접근할 수 있는 함수들이 있다.생성자Chicken struct와 주문자 이름, 주소, 핸드폰 번호를 입력받아서 Order 객체를 만든다.calCprice( )치킨의 수량과 종류에 따라서 가격을 계산한다. 후라이드 치킨은 8500원, 양념치킨은 9500원, 반반은 10000원이다.print( )자신(Order 객체)의 정보를 출력하는 함수이다.MemberMember 클래스는 회원 정보 클래스로, 각 회원정보를 딩하였다. MemberHandler 클래스에서 MemberNode를 sort 할 때 swap 작업을 보다 편하게 하기 위하여 구현하였다.실행 화면Member 메뉴Figure SEQ Figure * ARABIC 5 Member – InsertFigure SEQ Figure * ARABIC 6 Member - Insert (이미 있는 회원일 때)Figure SEQ Figure * ARABIC 7 Member – DisplayFigure SEQ Figure * ARABIC 8 Member - DeleteOne (존재하지 않을 때)Figure SEQ Figure * ARABIC 9 Member - DeleteOne (존재할 때)Figure SEQ Figure * ARABIC 10 Member – DeleteAllFigure SEQ Figure * ARABIC 11 Member - Search (Name)Figure SEQ Figure * ARABIC 12 Member - Search (존재하지 않는 경우)Figure SEQ Figure * ARABIC 13 Member - Sort (Point)Figure SEQ Figure * ARABIC 14 Member – SaveFigure SEQ Figure * ARABIC 15 Member – LoadOrder 메뉴Figure SEQ Figure * ARABIC 16 Order – Add포인트가 3000점을 초과하면 VIP로 등급이 올라간다.Figure SEQ Figure * ARABIC 17 Order – CompleteFigure SEQ Figure * ARABIC 18 Order - Add (Vip 외상)Figure SEQ Figure * ARABIC 19 Order – DisplayVIP의 주문이 앞에 배열되어 있다.Figure SEQ Figure * ARABIC 20 Order – ShowIncomeFigure SEQ Figure * ARABIC 21 Order – PayFigure 확인
ㅅㄱㄱ대학교 ㅇㅇㅇ교수님 시스템프로그래밍 첫번째 과제 레포트입니다. (고득점)● 기기에서의 byte ordering (Endianness)● Integer type representation● Pointer type과 String위 세가지에 대해 직접 프로그래밍 및 분석해보는 과제에서 프로그램 소스 코드입니다.(레포트도 판매중)