C++面向对象程序设计课程设计报告_第1页
C++面向对象程序设计课程设计报告_第2页
C++面向对象程序设计课程设计报告_第3页
C++面向对象程序设计课程设计报告_第4页
C++面向对象程序设计课程设计报告_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上课 程 设 计 课程名称C+面向对象程序设计题目名称公司人员管理系统专业班级13级计算机科学与技术一班学生姓名 林涛、甑德胜、梁增辉 吴志伟、李齐、江靖学 号、指导教师郭有强二一四年六月二十日目 录一、引 言1985年,管理信息系统的创始人,高登戴维斯给出的管理信息系统的定义是:“它是一个利用计算机硬件和软件,手工作业,分析、计划、控制和决策模型,以及数据库的用户一机器系统。它能提供信息,支持企业或组织的运行、管理和决策。”这个定义说明了管理信息系统的组成要素:计算机硬件、软件、数据库、模型库和用户。随着我国社会的不断进步,人们对管理信息系统越来越重视,再加之管理信息

2、系统在管理方面所产生的巨大影响,也使得人们越来越关注管理信息系统的发展趋势。由于管理信息系统的发展受到以上各种变革因素的制约,传统的管理信息系统必然向现代管理信息系统发展,在这个发展过程中,管理信息系统的发展将会呈现出以下趋势:管理信息系统将会越来越注重以人为本。管理科学的发展有科学管理理论、行为管理理论和现代管理理论三个发展阶段,正在向着越来越人性化的方向发展,即以人为本。基于管理学的这一研究视角,管理信息系统也将向着更加人性化的方向发展。在今后的管理信息系统中将会越来越注重人的因素,以人为出发点和中心,围绕着激发和调动人的主动性、积极性、创造性展开的,以实现人与社会共同发展的一系列管理活动

3、。而且这种人性化还会贯穿于管理信息系统的开发设计与研究中,具体表现为今后的管理信息系统将具有更加友好的人机界面,易于人们操作,也会考虑到不同用户的不同需求,更加个性化。管理信息系统向智能化方向发展。 随着人工智能技术的发展,数据仓库、数据挖掘技术在管理信息系统中的应用,管理信息系统必将向着智能化方向发展,如产生了很多的决策支持系统、专家系统等等。智能化的管理信息系统具有思维模拟活动,它具有很高的自学习、自组织和进化性,并具有知识创新功能,可以解决非结构化事务,在决策中处于主导地位,是人的向导,在体系上将是大规模分布式计算模式,以基于网络神经元构件的智能网为主。管理信息系统向集成化方向发展。随着

4、当前系统集成技术的提高,集成技术和方法也逐步地运用到管理信息系统中。由于管理信息系统将包含多个子系统,因此将这些功能集合在一起以便更好地发挥它的作用,这就是集成化的管理信息系统。集成化的管理信息系统将管理信息系统的各个子系统有机地结合起来,达到互通信息、共享数据资源的目的,其支撑技术是数据库和计算机网络。集成管理则是一种全新的理念与方法,其核心是强调运用集成的思想和理念指导管理实践。而集成管理信息系统的本质是要素的整合和优势互补,在集成管理运作过程中,首先经历的是一个投入要素的聚集过程,当投入要素积累到一定量时,集成能量便开始发生膨胀裂变,从而使各种单项要素优势催化出更大的整体优势,管理效果也

5、因而急剧放大。因此,管理信息系统是当代公司发展中不可或缺的一部分,是公司管理人员的基础。公司人员管理系统的完善也起到保护公司内部资料的作用,是公司盈利与否的必备条件之一。二、课程设计报告1、问题描述某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。要求: 其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。 程序对所有人员有提升级别的功能 月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也领取

6、销售提成。 能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。用文件处理方式实现。2、系统总体方案使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company、人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。 (1)公司类Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基

