您好,欢迎访问三七文档
课程名称面向对象程序设计课题公司人员管理系统学院:理学院班级:信息与计算科学11-2班组长:蒋喜尧组员:张哲李洪达刘嘉艺包雷雨课题:公司人员管理系统(一)、课程设计题目:公司人员管理系统(二)、目的与要求:1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、基本要求:(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;(2)要求在设计的过程中,建立清晰的类层次;(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;(4)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求:在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。4、写出设计说明书(三)、设计方法和基本原理:1、问题描述(功能要求):公司人员管理系统实现对公司人员按姓名或者编号显示、查找、增加、删除和保存各类人员信息的操作。某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。程序对所有人员有提升级别的功能。薪金的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。在基本要求达到后,可设计出比较友好的界面(如下拉菜单),也可用VC++ClassWizard设计(选作)。2、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤:(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为;(3)根据问题描述,设计系统的类层次;(4)完成类层次中各个类的描述(包括属性和方法);(5)完成类中各个成员函数的定义;(6)完成系统的应用模块;(7)功能调试;(8)完成系统总结报告以及系统使用说明书。目录1.需求分析2.功能分析3.详细设计4.结果分析5.总结6.附录一.需求分析1.1问题描述公司人员管理系统实现对公司人员按姓名或者编号显示、查找、增加、删除和保存各类人员信息的操作。某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。程序对所有人员有提升级别的功能。薪金的计算方法是:经理拿固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成,销售经理既拿固定月薪也领取销售提成。能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息。在基本要求达到后,可设计出比较友好的界面(如下拉菜单),也可用VC++ClassWizard设计(选作)1.2功能分析⊙查询功能:voidQuery()⊙删除功能:voidDelete()⊙添加功能:voidAdd()⊙修改功能:voidModify()⊙保存功能:voidSave()⊙数据装入:voidLoad()1.2.1查询功能函数原型:voidQuery()说明:查询一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。1.2.2删除功能函数原型:voidDelete()说明:能够对一个职员的信息进行删除,按职工号+姓名进行删除。1.2.3添加功能函数原型:voidAdd()说明:添加一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。12..4修改功能函数原型:voidModify()说明:对满足条件的职员的信息进行修改,可以修改职工所在部门、职务、工资。1.2.5保存功能函数原型:voidSave()说明:保存想要保存的人员信息。1.2.6数据装入函数原型:voidLoad()说明:将保存在磁盘的数据装入到内存中,以便对数据的再次管理和操作。二.功能分析2.1系统总体框架系统总体框架使用面向对象的程设计思想进行分析,整个系统涉及两大类信息和操作,公司,人员。所以系统主要涉及两个大类:公司类Company、人员类Person。系统的总体框架就是公司类,人员类的定义;主函数中定义一个公司对象,循环显示主菜单并根据用户选择调用公司类的相应方法(成员函数)。(1)公司类Company:考虑系统操作的人员信息的数量具有不确定性,所以考虑使用链表保存、处理人员信息。公司类包含:所有人员信息的一个不带头结点的链表(作为数据成员)及可以对人员信息进行增,删,改,查询,数据存盘等操作的相关模块(Add,Delete,Modify,Query,Set)作为成员函数。(2)人员类Person:所有人员都具有的公共信息及操作可以使用人员类进行描述。由于系统具有4类人员且4类人员数据,操作有所不同,如销售员包含销售额,而技术人员包含工作小时数且计算工资的方法不同,所以应当为4类人员创建相应的Person类的派生类。(3)为了使公司类可以方便处理人员信息,可以考虑将公司类确定为人员类的友元类或者人员类提供公共的方法以便公司类进行操作。为了公司类可以用共同方法操作人员类,可以将人员类的方法确定为虚函数。查询人员删除人员添加人员修改人员保存人员2.2结构框图2.3类的层次图其中:(1)Person类有No-人员编号,Name-人员姓名,Duty-人员类别,Earning-工资,next-指向下一个人员的指针;Person类的CalcSalary(),Output()定义为纯虚函数分别表示要计算人员工资和输出人员信息,由于定义纯虚函数,所以Person是抽象类,具体计算工资,输出人员信息由派生类完成。(2)各个派生的类,包含本类对象特有的数据,Sales::Amount-销售员销售额,SalesManager::Amount-销售经理的总销售额(系统统计各个销售员销售额得到销售经理的总销售额),Technician::t-技术人员工作小时数。公司员工管理系统People类SalesManager类Sales类Manager类Technician类Company{Persor*Worker,Company(),~Company(),Add(),Delete(),Modify(),Query(),Set(),Save(),Load()}其中:○1Worker就是人员链表。○2Add(),Delete(),Modify(),Query(),Set(),Save(),Load()分别表示系统各个功能模块:增加人员,删除人员,修改人员,查找人员,基本数据的设置,数据存盘,数据装入。三.详细设计3.1.程序的运行步骤及函数的实现(1)主函数流程创建公司对象开始结束显示菜单根据输入执行公司操作接受输入退出?YN(2)Company::Add()(3)Company::Delete()开始输入员工ID查找要删除的结点结点存在结束链表删除员工结点提示未找到并返回否是开始ID号增1输入数据,创建员工对象结点输入岗位员工对象加入结点结束(4)Company::Modify(5)Company::Query()开始输入员工编号查找节点节点存在输出节点人员的相关信息提示不存在并返回主函数结束否是开始输入员工ID查找结点结点存在结束修改结点提示未找到并返回否是(6)Company::Save()遍历链表保存人员数据打开员工数据文件开始结束关闭文件保存基础数据打开基础数据文件关闭文件(7)Company::Load()读取基础数据打开员工数据文件开始结束关闭文件读取一条记录打开人员数据文件关闭文件文件未结束根据人员类型创建结点链表加入结点读下面一行记录YN四.结果分析一.本系统独特的设计1.两个类的设计1.1Company类有数据成员员工,这个类的主要功能是对功能模块的实现,可以设计Add(),Delete(),Modify(),Query(),Set(),Save(),Load()函数对系统功能需求的实现。查询功能voidQuery()查询一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。删除功能voidDelete()能够对一个职员的信息进行删除,按职工号+姓名进行删除。添加功能voidAdd()添加一个职员的基本信息,包括职工号,姓名,性别,所在部门,职务,薪水。修改功能voidModify()对满足条件的职员的信息进行修改,可以修改职工所在部门、职务、工资。保存功能voidSave()保存想要保存的人员信息。数据装入voidLoad()将保存在磁盘的数据装入到内存中,以便对数据的再次管理和操作。1.2People类有数据成员姓名,编号,职务,月总工资,还有两个纯虚函数,纯虚数不给出实现,在People类的派生类中再给出两个纯虚函数的相应的实现,一个纯虚函数是virtualvoidCalcSalary()=0;实现对每个人员工资的计算,另一个就是virtualvoidOutput()=0;实现对每个人员的具体信息的输出。这个设计是一个亮点。2.链表的设计,使用链表可以动态的增加人员,而不受内存的限制,先定义一个People类的链表头指针,再在以后每增加的人员设置为一个节点然后再把节电连接到头指针就实现了人员的增加。3.界面的设计,每对一个具体的操作进行完之后,利用一个return;就可以返回主函数,在进行下一步操作,这是个很好的操作。二.本系统不足之处1.我设计的思路是由People类派生出四个类,Manager类,Sales类,SalesManager类,和Technician类。但也可以用Manager类和Sales类共同派生出SalesManager类,这样就更接近我们学习的面向对象的设计的思路,这是一个不足之处。2.本系统的删除功能不是很完善,问题就是每当删除一个人员的时候,这个人员的所有信息都被删除了,包括人员的编号,编号一旦删除了就找不回了,也就是说删除了一号,这个系统就没有了一号,这是一个不足之处。其他的还算比较好。五.总结这次课程设计所设计的公司员工管理系统(CEMS)是一个小型的人事信息管理系统,该系统实现了职工信息的添加、删除、修改、显示、查询等功能,并且运用了文件操作技术,可以实现数据的永久性保存。通过这次课程设计,我拓宽了知识面,锻炼了能力,综合素质得到较大提高。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对我们计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。经过两周的C++课程实践,我对C++语言设计有了一个更深,更全面的了解,尤其体会到C++面向对象操作对简化程序的重要作用.下面是我的几点体会:①刚拿到课题时,我一脸的茫然,看到如此庞大的工程,不知如何下手.这个工资管理系统中职工子信息竟然包15条,以前从来没有遇到过如此多的变量.和同学讨论很久好,我发现其实可以化繁为简的,信息15条不一定全都要,因为其中本身就有重复的.所以做任何事情都必须要开动脑筋,积极思考,有时还要学会化繁为简.②在编程时条理清晰是至关重要的.主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性.另外很重要的一点就是一定要对链表的五种操作熟练的掌握.③在编译,链接,调试的过
本文标题:课题5
链接地址:https://www.777doc.com/doc-6334250 .html