《商场销售管理系统C++课程设计报告书.docx》由会员分享,可在线阅读,更多相关《商场销售管理系统C++课程设计报告书.docx(36页珍藏版)》请在三一办公上搜索。
1、大学程序设计课程设计报告商场销售管理系统学号姓名 坦.今. EIr寒董K 9sKis.s 寸4n也是wmcn尊蹴卅着H 眠皿八. 存在的不足与对策13九. 编程体会14十.程序源代码15.需求分析本系统旨在实现一个小型的商城销售管理系统,对于一个小型的 商场或销售店铺来说,实施本系统不仅可以减少工作人员数量,降 低成本,而且可以大大提高工作效率,降低工作强度,方便卖家记 录商品流通信息,统计销售情况,分析市场需求,帮助卖家更好的 管理商场,以获取跟多的利润。程序主要实现进货管理、商品基本信息查询与修改、利润计算与 销售统计、库存管理等及一些辅助功能。二.程序主要功能该程序的主要功能有1. 商品
2、信息管理可对商品信息进行查看、按一定规则排序及商品查找,其中具体信息包括商品名称,编号,进货成本价,销售价,进 货总量,销售量,可以对库存,已获得利润,总体成本价等进 行计算2. 管理员功能可实现对商品信息的进行修改,添加,删除等功能,并进行文件的操作储存,以更好的保护信息,能有效的管理好商 品信息的隐秘性。3. 辅助功能该程序实现了一下清屏,清空文件,操作提示等善后辅助功能,能帮助用户更好的应用该程序,使程序的功能最大化 实现。三.程序运行平台该程序是用VC+6.0制做的,使用Microsoft Visual C+ 6.0运行该程序,具体操作是:打开Microsoft Visual C+ 6
3、.0,菜单栏里点文件一打开工作区一找到“图书管理 系统.dsw”这个文件一打开,或者在资源管理器中双击该文 件,此时,VC+6.0会自动打开,并载入该系统相关资 源,点击Run命令菜单或者或用快捷键Ctrl+F5运行该程 序。I.系统功能框架图商城销售管理系统进入系统商品基本信息L商品管理商品信息查看名称修改数据显示全部内容编号创建新表商品查找成本增加商品显示商品信息单价删除商品按销量排序W销量7件存档1是按利润排序贸退出系统其它辅助功能使用说明及帮助等五. 程序类说明有关商品信息的类/存储商品信息 class GoodsInfo public:char * name ; 商品名称 int n
4、umber; 商品编号 float cost_p; /成本单价 float unit_p;销售单价int num_all;/共计商品件数intnum_now; 现存商品件数intnum_sell;已售出商品件数float cost_all;进货总计成本价float profit; 己销售商品获得的利润 GoodsInfo * next;指向下一个商GoodsInfo(); 构造函数GoodsInfo(char * a,int b,float c,float u,int all,int sell); 重载构造函数 void operator= (const GoodsInfo &right);重
5、载二void setInfo(char * a,float c,float u,int all,int sell) ;/数据载入char* getname()return name; 返回姓名用于查找显示商品信息 void Amend(GoodsInfo *);void show(GoodsInfo *);GoodsInfo() delete name;;商品类链表class GoodList :public GoodsInfopublic:GoodList();/构造函数,指针初始化GoodList();/析构函数,释放GoodsInfo * head; 头指针GoodsInfo * p;
6、/活动指针 1GoodsInfo * p2; 活动指针2(指向最后一个)void create(); 创建函数void showinfo(GoodsInfo *);显示GoodsInfo * search(); 查找void saveInfo();/信 息存档void getInfo(); 上传信息void addInfo(GoodsInfo *);/添加数据void sort();按销量显示void menu();void delete_();/删除节点;六. 模块分析菜单:所有函数均封装在商品类及商品链表类中(GoodsInfo和 GoodList)信息存储在类 GoodsInfo中,类中
7、定义了 3个 GoodsInfo指针,一个是*head,作为链表的头指针,另一个是 *p ,作为活动指针,一个*p2 ,指向链表的尾节。在不同的类 的成员函数中都可使用,为了防止该活动指针使用过频,造成 几个函数同时使用同一个指针指向不明,在有些函数里还定义 了一些临时指针。1. 创建此函数为是创建商品信息数据,构成商品信息表是使用,用于 让用户批量添加商品。璀续)继续)C;Use rsAa -TiiristratorDeskt。以商嫌祯岑笥旦絮菸.口8期育场捎岑莒逗祭装exe -17 0:1 39入78输SA67输:数? ;魏件入 择品件口圈件口器 选商称号号- ?富$出继富出继 *输品品查
8、口计售否品品查口计售否 -膏昌销共已呈寿富销共已是=9 果.数?蕉7 S魏件A-香按照程序的提示,可依次添加商品信息,按Y继续,其他建则 停止,返回主菜单。此时链表创建成功,*head指向链表的 头,p2指向尾。可用于后续函数的操作。2. 添加跟创建有一样的用途,用于添加商品信息,不同的是添加只能 用于已有原链表存在的情况下。但这个不能批量添加,一次只 能添加一个,并且存放在原链表尾节点的后一个,形成一个新 的链表。3. 查找顾名思义,此函数用于查找商品信息。在原始信息过多的时候,可 以通过查找(按商品编号和商品名称两钟方式)查看自己想看的商 品详细信息。若不存在该商品,程序则自动输出未找到,
9、然后返回主菜单。若查 找到该商品,函数返回该节点的指针,并用单个显示函数显示出 来。4.修改此函数是基于查找函数之上的。在查找到需要修改的单元后,选择 自己需要修改的项目。C. J se rsAcTiir:st ra-crD e 5 ictopWi5 袒皇萱定系统DetL g移盅身笙笆定蒙舞.?xe *请选择操作*: 3请选择需要修改的单元帝输成需查找的商品编号:3 320 7:5:192.伯671阳雨 名:单,;得 站号杳S已名誉宜晕 H 商品H花贝 12 3 4ruwruvxmrmwmvxmjwruwruwruwru*ruwruwruvsjwfsiwfxjwruwruwruwru*请选择需
10、要修改的项目编号:膏俞人修改后的销售量” 基否需要继续修改? 丫 蒲选择需要修改的项目编号: 籍输入修改后的进货量二200 皇否需要继续移改?神函数会询问是否需要继续修改,Y继续,其他键则返回主菜 单。5. 删除删除和修改一样,基于查找函数之上,用于删除不需要的节 点。操作方法也和前面类似。6. 显示此函数用于批量显示商品信息。该函数以表格的型式显示,明 了清晰,有助于比较。C: Use rsAdn i nisi ratorDe 5 IctopL商垮档笙登买嘉貌l 口己gg淄场她兰音建茎格exe择馨多音果 选名嘉杏早苹 请品K .济MMM : 4编号?.眄恐每4 3恩瑚珂2 q.SID 各1
11、.03进价5374售价销量库存870S30S5 503S0&1033370S6 403600已得剥润21!r?010988fiS7. 排序排序是基于显示函数的一个函数。该函数用选择排序法,以两 种(按销量和按利润)方法排序显示,有助于商家对比比较分 析哪种商品的销量好利润高,便于管理和优化商城的盈利。8. 上传当需要输入数据过多过大时,可以通过上传函数,直接把文件 中的数据读到程序中并形成链表,然后再继续后续操作。这个 和创建函数具有差不多的功能,不过一个是从键盘读入,一个 是从文件中读入。文件上传成功后,函数会自动显示成功,然 后跳到主菜单进行其他项目。9. 存档上传和存档是文件和程序的两个
12、接头。在数据操作过程中为避 免数据丢失,可边操作变保存,在退出程序之前,程序也会自 动弹出询问是否需要保存,这是比较人性化的一点,以免造成 不可估量的后果。保存成功后会自动输出成功字样,并退出或 继续程序。存档和上传合并利用,下一次运行程序时,可以直接上传上次 所保存的数据然后继续操作,就不需要工作人员一个一个慢慢 输入了。10. 其他 清屏是一个辅助函数,为了清晰界面方便操作美化外观。退出 程序是会自动询问是否保存文件,然后调用析构函数,释放链 表清除数据,然后安全退出。七、比较有特色的地方有特色的函数指的是实现地较为巧妙的类的构造函数、成员函 数、析构函数等函数,也可以是指针处理的函数,文
13、件处理的 函数等比较有特色的函数,能体现巧妙构思即可。特别是运算 附的重载,大大减小了代码的数量,简洁了程序。还有就是文 件操作方面,比较合理和人性化。八. 存在的不足在文件编写的时候我此次采用的是txt储存数据,虽然有助于使 用者查看数据,但是在面对一串庞大数据是,dat文件的效率明 显会高很多。还有就是由于学得不够深,程序的功能总体来说 还比较少,有待以后更深层的学习后完善。比如界面方面的处 理,和对每天销售情况的记录等等。商品流通的具体过程等该 程序都没有记录。需要改进的地方还有很多。九、心得体会通过这次课程设计,我清楚的认识到了 C+是一门很庞大的并 且很有实用价值的一门学科,它一种非
14、常简洁高效的语言。类 的特色在这次编程过程中有了充分的体会。就以前所学的C语 言而言,我明显感觉到C+在编写这种比较复杂的程序时的优 势,他的重载函数运算符的等操作也是一大有点。模块的分块1=1化,当需要用到某个函数时再进行调用,大大增强了程序的可 读性,而且代码也更加合理清晰。就拿这次我所写的商场销售管理系统来说,商品类的操作是一 个整体,写在一个中.cpp ,文件里面同时也可以另外写到一 个h的头文件里面,在写程序的时候再进行调用。课程设计真 的很能锻炼人,平时上课都是讲的基础知识,上机也只是编写 的小程序,不能把知识融会贯通。然而这次课设是编写的一个小系统,把所学的知识都联系起来了,在刚
15、刚看到要求时是觉 得有很大的难度的,毕竟是第一次编写一个商场销售管理系 统。但是想到有志者事竞成,只要敢于思考敢于尝试,按步骤 一步一步来也是能编写出程序的。于是我首先把程序类图先画 了出来,把程序基本结构勾勒出来,化整为零,一个一个小功 能慢慢写起,写完一个在主函数中验证一个看是否正确,通过 后在进行下一个,逐步实现。而后编写主函数,菜单等,完善 功能。因为我刚刚入门C+ ,基本工还不足,能力还很弱,所 以在写的过程中遇到很多困难,有些以前很熟悉的代码也忘 了,于是我开始翻阅以前的书籍,边对照边回忆,终于完成 了。特别是在文件操作方面尤为薄弱,我意思到了自己的弱 点。由于自己的不足,以后学习
16、还要更加努力,不懂时多问老 师多向同学学习。作为一个计算机专业的学生,计算机语言是 我们的基本功,我们应该扎实自己的基础,才能更快更好的发 展。十.源代码#ifndef LIST_H#define LIST_H#include GOODSINFO.Hclass GoodList :public GoodsInfopublic:构造函数,指针初始化析构函数,释放活动指针1GoodList();GoodList();GoodsInfo * head;头指针GoodsInfo * p;GoodsInfo * p2;void create(); 创建函数 void showinfo(GoodsInfo
17、 *);GoodsInfo * search(); /查找void saveInfo();void getInfo();void addInfo(GoodsInfo *);void sort();void menu();void delete_();#endif/存储商品信息#ifndef GOODSINFO_H#define GOODSINFOH活动指针2(指向最后一个)/显示信息存档上传信息/添加数据按销量显示删除节点class GoodsInfopublic:char * name ;int number;float cost_p;float unit_p;int商品名称商品编号num_
18、all;/成本单价销售单价共计商品件数现存商品件数已售出商品件数进货总计成本价已销售商品获得的利润/指向下一个商num_now; num_sell;float cost_all; float profit; GoodsInfo * next; GoodsInfo();GoodsInfo(char * a,int b,float c,float u,int all,int sell); void operator= (const GoodsInfo &right);重载二void setInfo(char * a,float c,float u,int all,int sell) ;/数据载入c
19、har* getname()return name;返回姓名用于查找显示商品信息intint/构造函数重载构造函数void Amend(GoodsInfo *);void show(GoodsInfo *); GoodsInfo() delete name; ; #endif#include using namespace std; #includeGOODSINFO.H” #includeGoodsInfo:GoodsInfo()构造函数 name二new char 21; number=cost_p=unit_p=num_all=num_now=num_sell=cost_all=prof
20、it=0; next=NULL;GoodsInfo:GoodsInfo(char * a,int b,float c,float u,int all,int sell)/重载构造函数 strcpy(name,a); number=b; cost_p=c; unit_p=u; num_all=all; num_sell=sell; num_now=all-sell; cost_all=c*all; profit=(u-c)*sell; next=NULL; void GoodsInfo:operator= (const GoodsInfo &right) 重载二 strcpy(name,righ
21、t.name); number=right.number ; cost_p=right.cost_p; unit_p=right.unit_p ; num_all = right.num_all ; num_sell = right.num_sell ; num_now=right.num_now ; cost_all = right.cost_all;profit=right.profit ;void GoodsInfo:setInfo(char * a,float c,float u,int all,int sell)strcpy(name,a);cost_p=c;unit_p=u;num
22、_all=all;num_sell=sell;num_now=all-sell;cost_all=c*all;profit=(u-c)*sell;next二NULL;void GoodsInfo:show(GoodsInfo * h)if(h二二NULL) coutNULL!n”;else/数据载入/显示coutn”商品名:nameendl;cout编号:numberendl”成本:cost_pendl销售单价:unit_pendl销量:num_sell endl库存:num_nowendl已获得利润:profitendl;void GoodsInfo: Amend(GoodsInfo * h
23、) /修改信息 int F;char S;n”cout A2.商品成本单价人”endlA3.商品销售单价 人”endlA4.进货数量人”endlA5.销售数量人endl”n”;docout请选择需要修改的项目编号:F;switch(F)case 1 :coutn|请输入修改后的名称|n”name,21);break;case 2 :coutn|请输入修改后的成本价:nh-cost_p;break;case 3 :couth-unit_p;break;case 4 :couth-num_all;break;case 5 :couth-num_sell;break;h-cost_all=h-cos
24、t_p*(h-num_all);h-num_now=h-num_all -(h-num_sell); h-profit=(h-unit_p -(h-cost_p )*h-num_sell;coutS;while(S = = Y);#include using namespace std;#include #include#include #includeLIST.H”GoodList:GoodList()构造函数p二new GoodsInfo sizeof(GoodsInfo);head二NULL;p2 = NULL;p-next =NULL;GoodList:GoodList()/析构函数w
25、hile(head!二NULL)p=head;head=p-next ;delete p;void GoodList:create()仓 U建int n=0;char f=Y;cout请输入商品信息:next=p;coutname,21);coutp-number;coutp-cost_p;coutp-unit_p;coutp-num_all;coutp-num_sell;p-num_now=p-num_all-(p-num_sell);p-cost_all=p-cost_p*(p-num_all);p-profit=(p-unit_p)-(p-cost_p)*(p-num_sell);p2
26、= p;coutf;cin.ignore();if(head!二NULL) p2-next=NULL;/P2 指向最后一个void GoodList:showinfo(GoodsInfo * h)/ 显示信息coutsetw(10)商品名称setw(10)编号setw(8)进价setw(8)售价setw(8)销量setw(8)库存”setw(12)”已得利润endl;while(h!二NULL)coutsetw(10)namesetw(10)numbersetw(8)cost_psetw(8)unit_psetw(8)num_sellsetw(8)num_nowsetw(12)profitne
27、xt;GoodsInfo * GoodList:search() /查找if(head二二NULL) cout”数据为空!n;return NULL;else GoodsInfo *h;h二head;int f;n”2.按商品名称endlcout 请选择查找方式:n”1.按商品编号 n” f;switch(f)case 1:int x,y;coutx;while(h!二NULL&(x! = (y=h-number)h = h-next;if(x=y) return h;lse cout没有找到该商品!n;return NULL;case 2:char x21; int c;coutname)!
28、二0) h = h-next;if(c=0)return h;else cout没有找到该商品!n;return NULL; void GoodList:saveInfo() fstream File;File.open(GoodsInformation.txt”,ios:out|ios:binary); if(!File) exit(0); p=head; GoodsInfo X; File商品名称/存档cout文件打开失败!n”;编号进价 售价 总量 销量 库存得利润while(p!二NULL)FileX.namen;X=*p;”X.number” X.cost_p X.unit_pX.n
29、umall ”X.num_sell X.num_now X.profitnext; cout文件保存成功!n”; File.close(); void GoodList:getInfo() fstream File;File.open(GoodsInformation.txt”,ios:in); if(!File) exit(0); char s81; GoodsInfo h; File.getline (s,81); int n=0; while(!File.eof () if(File.fail() break; n + = 1; if(n = = 1) else/上传coutnext=p
30、;Fileh.nameh.numberh.cost_ph.unit_ph.num_allh.num_sellh.num_nowh.profit;*p=h;p二new GoodsInfo sizeof(GoodsInfo);p2 = p; cout”上传显示完毕!”endl; File.close(); void GoodList:addInfo(GoodsInfo * h)/添加cout请输入商品信息:next=p; cin.ignore(); coutname,21); coutp-number; coutp-cost_p; coutp-unit_p; coutp-num_all; cout
31、p-num_sell; p-num_now=p-num_all-(p-num_sell); p-cost_all = p-cost_p*(p-num_all); p-profit=(p-unit_p)-(p-cost_p)*(p-num_sell); p2 = p; p2-next=NULL; void GoodList:delete_() 删除节点if(head二二NULL)coutNULL!n”; else coutn;h二head;while(h-next!二NULL&h-number!二n)p=h;h = h-next;if(h-number= = n)char F;coutF;if(
32、F= = Y)if(h二二head) head=h-next;else p-next=h-next;delete h;cout删除成功!n”;else cout未找到该节点!n”;void GoodList:sort ()按销量排序显示GoodsInfo *h1,*h2,t;int n;if(head二二NULL) coutNULL!n”;elseint F;n”cout 请选择排序方式:n1.按销量降序排列n”2.按利润降序排列n” F;switch(F)case 1:for(h1二head;h1-next!二NULL;h1=h1-next)n = h1-num_sell;for(h2 =
33、h1-next;h2! = NULL;h2 = h2-next)if(h2-num_sell)(h1-num_sell)n = h2-num_sell;if(n! = h1-num_sell)t=*h2;*h2=*h1;*h1=t;break;case 2:for(h1 = head;h1-next! = NULL;h1 = h1-next)n = h1-profit;for(h2 = h1-next;h2! = NULL;h2 = h2-next)n = h2-profit;if(n! = h1-profit)t=*h2;*h2=*h1;*h1=t;break;showinfo(head);
34、void GoodList:menu()coutendlendl|n”|n”profit)(h1-profit)|n”|n”|n”|n”|n”|n”cout*请选择操作*:#include using namespace std;#includeLIST.H”int main()|4.显示5.存档6.查找|7.上传8.排序9.清屏|10册。除0.退出|n”n”coutendlendlendlendlendlendl*n”*n*n*欢迎进入商场销售管理系统!*n*n*n*n”N; while(N!=0) switch(N) case 1 : break; case 2 : break; case 3 : 请选择需要修改的单元n n;goods.create();goods.addInfo(goods.p2);coutna二goods.search();goods.show(a);if(a!二NULL) goods.Amend(a);else coutN;char F;coutF;if(F= = Y) goods.save