资源描述
面向对象程序设计课程设计报告
企业人事管理系统
目录
一、 软件需求分析
二、 总体方案设计
三、 详细设计
四、 程序的调试与运行结果说明
五、 课程设计总结
六、 附录
一、软件需求分析
一、需求分析
1、 实现人员信息的增、删、改操作,并实现按姓名、工号进行查询功能,按照部门、工资统计、排序功能能够实现人员的部门间的调动功能
2、 源文件采用多文件的工程结构
3、 数据存储采用多文件形式
4、 标准的C++输入输出
二、 操作手册
运行程序后,按1键进入系统,要实现多种操作只需按照功能菜单上的提示输入相应的数字选择即可
二、总体方案设计
一、系统总共能模块
显示记录
查找记录
按编号
按姓名
按编号
按姓名
追加信息
新建记录
按编号
按姓名
企业人员信息表
企业人员信息表
二、定义的函数及说明
void deldate() //删除指定的单个员工的资料
void adperson() //将输入的资料赋值给相映的数据
void pprintn() //输出所有员工的资料
people *query() //将系统中的编号与输入的编号比较
people *qu() //将系统中的姓名与输入的姓名比
void disp() //输出所有员工的资料
void disp2() //输出指定的单个员工的资料
void peopledata(); //主要功能实现函数
void main() //主函数
void jiemian1() //界面1,进入程序时输出
void jiemian3() //界面3,程序结束后输出
qiye() //qiye类的构造函数
三、 详细设计
以下为我完成的具体功能函数及函数的详细分析和所用算法:
1、 void deldate()函数
该函数是删除指定的单个员工的资料,以后在其他程序模块如删除、修改等都需要调用
void deldate()
{
kg=1;
}
2、void adperson()函数
该函是数将输入的资料赋值给相映的数据
void people::addperson(int b,int a,long int t,char *na,char *dizhi,char *zhiwei)
{
kg=0;
bh=b;
strcpy(name,na);
strcpy(adr,dizhi);
strcpy(duty,zhiwei);
ID_num=a;
salary=t;
}
3、void pprintn()函数
该函数是输出所有员工的资料的函数在如查询、修改等功能模块中通过调用该函数可实现显示所有员工资料的功能
void pprintn()
{
if(Getkg()==0)
cout<<setw(10)<<bh<<setw(10)<<name<<setw(10)<<ID_num<<setw(10)<<duty<<setw(15)<<salary<<setw(15)<<adr<<endl;}
4、 people *query()函数
该函数实现的是将系统中的编号与输入的编号比较功能在新增、删除和修改模块中调用该函数可实现判断该员工是否已经存在而在查询模块在调用该函数可实现在已存在的记录中查找该成员的作用
people *query(int personid)
{
for(int i=0;i<=top;i++)
{
if(man[i].GetNo()==personid&&man[i].Getkg()==0)
{
return &man[i];in=i;}
}
return NULL;
}
5、people *qu()函数
该函数实现的是将系统中的姓名与输入的姓名比较功能在新增、删除和修改模块中调用该函数可实现判断该员工是否已经存在而在查询模块在调用该函数可实现在已存在的记录中查找该成员的作用
people *qw(char na[])
{
for(int i=0;i<=top;i++)
{
if(strcmp(man[i].GetName(),na)==0&&man[i].Getkg()==0)
{
return &man[i];in=i;
}
}
return NULL;
}
5、 void disp()函数
该函数在新增模块中使用,该函数通过循环判断输出所有员工资料
void disp()
{
for(int i=0;i<=top;i++)
{
if(man[i].Getkg()==0)
if(i%5==0)
cout<<endl;
man[i].pprintn();
}
}
6、 void disp2()函数
输出指定的单个员工的资料
void disp2()
{
cout<<endl;
man[in].pprintn();
}
7、void peopledata();函数
该函数为菜单函数,通过此函数进行相应的操作,首先按1键进入功能菜单界面,然后进行6种选择,6——退出;1——新增职工的信息(1、新建;2、增加);2——显示员工信息;3——查找员工信息(1、按姓名;2、按编号);4——修改员工信息(1、按姓名;2、按编号);5——删除员工信息(1、逐个删除2、全部删除);
void qiye::peopledata()//对qiye类的成员函数peopledata的类外声名
{
char choice='0';
char ch,peoplen[20],addr[40],dutyt[30];
int worherbh;
int m;
int k;
people *w;
while(choice!='6')
{
cout<<endl<<endl;
cout<<" ★★ 菜单 ★★"<<endl;
cout<<endl;
cout<<" 1:新增"<<endl;
cout<<" 2:显示"<<endl;
cout<<" 3:查找"<<endl;
cout<<" 4:修改"<<endl;
cout<<" 5:删除"<<endl;
cout<<" 6:退出"<<endl;
cout<<endl<<"请输入选择:";
loop_0:
cin>>choice;
if(choice=='6')
{
//clear();
break;
}
switch(choice)
{
case '1':
char ch1;
system("cls");
cout<<endl<<'\t'<<"★欢迎进入新增系统!★"<<endl<<endl;
cout<<"1.新建"<<endl<<endl;
cout<<"2.增加"<<endl<<endl;
cout<<endl<<"请输入选择:";
loop_1:
cin>>ch1;
if(ch1=='1')
{
char chi;
cout<<"<新建将删除原有记录>确定新建?(Y/N)"<<endl;
loop_1i:
cin>>chi;
switch(chi)
{
case 'Y'|'y':clear();
break;
case 'N'|'n':goto loop_1b;
default:cout<<"输入错误,请重新输入!"<<endl;
goto loop_1i;
}
}
if(ch1!='1'&&ch1!='2')
{
cout<<"输入错误,请重新输入!"<<endl;
goto loop_1;
}
do
{
do
{
cout<<endl<<"请输入员工编号:"<<endl;
cin>>worherbh;
w=query(worherbh);
if(w!=NULL)
cout<<"错误:该编号资料已存在,请重新输入。"<<endl;
}
while(w!=NULL);
cout<<"请输入员工姓名:"<<endl;
cin>>peoplen;
cout<<"身份证号:"<<endl;
cin>>m;
cout<<"职位:"<<endl;
cin>>dutyt;
cout<<"工资:"<<endl;
cin>>k;
cout<<"籍贯:"<<endl;
cin>>addr;
addperson(worherbh,m,k,peoplen,addr,dutyt);
cout<<"是否还要继续录入(Y/N)?";
cin>>ch;
}
while(ch=='y'||ch=='Y');
loop_1b:
break;
case '2':
cout<<endl<<setw(11)<<"所有员工资料:"<<endl<<endl;
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"身份证号"<<setw(10)<<"职位"<<setw(15)<<"工资"<<setw(15)<<"籍贯"<<endl;
disp();
cout<<endl;
break;
case '3':
char xz3;
char na[10];
do
{
cout<<endl;
system("cls");
cout<<'\t'<<"★欢迎进入查询系统!★"<<endl<<endl;
cout<<"1.按编号查找:"<<endl;
cout<<"2.按姓名查找:"<<endl;
cout<<"请输入相应的数字选择:"<<endl;
loop_3:
cin>>xz3;
switch(xz3)
{
case '1':
cout<<"请输员工编号:";
cin>>worherbh;
w=query(worherbh);
if(w==NULL)
{
cout<<"该员工不存在!"<<endl<<endl;
break;
}
cout<<endl<<setw(11)<<"所找员工资料:"<<endl<<endl;
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"身份证号"<<setw(10)<<"职位"<<setw(15)<<"工资"<<setw(15)<<"籍贯"<<endl;
w->pprintn();
cout<<endl;
break;
case '2':
cout<<"请输入姓名:";
cin>>na;
w=qu(na);
if(w==NULL)
{
cout<<"该员工不存在!"<<endl<<endl;
break;
}
cout<<endl<<setw(11)<<"所找员工资料:"<<endl<<endl;
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"身份证号"<<setw(10)<<"职位"<<setw(15)<<"工资"<<setw(15)<<"籍贯"<<endl;
w->pprintn();
cout<<endl;
break;
default:
{
cout<<"输入错误,请重新输入!"<<endl;
goto loop_3;
}
}
cout<<"是否还要继续查找(Y/N):"<<endl<<endl;
cin>>ch;
}
while(ch=='y'||ch=='Y');
break;
case '4':
char choice,peoplen[10];
do
{
cout<<endl;
system("cls");
cout<<'\t'<<"★欢迎进入修改系统!★"<<endl;
cout<<endl;
loop_4:
cout<<"1.按员工编号修改:"<<endl;
cout<<"2.按员工姓名修改:"<<endl;
cout<<"请输入数字选择:";
cin>>choice;
switch(choice)
{
case '1':
cout<<"输入员工编号:";
cin>>worherbh;
w=query(worherbh);
if(w==NULL)
{
cout<<"该员工资料不存在!"<<endl;
break;
}
man[in].printw();
w->pprintn();
w->deldate();
do
{
do
{
cout<<endl<<"请输入新员工编号:"<<endl;
cin>>worherbh;
w=query(worherbh);
if(w!=NULL)
cout<<"该编号资料已存在,请重新输入。"<<endl;
}
while(w!=NULL);
cout<<"请输入员工姓名:"<<endl;
cin>>peoplen;
cout<<"身份证号:"<<endl;
cin>>m;
cout<<"职位:"<<endl;
cin>>dutyt;
cout<<"工资:"<<endl;
cin>>k;
cout<<"籍贯:"<<endl;
cin>>addr;
addperson(worherbh,m,k,peoplen,addr,dutyt);
cout<<"是否还要继续更改(Y/N)?";
cin>>ch;
}
while(ch=='y'||ch=='Y');
break;
case '2':
cout<<"请输入员工姓名:";
cin>>peoplen;
w=qw(peoplen);
if(w==NULL)
{
cout<<"该员工资料不存在!"<<endl;
break;
}
man[in].printw();
w->pprintn();
w->deng();
do
{
do
{
cout<<endl<<"请输入员工新编号:"<<endl;
cin>>worherbh;
w=query(worherbh);
if(w!=NULL)
cout<<"该编号资料已存在,请重新输入."<<endl;
}
while(w!=NULL);
cout<<"请输入员工姓名:"<<endl;
cin>>peoplen;
cout<<"身份证号:"<<endl;
cin>>m;
cout<<"职位:"<<endl;
cin>>dutyt;
cout<<"工资:"<<endl;
cin>>k;
cout<<"籍贯:"<<endl;
cin>>addr;
addperson(worherbh,m,k,peoplen,addr,dutyt);
cout<<"是否还要继续更改(Y/N)?";
cin>>ch;
}
while(ch=='y'||ch=='Y');
default:
{
cout<<"输入错误,请重新输入!"<<endl;
goto loop_4;
}
}
cout<<"是否还要继续更改(Y/N)?";
cin>>ch;
cout<<endl;
}
while(ch=='y'||ch=='Y');
break;
case '5':
char xz5;
system("cls");
cout<<'\t'<<"★欢迎进入删除系统!★"<<endl;
cout<<"1.逐个删除."<<endl;
cout<<"2.全部删除."<<endl;
cout<<"请输入选择:"<<endl;
loop_5:
cin>>xz5;
switch(xz5)
{
case '1':
cout<<"输入员工编号:";
cin>>worherbh;
w=query(worherbh);
if(w==NULL)
{
cout<<"该员工资料不存在!"<<endl;
break;
}
w->deldate();
cout<<"删除成功"<<endl;
break;
case '2':
char xz52;
cout<<"确定删除(Y/N)?"<<endl;
loop_52:
cin>>xz52;
switch(xz52)
{
case 'Y'|'y':
cout<<"删除成功."<<endl;
clear();
break;
case 'N'|'n':
cout<<"不删除!"<<endl;
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
goto loop_52;
}
break;
default:
cout<<":输入错误,请重新输入!"<<endl;
goto loop_5;
}
break;
default:
{
cout<<"输入错误,请重新输入!"<<endl;
goto loop_0;
}
}
}
8、void jiemian1()函数
界面1,进入程序时输出
void jiemian1()
{
cout<<endl;
cout<<" ※※※欢迎使用人事管理系统※※※"<<endl<<endl;
cout<<endl;
cout<<" 请按1键进入系统"<<endl<<endl;
//cout<<" T:退出系统"<<endl<<endl;
cout<<"\n"<<"\n"<<"\n"<<"\n";
}
9、void jiemian3()函数
界面3,程序结束后输出
void jiemian3()
{
cout<<endl<<endl;
cout<<" 输入任意键退出";
do
{
exit(0);
}
while(1);
}
10、qiye()函数
qiye类的构造函数,将文件以输入的方式打开,用s给所有员工资料赋初值,并且实现关闭文件的作用
qiye::qiye() {
people s;
top=-1;
fstream file("people.dat",ios::in);
while(1)
{
file.read((char *)&s,sizeof(s));
if(!file)
break;
top++;
man[top]=s;
}
file.close();
}
11、~qiye()函数
qiye类的析构函数,作用:释放空间,并将数据存入文件中
~qiye()
{
fstream file("people.dat",ios::out);
for(int i=0;i<=top;i++)
if(man[i].Getkg()==0)
file.write((char *)&man[i],sizeof(man[i]));
file.close();
}
四、程序的运行结果及说明
1、运行程序后可如界面显示输入1后进入系统
2、进入系统可如图显示菜单界面可通过数字选择进行相应的操作,例如选择1进行公司人员信息的录入
3、按1进入新增系统后如图所示可选择1、新建2、增加,新建将删除原有记录
4、选择1确认新建再输入员工信息,如图所示
5、退出新建按2进入增加选项输入员工信息
6、退出增加,进入菜单界面,选择2,显示所有员工信息
五、课程设计总结
本次课设基本上满足了题目的要求,比如说修改及删除职工信息等功能都能实现,但从实验中我仍然发现了自己的许多不足之处,例如审题不清、逻辑混乱、程序可读性较差等问题。通过这次课设,不管是在动手能力还是在程序理解能力上我都得到了很大的提高,我很高兴可以学到如此多的知识,总的来说,这次课设对我来说还是相当成功的
六、附录
全部代码
#include "stdafx.h"
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<fstream.h>
#include <stdlib.h>
class people//员工类
{
char name[5];
int kg;
int bh;
int salary;
int ID_num;
char adr[15];
char duty[10];
public:
people()
{
}
char *GetName()
{
return name;
}
int Getkg()
{
return kg;
}
int GetNo()
{
return bh;
}
int Getsalary()
{
return salary;
}
int GetID_num()
{
return ID_num;
}
char *GetAdr()
{
return adr;
}
char *Getduty()
{
return duty;
}
void SetNum(int num)
{
bh=num;
}
void SetID_num(int pxid)
{
pxid=ID_num;
}
void SetName(char na[])
{
strcpy(name,na);
}
void SetAdr(char dizhi[])
{
strcpy(adr,dizhi);
}
void Setduty(char zhiwei[])
{
strcpy(duty,zhiwei);
}
void deldate()
{
kg=1;
}
void addperson(int b,int a,long int t,char *na,char *dizhi,char *zhiwei);
void printw()
{
cout<<setw(10)<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"身份证号"<<setw(10)<<"职位"<<setw(15)<<"工资"<<setw(15)<<"籍贯"<<endl;
}
void pprintn()
{
if(Getkg()==0)
cout<<setw(10)<<bh<<setw(10)<<name<<setw(10)<<ID_num<<setw(10)<<duty<<setw(15)<<salary<<setw(15)<<adr<<endl;
}
};
void people::addperson(int b,int a,long int t,char *na,char *dizhi,char *zhiwei)
{
kg=0;
bh=b;
strcpy(name,na);
strcpy(adr,dizhi);
strcpy(duty,zhiwei);
ID_num=a;
salary=t;
}
class qiye// qiye类
{
int top,in;
people man[1000];
public:
qiye();
void clear()
{
top=-1;
}
int addperson(int n,int m,int k,char *na,char *dizhi,char *zhiwei)
{
people *p=query(n),*q=query(m),*j=query(k);
if(p==NULL)
{
top++;
man[top].addperson(n,m,k,na,dizhi,zhiwei);
return 1;
}
return 0;
}
people *query(int personid)
{
for(int i=0;i<=top;i++)
{
if(man[i].GetNo()==personid&&man[i].Getkg()==0)
{
return &man[i];in=i;}
}
return NULL;
}
people *qu(char na[])
{
for(int i=0;i<=top;i++)
{
if(strcmp(man[i].GetName(),na)==0&&man[i].Getkg()==0)
{
return &man[i];in=i;
}
}
return NULL;
}
people *qw(char na[])
{
for(int i=0;i<=top;i++)
{
if(strcmp(man[i].GetName(),na)==0&&man[i].Getkg()==0)
{
return &man[i];in=i;
}
}
return NULL;
}
people *pq(int qxid)
{
for(int i=0;i<=top;i++)
{
if(man[i].GetID_num()==qxid&&man[i].Getkg()==0)
{
cout<<endl;
man[i].pprintn();
}
}
return NULL;
}
people *qp(char zhiwei
展开阅读全文