收藏 分享(赏)

C++面向对象程序设计课程设计报告.doc

上传人:精品资料 文档编号:8322302 上传时间:2019-06-20 格式:DOC 页数:33 大小:334KB
下载 相关 举报
C++面向对象程序设计课程设计报告.doc_第1页
第1页 / 共33页
C++面向对象程序设计课程设计报告.doc_第2页
第2页 / 共33页
C++面向对象程序设计课程设计报告.doc_第3页
第3页 / 共33页
C++面向对象程序设计课程设计报告.doc_第4页
第4页 / 共33页
C++面向对象程序设计课程设计报告.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、课 程 设 计课程名称 C+面向对象程序设计题目名称 公司人员管理系统专业班级 13 级计算机科学与技术一班学生姓名 林涛、甑德胜、梁增辉 吴志伟、李齐、江靖学 号 51302011015、51302011016、5130201100151302011037、51302011006、51302011009指导教师 郭有强1二一四年六月二十日2目 录一、引 言 2二、课程设计报告 41、问题描述 .42、系统总体方案 .43、设计思路和主要步骤 .54、各功能模块和流程图 .5(1)各功能模块 .5(2)流程图 .6三、系统测试 9四、心得体会 .14五、参考文献 .16附:程序设计代码 .17

2、3一、引 言1985 年,管理信息系统的创始人,高登戴维斯给出的管理信息系统的定义是:“它是一个利用计算机硬件和软件,手工作业,分析、计划、控制和决策模型,以及数据库的用户一机器系统。它能提供信息,支持企业或组织的运行、管理和决策。 ”这个定义说明了管理信息系统的组成要素:计算机硬件、软件、数据库、模型库和用户。随着我国社会的不断进步,人们对管理信息系统越来越重视,再加之管理信息系统在管理方面所产生的巨大影响,也使得人们越来越关注管理信息系统的发展趋势。由于管理信息系统的发展受到以上各种变革因素的制约,传统的管理信息系统必然向现代管理信息系统发展,在这个发展过程中,管理信息系统的发展将会呈现出

3、以下趋势:管理信息系统将会越来越注重以人为本。管理科学的发展有科学管理理论、行为管理理论和现代管理理论三个发展阶段,正在向着越来越人性化的方向发展,即以人为本。基于管理学的这一研究视角,管理信息系统也将向着更加人性化的方向发展。在今后的管理信息系统中将会越来越注重人的因素,以人为出发点和中心,围绕着激发和调动人的主动性、积极性、创造性展开的,以实现人与社会共同发展的一系列管理活动。而且这种人性化还会贯穿于管理信息系统的开发设计与研究中,具体表现为今后的管理信息系统将具有更加友好的人机界面,易于人们操作,也会考虑到不同用户的不同需求,更加个性化。管理信息系统向智能化方向发展。 随着人工智能技术的

4、发展,数据仓库、数据挖掘技术在管理信息系统中的应用,管理信息系统必将向着智能化方向发展,如产生了很多的决策支持系统、专家系统等等。智能化的管理信息系统具有思维模拟活动,它具有很高的自学习、自组织和进化性,并具有知识创新功能,可以解决非结构化事务,在决策中处于主导地位,是人的向导,在体系上将是大规模分布式计算模式,以基于网络神经元构件的智能网为主。管理信息系统向集成化方向发展。随着当前系统集成技术的提高,集成技术和方法也逐步地运用到管理信息系统中。由于管理信息系统将包含多个子系统,因此将这些功能集合在一起以便更好地发挥它的作用,这就是集成化的管理信息系统。集成化的管理信息系统将管理信息系统的各个

5、子系统有机地结合起来,达到互通信息、共享数据资源的目的,其支撑技术是数据库和计算机网络。4集成管理则是一种全新的理念与方法,其核心是强调运用集成的思想和理念指导管理实践。而集成管理信息系统的本质是要素的整合和优势互补,在集成管理运作过程中,首先经历的是一个投入要素的聚集过程,当投入要素积累到一定量时,集成能量便开始发生膨胀裂变,从而使各种单项要素优势催化出更大的整体优势,管理效果也因而急剧放大。因此,管理信息系统是当代公司发展中不可或缺的一部分,是公司管理人员的基础。公司人员管理系统的完善也起到保护公司内部资料的作用,是公司盈利与否的必备条件之一。5二、课程设计报告1、问题描述某小型公司,主要

6、有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。要求: 其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加 1。 程序对所有人员有提升级别的功能 月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也领取销售提成。 能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。用文件处理方式实现。2、系统总体方案使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:

7、公司类 Company、人员类 Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。 (1)公司类 Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。 (2)人员类 Person:所有人员都具有的公共信息及操作可以使用

