C语言餐饮结账管理系统设计文档.docx

上传人:b****8 文档编号:28393241 上传时间:2023-07-13 格式:DOCX 页数:28 大小:450.17KB
下载 相关 举报
C语言餐饮结账管理系统设计文档.docx_第1页
第1页 / 共28页
C语言餐饮结账管理系统设计文档.docx_第2页
第2页 / 共28页
C语言餐饮结账管理系统设计文档.docx_第3页
第3页 / 共28页
C语言餐饮结账管理系统设计文档.docx_第4页
第4页 / 共28页
C语言餐饮结账管理系统设计文档.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

C语言餐饮结账管理系统设计文档.docx

《C语言餐饮结账管理系统设计文档.docx》由会员分享,可在线阅读,更多相关《C语言餐饮结账管理系统设计文档.docx(28页珍藏版)》请在冰豆网上搜索。

C语言餐饮结账管理系统设计文档.docx

C语言餐饮结账管理系统设计文档

 

C语言程序设计

课程设计报告

设计题目:

餐饮结账管理系统设计

 

 

 

1设计任务

1.1设计题目的描述

功能:

餐饮结账信息包括:

编号、时间、台面号、顾客数量、接待服务生、实收金额。

试设计一餐饮结账管理系统,使之能提供以下功能:

1结账信息录入、修改、删除功能;

2查询浏览功能:

按台面号查询、按接待服务生查询;

3按照实收金额排序。

4统计总收入、顾客总数等功能。

1.2设计要求

(1)仔细审题,明确题目要求。

(2)按照结构化的程序设计思想,将程序模块化,将相对独立的功能写成函数。

(3)要求编程、调试通过并演示;程序编写规范,添加适当注释。

(4)按照课程设计报告的内容和格式要求,撰写课程设计报告,并且打印。

2设计方案说明

2.1数据的存储结构

餐饮结账信息包括:

编号、时间、台面号、顾客数量、接待服务生、实收金额。

因此需要使用结构体,而结账信息又不止是一个,所以使用结构体数组,这里定义结构体structbill,定义数组bill[M]。

structbill

{

intnum;//编号

inttime[4];//时间

inttable;//台面号

intcount;//顾客数量

charname[20];//服务生姓名

intmoney;//实收金额

}bill[M];

2.2函数之间的调用关系说明

2.3函数说明

1)函数voidmenu()

voidmenu()菜单函数

此函数为主菜单,从此处进入其他模块。

变量c:

使用c选择进入其它功能。

2)函数voidinput()

voidinput()信息录入,将录入的信息存入文件bill中

此函数将从键盘输入的信息录入文件bill中。

使用scanf输入结构体中各个量;

3)函数voidreadFromFile()

voidreadFromFile()从文件中读取信息并存入数组bill[30]

此函数将文件bill中信息读出并存入bill[]

 

4)函数voidsave()

voidsave()/*保存函数*/

此函数用于在修改与删除后保存数据。

 

5)函数voiddisplay_all()

voiddisplay_all()信息全部显示

通过此函数可显示所有输入信息。

 

6)函数voiddisplay(inti)

voiddisplay(inti)单个信息显示i为要修改的信息号从modify函数中读入

此函数用于在修改等功能后显示第i个信息,用于核对。

7)函数intmodify_a(inti)

intmodify_a(inti)修改主函数时调用此函数

此函数用于修改其中一个或多个信息,并返回一个数值用于确定是否修改。

变量c用于确定修改项目

8)函数voidmodify()

voidmodify()修改信息主函数

此函数用于修改其中一个信息并保存

9)函数voiddeleter()

voiddeleter()删除记录

此函数用于删除记录中的一条信息。

 

10)函数voidsearch1()

voidsearch1()台面号查询

此函数用于按台面号查询信息并输出信息。

 

11)函数voidsearch2()

voidsearch2()接待服务生查询

此函数用于按接待服务生姓名查询信息并显示。

12)函数voidsort()

voidsort()金额排序

此函数用于按金额对所有信息进行排序并输出。

关键变量structbillt为中间变量,用于交换bill[i]与bill[i+1]的值。

