C语言餐饮结账管理系统设计.docx
《C语言餐饮结账管理系统设计.docx》由会员分享,可在线阅读,更多相关《C语言餐饮结账管理系统设计.docx(26页珍藏版)》请在冰豆网上搜索。
![C语言餐饮结账管理系统设计.docx](https://file1.bdocx.com/fileroot1/2023-1/22/dd10dee7-4dc0-4e3e-a316-7d8e745141e1/dd10dee7-4dc0-4e3e-a316-7d8e745141e11.gif)
C语言餐饮结账管理系统设计
C语言程序设计
课程设计报告
设计题目:
餐饮结账管理系统设计
1 设计任务
1.1设计题目的描述
功能:
餐饮结账信息包括:
编号、时间、台面号、顾客数量、接待服务生、实收金额。
试设计一餐饮结账管理系统,使之能提供以下功能:
1结账信息录入、修改、删除功能;
2查询浏览功能:
按台面号查询、按接待服务生查询;
3按照实收金额排序。
4统计总收入、顾客总数等功能。
1.2设计要求
(1)仔细审题,明确题目要求。
(2)按照结构化的程序设计思想,将程序模块化,将相对独立的功能写成函数。
(3)要求编程、调试通过并演示;程序编写规范,添加适当注释。
(4)按照课程设计报告的内容和格式要求,撰写课程设计报告,并且打印。
2设计方案说明
2.1数据的存储结构
餐饮结账信息包括:
编号、时间、台面号、顾客数量、接待服务生、实收金额。
因此需要使用结构体,而结账信息又不止是一个,所以使用结构体数组,这里定义结构体structbill,定义数组bill[M]。
struct bill
{
int num; //编号
int time[4]; //时间
int table; //台面号
intcount; //顾客数量
ﻩchar name[20]; //服务生姓名
intmoney; //实收金额
}bill[M];
2.2函数之间的调用关系说明
2.3函数说明
1)函数 voidmenu()
voidmenu() 菜单函数
此函数为主菜单,从此处进入其他模块。
变量c:
使用c选择进入其它功能。
2)函数voidinput()
voidinput() 信息录入,将录入的信息存入文件bill中
此函数将从键盘输入的信息录入文件bill中。
使用scanf输入结构体中各个量;
3)函数 voidreadFromFile()
void readFromFile() 从文件中读取信息并存入数组bill[30]
此函数将文件bill中信息读出并存入bill[]
4)函数void save()
voidsave()/*保存函数*/
此函数用于在修改与删除后保存数据。
5)函数voiddisplay_all()
void display_all() 信息全部显示
通过此函数可显示所有输入信息。
6)函数 void display(int i)
void display(inti)单个信息显示i为要修改的信息号从modify函数中读入
此函数用于在修改等功能后显示第i个信息,用于核对。
用printf显示第i个信息的所有数据
7)函数intmodify_a(inti)
intmodify_a(inti)修改主函数时调用此函数
此函数用于修改其中一个或多个信息,并返回一个数值用于确定是否修改。
变量c用于确定修改项目
8)函数voidmodify()
voidmodify() 修改信息主函数
此函数用于修改其中一个信息并保存
9)函数 voiddeleter()
voiddeleter() 删除记录
此函数用于删除记录中的一条信息。
10)函数void search1()
voidsearch1()台面号查询
此函数用于按台面号查询信息并输出信息。
11)函数 voidsearch2()
voidsearch2() 接待服务生查询
此函数用于按接待服务生姓名查询信息并显示。
12)函数 voidsort()
void sort() 金额排序
此函数用于按金额对所有信息进行排序并输出。
关键变量structbillt 为中间变量,用于交换bill[i]与bill[i+1]的值。
13)函数voidincome()
void income()总收入统计
此函数用于统计总收入并输出。
关键变量sum用于统计总收入
14)函数voidnumber()
voidnumber() 顾客总数统计
此函数用于统计顾客总数。
关键变量number用于统计顾客总数
3设计题目源代码清单
#include
#include<string.h>
#include<stdlib.h>
#defineM30
struct bill
{
int num; //编号
ﻩinttime[4]; //时间
inttable; //台面号
ﻩintcount; //顾客数量
char name[20]; //服务生姓名
ﻩintmoney; //实收金额
}bill[M];
intN;
/*菜单*/
voidmenu()
{
charc;
voidinput();
voidmodify();
ﻩvoid deleter();
ﻩvoidsearch1();
void search2();
ﻩvoidsort();
ﻩvoidincome();
void number();
ﻩ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中*/
void input()
{
FILE*fp;
inti;
if((fp=fopen("bill","w"))==NULL)
{
printf("cannot openthefile\n");
return;
}
printf("输入信息个数(0-%d)?
:
",M-1);
scanf("%d",&N);
printf("请输入数据:
\n");
for(i=0;i<N;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("error\n");
ﻩreturn;
ﻩ}
}
fclose(fp);
}
/*从文件中读取信息并存入数组sbill[N]*/
void readFromFile()
{
int i;
FILE *fp;
if((fp=fopen("bill","rb"))==NULL)
{
printf("cannotopenthe file\n");
return;
}
for(i=0;i<N;i++)
fread(&bill[i],sizeof(struct bill),1,fp);
fclose(fp);
}
/*保存函数*/
voidsave()
{
ﻩFILE*fp;
inti;
if((fp=fopen("bill","w"))==NULL)
{
printf("cannot openthefile\n");
return;
}
for(i=0;i<N;i++)
{
if(bill[i].num!
='\0')
if(fwrite(&bill[i],sizeof(structbill),1,fp)!
=1)
ﻩ {
printf("error\n");
ﻩ return;
}
}
fclose(fp);
}
/*信息全部显示*/
void display_all()
{
ﻩinti;
readFromFile();
printf("全部信息:
\n");
ﻩfor(i=0;i<N;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);
}
/*修改函数调用函数*/
int modify_a(inti)
{
int c,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;
case 7:
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<N;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()
{
ﻩint i,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<N;i++)
ﻩﻩ{
ﻩﻩbill[i]=bill[i+1];
ﻩ save();
ﻩﻩ}
}
ﻩelse break;
display_all();
ﻩprintf("\n删除成功,是否继续?
1)是2)返回[");
scanf("%d",&w1);
ﻩ}while(w1==1);
}
/*台面号查询*/
voidsearch1()
{
int i,j,w0;
intnumber;
readFromFile();
do
{
ﻩj=-1;
ﻩ printf("\n请输入台面号查询:
");
scanf("%d",&number);
for(i=0;i<N;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);
}
/*接待服务生查询*/
void search2()
{
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()
{
ﻩint i,j,w0;
ﻩstructbill t;
readFromFile();
printf("\n\n");
ﻩfor(j=0;j<N-1;j++)
ﻩfor(i=0;i<N-1-j;i++)
ﻩﻩif(bill[i].money<bill[i+1].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);
}
/*总收入统计*/
void income()
{
ﻩinti,sum=0,w0;
readFromFile();
ﻩfor(i=0;i<N;i++)
sum=sum+bill[i].money;
printf("\n\n");
printf("总收入:
%d",sum);
ﻩdo
ﻩ{
ﻩﻩprintf("\n返回?
1)是 2)否");
ﻩscanf("%5d",&w0);
}while(w0==2);
}
/*顾客总数统计*/
void number()
{
inti,number=0,w0;
readFromFile();
for(i=0;i<N;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.2 12:
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