8、人员类进行描述。由于系统具有 4 类人员且 4 类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为 4类人员创建相应的 Person 类的派生类。 6(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。3、设计思路和主要步骤根据需求分析,首先我们需要建立 Person 基类,由此派生出了经理类(Manager),销售经理类(SalesManager),销售员类(Sales),技术人员类(Technician)

9、,在 Person 类中,需要将人员编号,姓名,岗位,收入,以及next 指针等数据设置权限为 protected;由于其他类需要访问基类数据及相应成员函数,所以我们必须设置为 public。在各个派生类中,因为都需要使用了CalcSalary(),OutPut()函数,为了不出现二义性的问题,我们需要在基类中将这两个函数声明为纯虚函数,通过进一步分析,由于基类中的构造函数不能被继承,而且在派生类中又需要增加自己的数据成员,所以我们必须定义派生类的构造函数来完成相应的初始化。然后建立 Company 类,在 public 访问权限中,我们通过链表来操作人员数据,同时增加不同功能的成员函数如:v

10、oid Add(); /增加人员 void Delete(); /删除人员 void Modify(); /修改人员 void Query(); /查询人员 void Set(); /基础数据设置 void Save(); /数据存盘 void Load(); /数据装入 为了实现多文件的效果,我们将 Company 类定义及该类的实现分开,然后逐一对各功能函数进行代码编写。最后,我们定义了主函数,通过公司类创建了一个对象,并通过此对象完成相应的操作。在调试并测试代码过程中,当程序员输入相应的指令后,该系统自动调用相应的功能函数来达到需求效果,至此,一个公司人员管理系统的实现才算基本成功。4、

11、各功能模块和流程图(1)各功能模块1.Person 类的 No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person 类的 CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以7Person 是抽象类,具体计算工资,输出人员信息由派生类完成。 2.各个派生的类,包含本类对象特有的数据,Sales:Amount-销售员销售额,SalesManager:Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额) ,Technician:t-技术人员

12、工作小时数。 其中:Worker 就是人员链表。 Clear()用于清除人员链表所有结点。 Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。(2)流程图1 主函数流程 ?Y N2 Company:Add() 8ID13 Company:Delete() ID?4 Company:Modify 5 Company:Query() ID?9 6 Company:Save() 7 Company:Load() YN三、系统测试列出各功能具体

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

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

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

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

17、,动手实践,就没有弄不懂的知识,收获颇丰。17五、参考文献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+程序设计基础北京:高等教育出版社

18、,20017刁成嘉面向对象 C+程序设计北京:机械工业出版社,20048郭有强等编著, C+面向对象程序设计 ,清华大学出版社,2009 年出版9郭有强等编著, C+面向对象程序设计实验指导与课程设计 ,清华大学出版社,2009 年出版18附:程序设计代码/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

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

20、e,int Duty):Person(ID,Name,Duty)void CalcSalary()Earning=ManagerSalary;void Output()CalcSalary();coutDuty=Duty;strcpy(this-Name,Name);this-No=ID;virtual void CalcSalary()=0;virtual void Output()=0;friend class Company;20/Sales.hextern double SalesPercent; /销售人员提成class Sales:public Person /销售员类 priva

21、te: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();coutt=T;double GetT()22return t;v

22、oid SetT(double T)this-t=T;void CalcSalary()Earning=WagePerHour*t;void Output()CalcSalary();coutnext;delete p;p=Worker;void Company:Add()Person *p; /新结点指针int Duty;char Name20;double Amount,T;coutDuty;coutName;if(Duty=3)coutAmount;else if(Duty=4)coutT;/创建新员工结点 switch(Duty)case 1:p=new Manager(ID,Name

23、,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;24/员工结点加入链表if(Worker) /若已经存在结点Person *p2;p2=Worker;while(p2-next) /查找尾结点p2=p2-next;p2-next=p; /连接else /若不存在结点(表空)Worker=p; /连接void Compa

24、ny:Delete() /删除人员int No;coutNo;/查找要删除的结点 Person *p1,*p2; p1=Worker;while(p1)if(p1-No=No)break;elsep2=p1;p1=p1-next;/删除结点 if(p1!=NULL)/若找到结点,则删除25if(p1=Worker) /若要删除的结点是第一个结点Worker=p1-next;delete p1;else /若要删除的结点是后续结p2-next=p1-next;delete p1;coutNo;/查找要修改的结点 Person *p1,*p2; p1=Worker;while(p1)if(p1-N

25、o=No)break;elsep2=p1;p1=p1-next;26/修改结点 if(p1!=NULL)/若找到结点p1-Output();coutDuty;if(p1-Duty!=Duty) /若岗位发生变动/修改其它数据coutName;if(Duty=3)coutAmount;else if(Duty=4)coutT;/创建新员工结点 Person *p3;switch(Duty)case 1:p3=new Manager(p1-No,Name,Duty); break;case 2:p3=new SalesManager(p1-No,Name,Duty); break;case 3:p

26、3=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;27else /若岗位没有变动coutp1-Name;if(Duty=3)coutAmount; (Sales *)p1)-SetAmount(Amount);else if(Duty=

27、4)coutT; (Technician *)p1)-SetT(T);coutDuty=3)sum+=(Sales *)p)-GetAmount();p=p-next;p=Worker;double sum2=0; /工资总和while(p)if(p-Duty=2)(SalesManager *)p)-SetAmount(sum);28p-Output();sum2+=p-Earning;p=p-next;coutManagerSalary;coutSalesManagerSalary;coutSalesManagerPercent;coutSalesPercent;coutWagePerHo

28、ur;cout=“ID;void Company:Save() /数据存盘(包括基础数据,人员数据),均采用文本文件ofstream fPerson,fBase;char c;coutc;if(toupper(c)!=Y)return;/保存人员编号、姓名、岗位 fPerson.open(“person.txt“,ios:out);Person *p=Worker;while(p)29fPersonNoNameDutyDuty=3)fPersonGetAmount()Duty=4)fPersonGetT()next;fPerson.close();/保存基础数据fBase.open(“base.txt“,ios:out);fBasebufManagerSalary; /经理固定月薪 fBasebufSalesManagerSalary; /销售经理固定月薪 fBasebufSalesManagerPercent; /销售经理提成 fBasebufSalesPercent; /销售人员提成 fBasebufWagePerHour; /技术人员小时工资 fBasebufID; /员工标识fBase.close();/清除内存人员数据Clear();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报