13)函数voidincome()

voidincome()总收入统计

此函数用于统计总收入并输出。

关键变量sum用于统计总收入

14)函数voidnumber()

voidnumber()顾客总数统计

此函数用于统计顾客总数。

关键变量number用于统计顾客总数

3设计题目源代码清单

#include

#include

#include

#defineM30

structbill

{

intnum;//编号

inttime[4];//时间

inttable;//台面号

intcount;//顾客数量

charname[20];//服务生姓名

intmoney;//实收金额

}bill[M];

intN;

/*菜单*/

voidmenu()

{

charc;

voidinput();

voidmodify();

voiddeleter();

voidsearch1();

voidsearch2();

voidsort();

voidincome();

voidnumber();

do

{

printf("\n\n\n");

printf("<<<<餐饮结账管理系统>>>>\n");

printf("----------------------------------------------------\n");

printf("\n\n");

printf("---1录入2修改3删除----\n\n");

printf("---4台面号查询5接待服务生查询----\n\n");

printf("---6金额排序7总收入8顾客总数----\n\n");

printf("---0退出----\n\n");

printf("---------------------------------------------------\n");

printf("\n\n");

printf("请选择服务(0-8)");

c=getchar();

switch(c)

{

case'1':

{input();getchar();break;}

case'2':

{modify();getchar();break;}

case'3':

{deleter();getchar();break;}

case'4':

{search1();getchar();break;}

case'5':

{search2();getchar();break;}

case'6':

{sort();getchar();break;}

case'7':

{income();getchar();break;}

case'8':

{number();getchar();break;}

case'0':

{

printf("\n谢谢使用,再见!

");

exit(0);

printf("\n");

}

default:

{

printf("\n输入有误,重试!

:

");

c=getchar();

}

}

}while

(1);

}

/*信息录入,将录入的信息存入文件bill中*/

voidinput()

{

FILE*fp;

inti;

if((fp=fopen("bill","w"))==NULL)

{

printf("cannotopenthefile\n");

return;

}

printf("输入信息个数(0-%d)?

:

",M-1);

scanf("%d",&N);

printf("请输入数据:

\n");

for(i=0;i

{

printf("输入账单%d信息:

\n",i+1);

printf("编号:

");

scanf("%d",&bill[i].num);

printf("时间(月.日时:

分):

");

scanf("%d%d%d%d",&bill[i].time[0],&bill[i].time[1],&bill[i].

time[2],&bill[i].time[3]);

printf("台面号:

");

scanf("%d",&bill[i].table);

printf("顾客数量:

");

scanf("%d",&bill[i].count);

printf("接待服务生:

");

scanf("%s",bill[i].name);

printf("实收金额:

");

scanf("%d",&bill[i].money);

}

for(i=0;i

{

if(fwrite(&bill[i],sizeof(structbill),1,fp)!

=1)

{

printf("filewriteerror\n");

return;

}

}

fclose(fp);

}

/*从文件中读取信息并存入数组sbill[N]*/

voidreadFromFile()

{

inti;

FILE*fp;

if((fp=fopen("bill","rb"))==NULL)

{

printf("cannotopenthefile\n");

return;

}

for(i=0;i

fread(&bill[i],sizeof(structbill),1,fp);

fclose(fp);

}

/*保存函数*/

voidsave()

{

FILE*fp;

inti;

if((fp=fopen("bill","w"))==NULL)

{

printf("cannotopenthefile\n");

return;

}

for(i=0;i

{

if(bill[i].num!

='\0')

if(fwrite(&bill[i],sizeof(structbill),1,fp)!

=1)

{

printf("filewriteerror\n");

return;

}

}

fclose(fp);

}

/*信息全部显示*/

voiddisplay_all()

{

inti;

readFromFile();

printf("全部信息:

\n");

for(i=0;i

{

printf("编号:

%d时间:

%d.%d%d:

%d台面号:

%d顾客数量:

%d接待服务生:

%s实施金额:

%d",bill[i].num,bill[i].time[0],bill[i].time[1],bill[i].time[2],bill[i].time[3],bill[i].table,bill[i].count,bill[i].name,bill[i].money);

printf("\n");

}

}

/*单个信息显示*/

voiddisplay(inti)

{

printf("编号:

%d时间:

%d%d%d%d台面号:

%d顾客数量:

%d接待服务生:

%s实施金额:

%d",bill[i].num,bill[i].time[0],bill[i].time[1],bill[i].time[2],bill[i].time[3],bill[i].table,bill[i].count,bill[i].name,bill[i].money);

}

/*修改函数调用函数*/

intmodify_a(inti)

{

intc,w1;

printf("\n修改选项=>\n\n1).编号2).时间3).台面号4).顾客数量5).接待服务生6).实收金额7).取消并返回");

printf("请选择?

:

[]");

scanf("%d",&c);

if(c>7||c<1)

{

printf("\n选择错误,请重试");

getchar();

}

do

{

switch(c)

{case1:

printf("编号:

");scanf("%d",&bill[i].num);break;

case2:

printf("时间:

");scanf("%d.%d%d:

%d",&bill[i].time[0],&bill

[i].time[1],&bill[i].time[2],&bill[i].time[3]);break;

case3:

printf("台面号:

");scanf("%d",&bill[i].table);break;

case4:

printf("顾客数量:

");scanf("%d",&bill[i].count);break;

case5:

printf("接待服务生:

");scanf("%s",bill[i].name);break;

case6:

printf("实收金额:

");scanf("%d",&bill[i].money);break;

case7:

menu();

}

printf("\n现在:

\n");

display(i);

printf("\n确定?

\n1).是2).不,重新修改3).返回不保存[");

scanf("%d",&w1);

}while(w1==2);

return(w1);

}

/*修改信息*/

voidmodify()

{

inti,n,k,w0=1,w1;

readFromFile();

do

{

k=-1;

display_all();

do

{

printf("\n输入要修改的编号数\n编号:

");

scanf("%d",&n);

for(i=0;i

if(bill[i].num-n==0)

{

k=i;

}

if(k==-1)

printf("\n\n没有记录请重新输入!

");

}while(k==-1);

w1=modify_a(k);

if(w1==1)

{

printf("\n修改成功\n是否继续?

1).是2).保存返回[");

save();

scanf("%d",&w0);

}

}while(w0==1);

}

/*删除记录*/

voiddeleter()

{

inti,k,n,w0,w1;

readFromFile();

do

{

k=-1;

display_all();

do

{

printf("\n输入要删除的编号:

\n");

scanf("%d",&n);

for(i=0;i

if(n-bill[i].num==0)

{

k=i;

}

if(k==-1)

printf("\n无记录,请重新输入!

\n");

}while(k==-1);

display(i);

printf("\n确定删除?

1)是2)返回\n[");

scanf("%d",&w0);

if(w0==1)

{

for(i=k;i

{

bill[i]=bill[i+1];

save();

}

}

elsebreak;

display_all();

printf("\n删除成功,是否继续?

1)是2)返回[");

scanf("%d",&w1);

}while(w1==1);

}

/*台面号查询*/

voidsearch1()

{

inti,j,w0;

intnumber;

readFromFile();

do

{

j=-1;

printf("\n请输入台面号查询:

");

scanf("%d",&number);

for(i=0;i

{

if(number==bill[i].table)

{

j=i;

display(j);

printf("\n");

}

}

if(j==-1)

printf("无此号!

");

printf("\n继续?

1)是2)返回[");

scanf("%d",&w0);

}while(w0==1);

}

/*接待服务生查询*/

voidsearch2()

{

chara[20];

inti,j,w0;

do

{

j=-1;

printf("\n请输入接待服务生姓名查询:

");

scanf("%s",a);

for(i=0;i

{

if(strcmp(bill[i].name,a)==0)

{

j=i;

display(j);

printf("\n");

}

}

if(j==-1)

printf("无此姓名!

");

printf("\n继续?

1)是2)返回[");

scanf("%d",&w0);

}while(w0==1);

}

/*金额排序*/

voidsort()

{

inti,j,w0;

structbillt;

readFromFile();

printf("\n\n");

for(j=0;j

for(i=0;i

if(bill[i].money

{

t=bill[i];

bill[i]=bill[i+1];/*调换bill[i]与bill[i+1]的值*/

bill[i+1]=t;

}

printf("由大到小为:

\n");

for(i=0;i

{

display(i);

printf("\n");

}

do

{

printf("\n返回?

1)是2)否");

scanf("%d",&w0);

}while(w0==2);

}

/*总收入统计*/

voidincome()

{

inti,sum=0,w0;

readFromFile();

for(i=0;i

sum=sum+bill[i].money;

printf("\n\n");

printf("总收入:

%d",sum);

do

{

printf("\n返回?

1)是2)否");

scanf("%5d",&w0);

}while(w0==2);

}

/*顾客总数统计*/

voidnumber()

{

inti,number=0,w0;

readFromFile();

for(i=0;i

number=number+bill[i].count;

printf("\n\n");

printf("顾客总数:

%d",number);

do

{

printf("\n返回?

1)是2)否");

scanf("%5d",&w0);

}while(w0==2);

}

/*主函数*/

voidmain()

{

menu();

}

4程序测试

4.1测试数据说明

测试数据包括:

编号、时间、台面号、顾客数量、接待服务生、实收金额。

编号

时间

(int数组)

台面号

Int

顾客数量

Int

接待服务生

char数组

实收金额

Int

1

7.212:

12

5

2

li

32

2

7.212:

22

3

6

wang

128

3

7.212:

32

2

8

zhao

186

4

7.212:

42

4

3

zhang

95

5

7.212:

52

1

5

li

105

4.2输出结果说明

1)菜单界面,进入系统首先显示主菜单,之后可通过选择不同的数字来运用此餐饮结账系统的各项功能。

图1菜单

2)录入界面,选择1后根据提示输入需要输入的信息个数,之后可依次录入几条不同信息。

图2录入

3)修改界面,选择2后依次输入修改编号1,与项目6,并更改为35,保存返回。

图3修改信息

4)按台面号查询信息,选择4后依次查询台面号3与6,之后返回。

图4台面号查询

5)按服务生姓名查询,选择5后查询服务生li,之后返回。

图5服务生查询

6)按金额排序,选择6后可按金额从大到小排序显示,之后返回。

图6按金额排序

7)求总收入,选择7后可求出总收入,之后返回。

图7总收入

8)求顾客总数,选择8后可求出顾客总数,之后返回。

图8顾客总数

9)删除信息,选择3后输入要删除的编号3,删除后显示,并返回。

图9删除信息

10)退出程序,选择0后退出餐饮结账管理系统。

图10退出

5课程设计总结

通过为期一周的课程设计,我们对《C语言》这门课程有了更深一步的了解。

它是计算机程序设计的重要理论技术基础,在我们的学习中占据着十分重要的地位。

1.这次课程设计运用《C语言》知识,编写一个参饮结账管理系统。

其中遇到了不少问题,平时自己在编写一些普通常见的程序时感觉得心应手,非常简单,但此次拿到这个程序的要求后第一感觉就是无法下手。

通过老师指导终于有了思路,在之后的编写中碰到修改这个函数时只知道通过直接输入可以代替原有数据,但不知道如何使修改更加完美,后来通过网上查找资料而解决了此问题,从而使各个数据互不影响的修改,而不是要改就必须重新输入一遍。

最大问题是删除,开始时绞尽脑计都想不到该如何删除,曾经试过许多的办法都无法完成,到最后所有其他的功能完成后才从排序时的互换bill[i]与bill[i+1]的影响下想到用后一个代替前一个的想法。

剩下的都就是一些小的细节问题,例如如何使每项功能完成后返回主菜单而在退出时却不返回(解决方法是在主菜单函数中加入while

(1),而把退出的数字有9变为0),如何使功能完成后不会直接返回而有人为控制(在函数后使用do……while……在用w0控制退出与否)。

剩余就是一些符号如“&”、“=”

“==”d等的使用一定要注意细节。

2.通过完成本课题,我进一步熟悉C语言的基本知识,并掌握真正的较复杂的程序的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉结构体的用法,数组的建立运用和函数的调用等。

同时也

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1