C++课程设计报告-公司人员信息管理系统实现

上传人:r****d 文档编号:144105029 上传时间:2022-08-26 格式:DOC 页数:53 大小:308.50KB
返回 下载 相关 举报
C++课程设计报告-公司人员信息管理系统实现_第1页
第1页 / 共53页
C++课程设计报告-公司人员信息管理系统实现_第2页
第2页 / 共53页
C++课程设计报告-公司人员信息管理系统实现_第3页
第3页 / 共53页
点击查看更多>>
资源描述
摘 要C+是由C发展而来的,与C兼容。所以它可以用于面向过程的结构化程序设计,但是它又有自己的特点,它也可以用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。虽然C+仍然允许使用从C继承来的传统用法,但是仍然提倡使用C+的新方法。面向对象的程序设计主要有四个特点:封装,继承,多态,抽象。学好C+,绝不是一个纯技术的问题,需要综合考虑多方面的因素,作出合理的决策和安排。因此必须强调多编程,多上机实践。本次课设三个题目要求设计管理系统,我选择了公司人员信息管理系统,编写的程序涵盖了C+语言中的封装,继承,多态(虚函数的使用),文件操作。在设计过程中我尽量秉持着靠近实际应用的原则,用心的从一个管理者的角度出发并解决了自己在程序中的多处不足和缺陷,例如在输入编号设计中,设计了关于数据有效性的操作等。在系统设计中我加强了界面的美观设计,使程序在简洁的基础上可读性更强,更人性化!最后我在设计过程中也尝试了创新的方法,也收到了很好的效果。总之,两周的课设过去了,我感觉自己在整体上有了一个很大的提高,知识更加系统化,理论化,我会继续努力和不断地钻研!本文利用Microsoft Visual C+6.0编写程序,实现了用户对公司职员信息的增加更改删除查找显示存储等操作。关键词:类 继承 派生 多态性 虚函数 输入输出 文件操作目 录摘 要- 1 -目 录- 2 -课程设计任务书- 3 -第一章 绪论- 5 -11 课程设计的目的- 5 -12 课程设计的背景和意义- 5 -13 课程设计环境- 5 -第二章 需求分析- 6 -21 问题描述- 6 -制作公司人员信息管理系统实现数据录入、数据删除、数据保存和数据显示以及数据查询等一些功能。- 6 -22 功能要求- 6 -23 问题的解决方案- 6 -第三章 系统设计- 7 -31 数据设计- 7 -311 类设计- 7 -312 类之间的关系- 7 -313 函数设计- 7 -32 结构设计- 8 -321 系统流程图- 8 -322 界面设计- 8 -第四章 系统实现- 9 -41 类实现- 9 -42 函数实现- 10 -43 主函数实现- 21 -第五章 系统测试- 22-51 模块测试- 22-52 课程设计过程中遇到的问题- 26-总 结- 27 -致 谢- 28 -参考文献- 28 -附 录- 29 -课程设计任务书课题名称公司人员信息管理系统完成时间第18周指导教师职称学生姓名班 级总体设计要求和技术要点某公司需要存储雇员的编号、姓名、级别和月薪,并显示全部信息。雇员分为经理、技术人员、销售人员和销售经理。四类人员的月薪计算方法如下:经理拿固定月薪8000元;技术人员按每小时100元领取月薪;销售人员按其当月销售额的4领取工资;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为销售总额的5。(1)本程序完成的功能主要有:1)显示雇员信息。2)添加雇员信息,并保存。3)删除雇员信息,并保存。4)修改雇员信息,并保存。5)查询雇员信息。6)系统退出。(2)学生在完成本次课程设计的基本要求后,从便于用户使用和功能完整性的角度考虑进一步完善程序。工作内容及时间进度安排16月3日14日:布置任务,软件设计,编写代码26月15日22日:编写代码,上机调试36月22日26日:软件验收,撰写课程设计报告4各班在6月26日下午五点前上交课程设计报告课程设计成果1课程设计报告2源程序代码第一章 绪论11 课程设计的目的C+作为一种面向对象的程序设计语言,它支持对类的抽象.了解面向对象的程序设计思想及其方法,其核心概念-类,包括类及其派生类的声明实现利用类来解决具体问题,并达到以下目的:(1)要求学生达到熟练掌握C+语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。12 课程设计的背景和意义C+是一门实践性很强的课程,光靠听课和看书是学不好的。衡量学习好坏的标准不是懂不懂。因此必须强调多编程,多上机实践。所以开设了这次课程设计,目的在于使学生达到熟练掌握C+语言的基本知识和技能,掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。这对于进一步巩固C+知识是一个很好的机会。同时我们在这次课程设计的过程中学到了很多课本以外的知识,解决了很多以前没有碰到的问题,可以说对程序设计这门课有了一个新的认识。13 课程设计环境第二章 需求分析21 问题描述制作公司人员信息管理系统实现数据录入、数据删除、数据保存和数据显示以及数据查询等一些功能。22 功能要求(1)创建人事管理数据表,该表反映职工的基本信息,其中包含职工编号、职工姓名、基本工资、职称等字段。(2)根据自己的喜好设计系统封面(3)系统应包括记录编辑和记录查询等功能模块。记录编辑功能完成职工记录编辑的记录增加、记录删除和记录查询等功能。记录查询功能可以对数据集中的记录进行查询,要求按职工编号进行查询23 问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤: 1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;2)分析系统中的各个实体及它们之间的关系; 3)根据问题描述,设计系统的类层次; 4)完成类层次中各个类的描述; 5)完成类中各个成员函数的定义; 6)完成系统的应用模块; 7)功能调试; 8)完成系统总结报告。第三章 系统设计31 数据设计311 类设计本次程序设计一共定义了五个类:Employee, Manager,Salemanager,Technology和Salesman。在Employee类里定义了Empoyee类的缺省构造函数和它的析构函数,set函数用于实现新增成员的输入,change函数实现数据的更改,delete1函数用于实现数据的删除,display函数用于实现数据的显示。getnum用于实现在查找的时候得到编号。数据成员有num,name,gz,zc分别表示员工的编号,姓名,工资,职称。Manager,Salemanager,Technology和Salesman类公有继承Employee类,它们的函数功能,数据成员与基类的基本相同,只是在Salemanager类里多了sum数据成员来计算它的工资,在Technology类里多了time数据成员来计算它的工资,Salesman类里多了sum1 数据成员用于计算它的工资。312 类之间的关系Employee类和他的四个派生类:Manager,Salemanager,Technology,Salesman.,设计为继承关系,主要是为了继承他们共有的数据成员和成员函数,因为每个类里都要用到编号,姓名,职称这几个数据成员和修改,删除,增加,显示,得到编号,这几个成员函数。所以用继承更加方便。313 函数设计在五个类里定义了它们的的缺省构造函数和它的析构函数,set函数用于实现新增成员的输入,通过for循环给对象数组赋值来实现。change函数实现数据的更改,通过for循环给对象数组重新赋值来实现。delete1函数用于实现数据的删除,通过for循环给对象数组赋零值来实现。display函数用于实现数据的显示,通过for循环使对象数组挨个输出来实现。getnum用于实现在查找的时候得到编号,通过返回编号的值来实现。为了使代码的层次清晰,程序中还定义了六个普通函数:add用于实现信息维护时的增加,通过调用各自类里的set增加函数来实现。change1用于实现信息维护时的修改,通过调用各自类里的change函数和getnum函数来实现。delete2用于实现信息维护时的删除,通过调用各自类里的delete1函数和getnum函数来实现。search用于实现信息维护时的查找,通过调用各自的getnum函数和display函数来实现。show用于实现信息维护时的显示,通过调用类里的display函数来实现。save用于实现信息维护时的保存,在函数利用到了文件的操作,通过把数组的内容写进二进制文件来实现数据的保存。32 结构设计321 系统流程图Employee类int num;string name;string zc;Mansger 类Salemansger类 void set(); void change();void delete1(); Employee(); void display(); int getnum(); Employee();Technology类Salesman类int sumint time int sum1322 界面设计/欢迎界面 coutsetw(20)*欢迎进入员工信息管理系统*endl; coutsetw(50)*n;/以下是操作界面 coutsetw(50) 请选择您所需的操作 n; coutsetw(50) 操作1,并按回车键 n; coutsetw(50) 返回0,并按回车键 n; coutsetw(50)*n;cout; coutsetw(50) *n; coutsetw(50) 请选择您所需查找的对象 n; coutsetw(50) 经理: 1,并按回车键 n; coutsetw(50) 销售经理2:,并按回车键 n; coutsetw(50) 技术人员3:,并按回车键 n;coutsetw(50) 销售人员4:,并按回车键 n;coutsetw(50) 返回 0:,并按回车键 n; coutsetw(50) *n; 以上这些循环都是通过switch语句实现的第四章 系统实现41 类实现class Employee /基类public:Employee() /缺省构造函数 Employee() /析构函数void display()/显示员工信息 void change() /修改员工信息int getnum() /得到编号 void delete1() /删除员工信息void set() /输入员工信息protected:int num; /编号 int gz; /年龄string name; /姓名 string zc; /性别;class Manager:virtual public Employee /经理类public:Manager() /缺省构造函数 Manager() /析构函数void display()/显示员工信息 void set() /输入员工信息void change() /修改员工信息 void delete1() /删除员工信息;class Salemanager:virtual public Employee /销售经理类public:Salemanager() /构造函数 Salemanager() /析构函数void display()/显示员工信息 void set() /输入员工信息void change() /修改员工信息 void delete1() /删除员工信息protected:int sum;/销售额;class Technology:virtual public Employee /技术人员类public:Technology() /构造函数 Technology() /析构函数void display()/显示员工信息 void set() /输入员工信息void change() /修改员工信息 void delete1() /删除员工信息protected:int time; /工作时间;class Salesman:virtual public Employeepublic:Salesman() /构造函数 Salesman() /析构函数void display()/显示员工信息 void set() /输入员工信息void change() /修改员工信息 void delete1() /删除员工信息protected:int sum1; /月销售额;42 函数实现/定义几个全局变量Manager mN; Salemanager sN; Technology tN; Salesman s1N;/对象数组 int a,q,ID,b; int i; /输入数据时的标记static a1=0,a2=0,a3=0,a4=0;/静态全局变量用于记录各员工个数void add()/增加功能coutsetw(50) *n; coutsetw(50) 请选择您所需增加的操作 n; coutsetw(50) 经理: 1,并按回车键 n; coutsetw(50) 销售经理2:,并按回车键 n; coutsetw(50) 技术人员3:,并按回车键 n; coutsetw(50) 销售人员4:,并按回车键 n;coutsetw(50) 返回 0:,并按回车键 n; coutsetw(50)q; while(q!=0) switch(q) case 1: cout请输入要增加经理数:a; for( i=0;ia;i+) ma1.set(); /调用类的set函数进行输入 a1+;/设置全局静态变量用于计数 break; case 2: cout请输入要增加的销售经理数:a; for( i=0;ia;i+) sa2.set(); a2+; break; case 3: cout请输入要增加的技术人员数:a; for(i=0;ia;i+) ta3.set(); a3+; break; case 4: cout请输入要增加的销售人员数:a; for(i=0;ia;i+) s1a4.set(); a4+; break; break; void change1()/修改功能coutsetw(50) *n; coutsetw(50) 请选择您所需修改的对象 n; coutsetw(50) 经理: 1,并按回车键 n; coutsetw(50) 销售经理2:,并按回车键 n; coutsetw(50) 技术人员3:,并按回车键 n;coutsetw(50) 销售人员4:,并按回车键 n;coutsetw(50) 返回 0:,并按回车键 n; coutsetw(50)q; while(q!=0) int k; switch(q) case 1:coutID;while(ID1100) cout编号的范围应在(10011100),请重新操作!endl; coutID; k=0; /k用来控制是否存在这个号码的员工,以下k的作用与此相同 for(i=0;ia1;i+)if(mi.getnum()=ID) /调用类里的getnum函数得到编号mi.change();/调用change函数进行修改 k+; break; if(k=0)cout此人不存在!endl; break;case 2: coutID;while(ID2100) cout编号的范围应在(20012100),请重新操作!endl; coutID; k=0;for(i=0;ia2;i+) if(si.getnum()=ID) si.change(); k+; break; if(k=0) cout此人不存在!endl; break;case 3: coutID;while(ID3100) cout编号的范围应在(30013100),请重新操作!endl; coutID; k=0;for(i=0;ia3;i+) if(ti.getnum()=ID)ti.change();k+;break;if(k=0)cout此人不存在!endl; break;case 4: coutID;while(ID4100) cout编号的范围应在(40014100),请重新操作!endl; coutID; k=0;for(i=0;ia4;i+)if(s1i.getnum()=ID)s1i.change();k+;break; if(k=0)cout此人不存在!endl; break; break;void delete2()/删除coutsetw(50) *n; coutsetw(50) 请选择您所需删除的对象 n; coutsetw(50) 经理: 1,并按回车键 n; coutsetw(50) 销售经理2:,并按回车键 n; coutsetw(50) 技术人员3:,并按回车键 n;coutsetw(50) 销售人员4:,并按回车键 n;coutsetw(50) 返回 0 :,并按回车键 n; coutsetw(50)q; while(q!=0) switch(q) int k;case 1:coutID;while(ID1100) cout编号的范围应在(10011100),请重新操作!endl; coutID; k=0; for(i=0;ia1;i+)if(mi.getnum()=ID)mi.delete1(); /调用delete1函数进行删除cout删除成功!endl; k+;break;if(k=0)cout此人不存在!endl; break;case 2: coutID;while(ID2100) cout编号的范围应在(20012100),请重新操作!endl; coutID; k=0; for(i=0;ia2;i+)if(si.getnum()=ID)si.delete1(); cout删除成功!endl;k+; break;if(k=0) cout此人不存在!endl; break;case 3: coutID;while(ID3100) cout编号的范围应在(30013100),请重新操作!endl; coutID; k=0;for(i=0;ia3;i+)if(ti.getnum()=ID)ti.delete1();cout删除成功!endl;k+; break;if(k=0) cout此人不存在!endl; break;case 4: coutID;while(ID4100) cout编号的范围应在(40014100),请重新操作!endl; coutID; k=0;for(i=0;ia4;i+)if(s1i.getnum()=ID)s1i.delete1();cout删除成功!endl;k+;break;if(k=0)cout此人不存在!endl;break;break;void search()/查找int k=0;coutsetw(50) *n; coutsetw(50) 查找方式1:按编号查找n;coutsetw(50) 2:返回,并按回车键 n; coutsetw(50)b; while(b!=0) switch(b) case 1: coutsetw(50) *n; coutsetw(50) 请选择您所需查找的对象 n; coutsetw(50) 经理: 1,并按回车键 n; coutsetw(50) 销售经理2:,并按回车键 n; coutsetw(50) 技术人员3:,并按回车键 n; coutsetw(50) 销售人员4:,并按回车键 n; coutsetw(50) 返回 0:,并按回车键 n; coutsetw(50)q; while(q!=0) switch(q) case 1: coutID;while(ID1100) cout编号的范围应在(10011100),请重新操作!endl; coutID; for(i=0;ia1;i+) k=0; if(mi.getnum()=ID) coutendl; coutsetw(10)编号setw(10)姓名setw(10)级别setw(10)工资endl; coutendl; mi.display(); /调用类里的display函数进行输出 k+; break; if(k=0)cout此人不存在!endl; break;case 2: coutID;while(ID2100) cout编号的范围应在(20012100),请重新操作!endl; coutID; for(i=0;ia2;i+) k=0;if(si.getnum()=ID) coutendl; coutsetw(10)编号setw(10)姓名setw(10)级别setw(10)工资endl; coutendl; si.display(); k+; break;if(k=0) cout此人不存在!endl; break;case 3: coutID; while(ID3100) cout编号的范围应在(30013100),请重新操作!endl; coutID; for(i=0;ia3;i+) k=0;if(ti.getnum()=ID)coutendl; coutsetw(10)编号setw(10)姓名setw(10)级别setw(10)工资endl; coutendl;ti.display(); break;if(k=0)cout此人不存在!endl; break;case 4: coutID;while(ID4100) cout编号的范围应在(40014100),请重新操作!endl; coutID; for(i=0;ia4;i+) k=0;if(s1i.getnum()=ID) coutendl;coutsetw(10)编号setw(10)姓名setw(10)级别setw(10)工资endl; coutendl;s1i.display(); break;if(k=0)cout此人不存在!endl; break; break; break; break; void show()/显示coutendl;coutsetw(10)编号setw(10)姓名setw(10)级别setw(10)工资endl; coutendl;for( i=0;ia1;i+) mi.display();/调用类里的display函数来实现输出for( i=0;ia2;i+) si.display();for( i=0;ia3;i+) ti.display();for( i=0;ia4;i+) s1i.display();void save()/利用二进制文件操作来保存数据ofstream outfile1(manager.txt,ios:binary);if(!outfile1) cerrmanager.txt open error!endl; abort(); for(i=0;ia1;i+) outfile1.write(char*)&mi,sizeof(mi); outfile1.close(); ofstream outfile2(salemanager.txt,ios:binary); if(!outfile2) cerrsalemanager.txt open error!endl; abort(); for(i=0;ia2;i+) outfile2.write(char*)&si,sizeof(si); outfile2.close(); ofstream outfile3(technology.txt,ios:binary);if(!outfile3) cerrtechnology.txt open error!endl; abort(); for(i=0;ia3;i+) outfile3.write(char*)&ti,sizeof(ti); outfile3.close(); ofstream outfile4(salesman.txt,ios:binary); if(!outfile3) cerrsalesman.txt open error!endl; abort(); for(i=0;ia4;i+) outfile4.write(char*)&s1i,sizeof(s1i); outfile4.close();43 主函数实现int main() int choice=1; while(choice!=0) /*以下是欢迎界面* coutsetw(20)*欢迎进入员工信息管理系统*endl; coutsetw(50)*n; coutsetw(50) 请选择您所需的操作 n; coutsetw(50) 操作1,并按回车键 n; coutsetw(50) 返回0,并按回车键 n; coutsetw(50)choice; switch(choice) case 1: while(1) coutsetw(20); while (choice!=0) /以下是信息维护的选择操作 cout信息维护1:新增2:更改3:删除4:查找5:显示6:保存0:退出choice; switch (choice) case 1: /实现增加功能 add(); break; case 2:/实现修改功能 change1(); break; case 3: /实现删除功能 delete2(); break; case 4: /实现查找功能 search(); break; case 5: /实现显示功能 show(); break; case 6: /实现保存功能 save(); cout写入文件成功!endl; break; case 0: break; case 0: break;default:cout请从0和1之间选择操作!endl; break; return 0;第五章 系统测试51 模块测试(1)进入欢迎界面按1 进入操作 按0 退出,如图5-1所示 图5-1(2)如果按了其他数字系统会提醒你重新操作,在0和1之间选择,如图5-2所示 图 5-2(3)在信息维护里按相应的数字进行操作,按1进行添加,如图5-3所示 图5-3(4)添加了一个经理系统提示增加的个数,然后输入信息,在编号里有关于数据有效性的判断如图5-4所示 图5-4(5)增加完以后,按5显示当前信息,如图5-5 图5-5(6)按2进行更改,系统提示输入员工的新信息,如图5-6所示 图5-6(7)更改完以后按5显示更改完以后的信息,如图5-7所示 图5-7(8)按3进行删除,系统提示删除成功,可以进行其它操作,如图5-8所示 图5-8(9)删除以后按5,进行显示,如图5-9所示 图5-9(10)按4进行查找,如果用户不存在则显示此人不存在的信息 图5-10(11) 用户存在的话,则输出他的全部信息,如图5-11所示 图5-11(12)按6写入文件,系统提示保存成功,如图5-12,所示 图5-12(13.) 保存以后的文件内容,如图5-13所示 图5-13(14) 按0退出系统,界面如图5-14 图5-1452 课程设计过程中遇到的问题在程序设计过程中,我在用switch语句的时候把break的位置放错,导致程序无法运行。在文件操作的时候,如果后面有case语句,或者default语句,要把文件操作的内容括起来,否则系统提示错误。如果在一个函数中有多个case语句用到一个变量,则要把这个变量定义为这个函数内的全局变量,否则在运行时系统会报错。而且在运行过程中碰到如果变量是string类型,不能将它用于strcmp,只有将变量改为字符数组,才可以进行字符比较的操作。总 结 本次课设我做的是公司人员管理系统,其优点是有友好的界面,可以有效地进行数据的增加,更改,删除,查找,显示和保存,并且在输入数据时有关于数据有效性的判断。但是也有一些缺点,就是删除数据时是把内容赋为空值,而不能把他从内存中彻底删除,导致内存空间的浪费。究其原因主要是对链表的掌握不熟练,所以以后要加强对链表知识的学习。总之,两周的课设,让我感觉自己在整体上有了一个很大的提高,知识更加系统化,理论化,我会继续努力和不断地钻研! 致 谢 本课题在选题及进行过程中得到斯琴老师的悉心指导。论文行文过程中,斯琴老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。斯琴老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。再多华丽的言语也显苍白。在此,谨向斯琴老师致以诚挚的谢意和崇高的敬意。同时也要感谢我的同学陈红在编写代码的过程中给予我的帮助。 参考文献1吕凤翥. C+语言基础教程.清华大学出版社 .1999年3月第一版 2郑莉 董渊 张瑞丰. C+语言程序设计. 清华大学出版社. 2005 3张国峰.C+语言及其程序设计教程. 电子工业出版社. 1997 4和克智.C+程序设计. 西安交通大学出版社.2004 5张基温.C+程序开发教程. 清华大学出版社.2002-12 6揣锦华.C+程序设计语言. 西安电子科技大学出版社.2003-2 7裘宗燕.c+程序设计语言(特别版). 机械工业出版社.2002-7 8候捷译.C+设计新思维. 华中科技大学出版社.20033 附 录 将源程序代码附到附录中。程序源代码如下:#include #include #include #include const int N=100; using namespace std;class Employeepublic:Employee()Employee()void display()/显示员工信息 coutsetw(10)numsetw(10)namesetw(10)zcsetw(10)gzendl; coutendl; void change()cout请输入雇员的新信息:endl; cout编号setw(5)姓名setw(5)职称setw(5)工资num; cinname; cinzc; cingz;int getnum() return num;char *getzc() return zc;void delete1()num=0;name=*;strcpy(zc,#);gz=0;void set() /输入员工信息 cout请输入雇员信息:endl; cout编号setw(5)姓名setw(5)职称setw(5)工资num; cinname; cinzc; cingz;protected:int num; /编号int gz; /年龄string name; /姓名char zc20; /职称;class Manager:virtual public Employeepublic:Manager()Manager()void display()/显示员工信息coutsetw(10)numsetw(10)namesetw(10)zcsetw(10)gzendl; coutendl; void set() /输入员工信息 cout请输入经理信息:endl; coutnum; while(num1000|num
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 市场营销


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!