当前位置:文档之家› 模拟超市收银系统

模拟超市收银系统

课程设计任务书2012—2013学年第2学期一、课程设计题目模拟超市收银系统(例子)二、课程设计内容使用文本命令行界面模拟超市收银系统●由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。

从数据库(或文件)中取出有关价格信息,再把这些信息返回给收银台。

同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库(或文件)存储以供查询。

●另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。

如果一个未持卡顾客一次性购物满200元,可为其发放一张会员卡,以后在该商场购物可获得9折优惠。

要求:建立会员账户类、商品信息类、文件读写类、界面显示类等以及各相关接口类。

三、进度安排(1)1-2学时,选定题目、分析需求、理解需求;(2)3-4学时,程序设计,定义数据类型、数据处理方式;(3)5-10学时,编写程序、调试、测试;(4)11-12学时,编写设计报告;(5)13-16学时,答辩。

四、基本要求(1)只能使用C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)建立银行账户类、文件读写类、界面显示类等以及各相关接口类。

(例子)(5)写出课程设计报告,应不少于3000字(不含附录),同一组学生只需提交1份,但必须在报告中列明分工。

课程负责人签名:2013年6 月28 日模拟超市收银系统(例子)摘要使用文本命令行界面模拟超市收银系统●由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。

从数据库(或文件)中取出有关价格信息,再把这些信息返回给收银台。

同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库(或文件)存储以供查询。

●另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。

如果一个未持卡顾客一次性购物满200元,可为其发放一张会员卡,以后在该商场购物可获得9折优惠。

要求:建立会员账户类、商品信息类、文件读写类、界面显示类等以及各相关接口类。

关键词:面向对象;超市收银系统;文件操作目录第一章设计内容 (1)第二章总体设计 (2)2.1模块化设计 (2)2.2程序运行示意图 (2)第三章详细设计 (3)3.1数据结构设计 (4)3.2程序模块设计 (6)第四章调试与测试 (8)4.1调试过程中的主要问题 (8)4.2测试结果 (8)参考文献 (10)心得体会 (21)设计一个模拟超市收银系统操作的程序,输入你需要的操作(选择相对的括号里的阿拉伯数字)程序具体功能有:(1)顾客结账 {付款方式:1.会员结账 2.普通结账}(2)增加商品(3)增加会员(4)查询会员消费记录(0)退出2.1模块化设计为实现系统功能,本程序主要分为五个模块。

它们分别为:顾客结账(内含付款方式:会员结账,普通结账);增加商品;增加会员;查询会员消费记录;退出,这五个函数再通过主函数调用分别得以实现。

主函数,首先提供了程序运行时的友好界面,提供客户选择的菜单。

然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。

其它各个函数的功能分别如下:顾客结账:{1.会员结账 vip_count() 2.普通结账count()}商品入库: input()增加会员: CClientele()查询会员消费记录:Rec.read_record();显示所有商品:all();找零:change();2.2 程序运行示意图否第三章详细设计3. 文件设计本程序中,运用了多种函数。

首先商品入库、加入会员、显示主界面、再按数字输入进行选择性操作。

在主函数中分别调用各项的函数。

//商品入库void Product::input(){cout<<"编号:";cin>>id;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==id){cout<<"货物已存在,请核实后再输入!"<<endl;return;}}infile.close();cout<<"商品名:";cin>>Goodsname;cout<<"单价:";cin>>price;cout<<"数量:";cin>>number;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_show();}//增加会员void Clientele::CClientele(){cout<<"输入卡号:";cin>>num;ofstream outfile("Clientele.dat",ios::app|ios::binary); //将文件输出提前定义,为了能创建文件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));n=infile.gcount();if(n==sizeof(C1))if(C1.num==num){cout<<"该会员以存在,请核实后再输入!"<<endl;return;}}infile.close();}cout<<"输入姓名:";cin>>name;C1.Setdata(num,name);outfile.write((char*)&C1,sizeof(C1));outfile.close();b_show();}3.2 程序模块设计本程序执行的入口是main函数,在main函数中首先调用了界面类中的各项操作的函数,在界面类中选择所需要进行的操作,在switch语句进行界面显示,实现超市收银系统算法的操作while(1){show.a_show();show.b_show();Goods.all();show.b_show();cout<<"1.顾客结账 2.增加商品 3.增加会员 \n\n4.查询会员消费记录 \t0.退出\n";show.b_show();cout<<"请选择:";cin>>i;show.b_show();switch (i){case 1:cout<<"付款方式:1.会员结账 2.普通结账"<<endl<<"请选择:";cin>>n;show.b_show();switch(n){case 1:VIP.SClientele();Goods.vip_count();show.c_show();break;case 2:Goods.count();show.c_show();break;}break;case 2:Goods.input();break;case 3:lientele();break;case 4:Rec.read_record();break;case 0:return 1;}}return 0;}第四章调试与测试4.1 调试过程中的主要问题由于本程序是分界面设计的,所以运行时选择完操作并且执行完操作后,又会继续回到主菜单,供用户继续选择操作并执行操作。

