C++實現KFC點餐系統
阿新 • • 發佈:2020-07-23
本文例項為大家分享了C++實現KFC點餐系統的具體程式碼,供大家參考,具體內容如下
一、題目名稱:模擬肯德基收銀系統
二、題目內容:
同學們應該都去麥當勞或肯德基吃過快餐吧?請同學們參考肯德基官網的資訊模擬肯德基快餐店的收銀系統,合理使用C++或Java或Python結合設計模式(2種以上)至少實現系統的以下功能:
1.正常餐品結算和找零。
2.基本套餐結算和找零。
3.使用優惠劵購買餐品結算和找零。
4.可在一定時間段參與店內活動(自行設計或參考官網資訊)。
5.模擬列印小票的功能(寫到檔案中)。
基本要求:
1.程式設計風格良好,控制檯介面友好,最多兩人一組完成任務。
2.實現功能測試程式碼,確保程式的健壯性。
提高要求:
1.實現視覺化介面(使用MFC)。
2.實現會員儲值卡功能,完成儲值卡消費。
實現當天營業額和餐品銷量計算和統計,用資料庫記錄。
三、演算法設計:
四、程式碼
1.點餐系統程式碼
#include<iostream> #include<string> #include<fstream> using namespace std; class Food { protected: string name; double price; int num; public: virtual double get_sum() { double sum = price * num; return sum; } virtual void set_name(string name) { this->name = name; } virtual string get_name() { return name; } virtual void set_price(double price) { this->price = price; } virtual double get_price() { return price; } virtual void set_num(int num) { this->num = num; } virtual int get_num() { return num; } }; class Hamburger :public Food { public: virtual double get_sum() { double sum = price * num; return sum; } }; class Snack :public Food { public: virtual double get_sum() { double sum = price * num; return sum; } }; class Drink :public Food { public: virtual double get_sum() { double sum = price * num; return sum; } }; class Set :public Food { public: virtual double get_sum() { double sum = price * num; return sum; } }; class Factory { public: virtual Food* food() = 0; }; class Factory_Hamburger :public Factory { public: Food* food() { return new Hamburger; } }; class Factory_Snack :public Factory { public: Food* food() { return new Snack; } }; class Factory_Drink :public Factory { public: Food* food() { return new Drink; } }; class Factory_Set :public Factory { public: Food* food() { return new Set; } }; class xiaopiao { public: virtual void output() = 0; } ; class H1 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "巨無霸--" << num << "份" <<endl; outfile << "巨無霸--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class H2 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "雙層吉士漢堡--" << num << "份" <<endl; outfile << "雙層吉士漢堡--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class H3 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "麥辣雞腿漢堡--" << num << "份" <<endl; outfile << "麥辣雞腿漢堡--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class S1 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "大薯條--" << num << "份" <<endl; outfile << "大薯條--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class S2 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "麥樂雞--" << num << "份" <<endl; outfile << "麥樂雞--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class D1 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "可口可樂--" << num << "份" <<endl; outfile << "可口可樂--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class D2 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "七喜--" << num << "份" <<endl; outfile << "七喜--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class D3 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "橙汁--" << num << "份" <<endl; outfile << "橙汁--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class SET1 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "巨無霸超值套餐--" << num << "份" <<endl; outfile << "巨無霸超值套餐--" << num << "份" << endl; outfile.close(); } } protected: int num; }; class SET2 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { if(0 != num) { ofstream outfile("receipt.dat",ios::out); cout << "雙層吉士漢堡超值套餐--" << 1 << "份" <<endl; outfile << "雙層吉士漢堡超值套餐--" << 1 << "份" << endl; outfile.close(); } } protected: int num; }; //運用策略模式簡化 class Context { public: Context(xiaopiao *p) : pStrategy(p) { } void Interface() { pStrategy->output(); } private: xiaopiao *pStrategy; }; class collect { private: public: void main_menu() { cout << "---------------------" << endl; cout << "歡迎進入肯德基點餐系統!" << endl; cout << "---------------------" << endl; cout << "請問你選擇單點(1)或者套餐(2):" << endl; } void single_menu() { cout << "---------------------" << endl; cout << "請選擇您要點的產品: " << endl; cout << "主食: " << endl; cout << " 1.巨無霸 --17元 " << endl; cout << " 2.雙層吉士漢堡--15元 " << endl; cout << " 3.麥辣雞腿漢堡--15元 " << endl; cout << "配餐: " << endl; cout << " 4.大薯條 --11元 " << endl; cout << " 5.麥樂雞 --9元 " << endl; cout << "飲料: " << endl; cout << " 6.可口可樂 --7元 " << endl; cout << " 7.七喜 --7元 " << endl; cout << " 8.橙汁 --10元 " << endl; cout << "若點餐結束,請輸入0以結束點餐!" << endl; } void set_menu() { cout << "---------------------" << endl; cout << "請選擇您要點的套餐: " << endl; cout << " 1.巨無霸超值套餐 --25元" << endl; cout << " (包含巨無霸一份、大薯條一份、可口可樂一份)" << endl; cout << " 2.雙層吉士漢堡超值套餐 --23元" << endl; cout << " (包含雙層吉士漢堡一份、大薯條一份、可口可樂一份)" << endl; cout << "若點餐結束,請輸入0以結束點餐!" << endl; } void menu() { main_menu(); int choose; int hamburger[3],snack[2],drink[3],set[2]; for (int i = 0; i < 3; i++) { hamburger[i] = 0; drink[i] = 0; } for (int i = 0; i < 2; i++) { snack[i] = 0; set[i] = 0; } cin >> choose; if (1 == choose) { single_menu(); int ch,flag=1; while(flag) { cout << "請輸入對應商品的序號:" ; cin >> ch; switch (ch) { case(0): { flag = 0; break; } case(1): { cout << "請輸入需要幾份?:"; int number; cin >> number; hamburger[0] = number; break; } case(2): { cout << "請輸入需要幾份?:"; int number; cin >> number; hamburger[1] = number; break; } case(3): { cout << "請輸入需要幾份?:"; int number; cin >> number; hamburger[2] = number; break; } case(4): { cout << "請輸入需要幾份?:"; int number; cin >> number; snack[0] = number; break; } case(5): { cout << "請輸入需要幾份?:"; int number; cin >> number; snack[1] = number; break; } case(6): { cout << "請輸入需要幾份?:"; int number; cin >> number; drink[0] = number; break; } case(7): { cout << "請輸入需要幾份?:"; int number; cin >> number; drink[1] = number; break; } case(8): { cout << "請輸入需要幾份?:"; int number; cin >> number; drink[2] = number; break; } default: { cout << "請輸入正確的序號!" << endl; break; } } } } else if (2 == choose) { set_menu(); int ch,flag = 1; while (flag) { cout << "請輸入對應商品的序號:"; cin >> ch; switch (ch) { case(0): { flag = 0; break; } case(1): { cout << "請輸入需要幾份?:"; int number; cin >> number; set[0] = number; break; } case(2): { cout << "請輸入需要幾份?:"; int number; cin >> number; set[1] = number; break; } default: { cout << "請輸入正確的序號!" << endl; break; } } } } //生成漢堡工廠類 Factory_Hamburger* fac_h = new Factory_Hamburger(); //生成具體的漢堡類 Food* hamburger1 = fac_h->food(); Food* hamburger2 = fac_h->food(); Food* hamburger3 = fac_h->food(); //例項化各個漢堡 //巨無霸 hamburger1->set_name("巨無霸"); hamburger1->set_price(17); hamburger1->set_num(hamburger[0]); //雙層吉士漢堡 hamburger2->set_name("雙層吉士漢堡"); hamburger2->set_price(15); hamburger2->set_num(hamburger[1]); //麥辣雞腿漢堡 hamburger3->set_name("麥辣雞腿漢堡"); hamburger3->set_price(15); hamburger3->set_num(hamburger[2]); //生成小吃工廠類 Factory_Snack* fac_s = new Factory_Snack(); //生成具體的小吃類 Food* snack1 = fac_s->food(); Food* snack2 = fac_s->food(); //例項化各個小吃 //大薯條 snack1->set_name("大薯條"); snack1->set_price(11); snack1->set_num(snack[0]); //麥樂雞 snack2->set_name("麥樂雞"); snack2->set_price(9); snack2->set_num(snack[1]); //生成飲料工廠類 Factory_Drink* fac_d = new Factory_Drink(); //生成具體的飲料類 Food* drink1 = fac_d->food(); Food* drink2 = fac_d->food(); Food* drink3 = fac_d->food(); //例項化各個飲料 //可口可樂 drink1->set_name("可口可樂"); drink1->set_price(7); drink1->set_num(drink[0]); //七喜 drink2->set_name("七喜"); drink2->set_price(7); drink2->set_num(drink[1]); //橙汁 drink3->set_name("橙汁"); drink3->set_price(7); drink3->set_num(drink[2]); //生成套餐工廠類 Factory_Set* fac_se = new Factory_Set(); //生成具體的套餐類 Food* set1 = fac_se->food(); Food* set2 = fac_se->food(); //例項化各個套餐 //巨無霸超值套餐 set1->set_name("巨無霸超值套餐"); set1->set_price(25); set1->set_num(set[0]); //雙層吉士漢堡超值套餐 set2->set_name("雙層吉士漢堡超值套餐"); set2->set_price(23); set2->set_num(set[1]); //找零部分 cout << "---------------------" << endl; double sum = 0; sum = sum + hamburger1->get_sum(); sum = sum + hamburger2->get_sum(); sum = sum + hamburger3->get_sum(); sum = sum + snack1->get_sum(); sum = sum + snack2->get_sum(); sum = sum + drink1->get_sum(); sum = sum + drink2->get_sum(); sum = sum + drink3->get_sum(); sum = sum + set1->get_sum(); sum = sum + set2->get_sum(); cout << "您共計消費:" << sum << endl; cout << "請問您是否使用優惠券?(輸入0已接受)"; int ch; cin >> ch; int yhq=0; if (0 == ch) { cout << "您擁有如下優惠券:" << endl; cout << "-1.滿50減5" << endl; cout << "-2.滿100減15" << endl; cout << "-3.滿200減40" << endl; cout << "每次消費僅能使用一張優惠券,請選擇使用的優惠券" << endl; int flag = 1; while (flag) { int ch; cin >> ch; if (ch == 1) { if (sum > 50) { sum -= 5; cout << "使用消費券成功!"; } else { cout << "您的消費金額還不能使用優惠券!" << endl; } flag = 0; } if (ch == 2) { if (sum > 100) { sum -= 15; cout << "使用消費券成功!";} else { cout << "您的消費金額還不能使用優惠券!" << endl; } flag = 0; } if (ch == 3) { if (sum > 200) { sum -= 40; cout << "使用消費券成功!";} else { cout << "您的消費金額還不能使用優惠券!" << endl; } flag = 0; } if (ch == 0) { cout << "不使用優惠券" << endl; flag = 0; } } } cout << "請問您支付多少:"; double pay; cin >> pay; double payback = pay - sum; while (0 > payback) { cout << "您好,您的錢不夠本次消費(微笑.jpg),請重給,謝謝您哦~"; cin >> pay; payback = pay - sum; } cout << "共計收您" << pay << "元。" << endl; cout << "找零為:" << payback << "元" << endl; int cho; cout << "---------------------" << endl; cout << "請選擇是否列印小票:(輸入0以列印)" << endl; cin >> cho; if (0 == cho) { //列印小票部分 /* ofstream outfile("receipt.dat",ios::out); cout << "---------------------" << endl; outfile << "---------------------" << endl; cout << "歡迎來到肯德基歡樂餐廳!" << endl; outfile << "歡迎來到肯德基歡樂餐廳!" << endl; cout << "您共計點餐:" << endl; outfile << "您共計點餐:" << endl; cout << endl; outfile << endl; if (0 != hamburger[0]) { cout << "巨無霸--" << hamburger[0] << "份" <<endl;outfile << "巨無霸--" << hamburger[0] << "份" << endl; } if (0 != hamburger[1]) { cout << "雙層吉士漢堡--" << hamburger[1] << "份" << endl;outfile << "雙層吉士漢堡--" << hamburger[1] << "份" << endl; } if (0 != hamburger[2]) { cout << "麥辣雞腿漢堡--" << hamburger[2] << "份" << endl; outfile << "麥辣雞腿漢堡--" << hamburger[2] << "份" << endl;} if (0 != snack[0]) { cout << "大薯條--" << snack[0] << "份" << endl;outfile << "大薯條--" << snack[0] << "份" << endl; } if (0 != snack[1]) { cout << "麥樂雞--" << snack[1] << "份" << endl; outfile << "麥樂雞--" << snack[1] << "份" << endl;} if (0 != drink[0]) { cout << "可口可樂--" << drink[0] << "份" << endl;outfile << "可口可樂--" << drink[0] << "份" << endl; } if (0 != drink[1]) { cout << "七喜--" << drink[1] << "份" << endl; outfile << "七喜--" << drink[1] << "份" << endl;} if (0 != drink[2]) { cout << "橙汁--" << drink[2] << "份" << endl;outfile << "橙汁--" << drink[2] << "份" << endl; } if (0 != set[0]) { cout << "巨無霸超值套餐--" << set[0] << "份" << endl;outfile << "巨無霸超值套餐--" << set[0] << "份" << endl; } if (0 != set[1]) { cout << "雙層吉士漢堡超值套餐--" << set[1] << "份" << endl; outfile << "雙層吉士漢堡超值套餐--" << set[1] << "份" << endl;} cout << "---------------------" << endl; outfile << "---------------------" << endl; cout << "共計收您" << pay << "元。" << endl; outfile << "共計收您" << pay << "元。" << endl; cout << "找零為:" << payback << "元" << endl; outfile << "找零為:" << payback << "元" << endl; */ ofstream outfile("receipt.dat",ios::out); cout << "---------------------" << endl; outfile << "---------------------" << endl; cout << "歡迎來到肯德基歡樂餐廳!" << endl; outfile << "歡迎來到肯德基歡樂餐廳!" << endl; cout << "您共計點餐:" << endl; outfile << "您共計點餐:" << endl; cout << endl; outfile << endl; H1 *h1 = new H1; h1->get_num(hamburger[0]); H2 *h2 = new H2; h2->get_num(hamburger[1]); H3 *h3 = new H3; h3->get_num(hamburger[2]); S1 *s1 = new S1; s1->get_num(snack[0]); S2 *s2 = new S2; s2->get_num(snack[1]); D1 *d1 = new D1; d1->get_num(drink[0]); D2 *d2 = new D2; d2->get_num(drink[1]); D3 *d3 = new D3; d3->get_num(drink[2]); SET1 *set1 = new SET1; set1->get_num(set[0]); SET2 *set2 = new SET2; set2->get_num(set[1]); Context *ph1 = new Context(h1); Context *ph2 = new Context(h2); Context *ph3 = new Context(h3); Context *ps1 = new Context(s1); Context *ps2 = new Context(s1); Context *pd1 = new Context(d1); Context *pd2 = new Context(d2); Context *pd3 = new Context(d3); Context *pset1 = new Context(set1); Context *pset2 = new Context(set2); ph1->Interface(); ph2->Interface(); ph3->Interface(); ps1->Interface(); ps2->Interface(); pd1->Interface(); pd2->Interface(); pd3->Interface(); pset1->Interface(); pset2->Interface(); cout << endl; outfile << endl; cout << "---------------------" << endl; outfile << "---------------------" << endl; cout << "---------------------" << endl; outfile << "---------------------" << endl; cout << endl; outfile << endl; cout << "共計收您" << pay << "元。" << endl; outfile << "共計收您" << pay << "元。" << endl; cout << "找零為:" << payback << "元" << endl; outfile << "找零為:" << payback << "元" << endl; outfile.close(); //運用策略模式簡化上列大量if語句 } } }; int main() { collect c; c.menu(); }
2.測試程式碼
#include <iostream> #include <fstream> using namespace std; class xiaopiao { public: virtual void output() = 0; } ; class H1 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { ofstream outfile("receipt.dat",ios::out); cout << "巨無霸--" << num << "份" <<endl; outfile << "巨無霸--" << num << "份" << endl; outfile.close(); } protected: int num; }; class H2 : public xiaopiao { public: void get_num(int n) { num = n; } void output() { ofstream outfile("receipt.dat",ios::out); cout << "雙層吉士漢堡--" << num << "份" <<endl; outfile << "雙層吉士漢堡--" << num << "份" << endl; outfile.close(); } protected: int num; }; class H3 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "麥辣雞腿漢堡--" << 1 << "份" <<endl; outfile << "麥辣雞腿漢堡--" << 1 << "份" << endl; outfile.close(); } }; class S1 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "大薯條--" << 1 << "份" <<endl; outfile << "大薯條--" << 1 << "份" << endl; outfile.close(); } }; class S2 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "麥樂雞--" << 1 << "份" <<endl; outfile << "麥樂雞--" << 1 << "份" << endl; outfile.close(); } }; class D1 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "可口可樂--" << 1 << "份" <<endl; outfile << "可口可樂--" << 1 << "份" << endl; outfile.close(); } }; class D2 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "七喜--" << 1 << "份" <<endl; outfile << "七喜--" << 1 << "份" << endl; outfile.close(); } }; class D3 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "橙汁--" << 1 << "份" <<endl; outfile << "橙汁--" << 1 << "份" << endl; outfile.close(); } }; class SET1 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "巨無霸超值套餐--" << 1 << "份" <<endl; outfile << "巨無霸超值套餐--" << 1 << "份" << endl; outfile.close(); } }; class SET2 : public xiaopiao { public: void output() { ofstream outfile("receipt.dat",ios::out); cout << "雙層吉士漢堡超值套餐--" << 1 << "份" <<endl; outfile << "雙層吉士漢堡超值套餐--" << 1 << "份" << endl; outfile.close(); } }; class Context { public: Context(xiaopiao *p) : pStrategy(p) { } void Interface() { pStrategy->output(); } private: xiaopiao *pStrategy; }; int main() { ofstream outfile("receipt.dat",ios::out); cout << "---------------------" << endl; outfile << "---------------------" << endl; cout << "歡迎來到麥當勞歡樂餐廳!" << endl; outfile << "歡迎來到麥當勞歡樂餐廳!" << endl; cout << "您共計點餐:" << endl; outfile << "您共計點餐:" << endl; cout << endl; outfile << endl; H1 *h1 = new H1; h1->get_num(2); H2 *h2 = new H2; h2->get_num(3); H3 *h3 = new H3; S1 *s1 = new S1; S2 *s2 = new S2; D1 *d1 = new D1; D2 *d2 = new D2; D3 *d3 = new D3; SET1 *set1 = new SET1; SET2 *set2 = new SET2; Context *ph1 = new Context(h1); Context *ph2 = new Context(h2); Context *ph3 = new Context(h3); Context *ps1 = new Context(s1); Context *ps2 = new Context(s1); Context *pd1 = new Context(d1); Context *pd2 = new Context(d2); Context *pd3 = new Context(d3); Context *pset1 = new Context(set1); Context *pset2 = new Context(set2); ph1->Interface(); ph2->Interface(); ph3->Interface(); ps1->Interface(); ps2->Interface(); pd1->Interface(); pd2->Interface(); pd3->Interface(); pset1->Interface(); pset2->Interface(); if (h1) delete h1; if (h2) delete h2; if (h3) delete h3; if (s1) delete s1; if (s2) delete s2; if (d1) delete h1; if (d2) delete d2; if (d3) delete d3; if (set1) delete set1; if (set2) delete set2; }
五、結果展示
六、總結
1.本次作業為KFC點餐系統,剛開始的想法是用Java做,但是在看了許多資料結合自己的情況,最終採用C++來寫程式,C++確實較Java熟悉了很多。
2.這次只做了基本要求,沒有做提高要求,我會在後面的學習中,結合視覺化介面和資料庫連線,將點餐系統完善。
3.主要運用到設計模式中的策略模式和工廠模式,其中工廠模式負責生產餐廳中的各種食物的物件,策略模式負責在生成小票時避免出現冗雜的if語句。
4.從RPG遊戲和KFC點餐系統兩次的作業來看,這兩次的程式碼認為量來說都是比較大的,對於其中的一些函式功能的使用,還有設計模式的理解並且不到位。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。