您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 公司管理系统-C++的面向对象程序设计实例
基于C++的面向对象程序设计实例公司人员信息管理系统1、问题描述某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。其中,雇员分为经理、技术人员、销售人员和销售经理。四类人员的月薪计算方法如下:经理拿固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领取工资;销售经理既拿固定月薪也领取销售提成。设计一程序能够对公司人员进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。2、功能要求(1)基本功能1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;3)显示功能:可显示当前系统中所有记录,每条记录占据一行。4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。6)统计功能:能根据多种参数进行人员的统计。例如,统计四类人员数量以及总数,或者统计男、女员工的数量,或者统计平均工资、最高工资、最低工资等信息。7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。(2)扩展功能在完成以上基本功能的基础上,可自行进行扩展或完善,例如:1)添加人员记录时,考虑各种数据的有效性。2)组合查询功能的实现。3)可按人员的某些信息进行排序,例如按工资进行排序等。4)对文件的读写使用二进制信息。3、问题的解决方案根据系统功能要求,可以将问题解决分为以下步骤:1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;2)分析系统中的各个实体及它们之间的关系;3)根据问题描述,设计系统的类层次;4)完成类层次中各个类的描述;5)完成类中各个成员函数的定义;6)完成系统的应用模块;7)功能调试;8)完成系统总结报告。程序代码:#includeiostream#includestring#includefstream#includeiomanipconsttmax=20;usingnamespacestd;classPerson{protected:intnum;stringname;stringposition;charsex;intlevel;public:Person(intn=0,stringnam=,chars='f',stringp=,intl=0){num=n;name=nam;sex=s;position=p;level=l;}intgetnum(){returnnum;}stringgetname(){returnname;}virtualvoidinput(){cout编号(int):;cinnum;cout姓名(string):;cinname;cout性别(m/男,f/女):;cinsex;cout所在部门(string):;cinposition;cout级别(int):;cinlevel;}virtualvoidoutput(){cout编号:setw(1)num;cout姓名:setw(5)name;cout性别:setw(1)sex;cout所在部门:setw(4)position;cout级别:setw(2)level级;}};classTechnologist:virtualpublicPerson{protected:inthour;public:Technologist(intn=0,stringnam=,chars='f',stringp=,intl=0,inth=0):Person(n,nam,s,p,l){hour=h;}voidinput(){cout请输入技术人员的信息:endl;Person::input();cout工作时间(int):;cinhour;}voidoutput(){Person::output();cout工资:setw(4)hour*200endl;}};classTechnologist_mana{Technologistt[tmax];inttop;public:Technologist_mana(){top=0;}voidadd();voidshow();voidsearch();voidsearch_num();voidsearch_name();voidedit();voidedit_num();voidedit_name();voidDelete();voidDelete_num();voidDelete_name();voidtotal();voidsave();voidread();};voidTechnologist_mana::add(){if(top=tmax){cout空间已满,不能添加!!!endl;return;}Technologistte;cout请输入添加人员信息:endl;;te.input();t[top]=te;for(inti=0;itop;i++){if(te.getnum()==t[i].getnum()){cout该编号已存在,添加失败!endl;return;}}cout添加成功!!!endl;coutendl;top++;}voidTechnologist_mana::show(){if(top==0){cout没有信息!endl;return;}for(inti=0;itop;i++)t[i].output();coutendl;}voidTechnologist_mana::search_num(){inty1;cout请输入要查询技术人员的编号:;ciny1;for(inti=0;itop;i++){if(t[i].getnum()==y1){coutoooooooooooo找到这个技术人员了,其信息为:ooooooendl;t[i].output();return;}}cout该技术人员不存在!endl;}voidTechnologist_mana::search_name(){strings1;cout请输入要查询的技术人员姓名:;cins1;for(inti=0;itop;i++){if(t[i].getname()==s1){coutoooooooooooo找到这个技术人员了,其信息为:ooooooendl;t[i].output();return;}}cout该技术人员不存在!endl;}voidTechnologist_mana::search(){if(top==0){cout没有技术人员信息!endl;return;}intchoice;do{coutooooo查找oooooendl;cout||||endl;cout||1:按编号2:按姓名0:退出||endl;cout||||endl;coutooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooendl;cout请输入您的选择:;cinchoice;switch(choice){case1:search_num();break;case2:search_name();break;case0:cout您已安全退出.endl;break;default:cout没有此选项,请重选.endl;break;}}while(choice!=0);}voidTechnologist_mana::edit_num(){intx1;cout请输入要编辑的技术人员的编号:;cinx1;for(inti=0;itop;i++){if(t[i].getnum()==x1){t[i].output();coutendl;cout请重新输入技术人员信息:;t[i].input();cout修改成功!endl;t[i].output();return;}}cout该技术人员不存在!endl;}voidTechnologist_mana::edit_name(){stringh1;cout请输入要编辑的技术人员的姓名:;cinh1;for(inti=0;itop;i++){if(t[i].getname()==h1){t[i].output();coutendl;cout请重新输入技术人员信息:;t[i].input();cout修改成功!endl;t[i].output();return;}}cout该经理不存在!endl;}voidTechnologist_mana::edit(){if(top==0){cout没有技术人员信息!endl;return;}intchoice;do{coutooooo编辑oooooendl;cout||||endl;cout||1:按编号2:按姓名0:退出||endl;cout||||endl;coutooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooendl;cout请输入您的选择:;cinchoice;switch(choice){case1:edit_num();break;case2:edit_name();break;case0:cout您已安全退出.endl;break;default:cout没有此选项,请重选.endl;break;}}while(choice!=0);}voidTechnologist_mana::Delete_num(){charc1;intf1;cout请输入要删除的技术人员编号:;cinf1;for(inti=0;itop;i++){if(t[i].getnum()==f1){t[i].output();break;}}if(i=top){cout无此技术人员!;return;}cout是否删除此项(是:y/Y,否:n/N):;cinc1;if(c1=='y'||c1=='Y'){for(intk=i;ktop-1;k++){t[k]=t[k+1];}cout删除成功!endl;top--;return;}elsecout没有删除该技术人员!endl;}voidTechnologist_mana::Delete_name(){charc3;stringr;cout请输入要删除的技术人员姓名:;cinr;for(inti=0;itop;i++){if(t[i].getname()==r){t[i].output();break;}}if(i=top){cout无此技术人员!;return;}cout是否删除此项(是:y/Y,否:n/N):;cinc3;if(c3=='y'||c3=='Y'){for(intk=i;ktop-1;k++){t[k]=t[k+1];}cout删除成功!endl;top--;return;}elsecout没有删除该技术人员!endl;}voidTechnologi
本文标题:公司管理系统-C++的面向对象程序设计实例
链接地址:https://www.777doc.com/doc-6305698 .html