资源描述
软件学院
课程设计报告
设计名称:C++课程设计
选题名称:人事管理系统
姓名:
学号:1515
专业班级:
系(院):
设计时间:
设计地点:
1需求分析
1.1需求概述
设计一个公司人事管理系统,该系统主要实现了对老板和普通员工(游客)不同的操作。
【1】 老板身份的功能:
(1) 增加职员信息
(2) 显示职员信息
(3) 删除职员信息
(4) 保存职员信息
(5) 读取职员信息
(6) 修改职员信息
(7) 排序职员信息
(8) 统计员工信息
(9) 查找员工信息
(10) 退出系统
【2】 普通员工的功能
(1)显示职员信息
(2)公司职员状况
(3) 查找职员信息
(4) 退出系统
1.2需求说明
(1 随着现代社会的发展,公司的人员信息资料变化较大。在这个信息爆炸的时代再像曾经用笔那样记录人员信息效率较低,工作量较大。与此相对应的信息登记电子化则很好的解决此问题。故推出本人事管理系统令你摆脱往日与笔墨为伴的岁月。
(2 本系统能记录常见的姓名,性别,编号,职务,月薪等基本工资。
对于录入的人员的信息都能用文件保存起来,并且可以任意对其进行删除,浏览,修改,增加等常见操作。
(3显示所有人员信息有一定规范的格式,以便老板以及其他员工的查看,分析等应用。
(4该管理系统是以大菜单下细分小菜单的方式进行工作,为不同用户提供清晰且不同菜单功能的使用提示,依据不同用户的不同选择进行不同操作任意切换
2 总体设计
2.1功能模块图
该系统按功能模块划分如下:
公司人事管理系统
普通员工
老板
公司职员状况
统计员工信息
查找职员信息
查找员工信息
统计员工信息
排序职员信息
修改职员信息
读取职员信息
保存职员信息
删除职员信息
显示职员信息
增加
职员信息
退出系统
按照员工的编号
按照员工的编号
修改工资
修改职务
修改姓名
2.2功能描述
(1)身份选择模块是公司人事管理系统的入口,是用来完成用户操作命令的接口,用户可以根据提示进入不同的身份的功能界面,进而实现不同用户的不同需求
(2)进入公司人员管理界面开始选择功能,如果系统读取到之前的保存的信息可以增删查改等常见功能,如没有则可初始化人员,然后进行相应操作。
(3)对人员信息的查询可以运用独一无二的编号快速查找职工。
(4)在删除商品信息模块中仅允许老板身份人员对职员信息进行删除操作
(5)修改职员信息中老板可以根据需要对某些职员进行提拔,调整工资等功能。·
(6)在统计职员信息功能中,统计出当前所有职员的一些信息。如男女职员的数目,某一职务的人数,所有职员数目等等功能。
(7)在普通职员身份仅仅能查看公司特定信息,任何具有修改信息的功能模块,考虑到安全性均不能实现。
2.3数据结构
在公司人事管理系统中主要的数据结构是职员的信息,包含职员姓名,职员性别,职员编号,职员工资,职员职务,等在处理过程中可以作为一个员工的不同类别进行处理,其中员工类别包括文书类,技术人员类,技术经理类,业务员类,业务员经理类等等。用户可以根据菜单提示对信息进行不同处理
2.4系统流程图
老板功能流程图
开始
功能选择
增加职工否
否
删除职工否
查询职工否
否
修改职工否
否
否
结束
退出老板身份否
是
开始
员工功能流程图
功能选择
执行完毕
显示所有职工信息
查看公司信息
是 否
是 否
查询员工信息
退出员工身份
是 否
否 是
退出
3 详细设计
3.1 类的设计
在;人事管理系统中共设计了六个类,分别是: 文书(employee)类,销售员(salesman)类,销售经理(SalesManager)类,技术员(Technical)类,技术经理(TechnicalManager)类,老板(boss)类,employee类作为基类,其他类均由employee类派生。
(1)文书(employee)类
class employee//普通职工
{
protected:
char name[20];//姓名
int number;//编号
char level[20];//职务
char sex;//性别
float salary;//工资
int flage;//标记
public:
employee(char nam[20],char lev[20],int nu,char se,int fla);
employee(){}
void show();
float Salary();
char * GetName();//提取姓名函数
int GetEmpNo();//提取编号
char * Level();//提取级别
char Sex();//提取性别
int GetFla();
friend class boss;
employee *next;
};
(2)经理(Manager)类
class Manager:public employee//经理
{
public:
Manager(char nam[20],char lev[20],int nu,char se,int fla);
void pay();
void show();
};
Manager::Manager(char nam[20],char lev[20],int nu,char se,int fla):
employee(nam,lev,nu,se,fla)
{
salary=5000;
flage=fla;
}
(3)销售员(salesman)类
class salesman: public employee//销售员
{
protected:
float sale_num;//销售额
float sale_object;//项目额
float sale_numRate;//销售额提成率
float sale_objectRate;//项目额提成率
public:
salesman(){}
salesman(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob);
void show();
};
salesman::salesman(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob):employee(nam,lev,nu,se,fla)
{
flage=fla;//标记
sale_num=s_n;
sale_object=s_ob;
sale_numRate=0.15;
sale_objectRate=0.10;
salary=sale_objectRate*sale_object+sale_num*sale_numRate;
}
(4)销售经理(SalesManage)类
class SalesManager: public Manager
{
public:
SalesManager(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob);
void show();
protected:
float sale_num;//销售额
float sale_object;//项目额
};
SalesManager::SalesManager(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob):Manager(nam,lev,nu,se,fla)
{
strcpy(name,nam);///姓名
strcpy(level,lev);//等级
number=nu;//编号
sex=se;//性别
flage=fla;
sale_num=s_n;
sale_object=s_ob;
salary=salary+(sale_object+sale_num)*0.35;
}
(5) 技术人员(Technical)类
class Technical: public employee
{
protected:
float code_num;
float code_price;
public:
Technical(char nam[20],char lev[20],int nu,char se,int fla,float C_n);
};
Technical::Technical(char nam[20],char lev[20],int nu,char se,int fla,float C_n)
{
strcpy(name,nam);///姓名
strcpy(level,lev);;//等级
number=nu;//编号
sex=se;//性别
flage=fla;
code_price=1000;
salary=C_n*code_price;
}
(6) 技术经理(TechnicalManager)类
class TechnicalManager: public Technical
{
public:
TechnicalManager(char nam[20],char lev[20],int nu,char se,int fla,float bon);
protected:
float bonus;
};
TechnicalManager::TechnicalManager(char nam[20],char lev[20],int nu,char se,int fla,float bon)
:Technical(nam,lev,nu,se,fla,1)
{
strcpy(name,nam);///姓名
strcpy(level,lev);//等级
number=nu;//编号
sex=se;//性别
flage=fla;
salary=5000;
bonus=bon;
salary=salary+bonus;
}
(7) 老板(boss)类
class boss
{
public:
void creat_head();//增
void creat();
void delete_inf();//删
void seach();
void show();
void sort();
void read_file();//读文件
int write_file();//写入文件*/
void modify();
void count();
protected:
employee *head;
};
3.2 画出类图
Employee
SalesManager
Salesman
4 编 码
头文件
#include<iostream>
#include<cstring>
#include<fstream>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
int n=1515900;
using namespace std;//姓名,编号,级别,低薪,工资总额
void Register();
void Login();
void Correct();
光标位置函数
extern void gotoxy(int x, int y)
{
COORD pos = {x,y};
HANDLE hOut =
GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
class employee//普通职工
{
protected:
char name[20];//姓名
int number;//编号
char level[20];/*如果用string类型 文件读到职位这个数据时
会出现错误或者乱码,若是改成char level[20],文件的读写能实现但是会有警告。*/
char sex;//性别
float salary;//工资
int flage;//标记
public:
employee(char nam[20],char lev[20],int nu,char se,int fla);
employee(){}
void show();
float Salary();
char * GetName();//提取姓名函数
int GetEmpNo();//提取编号
char * Level();//提取级别
char Sex();//提取性别
int GetFla();
friend class boss;
employee *next;
};
void employee::show()
{
cout<<name<<"\t\t"<<number<<"\t\t"<<level<<"\t\t"<<sex<<"\t\t"<<salary<<endl;
}
employee::employee(char nam[20],char lev[20],int nu,char se,int fla)//初始化编号,基本工资,级别
{
strcpy(name,nam);//姓名
strcpy(level,lev);//等级
number=nu;//编号
sex=se;//性别
salary=1500;
flage=fla;
}
char* employee::GetName()
{
return name;
}
int employee::GetEmpNo()
{
return number;
}
char* employee::Level()
{
return level;
}
char employee::Sex()
{
return sex;
}
int employee::GetFla()
{
return flage;
}
float employee::Salary()
{
return salary;
}
class Manager:public employee//经理
{
public:
Manager(char nam[20],char lev[20],int nu,char se,int fla);
void pay();
void show();
};
Manager::Manager(char nam[20],char lev[20],int nu,char se,int fla):
employee(nam,lev,nu,se,fla)
{
salary=5000;
flage=fla;
}
class salesman: public employee//销售员
{
protected:
float sale_num;//销售额
float sale_object;//项目额
float sale_numRate;//销售额提成率
float sale_objectRate;//项目额提成率
public:
salesman(){}
salesman(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob);
void show();
};
salesman::salesman(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob):employee(nam,lev,nu,se,fla)
{
flage=fla;//标记
sale_num=s_n;
sale_object=s_ob;
sale_numRate=0.15;
sale_objectRate=0.10;
salary=sale_objectRate*sale_object+sale_num*sale_numRate;
}
class SalesManager: public Manager
{
public:
SalesManager(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob);
void show();
protected:
float sale_num;//销售额
float sale_object;//项目额
};
SalesManager::SalesManager(char nam[20],char lev[20],int nu,char se,int fla,float s_n,float s_ob):Manager(nam,lev,nu,se,fla)
{
strcpy(name,nam);///姓名
strcpy(level,lev);//等级
number=nu;//编号
sex=se;//性别
flage=fla;
sale_num=s_n;
sale_object=s_ob;
salary=salary+(sale_object+sale_num)*0.35;
}
class Technical: public employee
{
protected:
float code_num;
float code_price;
public:
Technical(char nam[20],char lev[20],int nu,char se,int fla,float C_n);
};
Technical::Technical(char nam[20],char lev[20],int nu,char se,int fla,float C_n)
{
strcpy(name,nam);///姓名
strcpy(level,lev);;//等级
number=nu;//编号
sex=se;//性别
flage=fla;
code_price=1000;
salary=C_n*code_price;
}
class TechnicalManager: public Technical
{
public:
TechnicalManager(char nam[20],char lev[20],int nu,char se,int fla,float bon);
protected:
float bonus;
};
TechnicalManager::TechnicalManager(char nam[20],char lev[20],int nu,char se,int fla,float bon)
:Technical(nam,lev,nu,se,fla,1)
{
strcpy(name,nam);///姓名
strcpy(level,lev);//等级
number=nu;//编号
sex=se;//性别
flage=fla;
salary=5000;
bonus=bon;
salary=salary+bonus;
}
class boss
{
public:
void creat_head();//增
void creat();
void delete_inf();//删
void seach();
void show();
void sort();
void read_file();//读文件
int write_file();//写入文件*/
void modify();
void count();
protected:
employee *head;
}ba;
统计函数
void boss::count()
{
system("cls");
char choice;
while(true)
{
int all_num=0,SEX_W_num=0,SEX_M_num=0;
float max_salary=0,min_salary;
float ALL_Salary=0;
int ws_num,jl_num;
int employee_num,salesman_num,SalesManager_num,Technical_num,TechnicalManager_num;
employee_num=salesman_num=SalesManager_num=Technical_num=TechnicalManager_num=0;
employee *p=head;
employee *p1=head->next;
if(p1!=NULL)
min_salary = p1->Salary();
while(p1!=NULL)
{
ALL_Salary=p1->Salary()+ALL_Salary;
all_num++;
if(p1->Sex()==119)
SEX_W_num++;
else
SEX_M_num++;
if(p1->Salary() > max_salary)
max_salary = p1->Salary();
if(p1->Salary() < min_salary)
min_salary = p1->Salary();
if(p1->GetFla()==1)
employee_num++;
else if(p1->GetFla()==2)
salesman_num++;
else if(p1->GetFla()==3)
SalesManager_num++;
else if(p1->GetFla()==4)
Technical_num++;
else if(p1->GetFla()==5)
TechnicalManager_num++;
p=p1;
p1=p1->next;
}
p1=head->next;
if(p1!=NULL)
{
cout<<"\t\t\t公司职员信息"<<endl;
cout<<endl;
cout<<"\t\t\t职员一共:"<<all_num<<"人!"<<endl;
cout<<"\t\t\t其中男生人数:"<<SEX_M_num<<" 女生人数:"<<SEX_W_num<<endl;
cout<<"\t\t\t公司文书人数为:"<<employee_num<<endl;
cout<<"\t\t\t销售人员人数为:"<<salesman_num<<endl;
cout<<"\t\t\t销售经理人数为:"<<SalesManager_num<<endl;
cout<<"\t\t\t技术人员人数为:"<<Technical_num<<endl;
cout<<"\t\t\t技术经理人数为:" <<TechnicalManager_num<<endl;
cout<<"\t\t\t公司的人均月薪为:"<<ALL_Salary/all_num<<endl;
cout<<"\t\t\t最高工资:"<<max_salary<<endl;
cout<<"\t\t\t最低工资:"<<min_salary<<endl<<endl;
}
else
{
cout<<"\t\t\t员工信息暂时未统计"<<endl;
}
cout<<"\t\t\t是否离开本界面?y/n"<<endl;
cin>>choice;
if(choice=='y')
break;
}
}
修改函数
void boss::modify()//修改作用
{
system("cls");
while(true)
{
int i=0;
employee *p=head;
employee *p1=head->next;
char No;
char name2[20],name1[20];//姓名
int number;//编号
char leve[20];//等级
char sex;//性别
float salary;//工资
system("cls");
cout<<"\t\t\t 请输入修改的类型"<<endl;
cout<<"\t\t\t1 姓名 "<<endl;
cout<<"\t\t\t2 等级 "<<endl;
cout<<"\t\t\t3 工资 "<<endl;
cin>>No;
switch(No)
{
case'1':
cout<<"\t\t\t请输入编号:"<<endl;
cin>>number;
cout<<"\t\t\t输入修改后的姓名:"<<endl;
cin>>name1;
while(p1!=NULL)
{
if(p1->GetEmpNo()==number)
{
strcpy(p1->name,name1);
i=1;
}
p1=p1->next;
}
break;
case'2':
cout<<"\t\t\t输入调整人员编号:"<<endl;
cin>>number;
cout<<"\t\t\t输入调整岗位(文书,技术工,业务员,业务经理):"<<endl;
cin>>leve;
while(p1!=NULL)
{
if(p1->GetEmpNo()==number)
{ i=1;
strcpy(p1->level,leve);
}
p1=p1->next;
}
break;
case'3':
cout<<"\t\t\t输入调整编号:"<<endl;
cin>>number;
cout<<"\t\t\t修改后的薪水 :"<<endl;
cin>>salary;
while(p1!=NULL)
{
if(p1->GetEmpNo()==number)
{i=1;
p1->salary=salary;
}
p1=p1->next;
}
break;
default:cout<<"无此选项"<<endl;
break;
}
if(i==0)
cout<<"\t\t\t无此人员,请核对后再调整信息!"<<endl;
if(i==1)
{
cout<<"\t\t\t修改成功!"<<endl;
}
cout<<"\t\t\t是否退出y/n"<<endl;
char choice;
cin>>choice;
if(choice=='y')
{
break;
}
}
}
排序函数
void boss::sort()
{ system("cls");
employee *p,*min,*p_min,*first=NULL,*tail;
employee *p1=head->next;
while(p1!=NULL)
{
for(min=p1,p=p1;p->next!=NULL;p=p->next)
{
if(p->next->Salary() < min->Salary())
{
p_min=p;
min=p->next;
}
}
if(first==NULL)
{
first=min;
tail=min;
}
else
{
tail->next=min;
tail=min;
}
if(p1==min)
{
p1=p1->next;
}
else
{
p_min->next=min->next;
}
}
if (first != NULL)
{
tail->next = NULL;
}
head->next = first;
show();
}
保存函数
int boss::write_file()
{
if(head->next==NULL)
cout<<"空信息,请添加后保存"<<endl;
else
{
employee *p=head->next;
ofstream myfile("file.txt");
ofstream number("file1.txt");
if(!myfile||!number )
{
cout<<"文件打开失败 !"<<endl;
return 0;
}
int l;
do
{
int size;
l=p->GetFla();
switch(l)
{
case 1:size=sizeof(employee);break;
case 2:size=sizeof(salesman);break;
case 3:size=sizeof(SalesManager);break;
case 4:size=sizeof(Technical);break;
case 5:size=sizeof(TechnicalManager);break;
}
number.write((char *)&l,sizeof(int));
myfile.write((char *)p,size);
p=p->next;
}while(p!=NULL) ;
myfile.close();
number.close();
cout<<"\t\t\t员工信息更新成功!"<<endl;
}
}
删除函数
void boss::delete_inf()
{
system("cls");
int num;
employee *p=head;
employee *p1=head->next;
cout<<"\t\t\t请输入要删除员工的编号:"<<endl;
cin>>num;
while(p1!=NULL)
{
if(p1->GetEmpNo()==num)
{
p->next=p1->next;
delete p1
展开阅读全文