课程设计之人事管理系统.docx
《课程设计之人事管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计之人事管理系统.docx(27页珍藏版)》请在冰豆网上搜索。
课程设计之人事管理系统
南京航空航天大学
《面向对象程序设计语言》课程设计报告
人事管理系统
学号:
040830307
姓名:
曾雪峰
日期:
2009-4-5
一、需求分析:
二、程序的主要功能:
三、程序运行平台:
四、系统总框架图
五、程序类的说明:
六、模块分析
七、比较有特色的函数
八、存在的不足与对策
九、编程体会
十、程序源代码
一、需求分析
开发这个人事管理系统是为了实现公司员工的管理,一个公司会有很多
员工,管理和储存这些员工的资料信息就需要耗费一定的人力,而开发这个
系统是为了一方面可以减少工作员工的数量降低成本,从而大大提高了工作
效率,同时又方便了员工信息的管理。
使得公司对员工信息的管理更加方便
快捷。
系统主要实现员工基本信息的添加,删除,修改,查找,显示和修改等____________________________________________________________________________________________________________________________基本功能
二、程序的主要功能
1、添加功能:
可以完成员工的添加,可以添加员工的基本信息,包括员工的姓名,性别,生日,工作证号,职务,薪水,工作部门,电话号码和地址等信息。
2、删除功能
可以根据员工的姓名删除员工信息,删除的时候根据用户输入的姓名查找到需要删除的员工的信息,并将员工的信息删除。
3、显示功能:
可以将所有员工的基本信息显示出来
4、查找功能:
根据用户输入的姓名查找所需的员工的信息,并将其信息输出在屏幕上面。
5、修改功能:
根据员工的姓名查找的需要修改的员工的信息,并将其信息输出出来,输入修改后的员工的信息,就可以完成对员工数据的修改。
6退出功能
用户在完成操作之后可退出系统,此时系统将把新的信息存入文件并退出
三、程序运行平台
该程序是用VC++6.0制做的,使用MicrosoftVisualC++6.0运行该程序,具体操作是:
打开MicrosoftVisualC++6.0,菜单栏里点文件→打开工作区→找到“人事管理系统.dsw”这个文件→打开,或者在资源管理器中双击该文件,此时,VC++6.0会自动打开,并载入该系统相关资源,点击Run命令菜单或者或用快捷键Ctrl+F5运行该程序。
四、系统总框架图
五、程序类的说明
∙Date类的声明
classDate
{
Public:
Date(inty=0,intm=0,intd=0):
day(d),month(m),year(y){}//Date类的构造函数
friendistream&operator>>(istream&in,Date&da)//重载"》"
friendostream&operator<<(ostream&out,Date&da)//重载"《"
voidoperator=(Date&d2)//重载"="
private:
intyear;
intmonth;
intday;
};
∙people类的声明
classpeople
{
public:
people(){};//people类的构造函数
friendostream&operator<<(ostream&out,peoplep);//重载“〈〈”
friendistream&operator>>(istream&in,people&p);//重载“〈〈”
voidset(people*p1);//people类的设置函数
char*getname();//获得姓名
char*getsex();//获得性别
char*getid();//获得id
char*gettelephone();//获得电话号码
Dategetbirthday();//获得生日
char*getnumber();//获得工作证号
char*getname(){returnname;}//获得姓名
char*getsex(){returnsex;}//获得性别
char*getid(){returnid;}//获得id
char*gettelephone(){returntelephone;}//获得电话号码
Dategetbirthday(){returnbirthday;}//获得生日
char*getnumber(){returnnumber;}//获得工作证号
voidsetname(charname1[20]){strcpy(name,name1);}//设置姓名
voidsetsex(charsex1[5]){strcpy(sex,sex1);}//设置性别
voidsetid(charid1[20]){strcpy(id,id1);}//设置id
voidsetnumber(charnumber1[20]){strcpy(number,number1);}//设置工作证号
voidsetaddress(charaddress1[20]){strcpy(address,address1);}//设置家庭地址
voidsettelephone(chartelephone1[20]){strcpy(telephone,telephone1);}//设置电话号码
voidsetbirthday(Datebirthday1){birthday=birthday1;}//设置出生日期
voidsetsalary(charsalary1[20]){strcpy(salary,salary1);}//设置薪水
voidsetpost(charpost1[20]){strcpy(post,post1);}//设置职务
voidsetdepartment(chardepartment1[20]){strcpy(department,department1);}//设置工作部门
friendclassList;
protected:
charname[20];//姓名
charsex[5];//性别
charid[20];//身份证号
chartelephone[10];//电话号码
Datebirthday;//出生日期
charnumber[20];//工作证号
charaddress[100];//家庭地址
charsalary[10];//薪水
charpost[20];//职务
chardepartment[30];//工作部门
public:
people*next;//下一个节点
};
∙List类的声明
classList
{
people*phead;//链表头
public:
List(){phead=0;}//List类的构造函数
~List(){DeleteList();}//List类的析构函数
voidAddNode(people*pnode);//插入到链表头
people*DeleteNode(people*);//从链表中删除
people*LookUp(people&);//查找结点
voidShowList();//显示链表
people*GetListHead(){returnphead;}//返回链表头
people*GetListNextNode(people*pnode);//返回下一结点
};
∙Peoplelist类的声明
classpeoplelist:
publicpeople
{
public:
peoplelist();//peoplelist类的构造函数
voidadd();//添加函数
voiddisplay();//显示函数
voidfind();//查找函数
voidmodify();//修改函数
voidremove();//删除函数
intjudge(charnamekey[8]);//,密码的判断函数
voidLoad();//登陆函数
private:
people*phead;//链表头
}
类功能的简单说明:
系统共建立了四个类,其中Date是生日类,类中声明提取运算符重载的函数为友员函数,用来执行生日的输入和输出工作,people类是员工类,类的数据成员是员工的各种信息,并包含data类的成员实现了类的组合,people同样声明了提取运算符重载的函数为友员函数用来完成,list是链表类,链表的思路是从头结点开始建,每当新增加一个类节点时,就把新增结点加到链表首部,并用链表完成节点的查找删除等功能。
Peoplelist类是people类的派生,类中的函数通过调用list类中的函数实现各种功能
六、模块分析
1.添加模块
用户根据系统的提示输入员工的信息,系统将新添加的员工的信息插入链表。
2.显示模块
显示模块的功能是将所有员工的信息输出。
3.修改模块
在修改模块用户先输入需要修改的员工的姓名,然后系统会根据用户输入的姓名查找到需要修改的员工并将找到的员工的信息输出来,然后系统提示用户输入修改后的员工的信息,系统就会将原有的信息修改。
4.查找模块
用户输入要查找的员工姓名,系统调用查找函数根据其输入的信息查找此员工,查找到该员工就将员工的信息输出在屏幕上,查找不到就输出找不到该员工。
并且有些有效性的检验。
5.删除模块
用户输入要删除的员工姓名,系统调用删除函数根据输入的姓名查找需要删除的员工,然后将此员工的信息从资料中删除
七、比较有特色的函数
1.重载友元函数.
friendostream&operator<<(ostream&out,peoplep);//重载“<<”
friendistream&operator>>(istream&in,people&p);//重载“>>”
说明:
在类people中声明了重载流提取运算符的函数为友元函数,用来完成员工信息的输入和输出:
2类的组合.
People类的成员中包含Data类的对象,在people类的重载友元函数中调用了Data类的重载友元函数实现流体去运算符对people类的输入和输出功能.
3友元类
程序中的链表类即List类被声明为people类的友元类,并在List类的私有成员中定义了people类的头指针,然后通过的链表的操作完成添加,删除等各项功能。
4类的派生
程序的peoplelist类是people类的派生,通过调用链表类的函数完成添加员工信息,删除员工信息等操作。
5List类的析构函数
~List(){DeleteList();}
说明:
程序结束是系统将自动调用List类的析构函数,调用时函数首先完成链表的清空,最后进行对象撤销后的清理工作。
6查找函数
voidpeoplelist:
:
find(List&TelList)
说明:
peoplelist类的成员函数,通过调用List类的函数遍历链表,并用strcmp比较姓名,如果姓名相同就通过调用运算符重载函数输出次员工的信息。
八、存在的不足与对策
这个人事管理系统的开发的面对的对象是公司人事管理部门,然而系统面对对象的局限性也决定了系统在投入使用时的缺陷,及系统不仅仅应该仅仅用于公司的部门,还应该开发面向员工的系统,这样不同职务的员工可以及时掌握公司的员工信息,方便对下级员工的调度及时。
解决的就是运行程序时确定是员工还是管理部门,然后分别进入不同的系统,而员工系统的编写则与管理部门系统大体相同。
本程序实现的功能不是很多,仅仅设立了通过姓名来查找,缺少了像通过管理部门或者其他方面来查找。
另外系统的开发使用的过程中要不断地为维护,而对于这一点我将在以后的学习中对系统作出不断地改进。
九、编程体会
这是我第一次做课设,以前都是写了一些小的程序,总感觉还不是很难,虽然写的时候有些问题,但是最终都可以解决,并且还可以理解。
但做课设时让自己感觉到了从来没有的自卑,感觉啥也不会了,很多东西无法有效地联结起来,并且我们不得不运用文件,类以及类的高级部分等新学的知识,更增加了作业的难度。
而且在在运用链表等上学期的知识时更是问题百出,我不得不请教同学,不断地看书本来解决那些问题。
这次做课设让我知道了自己的不足,帮助我找到了自己在哪些方面不是很理解,同时也让自己树立了在以后的日子里奋斗了目标。
十、程序源代码
List.h
#include"people.h"
classList
{people*phead;
public:
List(){phead=0;}//构造函数
~List(){DeleteList();}
voidAddNode(people*pnode);//添加新员工信息
people*DeleteNode(people*);
people*LookUp(people&);
voidShowList();//显示员工信息
voidDeleteList();//删除员工信息
people*GetListHead(){returnphead;}
people*GetListNextNode(people*pnode);
};
List.cpp
#include"List.h"
voidList:
:
AddNode(people*pnode)//在首部添加结点
{
if(phead==0)
{
phead=pnode;
pnode->next=0;
return;
}
else
{
pnode->next=phead;
phead=pnode;
}
}
people*List:
:
DeleteNode(people*pnode)
{
people*p1,*p2;
p1=phead;
while(p1!
=pnode&&p1->next!
=0)
{
p2=p1;
p1=p1->next;
}
if(p1=phead)
{
phead=phead->next;
returnpnode;
}
else
{
p2->next=p1->next;
returnpnode;
}
}
people*List:
:
LookUp(people&pnode)
{
people*p1=phead;
while(p1!
=NULL)
{
if(strcmp(p1->name,pnode.name)==0)
returnp1;
p1=p1->next;
}
return0;
}
voidList:
:
ShowList()
{
people*p1=phead;
while(p1)
{
cout<<(*p1);
p1=p1->next;
}
}
voidList:
:
DeleteList()
{
people*p1,*p2;
p1=phead;
while(p1)
{
p2=p1;
p1=p1->next;
deletep2;
}
}
people*List:
:
GetListNextNode(people*pnode)
{
people*p1=pnode;
returnp1->next;
}
Date.h
#include
usingnamespacestd;
classDate//Date类的声明
{
public:
Date(inty=0,intm=0,intd=0):
day(d),month(m),year(y){}//Date类的构造函数
friendistream&operator>>(istream&filein,Date&da)
{
cout<<"出生日期:
"<"<<"\nyear:
";
filein>>da.year;
cout<<"month:
";
filein>>da.month;
cout<<"day:
";
filein>>da.day;
returnfilein;
}
friendostream&operator<<(ostream&fileout,Date&da)//在这个类里分别重载了《,》,=,体现了类的多态性
{
fileout<<"year:
"<fileout<<"month:
"<fileout<<"day:
"<returnfileout;
}
voidoperator=(Date&d2)
{
this->year=d2.year;
this->month=d2.month;
this->day=d2.day;
}
private:
intyear;
intmonth;
intday;
};
People.h
#include"Date.h"
classpeople
{
public:
people(){}//people类的构造函数
friendostream&operator<<(ostream&out,people&p)//重载"《"
{
out<<"员工的信息:
"<<"\n姓名:
"<
out<<"性别:
"<
out<<"出生日期:
"<
out<<"\t身份证号:
"<
out<<"\t工作证号:
"<
out<<"\t家庭地址:
"<
out<<"\t电话号码:
"<
out<<"\t工作部门:
"<
out<<"\t职务:
"<
out<<"\t薪水:
"<
returnout;
}
friendistream&operator>>(istream&filein,people&p)//重载"》"
{
cout<<"员工的信息:
"<<"\n姓名:
";
filein>>p.name;
cout<<"性别:
";
filein>>p.sex;
cout<<"出生日期:
";
filein>>p.birthday;
cout<<"身份证号:
";
filein>>p.id;
cout<<"工作证号:
";
filein>>p.number;
cout<<"家庭地址:
";
filein>>p.address;
cout<<"工作部门:
";
filein>>p.department;
cout<<"职务:
";
filein>>p.post;
cout<<"薪水:
";
filein>>p.salary;
cout<<"电话号码:
";
filein>>p.telephone;
returnfilein;
}
voidset(people*p1);//people类的设置函数
char*getname(){returnname;}//获得姓名
char*getsex(){returnsex;}//获得性别
char*getid(){returnid;}//获得id
char*gettelephone(){returntelephone;}//获得电话号码
Dategetbirthday(){returnbirthday;}//获得生日
char*getnumber(){returnnumber;}//获得工作证号
voidsetname(charname1[20]){strcpy(name,name1);}//设置姓名
voidsetsex(charsex1[5]){strcpy(sex,sex1);}//设置性别
voidsetid(charid1[20]){strcpy(id,id1);}//设置id
voidsetnumber(charnumber1[20]){strcpy(number,number1);}//设置工作证号
voidsetaddress(charaddress1[20]){strcpy(address,address1);}//设置家庭地址
voidsettelephone(chartelephone1[20]){strcpy(telephone,telephone1);}//设置电话号码
voidsetbirthday(Datebirthday1){birthday=birthday1;}//设置出生日期
voidsetsalary(charsalary1[20]){strcpy(salary,salary1);}//设置薪水
voidsetpost(charpost1[20]){strcpy(post,post1);}//设置职务
voidsetdepartment(chardepartment1[20]){strcpy(department,department1);}//设置工作部门
friendclassList;
charname[20];//姓名
charsex[5];//性别
charid[20];//身份证号
chartelephone[20];//电话号码
Datebirthday;//出生日期
charnumber[20];//工作证号
charaddress[20];//家庭地址
charsalary[20];//薪水
charpost[20];//职务
chardepartment