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;
}
}
}

![Programmers 42888 오픈채팅방 [2019 KAKAO BLIND RECRUITMENT]](https://lycos7560.com/wp-content/uploads/2023/03/programmers.jpg)
![백준 1493번 (박스 채우기, C++, 분할 정복) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og-1.png)
![백준 2294번 (동전 2, C++, DP) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/boj-og.png)
![백준 26004번 (HI-ARC, C++) [BAEKJOON]](https://lycos7560.com/wp-content/uploads/2022/10/boj-og-1-2048x1070-1-1024x535.png)