人员管理系统.docx
《人员管理系统.docx》由会员分享,可在线阅读,更多相关《人员管理系统.docx(65页珍藏版)》请在冰豆网上搜索。
人员管理系统
C++面向对象程序设计
课程设计报告
课程名称C++面向对象程序设计
课题名称公司人员信息管理系统
专业
班级
学号
姓名
指导教师
2013年12月25日
(一)、课程设计题目
公司人员信息管理系统
(2)、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(4)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
(三)、设计方法和基本原理:
1.功能要求
(1)添加功能
程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求人员的编号要唯一,如果添加了重复编号的记录时,则提示用户数据添加重复并取消添加。
(2)查询功能
可根据编号、姓名等信息对已添加的记录进行查询。
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能
可显示当前系统中所有记录。
(4)修改功能
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能
对已添加的人员记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!
”并返回操作;否则输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存在。
(6)统计功能
能根据多种参数进行人员的统计。
例如:
统计四类人员数量以及总数,统计男、女员工的数量,统计平均工资、最高工资、最低工资等。
(7)保存功能
将当前系统中各类人员记录存入文件中。
(8)读取功能
将保存在文件中的人员信息读入到当前系统中,以供用户使用。
在完成以上基本功能的基础上,可自行进行扩展或完善。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
2)分析系统中的各个实体以及它们之间的关系;
3)根据问题描述,设计系统的类层次;
4)完成类层次中各个类的描述;
5)完成类中各个成员函数的定义;
6)完成系统的应用模块;
7)功能调试;
8)完成系统总结报告。
1.系统需求分析
系统设计的目的与意义:
现在的公司越做越大,公司的人员数量越来越多,因此需要一个公司人员管理系统来对公司的人员进行管理。
系统功能需求:
本系统有五个类:
Stuff类、Manager类、Salesman类、SalesManager类、Technicist类,存储基本信息、经理信息、销售人员信息、销售经理信息及技术人员信息。
1.基础信息的添加功能
程序能够任意添加经理信息、销售信息、销售经理信息和技术人员信息。
2.修改功能
对已添加的记录(经理信息、销售信息、销售经理信息和技术人员信息)进行修改。
3.删除功能
对已添加的记录(经理信息、销售信息、销售经理信息和技术人员信息)进行删除。
如果当前系统中没有相应的记录,则提示“记录为空!
”并返回操作;否则输入要删除的编号对该记录进行删除,如果没有找到,则提示相应的记录不存在。
4.查询功能
①可根据职位的编号查询某职位的所有职员信息。
②可根据职员的编号查询某职员的所有信息。
如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
5.保存功能
将当前系统中各类记录存入文件中。
6.读取功能
将保存在文件中的信息读入到当前系统中,以供用户使用。
2.总体设计
系统功能分析:
系统通过调用函数来实现信息录入、信息修改、信息删除、信息查询以及数据保存文件等功能。
add()函数用于录入信息;modify()函数用来修改信息;del()函数用来修改信息;look()函数用来搜索职员信息;read()函数用于将文件中的数据读取到内存中;save()函数用于将内存中的信息存入文件内;count用于统计职员总数;show()显示职员信息;主函数main()用于调用这些函数。
系统功能模块划分与设计:
系统定义了Stuff类、Manager类、Salesman类、SalseManager类这五个类,定义了add()、modify()、del()、read()、save()、look()、count()、show()、等函数来实现系统所需功能。
系统功能模块图:
类的设计
(1)Stuff类(抽象类)的设计:
(2)经理类的设计:
(3)销售人员类的设计:
(4)销售经理类的设计:
(5)技术人员类的设计:
(6)各个类的关系描述:
3.详细设计及实现
类(抽象类)的实现
classStuff
{public:
virtualvoidread()=0;
virtualvoidadd()=0;
virtualvoidlook()=0;
virtualvoidshow()=0;
virtualvoidmodify(int)=0;
virtualvoiddel(int)=0;
virtualvoidcount()=0;
virtualvoidsave()=0;
virtualvoidInput()=0;
virtualvoidOutput()=0;
intnumber;
charname[100];
charsex[10];
chardepartment[10];
charrank[10];
floatmonpay;};
经理类的实现
#include""
classManager:
publicStuff
{public:
voidread();
voidadd();
voidlook();
voidshow();
voidmodify(int);
voiddel(int);
voidcount();
voidsave();
voidInput()
{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;}
voidOutput()
{cout<cout<protected:
floatpay;};
voidManager:
:
read()
{fstreammanagerfile("经理信息管理.dat",ios:
:
in|ios:
:
out);managerfile>>m1[count_Manager].number>>m1[count_Manager].name>>m1[count_Manager].sex>>m1[count_Manager].department>>m1[count_Manager].rank>>m1[count_Manager].monpay;
while(!
())
{managerfile>>m1[count_Manager].number>>m1[count_Manager].name>>m1[count_Manager].sex>>m1[count_Manager].department>>m1[count_Manager].rank>>m1[count_Manager].monpay;
count_Manager++;}
();}
voidManager:
:
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++;
}
voidManager:
:
look()
{
if(count_Manager==0)
{
cout<<"对不起,没有相关记录!
"<return;
}
intchoice;
cout<<"请选择查找方式:
1、编号查找2、姓名查找"<cin>>choice;
while(choice!
=1&&choice!
=2)
{cout<<"请输入正确的选择:
";cin>>choice;}
switch(choice)
{
case1:
{
cout<<"请输入要查找经理的编号:
";
intnumber;
cin>>number;
for(inti=0;i{if(m1[i].number==number)
{
m1[i].Output();
return;
}
}
cout<<"没有相关人员!
"<break;
}
case2:
{
cout<<"请输入要查找经理的姓名:
";
charname[100];
cin>>name;
for(inti=0;i{
if(strcmp(m1[i].name,name)==0)
{
m1[i].Output();
return;
}
}
cout<<"没有相关人员!
"<break;
}
default:
cout<<"无此选项,请重试!
"<}
}
voidManager:
:
show()
{
for(inti=0;i<=count_Manager-1;i++)
m1[i].Output();
}
voidManager:
:
modify(intindex)
{
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;
}
voidManager:
:
del(intindex)
{
for(inti=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--;
}
voidManager:
:
count()
{
intsum=0;
intmale=0,female=0;
for(inti=0;i{
if(!
strcmp(m1[i].sex,"男"))
male++;
if(!
strcmp(m1[i].sex,"女"))
female++;
sum++;
}
cout<<"总的人数是:
"<cout<<"男的人数是:
"<cout<<"女的人数是:
"<}
voidManager:
:
save()
{
ofstreammanagerfile;
("经理信息管理.dat");
for(inti=0;i<=count_Manager-1;i++)
managerfile<();
}
销售人员类的实现
#include""
classSalesman:
publicStuff
{
public:
voidread();
voidadd();
voidlook();
voidshow();
voidmodify(int);
voiddel(int);
voidcount();
voidsave();
voidInput()
{
cout<<"请输入销售人员的编号:
\n";
cin>>number;
cout<<"姓名:
\n";
cin>>name;
cout<<"性别:
\n";
cin>>sex;
cout<<"所在部门:
\n";
cin>>department;
cout<<"级别:
\n";
cin>>rank;
cout<<"销售额和提成百分比:
\n";
cin>>market>>rate;
monpay=market*rate;
}
voidOutput()
{
cout<cout<}
protected:
floatmarket;
floatrate;
};
voidSalesman:
:
read()
{
fstreamSalesmanfile("销售人员信息管理.dat",ios:
:
in|ios:
:
out);
Salesmanfile>>s1[count_Salesman].number>>s1[count_Salesman].name>>s1[count_Salesman].sex>>s1[count_Salesman].department>>s1[count_Salesman].rank>>s1[count_Salesman].monpay;
while(!
())
{Salesmanfile>>s1[count_Salesman].number>>s1[count_Salesman].name>>s1[count_Salesman].sex>>s1[count_Salesman].department>>s1[count_Salesman].rank>>s1[count_Salesman].monpay;
count_Salesman++;
}
();
}
voidSalesman:
:
add()
{
s1[count_Salesman].number=number;
strcpy(s1[count_Salesman].name,name);
strcpy(s1[count_Salesman].sex,sex);
strcpy(s1[count_Salesman].department,department);
strcpy(s1[count_Salesman].rank,rank);
s1[count_Salesman].monpay=monpay;
count_Salesman++;
}
voidSalesman:
:
look()
{
if(count_Salesman==0)
{
cout<<"对不起,没有相关记录!
"<return;
}
intchoice;
cout<<"请选择查找方式:
1、编号查找2、姓名查找"<cin>>choice;
while(choice!
=1&&choice!
=2)
{cout<<"请输入正确的选择:
";cin>>choice;}
switch(choice)
{
case1:
{
cout<<"请输入要查找销售人员的编号:
";
intnumber;
cin>>number;
for(inti=0;i{if(s1[i].number==number)
{
s1[i].Output();
return;
}
}
cout<<"没有相关人员!
"<break;
}
case2:
{
cout<<"请输入要查找销售人员的姓名:
";
charname[100];
cin>>name;
for(inti=0;i{
if(strcmp(s1[i].name,name)==0)
{
s1[i].Output();
return;
}
}
cout<<"没有相关人员!
"<break;
}
default:
cout<<"无此选项,请重试!
"<}
}
voidSalesman:
:
show()
{
for(inti=0;i<=count_Salesman-1;i++)
s1[i].Output();
}
voidSalesman:
:
modify(intindex)
{
s1[index-1].number=number;
strcpy(s1[index-1].name,name);
strcpy(s1[index-1].sex,sex);
strcpy(s1[index-1].department,department);
strcpy(s1[index-1].rank,rank);
s1[index-1].monpay=monpay;
}
voidSalesman:
:
del(intindex)
{
for(inti=index;i<=count_Salesman-1;i++)
{
s1[i-1].number=s1[i].number;
strcpy(s1[i-1].name,s1[i].name);
strcpy(s1[i-1].sex,s1[i].sex);
strcpy(s1[i-1].department,s1[i].department);
strcpy(s1[i-1].rank,s1[i].rank);
s1[i-1].monpay=s1[i].monpay;
}
count_Salesman--;
}
voidSalesman:
:
count()
{
intsum2=0;
intmale2=0,female2=0;
for(inti=0;i{
if(!
strcmp(s1[i].sex,"男"))
male2++;
if(!
strcmp(s1[i].sex,"女"))
female2++;
sum2++;
}
cout<<"总的人数是:
"<cout<<"男的人数是:
"<cout<<"女的人数是:
"<}
voidSalesman:
:
save()
{
ofstreamSalesmanfile;
("销售人员信息管理.dat");
for(inti=0;i<=count_Salesman-1;i++)
Salesmanfile<();
}
销售经理类的实现
classSalesmanager:
publicStuff
{
public:
floatpay1,market1,rate1;
voidread();
voidadd();
voidlook();
voidshow();
voidmodify(int);
voiddel(int);
voidcount();
voidsave();
voidInput()
{
cout<<"请输入销售经理的编号:
\n";
cin>>number;
cout<<"姓名:
\n";
cin>>name;
cout<<"性别:
\n";
cin>>