C语言超市收银管理系统实现.docx
《C语言超市收银管理系统实现.docx》由会员分享,可在线阅读,更多相关《C语言超市收银管理系统实现.docx(21页珍藏版)》请在冰豆网上搜索。
C语言超市收银管理系统实现
超市收银管理程序的设计与实现
1摘要和关键字
1.1摘要
该系统主要用于超市商品管理人员对于商品的信息(包括商品号、商品名、单价)进行输入、删除、修改和查询。
除此之外,当销售人员输入商品号及销售数量时,系统应计算应收钱数,并根据实际收银计算找零数量。
最后,系统能对销售情况进行查询。
Abstract
Thesystemismainlyusedinthesupermarketgoodsmanagementpersonneloftheproductinformation(includingcommoditynumber,nameofgoods,unitprice)input,delete,modify,andquery.Inaddition,whensalesstaffinputarticlenumberandsalesvolume,thesystemshouldbecalculatedaccordingtotheactualamountreceivable,andcashiercalculationquantitychange.Finally,thesystemcaninquirethesalessituation.
1.2关键字
登陆系统操作菜单建立信息库查询付款
Keywords
LoginsystemOperationmenuSetupinformationdatabaseInquirePay
2正文
2.1引言
随着经济的发展,人们每天接触并且需要处理的信息越来越多,人们就需要寻求一个工具来实现信息的管理和处理。
尤其是超市里,需要管理各种商品的数目及销售情况,而超市收银管理程序则是针对这种问题而产生的,系统能够实现对商品信息的录入、修改、查询、删除操作,并且在销售时能计算出应收钱数,并能根据实际收钱而计算找零,最后能对销售情况进行查询。
2.2需求分析
(1)销售人员能对商品信息(商品号、商品名、单价)进行输入,建立商品信息库。
(2)输出商品信息库中全部商品的信息(商品号、商品名、售价、数量),并且输出所购商品清单。
(3)销售人员根据顾客需求录入所购商品的商品号及数量,并能实现所购商品的数量修改以及商品删除。
(4)根据所购商品的数量及单价计算出应付钱数,并根据实际收钱数目计算找零数目,并输出。
(5)销售人员通过此程序能查询销售情况,输出商品的信息(商品号、商品名、单价、剩余数量),并计算卖出商品的获利情况。
2.3数据结构设计
structgoodgoods[N]:
总体商品信息数组,全局变量
structgoodbuy_g[j]:
所购商品信息数组,全局变量
Intj:
累计所购商品种类
Intselect:
操作选项
build():
建立商品信息库函数
display():
输出商品信息库中信息函数
buy():
购买商品函数
money():
计算应付钱数和找零函数
add():
添加所购商品函数(add()函数子函数)
check():
查看销售情况函数
fp:
指向文件的指针
total():
应付钱数
pay():
实收钱数
2.4算法设计
该系统主要包括登陆系统、商品信息库建立系统、商品信息库输出系统、购物系统、结账系统以及销售情况查询系统。
其中购物系统包括商品添加及显示系统、修改购买商品系统以及删除购买商品系统,逻辑结构清晰,使用方便。
2.4.1登陆系统
登陆系统由销售人员操作,是系统选择门户,其中选择1则执行商品信息库建立的操作,选择2执行商品信息库输出操作,选择3执行购物操作,选择4执行结账操作,选择5执行销售情况查询操作。
voidmain()
{
voidbuild(),display(),buy(),money();
voidadd(),check();
intselect;
printf("***************************\n");
printf("1.建立商品信息库\n");
printf("2.输出商品信息\n");
printf("3.购买商品\n");
printf("4.结账\n");
printf("5.查看销售情况\n");
printf("6.退出\n");
printf("***************************\n");
while
(1)
{
printf("请输入选择序号\n");
scanf("%d",&select);
if(select<1||select>6)
{
printf("输入有误,请重新输入\n");
}
else
switch(select)
{
case1:
build();continue;
case2:
display();continue;
case3:
buy();continue;
case4:
money(j);continue;
case5:
check();continue;
case6:
printf("谢谢使用。
\n");exit(0);
}
}
}
2.4.2商品信息库建立系统
由工作人员操作,用于录入超市商品的信息(商品序号、商品名、进价、售价、数量),并建立商品信息库。
voidbuild()
{
FILE*fp;
inti;
printf("请依次输入商品信息\n");
for(i=0;i{
printf("商品序号:
");
scanf("%s",goods[i].num);
printf("商品名:
");
scanf("%s",goods[i].name);
printf("进价:
");
scanf("%f",&goods[i].in_price);
printf("售价:
");
scanf("%f",&goods[i].out_price);
printf("数量:
");
scanf("%d",&goods[i].amount);
}
if((fp=fopen("goods","w"))==NULL)
{
printf("can'topenthefile\n");
return;
}
fwrite(goods,sizeof(structgood),N,fp);
fclose(fp);
printf("***************************\n");
}
2.4.3商品信息库输出系统
商品信息库输出系统用于输出超市所有商品信息,用于检查商品信息录入是否有误。
voiddisplay()
{
inti;
FILE*fp;
if((fp=fopen("goods","r"))==NULL)
{
printf("can'topenthefile\n");
return;
}
for(i=0;fread(goods+i,sizeof(structgood),1,fp)!
=0;i++)
{
printf("商品序号商品名售价数量\n");
printf("%5s\t%7s\t%8.2f\t%d\n",goods[i].num,goods[i].name,goods[i].out_price,goods[i].amount);
printf("***************************\n");
}
fclose(fp);
}
2.4.4购物系统
用于顾客购买商品时操作,通过录入商品序号实现查找,其中包括购买商品及显示系统、修改系统及删除系统三个子函数。
选择1执行购买商品及显示操作,选择2执行修改商品数量操作,选择3执行删除操作,选择4退出,返回上一层。
voidbuy()
{
intmenu();
voidadd();
voidrevise();
voidshow();
voiddel();
while
(1)
{
switch(menu())
{
case1:
add();show();break;
case2:
revise();break;
case3:
del();break;
case4:
printf("***************************\n");
printf("1.建立商品信息库\n");
printf("2.输出商品信息\n");
printf("3.购买商品\n");
printf("4.结账\n");
printf("5.查看销售情况\n");
printf("6.退出\n");
printf("***************************\n");return;
}
}
}
intmenu()
{
intchoose;
printf("***************************\n");
printf("1.购买商品\n");
printf("2.修改数量\n");
printf("3.删除商品\n");
printf("4.退出\n");
printf("***************************\n");
printf("请选择操作序号\n");
while(scanf("%d",&choose))
{
if(choose<1||choose>5)
{
printf("输入错误,请重新输入!
\n");
continue;
}
elsebreak;
}
returnchoose;
}
2.4.4.1商品添加及显示系统
通过输入商品序号并且与商品信息库中数据比较实现查找,并输出所选商品的信息(商品号、商品名、售价、数量),在输入所购数量后,存入buy_g[]数组中存储,并且显示出所购商品的信息以及购买数量。
voidadd()
{
inti,m=0;
charnumb[50];
charchoice;
do
{
printf("请输入要选购商品的序号:
\n");
scanf("%s",numb);
for(i=0;i{
if(strcmp(goods[i].num,numb)==0)
{
strcpy(buy_g[j].num,goods[i].num);
strcpy(buy_g[j].name,goods[i].name);
buy_g[j].in_price=goods[i].in_price;
buy_g[j].out_price=goods[i].out_price;
printf("商品序号商品名售价剩余数量\n");
printf("%5s\t%7s\t%8.2f\t%d\n",goods[i].num,goods[i].name,goods[i].out_price,goods[i].amount);break;
}
}
{
if(strcmp(goods[i].num,numb)==0)
{
printf("输入购买数量:
");
scanf("%d",&m);
while(m>goods[i].amount)
{
printf("输入错误,请重新输入\n");
printf("输入购买数量");
scanf("%d",&m);
}
buy_g[j].amount=m;
j++;
}
else
printf("无此商品\n");
}
printf("是否继续购买?
请输入Y或者N\n");
getchar();
scanf("%c",&choice);
}while(choice=='Y');
}
voidshow()
{
inti;
printf("购买的商品\n");
printf("商品序号商品名售价数量\n");
for(i=0;i{
printf("%5s\t%7s\t%8.2f\t%d\n",buy_g[i].num,buy_g[i].name,buy_g[i].out_price,buy_g[i].amount);
}
}
2.4.4.2修改购买商品系统
通过输入商品序号实现在所购商品数组buy_g[]中查找,并重新输入所要购买数量。
voidrevise()
{
charnumbe[50];
inti;
printf("请输入要修改商品的序号\n");
scanf("%s",numbe);
for(i=0;i{
if(strcmp(buy_g[i].num,numbe)==0)break;
}
printf("购买的商品\n");
printf("商品序号商品名售价数量\n");
printf("%5s\t%7s\t%8.2f\t%d\n",buy_g[i].num,buy_g[i].name,buy_g[i].out_price,buy_g[i].amount);
printf("请重新输入数量\n");
scanf("%d",&buy_g[i].amount);
}
2.4.4.3删除购买商品系统
通过输入商品序号实现在所购商品数组buy_g[]中查找所要删除的商品,并将其所购买数量重置为0,输出时跳过购买数量为0的商品实现删除功能。
voiddel()
{
inti;
charnumb[50];
printf("请输入要删除的商品序号\n");
scanf("%s",numb);
for(i=0;i{
if(strcmp(buy_g[i].num,numb)==0)
{
buy_g[i].amount=0;
break;
}
}
printf("所购买的商品\n");
for(i=0;i{
if(buy_g[i].amount!
=0)
{
printf("商品序号商品名售价数量\n");printf("%5s\t%7s\t%8.2f\t%d\n",buy_g[i].num,buy_g[i].name,buy_g[i].out_price,buy_g[i].amount);
}
elsecontinue;
}
}
2.4.5结账系统
通过所购买商品数组buy_g[]中售价与购买数量的乘积的累加求出应付钱数,在输入实际付钱数目后输出找零数目。
voidmoney()
{
floatn=0,total=0,pay;
inti=0;
for(i=0;i{
n=buy_g[i].out_price*buy_g[i].amount;
total+=n;
}
printf("总费用:
%8.3f\n",total);
do
{
printf("实际付款:
");
printf("\n");
scanf("%f",&pay);
if(pay{
printf("金额错误,请重新输入!
\n");
}
}while(payprintf("找零:
");
printf("%8.3f\n",pay-total);
printf("***************************\n");
printf("1.建立商品信息库\n");
printf("2.输出商品信息\n");
printf("3.购买商品\n");
printf("4.结账\n");
printf("5.查看销售情况\n");
printf("6.退出\n");
printf("***************************\n");
}
2.4.6销售情况查询系统
通过所买商品与商品信息库中商品信息的比较,求出商品的剩余数量并随商品信息输出,并且根据进价、售价及销售数目粗略求出获利数目。
voidcheck()
{
inti;
intm;
floatq,n=0;
printf("商品销售情况\n");
printf("商品序号商品名售价剩余数量\n");
for(i=0;i{
for(m=0;m{
if(strcmp(goods[i].num,buy_g[m].num)==0)
{
printf("%5s\t%7s\t%8.2f\t%d\n",goods[i].num,goods[i].name,goods[i].out_price,goods[i].amount-buy_g[m].amount);
break;
}
}
}
printf("总盈利:
\n");
for(i=0;i{
q=(buy_g[i].out_price-buy_g[i].in_price)*buy_g[i].amount;
n+=q;
}
printf("¥");
printf("%8.2f\n",n);
printf("***************************\n");
printf("1.建立商品信息库\n");
printf("2.输出商品信息\n");
printf("3.购买商品\n");
printf("4.结账\n");
printf("5.查看销售情况\n");
printf("6.退出\n");
printf("***************************\n");
}
2.5程序实现及测试
2.5.1进入系统登录页面及显示的相关信息
2.5.2建立商品信息库
2.5.3输出商品信息库信息
2.5.4购买商品菜单
2.5.4.1添加购买商品
2.5.4.2修改购买商品数量
2.5.4.3删除所购商品
2.5.5计算应收钱数及找零
2.5.7查询销售情况
3不足之处
程序虽然运行无误,但仍有很多不足之处,一是代码用C语音写,较为繁琐,代码冗长,占用空间大,并且所用符号多,不易保证书写正确性;二、代码有需完善之处,主要是建立商品信息系统时数组个数N需要提前已知,并在代码开头处予以说明,否则单凭建立个数多数组则无法正常使用;三:
界面设计有待优化,没有实现清屏功能,在数据较多时不易查看;四、只是实现了根据商品序号查找功能,没有完善其他功能,且输入较为繁琐。
4设计体会
通过本次的课程设计,除了让我对以前学过的C语言重新进行了系统的复习,巩固了所学的知识,而且让我理解到编程的乐趣与艰辛,在编写程序时,最重要的是有系统的构想,能够把所要写的程序的各种功能及逻辑顺序形成思路,再根据实际情况选择语言及所用到的方法。
在第一次编写完时看到密密麻麻的错误提示,但无从下手的感觉十分无奈,只能一点一点的找到错误并且改正,当看到程序的大体功能都实现时感觉十分有成就感,而后就是进一步的完善和修改一些忽略的漏洞,等到全部都改正并且顺利运行的时候才长舒一口气。
虽然本次内容简单,所用语言也很简单,但确实在不断的发现与改正错误中体会到了其中的乐趣与困难。
同时,我也理解到我所学的知识还远远不扎实,不充分,让我有了继续学习的动力,只有掌握更多的知识,才能写出质量更高的程序。
5结束语
通过本次课程设计让我感触很多,而且更加认识到本专业的意义,首先感谢老师能安排这样一次课程设计,让我们对所学东西能有回顾及应用的机会;还要感谢各位同学对我的指导,才使我顺利完成本次实验。
6参考文献
1.谭浩强《C程序设计(第四版)》清华大学出版社2010年6月第四版
2.严蔚敏、吴伟民《数据结构》清华大学出版社2007年
本科生课程设计成绩评定表
班级:
姓名:
学号:
序号
评分项目
满分
实得分
1
学习态度认真、遵守纪律
10
2
设计分析合理性
10
3
设计方案正确性、可行性、创造性
20
4
设计结果正确性
40
5
设计报告的规范性
10
6
设计验收
10
总得分/等级
评语:
注:
最终成绩以五级分制记。
优(90-100分)、良(80-89分)、中(70-79分)、
及格(60-69分)、60分以下为不及格
指导教师签名:
2013年元月25日