1、模拟超市收银系统课程设计任务书20122013学年第2学期一、课程设计题目 模拟超市收银系统(例子)二、课程设计内容使用文本命令行界面模拟超市收银系统由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库(或文件)中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库(或文件)存储以供查询。另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次性购物满200元,可为其发放一张会员卡,以后在该商场购物可获得9折优惠。要求:建立会员账户类、商品信息类、文件读写类、界面显示类等以及各相关接口类
2、。三、进度安排(1)1-2学时,选定题目、分析需求、理解需求;(2)3-4学时,程序设计,定义数据类型、数据处理方式;(3)5-10学时,编写程序、调试、测试;(4)11-12学时,编写设计报告;(5)13-16学时,答辩。四、基本要求(1)只能使用C+语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)建立银行账户类、文件读写类、界面显示类等以及各相关接口类。(例子)(5)写出课程设计报告,应不少于3000字(不含附录),同一组学生只需提交1份,但必须在报告中列明分工。课程负责人签名: 20
3、13年 6 月28 日模拟超市收银系统(例子)摘要使用文本命令行界面模拟超市收银系统由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。从数据库(或文件)中取出有关价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库(或文件)存储以供查询。另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。如果一个未持卡顾客一次性购物满200元,可为其发放一张会员卡,以后在该商场购物可获得9折优惠。要求:建立会员账户类、商品信息类、文件读写类、界面显示类等以及各相关接口类。关键词:面向对象;超市收银系统;文件操作第一章设计内容设计一个模
4、拟超市收银系统操作的程序,输入你需要的操作(选择相对的括号里的阿拉伯数字)程序具体功能有:(1)顾客结账 付款方式:1.会员结账 2.普通结账(2)增加商品(3)增加会员 (4)查询会员消费记录(0) 退出第二章 总体设计2.1模块化设计为实现系统功能,本程序主要分为五个模块。它们分别为:顾客结账 (内含付款方式:会员结账 ,普通结账);增加商品;增加会员 ;查询会员消费记录; 退出,这五个函数再通过主函数调用分别得以实现。主函数,首先提供了程序运行时的友好界面,提供客户选择的菜单。然后,通过执行多分支选择语句switch语句,分别实现其它各个函数的调用功能。其它各个函数的功能分别如下:顾客结
5、账 :1.会员结账 vip_count() 2.普通结账count() 商品入库 : input()增加会员 : CClientele()查询会员消费记录 : Rec.read_record();显示所有商品: all(); 找零: change();2.2 程序运行示意图是否是否第三章 详细设计3. 文件设计本程序中,运用了多种函数。首先商品入库、加入会员、显示主界面、再按数字输入进行选择性操作。在主函数中分别调用各项的函数。/商品入库void Product:input() coutid; ifstream infile(Goods.dat,ios:in|ios:binary); /判断商
6、品是否已存在 if(!infile) d_show(); exit; while(infile) int n; infile.read(char*)&G1,sizeof(G1); n=infile.gcount(); if(n=sizeof(G1) if(G1.id=id) cout货物已存在,请核实后再输入!endl; return; infile.close(); coutGoodsname; coutprice; coutnumber; G1.Setdata(id,Goodsname,price,number); ofstream outfile(Goods.dat,ios:app|io
7、s:binary); if(!outfile) d_show(); exit; outfile.write(char*)&G1,sizeof(G1); outfile.close(); b_show();/增加会员void Clientele:CClientele() coutnum; ofstream outfile(Clientele.dat,ios:app|ios:binary); /将文件输出提前定义,为了能创建文件 if(outfile) ifstream infile(Clientele.dat,ios:in|ios:binary); /判断会员是否已存在 if(!infile)
8、d_show(); exit; while(infile) int n; infile.read(char*)&C1,sizeof(C1); n=infile.gcount(); if(n=sizeof(C1) if(C1.num=num) cout该会员以存在,请核实后再输入!endl; return; infile.close(); coutname; C1.Setdata(num,name); outfile.write(char*)&C1,sizeof(C1); outfile.close(); b_show();3.2 程序模块设计本程序执行的入口是main函数,在main函数中首先
9、调用了界面类中的各项操作的函数,在界面类中选择所需要进行的操作,在switch语句进行界面显示,实现超市收银系统算法的操作while(1) show.a_show(); show.b_show(); Goods.all(); show.b_show(); cout1.顾客结账 2.增加商品 3.增加会员 nn4.查询会员消费记录 t0.退出n; show.b_show(); couti; show.b_show(); switch (i) case 1: cout付款方式:1.会员结账 2.普通结账endln; show.b_show(); switch(n) case 1: VIP.SCli
10、entele(); Goods.vip_count(); show.c_show(); break; case 2: Goods.count(); show.c_show(); break; break; case 2: Goods.input(); break; case 3: VIP.CClientele(); break; case 4: Rec.read_record(); break; case 0: return 1; return 0;第四章 调试与测试4.1 调试过程中的主要问题由于本程序是分界面设计的,所以运行时选择完操作并且执行完操作后,又会继续回到主菜单,供用户继续选择操
11、作并执行操作。对于本程序的调试运行,总体上情况良好。但是,其中也出现了一些小问题。我发现的主要问题有:从文件读取数据到vector时,有时会产生错误;以及保存到文件中时,也存在格式上的问题。后来这些问题均以通过探究与测试中解决。4.2 测试结果(1)主菜单(如图)(2)商品入库(3)增加新会员(4)普通结账(5)会员结账(6)查询会员消费记录(如图)第五章 超市收银系统程序代码#include#include#includeusingnamespace std;/显示类classShowpublic:void a_show() coutt*n; coutt* 欢 迎 来 到 超 级 超 市 *
12、n; coutt*n; staticvoid b_show() cout-n; void c_show()coutnt*欢迎再次光临!*nn;coutt*nnnn; staticvoid d_show() coutopen error!; ;/会员类classClientele:publicShowint num; /卡号char name20; /会员名public: Clientele() /初始化 num=0; name0=0; Clientele(intnuml,char *namel) Setdata(numl,namel); Clientele()int Getnum()retur
13、n num;char* Getname()return name;void Setdata(int,char*); /对Clientele进行赋值void ShowClientele(); /显示会员信息void SClientele(); /搜索会员void CClientele(); /添加会员;/产品类classProduct:publicShowpublic: void input(); /商品入库void count(); /普通结账void vip_count(); /会员结账void all(); /显示所有商品void change(); /找零void Setdata(int
14、,char*,int,int); /对Product进行赋值void Show(int);void Showl() coutidtnametpricetnumberendl; Product() /初始化 id=0; name0=0; price=0; number=0; Product(intidl,char *namel,intpricel,intnumberl) Setdata(idl,namel,pricel,numberl); Product()int Getid()return id;char* Getname()return name;int Getprice()return p
15、rice;int Getnumber()return number;private: int id; /商品编号char name20; /商品名int price; /单价int number; /数量;/记录会员消费记录类classrecord:publicClientele,publicProductprivate:int num,goodsid,goodsprice,goodsnum;char name20,goodsname20;public: record() num=0; name0=0; goodsid=0; goodsname0=0; goodsprice=0; goodsn
16、um=0; record(intnuml,char*namel,intgoodsidl,char*goodsnamel,intgoodspricel,intgoodsnuml):Clientele(numl,namel),Product(goodsidl,goodsnamel,goodspricel,goodsnuml) Setdata(numl,namel,goodsidl,goodsnamel,goodspricel,goodsnuml); record()/赋值void Setdata(intnuml,char*namel,intgoodsidl,char*goodsnamel,intg
17、oodspricel,intgoodsnuml) num=numl; strcpy_s(name,namel); goodsid=goodsidl; strcpy_s(goodsname,goodsnamel); goodsprice=goodspricel; goodsnum=goodsnuml; void viprecord(); /记录会员消费void read_record(); /查询记录void Show();/全局变量Clientele C1;Product G1;record R1;int num,i,j,n,id,price,number;char name20,Goodsn
18、ame20;/对Clientele进行赋值voidClientele:Setdata(intnuml,char *namel) num=numl; strcpy_s(name,namel);/Product赋值voidProduct:Setdata(intidl,char *namel,intpricel,intnumberl) id=idl; strcpy_s(name,namel); price=pricel; number=numberl;/查询会员信息voidClientele:SClientele() coutnum; b_show();ifstream infile(Cliente
19、le.dat,ios:in|ios:binary);if(!infile) d_show(); exit; while(infile)int n; infile.read(char*)&C1,sizeof(C1); n=infile.gcount();if(n=sizeof(C1)if(C1.num=num) C1.ShowClientele();break; infile.close(); b_show();/记录新会员voidClientele:CClientele() coutnum;ofstream outfile(Clientele.dat,ios:app|ios:binary);
20、/将文件输出提前定义,为了能创建文件if(outfile)ifstream infile(Clientele.dat,ios:in|ios:binary); /判断会员是否已存在if(!infile) d_show(); exit; while(infile)int n; infile.read(char*)&C1,sizeof(C1);/从文件中读取C1数据,长度为C1 n=infile.gcount();/gcount()用来获得实际读取的字节数,不出错n是等于C1的长度if(n=sizeof(C1)/如果n等于C1的长度,就可以执行if(C1.num=num) cout该会员以存在,请核
21、实后再输入!endl;return; infile.close(); coutname; C1.Setdata(num,name); outfile.write(char*)&C1,sizeof(C1); outfile.close(); b_show();/商品入库voidProduct:input() coutid;ifstream infile(Goods.dat,ios:in|ios:binary); /判断商品是否已存在if(!infile) d_show(); exit; while(infile)int n; infile.read(char*)&G1,sizeof(G1); n
22、=infile.gcount();if(n=sizeof(G1)if(G1.id=id) cout货物已存在,请核实后再输入!endl;return; infile.close(); coutGoodsname; coutprice; coutnumber; G1.Setdata(id,Goodsname,price,number);ofstream outfile(Goods.dat,ios:app|ios:binary);if(!outfile) d_show(); exit; outfile.write(char*)&G1,sizeof(G1); outfile.close(); b_s
23、how();/显示所有商品voidProduct:all()ifstream infile(Goods.dat,ios:in|ios:binary);if(!infile) /如果打开文件失败,则创建文件ofstream outfile(Goods.dat,ios:binary); outfile.close(); cout编号t名字t单价t数量tendl;while(infile)int n; infile.read(char*)&G1,sizeof(G1); n=infile.gcount();if(n=sizeof(G1) G1.Showl(); infile.close();/普通结账
24、voidProduct:count()int s=0,S=0,k; cout结束输入按“0”endl;do couti; coutj; b_show();ifstream infile(Goods.dat,ios:in|ios:binary);if(!infile) d_show(); exit; while(infile)int n; infile.read(char*)&G1,sizeof(G1); n=infile.gcount();if(n=sizeof(G1)if(G1.id=i) G1.Show(j); b_show(); s=G1.price*j; /导入单价和购买数量,进行结算
25、 S=S+s;break; infile.close(); while(i!=0); cout金额:Sendl; coutk; cout找零:k-S200) /消费超过200,办理会员 cout消费已超过200,可办理会员,“y/n”l;if(l=y) C1.CClientele(); b_show();/会员结账 voidProduct:vip_count()int s=0,S=0,k; cout结束输入按“0”endl;do couti; coutj;ifstream infile(Goods.dat,ios:in|ios:binary);if(!infile) d_show(); exit; while(infile)int n; infile.read(char*)&G1,sizeof(G1); n=infile.gcount();if(n=sizeof(G1)if(G1.id=i) G1.Show(j);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1