河北联合大学2011-2012第2学期《软件设计基础-C++》课程设计报告设计名称:超市收银系统姓名:刘欢学号:12专业班级:建筑环境与设备工程3班学院:建筑工程学院设计时间:2012年5月-----2012年6月设计地点:河北联合大学联系方式1038519551指导教师评语:指导教师签字:年月日成绩:《软件设计基础-C++》课程设计报告第2页,共27页目录1.课程设计目的··············································································32.课程设计任务与要求·····································································33.课程设计说明书···········································································44.课程设计成果··············································································85.程序调试过程············································································246.设计问题的不足和改进方案··························································257.课程设计心得············································································268.参考文献··················································································27《软件设计基础-C++》课程设计报告第3页,共27页1.课程设计目的《软件设计基础-C++》课程设计是这门课程的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握C++这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。2.课程设计任务与要求:要求:本次课程设计利用《软件设计基础-C++》课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。要求:1、对系统进行功能需求分析2、设计合理的数据结构和系统框架3、编程简练,程序功能齐全,能正确运行4、说明书、流程图要清楚5、课题完成后必须按要求提交课程设计报告任务:1.基本要求:(1)显示超市库存商品信息。(2)显示购物流程提示信息。(3)实现收款过程,反复输入所购各种商品的索引号和购买数量,直到输入商品索引号“-1”,结束购物流程。(4)实现收银,根据顾客所交现金,自动找零。2.创新要求在基本要求达到后,可以进行创新设计。(1)为了简单起见,本设计只要求处理一个购物篮,即假定整个超市只有一个顾客。这不是一个对真实场景的模拟,真正的场景应该是有多个顾客,可能会同时去收银台结账。因此,收银台处理的应该是一个购物篮队列,应该单独创建一个线程来追加这个队列,然后由收银台分别为每个购物篮结账,结完一个删除一个。(2)对于超市的店主来说,还应该有一个交互的界面,可以让店主来完成更改货物的单价、追加货物等操作。《软件设计基础-C++》课程设计报告第4页,共27页3.课程设计说明书⑴概要设计模块说明:在我们的程序中一共包括了四个模块,分别是:收银模块、查询模块、管理模块、退出系统模块。其中退出模块是在主菜单函数中,其他三个通过是作为switch语句中的一部分,通过switch语句,把六大模块联系了起来。在查询模块中又分为四部分:查找商品、查询所有、商品排名、退出查询,总体思路和整体的设计思路一样,退出模块在查询函数中,其他的模块也是通过switch语句将它们俩接起来的。在排名菜单中包括总金额排名和销售量排名,他们之间是通过if-else结构连接的。其中排名用的是冒泡法。管理模块:也是分为四部分,新建商品、删除商品、修改商品和退出模块,思路和上米娜的一样。其中删除商品菜单中包括删除全部和单个删除,他们之间的链接也是通过if-else结构连接的。模块结构图:超市收银系统超市收银-商品查询商品管理收银找零退出程序查找商品查询所有商品排名退出查询新建商品删除商品修改商品退出管理《软件设计基础-C++》课程设计报告第5页,共27页⑵详细设计总体流程图:主菜单超市收银商品查询商品管理退出程序按索引号收银总金额排名销售量排名查找商品退出查询商品排名查询所有新建商品删除商品修改商品退出管理单个删除全部删除购买找零按商品名购买《软件设计基础-C++》课程设计报告第6页,共27页各功能模块流程图:我的课题设计是合作的我主要负责商品查询和商品管理,其中商品管理中的商品排名是合作伙伴的部分。下面是我制作部分的功能模块流程图:商品查询流程图:商品查询查找商品查询所有商品排名退出查询输入索引号,商品名判断输出商品信息息正确错误继续是否AB输出CD主菜单《软件设计基础-C++》课程设计报告第7页,共27页商品管理流程图:商品管理新建商品输入索引号,商品名判断库中存在不存在创建新信息:输入单价、总数继续是A否删除商品B全部删除A判断有商品无商品删除成功单个删除B输入商品名判断删除成功继续无有是否判断输入商品名修改商品信息息继续有商品无正确是继续是否退出管理主菜单错误《软件设计基础-C++》课程设计报告第8页,共27页4.课程设计成果源代码:类的定义:classGoods//商品类{public://成员函数的说明Goods(){name[0]='\0';price=0;n1=0;n2=0;syh=0;}//构造函数~Goods(){}//析构函数voidsetn(char*n){strcpy(name,n);}//设置属性voidsetsyh(intsyh){this-syh=syh;}voidsetp(floatp){price=p;}voidsetn1(intn1){this-n1=n1;}voidsetn2(intn2){this-n2=n2;}char*getn(){return(char*)name;}//得到属性intgetsyh(){returnsyh;}floatgetp(){returnprice;};intgetn1(){returnn1;}intgetn2(){returnn2;}Goods*getnext();//得到next指针值voidsetnext(Goods*next);//设置next指针值private://数据成员的说明charname[20];//商品名称intsyh;//商品索引号floatprice;//价格intn1;//总件数intn2;//已卖出Goods*next;//指向下一个商品对象};Goods*Goods::getnext(){returnnext;}voidGoods::setnext(Goods*next)//类成员函数的实现{this-next=next;}classSale//销售类{public://成员函数的说明Sale(){}//构造函数~Sale(){}//析构函数voidinig();//初始化voidaddg();//增加商品voidshow();//显示商品voidrank();//排名商品《软件设计基础-C++》课程设计报告第9页,共27页voidquery();//查询商品voidmodify();//修改商品voiddelg();//删除商品voidsellg();//销售商品voidsaveg();//保存信息voidrun();//运行voidzhucaidan();voidguanli();voidchaxun();private://数据成员的说明Goods*head;//商品头指针Goods*last;//最后的商品};我制作部分:#includeiostream.h#includestring.h#includefstream.h#includeGoods.h#includeSale.hvoidSale::inig()//初始化{head=last=NULL;//将指针置空//读取文件ifstreamrf(Good.txt,ios::out|ios::nocreate,filebuf::openprot);//ios::nocreat打开一个已有的文件,如文件不存在,则打开失败,filebuf::openprot通过构造函数打开文件。if(rf.fail())cout\n\n现在还没有产品信息;//文件读取错误!else{rf.seekg(0,ios::end);//文件置尾longn=rf.tellg()/sizeof(Goods);//求取个数rf.seekg(0);//文件置开头for(inti=0;in;i++){Goods*p=newGoods;rf.read((char*)p,sizeof(Goods));p-setnext(NULL);if(head){last-setnext(p);last=p;}elsehead=last=p;}cout\n\n现在数据库中有n商品;//n个数据初始化成功!}//关闭文件《软件设计基础-C++》课程设计报告第10页,共27页rf.close();}voidSale::query()//查询商品{if(head==NULL)cout产商品信息为空!(库中暂无商品);else{loop:cout\n\n\n\n█查找商品信息█\n;inty=1;Goods*p=head;cout\n请输入索引号;intsyh;cinsyh;cout\n请输入商品名:;charn[20];cinn;while(p){if(strcmp(n,p-getn())==0){cout\n|---------------------------------------------------------------------------|;cout\n|商品索引号:p-getsyh()商品名p-getn()\t单价:p-getp()\t总数:p-getn1()\t已卖数:p-getn2()\t剩余数:p-getn1()-p-getn2();cout\n|---------------------------------------------------------------------------|;y=0;}p=p-getnext();}if(y)cout\n错误,无该商品!;elsecout\n恭喜,操作成功!\n;}cout\n\n\n|-------------------------|;cout\n|您想继续查找商品信息吗?|\n|是(Y)否(N)|;cout\n|-------------------------|\n;chary;ciny;if(y=='Y'||y=='y')gotoloop;//loop是一个c语言语句行的标号,就是为了配合goto(跳转)语句而给某行程序起的名字。}《软件设计基础-C++》课程设计报告第11页,共27页voidSale::show()//显示商品{if(head==NULL)cout\n\n产商品信息为空!(库中暂无商品);