C++超市管理系统课程设计_第1页
C++超市管理系统课程设计_第2页
C++超市管理系统课程设计_第3页
C++超市管理系统课程设计_第4页
C++超市管理系统课程设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计题目(问题)描述和要求题目:人事管理系统问题描述:某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。要求:其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。程序对所有人员有提升级别的功能月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息系统分析与模块设计根据问题描述和要求,系统要求能够按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。确定程序至少应该具备如下功能:“查询人员”、“增加人员”、“删除人员”、“数据存盘”基本模块。系统既然具有“数据存盘”功能-人员数据可以保存到磁盘文件,那么也就意味着今后可以从磁盘文件读出人员数据,所以系统增加了“人员数据装入”模块,以方便用户使用、避免数据重复录入。考虑到系统实现简捷,人员数据文件采用文本文件,人员数据文件名:Person.txt。做为一个完整系统,除了具有增加人员,删除人员信息模块,还应该具有修改人员相关信息的功能,所以本系统设计时考虑增加“修改人员”模块。考虑到根据编号查找人员信息功能在“删除人员”、“修改人员”等模块都使用,所以可以考虑设置为一个模块。考虑到系统要求人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。这样就要求人员编号在增加人员时自动生成(增加1)且不重复。根据这个要求,可以考虑设置一个全局量:“当前最大编号”,每增加一个人员,当前最大编号自动增1,然后新增加人员使用这个编号。为了保证系统能记忆这个编号,可以使用一个数据文件保存当前这个编号。系统每次开始运行前从文件读入这个编号,随着人员增加,编号自动增加,系统每次运行结束时将这个编号写入文件。本系统将初值(没有一个用户时)设置为0。考虑到人员的许多固定信息如:经理、销售经理的固定月薪,销售经理、销售人员提成,技术人员小时工资等都是一些不需要每个人员都要输入的信息,所以可以将这些信息都保存在一个数据文件中,本系统为了方便起见,将这些信息与“最大编号”全部保存在一个文件中,并使用“基础数据设置”模块进行设置和管理。基础数据文件也采用文本文件,基础数据文件名:Base.txt。本系统还提供“查询本月经营信息”帮助计算销售总额,工资总额,并按照公式计算本月盈亏。综合考虑系统具有下面8项功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。系统使用的数据文件格式如下:Base.txt:(格式:项目数据)经理固定月薪 3000销售经理固定月薪 1000销售经理提成% 1销售人员提成% 2技术人员小时工资 20ID 6Person.txt:(格式:编号,姓名,人员类别,其它数据,销售员销售额,技术人员工作小时)2 wang 3 100000 3 liu 1 4 wu 4 100 5 huang 26 tao 3 150000 注:人员类型编号1-经理;2-销售经理;3-销售员;4-技术人员系统设计系统总体框架使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company、人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。(1)公司类Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。(2)人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。类的层次图Person{No,Name,Duty,Earning,next,Person(),CalcSalary(),Output()}ManagerSalesSalesManagerTechnician{Manager(),{Amount,{Amount,{t,CalcSalary(),Sales(),GetAmount(),SalesManager(),Technician(),Output()}SetAmount(),SetAmount(),GetT(),SetT(),CalcSalary(),CalcSalary(),CalcSalary(),Output()}Output()}Output()}其中:(1)Person类的No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。(2)各个派生的类,包含本类对象特有的数据,Sales::Amount-销售员销售额,SalesManager::Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician::t-技术人员工作小时数。Company{Person*Worker,Clear(),Company(),~Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()}其中:(1)Worker就是人员链表。(2)Clear()用于清除人员链表所有结点。(3)Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。系统关键算法流程图(1)主函数流程(2)Company::Add()(3)Company::Delete()(4)Company::Modify

