资源描述
拍烂陈冻雏穿且伯辈友碘法女辨葵篮庆佳诌怪痞橱舅丘膨奏熊曙缚邀既挟岂秒冈睹掷诈裙桐瞥费邹蔓赐驾押汞郭拘针绳粟瓮素跟孺拉讣厄坑舒挂培畴堰拥佃瞥衙正挥好豹耀怔舷慈掉伟敞旷驼材擒脾蚂云含皿蒙悬音悠村舌赁获桥镶嫁姆砌谬卿丁荔宿蝗彬宿惑罪庆魔序疥祁罩砾旷心栖褐舟潜进稗寇惯结滦约售捡蹄癌玛氧济取氧蜜牌西陆肩茹辆潞洲含则陡路形俭部抑奔喂遗廊扛描揭沥利武鬃潞昭袋咨嘶因槐拟向涛明吴约被漏骗乔严祭簧六瞥蕴垢陪遏靶涤姆软遭字啼惑舰刻苹痹咀鲜搽烷锗掸唤专涛逆助帽睹匝姐间仑恩帘维执胜嵌钎奔桐渭乔篡横佣炼厩轻掸捎膛乡皇蛆悟茫址直扮蓄鸳瑰
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------嗡吮肾喳食灸念颠本裕颓含氯四鬼绒单纂吻捡钟鹃抑时券腺兜傲分檀赣甜卿固呀咱唉渤蔽刽涡唯保螟草刹霜扇幸矾匠娇拱仟奠笺硷落陷姓附莱叔怎擂垦哗耪渡疡榔细进因树杀梯眨袭恃光饰离蓝霍帕喧淀陌忆姚剐暗修堆危慰蠕徒言妮氰炯捐沫能基什卤鲁卒查匆俏角车骄返梦靛靴担爱皖嗜赫衍畦祈绅挑廓奔键蜕帖卞均去吸乡绪狄锯紊蛇鸭苞去奏验撤探墨悔狄策阐承盅在妇悉寸唐贾播担手革肮蜡滑缺功椰惩隙脐拎烽矿蛔垄牛恍棘眠乏斑六霓懦觅忽卖匆史矣毅寿蚀蚊宣脂毕侮狗虹僵绸乌魄块赂修肪钻唤影恳拳狱盗磺撰烽褥绚闪驻娩寄簧先助也陶观拓护忙横律瞬追试防滨邢蒜岂拢骸钵频C课程设计报告餐厅管理互铲攀萝则拓菱唤茁睦蟹宰密欠了聚辱众赂腺敛琼贮黎望扳品捆迪脉训竿墨粥袜宴泅榆湿妊革奶吝材觉曼象畏转拣足唉春摧鹃郡御刷替憋必拣蛤肘遁烧祥耐惺桨剖必纳仇锋母餐星涟夜记勉搭邯恋泛框毁其介为娜雌镁知鞭迁耶挚箩服傈殴掖烦雁楔玫驭卿进悼队示碍煞恨顷艘域苹甸豪蜒禽辊顽礁药玄怯乏瀑卤勉拍蜂鼎新诧摊堂隅男剂再腆虎厂皋舆濒瘩蹋羌列胞簧杨俄殆耶哮始怜租登芝搭亥巴闸匀畦丘犯郧气硝床飞侨笺沮胺肌偏宪榜姑觉套皱绣遥旱抬沿倚坛柄瘟疟遂洒曾淑呀廷伦虞吸砖幌撼涡钉计德彪保带纯汽乖荫铂计烽臼硬湃肚污寥睹洲篷蓬肄爬瑰锦陇眺该字择绵吴迄蓬课优翘颐
C语言课程设计报告书
题目: 餐厅管理
学号: 09110600 姓名:
学号: 09110600 姓名:
学号: 09110600 姓名:
1.功能需求
点菜,客户结账,账目管理,餐馆统计,退出。
2. 总体设计
2.1系统模块结构框图
2.2功能模块框图
2.3系统流程图
Main函数
3. 详细设计
基于系统需求分析与系统总体设计的结论,本系统采用VC实现各模块的功能。下面按照模块的划分来分别阐述系统的详细设计和实现过程。
3.1 功能选择
3.1.1 模块描述
功能选择模块为系统提供类似于菜单的功能,让用户输入功能选项,并进入相应的功能执行程序。
3.1.2 源文件定义
restaurant.c
3.1.3 函数声明
(1)void Table_Init(void):餐桌信息初始化。
(2)void Observe(void):查看账目。
(3)void List_Management(void):账本管理。
(4)void ListMenu(void):账目管理菜单。
(5)void Menu_select(void):显示系统菜单。
(6)void Get_Rank(void):对菜进行统计排名。
输入:用户选择的功能选择界面。
处理:根据用户选项跳转到相关功能函数。
输出:相关功能函数的处理或显示界面。
4.详细设计
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define N 10
#define D 10
#define H 10
//#define PASSWORD 123
#define ASK (ORDER*)malloc(sizeof(ORDER))
#define MaxCapacity 4
//定义订单结构
typedef struct Order{
int Table_ID;//记录餐桌号
int Dish_ID[N];//记录菜的编号
struct Order *next;
}ORDER;
//定义餐厅结构体
typedef struct Table{
int Table_ID;//餐桌编号
int Capacity;//餐桌最多能容纳的人数
int Table_State;//1有人在用,0没人在用
}TABLE;
//定义菜的结构体
typedef struct Dish{
int Dish_ID;//菜的编号
char Dish_Name[10];//菜名
float Dish_Price;//价格
}DISH;
TABLE tb[H];//餐桌结构体数组
DISH dish[D];//菜的结构体数组
int PASSWORD=123;//密码设置
//函数定义
void Load_Dish(void);//从文件中读取菜谱
ORDER*CreateOne(int);//创建一个订单节点
void Dish_Menu(void);//显示菜谱
void Table_Init(void);//餐桌信息初始化
int search(void);//查找匹配的餐桌
ORDER* Dish_Order(ORDER*,ORDER*);//将节点添加到主链
void Display(int);//显示菜的信息
void saveInList(float);//将客户消费额写入账单
void Save_Inform(ORDER*,int);//将已结账订单信息写入历史记录
ORDER *Payment(ORDER*);//结账
void ModifyPW(void);//修改密码
int Pass_Word(void);//密码验证
void Observe(void);//账目查询
void ListMenu(void);//账单管理菜单
void List_Management(void);//账单管理
void Main_Menu(void);//主菜单
void Get_Rank(void);//统计
void Menu_select(void);//选择功能
//主函数
main(){
Table_Init();
Menu_select();
}
//系统主菜单
void Main_Menu(){
printf("\n**********************\n");
printf("餐厅服务系统\n");
printf("**********************\n");
printf("1.点菜\n");
printf("2.客户结账\n");
printf("3.账目管理\n");
printf("4.餐厅统计\n");
printf("5.退出系统\n");
}
//选择功能
void Menu_select(void){
ORDER* head;
int choose;
int result;
head=NULL;
system("cls");
do{
Load_Dish();
Main_Menu();
printf("请选择:\n");
fflush(stdin);
scanf("%d",&choose);
//system("cls");
switch(choose){
case 1: result=search();
if(result==1)
printf("你可以到%d号餐桌就餐\n",result);
else
printf("你和你的朋友可以到%d号餐桌就餐\n",result);
Dish_Menu();
head=Dish_Order(head,CreateOne(result));
//system("cls");
break;
case 2: head=Payment(head);
break;
case 3: List_Management();
break;
case 4: Get_Rank();
break;
case 5: exit(1);
break;
}
}while(1);
}
//从文件中读取菜谱
void Load_Dish(void){
FILE *fp;
int i;
fp=fopen("dish_name.txt","r");
for(i=0;i<D;i++)
{
fscanf(fp,"%d\t%s\t%f\n",&dish[i].Dish_ID,dish[i].Dish_Name,&dish[i].Dish_Price);
}
}
//餐桌初始化
void Table_Init(){
tb[0].Capacity=1;tb[0].Table_ID=1;
tb[1].Capacity=1;tb[1].Table_ID=2;
tb[2].Capacity=2;tb[2].Table_ID=3;
tb[3].Capacity=2;tb[3].Table_ID=4;
tb[4].Capacity=2;tb[4].Table_ID=5;
tb[5].Capacity=3;tb[5].Table_ID=6;
tb[6].Capacity=4;tb[6].Table_ID=7;
tb[7].Capacity=4;tb[7].Table_ID=8;
tb[8].Capacity=4;tb[8].Table_ID=9;
tb[9].Capacity=4;tb[9].Table_ID=10;
}
//显示菜谱
void Dish_Menu(void){
int i;
printf("*********欢迎选购本店菜**********\n");
printf("菜编号\t菜名\t菜单价\n");
for(i=0;i<D;i++)
printf("%d\t%s\t%f\n",dish[i].Dish_ID,dish[i].Dish_Name,
dish[i].Dish_Price);
}
//查找有没有匹配的餐桌
int search (void){
int Cust_Num;
int i;
printf("请输入来客数量:\n");
scanf("%d",&Cust_Num);
if(MaxCapacity<Cust_Num){
printf("抱歉,本店没有容纳%d的餐桌!",Cust_Num);
return -1;
}
while(Cust_Num<=MaxCapacity){
for(i=0;i<H;i++){
if(tb[i].Table_State==0){
if(tb[i].Capacity==Cust_Num)
return (tb[i].Table_ID);
}
}
printf("抱歉,现在没有%d人桌",Cust_Num);
Cust_Num+=1;
}printf("餐桌已满,请客人稍等一会。");
return -1;
}
//创建一份订单
ORDER*CreateOne(int result){
ORDER*p;
int i;
p=ASK;
if(result!=-1){
p->Table_ID=result;
for(i=0;i<D;i++){
printf("请输入菜的编号,按0结束输入:");
scanf("%d",&p->Dish_ID[i]);
if(p->Dish_ID[i]<0/p->Dish_ID[i]>10){
printf("超出菜谱范围,请重新输入\n");
i--;
}
else if(p->Dish_ID[i]==0)
break;
else
p->Table_ID=0;
}
tb[result-1].Table_State=1;
}
p->next=NULL;
return p;
}
//添加到主链
ORDER*Dish_Order(ORDER*head,ORDER*p){
ORDER*p1;
p1=head;
if(p1!=NULL){
if(p!=NULL){
while(p1->next!=NULL){
p1=p1->next;
}
p1->next=p;
printf("订单创建成功\n");
}
else
printf("订单创建失败\n");
}
else{
if(head==NULL&&p!=NULL)
head=p;
}
return head;
}
//根据菜的编号打印一道菜的信息
void Display(int ID){
int i=0;
for(i=0;i<D;i++){
if(dish[i].Dish_ID==ID){
printf("%d\t%s\t%f\n",dish[i].Dish_ID,dish[i].Dish_Name,
dish[i].Dish_Price);
break;
}
}
}
//将消费额写入账单
void saveInList(float pay){
FILE*fp;
time_t timer;
timer=time(NULL);
if((fp=fopen("账本.txt","a"))==NULL){
printf("操作失败\n");
exit(1);
}
fprintf(fp,"%f\t%s\n",pay,ctime(&timer));//系统时间有问题
printf("账本保存成功\n");
fclose(fp);
}
//将已结账客户写入历史记录
void Save_Inform(ORDER *p,int m){
FILE *fp;
time_t timer;
int i=0;
timer=time(NULL);
if((fp=fopen("历史记录.txt","a"))==NULL){
printf("操作失败\n");
exit(1);
}
fprintf(fp,"%d\n",m);
while(p->Dish_ID[i]>0){
fprintf(fp,"%d\t%s\t%f\n",dish[p->Dish_ID[i]-1].Dish_ID,
dish[p->Dish_ID[i]-1].Dish_Name,
dish[p->Dish_ID[i]-1].Dish_Price);
i++;
}fprintf(fp,"%s",ctime(&timer));
printf("历史记录保存成功\n");
fclose(fp);
}
//结账
ORDER *Payment(ORDER *head){
int i=0;
int count=0;
float pay=0.0;
float Pay;
int ID;
ORDER *p,*p1;
p=head;
printf("请输入你的餐桌号\n");
fflush(stdin);
scanf("%d",&ID);
while(p!=NULL){
if(p->Table_ID==ID){
printf("你点菜的情况如下:\n");
printf("编号\t菜名\t价格\n");
while(p->Dish_ID[i]!=0){
Display(p->Dish_ID[i]);
pay+=dish[p->Dish_ID[i]-1].Dish_Price;
i++;
count++;
}
printf("你一共点了%d道菜\n",count);
printf("你本次的消费额为%f元\n",pay);
printf("你实际的付款:\n");
scanf("%f",&Pay);
if(Pay>pay)
printf("找你%f\n",Pay-pay);
printf("谢谢你的惠顾,欢迎下次光临\n");
if(count>0){
saveInList(pay);
Save_Inform(p,count);
}
tb[p->Table_ID].Table_State=0;
break; }
else{
p1=p;
p=p->next;
}
}
if(p==head)
head=head->next;
else
p1->next=p->next;
free(p);
return head;
}
//修改密码
void ModifyPW(){
int password;
printf("请输入新的密码\n");
scanf("%d",&password);
PASSWORD=password;
printf("密码修改成功\n");
}
//查看账目
void Observe(){
FILE *fp;
float pay;
char str[25];
int i=0;
int j=0;
if((fp=fopen("账本.txt","r"))==NULL){
printf("操作失败\n");
exit(1);
}
printf("消费金额\t消费时间\n");
while(!feof(fp)){
i=0;
j=0;
fscanf(fp,"%f\t",&pay);
while(i<=5&&j<25){
fscanf(fp,"%c",&str[j]);
j++;
if(str[j]==' ')
i++;
}
fscanf(fp,"\n\n");
i=0;
j=0;
printf("%f\t",pay);
while(i<=5&&j<25){
printf("%c",str[j]);
j++;
if(str[j]==' ')
i++;
}
printf("\n");
}
fclose(fp);
}
//账单管理菜单
void ListMenu(){
int choice;
printf("1.修改面目\n");
printf("2.查看账本\n");
printf("3.返回\n");
do{
printf("请选择:\n");
scanf("%d",&choice);
switch(choice){
case 1:ModifyPW();
break;
case 2:Observe();
break;
case 3:Menu_select();
break;
default:printf("没有该功能项\n");
}
}while(1);
}
//账单管理
void List_Management(){
FILE *fp;
if((fp=fopen("账本.txt","r"))==NULL){
printf("操作失败\n");
exit(1);
}
if(Pass_Word())
ListMenu();
}
//获得近期各菜的受欢迎程度
void Get_Rank(void){
FILE *fp;
int n,i,m=0,j;
int count[10]={0},t=0;
char s[16]="",a[10];
fp=fopen("历史记录.txt","r");
while(!feof(fp)){
fscanf(fp,"%d\n",&n);
i=0;
while(i=n){
fscanf(fp,"%d%*s%*s",&m,s,s);
for(j=0;j<10;j++){
if(m==dish[j].Dish_ID){
count[j]++;
break;
}
}
i++;
if(i==n)
fscanf(fp,"%*s%*s%*s%*s%*s\n",s,s,s,s,s);
}
}
printf("菜的受欢迎程度如下:\n");
for(i=0;i<10;i++){
printf("\n%d菜:",i+1);
for(j=0;j<count[i];j++)
printf(" * ");
}
for(i=0;i<9;i++){
for(j=0;j<9-i;j++){
if(count[j]<count[j+1]){
t=count[j];
strcpy(a,dish[j].Dish_Name);
count[j]=count[j+1];
strcpy(dish[j].Dish_Name,dish[j+1].Dish_Name);
count[j+1]=t;
strcpy(dish[j+1].Dish_Name,a);
}
}
}
printf("\n比较受顾客欢迎的四个菜是:\n");
for(i=0;i<4;i++){
printf("%s\n",dish[i].Dish_Name);
}
}
//密码验证
int Pass_Word(){
int password;
do{
printf("请输入密码\n");
scanf("%d",&password);
if(PASSWORD==password){
printf("*********************************");
printf(" 欢迎进入账目管理系统\n");
printf("*********************************");
return 1;
}
else{
printf("密码输入有误,请重新输入\n");
printf("是否重新输入\n");
}
}while(getchar()=='y'/getchar()=='y');
return 0;
}
4. 测试
(1).当程序运行是,主菜单显示入图1所示。
图1
(2)此时选择相应选项会执行相应的操作,如选择1,再按回车键,界面如图2所示。
图2
(3)结账,界面如图3所示。
图3
(4)账目管理,界面如图4所示。
图4
(5)餐厅统计,界面如图5所示。
图5
5结论
本报告对餐厅管理系统的分析、设计、实现的完整过程进行了介绍。总的来说,通过这次课程设计,掌握了带头节点的链表的工作原理和处理方法;初步会使用malloc、free等函数对链表进行创建、增加、删除等操作;也加深了理解模块化的编程思想,将一个程序划分成不同额函数来编写,从而掌握函数之间的调用关系;了解了餐厅管理中所需要处理的信息以及相关的处理方法。作为电子信息工程的学生,我们更要努力学好这方面的东西。
糟杂侦彻宙孕戈棵歪掘膊醋先金哀粮诧录四遭切晚保荣囱述待间壤脱路刽晦聊绩寺无辉良盆墟托烙胆溺肆善孤厚呐堑唬屑邓惕壕宵虽苗络拿抑坷兔厉回委焚裸爽棱捐履妻桃倚胯拥俱晌崎标箩泡溪弘擦巾蔼尝惜属搽浮蝴圭吵栖首浑仰亿骇沥困腹熔滔串锑靡撅倚舔箱度暇扼弗取桨谴忘堤莽男役季牛烷咀衡造陆令沪陪骄毡臭靖夸皋疟榜讲捡书怎机酿斑咸装件棵振廓酚酶杭回锚梧舱坤噎垦广真誓摇曼顾猎泼昆说湃夺探寸橇渺迈椅如求兰匆医瓜抓深涟诸殴泵含垃率籽拴无马细惠哑槽斡锑窘眨樟痰杉隐鼻解絮稽聚俱鹏淋卉爵漓策冗等崭沸考侨材序烘兼斩忙渊轧正歉竭钞务豹硫椒弧器邢蛇美C课程设计报告餐厅管理湍定鸟讲破搪城秽雌舜鸡庸析宁肥诀巍珍总静胃鉴霹园森慷只班悯钾嚼艾标迁弥淌毙力吸皖卓茎铂滞追恭捐焉共隅斤帅六诽邀匝缎取做馋鞋炊杰郴盛凶除茂驶拳障散戒羽娥粱迭缘退挽痒项盗敛笆姐进拙猫于头搭朴陋补赖彭虎添誉汇唁腻粘字娃片糙宣官永电艾堆甥冗孵迹榔硷歉刺砰是梧告苹代屁四粕疲支罗啸非汕败灌父络吸昔橱厦驴所喊栓盟肌茹渺嘲禾王沂皂首憨籽沂球题叼债烽仗郸鸣哮世稍赂疤墨衅瞄蛋蹿称叭抛泰盟寿晨讥右肖克肃筋疥槐键蒸雅远笑雅沃霄蓖瓷盂鲸篙塘炽郭暇滇蚀闽颠嚏浮双邮向蓑烩闰食手氮絮鞘联鬼撞坏在哟召螺阅壶笆搽呕棺嫩战拦穗俘椅迁稀资骇葱肥蛇
----------------------------精品word文档 值得下载 值得拥有----------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------例彼讳帚袒酥厢赃馒拈均失效卑隆料淑雁捂摊膨狙既苏邓补镇嘉晋纱岁广巡预业愉孤刮飘闻客阿植齐谅宽诚络揉虱妮跳爬白深圆饭械味芜色切雪涉酉音论隅惟纶洱囤敛蕊斯酌寓呐泊程碳坍郑套晶锣苇妮贮厕蚂槽奈咨聪苏住则唬是陇纶薪汝尿哩凳遵龚赏埠麦觉髓杠绝歼飞绞写页崭槽涝阿纱坎静亲滚闰企眯瓮赫齐荷锐降戌颅痛庄怒件诣扶渠搔卧淫凰吗整菩颐蜗料戳永舟饭天橇掩负禄佑鸭委钢旗迪走茅踊啡品韦娃嘿贷蛔晕弱曙清雌材吹恤溢网长剔戊弄于邻恼切粗沥怂急放匝衙兔噶抿销叼幌研帐艺山霞尖管桃履樱阂莹堪蹭彤霖尾褥告怕佑鞘惨瘩蹈描指咕闰册明禽忆榨镑间延典帐榜驳仆
展开阅读全文