面向对象程序设计(C++)课程大作业设计题目:公司员工信息管理系统设计院系:计算机科学与信息工程学院专业班级:软件工程学号姓名:指导教师:***2015 年1月目录1 目的与要求 (1)1.1设计目的 (1)1.2基本要求 (1)1.3功能要求 .......................................................................................... 错误!未定义书签。
1 2系统分析 . (3)2.1系统需求分析 (3)2.2系统功能分析 (4)2.3系统可行性分析 (4)2.3.1技术可行性分析 (4)2.3.2操作可行性分析 (4)2.3.3经济可行性分析 (5)3系统设计 (6)3.1系统结构图 (6)3.2系统功能模块 (6)3.3系统类的设计 (7)4 系统实现 (10)4.1经理类的实现 (10)4.2技术人员类的实现 (16)4.3主函数的实现.............................................................................. 错误!未定义书签。
22 结束语.. (23)参考文献 (23)1目的与要求1.1 设计目的(1)要求学生达到熟练掌握C++语言的基本知识和技能;(2)基本掌握面向对象程序设计的基本思路和方法;(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
1.2 基本要求(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;(2)要求在设计的过程中,建立清晰的类层次;(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;(4)在系统的设计中,至少要用到面向对象的一种机制。
1.3 功能要求(1)添加功能程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求人员的编号要唯一,如果添加了重复编号的记录时,则提示用户数据添加重复并取消添加。
(2)查询功能可根据编号、姓名等信息对已添加的记录进行查询。
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能可显示当前系统中所有记录。
(4)修改功能可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能对已添加的人员记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存在。
(6)统计功能能根据多种参数进行人员的统计。
例如:统计四类人员数量以及总数,统计男、女员工的数量,统计平均工资、最高工资、最低工资等。
(7)保存功能将当前系统中各类人员记录存入文件中。
(8)读取功能将保存在文件中的人员信息读入到当前系统中,以供用户使用。
在完成以上基本功能的基础上,可自行进行扩展或完善。
2系统分析随着经济的迅速发展,企业的规模越来越大,企业的管理也越来越复杂,组织机构越来越庞大,组织的划分也越来越细,对企业各组织部门的管理以及各部门内部各职务的管理变的十分复杂,需要借助于计算机来进行管理。
企业人员数量的增多,对员工的管理也是一项繁重的工作。
所以,只有合理的对员工进行管理,企业才能有条不紊的运行。
本系统可使管理人员对全局人员结构及岗位配置情况有清晰的了解。
在人才选拔上可实现人才的内部挖掘,保证人事的合理配置。
在系统的实施过程中完成了对管理制度和流程的完善和优化,提高了整个企业的人事管理效率,促进人事管理工作向着标准化、规范化的方向发展。
2.1 系统需求分析本系统’操作的信息有存储基本信息、经理信息、销售人员信息、销售经理信息及技术人员信息。
1.基础信息的添加功能程序能够任意添加经理信息、销售信息、销售经理信息和技术人员信息。
2.修改功能对已添加的记录(经理信息、销售信息、销售经理信息和技术人员信息)进行修改。
3.删除功能对已添加的记录(经理信息、销售信息、销售经理信息和技术人员信息)进行删除。
如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作;否则输入要删除的编号对该记录进行删除,如果没有找到,则提示相应的记录不存在。
4.查询功能①可根据职位的编号查询某职位的所有职员信息。
②可根据职员的编号查询某职员的所有信息。
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
5.保存功能将当前系统中各类记录存入文件中。
6.读取功能将保存在文件中的信息读入到当前系统中,以供用户使用。
2.2 系统功能分析随着经济的迅速发展,企业的规模越来越大,企业的管理也越来越复杂,组织机构越来越庞大,组织的划分也越来越细,对企业各组织部门的管理以及各部门内部各职务的管理变的十分复杂,需要借助于计算机来进行管理。
企业人员数量的增多,对员工的管理也是一项繁重的工作。
所以,只有合理的对员工进行管理,企业才能有条不紊的运行。
2.3 系统可行性分析搭建企业人事管理系统的必要性取决于需求的迫切性和实现的可行性。
在决定开发管理信息系统应用项目之前,首先要做好系统开发的可行性分析。
可行性分析的任务是确定项目开发是否必要和可行。
从以下几个方面认真进行研究,从而为确定系统开发项目的决策提供科学依据。
2.3.1技术可行性分析技术上的可行性分析所考虑采用的硬件和软件技术能满足用户提出的要求(如计算机的容量、速度等)。
此外,因本系统难度不大,所涉及的范围只限于企业人事信息管理,所以在技术上已达到开发该系统的能力。
2.3.2操作可行性分析对于用户来说,本系统只要求使用者掌握一定的上网经验,经过仔细设计和测试之后的系统具有操作简单,方便灵活等优点,足可以满足各种用户的不同需求,同时也方便了公司的内部管理。
管理人员及用户一定会在短时间内掌握并熟练使用。
只要动一动鼠标键盘就可以达到想要的效果。
2.3.3经济可行性分析系统的经济可行性指的是对组织的经济状况和投资能力进行分析,对系统建设、运行和维护费用进行估算,对系统建成后可能取得的社会及经济效益进行估计。
本模块简单易开发,且开发需要资金少,系统开发运行后,可以实现企业员工信息管理的计算机化,节省了人力、物力,将人从繁重的工作业务中解脱出来,减少了信息管理中无意的错误,节省了大量的时间,管理效率也大幅度提高,因此,在经济上是可行的。
所带来的效益远远大于系统软件的开发成本。
在经济上完全可行。
3 系统设计3.1 系统结构图3.2系统功能模块系统定义了Stuff类、Manager类、Salesman类、SalseManager类这五个类,定义了add()、m odify()、del()、read()、save()、look()、count()、show()、等函数来实现系统所需功能。
系统通过调用函数来实现信息录入、信息修改、信息删除、信息查询和数据保存等功能。
add ()函数用于录入信息;modify()函数用来修改信息;del()函数用来修改信息;look()函数用来搜索职员信息;read()函数用于将文件中的数据读取到内存中;save()函数用于将内存中的信息存入文件内;count用于统计职员总数;show()显示职员信息;主函数main用于调用这些函数。
3.3系统类的设计(1)Stuff类(抽象类)的设计:(2)经理类的设计:(3)销售人员类的设计:(4)销售经理类的设计:(5)技术人员类的设计:(6)各个类的关系描述:4 系统实现4.1 经理类的实现class Manager:public Stuff{public:void read();void add();void look();void show();void modify(int);void del(int);void count();void save();void Input(){ cout<<"请输入经理的编号:\n";cin>>number;cout<<"姓名:\n";cin>>name;cout<<"性别:\n";cin>>sex;cout<<"所在部门:\n";cin>>department;cout<<"级别:\n";cin>>rank;cout<<"固定工资:\n";cin>>pay;monpay=pay; }void Output(){cout<<setw(10)<<"经理信息"<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"所在部门"<<setw( 10)<<"级别"<<setw(10)<<"月薪"<<endl;cout<<setw(10)<<"经理信息"<<setw(10)<<number<<setw(10)<<name<<setw(10)<<sex<<setw(10)<<department<<setw(10)< <rank<<setw(10)<<monpay<<endl;}protected:float pay;};Manager.cppvoid Manager::read(){fstream managerfile("经理信息管理.dat",ios::in|ios::out); managerfile>>m1[count_Manager].number>>m1[count_Manager].name>>m1[count_Manager].se x>>m1[count_Manager].department>>m1[count_Manager].rank>>m1[count_Manager].monpay;while(!managerfile.eof()){managerfile>>m1[count_Manager].number>>m1[count_Manager].name>>m1[count_Ma nager].sex>>m1[count_Manager].department>>m1[count_Manager].rank>>m1[count_Manager]. monpay;count_Manager++; }managerfile.close();}void Manager::add(){m1[count_Manager].number=number;strcpy(m1[count_Manager].name,name);strcpy(m1[count_Manager].sex,sex);strcpy(m1[count_Manager].department,department);strcpy(m1[count_Manager].rank,rank);m1[count_Manager].monpay=monpay;m1[count_Manager].number=number;count_Manager++;}void Manager::look(){if(count_Manager==0){cout<<"对不起,没有相关记录!"<<endl;return;}int choice;cout<<"请选择查找方式:1、编号查找2、姓名查找 "<<endl; cin>>choice;while(choice!=1&&choice!=2){cout<<"请输入正确的选择:";cin>>choice;}switch(choice){case 1:{cout<<"请输入要查找经理的编号:";int number;cin>>number;for(int i=0;i<count_Manager;i++){if(m1[i].number==number){m1[i].Output();return;}}cout<<"没有相关人员!"<<endl;break;}case 2:{cout<<"请输入要查找经理的姓名:";char name[100];cin>>name;for(int i=0;i<count_Manager;i++){if(strcmp(m1[i].name,name)==0){m1[i].Output();return;}}cout<<"没有相关人员!"<<endl;break;}default:cout<<"无此选项,请重试!"<<endl;break;}}void Manager::show(){for(int i=0;i<=count_Manager-1;i++)m1[i].Output();}void Manager::modify(int index){m1[index-1].number=number;strcpy(m1[index-1].name,name);strcpy(m1[index-1].sex,sex);strcpy(m1[index-1].department,department);strcpy(m1[index-1].rank,rank);m1[index-1].monpay=monpay;}void Manager::del(int index){for(int i=index;i<=count_Manager-1;i++){m1[i-1].number=m1[i].number;strcpy(m1[i-1].name,m1[i].name);strcpy(m1[i-1].sex,m1[i].sex);strcpy(m1[i-1].department,m1[i].department);strcpy(m1[i-1].rank,m1[i].rank);m1[i-1].monpay=m1[i].monpay;}count_Manager--;}void Manager::count(){int sum=0;int male=0,female=0;for(int i=0;i<count_Manager;i++){if(!strcmp(m1[i].sex,"男"))male++;if(!strcmp(m1[i].sex,"女"))female++;sum++;}cout<<"总的人数是:"<<sum<<endl;cout<<"男的人数是:"<<male<<endl;cout<<"女的人数是:"<<female<<endl;}void Manager::save(){ofstream managerfile;managerfile.open("经理信息管理.dat");for(int i=0;i<=count_Manager-1;i++)managerfile<<m1[i].number<<" "<<m1[i].name<<" "<<m1[i].sex<<" "<<m1[i].department<<" "<<m1[i].rank<<" "<<m1[i].monpay<<endl;managerfile.close();}程序运行结果:4.2 技术人员类的实现Technicist.hclass Technicist:public Stuff{public:void read();void add();void look();void show();void modify(int);void del(int);void count();void save();void Input(){cout<<"请输入技术人员的编号:\n";cin>>number;cout<<"姓名:\n";cin>>name;cout<<"性别:\n";cin>>sex;cout<<"所在部门:\n";cin>>department;cout<<"级别:\n";cin>>rank;cout<<"工作时数:\n";cin>>hour;monpay=100*hour;}void Output(){cout<<setw(10)<<"技术人员信息"<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(10)<<"所在部门"<<setw( 10)<<"级别"<<setw(10)<<"月薪"<<endl;cout<<setw(10)<<"技术人员信息"<<setw(10)<<number<<setw(10)<<name<<setw(10)<<sex <<setw(10)<<department<<setw(10)<<rank<<setw(10)<<monpay<<endl;}protected:float hour;};Technicist.cppvoid Technicist::read(){fstream Technicistfile("技术人员信息管理.dat",ios::in|ios::out); Technicistfile>>t1[count_Technicist].number>>t1[count_Technicist].name>>t1[count_Technicist ].sex>>t1[count_Technicist].department>>t1[count_Technicist].rank>>t1[count_Technicist].mon pay;while(!Technicistfile.eof()){Technicistfile>>t1[count_Technicist].number>>t1[count_Technicist].name>>t1[count_Te chnicist].sex>>t1[count_Technicist].department>>t1[count_Technicist].rank>>t1[count_Technicist].monpay;count_Technicist++;}Technicistfile.close();}void Technicist::add(){t1[count_Technicist].number=number;strcpy(t1[count_Technicist].name,name);strcpy(t1[count_Technicist].sex,sex);strcpy(t1[count_Technicist].department,department);strcpy(t1[count_Technicist].rank,rank);t1[count_Technicist].monpay=monpay;count_Technicist++;}void Technicist::look(){if(count_Technicist==0){cout<<"对不起,没有相关记录!"<<endl;return; }int choice;cout<<"请选择查找方式:1、编号查找2、姓名查找"<<endl;cin>>choice;while(choice!=1&&choice!=2){cout<<"请输入正确的选择:";cin>>choice;}switch(choice){case 1:{cout<<"请输入要查找技术人员的编号:";int number;cin>>number;for(int i=0;i<count_Technicist;i++){if(t1[i].number==number){t1[i].Output();return;}}cout<<"没有相关人员!"<<endl;break;}case 2:{cout<<"请输入要查找技术人员的姓名:";char name[100];cin>>name;for(int i=0;i<count_Technicist;i++){if(strcmp(t1[i].name,name)==0){t1[i].Output();return;}}cout<<"没有相关人员!"<<endl;break;}default:cout<<"无此选项,请重试!"<<endl;break;}}void Technicist::show(){for(int i=0;i<=count_Technicist-1;i++)t1[i].Output();}void Technicist::modify(int index){t1[index-1].number=number;strcpy(t1[index-1].name,name);strcpy(t1[index-1].sex,sex);strcpy(t1[index-1].department,department);strcpy(t1[index-1].rank,rank);t1[index-1].monpay=monpay;}void Technicist::del(int index){for(int i=index;i<=count_Technicist-1;i++) {t1[i-1].number=t1[i].number;strcpy(t1[i-1].name,t1[i].name);strcpy(t1[i-1].sex,t1[i].sex);strcpy(t1[i-1].department,t1[i].department);strcpy(t1[i-1].rank,t1[i].rank);t1[i-1].monpay=t1[i].monpay;}count_Technicist--;}void Technicist::count(){int sum1=0;int male1=0,female1=0;for(int i=0;i<count_Technicist;i++){if(!strcmp(t1[i].sex,"男"))male1++;if(!strcmp(t1[i].sex,"女"))female1++;sum1++;}cout<<"总的人数是:"<<sum1<<endl;cout<<"男的人数是:"<<male1<<endl;cout<<"女的人数是:"<<female1<<endl;}void Technicist::save(){ofstream Technicistfile;Technicistfile.open("技术人员信息管理.dat");for(int i=0;i<=count_Technicist-1;i++)Technicistfile<<t1[i].number<<" "<<t1[i].name<<" "<<t1[i].sex<<" "<<t1[i].department<<" "<<t1[i].rank<<" "<<t1[i].monpay<<endl;Technicistfile.close();}程序运行结果图:4.3 主函数的实现void main(){ Stuff *p=NULL;Manager mm;mm.read();Technicist tt;tt.read();Salesman se;se.read();Salesmanager sellm;sellm.read();int choice=1;while(1){cout<<"***********欢迎进入公司人员信息管理系统**********"<<endl;cout<<" 1.经理信息管理"<<endl;cout<<" 2.技术人员信息管理"<<endl;cout<<" 3.销售人员信息管理"<<endl;cout<<" 4.销售经理信息管理"<<endl;cout<<" 0.退出"<<endl;cout<<"*************************************************"<<endl;cout<<"请输入所要操作的编号:";cin>>choice;switch(choice){case 1: Manager_manage();break;case 2: Technicist_manage();break;case 3: Salesman_manage();break;case 4: Salesmanager_manage();break;case 0: cout<<"谢谢您的使用!"<<endl; return;break;default:cout<<"请输入0~4之间的数字!"<<endl;break;}}}程序运行结果:结束语程序总共设计了五个类,满足了课题对类的要求,在设计的过程中,建立了较为清晰的类层次,也利用了面向对象的方法以及C++的编程思想来完成系统的设计,做到了用文件存储公司人员管理信息、从文件中读取公司人员信息、修改信息、查询信息、删除信息显示文件中存储的信息等要求。