面向对象课程设计.docx
《面向对象课程设计.docx》由会员分享,可在线阅读,更多相关《面向对象课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
面向对象课程设计
2013—2014学年第一学期
实践教学
课程名称:
面向对象课程设计(A)
指导教师:
郑全录
专业班级:
2012级网络工程2班
教学部门:
计算机学院
北京理工大学珠海学院
课程设计说明书
_2013_—_2014_学年第_1_学期
题目:
模拟超市收银系统
学院:
计算机学院
专业班级:
网络工程2班
学号:
1202050210
学生姓名:
指导教师:
郑全录
成绩:
时间:
2013年11月13日
北京理工大学珠海学院
课程设计任务书
2013~2014学年第1学期
学生姓名:
专业班级:
网络工程2班
指导教师:
郑全录工作部门:
一、课程设计题目
模拟超市收银系统
二、课程设计内容(含技术指标)
【问题描述】
使用文本命令行界面模拟超市收银系统
●由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。
从数据库(或文件)中取出有关价格信息,再把这些信息返回给收银台。
同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库(或文件)存储以供查询。
●另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。
如果一个未持卡顾客一次性购物满200元,可为其发放一张会员卡,以后在该商场购物可获得9折优惠。
【任务要求】
要求:
建立会员账户类、商品信息类、文件读写类、界面显示类等以及各相关接口类。
三、进度安排
1.初步设计:
写出初步设计思路,进行修改完善,并进行初步设计。
2.详细设计:
根据确定的设计思想,进一步完善初步设计内容,按要求编写出数据结构类型定义、各算法程序、主函数。
编译分析调试错误。
3.测试分析:
设计几组数据进行测试分析,查找存在的设计缺陷,完善程序。
4.报告撰写:
根据上面设计过程和结果,按照要求写出设计报告。
5.答辩考核验收:
教师按组(人)检查验收,并提出相关问题,以便检验设计完成情况。
四、基本要求
1.在设计时,要严格按照题意要求独立进行设计,不能随意更改。
若确因条件所限,必须要改变课题要求时,应在征得指导教师同意的前提下进行。
2.在设计完成后,应当场运行和答辩,由指导教师验收,只有在验收合格后才能算设计部分的结束。
3.设计结束后要写出课程设计报告,以作为整个课程设计评分的书面依据和存档材料。
设计报告以规定格式的电子文档书写、打印并装订,报告格式严格按照模板要求撰写,排版及图、表要清楚、工整。
从总体来说,所设计的程序应该全部符合要求,问题模型、求解算法以及存储结构清晰;具有友好、清晰的界面;设计要包括所需要的辅助程序,如必要的数据输入、输出、显示和错误检测功能;操作使用要简便;程序的整体结构及局部结构要合理;设计报告要符合规范。
课程负责人签名:
2013年11月13日
课程设计成绩评定表
姓名
成绩评定权重
总分
总成绩
(五分制)
平时成绩20
报告成绩50
答辩成绩30
选题三:
模拟超市收银系统
摘要
模拟超市收银系统:
随着计算机的发展,计算机技术已经融入到社会生活的各个角落,把人们从以前繁琐的手工操作中解放出来,从而使信息的管理大大简便起来。
超市日常有大量的数据需要进行处
理,包括收银员收银时输入的消费者购买信息、管理员输入的入库商品信息、管理员输入的人员信息、日常销售额的统计等等。
面对如此大的信息量,就需要有相应的计算机管理系统
来提高工作的效率和系统管理的安全性。
通过这样的系统,超市就可以由收银员方便的在收
银柜台进行销售额的录入,管理员也可以方便地进行管理,从而减小手工操作的工作量,
本设计就是为了模拟超市的收银系统。
关键字:
1:
面向对象;超市收银系统;文件操作
2:
类的实现,入库实现,显示所有记录,结算的实现,查查询商品信息,销售实现,查看指令,主函数实现。
封面…………………………………………………………1
说明书………………………………………………………2
任务书………………………………………………………4
成绩评定表…………………………………………………5
摘要…………………………………………………………6
关键词………………………………………………………6
目录…………………………………………………………7
正文…………………………………………………………8
1前言………………………………………………………8
2概要设计…………………………………………………9
3详细设计…………………………………………………10
3.1文件设计……………………………………………11
3.2程序模块设计………………………………………12
4软件测试…………………………………………………15
5参考文献…………………………………………………17
6心得体会……………………………………………………18
7附录:
程序清单……………………………………………19
教师评语……………………………………………………31
答辩记录表…………………………………………………32
1
前言
1.1问题的描述
使用文本命令行界面模拟超市收银系统
●由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。
从数据库(或文件)中取出有关价格信息,再把这些信息返回给收银台。
同时把该收银台的销售总量和有关种类商品的剩余量以及该持卡顾客的消费情况交数据库(或文件)存储以供查询。
●另外,对没有卡的消费情况不记录该顾客的消费情况等个人信息。
如果一个未持卡顾客一次性购物满200元,可为其发放一张会员卡,以后在该商场购物可获得9折优惠。
1.2内容
设计一个模拟超市收银系统操作的程序,输入你需要的操作(选择相对的括号里的阿拉伯数字)程序具体功能有:
(1)顾客结账{付款方式:
1.会员结账2.普通结账}
(2)增加商品
(3)增加会员
(4)查询会员消费记录
(5)退出
1.3模块化设计
为实现系统功能,本程序主要分为五个模块。
它们分别为:
顾客结账(内含付款方式会员结账,普通结账);增加商品;增加会员;查询会员消费记录;退出,这五个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,提供客户选择的菜单。
然后,通过
执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:
顾客结账:
{1.会员结账vip_count()2.普通结账count()}
商品入库:
input()
增加会员:
CClientele()
查询会员消费记录:
Rec.read_record();
显示所有商品:
all();
找零:
change();
2概要设计
2.1算法要点描述与实现思想
从需求分析的角度来看,这个超市管理系统的需求如下所示:
该系统的功能主要是模拟超市的收银的过程,所以不需要设计数据库,当进入系统,就会显示仓库里的所有货物,当管理员输入货物编号(索引号)时,就会提示你需要买的数量,输入完成就会提示你购买成功。
再就是付款。
根据系统需求,这个版本的超市管理系统是一个简单的管理系统。
2.2面向对象程序设计
本程序中,运用了多种函数。
首先商品入库、加入会员、显示主界面、再
按数字输入进行选择性操作。
在主函数中分别调用各项的函数。
3详细设计
3.1文件设计
本程序中,运用了多种函数。
首先商品入库、加入会员、显示主界面、再按数字输入进行选择性操作。
在主函数中分别调用各项的函数。
//商品入库
voidProduct:
:
input(){
cout<<"编号:
";
cin>>id;
ifstreaminfile("Goods.dat",ios:
:
in|ios:
:
binary);//判断商品是否已存在
if(!
infile){
d_show();
exit;
}
while(infile){
intn;
infile.read((char*)&G1,sizeof(G1));
n=infile.gcount();
if(n==sizeof(G1))
if(G1.id==id){
cout<<"货物已存在,请核实后再输入!
"<return;
}
}
infile.close();
cout<<"商品名:
";
cin>>Goodsname;
cout<<"单价:
";
cin>>price;
cout<<"数量:
";
cin>>number;
G1.Setdata(id,Goodsname,price,number);
ofstreamoutfile("Goods.dat",ios:
:
app|ios:
:
binary);
if(!
outfile){
d_show();
exit;
}
outfile.write((char*)&G1,sizeof(G1));
outfile.close();
b_show();
}
//增加会员
voidClientele:
:
CClientele(){
cout<<"输入卡号:
";
cin>>num;
ofstreamoutfile("Clientele.dat",ios:
:
app|ios:
:
binary);//将文件输出提前定义,为了能创建文件
if(outfile){
ifstreaminfile("Clientele.dat",ios:
:
in|ios:
:
binary);//判断会员是否已存在
if(!
infile){
d_show();
exit;
}
while(infile){
intn;
infile.read((char*)&C1,sizeof(C1));
n=infile.gcount();
if(n==sizeof(C1))
if(C1.num==num){
cout<<"该会员以存在,请核实后再输入!
"<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){
case1:
cout<<"付款方式:
1.会员结账2.普通结账"<";
cin>>n;
show.b_show();
switch(n){
case1:
VIP.SClientele();
Goods.vip_count();
show.c_show();
break;
case2:
Goods.count();
show.c_show();
break;
}
break;
case2:
Goods.input();
break;
case3:
VIP.CClientele();
break;
case4:
Rec.read_record();
break;
case0:
return1;
}
}
return0;
}
4软件测试
4.1调试过程中的主要问题
由于本程序是分界面设计的,所以运行时选择完操作并且执行完操作后,又会继续回到主菜单,供用户继续选择操作并执行操作。
对于本程序的调试运行,总体上情况良好。
但是,其中也出现了一些小问题。
我发现的主要问题有:
从文件读取数据到vector时,有时会产生错误;以及保存到文件中时,也存在格式上的问题。
后来这些问题均以通过探究与测试中解决。
4.2测试结果
(1)主菜单(如图)
(2)商品入库
(3)增加新会员
(4)普通结账
(5)会员结账
(6)查询会员消费记录(如图)
五参考文献
[1]曹静C++面向对象程序设计教程。
北京:
中国水利出版社,2010
[2]陈维兴林小茶,C++面向对象程序设计教程(第3版)。
北京:
清华大学出版社,2004
[3]XX文库
六心得体会
在为期几周的课程设计中,我通过完成本次任务体会颇多,学到很多东西。
利用设计这次超市管理系统的机会使我熟练的掌握了这学期所学的c++面向对象编程,也更加深入理解了超市收银系统的操作原理和解了文件的用法以及其作用,为日后的如何熟练使用文件打下坚实的基础。
此外,本算法的实现采用了c++面向对象编程,使我对基类的构建,派生类的使用,有更深层次的认识。
在这次课程设计中,我还懂得了程序开发的一些比较重要的步骤,比如需求分析、总体设计、程序模块设计(含功能需求、程序代码设计与分析、运行结果)等。
总之,通过这次课程设计我们收获颇丰,相信会为我以的学习和工作带来很大的好处。
最重要的还是激发了我对编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我们对编程更加热爱了。
这次的课程设计经过多次的资料查询,以及各队友的积极参与,使这次的实践课进行的非常成功,在学习的过程中,同时也增强了集体的凝聚力。
同时程序设计最重要的是要敢于创新,而不应该止步于旧知识的应用,唯有不安于现状,才会有更大的发展空间。
七附录:
程序清单
#include
#include
#include
usingnamespacestd;
//显示类
classShow{
public:
voida_show(){
cout<<"\t***************************************************************\n";
cout<<"\t**欢迎来到超级超市**\n";
cout<<"\t***************************************************************\n";
}
staticvoidb_show(){
cout<<"------------------------------------------------------\n";
}
voidc_show(){
cout<<"\n\t************************欢迎再次光临!
*************************\n\n";
cout<<"\t**************************************************************\n\n\n\n";
}
staticvoidd_show(){
cout<<"openerror!
";
}
};
//会员类
classClientele:
publicShow{
intnum;//卡号
charname[20];//会员名
public:
Clientele(){//初始化
num=0;
name[0]=0;
}
Clientele(intnuml,char*namel){
Setdata(numl,namel);
}
~Clientele(){}
intGetnum(){returnnum;}
char*Getname(){returnname;}
voidSetdata(int,char*);//对Clientele进行赋值
voidShowClientele();//显示会员信息
voidSClientele();//搜索会员
voidCClientele();//添加会员
};
//产品类
classProduct:
publicShow{
public:
voidinput();//商品入库
voidcount();//普通结账
voidvip_count();//会员结账
voidall();//显示所有商品
voidchange();//找零
voidSetdata(int,char*,int,int);//对Product进行赋值
voidShow(int);
voidShowl(){
cout<}
Product(){//初始化
id=0;
name[0]=0;
price=0;
number=0;
}
Product(intidl,char*namel,intpricel,intnumberl){
Setdata(idl,namel,pricel,numberl);
}
~Product(){}
intGetid(){returnid;}
char*Getname(){returnname;}
intGetprice(){returnprice;}
intGetnumber(){returnnumber;}
private:
intid;//商品编号
charname[20];//商品名
intprice;//单价
intnumber;//数量
};
//记录会员消费记录类
classrecord:
publicClientele,publicProduct{
private:
intnum,goodsid,goodsprice,goodsnum;
charname[20],goodsname[20];
public:
record(){
num=0;
name[0]=0;
goodsid=0;
goodsname[0]=0;
goodsprice=0;
goodsnum=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(){}
//赋值
voidSetdata(intnuml,char*namel,intgoodsidl,char*goodsnamel,intgoodspricel,intgoodsnuml){
num=numl;
strcpy_s(name,namel);
goodsid=goodsidl;
strcpy_s(goodsname,goodsnamel);
goodsprice=goodspricel;
goodsnum=goodsnuml;
}
voidviprecord();//记录会员消费
voidread_record();//查询记录
voidShow();
};
//全局变量
ClienteleC1;
ProductG1;
recordR1;
intnum,i,j,n,id,price,number;
charname[20],Goodsname[20];
//对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(){
cout<<"输入卡号:
";
cin>>num;
b_show();
ifstreaminfile("Clientele.dat",ios:
:
in|ios:
:
binary);
if(!
infile){
d_show();
exit;
}
while(infile){
intn;
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(){
cout<<"输入卡号:
";
cin>>num;
ofstreamoutfile("Clientele.dat",ios:
:
app|ios:
:
binary);//将文件输出提前定义,为了能创建文件
if(outfile){
ifstreaminfile("Clientele.dat",ios:
:
in|ios:
:
binary);//判断会员是否已存在
if(!
infile){
d_show();