7、础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。 (2)人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。 (3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。3、设计思路和主要步骤

8、根据需求分析,首先我们需要建立Person基类,由此派生出了经理类(Manager),销售经理类(SalesManager),销售员类(Sales),技术人员类(Technician),在Person类中,需要将人员编号,姓名,岗位,收入,以及next指针等数据设置权限为protected;由于其他类需要访问基类数据及相应成员函数,所以我们必须设置为public。在各个派生类中,因为都需要使用了CalcSalary(),OutPut()函数,为了不出现二义性的问题,我们需要在基类中将这两个函数声明为纯虚函数,通过进一步分析,由于基类中的构造函数不能被继承,而且在派生类中又需要增加自己的数据成员

9、,所以我们必须定义派生类的构造函数来完成相应的初始化。然后建立Company类,在public访问权限中,我们通过链表来操作人员数据,同时增加不同功能的成员函数如:void Add(); /增加人员 void Delete(); /删除人员void Modify(); /修改人员void Query(); /查询人员void Set(); /基础数据设置void Save(); /数据存盘void Load(); /数据装入为了实现多文件的效果,我们将Company类定义及该类的实现分开,然后逐一对各功能函数进行代码编写。最后,我们定义了主函数,通过公司类创建了一个对象,并通过此对象完成相应的

10、操作。在调试并测试代码过程中,当程序员输入相应的指令后,该系统自动调用相应的功能函数来达到需求效果,至此,一个公司人员管理系统的实现才算基本成功。4、各功能模块和流程图(1)各功能模块1.Person 类的No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。 2.各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额,Sal

11、esManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician:t-技术人员工作小时数。 其中:Worker就是人员链表。 Clear()用于清除人员链表所有结点。 Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。(2)流程图 1主函数流程 2 Company:Add() 3 Company:Delete() 4 Company:Modify 5 Company:Query

12、() 6 Company:Save() 7 Company:Load()三、系统测试 列出各功能具体的输入数据及对应的输出结果,说明其是否符合设计要求:增加人员数据:查询所添加人员的信息:删除员工:查询是否删除成功:修改员工的姓名:查询是否修改成功:数据存盘:数据装入:清除并退出系统: 四、心得体会 通过此次课程设计,使我们更加扎实的掌握了有关C+程序设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我们在这方面的知识欠缺和经验不足。实践出真知,通过大家的亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在

13、课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后通过查阅相关书籍以及在大家的积极讨论下,终于迎刃而解。在今后社会的发展和学习实践过程中,我们一定会不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我们很多专业知识以及专业技能上的提升,同时又是一门讲道

14、课,一门辩思课,给了我许多道,给了我很多思,给了我们莫大的空间。同时,设计让我们感触很深。使我们对抽象的理论有了具体的认识。通过这次课程设计,我们基本掌握了C+课程设计的原理。我认为,在这学期的实验中,不仅培养了团结合作、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的

15、事情。回顾起此次课程设计,至今仍让我们感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高我们的实际动手能力和团结互助的能力。在设计的过程中遇到问题,可以说是困难重重,但可喜的是最终都得到了解决。此次设计也让我们明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收

16、获颇丰。 五、参考文献1美 Gary Bronson 著,刘勇译Programming Development and Design Using C+, Second Edition(C+程序开发与设计,第2版)北京:人民邮电出版社,20022王萍C+面向对象程序设计北京:清华大学出版社20023罗建军等C+程序设计教程(第2版)北京:高等教育出版社,2004 4谭浩强C+程序设计北京:清华大学出版社20045黄维通Visual C+面向对象与可视化程序设计(第2版)北京:清华大学出版社,20076张基温C+程序设计基础北京:高等教育出版社,20017刁成嘉面向对象C+程序设计北京:机械工业出

17、版社,20048郭有强等编著,C+面向对象程序设计,清华大学出版社,2009年出版9郭有强等编著,C+面向对象程序设计实验指导与课程设计,清华大学出版社,2009年出版附:程序设计代码/Company.h#include"Person.h"class Company /公司类private: Person *Worker; /员工表 void Clear(); /清除内存中数据public: Company() Worker=0; Load(); Company() Person *p; p=Worker; while(p) p=p->next; delete Wor

18、ker; Worker=p; Worker=0; void Add(); /增加人员 void Delete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘(包括基础数据,人员数据) void Load(); /数据装入(包括基础数据,人员数据);/Manager.hextern double ManagerSalary;class Manager:public Person /经理类public: Manager(char ID,char *Name,int Du

19、ty):Person(ID,Name,Duty) void CalcSalary()Earning=ManagerSalary; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t经理t"<<Earning<<endl; ;/Person.h#include"string.h"class Person /员工类protected: int No; /编号 char Name20; /姓名 int Duty; /岗

20、位 double Earning; /收入 Person *next;public: Person(char ID,char *Name,int Duty) this->Duty=Duty; strcpy(this->Name,Name); this->No=ID; virtual void CalcSalary()=0; virtual void Output()=0; friend class Company;/Sales.hextern double SalesPercent; /销售人员提成class Sales:public Person /销售员类private:

21、 double Amount;public: Sales(char ID,char *Name,int Duty,double Amount):Person(ID,Name,Duty) this->Amount=Amount; double GetAmount() return Amount; void SetAmount(double Amount) this->Amount=Amount; void CalcSalary() Earning=SalesPercent/100*Amount; void Output() CalcSalary(); cout<<No&l

22、t;<"t<<Name"<<"t销售员t"<<Amount<<"t"<<Earning<<endl; ;/SalesManager.hextern double SalesManagerSalary; /销售经理固定月薪extern double SalesManagerPercent; /销售经理提成class SalesManager:public Person /销售经理类private: double Amount;public: SalesMana

23、ger(char ID,char *Name,int Duty):Person(ID,Name,Duty) void SetAmount(double s) Amount=s; void CalcSalary() Earning=SalesManagerSalary+Amount*SalesManagerPercent/100; void Output() CalcSalary(); cout<<No<<"t"<<Name<<"t销售经理t"<<Earning<<endl; ;/Te

24、chnician.hextern double WagePerHour;class Technician:public Person /技术员类private: double t;public: Technician(char ID,char *Name,int Duty,double T):Person(ID,Name,Duty) this->t=T; double GetT() return t; void SetT(double T) this->t=T; void CalcSalary() Earning=WagePerHour*t; void Output() CalcS

25、alary(); cout<<No<<"t"<<Name<<"t技术员t"<<t<<"t"<<Earning<<endl; ;/Company.cpp#include"ctype.h"#include"fstream.h"#include"string.h"#include"Company.h"#include"iostream.h"#inc

26、lude"Technician.h"#include"SalesManager.h"#include"Sales.h"#include"Manager.h"extern int ID;extern double ManagerSalary; void Company:Clear() /清除内存中人员数据(内部使用) Person* p=Worker; while(p) Worker=p->next; delete p; p=Worker; void Company:Add() Person *p; /新结点指

27、针 int Duty; char Name20; double Amount,T; cout<<"n* 新增员工 *n" /输入员工信息 ID+; cout<<"输入岗位(1-经理2-销售经理3-销售员4-技术员):" cin>>Duty; cout<<"输入姓名:" cin>>Name; if(Duty=3) cout<<"本月销售额:" cin>>Amount; else if(Duty=4) cout<<"

28、;本月工作小时数(0-168):" cin>>T; /创建新员工结点 switch(Duty) case 1:p=new Manager(ID,Name,Duty); break; case 2:p=new SalesManager(ID,Name,Duty); break; case 3:p=new Sales(ID,Name,Duty,Amount); break; case 4:p=new Technician(ID,Name,Duty,T); break; p->next=0; /员工结点加入链表 if(Worker) /若已经存在结点 Person *p2

29、; p2=Worker; while(p2->next) /查找尾结点 p2=p2->next; p2->next=p; /连接 else /若不存在结点(表空) Worker=p; /连接 void Company:Delete() /删除人员 int No; cout<<"n* 删除员工 *n" cout<<"ID:" cin>>No;/查找要删除的结点 Person *p1,*p2; p1=Worker; while(p1) if(p1->No=No) break; else p2=p1;

30、 p1=p1->next; /删除结点 if(p1!=NULL)/若找到结点,则删除 if(p1=Worker) /若要删除的结点是第一个结点 Worker=p1->next; delete p1; else /若要删除的结点是后续结 p2->next=p1->next; delete p1; cout<<"找到并删除n" else /未找到结点 cout<<"未找到!n"void Company:Modify() int No,Duty; char Name20; double Amount,T; cou

31、t<<"n* 修改员工 *n" cout<<"ID:" cin>>No;/查找要修改的结点 Person *p1,*p2; p1=Worker; while(p1) if(p1->No=No) break; else p2=p1; p1=p1->next; /修改结点 if(p1!=NULL)/若找到结点 p1->Output(); cout<<"调整岗位(1-经理2-销售经理3-销售员4-技术员):" cin>>Duty; if(p1->Duty!=

32、Duty) /若岗位发生变动 /修改其它数据 cout<<"输入姓名:" cin>>Name; if(Duty=3) cout<<"本月销售额:" cin>>Amount; else if(Duty=4) cout<<"本月工作小时数(0-168):" cin>>T; /创建新员工结点 Person *p3; switch(Duty) case 1:p3=new Manager(p1->No,Name,Duty); break; case 2:p3=new

33、SalesManager(p1->No,Name,Duty); break; case 3:p3=new Sales(p1->No,Name,Duty,Amount); break; case 4:p3=new Technician(p1->No,Name,Duty,T); break; /员工结点替换到链表 p3->next=p1->next; if(p1=Worker) /要替换的结点是第一个结点 Worker=p3; else /若要除的结点是后续结点 p2->next=p3;/删除原来的员工结点 delete p1; else /若岗位没有变动 co

34、ut<<"输入姓名:" cin>>p1->Name; if(Duty=3) cout<<"本月销售额:"cin>>Amount; (Sales *)p1)->SetAmount(Amount); else if(Duty=4) cout<<"本月工作小时数(0-168):"cin>>T; (Technician *)p1)->SetT(T); cout<<"修改成功!n" else /未找到结点 cout<&

