《VC++课程设计报告小型超市商品管理系统.doc》由会员分享,可在线阅读,更多相关《VC++课程设计报告小型超市商品管理系统.doc(36页珍藏版)》请在三一办公上搜索。
1、东莞理工学院三级项目设计报告课程:学号: 姓名: 班级:教师: 2012年 1月 1日目录第一章 系统概述31.1 功能简介31.2 设计思路3第二章 系统功能的分析和设计42.1初始录入/添加函数42.2修改/删除函数42.3 查询/显示全部(利润)函数42.3.1 显示全部42.3.1 按条件查询52.4 查看过期食品函数52.5 退出系统5第三章 调试及运行结果63.1 主菜单63.2初始录入/添加功能63.3修改/删除功能63.4查询/显示全部(利润)功能73.5 查看过期食品功能8第四章 总结94.1 遇到的问题及解决方法94.2 收获和体会9附录:程序代码10第一章 系统概述1.1
2、 功能简介本软件是一个简单的小型超市商品管理系统,软件窗口为DOS页面。小型超市商品管理系统的功能主要是实现小型超市商品的信息化管理。通过小型超市商品管理系统,商品管理人员可以实现对商品信息的增加、删除、修改、查询和计算利润等操作。本系统最大的优点就是操作简便快捷等。1.2 设计思路将商品信息定义为一个good类,在类中包含私有数据成员int num,string name,double cost,double price,string indate,int kpdate,string brand,string sort,string trademark,分别表示商品编号、商品名、进价、售价、
3、食品出产日期、保质期、化妆品牌、日用品类型、饮料商标。公有成员函数包括in( ) ,change( ) ,search( ) ,profit( ) ,分别通过其四个子函数分别对应四种不同的商品用来实现对商品信息的数据初始录入和增加数据、修改和删除数据、查询和显示全部数据、计算商品利润功能。然后定义了一个menu( ) 菜单函数,使功能菜单显示在运行窗口以提示用户如何进行操作。主函数是一个程序必不可少的,在主函数中,创建一个good类的对象one并运行one的menu()函数开始使用本系统。第二章 系统功能的分析和设计在本章中,主要是介绍各个功能函数的设计思路和实现方法。2.1初始录入/添加函数
4、此函数实现的功能主要是,对商品信息的初始化录入以及增加功能,在初始时,文件中没有任何数据,可以通过次函数输入任意个商品的信息,在输入时通过一个if条件语句来实现控制循环,当输入的姓名是“0”时,使用break语句就跳出循环,即停止输入学生信息。增加功能同此原理。在此函数中使用文件处理的方式,先建立一个文件输出流对象,根据用户的需要操作分别以增加的方式打开d:/food.txt;d:/ cosmetics.txt;d:/ dailyuse.txt;d:/ liquid.txt文件,分别对应食物,化妆品,日用品,饮料四种商品,使输入的商品信息都分类写入文件。2.2修改/删除函数此函数实现的功能主要
5、是,修改/删除一个商品的信息。在此函数中,先以读的方式打开文件,读出文件里的信息在显示在屏幕上,关闭文件。用户再根据提示信息输入想要修改/删除的商品的商品编号,选择是删除还是修改该商品信息。再以写的方式打开文件,以一个if条件语句控制,再重新将商品信息写入文件(选择删除功能的话则除了打算删除的那个商品的信息),由于是以写的方式打开的文件,所以文件里原有的输入就都没有了,存入的新的数据。2.3 查询/显示全部(利润)函数 在查询/显示全部功能中,可以按多条件查询,若不按条件查询则可选择显示该类别全部商品信息且计算利润。本系统有两个基本查询条件,即按商品编号查询和按商品名查询,也可根据商品的特殊信
6、息进行查询。使用if语句来选择查询条件。 2.3.1 显示全部 根据提示信息输入需要查询哪种类型的商品后,然后再选择显示全部功能使用一个for循环语句,显示全部该类别信息,并计算利润。 2.3.1 按条件查询 根据提示信息选择各种条件查询后,然后使用一个for循环语句,从第一个学生开始检索,如果该商品的信息和输入的条件一致,则输出该商品的信息。 当无查询结果时,则无显示 。2.4 查看过期食品函数 此功能实现的功能主要是,创建了一个日期类date,方便对生产日期和保质期的计算。首先要求用户输入今日的日期。再以读的方式打开食品商品文件,读出文件的信息并对生产日期和保质期利用日期类date进行求和
7、。再以用户输入的今日日期进行求差。若结果为负数则输出“已过期!”,若结果为正数则输出还剩余几天。2.5 退出系统 当输入“0”时,就能退出系统,这是通过switch语句来控制实现的。当用户输入switch已定义的数字之外的数字,自动退出运用。再按任意键则退出DOS界面,第三章 调试及运行结果3.1 主菜单主菜单显示如下:图3-1 主菜单3.2初始录入/添加功能按1则进入输入/添加菜单,如图3-2-1:再选择相应的商品类型进行输入,如图3-2-2:图3-2-1 输入/添加菜单 图3-2-2 输入/添加过程3.3修改/删除功能进入主菜单后选择2,进入修改/删除功能,如图3-3-1;再选择相应的商品
8、类型进行操作,根据提示进行操作,如图3-3-2;图3-3-1修改/删除菜单图3-3-1修改/删除过程3.4查询/显示全部(利润)功能进入主菜单后选择3,进入查询/显示全部功能菜单,如图3-4-1,根据相应操作输入需要查询的类型。根据相应操作进行查询。图3-4-1 查询菜单 图3-4-2 食品查询菜单图3-4-3查询全部(利润)3.5 查看过期食品功能进入主菜单后选择4,查看过期食品功能。 图3-5 查看食品第四章 总结4.1 遇到的问题及解决方法1P:商品分为四类,不像其他题目一样只有一类。 S: 商品分为四类,若然创建一个商品类再派生四个类则函数不好连接。所以把四种类型的变量,函数集中到一个
9、类里。2P:一个功能需要分成四个子函数来完成,并且要创建一个功能菜单,导致程序过长,并且出现下列错误:fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit编译器限制 : 达到内部堆限制;。 S:将功能缩减整合,减少不必要的变量和多余的代码重复。3P:如何做到检查食品是否过期功能。 S:设定一个日期类。编写关于日期计算的函数来达到。4P:参考源程序第二次启动EXE不能查看全部数据。 S:改为用数组一次读取全部数据,引入变量记录读取的数据数量再循环输出。4
10、.2 收获和体会个人感受首先,老师给的那个参考源程序有些不完美。例如程序第二次启动就不能查询到信息,不过里面倒是有很多代码可以复制下。做了一晚上的程序,外加弄了一晚上的这份报告,其实也学到很多东西。首先,不懂的东西要百度。其次,大概是遇到问题要绕弯吧,很多问题不能直接解决。总体来说这个题目应该是在十个题目里最难的,因为它的处理对象分成四个类型。而且其他题目可以直接从参考源程序里复制修改下,甚至可以在网上找到全部。附录:程序代码#include#include#include#includeusing namespace std;class good /商品构造private:int num,k
11、pdate;/保质期string name;string indate;/食品出厂日期string brand;/化妆品牌string sort;/日常用品分类string trademark;/饮料商标double cost,price;public:void menu();void in();void setfood();void setcosmetics();void setdailyuse();void setliquid();void change();void changefood();void changecosmetics();void changedailyuse();voi
12、d changeliquid();void search();void searchfood();void searchcosmetics();void searchdailyuse();void searchliquid();void cheak();class dateprivate:int year,month,day;public:void set(int x)year=x/10000;month=(x-year*10000)/100;day=x-year*10000-month*100;int cdate(int x,date &y)int m;m=-(y.year-year)*36
13、5+(y.month-month)*30+y.day-day)+x;return m;void good:menu()coutendl;cout 1.输入/添加 endl;cout 2.修改/删除 endl;cout 3.查询/利润 endl;cout 4.查看过期食品(new!) endl;cout 0.退出 endl;coutx; switch(x)case 1:in();break;case 2:change();break;case 3:search();break;case 4:cheak();void good:in()coutendl;cout请根据需要输入对应序号 endl;c
14、out 1.输入食品信息 endl;cout 2.输入化妆品信息 endl;cout 3.输入日常用品信息 endl;cout 4.输入饮料信息 endl;cout 0.返回菜单 endl;coutx; switch(x)case 1:setfood();break;case 2:setcosmetics();break;case 3:setdailyuse();break;case 4:setliquid();break;case 0:menu();break;void good:setfood()int i;ofstream outfile;outfile.open(d:food.txt,
15、ios:app); if(!outfile)cerr open errorendl; exit(1);for(i=0;i+)cout当商品编号输入为0时,返回上一菜单。endl;coutnum;if(num=0)break;if(num!=0)coutname; outfilenum ; outfilename ; coutcost; outfilecost ; coutprice; outfileprice ; coutindate; outfileindate ; coutkpdate; outfilekpdateendl;outfile.close();menu();void good:
16、setcosmetics()int i;ofstream outfile;outfile.open(d:cosmetics.txt,ios:app); if(!outfile)cerr open errorendl; exit(1);for(i=0;i+)cout当商品编号输入为0时,返回上一菜单。endl;cout请输入商品编号:num;if(num=0)break;if(num!=0)coutname; outfilenum ; outfilename ; coutcost; outfilecost ; coutprice; outfileprice ; coutbrand; outfil
17、ebrandendl;outfile.close();menu();void good:setdailyuse()int i,x;ofstream outfile;outfile.open(d:dailyuse.txt,ios:app); if(!outfile)cerr open errorendl; exit(1);for(i=0;i+)cout当商品编号输入为0时,返回上一菜单。endl;coutnum;if(num=0)break;if(num!=0)coutname; outfilenum ; outfilename ; coutcost; outfilecost ; coutpri
18、ce; outfileprice ; coutendl; cout请根据分类输入对应序号 endl; cout 1.输入服装信息 endl; cout 2.输入鞋帽信息 endl; cout 3.输入清洁用品信息 endl; coutx; switch(x) case 1:sort=服装;break; case 2:sort=鞋帽;break; case 3:sort=清洁用品;break; outfilesortendl;outfile.close();menu();void good:setliquid()int i;ofstream outfile;outfile.open(d:liqu
19、id.txt,ios:app); if(!outfile)cerr open errorendl; exit(1);for(i=0;i+)cout当商品编号输入为0时,返回上一菜单。endl;coutnum;if(num=0)break;if(num!=0)coutname; outfilenum ; coutcost; outfilecost ; coutprice; outfileprice ; couttrademark; outfiletrademarkendl;outfile.close();menu();void good:change()coutendl;cout请根据需要输入对
20、应序号 endl;cout 1.修改食品信息 endl;cout 2.修改化妆品信息 endl;cout 3.修改日常用品信息 endl;cout 4.修改饮料信息 endl;cout 0.返回菜单 endl;coutx; switch(x)case 1:changefood();break;case 2:changecosmetics();break;case 3:changedailyuse();break;case 4:changeliquid();break;case 0:menu();break;void good:changefood()bool c;int i,k,m=0,kpd
21、ate50;int num50;double cost50,price50;string name50,indate50;ifstream infile(d:food.txt,ios:in); if(!infile)cerr open errorendl;exit(1);cout ;coutsetw(9)商品编号;coutsetw(9)商品名;coutsetw(9)进价;coutsetw(9)售价;coutsetw(9)生产日期;coutsetw(9)保质期endl;for(i=0;inumi;infilenamei;infilecosti;infilepricei;infileindatei
22、;infilekpdatei;m+; if(infile.eof()break;m-;for(i=0;im;i+)cout ;coutsetw(9)numi;coutsetw(9)namei;coutsetw(9)costi;coutsetw(9)pricei;coutsetw(9)indatei;coutsetw(9)kpdateiendl;coutmendl;infile.close();ofstream outfile(d:food.txt,ios:out);if(!outfile) cerr open errorendl; exit(1); cout请输入需要修改的商品的编号。k;co
23、ut修改:1;删除:0:c;if(c)for(i=0;im;i+)if(k=numi)k=i;break;cout请输入新的数据:endl;cout食品名:namek;coutcostk;coutpricek;coutindatek;coutkpdatek;for(i=0;im;i+) outfilenumi ;outfilenamei ;outfilecosti ;outfilepricei ;outfileindatei ;outfilekpdatei endl;outfile.close();cout已修改成功!endl;elsefor(i=0;im;i+)if(i!=k)outfile
24、numi ;outfilenamei ;outfilecosti ;outfilepricei ;outfileindatei ;outfilekpdatei endl;outfile.close();cout已删除成功!endl;menu();void good:changecosmetics()bool c;int i,k,m=0;int num50;double cost50,price50;string name50,brand50;ifstream infile(d:cosmetics.txt,ios:in); if(!infile)cerr open errorendl;exit(
25、1);cout ;coutsetw(9)商品编号;coutsetw(9)商品名;coutsetw(9)进价;coutsetw(9)售价;coutsetw(9)品牌endl;for(i=0;i50;i+)coutnumi;infilenamei;infilecosti;infilepricei;infilebrandi;m+;if(infile.eof()break;m+;for(i=0;im;i+)cout ;coutsetw(9)numi;coutsetw(9)namei;coutsetw(9)costi;coutsetw(9)pricei;coutsetw(9)brandiendl;inf
26、ile.close();ofstream outfile(d:cosmetics.txt,ios:out);if(!outfile) cerr open errorendl; exit(1); cout请输入需要修改的商品的编号。k;cout修改:1;删除:0:c;if(c)for(i=0;im;i+)if(k=numi)k=i;break;cout新的数据:;coutnamek;coutcostk;coutpricek;coutbrandk;for(i=0;im;i+) outfilenumi ;outfilenamei ;outfilecosti ;outfilepricei ;outfi
27、lebrandi endl;outfile.close();cout已修改成功!endl;elsefor(i=0;im;i+)if(i!=k)outfilenumi ;outfilenamei ;outfilecosti ;outfilepricei ;outfilebrandi endl;outfile.close();cout已删除成功!endl;menu();void good:changedailyuse()bool c;int i,k,m=0;int num50;double cost50,price50;string name50,sort50;ifstream infile(d:
28、dailyuse.txt,ios:in); if(!infile)cerr open errorendl;exit(1);cout ;coutsetw(9)商品编号;coutsetw(9)商品名;coutsetw(9)进价;coutsetw(9)售价;coutsetw(9)类别endl;for(i=0;i50;i+)coutnumi;infilenamei;infilecosti;infilepricei;infilesorti;m+;if(infile.eof()break;m-;for(i=0;im;i+)cout ;coutsetw(9)numi;coutsetw(9)namei;cou
29、tsetw(9)costi;coutsetw(9)pricei;coutsetw(9)sortiendl;infile.close();ofstream outfile(d:dailyuse.txt,ios:out);if(!outfile) cerr open errorendl; exit(1); cout请输入需要修改的商品的编号。k;cout修改:1;删除:0:c;if(c)for(i=0;im;i+)if(k=numi)k=i;break;cout请输入新的数据:endl;coutnamek;coutcostk;coutpricek;coutsortk;for(i=0;im;i+)
30、outfilenumi ;outfilenamei ;outfilecosti ;outfilepricei ;outfilesorti endl;outfile.close();cout已修改成功!endl;elsefor(i=0;im;i+)if(i!=k)outfilenumi ; outfilenamei ; outfilecosti ; outfilepricei ; outfiletrademarki endl;outfile.close();cout已删除成功!endl;menu();void good:changeliquid()bool c;int i,k,m=0;int n
31、um50;double cost50,price50;string name50,trademark50;ifstream infile(d:liquid.txt,ios:in); if(!infile)cerr open errorendl;exit(1);cout ;coutsetw(9)商品编号;coutsetw(9)商品名;coutsetw(9)进价;coutsetw(9)售价;coutsetw(9)生产日期;coutsetw(9)商标endl;for(i=0;inumi;infilenamei;infilecosti;infilepricei;infiletrademarki;m+;if(infile.eof()break;m-;coutsetw(9)商标endl;for(i=0;im;i+)cout ;coutsetw(9)numi;coutsetw(9)namei;coutsetw(9)costi;coutsetw(9)pricei;coutsetw(9)trademarkiendl