《课程设计报告商场收银系统.doc》由会员分享,可在线阅读,更多相关《课程设计报告商场收银系统.doc(16页珍藏版)》请在三一办公上搜索。
1、目 录1 系统分析11.1 课程设计内容11.2 系统功能需求分析11.3 数据结构设计22 系统设计32.1 总体设计32.2 详细设计32.2.1 界面设计32.2.2 各功能模块的设计43 系统编码设计73.1 main函数73.2 baocun函数73.3 Welcome函数73.4 users函数83.5 menu函数93.6 print函数93.7 system函数103.8 sum函数113.9 pmenu函数114 系统运行135 总结151 系统分析1.1 课程设计内容课程设计题目:商场收银系统。功能包括:1. 系统登录:运行系统时,收银员应输入姓名(或编号)及密码,验证后方
2、可使用系统。2. 收银操作:收银员逐条输入商品编号及数量,系统自动计算金额,输入完毕后显示应付款,当输入实收额后,计算出找赎值。3. 交易完成后按一定格式显示回单(格式参照一般超市中的打印小票)。 4. 保存所显示的回单。5. 自动按销售情况更新商品信息文件中的数据。1.2 系统功能需求分析本系统应具有以下功能:1、系统登录功能: 运行系统进入欢迎界面,就会显示要输入姓名、编号和密码,如果输入验证错误不能进入系统,须再次输入。超过三次输入错误系统自动退出。2、菜单: 验证密码后进入主菜单。有三个选项:收银操作、库存商品信息、退出。3、收银操作能: 进入收银操作后,收银员只需逐条输入商品编号及数
3、量,如果输入的商品号与库存里的不同会提示错误,只需重输错误的这个商品编号。输入完后系统自动计算金额,当再次输入实收金额后,会自动计算出找回值。4、显示回单功能: 当结束收银操作,会提示打印回单,回单里包含每件商品名、单价和购买数量,及总金额。系统还会把每次的回单保存到相应的文件里。可以在文件中查询回单。5、库存商品信息: 库存的商品信息保存在相应的文件里,可以再主菜单中选择进入查看。 6、更新功能: 商品信息文件里有商品数量,每次卖出商品后,商品信息文件里的数量会随之减少。在主菜单中的库存商品信息中可以查询显示。1.3 数据结构设计struct commodity 库存商品结构体 char n
4、ame20; 商品名 int num; 商品编号 float price; 商品单价 int shuliang; 库存商品数量 Com10struct goods 卖出的商品的结构体 char n20; 商品名 int number; 商品编号 float pri; 商品单价 int m; 卖出商品的数量 ;2 系统设计2.1 总体设计显示回单计算金额输入数据商场收银系统用户验证主菜单退出库存商品信息收银操作返回主菜单2.2 详细设计2.2.1 界面设计1、欢迎界面的设计 用一些字符组成和英文字母组成一个欢迎界面,可以显示当天日期和制作者名字。主要还有用户验证区,输入姓名、编号和密码,如果输入
5、验证错误不能进入系统,须再次输入。超过三次输入错误系统自动退出2、菜单界面的设计 用ASCII码输出一些特殊字符组成一个菜单界面,菜单有三个选项:1、收银操作。2、库存商品信息.3、退出。如果输入数字不在3范围内会提示错误。须重新输入。3、收银操作界面的设计 提示输入商品的编号号及数量,如果输入的商品号与库存里的不同会提示错误,只需重输错误的这个商品编号。输入完后会自动显示总金额。但输入实收额时会显示出找回值。4、回单显示界面的设计 回单显示的内容如下:每件商品名、单价和购买数量,及总金额。系统还会提示按任意键把回单保存到相应的文件里。 5、库存商品信息界面的设计 库存商品信息内容有,商品名、
6、编号、单价和库存数量。2.2.2 各功能模块的设计根据划分的功能模块,定义以下函数实现各功能:(这部分应介绍各函数的原型,各功能模块实现所用的算法,可用流程图描述)1、主函数main() 只包含保存、欢迎界面、用户验证和菜单四个函数。先运行保存函数将定以商品的全局变量的信息存入相应的文件,然后直接进入欢迎面,接着是用户验证区,验证成功进入菜单界面。2、函数void baocun(struct commodity *c)开始 打开一个文件将商品信息保存到文件关闭文件结束3、函数void welcome() 欢迎界面,用若干个printf()函数,将一些列字符组成一个好看的欢迎界面,并用getda
7、te()函数调用电脑系统的时间显示出来。4、函数void users()5、函数void menu() 菜单函数有三项:1、收银操作2、库存商品信息3、退出。用switch函数调用system(),print(),exit(0)三个个函数。6、函数void print()关闭 文件返回menu函数结束用循环将商品信息按一定格式输出开始打开一个文件 7、函数void system()开始 输入数据是否0为0 Y=库存商?品? N N Y调用sum函数调用pmenu函数结束8、函数sum(good) 先用for循环查找库存商品的编号,查到要卖出的商品,然后将单价一一调出,再用for循环计算总价并显
8、示出来,当输入实收时,在直接计算找回值并显示出来。9、函数pmenu(good) 先用for循环查找库存商品的编号,查到要卖出的商品并更新库存商品的数量,然后按一定格式将商品名,编号和价格总价输出,并调用baocun()函数将回单保存到相应的文件里。在调用getch(),clrscr(),menu()三个函数回到菜单。3 系统编码设计(这部分将代码列出,注意,每个函数开始处要介绍函数的功能,重要的代码应有注释,代码格式按锯齿式编排)3.1 main函数void main()baocun(Com); /*将商品信息保存到文件*/ welcome(); /*欢迎界面*/ users();/*用户验
9、证*/ menu(); /*主菜单*/3.2 baocun函数void baocun(struct commodity *c) /*将商品信息保存到文件*/ int i; FILE *fp; fp=fopen(shangpin.txt,r); /*为输入打开一个文本文件*/ if(fp=fopen(shangpin.txt,w)=NULL) printf(no filen); else for(i=0;i10;i+)fprintf(fp,n%20s%12d%12.2f%10d,ci.name,ci.num,ci.price,ci.shuliang); /*将事先定义的商品信息保存到文件*/ f
10、close(fp); 3.3 Welcome函数void welcome() /*欢迎界面*/struct date d; /*定义时间结构体*/ printf(Please press any key to enter the system.); getch(); clrscr();getdate(&d); /*读取系统日期并把它放到结构体d中*/printf( ( - ) ( - ) ( - ) );printf(*n);printf(tt Welcome ton);printf(ntt The Cash register systemn);printf(ttttttttdate:%d%d
11、%dn,d.da_year,d.da_mon,d.da_day); /*显示当前系统日期*/printf(*); printf( * * * * * * * );printf( * * * * * * * * * * * * * * * * * * * * * );printf(-* * * *-* * * *-* * * *-* * * *-* * * *-* * * *-* * * *-);printf( * * * * * * * * * * * * * * * * * * * * * );printf( * * * * * * * );printf(*n); printf(tttttt
12、t-Made by Luo Hongkai.n); 3.4 users函数void users() /*用户验证*/ struct staff /*定义5个用户*/ char num10; char name20; char ps10;sta5=1001,lily,111111,1002,lusy,222222,1003,lucy,333333,1004,xiaoming,444444,1005,mike,555555;char a20;int i,success=0,n=0;char password10,num10;while(success!=1)printf(tttEnter your
13、 number:);gets (num);printf(tttEnter your name:); gets (a);printf(ntttEnter your password:); gets (password);n=n+1;if(n=3) exit(0); /*三次输入错误自动退出*/for(i=0;i5;)if(strcmp(num,stai.num)=0)&(strcmp(a,stai.name)=0)&(strcmp(password,stai.ps)=0) success=1;break; /*验证成功,跳出循环*/else i+;printf(ntttOpen fail!n);
14、clrscr();printf(nttttOpen seccess!n); 3.5 menu函数void menu() /*验证后进入主菜单*/void print(); /*声明商品信息函数*/void system(); /*收银操作函数*/int n,i;int a=15; /*将一个字符的ASCII码赋值给变量a*/for(i=0;i31;i+)printf(ttt%c,a); /*按一定格式将ASCII码为15的字符输出*/printf(nttt1. Enter the cash register systemn); /*进入收银系统*/printf(ttt2. Stock info
15、rmationn); /*库存商品信息*/printf(ttt3. Exitn); /*退出*/doprintf(ntttEnter your choice(13):); scanf(%d,&n); while(n3); /*如果选择项不在13之间则重输*/switch(n) case 1: system();break; case 2: print();break; case 3: exit(0); 3.6 print函数void print() /*商品信息,将库存信息输出*/ void menu(); /*声明menu函数*/ int i; FILE *f; clrscr(); fope
16、n(shangpin.txt,r); f=fopen(shangpin.txt,r);printf(nn=n); printf( name number price shuliangnn); for(i=0;i10;i+) printf( %-18s%-14d%-14.2f%-dn,Comi.name,Comi.num,Comi.price,Comi.shuliang); printf(=n); fclose(f); printf(nThe stock information has saved in file of shangpin.txt.n); printf(nnPlease press
17、 any key back to the menu.); getch(); /*从键盘读取一个字符,但不显示于屏幕*/ clrscr(); /*清屏*/ menu(); /*返回menu函数*/ 3.7 system函数void system() /*收银操作*/void sum(struct goods x); /*声明计算总计的函数*/void pmenu(struct goods y); /*声明显示回单的函数*/ struct goods good10; int i,t; clrscr(); printf(Enter the goods number and amount(0:list
18、 end):n); for(i=0,t=1;i10&t!=0;i+) /*用for循环将数据一一输入,当输入0时终止*/ do printf(goods%d number:,i+1); scanf(%d,&goodi.number); if(goodi.number=0)t=t-1; if(goodi.number=0)break; printf(goods%d amount:,i+1); scanf(%d,&goodi.m); if(goodi.number!=0&goodi.number10010) /*如果输入的商品号不是库存中的,显示错误*/ printf(nData error,pl
19、ease enter again.n); while(goodi.number!=0&goodi.number10010); /*使输入的商品是库存中的*/ sum(good); /*调用计算总价函数*/ pmenu(good); /*调用显示回单函数*/ 3.8 sum函数void sum(struct goods x) /*计算总价函数*/ int i,j,k; float sum=0; float shishou,zhaohui; for(i=0;i10;i+) /*在库存商品中查找输入的商品*/ for(j=0;j10;j+) if(xi.number=Comj.num) xi.pri
20、=Comj.price; /*查到要卖出的商品,并赋值单价*/ for(k=0;k10&xk.number!=0;k+) sum=sum+xk.pri*xk.m; /*计算总价*/ printf(Price is:%-8.2fn,sum); printf(Shi shou:); scanf(%f,&shishou); /*输入实收*/ zhaohui=shishou-sum; /*计算找回值*/ printf(Zhao hui:%-8.2fn,zhaohui); 3.9 pmenu函数void pmenu(struct goods y) /*显示回单*/ void menu(); /*声明菜单
21、函数*/ int i,j,k; float s=0; FILE *fp; printf(nntPlease press any key to print the menu.); getch(); /*从键盘读取一个字符,但不显示于屏幕*/ clrscr(); /*清屏*/ for(i=0;i10;i+) /*在库存商品中查找输入的商品*/ for(j=0;j10;j+) if(yi.number=Comj.num) yi.pri=Comj.price; /*查到要卖出的商品,并赋值单价*/ strcpy(yi.n,Comj.name); /*查到要卖出的商品,并赋值商品名*/ Comj.shu
22、liang=Comj.shuliang-yi.m; /*查到要卖出的商品,并更新数量*/ printf( n);printf(=n);printf(name price nn);for(k=0;k10&yk.number!=0;k+)s=s+yk.pri*yk.m; /*计算总价*/printf(%-14s%d*%-6.2f=%-8.2fn,yk.n,yk.m,yk.pri,yk.pri*yk.m); /*输出商品编号,名,单价*数量,单价*数量的值*/printf(=n); printf(Price is:%-8.2fn,s); /*输出总价*/printf(nnPlease press a
23、ny key back to save the information.n);getch();baocun(Com); /*将已更新的数据保存到文件*/ /*将回单的所用内容保存到文件*/ fp=fopen(xiaozhitiao.txt,a+); if(fp=fopen(xiaozhitiao.txt,a+)=NULL) printf(no filen); else fprintf(fp, n); fprintf(fp,=n); fprintf(fp,name price nn); for(i=0;i10&yi.number!=0;i+) fprintf(fp,%-14s%d*%-6.2f=
24、%-8.2fn,yi.n,yi.m,yi.pri,yi.pri*yi.m); fprintf(fp,=n); fprintf(fp,Price is:%-8.2fn,s); fclose(fp);printf(nSuccess! The information has saved in file of xiaopiao.txt.);printf(nntPlease press any key back to the menu.); getch(); clrscr(); menu();/*返回菜单*/ 4 系统运行(这部分介绍程序运行过程,系统操作使用的说明,使用测试数据运行的结果,可将运行结果
25、截图进行说明)一、系统登录:运行系统时,收银员应输入姓名、编号及密码,验证后方可使用系统。(我定义了五个用户,他们的编号名字和密码分别是:1001,lily,111111,1002,lusy,222222,1003,lucy,333333,1004,xiaoming,444444,1005,mike,555555)输入有误会提示重输(如图),超过三次自动退出。二、菜单界面包含三项:收银操作、库存商品信息、退出。当输入数据不在菜单选择范围会提示重输。如图所示三、收银操作:输入数据界面,当输入的商品在库存中没有会提示重输。还提示以0结束,结束后会自动算出总价,并提示输入实收。如图当输入实收额后,计
26、算出找赎值并显示出来,如图四、显示回单:在上图中会提示按任意键显示回单,显示回单时并提示保存回单,回单显示保存在“xiaopiao.txt”这个文件里。如图:五、库存商品信息查询:在上图中会提示按任意键返回菜单,再输入2时进入库存商品信息查询,并可以看到已经更新的商品数量,另有说明商品信息保存在“shangpin.txt”这个文件里,如图:5 总结(这部分可写课程设计过程中的学习体会与收获,出现的问题和解决的方法,没有完成的部分及原因,对C语言和本次课程设计的认识以及自己的建议等内容。) 这时可以按任意键返回菜单,或是继续收银操作或是退出。5 总结(这部分可写课程设计过程中的学习体会与收获,出
27、现的问题和解决的方法,没有完成的部分及原因,对C语言和本次课程设计的认识以及自己的建议等内容。)这次设计我是从开学老师布置后就开始想了,从欢迎界面开始,起初还不知道老师题目的要求,就把模块想了很多,也尝试去设计,后来老师个给出题目的要求了,我发现有很多和我原先想的不一样,于是我便开始去修改。刚开始在用户验证哪里,我做了一个函数,是先输入编号再输入名字和密码,我当时是用scanf函数,当我输入编号按回车时直接跳到输入密码了,经过调试和翻阅书本,我改用了gets函数便可以了。还有在显示回单时,我输出的商品价格没错,总价和数量也没错,可是在库存信息中的商品数量是从第一个开始往下更新的,我不断输入数据调试,调试我的价格赋值没错,数量赋值没错,总价计算也没错,来发现在更新数量的赋值语句中,我将循环变量j写成了i,而i是查找商品的循环,所以就会从一开始更新。我之后感觉到,做什么是都要细心,不能马虎,只是一丁点错误也会造成很大的失误。这次设计的所有要求我都基本完成了,也经过了无数次调试,虽然不能说是完美,但基本操作还是基本完成,我还加了一些内容。总而言之,这次课程设计让我获益匪浅,不仅学会了C语言的一些知识,更重要是体会到编程的不容易,一切都得掌握并能熟练运用所学的知识,在设计中还要仔细细心,尽一切力量排除万难。这在工作学习生活中都要用到的。