35、lt;"未找到!n"void Company:Query() cout<<"n* 查询人员本月销售信息 *n" double sum=0; /销售额总和 Person *p=Worker; while(p) if(p->Duty=3)sum+=(Sales *)p)->GetAmount(); p=p->next; p=Worker; double sum2=0; /工资总和 while(p) if(p->Duty=2)(SalesManager *)p)->SetAmount(sum); p->Outpu

36、t(); sum2+=p->Earning; p=p->next; cout<<"本月盈利:"<<sum*0.20-sum2<<endl; cout<<"(按照20利润计算)n"void Company:Set() cout<<"n* 设置基础数据 *n" cout<<"经理固定月薪"<<ManagerSalary<<"元:"cin>>ManagerSalary; cout&l

37、t;<"销售经理固定月薪"<<SalesManagerSalary<<"元:"cin>>SalesManagerSalary; cout<<"销售经理提成"<<SalesManagerPercent<<":"cin>>SalesManagerPercent; cout<<"销售人员提成"<<SalesPercent<<":"cin>>Sal

38、esPercent; cout<<"技术人员小时工资"<<WagePerHour<<"(元/小时):"cin>>WagePerHour; cout<<"员工标识>="<<ID<<":"cin>>ID;void Company:Save() /数据存盘(包括基础数据,人员数据),均采用文本文件 ofstream fPerson,fBase; char c; cout<<"n保存人员和基础数据,是