(5)Company::Query()(6)Company::Save()(7)Company::Load()源程序清单参见附录系统测试(列出各功能具体的输入数据及对应的输出结果,说明其是否符合设计要求)小结(设计过程心得体会)课设计题目:超市进销存管理系统设计的目的通过课程设计,学生在下述各方面的能力应该得到锻炼:巩固《面向对象程序设计》课程的基本知识和方法,通过该系统的实现,进一步培养学生理论联系实际、综合分析和解决问题的能力;掌握自顶而下的结构化程序设计的方法;进一步掌握在集成环境中程序调试的方法。设计内容用面向对象程序设计方法实现一个简单的超市进销存管理系统。系统的主要功能是:完成超市进销存管理。公司内有若干种商品:商品代码(num)商品名称(name)产地(address)单价(price)该类商品的库存数量(count)要求完成以下功能:①商品基本信息管理:商品的增加、修改和删除等。②商品的查询与统计:按商品名称查询基本信息、统计库存商品数量及总价值等。设计要求课程设计最终要求有三个方面:完成软件设计开发,运行得到正确的结果;撰写课程设计报告、课程设计答辩。1.软件设计开发:提供源代码清单。2.课程设计报告撰写:撰写要求及格式参见《课程设计报告模板》。课程设计结束,在WORD中以A4大小排版,并严格按照统一封面进行填写和打印;没有条件的同学,统一用稿纸手写,做到字迹工整,排列清晰,绘图细致。严禁抄袭程序或报告,否则以零分计。3.答辩工作由指导教师根据情况安排。五、进度安排按教学计划规定,该课程设计总学时数为12,其进度及时间大致分配如下:序号设计内容学时数1需求分析、流程图的绘制22编写程序、上机调试63撰写课程设计报告34答辩总结及成绩评定1总计12说明:需求分析、流程图的绘制、编写程序、撰写课程设计报告等过程在时间紧张的情况下,可由学生在课外补充完成。六、答辩与成绩评定1.课程设计的程序代码及相关文档保存在一个文件夹中并上报给指导教师,文件夹名称为学生姓名及学号的组合。有以下情况的学生不能参加答辩:·设计报告未经指导教师审阅。·或设计内容不全(有设计报告而无设计程序、有设计程序而无设计报告)。·未经指导教师许可或无故不到者,缺勤率达50%的学生。答辩时,设计者在5分钟内阐述自己的设计过程和最终结果,突出设计中遇到的主要问题和解决方法,然后回答教师提问。每位学生答辩总时间一般不超过10分钟。2.课程设计成绩的评定:根据设计的完成情况、程序的编制质量、独立设计能力以及答辩情况综合衡量,由答辩小组讨论决定。原则上按以下公式计算:课程设计成绩=考勤×10%+报告×20%+答辩×20%+程序×50%七、教学参考书目1、李龙澍:《C++程序设计》清华大学出版社2、钱能:《C++程序设计基础》清华大学出版社。指导教师教研室主任院长签名鲁书喜执行日期2009年5月#include<iostream.h>#include<fstream.h>#include<ctype.h>#include<stdlib.h>#include<string.h>intn=0;//全局数据,结点数量classGoods{protected:charname[20];//商品名称doublenum;//商品代码charaddress[30];//商品产地intprice;//商品单价doublecount;//该类商品库存量Goods*next;public:Goods(doublenum,char*name,char*address,intprice,doublecount){this->num=num;strcpy(this->name,name);strcpy(this->address,address);this->price=price;this->count=count;}voidOutput(){cout<<"num:"<<num<<"name:"<<name<<"address:"<<address<<"price:"<<price<<"count:"<<count<<endl;}friendclassSupermarket;};classSupermarket{private:Goods*goods;//商品表voidClear();//清除内存中数据public:Supermarket(){goods=NULL;Load();}~Supermarket(){Goods*p;p=goods;while(p){p=p->next;deletegoods;goods=p;}goods=NULL;}voidAdd();//增加商品voidDelete();//删除商品voidModify();//修改商品voidQuery();//查询商品voidAdd_up();//统计商品voidSave();//基础数据存盘voidLoad();//基础数据装入};voidSupermarket::Clear()//清除内存中商品数据(内部使用){Goods*p;p=goods;while(p){goods=p->next;deletep;p=goods;}}voidSupermarket::Add(){Goods*p;doublenum,count;charname[20],address[30];intprice;cout<<"\n请输入新增商品信息:\n";cout<<"商品代码:";cin>>num;cout<<"商品名称:";cin>>name;cout<<"商品产地:";cin>>address;cout<<"商品单价:";cin>>price;cout<<"该商品库存量:";cin>>count;//创建新商品类结点p=newGoods(num,name,address,price,count);p->next=NULL;if(goods==NULL){goods=p;n++;}else{Goods*p2=goods;while(p2->next)p2=p2->next;p2->next=p;n++;}}voidSupermarket::Delete()//删除商品{charname[20];cout<<"\n请输入要删除的商品名称:\n";cin>>name;//查找要删除的结点Goods*p1,*p2;p1=goods;while(p1){if(strcmp(p1->name,name)==0)break;else{p2=p1;p1=p1->next;}}//删除结点if(p1!=NULL)//若找到结点,则删除{if(p1==goods)//若要删除的结点是第一个结点{goods=p1->next;deletep1;n--;}else//若要删除的结点是后续结点{p2->next=p1->next;deletep1;n--;}cout<<"找到并删除\n";}else//未找到结点cout<<"Sorry,未找到!\n";}voidSupermarket::Modify()//修改商品信息{doublenum,count;charname[20],address[30];intprice;cout<<"\n修改商品,请输入要查的商品名称:\n";cout<<"Name:";cin>>name;//查找要修改的结点Goods*p1,*p2;p1=goods;while(p1){if(strcmp(p1->name,name)==0)break;else{p2=p1;p1=p1->next;}}//修改结点if(p1!=NULL)//若找到结点{p1->Output();cout<<"\n请选择要修改的信息(1—商品代码,2—商品名称,3—产地,4—单价,5—该商品库存量,6—修改全部信息):\n";inta;cin>>a;switch(a){case1:cout<<"请输入新代码:";cin>>num;strcpy(name,p1->name);strcpy(addressp1->address);price=p1->price;count=p1->count;break;case2:cout<<"请输入新名称:";cin>>namenum=p1->num;strcpy(address,p1->address);price=p1->price;count=p1->count;break;case3:cout<<"请输入新产地:";cin>>address;num=p1->num;strcpy(name,p1->name);price=p1->price;count=p1->count;break;case4:cout<<"请输入新单价:";cin>>price;num=p1->num;strcpy(name,p1->name);strcpy(address,p1->address);count=p1->count;break;case5:cout<<"请输入新库存数据:";cin>>count;num=p1->num;strcpy(name,p1->name);strcpy(address,p1->address);price=p1->price;break;case6:cout<<"请输入新信息:\n";cout<<"商品代码:";cin>>num;cout<<"商品名称:";cin>>name;cout<<"商品产地:";cin>>address;cout<<"商品单价:";cin>>price;cout<<"该商品库存量:";cin>>count;break;}//创建新商品结点Goods*p3;p3=newGoods(num,name,address,price,count);//员工结点替换到链表p3->next=p1->next;if(p1==goods)//若要替换的结点是第一个结点goods=p3;else//若要替换的结点是后续结点p2->next=p3;deletep1;//删除原来的商品结点cout<<"修改成功!\n";}else//未找到结点cout<<"Sorry,未找到!\n";}voidSupermarket::Query(){cout<<"\n****查询商品****\n";charname[20];cout<<"\n请输入要查询的商品名称:\n";cin>>name;Goods*p1=goods;while(p1){if(strcmp(p1->name,name)==0)break;elsep1=p1->next;}if(p1!=NULL)//若找到结点{cout<<"\n要查询的信息如下:\n";cout<<"该类商品代码:\t"<<p1->num<<"\t"<<"该类商品名称:\t"<<p1->name<<"\t\n";cout<<"该类商品产地:\t"<<p1->address<<"\t"<<"该类商品单价:\t"<<p1->price<<"\t\n";cout<<"该类商品库存量:\t"<<p1->count<<"\t";}else//未找到结点cout<<"\nSorry,未找到该类商品!\n";}voidSupermarket::Add_up()//统计超市商品总数量于价值{cout<<"\n****商品统计****\n";doubleAmount=0,Value=0;charname[20];cout<<"\n请输入要统计的商品名称:\n";cin>>name;Goods*p1;p1=goods;while(p1){if(strcmp(p1->name,name)==0)break;elsep1=p1->next;}if(p1){while(p1){Amount+=p1->count;Value+=p1->count*p1->price;p1=p1->next;}cout<<"商品总数量是:\n";cout<<Amount;cout<<"\n商品总价值是:\n";cout<<Value;}elsecout<<"\nSorry,未找到该类商品!\n";}voidSupermarket::Save()//数据存盘{cout<<"是否保存?[Y/N]";chara;cin>>a;if(a=='n')return;if(a=='y'||a=='Y'){ofstreamoutfile("base.txt",ios::out);if(!outfile){cerr<<"openerror!";exit(1);}Goods*p;p=goods;while(p){outfile<<"商品代码\t\t"<<p->num<<endl;outfile<<"商品名称\t\t"<<p->name<<endl;outfile<<"商品产地\t\t"<<p->address<<endl;outfile<<"商品单价\t\t"<<p->price<<endl;outfile<<"该商品库存量\t"<<p->count<<endl;cout<<endl;p=p->next;}outfile.close();cout<<"已完成数据的保存\n";}}voidSupermarket::Load()//数据装入{Goods*p=goods;ifstreaminfile("base.txt",ios::in|ios::nocreate);//读一条信息infile>>p->num>>p->name>>p->address>>p->price>>p->count;while(infile.good()){//创建商品结点p=newGoods(p->num,p->name,p->address,p->price,p->count);p->next=NULL;//商品结点加入if(goods)//若已存在结点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论