C++课程设计自助点餐系统 下载本文

面向对象程序课程设计

(2014/2015学年第一学期第20周)

指导教师: 庄巧莉、杨东鹤

班级:计算机科学与技术13(1)

学号:你好你好你 姓名:你好你啊哈啊啊啊

面向对象程序课程设计

目 录

一、 题目 二、 需求分析 三、 系统结构图 四、 类的设计 五、 程序代码与说明 六、 运行结果与分析 七、 心得与体会

一:题目

自助点餐系统

二:需求分析

有一个小型餐厅,该餐厅提供即时就餐和外卖服务。现在这个餐厅

打算使用自助点餐系统,让顾客自己点餐,实现以下功能。 1、根据顾客的选择正确打出账单

2、正确统计出每一天的及时就餐和外卖的销售情况 3、实现对餐厅菜式和价格的有效管理 4、考虑点餐的自动排序问题,使顾客可以实时查询到自己菜单处理情况

三:系统结构图

四:类的设计

Client类:客户类,包含客户属性姓名,电话号码,费用等信息,登记客户,

记录客户订单信息

ClientManager类:客户管理类,用于管理客户,记录客户数量,存储客户菜

单信息,查询客户订单信息,统计订单

FeeManager类:用于记录就餐、外卖的销售费用,统计收入 Food类:餐厅食物的类,包含食物名称和价格

FoodManager类:管理菜单,用于添加食物,修改食物,删除食物,记录不

同食物的信息,呈现菜单

MenuView类:用于打印各种操作界面

五:程序代码与说明

Client.h

#ifndef CLIENT #define CLIENT

#include\#include using namespace std; class Client {

private: int number; //客户编号 int type; //客户的类型,1表示就餐,2表示外卖 double fee; //客户账单费用 char *name; //客户名称 char *phone; //客户手机号码 public: Client(){} //构造函数 char * getName(); //返回客户姓名 int num[100]; //num[i]存储食物数量,i表示食物编号 FoodManager client_fm; //管理客户所点的食物

Client(char *n,char *p);//构造函数 int getNumber(); //返回客户编号 void setNumber(int n); //设置客户编号 int getType(); //返回客户类型 void setType(int n); //设置客户类型 void addFee(double x); //添加费用 double getFee(); //返回费用 void showClientMessage();//展示客户信息 void changNum(); //修改客户所点的食物的数量 void deleFood(); //删除客户所选择的食物 }; #endif Client.cpp

#include\#include

Client::Client(char *s,char *p) { name = s; phone = p; fee = 0; for(int i = 0 ; i < 100 ; i++) num[i] = 0 ; cout<<\客户注册成功\}

int Client::getNumber() { return number; }

void Client::setNumber(int n) { number = n; }

int Client::getType() { return type; }

void Client::setType(int n) { type = n; }

void Client::addFee(double x) { fee += x;

}

double Client::getFee() { return fee; }