对于本程序的调试运行,总体上情况良好。

但是,其中也出现了一些小问题。

我发现的主要问题有:从文件读取数据到vector时,有时会产生错误;以及保存到文件中时,也存在格式上的问题。

后来这些问题均以通过探究与测试中解决。

4.2 测试结果(1)主菜单(如图)(2)商品入库(3)增加新会员(4)普通结账(5)会员结账(6)查询会员消费记录(如图)第五章超市收银系统程序代码#include<iostream>#include<string>#include<fstream>using namespace std;//显示类class Show{public:void a_show(){cout<<"\t************************************************************** *\n";cout<<"\t** 欢迎来到超级超市**\n";cout<<"\t************************************************************** *\n";}static void b_show(){cout<<"------------------------------------------------------\n";}void c_show(){cout<<"\n\t************************欢迎再次光临!*************************\n\n";cout<<"\t*********************************************************** ***\n\n\n\n";}static void d_show(){cout<<"open error!";}};//会员类class Clientele:public Show{int num; //卡号char name[20]; //会员名public:Clientele(){ //初始化num=0;name[0]=0;}Clientele(int numl,char *namel){Setdata(numl,namel);}~Clientele(){}int Getnum(){return num;}char* Getname(){return name;}void Setdata(int,char*); //对Clientele进行赋值void ShowClientele(); //显示会员信息void SClientele(); //搜索会员void CClientele(); //添加会员};//产品类class Product:public Show{public:void input(); //商品入库void count(); //普通结账void vip_count(); //会员结账void all(); //显示所有商品void change(); //找零void Setdata(int,char*,int,int); //对Product进行赋值void Show(int);void Showl(){cout<<id<<"\t"<<name<<"\t"<<price<<"\t"<<number<<endl;}Product(){ //初始化id=0;name[0]=0;price=0;number=0;}Product(int idl,char *namel,int pricel,int numberl){Setdata(idl,namel,pricel,numberl);}~Product(){}int Getid(){return id;}char* Getname(){return name;}int Getprice(){return price;}int Getnumber(){return number;}private:int id; //商品编号char name[20]; //商品名int price; //单价int number; //数量};//记录会员消费记录类class record:public Clientele,public Product{private:int num,goodsid,goodsprice,goodsnum;char name[20],goodsname[20];public:record(){num=0;name[0]=0;goodsid=0;goodsname[0]=0;goodsprice=0;goodsnum=0;}record(int numl,char*namel,int goodsidl,char*goodsnamel,int goodspricel,intgoodsnuml):Clientele(numl,namel),Product(goodsidl,goodsnamel,goodspricel,go odsnuml){Setdata(numl,namel,goodsidl,goodsnamel,goodspricel,goodsnuml);}~record(){}//赋值void Setdata(int numl,char*namel,int goodsidl,char*goodsnamel,intgoodspricel,int goodsnuml){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 name[20],Goodsname[20];//对Clientele进行赋值void Clientele::Setdata(int numl,char *namel){num=numl;strcpy_s(name,namel);}//Product赋值void Product::Setdata(int idl,char *namel,int pricel,int numberl){ id=idl;strcpy_s(name,namel);price=pricel;number=numberl;}//查询会员信息void Clientele::SClientele(){ cout<<"输入卡号:";cin>>num;b_show();ifstream infile("Clientele.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();}//记录新会员void Clientele::CClientele(){ cout<<"输入卡号:";cin>>num;ofstream outfile("Clientele.dat",ios::app|ios::binary); //将文件输出提前定义,为了能创建文件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数据,长度为C1n=infile.gcount(); //gcount()用来获得实际读取的字节数,不出错n是等于C1的长度if(n==sizeof(C1)) //如果n等于C1的长度,就可以执行if(C1.num==num){cout<<"该会员以存在,请核实后再输入!"<<endl;return;}}infile.close();}cout<<"输入姓名:";cin>>name;C1.Setdata(num,name);outfile.write((char*)&C1,sizeof(C1));outfile.close();b_show();}//商品入库void Product::input(){cout<<"编号:";cin>>id;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==id){cout<<"货物已存在,请核实后再输入!"<<endl;return;}}infile.close();cout<<"商品名:";cin>>Goodsname;cout<<"单价:";cin>>price;cout<<"数量:";cin>>number;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_show();}//显示所有商品void Product::all(){ifstream infile("Goods.dat",ios::in|ios::binary);if(!infile){ //如果打开文件失败,则创建文件ofstream outfile("Goods.dat",ios::binary);outfile.close();}cout<<"编号\t"<<"名字\t"<<"单价\t"<<"数量\t"<<endl;while(infile){int n;infile.read((char*)&G1,sizeof(G1));n=infile.gcount();if(n==sizeof(G1))G1.Showl();}infile.close();}//普通结账void Product::count(){int s=0,S=0,k;cout<<"结束输入按“0”"<<endl;do{cout<<"商品编号:";cin>>i;cout<<"购买数量:";cin>>j;b_show();ifstream infile("Goods.dat",ios::in|ios::binary);if(!infile){d_show();exit;}while(infile){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; //导入单价和购买数量,进行结算S=S+s;break;}}infile.close();}while(i!=0);cout<<"金额:"<<S<<endl;cout<<"收款:";cin>>k;cout<<"找零:"<<k-S<<endl;if(S>200){ //消费超过200,办理会员cout<<"消费已超过200,可办理会员,“y/n”"<<endl;char l;cin>>l;if(l='y')lientele();}b_show();}//会员结账void Product::vip_count(){int s=0,S=0,k;cout<<"结束输入按“0”"<<endl;do{cout<<"商品编号:";cin>>i;cout<<"购买数量:";cin>>j;ifstream infile("Goods.dat",ios::in|ios::binary);if(!infile){d_show();}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; //导入单价和购买数量,进行结算S=S+s;R1.viprecord();break;}}infile.close();}while(i!=0);cout<<"金额:"<<S<<endl;cout<<"会员价:"<<S*0.9<<endl;cout<<"收款:";cin>>k;cout<<"找零:"<<k-(S*0.9)<<endl;b_show();}//将会员消费记录到文档record中void record::viprecord(){ofstream outfile("record.dat",ios::out|ios::app|ios::binary);if(!outfile){d_show();exit;}Setdata(C1.Getnum(),C1.Getname(),G1.Getid(),G1.Getname(),G1.Getprice(), j);outfile.write((char*)&R1,sizeof(R1));outfile.close();}//查询会员消费记录void record::read_record(){int m;ifstream infile("record.dat",ios::in|ios::binary);if(!infile){d_show();exit;}cout<<"输入查询会员号:";cin>>m;b_show();while(infile){int n;infile.read((char*)&R1,sizeof(R1));n=infile.gcount();if(n==sizeof(R1))if(R1.num==m){R1.Show();b_show();}}}//会员显示void Clientele::ShowClientele(){cout<<"会员卡号:"<<num<<endl<<"会员名:"<<name<<endl;}//商品显示void Product::Show(int j){cout<<"编号\t"<<"名字\t"<<"单价\t"<<"余量\t"<<endl<<id<<"\t"<<name<<"\t"<<price<<"\t"<<number-j<<endl; }//显示会员消费记录void record::Show(){cout<<"会员卡号:"<<num<<endl<<"会员名:"<<name<<endl<<"商品编号:"<<goodsid<<endl<<"商品名:"<<goodsname<<endl<<"单价:"<<goodsprice<<endl<<"数量"<<goodsnum<<endl;}//主函数int main(){Clientele VIP;Product Goods;record Rec;Show show;int i,n;while(1){system("cls");show.a_show();show.b_show();cout<<"1.顾客结账 2.增加商品 3.增加会员 \n\n4.查询会员消费记录\t0.退出\n";show.b_show();cout<<"请选择:";cin>>i;show.b_show();switch (i){case 1:cout<<"付款方式:1.会员结账 2.普通结账"<<endl<<"请选择:";cin>>n;show.b_show();switch(n){case 1:system("cls");show.a_show();show.b_show();Goods.all();show.b_show();VIP.SClientele();Goods.vip_count();show.c_show();break;case 2:system("cls");show.a_show();show.b_show();Goods.all();show.b_show();Goods.count();show.c_show();break;}break;case 2:system("cls");Goods.input();break;case 3:system("cls");lientele();break;case 4:system("cls");Rec.read_record();break;case 0:return 1;}getchar();getchar();}return 0;}参考文献[1]曹静C++面向对象程序设计教程。

相关主题