南京航空航天大学《面向对象程序设计语言》课程设计报告人事管理系统学号: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();//获得idchar*gettelephone();//获得电话号码Dategetbirthday();//获得生日char*getnumber();//获得工作证号char*getname(){returnname;}//获得姓名char*getsex(){returnsex;}//获得性别char*getid(){returnid;}//获得idchar*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);}//设置idvoidsetnumber(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比较姓名,如果姓名相同就通过调用运算符重载函数输出次员工的信息。八、存在的不足与对策这个人事管理系统的开发的面对的对象是公司人事管理部门,然而系统面对对象的局限性也决定了系统在投入使用时的缺陷,及系统不仅仅应该仅仅用于公司的部门,还应该开发面向员工的系统,这样不同职务的员工可以及时掌握公司的员工信息,方便对下级员工的调度及时。解决的就是运行程序时确定是员工还是管理部门,然后分别进入不同的系统,而员工系统的编写则与管理部门系统大体相同。本程序实现的功能不是很多,仅仅设立了通过姓名来查找,缺少了像通过管理部门或者其他方面来查找。另外系统的开发使用的过程中要不断地为维护,而对于这一点我将在以后的学习中对系统作出不断地改进。九、编程体会这是我第一次做课设,以前都是写了一些小的程序,总感觉还不是很难,虽然写的时候有些问题,但是最终都可以解决,并且还可以理解。但