void Client::showClientMessage() { char * ss; if(type == 1)ss = \就餐\ else if(type == 2)ss = \外卖\ cout<<\姓名: \ cout<<\手机号码: \ cout<<\订单总价: \ cout<<\订单详情:\ cout<

char * Client::getName() { return name; }

void Client::changNum() { int n; int numss; cout<<\请输入食物序号: \ cout<<\您选择了食物: \ cout<<\请输入数量: \ fee += (numss - num[n-1] )*client_fm.getPriceByName(client_fm.getNameByList(n-1)); num[n-1]=numss; }

void Client::deleFood() { int n; cout<<\请输入食物序号: \ cout<<\您选择了食物: \ fee -= (num[n-1] )*client_fm.getPriceByName(client_fm.getNameByList(n-1));

for(int i = n-1 ; i < client_fm.getTotal() ; i ++) { client_fm.food[i]=client_fm.food[i+1]; num[i]=num[i+1]; } client_fm.setTotal(client_fm.getTotal()-1); }

ClientManager.h

#ifndef CLIENTMANAGER #define CLIENTMANAGER #include\#include using namespace std;

#define MAX_CLIENT_NUM 60 //最大客户数量 class ClientManager {

public: ClientManager(); //构造函数 int clientNum ; //记录客户数量 Client client[MAX_CLIENT_NUM]; //记录存储客户 void addClient(Client c); //添加新客户 int getClientNum(); //返回客户数量 void showQuery(char * s); //查询客户 void showAll(); //显示所有客户 }; #endif

ClientManager.cpp

#include\

ClientManager::ClientManager() { clientNum = 0; }

void ClientManager::addClient(Client c) { client[clientNum++] = c; cout<<\客户注册成功\}

int ClientManager::getClientNum() { return clientNum; }

void ClientManager::showQuery(char * s) {

int count = 0; int th; cout<<\ for(int i = 0; i < clientNum ; i ++) if(client[i].getType()==1) { cout<<\第\单: \总价是: \元\就餐\ if(strcmp(client[i].getName(),s)==0)th =count; } for(int i = 0; i < clientNum ; i ++) if(client[i].getType()==2) { cout<<\第\单: \总价是: \元\外卖\ if(strcmp(client[i].getName(),s)==0)th =count; } cout<<\您当前排在第\单\ cout<<\}

void ClientManager::showAll() { for(int i = 0 ; i < clientNum ; i ++ ) { if(client[i].getType()==1) { cout<<\订单号: \ client[i].showClientMessage(); cout<

Food.h

#ifndef FOOD

#define FOOD class Food { private: char *name; //食物名称 double price; //食物价格 public: Food(){}; //构造函数 Food(char *s,double p); //构造函数 void setName(char *s); //更改食物名称 char* getName(); //返回食物名称 double getPrice(); //返回食物价格 void setPrice(double p); //设置食物价格 void showMessage(); //显示食物的名称和价格 }; #endif Food.cpp

#include\#include using namespace std;

Food::Food(char *s,double p) { name = s; price = p; }

void Food::setName(char *s) { name = s; }

void Food::setPrice(double p) { price = p; }

void Food::showMessage() { cout<

double Food::getPrice() { return price; }

char* Food::getName() { return name;

}

FoodManager.h

#ifndef FOODMANAGER #define FOODMANAGER #include\

#define MAX_FOOD_NUM 99 //最多容纳的食物种类数 class FoodManager { int total ; //食物种类数 public: FoodManager(); //构造函数 int getTotal() ; //返回食物种类数 Food food[MAX_FOOD_NUM]; //记录食物 void addFood(Food f); //添加食物 void addFood(char *s,double p); //添加食物 void deleteFood(); //删除食物 void changePrice(); //修改食物价格 void showFood(); //显示食物信息 char * getNameByList(int list); //通过食物编号返回食物名称 double getPriceByName(char *s); //通过食物名称返回食物价格 int getListByName(char *s); //通过食物名称返回食物编号 void setTotal(int x); //修改食物种类数 }; #endif

FoodManager.cpp

#include\#include using namespace std; #include

FoodManager::FoodManager() { total = 0; }

void FoodManager::addFood(Food f) { food[total++]=f; cout<<\成功添加了食物,当前共有\}

void FoodManager::showFood() { cout<<\食物中共有\种\ cout<<\食物编号 \名称\\t\\t\单价\ for(int i = 0 ; i < total ; i ++ )

cout<

void FoodManager::changePrice() { char *s; int code; s = new char[20]; double p; cout<<\请输入食物编号: \ cin>>code; s = food[code].getName(); cout<<\您选择了食物: \ cout<<\请输入价格: \ cin>>p; for(int i = 0; i < total ; i ++) if(strcmp(food[i].getName(),s)==0) { food[i].setPrice(p); cout<<\修改成功\ return; } cout<<\没有这种食物,修改失败\}

void FoodManager::deleteFood() { char *s; s = new char[20]; cout<<\请输入菜名: \ cin>>s; for(int i = 0 ; i < total ; i ++) if(strcmp(food[i].getName(),s)==0) { cout<<\成功删除\ total --; for(int t = i; t < total ; t ++) food[t]=food[t+1]; return; } cout<<\没有这种食物\

}

void FoodManager::addFood(char *s , double p) { food[total++]=Food(s,p); }

double FoodManager::getPriceByName(char *s) { for(int i = 0 ; i < total ; i ++) if(strcmp(food[i].getName(),s)==0) return food[i].getPrice(); return false; }

int FoodManager::getListByName(char *s) { for(int i = 0 ; i < total ; i ++) if(strcmp(food[i].getName(),s)==0) return i; return false; }

int FoodManager::getTotal() { return total; }

char * FoodManager::getNameByList(int list) { return food[list].getName(); }

void FoodManager::setTotal(int x) { total = x; }

FeeManager.h

#ifndef FEEMANAGER #define FEEMANAGER class FeeManager {

private: double jiuCanFee; //就餐总收入 double waiMaiFee; //外卖总收入 public: FeeManager(); //构造函数 double getWaiMaiFee(); //返回外卖总收入 double getJiuCanFee(); //返回就餐总收入

void addWaiMaiFee(double x); //增加外卖总收入 void addJiuCanFee(double x); //添加就餐总收入 }; #endif

FeeManager.cpp

#include\FeeManager::FeeManager() { jiuCanFee = 0; waiMaiFee = 0; }

double FeeManager::getWaiMaiFee() { return waiMaiFee; }

double FeeManager::getJiuCanFee() { return jiuCanFee; }

void FeeManager::addWaiMaiFee(double x) { waiMaiFee += x; }

void FeeManager::addJiuCanFee(double x) { jiuCanFee += x; }

MenuView.h

#ifndef MENUVIEW #define MENUVIEW class MenuView { private: char whiteSmile; //白色笑脸 char blackSmile; //黑色笑脸 char heart; //心形图形 public: MenuView(); //构造函数 void showJiuCan(); //显示就餐用户点菜界面 void showWaiMai(); //显示外卖用户点菜界面 int showMain(); //显示用户选择就餐还是外卖界面 int showViewChoice(); //显示进入本系统的功能选择界面 int showRegister(); //显示客户注册界面 int showClientChoice(); //显示客户点餐界面

int showQuery(); //显示查询客户订单界面 int showMend(); //显示修改食物界面 int showMenuChoice(); //显示选择菜单界面 int showMendDingDan(); //显示客户修改订单界面 }; #endif

MenuView.cpp

#include\#include using namespace std; MenuView::MenuView() { whiteSmile = 1; blackSmile = 2; heart = 3; }

int MenuView::showMain() { for(int i = 1 ; i <= 80 ; i++ )cout<

int choice; cin>>choice; return choice; }

void MenuView::showJiuCan() { cout<<\欢迎就餐,本餐厅有以下食品供您品尝\}

int MenuView::showViewChoice() { for(int i = 1 ; i <= 80 ; i++ )cout<>next; cout<

int MenuView::showRegister() { cout<<\ cout<<\ 1:新顾客点餐 |\ cout<<\ 2:查询订单 |\ cout<<\ int next; cin>>next; return next; }

int MenuView::showClientChoice() { cout<<\ cout<<\ 1:加菜 |\

cout<<\ 2:修改订单 |\ cout<<\ 3:提交订单 |\ cout<<\ int next; cin>>next; return next; }

int MenuView::showQuery() { cout<<\ cout<<\ 1:查询订单 |\ cout<<\ 2:退出查询 |\ cout<<\ int next; cin>>next; return next; }

int MenuView::showMend() { cout<<\ cout<<\ 1:添加食物 |\ cout<<\ 2:修改价格 |\ cout<<\ 3:删除食物 |\ cout<<\ 4:退出食物管理 |\ cout<<\ int next; cin>>next; return next; }

int MenuView::showMenuChoice() { cout<<\添加菜单:\ cout<<\ cout<<\ 1:原菜单 |\ cout<<\ 2:更新后的菜单 |\ cout<<\ int next; cin>>next; return next; }

int MenuView::showMendDingDan() { cout<<\

cout<<\ 1:修改数量 |\ cout<<\ 2:删除食物 |\ cout<<\ 3:退出修改 |\ cout<<\ int next; cin>>next; return next; }

Main.cpp

#include #include\

#include\#include\#include\#include\#include #include using namespace std; int main() { FeeManager feem;//管理就餐和外卖的费用 MenuView mv; //管理界面 ClientManager cm; //管理客户的类的对象 FoodManager fm;//管理食物的类的对象 fstream ioFile; //文件输入输出 int clientChoice;// 1 服务顾客 2 食物管理 3 今日反馈 4退出系统 int clientService;//1新顾客点餐 2 查询 int mainChoice;// 1 就餐 2 外卖 int curClient; //当前操作的顾客编号 int queryChoice;//1 查询订单 2 退出查询 int foodChoice;//1 添加食物 2 修改食物价格 3删除某种食物 4退出食物管理 int viewChoice;//1 顾客服务 2 食物管理 3 今日反馈 4 退出系统 int menuChoice;//1 原菜单 2 更新后菜单 int mendDingDanChoice;//1 修改数量 2 删除食物 3 退出修改 ioFile.open(\ while(!ioFile.eof()) { char *s; double p; s=new char[20]; ioFile>>s>>p; fm.addFood(s,p); } ioFile.close();

//以上是从文件读入食物的种类和价格信息 while(true){

viewChoice = mv.showViewChoice(); if(viewChoice == 1) //顾客服务 { clientService = mv.showRegister(); if(clientService == 1)//用户注册 { char *name,*phone; name = new char[30]; phone = new char[20]; cout<<\请完善客户资料\ cout<<\您的订单号是\ curClient = cm.getClientNum(); cout<<\请输入姓名: \ cout<<\请输入手机号码: \ Client cc(name,phone); cc.setNumber(cm.getClientNum()); cm.addClient(cc);

mainChoice = mv.showMain(); if(mainChoice == 1) //就餐 { cm.client[curClient].setType(1); mv.showJiuCan(); while(true) { fm.showFood(); int choices; choices = mv.showClientChoice(); if(choices==1)//选择食物种类和数量,下单 { char *n; int code; n = new char[20]; int nums; double prices ; cout<<\请输入食物编号: \ n = fm.food[code].getName(); cout<<\您选择了食物: \ prices = fm.getPriceByName(n); cout<<\请输入数量: \ cm.client[curClient].client_fm.addFood(Food(n,prices)); cm.client[curClient].addFee(nums*prices);

cm.client[curClient].num[cm.client[curClient].client_fm.getTotal()-1]=nums; cout<<\当前的总费用是\ } else if(choices == 2)//修改订单 { cout<<\您当前的订单是:\ while(true){ cm.client[curClient].showClientMessage(); mendDingDanChoice = mv.showMendDingDan(); if(mendDingDanChoice==1) { cm.client[curClient].changNum(); } else if(mendDingDanChoice == 2) { cm.client[curClient].deleFood(); } else if(mendDingDanChoice == 3)break; } } else if(choices == 3)//提交订单 break; } feem.addJiuCanFee(cm.client[curClient].getFee());//增加就餐总费用 cout<<\您的订单是:\ cm.client[curClient].showClientMessage();//输出当前订单 } else if(mainChoice == 2) //外卖 { cm.client[curClient].setType(2); mv.showJiuCan(); while(true) { fm.showFood(); int choices; choices = mv.showClientChoice(); if(choices==1)//选择食物种类和数量,下单 { char *n; int code;

n = new char[20]; int nums; double prices ; cout<<\请输入食物编号: \ n = fm.food[code].getName(); cout<<\您选择了食物: \ prices = fm.getPriceByName(n); cout<<\请输入数量: \ cm.client[curClient].client_fm.addFood(Food(n,prices)); cm.client[curClient].addFee(nums*prices); cm.client[curClient].num[cm.client[curClient].client_fm.getTotal()-1]=nums; cout<<\当前的总费用是\ } else if(choices == 2)//修改订单 { cout<<\您当前的订单是:\ while(true){ cm.client[curClient].showClientMessage(); mendDingDanChoice = mv.showMendDingDan(); if(mendDingDanChoice==1) { cm.client[curClient].changNum(); } else if(mendDingDanChoice == 2) { cm.client[curClient].deleFood(); } else if(mendDingDanChoice == 3)break; } } else if(choices == 3)//提交订单 break; } feem.addWaiMaiFee(cm.client[curClient].getFee());//增加就餐总费用 cout<<\您的订单是:\ cm.client[curClient].showClientMessage();//输出当前订单 } }//用户注册 else if(clientService == 2)

{ while(true) { queryChoice = mv.showQuery(); if(queryChoice == 1) //查询客户订单信息 { cout<<\请输入您的姓名:\ char *s; s = new char[20]; cin>>s; cm.showQuery(s); } else if(queryChoice == 2)break; //退出查询 } } }

else if(viewChoice == 2) //食物管理 { while(true) { fm.showFood(); foodChoice = mv.showMend(); if(foodChoice == 1) //添加食物 { char *n; double p; n = new char[20]; cout<<\请输入食物名称: \ cout<<\请输入食物价格: \ fm.addFood(Food(n,p)); } else if(foodChoice == 2)//修改食物价格 { fm.changePrice(); } else if(foodChoice == 3)//删除食物 { fm.deleteFood(); } else if(foodChoice == 4)break; //退出食物管理 } }

else if(viewChoice == 3)//今日反馈 { cout<<\今天共有\人消费,销售总额共\元\ cout<<\其中就餐总额为\元,\ cout<<\外卖总额为\元\ cout<<\ cm.showAll(); } else if(viewChoice == 4)//退出系统 { //ioFile.open(\ ioFile.open(\ for(int i = 0 ; i < fm.getTotal() ; i ++){ ioFile<

六:运行结果与分析

从food.txt文件导入菜单,food.txt内容如下 瓜丝儿 10 山鸡丁儿 12 拌海蜇 炝冬笋 84 玉兰片 27 浇鸳鸯 烧槟子 34 烧百合 31 炸豆腐 拔丝山药 10 糖焖莲子 18 酿山药 草泥马 100 金华火腿 99 运行程序,进入主界面:

19 龙须菜 115 烧鱼头 26 炸面筋 88 山东煎饼

46 26 4 3

选择:1 顾客服务 再选择1新顾客点餐 登记客户信息 姓名:陈小坠 电话15858181234

接下来弹出客户服务选择界面

进入服务选择界面,选择1就餐

弹出菜单,有食物编号,名称,价格 选择1加菜

选择食物编号0 瓜丝儿 ,数量3

同理,再添加食物金华火腿 *1 山鸡丁儿 *4 山东煎饼 *5 选择2,修改订单

选择1,修改食物数量 选择瓜丝儿,数量修改为1

选择2 删除食物山东煎饼

修改后的订单如上,选3退出修改,再选3提交订单,此时输出客户订单信息,并返回主界面,如下所示

同理,继续添加客户如下

李小龙 15858184321 就餐 草泥马 *1 炸豆腐 *2

陆小凤 15858181342 外卖 山东煎饼*3 酿山药*4 玉兰片*3 刘备 15858181111 外卖 糖焖莲子*2

猪八戒 15858182222 就餐 龙须菜*3 浇鸳鸯*4 烧鱼头*5 拌海蜇*4 现在点1,顾客服务 2查询订单,查询猪八戒的订单

订单排在第3,这里就餐和外卖进行了排序,就餐在外卖前面,就餐和外卖则按照先后顺利排列

选择2:退出订单查询 选择2,食物管理

添加食物 冰糖葫芦 价格46,结果如下

多出了第18道菜,冰糖葫芦

选择2,修改食物价格,把 浇鸳鸯的价格改为1

先择3 删除食物 草泥马改变后的菜单列表如下

选择4,退出食物管理进入主菜单 选择3 今日反馈

显示今日的销售额,显示所有订单详情,按照就餐和外卖先后顺序排序 选择4 退出系统

七:心得与体会

通过设计这个自主点餐系统,我对C++面向对面的思想和对于类的运用有

了更深的理解。编写程序时遇到了各种问题,我通过复习课本上的知识,对于自己所出现的问题逐一解决,巩固了知识点,提升了理论知识的运用能力及解决问

题的能力。程序设计和调试程序的能力都有很大的提升。

考核成绩评定表

平时成 绩 答辩成绩 总 成 绩