课程设计课程名称C++面向对象程序设计题目名称公司人员管理系统专业班级13级计算机科学与技术一班学生姓名林涛、甑德胜、梁增辉吴志伟、李齐、江靖学号51302011015、51302011016、5130201100151302011037、51302011006、51302011009指导教师郭有强二○一四年六月二十日1目录一、引言........................................................2二、课程设计报告..................................................41、问题描述.....................................................42、系统总体方案.................................................43、设计思路和主要步骤...........................................54、各功能模块和流程图...........................................5(1)各功能模块.................................................5(2)流程图.....................................................6三、系统测试......................................................9四、心得体会.....................................................14五、参考文献.....................................................16附:程序设计代码.................................................172一、引言1985年,管理信息系统的创始人,高登・戴维斯给出的管理信息系统的定义是:“它是一个利用计算机硬件和软件,手工作业,分析、计划、控制和决策模型,以及数据库的用户一机器系统。它能提供信息,支持企业或组织的运行、管理和决策。”这个定义说明了管理信息系统的组成要素:计算机硬件、软件、数据库、模型库和用户。随着我国社会的不断进步,人们对管理信息系统越来越重视,再加之管理信息系统在管理方面所产生的巨大影响,也使得人们越来越关注管理信息系统的发展趋势。由于管理信息系统的发展受到以上各种变革因素的制约,传统的管理信息系统必然向现代管理信息系统发展,在这个发展过程中,管理信息系统的发展将会呈现出以下趋势:管理信息系统将会越来越注重以人为本。管理科学的发展有科学管理理论、行为管理理论和现代管理理论三个发展阶段,正在向着越来越人性化的方向发展,即以人为本。基于管理学的这一研究视角,管理信息系统也将向着更加人性化的方向发展。在今后的管理信息系统中将会越来越注重人的因素,以人为出发点和中心,围绕着激发和调动人的主动性、积极性、创造性展开的,以实现人与社会共同发展的一系列管理活动。而且这种人性化还会贯穿于管理信息系统的开发设计与研究中,具体表现为今后的管理信息系统将具有更加友好的人机界面,易于人们操作,也会考虑到不同用户的不同需求,更加个性化。管理信息系统向智能化方向发展。随着人工智能技术的发展,数据仓库、数据挖掘技术在管理信息系统中的应用,管理信息系统必将向着智能化方向发展,如产生了很多的决策支持系统、专家系统等等。智能化的管理信息系统具有思维模拟活动,它具有很高的自学习、自组织和进化性,并具有知识创新功能,可以解决非结构化事务,在决策中处于主导地位,是人的向导,在体系上将是大规模分布式计算模式,以基于网络神经元构件的智能网为主。管理信息系统向集成化方向发展。随着当前系统集成技术的提高,集成技术和方法也逐步地运用到管理信息系统中。由于管理信息系统将包含多个子系统,因此将这些功能集合在一起以便更好地发挥它的作用,这就是集成化的管理信息系统。集成化的管理信息系统将管理信息系统的各个子系统有机地结合起来,达到互通信息、共享数据资源的目的,其支撑技术是数据库和计算机网络。集成管3理则是一种全新的理念与方法,其核心是强调运用集成的思想和理念指导管理实践。而集成管理信息系统的本质是要素的整合和优势互补,在集成管理运作过程中,首先经历的是一个投入要素的聚集过程,当投入要素积累到一定量时,集成能量便开始发生膨胀裂变,从而使各种单项要素优势催化出更大的整体优势,管理效果也因而急剧放大。因此,管理信息系统是当代公司发展中不可或缺的一部分,是公司管理人员的基础。公司人员管理系统的完善也起到保护公司内部资料的作用,是公司盈利与否的必备条件之一。4二、课程设计报告1、问题描述某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。要求:⑴其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。⑵程序对所有人员有提升级别的功能⑶月薪的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。⑷能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。⑸用文件处理方式实现。2、系统总体方案使用面向对象的程序设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company、人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。(1)公司类Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询经营信息,基础数据设置,数据存盘,数据装入等操作的相关模块(Add,Delete,Modify,Query,Set,Save,Load)作为成员函数。(2)人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。5(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。3、设计思路和主要步骤根据需求分析,首先我们需要建立Person基类,由此派生出了经理类(Manager),销售经理类(SalesManager),销售员类(Sales),技术人员类(Technician),在Person类中,需要将人员编号,姓名,岗位,收入,以及next指针等数据设置权限为protected;由于其他类需要访问基类数据及相应成员函数,所以我们必须设置为public。在各个派生类中,因为都需要使用了CalcSalary(),OutPut()函数,为了不出现二义性的问题,我们需要在基类中将这两个函数声明为纯虚函数,通过进一步分析,由于基类中的构造函数不能被继承,而且在派生类中又需要增加自己的数据成员,所以我们必须定义派生类的构造函数来完成相应的初始化。然后建立Company类,在public访问权限中,我们通过链表来操作人员数据,同时增加不同功能的成员函数如:voidAdd();//增加人员voidDelete();//删除人员voidModify();//修改人员voidQuery();//查询人员voidSet();//基础数据设置voidSave();//数据存盘voidLoad();//数据装入———为了实现多文件的效果,我们将Company类定义及该类的实现分开,然后逐一对各功能函数进行代码编写。最后,我们定义了主函数,通过公司类创建了一个对象,并通过此对象完成相应的操作。在调试并测试代码过程中,当程序员输入相应的指令后,该系统自动调用相应的功能函数来达到需求效果,至此,一个公司人员管理系统的实现才算基本成功。4、各功能模块和流程图(1)各功能模块1.Person类的No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。62.各个派生的类,包含本类对象特有的数据,Sales::Amount-销售员销售额,SalesManager::Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician::t-技术人员工作小时数。其中:Worker就是人员链表。Clear()用于清除人员链表所有结点。Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查询本月经营信息,基础数据设置,数据存盘,数据装入。(2)流程图1主函数流程创建公司对象开始结束显示菜单根据输入执行公司操作接受输入退出?YN2Company::Add()输入岗位ID号增1输入数据,创建员工对象结点员工结点加入链表开始结束73Company::Delete()查找要删除结点输入员工ID链表删除员工结点开始结束结点存在?提示未找到4Company::Modify5Company::Query()遍历统计工资总额遍历统计销售额开始结束计算盈亏打印本月经营信息6Company::Save()查找结点输入员工ID修改结点开始结束结点存在?提示未找到8遍历链表保存人员数据打开员工数据文件开始结束关闭文件保存基础数据打开基础数据文件关闭文件7Company::Load()读取基础数据打开员工数据文件开始结束关闭文件读取一条记录打开人员数据文件关闭文件文件未结束根据人员类型创建结点链表加入结点读下面一行记录YN9三、系统测试列出各功能具体的输入数据及对应的输出结果,说明其是否符合设计要求:增加人员数据:10查询所添加人员的信息:删除员工:11查询是否删除成功:修改员工的姓名:12查询是否修改成功:数据存盘:13数据装入:清除并退出系统:14四、心得体会通过此次课程设计,使我们更加扎实的掌握了有关C++程序设计方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我们在这方面的知识欠缺和经验不足。实践出真知,通过大家的亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后通过查阅相关书籍以及在大家的积极讨论下,终于迎刃而解。在今后社会的发展和学习实践过程中,我们一定会不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我们很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我们莫大的空间。同时,设计让我们感触很深。使我们对抽象的理论有了具体的认识。通过这次课程