C++ 레스토랑 프로그램 (원격 수업 과제)
국비 지원 교육을 받으면서 원격수업 과제로 C++ 언어를 사용하여 레스토랑 프로그램을 제출해야해서 작성한 코드
원격으로 C++ 교육을 듣기는 했지만 6~8 시간 정도의 기초 강의 영상으로는 답도 없고 과제는 제출해야하고 ㅁㄴㅇㄹ
그래도 결국 밤을 새며 구글링 하며 작성했는데 지금 생각하면 추억이다
그 당시에 완전 기초 문법만 알아서 참고 할만한 내용이 있을지는 모르겠지만… 필요하면 가져가세요
app.cpp
#include <iostream> #include <string> #include <algorithm> #include <sstream> #include <list> #include <string.h> using namespace std; // 메뉴 구조체 struct sMenus { int foodNumber; string foodName; int price; }; struct sMenus sMenu[7] = { NULL }; // 주문 구조체 struct sOrders { int id = 0; sMenus food = { }; int foodQuantity = 0; // 음식의 수량 int TableNumber = 0; // 주문 테이블의 넘버 int total_price = 0; // 주문한 음식의 총 가격 bool check = false; }; //list<sOrders> orderList; struct sOrders orders[1000] = {NULL}; // order 초기화 // 메뉴 배열 string MenuNames[] = { "그린샐러드","치킨샐러드","찹스테이크","티본스테이크","치즈파스타","치즈피자" }; // 메뉴 가격 int MenuPrice[] = { 18000, 19000, 32000, 30000, 17000, 15000 }; int totalIdAmount = 0; // 입력 받은 str을 int로 변환할 수 있는지 판별하는 함수 bool IntDiscriminate(string str) { return (str.find_first_not_of("0123456789") == std::string::npos); } // str 값을 int로 변환 해주는 함수 int ConvertStrToInt32(string str) { int returnValue = 0; std::istringstream(str) >> returnValue; return returnValue; } // 시작시 초기화 void Init() { sMenu[0].foodNumber = 0; sMenu[0].foodName = "없는 메뉴"; sMenu[0].price = 0; for (int i = 1; i <= 6; i++) { sMenu[i].foodNumber = i; sMenu[i].foodName = MenuNames[i - 1]; sMenu[i].price = MenuPrice[i - 1]; } } // 메뉴를 시각적으로 보여주는 함수 void ShowMenu() { for (int i = 1; i <= 6; i++) { cout << "\n"; cout << "[" << sMenu[i].foodNumber << "]"; cout << sMenu[i].foodName << " : "; cout << sMenu[i].price; } } void SelectMenu(int totalIdAmount) { int ID = totalIdAmount; string inputStr = "Default"; int SelectTalbeNumber = -1; int SelectFoodNumber = -1; int SelectFoodAmount = -1; while (true) { cout << "\n"; inputStr = "defalt"; SelectTalbeNumber = -1; cout << "\n주문할 테이블의 번호를 입력해주세요 (1 ~ 10) : "; cin >> inputStr; if (IntDiscriminate(inputStr)) { SelectTalbeNumber = ConvertStrToInt32(inputStr); if (SelectTalbeNumber > 0 && SelectTalbeNumber < 11) { break; } cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } else { cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } } while (true) { inputStr = "defalt"; SelectFoodNumber = -1; cout << "\n주문할 메뉴의 번호를 입력해주세요 : "; cin >> inputStr; if (IntDiscriminate(inputStr)) { SelectFoodNumber = ConvertStrToInt32(inputStr); if (SelectFoodNumber > 0 && SelectFoodNumber < 7) { break; } cout << "\n" << "입력값이 잘못되었습니다." << "\n"; continue; } else { cout << "\n" << "입력값이 잘못되었습니다." << "\n"; continue; } } while (true) { inputStr = "defalt"; SelectFoodAmount = -1; cout << "\n주문할 음식의 수량을 입력해주세요 : "; cin >> inputStr; if (IntDiscriminate(inputStr)) { SelectFoodAmount = ConvertStrToInt32(inputStr); if (SelectFoodAmount > 0) { break; } cout << "\n" << "입력값이 잘못되었습니다." << "\n"; continue; } else { cout << "\n" << "입력값이 잘못되었습니다." << "\n"; continue; } } orders[ID].id = ID; orders[ID].food = sMenu[SelectFoodNumber]; orders[ID].foodQuantity = SelectFoodAmount; orders[ID].TableNumber = SelectTalbeNumber; orders[ID].total_price = sMenu[SelectFoodNumber].price * SelectFoodAmount; orders[ID].check = false; cout << "\n----------------------------------------\n" << "주문서" << "\n----------------------------------------"; cout << "\n 주문서의 id : " << ID; cout << "\n 테이블 번호 : " << SelectTalbeNumber; cout << "\n 주문 메뉴 : " << sMenu[SelectFoodNumber].foodName << " X " << SelectFoodAmount; cout << "\n 주문 가격 : " << sMenu[SelectFoodNumber].price << " X " << SelectFoodAmount << " = " << sMenu[SelectFoodNumber].price * SelectFoodAmount << " 원"; cout << "\n---------------------------------------"; } void SerachOrder() { string inputStr = "Default"; int SelectTalbeNumber = -1; while (true) { cout << "\n"; inputStr = "defalt"; SelectTalbeNumber = -1; cout << "\n확인할 테이블의 번호를 입력해주세요 (1 ~ 10) : "; cin >> inputStr; if (IntDiscriminate(inputStr)) { SelectTalbeNumber = ConvertStrToInt32(inputStr); if (SelectTalbeNumber > 0 && SelectTalbeNumber < 11) { break; } cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } else { cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } } int totalPrice = 0; bool emptyCheck = false; for (int i = 1; i <= totalIdAmount; i++) { if (orders[i].TableNumber == SelectTalbeNumber) { if (!orders[i].check) { emptyCheck = true; totalPrice += orders[i].food.price * orders[i].foodQuantity; cout << "\n----------------------------------------\n" << " 주문서 " << orders[i].id << "\n----------------------------------------"; cout << "\n 테이블 번호 : " << SelectTalbeNumber; cout << "\n 주문 메뉴 : " << orders[i].food.foodName << " X " << orders[i].foodQuantity; cout << "\n 주문 가격 : " << orders[i].food.price << " X " << orders[i].foodQuantity << " = " << orders[i].food.price * orders[i].foodQuantity << " 원"; } } } if (!emptyCheck) { cout << "\n"; cout << "\n----------------------------------------"; cout << "\n 해당 테이블의 주문서는 비어있습니다."; cout << "\n 메뉴로 다시 이동합니다."; cout << "\n----------------------------------------"; return; } cout << "\n"; cout << "\n----------------------------------------"; cout << "\n 총 금액은 : " << totalPrice << " 원 입니다."; cout << "\n----------------------------------------"; } void Payment() { string inputStr = "Default"; int SelectTalbeNumber = -1; while (true) { cout << "\n"; inputStr = "defalt"; SelectTalbeNumber = -1; cout << "\n결제할 테이블의 번호를 입력해주세요 (1 ~ 10) : "; cin >> inputStr; if (IntDiscriminate(inputStr)) { SelectTalbeNumber = ConvertStrToInt32(inputStr); if (SelectTalbeNumber > 0 && SelectTalbeNumber < 11) { break; } cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } else { cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } } int totalPrice = 0; bool emptyCheck = false; for (int i = 1; i <= totalIdAmount; i++) { if (orders[i].TableNumber == SelectTalbeNumber) { if (!orders[i].check) { emptyCheck = true; totalPrice += orders[i].food.price * orders[i].foodQuantity; cout << "\n----------------------------------------\n" << " 주문서 " << orders[i].id << "\n----------------------------------------"; cout << "\n 테이블 번호 : " << SelectTalbeNumber; cout << "\n 주문 메뉴 : " << orders[i].food.foodName << " X " << orders[i].foodQuantity; cout << "\n 주문 가격 : " << orders[i].food.price << " X " << orders[i].foodQuantity << " = " << orders[i].food.price * orders[i].foodQuantity << " 원"; } } } if (!emptyCheck) { cout << "\n"; cout << "\n----------------------------------------"; cout << "\n 해당 테이블의 주문서는 비어있습니다."; cout << "\n 메뉴로 다시 이동합니다."; cout << "\n----------------------------------------"; cout << "\n"; return; } cout << "\n"; cout << "\n----------------------------------------"; cout << "\n 총 금액은 : " << totalPrice << " 원 입니다."; cout << "\n----------------------------------------"; inputStr = "Default"; int SelectMoneyNumber = -1; while (true) { cout << "\n"; inputStr = "defalt"; SelectMoneyNumber = -1; cout << "\n 금액을 입력해주세요 : "; cin >> inputStr; if (IntDiscriminate(inputStr)) { SelectMoneyNumber = ConvertStrToInt32(inputStr); if (SelectMoneyNumber > 0) { break; } cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } else { cout << "\n" << "입력값이 잘못되었습니다.\n" << "\n"; continue; } } if (totalPrice > SelectMoneyNumber) { cout << "\n"; cout << "\n----------------------------------------"; cout << "\n 지불한 금액이 " << totalPrice - SelectMoneyNumber << " 원 부족합니다."; cout << "\n 메뉴로 다시 이동합니다."; cout << "\n----------------------------------------"; cout << "\n"; return; } else if (totalPrice <= SelectMoneyNumber) { cout << "\n"; cout << "\n----------------------------------------"; cout << "\n 결제가 완료되었습니다."; cout << "\n 거스름돈은 " << SelectMoneyNumber - totalPrice << " 원 입니다."; cout << "\n 메뉴로 이동합니다."; cout << "\n----------------------------------------"; cout << "\n"; for (int i = 1; i <= totalIdAmount; i++) { if (orders[i].TableNumber == SelectTalbeNumber) { orders[i].check = true; } } } } int main() { string MaininputStr = "Default"; int MaininputInt = -1; Init(); while (true) { cout << "\n\n\n----------------------------------------\n" << " Lycos의 레스토랑" << "\n----------------------------------------\n"; cout << "\n원하는 메뉴의 번호를 입력해주세요\n\n" << "1. 주문 입력\n" << "2. 주문 검색\n" << "3. 결제\n" << "0. 프로그램 종료\n" << "\n 메뉴의 번호 : "; cin >> MaininputStr; if (IntDiscriminate(MaininputStr)) { MaininputInt = ConvertStrToInt32(MaininputStr); } else { cout << "\n" << "입력값이 잘못되었습니다. \n메뉴로 이동합니다." << "\n"; continue; } switch (MaininputInt) { case 0: cout << "\n0.종료를 선택하셨습니다.\n"; cout << "\n프로그램을 종료합니다.\n"; return 0; case 1: cout << "\n1.주문 입력을 선택하셨습니다.\n"; ShowMenu(); totalIdAmount++; SelectMenu(totalIdAmount); break; case 2: cout << "\n2.주문 검색을 선택하셨습니다.\n"; SerachOrder(); break; case 3: cout << "\n3.결제를 선택하셨습니다.\n"; Payment(); break; default: cout << "\n해당 메뉴가 없습니다. \n다시 메뉴로 이동합니다."; break; } } }