39、否继续?Y/N:" cin>>c; if(toupper(c)!='Y')return; /保存人员编号、姓名、岗位 fPerson.open("person.txt",ios:out); Person *p=Worker; while(p) fPerson<<p->No<<"t"<<p->Name<<"t"<<p->Duty<<"t" if(p->Duty=3) fPerson&l

40、t;<(Sales*)p)->GetAmount()<<"t" else if(p->Duty=4) fPerson<<(Technician *)p)->GetT()<<"t" fPerson<<endl; p=p->next; fPerson.close();/保存基础数据 fBase.open("base.txt",ios:out); fBase<<"经理固定月薪t"<<ManagerSalary<&l

41、t;endl; fBase<<"销售经理固定月薪t"<<SalesManagerSalary<<endl; fBase<<"销售经理提成t"<<SalesManagerPercent<<endl; fBase<<"销售人员提成t"<<SalesPercent<<endl; fBase<<"技术人员小时工资t"<<WagePerHour<<endl; fBase<<

42、;"IDt"<<ID<<endl; fPerson.close(); cout<<"n保存人员和基础数据已经完成.n"void Company:Load() /数据装入(包括基础数据,人员数据) /基础数据装入 ifstream fBase; char buf80; /buf用于保存数据文件中的注释字符串 fBase.open("base.txt",ios:in); fBase>>buf>>ManagerSalary; /经理固定月薪 fBase>>buf>

43、>SalesManagerSalary; /销售经理固定月薪 fBase>>buf>>SalesManagerPercent; /销售经理提成 fBase>>buf>>SalesPercent; /销售人员提成 fBase>>buf>>WagePerHour; /技术人员小时工资 fBase>>buf>>ID; /员工标识 fBase.close(); /清除内存人员数据 Clear(); /人员数据数据装入 ifstream fPerson; Person *p=Worker; int No; char Name20; int Duty; double Amount,T; fPerson.open("person.txt",ios:in); /读一条记录 fPerson>>No>>Name>>Duty; if(Duty=3)fPerson>>Amount; else if(Duty=4

温馨提示

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

评论

0/150

提交评论