9512.net
甜梦文库
当前位置:首页 >> IT/计算机 >>

人事档案管理 课程设计


中国矿业大学银川学院
面向对象程序设计课程设计报告
(2011/2012 学年第二学期) 题目名称 系 专 班 学 学 部 业 级 生 号 人事档案管理 机电动力与信息工程系 计算机科学与技术(工业控制) 10 级计算机班 xxx 120100510009 2012 年 6 月 19 日

完成时间

指导老师

xxx






言 ................................................. 3

1. 课程设计目的与意义 ................................... 4
1.1 设计目的与任务 .............................................. 1.1.1 本课程设计的目的 ...................................... 1.1.2 本课程设计的任务 ...................................... 1.2 选题背景 ................................................... 1.2.1 选题 .................................................. 1.2.2 开发环境 .............................................. 4 4 4 4 4 4

2. 详细设计 ............................................. 5
2.1 需求描述 .................................................... 5 2.2 功能描述 .................................................... 5 2.3 程序运行说明 ............................................... 6 2.3.1 总体设计 .............................................. 6 2.3.2 界面设计 .............................................. 6 2.3.3 设计内容 .............................................. 6 2.3.4 程序运行具体说明 ..................................... 21

3. 课程设计总结 ........................................ 28
3.1 编程日志 ................................................... 28 3.2 测试报告 ................................................. 29

4. 心得体会 ............................................ 30 5 参考文献 ............................................ 31

第 2





42







随着人们生活水平的提高,计算机发展异常迅速。如今,计算机已经深入到我们 社会的各个领域,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领 域并发挥着越来越重要的作用。通过计算机对各类问题求解已经成为一种高效、快捷的 方式。 《面向对象程序设计》课程设计是实践性教学环节之一,是《面向对象程序设计》 课程的辅助教学课程。该课程设计要求学生综合运用在《面向对象程序设计》课程中学 到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的 课程设计任务,同时加深学生对面向对象和 C++编程技术的理解和掌握,培养实际的应 用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握 C++应 用程序的设计开发过程和编程方法、测试方法。 本课程设计题目为《人事档案管理》 ,信息时代的到来和全社会信息化、网络化建 设的兴起,使得传统的人员档案管理系统和操作方法越来越不能满足用户的需要,智能 化、网络化、信息化的人事档案管理系统应用势在必行。 人事档案管理主要解决在一个小型企业中,进行公司内部人员的分配,调整和更新 的程序设计。企业人事档案管理是企业管理的一个重要内容,随着时代的进步,企业也 逐渐变得庞大起来。 如何管理好企业内部员工的信息, 成为企业管理中的一个大的问题。 在这种情况下,一个可以规范化、自动化的企业人事管理系统就显得非常必要。 最初的人事档案管理,都是靠人力来完成的。当企业规模比较小的时候,人力可以 完成,随着企业的规模越来越大,企业的员工人数也越来越多,依然维持着人力进行人 事管理,必然会造成工作效率低,工作错误增高的问题。 人事档案管理系统就是把分散的企事业单位的职工信息实行统一、集中、规范的收 集管理,建立分类编号管理、电脑存储查询以及防火、防潮、防蛀、防盗等现代化、专 业化的管理系统,为企事业单位和职工解除后顾之忧。

第 3





42



1. 课程设计目的与意义
1.1 设计目的与任务
1.1.1 本课程设计的目的 1)通过课程设计更进一步理解 C++的基础知识和面向对象的思想。 2)训练用系统的观点和软件开发一般规范进行软件开发,并在此过程中培养严谨 的科学态度和良好的工作作风。初步掌握软件开发过程的问题分析、系统设计、程序编 码、测试等基本方法和技能。 3)熟练掌握 C++中类及类模板在程序中的应用,并熟练了解类中函数的调用。 1.1.2 本课程设计的任务 使用类实现编写一个人事档案管理系统 ,能够实现员工信息增加、删除、修改、 查找、清空、统计,信息的输入输出能够重载输入与输出操作符,并且要求有错误提示 功能,例如输入日期,输入错误提示重新输入。

1.2 选题背景
1.2.1 选题 人员档案管理系统是一个典型的信息管理系统, 本系统是一个为适应当前各个行业 对人员档案管理的迫切需求而设计开发的系统。系统分为添加、查找、显示、删除、显 示、清空、统计以及主函数等几大模块,其中各模块分别实现预定的功能。 1.2.2 开发环境 编程工具: C-Free 5.0 机型:lenovo 操作系统: Microsoft Windows

XP Professional

第 4





42



2. 详细设计
2.1 需求描述
人事档案管理系统是针对人事处的大量业务处理工作用计算机进行全面现代化管 理,主要包括人员基本情况管理,提供人员基本信息的添加、查询、显示、删除、清空、 统计等几个方面的功能,以实现用户方便的输入、查询、统计、打印相关报表的业务需 求。 2.2.1.1 系统管理 系统启动的时候有一个管理员用户,使用这个用户登陆以后,可以添加其他用户, 而且每个用户都可以更改自己的密码。 1)登陆系统 2)用户设置:设置用户密码,只有管理员才能创建修改删除其他用户。 3)退出系统 2.2.1.2 人事档案管理 添加员工信息:对新增员工的基本信息的输入,包括编号,姓名,性别,年龄,职 位,地址,手机号,民族,政治面貌,婚姻状况,毕业院校,身份证号,邮箱,聘用时 间和记录时间。 之后可以对员工信息进行删除、浏览、继续添加、清空、统计等操作。

2.2 功能描述
人事档案管理系统主要包含职工个人自然情况,工作情况,简历,政治情况等各方 面信息。同时还综合考虑档案管理工作的性质,总结归纳出所需实现的功能。主要是为 人事档案进行服务,对人事的变动、人事资料、以及人事资料的查询,统计等功能。 总体上说具有编辑,查询,用户管理等功能。 (1)灵活的数据记录编辑功能,可以随时对记录进行增加,修改,更新,删除,浏 览等编辑操作。并将查询方式有机溶入编辑界面,可以实现对某项记录定位,再进行编 辑,修改,更新。 (2)具备分级用户权限管理设置,以确保档案的保密性和安全性。 (3)具有比较友好的人机交互界面,各种操作可以在电脑上直观的界面上通过人机 交互式进行。
第 5 页 共 42 页

2.3 程序运行说明
2.3.1 总体设计 (1)定义员工(Person)类,其中包括编号,姓名,年龄,职位( “经理”“管理 、 员”“员工” 、 ),地址,手机号,民族,政治面貌( “群众”“团员”“党员” 、 、 ),婚姻 状况(“已婚”、“未婚”),毕业院校,身份证号,邮箱,聘用时间和记录时间。 (2)实现下面的功能 a、设计菜单实现功能选择; b、输入功能:输入员工的信息,并保存到文件中; c、删除资料:能够根据编号删除员工的资料; d、查询功能:能够根据编号来查看员工的资料; e、统计功能:能够统计在职人员、中共党员、女教职工、高职称、高学历的人 数。 f、错误提示功能:如果输入的资料不合法,将会提示错误,并给予指导。 2.3.2 界面设计 在用户界面部分,根据需求分析结果,用户需要一个友善界面。在界面设计上,应 做到简单明了, 易于操作, 并且要注意到界面的布局, 应突出的显示重要以及出错信息。 在界面设计部分,本系统为用户提供友好、方便、直观、简洁的操作环境,并且采用柔 和的绿色做底色。可供用户选择的项目主要有:添加,显示,查找,删除,清空等。

2.3.3 设计内容 (1)实现功能 系统主要包括人员档案的添加、显示、查询、删除、清空等功能。负责人员只需进 入该系统就可以在信息化条件下实现人员档案的添加、显示、查询、删除、清空等工作。 (2)概要设计(涉及类的框图) Person 类

第 6





42



protected: char num[10];//编号 char name[20];//姓名 char sex[10];//性别 char age[10];//年龄 char position[20];//职位 char address[100];//地址 char tel[30];//手机号 char nation[10];//民族 char political_status[10];//政治面貌 char marital_status[10];//婚姻状况 char school[50];//毕业院校 char identity[50];//身份证号 char email[20];//邮箱 char engage_time[30];//聘用时间 char add_time[30];//记录时间 public: 公共函数声明 void add_person(int&); //新增通讯成员 bool searchnum(); //按编号查找 bool searchname(); //按姓名查找 void delnum(int&); //按编号删除 void delname(int&); //按姓名删除 void showall(); //统计成员数

符号

名称

说明

实体

数据的源点/终点

输入/输出

表示输入或输出的报表

处理

能改变数据值或数据位置的加工或部件

数据流

用来连接其他符号,指明数据流动方向

存储
第 7 页 共 42

表示任何种类的联机存储


输入信息

人员 档案

存储信息

调用信息

编号、姓名、性别、 年龄、职位、住址、 民族、政治面貌、婚 姻状况、毕业学校、 身份证号、手机号、 邮箱、聘用时间、记录 时间

(3) 流程图: <1>Person::add()

<2>Person::delete()

第 8





42



<3>Person::change()

第 9





42



<4>.Person::find()

(4)程序注释与说明 /*人事档案管理系统*/ #include<iostream> #include<fstream> #include<string> using namespace std; class person //定义通讯成员类 { public: char num[20];//编号 char name[30];//姓名 char sex[20];//性别 char age[20];//年龄 char position[20];//职位 char address[500];//地址 char tel[100];//手机号 char nation[30];//民族 char political_status[20];//政治面貌 char marital_status[20];//婚姻状况 char school[200];//毕业院校 char identity[500];//身份证号 char email[20];//邮箱 char engage_time[100];//聘用时间 char add_time[100];//记录时间
第 10 页 共 42 页

public: //对其成员函数的声明 void add_person(int&); //新增通讯成员 bool searchnum(); //按编号查找 bool searchname(); //按姓名查找 void delnum(int&); //按编号删除 void delname(int&); //按姓名删除 void showall(); //统计职员数 void get_i(); //读取数据文件职员数 friend ostream &operator<<(ostream& out,person& pe);//重载运算符"<<" }; ostream &operator<<(ostream& out,person& pe)//定义重载运算符"<<",从而直接输 出类对象 { out<<"编号: "<<pe.num<<endl; out<<"姓名: "<<pe.name<<endl; out<<"性别: "<<pe.sex<<endl; out<<"年龄: "<<pe.age<<endl; out<<"职位: "<<pe.position<<endl; out<<"手机号: "<<pe.tel<<endl; out<<"民族: "<<pe.nation<<endl; out<<"政治面貌: "<<pe.political_status<<endl; out<<"婚姻状况:"<<pe.marital_status<<endl; out<<"毕业院校:"<<pe.school<<endl; out<<"身份证号:"<<pe.identity<<endl; out<<"邮箱: "<<pe.email<<endl; out<<"聘用时间: "<<pe.engage_time<<endl; out<<"记录时间:"<<pe.add_time<<endl; return out; } int i=0; //定义全局变量,用于记录人事档案管理系统中的职员数

void person::get_i() { ifstream file("test.dat",ios::binary|ios::in);//打开用于读的 binary 文件 if(!file) { ofstream outfile("test.dat",ios::app|ios::binary);//打开"test.dat"文 件,并将指针指向文件尾 if(!outfile) {
第 11 页 共 42 页

cerr<<"test.dat 文件打开错误!"<<endl; return; } return; } file.read((char*)(this),sizeof(*this));//读取一个类对象数据放入*this 中 while(!file.eof()) { i++;//每调用一次该函数,职员总数增加 1 file.read((char*)(this),sizeof(*this));// 再 读 取 一 个类 对 象 数 据 放 入 *this 中 } file.close(); }

void person::add_person(int& i)//增加人事档案中职员信息函数 { string choice="Y"; while(choice=="Y"||choice=="y") { cout<<"-----新建人事档案职员信息-----"<<endl; cout<<"请输入职员的的编号: (1000-9999)"<<endl; cin>>num; cout<<"请输入职员姓名:"<<endl; cin>>name; cout<<"请输入性别:"<<endl; cin>>sex; while((string)sex!="男"&&(string)sex!="女") { cout<<"您输入的性别有误,请核对后再输入:"<<endl; cin>>sex; } cout<<"请输入年龄:"<<endl; cin>>age; cout<<"请输入该职员的职位: (经理,管理员,员工)"<<endl; cin>>position; while((string)position!=" 经 理 "&&(string)position!=" 管 理 员 "&&(string)position!="员工") { cout<<"您输入的职工职位有误,请核对后再输入:"<<endl; cin>>position; } cout<<"请输入该职员的家庭地址:"<<endl;
第 12 页 共 42 页

cin>>address; cout<<"请输入该职员的民族:"<<endl; cin>>nation; cout<<"请输入职员的政治面貌:(群众,团员,党员)"<<endl; cin>>political_status; while((string)political_status!=" 群众"&&(string)political_status!=" 团员"&&(string)political_status!="党员") { cout<<"您输入的职工政治面貌有误,请核对后再输入:"<<endl; cin>>political_status; } cout<<"请输入职员的婚姻状况(未婚,已婚)"<<endl; cin>>marital_status; while((string)marital_status!="未婚"&&(string)marital_status!="已婚 ") { cout<<"您输入的职工的婚姻状况有误,请核对后再输入:"<<endl; cin>>marital_status; } cout<<"请输入职员的毕业学校:"<<endl; cin>>school; cout<<"请输入职员的身份证号:"<<endl; cin>>identity; cout<<"请输入职员的手机号:"<<endl; cin>>tel; cout<<"请输入职员的邮箱:"<<endl; cin>>email; cout<<"请输入职员的聘用时间:"<<endl; cin>>engage_time; cout<<"请输入此次记录的添加时间:"<<endl; cin>>add_time; cout<<endl; ofstream outfile("test.dat",ios::app|ios::binary);//打开"test.dat"文 件,并将指针指向文件尾 if(!outfile) { cerr<<"test.dat 文件打开错误!"<<endl; return; } outfile.write((char*)(this),sizeof(*this));//将所输入的信息追加到文件尾 部 outfile.close(); cout<<"信息建立成功!"<<endl; i++; //每调用一次该函数,职员总数增加 1
第 13 页 共 42 页

cout<<"您还想继续添加吗?(y/n)"<<endl; cin>>choice; while(choice!="Y"&&choice!="y"&&choice!="N"&&choice!="n") { cout<<"请按要求键入(y/n)"<<endl; cin>>choice; } if(choice=="N"||choice=="n") { outfile.close(); break; } } }

void person::showall()//定义显示人事档案管理系统中所有职员信息的函数 { if(i==0)//人事管理系统中无此职员,请先增加职员信息信息 cout<<"人事管理系统数据为空,请先增加职员信息!"<<endl; else { ifstream infile("test.dat",ios::binary);//打开用于读的 binary 文件 infile.read((char*)(this),sizeof(*this));//读取一个类对象数据放入 *this 中 cout<<"所有职员的信息如下:"<<endl; while(!infile.eof())//沿未到达文件尾,继续处理 { cout<<(*this);//输出当前对象的各数据成员 cout<<"*******************************"<<endl; infile.read((char*)(this),sizeof(*this));//再读取一个类对象数据放入 *this 中 } infile.close(); } }

bool person::searchnum()//定义按编号查找职工信息函数 { char number[10]; cout<<"-----按编号查找信息-----"<<endl;
第 14 页 共 42 页

cout<<"请输入要检索的编号: (1000-9999)"<<endl; cin>>number; ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this));//读取一个类对象数据,放入*this 中 while(!infile.eof()) { if(strcmp(num,number)==0) { cout<<"该编号的职工信息如下:"<<endl; cout<<(*this)<<endl; infile.close(); return true; } infile.read((char*)(this),sizeof(*this));//文件指针没到达文件尾, 循环读取 数据 } infile.close(); cout<<"对不起,没有该编号的职工信息!"<<endl; return false; } bool person::searchname()//定义按姓名查找信息函数 { char na[20]; cout<<"-----按姓名查找信息!-----"<<endl; cout<<"请输入要检索的职工姓名:"<<endl; cin>>na; ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this));//打开文件,读取数据 while(!infile.eof()) { if(strcmp(name,na)==0) { cout<<"该职工的个人信息如下:"<<endl; cout<<(*this); infile.close(); return true; } infile.read((char*)(this),sizeof(*this));//文件指针未到文件尾, 循环读 取数据 } infile.close(); cout<<"对不起,没有您所要检索的职工信息!"<<endl;
第 15 页 共 42 页

return false; }

void person::delnum(int& i)//定义按编号删除信息函数 { char b; int delmark=0; //用于标记该编号信息是否已找到 char delnumber[10]; cout<<"-----按编号删除个人信息-----"<<endl; cout<<"请输入要删除的编号:"<<endl; cin>>delnumber; ofstream outfile("tmp.dat",ios::binary);// 打 开 用 于 写 的 二 进 制 文 件 "tmp.dat" ifstream infile("test.dat",ios::binary);// 打 开 用 于 读 的 二 进 制 文 件 "test.dat" infile.read((char*)(this),sizeof(*this));//从"test.dat"中读取一个类对象 数据放入*this 中 while(!infile.eof()) { if(strcmp(num,delnumber)==0) { cout<<"该编号的个人信息如下:"<<endl; cout<<(*this); cout<<endl<<"你确定要删除该编号的信息?y/n"<<endl; cin>>b; if(b=='y'||b=='Y') { delmark=1; //将删除标记置为 1,表示已删除信息 i--; //确定删除信息,人事档案管理系统中成员总数减 1 cout<<"信息已删除!"<<endl; } else delmark=-1; } else outfile.write((char*)(this),sizeof(*this));// 将 读 得 的 数 据 写 入 "tmp.dat" infile.read((char*)(this),sizeof(*this));//再次读取一个类对象数据, 放 于*this 中 } infile.close(); outfile.close(); if(delmark==1)//若找到了删除对象,就用"tmp.dta"文件内容去充当"test.dat"
第 16 页 共 42 页

{ ofstream outfile("test.dat",ios::binary);// 打 开 用 于 写 的 二 进 制 文 件 "test.dat" ifstream infile("tmp.dat",ios::binary);// 打 开 用 于 读 的 二 进 制 文 件 "tmp.dat" infile.read((char*)(this),sizeof(*this));// 读 取 一 个 类 对 象 数 据 放 入 *this 中 while(!infile.eof()) { outfile.write((char*)(this),sizeof(*this));//将从"tmp.dat"中读取 的数据写入" test.dat"中 infile.read((char*)(this),sizeof(*this));//再从"tmp.dat"中读取一 个类对象数据放入*this 中 } infile.close(); //关闭文件"tmp.dat" outfile.close();//关闭文件"test.dat" } if(delmark==0) cout<<"欲删除的职工的编号尚不存在!"<<endl; } void person::delname(int& i)//定义按姓名删除信息函数 { char b; int delmark=0; //用于标记该编号信息是否已找到 char delname[20]; cout<<"-----按姓名删除个人信息-----"<<endl; cout<<"请输入要删除的姓名:"<<endl; cin>>delname; ofstream outfile("tmp.dat",ios::binary);// 打 开 用 于 写 的 二 进 制 文 件 "tmp.dat" ifstream infile("test.dat",ios::binary);// 打 开 用 于 读 的 二 进 制 文 件 "test.dat" infile.read((char*)(this),sizeof(*this));//从"test.dat"中读取一个类对象 数据放入*this 中 while(!infile.eof()) { if(strcmp(name,delname)==0) { cout<<"该人的个人信息如下:"<<endl; cout<<(*this); cout<<endl<<"你确定要删除该编号的信息?y/n"<<endl; cin>>b; if(b=='y'||b=='Y') {
第 17 页 共 42 页

delmark=1; //将删除标记置为 1,表示已删除信息 i--; //确定删除信息,人事档案管理系统中成员总数减 1 cout<<"信息已删除!"<<endl; } else delmark=-1; } else outfile.write((char*)(this),sizeof(*this));// 将 读 得 的 数 据 写 入 "tmp.dat" infile.read((char*)(this),sizeof(*this));// 再次 读取 一个类 对象数 据,放于*this 中 } outfile.close(); infile.close(); if(delmark==1)//若找到了删除对象,就用"tmp.dta"文件内容去充当"test.dat" { ofstream outfile("test.dat",ios::binary);// 打 开 用 于 写 的 二 进 制 文 件 "test.dat" ifstream infile("tmp.dat",ios::binary);// 打 开 用 于 读 的 二 进 制 文 件 "tmp.dat" infile.read((char*)(this),sizeof(*this));// 读 取 一 个 类 对 象 数 据 放 入 *this 中 while(!infile.eof()) { outfile.write((char*)(this),sizeof(*this));//将从"tmp.dat"中读取 的数据写入" test.dat"中 infile.read((char*)(this),sizeof(*this));//再从"tmp.dat"中读取一 个类对象数据放入*this 中 } infile.close();//关闭文件"tmp.dat" outfile.close();//关闭文件"test.dat" } if(delmark==0) cout<<"欲删除的职员姓名不存在!"<<endl; } int delall(int& i)//定义清空人事管理系统数据的函数 { char b; cout<<"你真的要清空人事管理系统数据吗?y/n"<<endl; cin>>b; if(b=='y'||b=='Y') { ofstream outfile("test.dat",ios::trunc);//删除文件"test.dat"中所有数据
第 18 页 共 42 页

i=0; //将人事管理系统中职员数置为 0 cout<<"人事档案管理系统数据已清空!"<<endl; } return i; } void total()//定义输出人事档案管理系统中职员数的函数 { cout<<"人事档案管理系统中的职员总数为:"<<ends<<ends; cout<<i<<endl; }

void menu() //定义菜单函数 { cout<<endl; cout<< "--------------------------- 人 事 档 案 管 理 系 统 ------------------------------------"<<endl<<endl; cout<< "------------------------- 此 系 统 由 【 李 林 】 完 成 ------------------------"<<endl<<endl; cout<<"\t\t\t 1:添加职员具体信息"<<endl; cout<<"\t\t\t 2:按姓名查找职员信息"<<endl; cout<<"\t\t\t 3:按编号查找职员信息"<<endl; cout<<"\t\t\t 4:按姓名删除职员信息"<<endl; cout<<"\t\t\t 5:按编号删除职员信息"<<endl; cout<<"\t\t\t 6:显示人事管理系统中所有职员信息"<<endl; cout<<"\t\t\t 7:清空人事管理系统中所有职员信息"<<endl; cout<<"\t\t\t 8:统计人事管理系统中的职员总数"<<endl; cout<<"\t\t\t 0:退出人事档案管理系统"<<endl; cout<<"******************************************************************** ************"<<endl; }

void password() { string password; int j=1; //密码出错次数 cout<<"欲使用本系统,请输入本系统的密码:"<<endl; cin>>password; while(password!="lilin"&&j<=3) { if(j==3&&password!="lilin")
第 19 页 共 42 页

{ cout<<"您连续三次输入密码有误,系统自动退出"<<endl; exit(0); } cout<<"您输入的密码有误,请再次输入:"<<endl; cin>>password; j++; } if(password=="lilin"&&j<=3) { cout<<endl<<"欢迎进入人事档案管理系统\n 请根据系统功能列表选择相应的 功能(请输入选项对应的数字)"<<endl; } }

void manage()//定义控制函数 { person per; per.get_i(); int choice,k=1; menu(); password(); while(k) { cin>>choice; switch(choice) { case 1: per.add_person(i);//调用增加人事档案中职员信息函数 break; case 2: per.searchname();//调用按姓名查找职工信息函数 break; case 3: per.searchnum();//调用按编号查找职工信息函数 break; case 4: per.delname(i);//调用按姓名删除职工信息函数 break;
第 20 页 共 42 页

case 5: per.delnum(i);//调用按编号删除职工信息函数 break; case 6: per.showall();//调用显示人事档案管理系统中所有职员信息的函数 break; case 7: delall(i);//调用清空人事档案管理系统中所有数据的函数 break; case 8: total();//调用输出人事档案管理系统中职员数的函数 break; case 0: cout<<endl<<"谢谢本次使用由 【李林】开发的人事档案管理系 统,再见!"<<endl<<endl; k=0; break; default: cout<<"您输入的选项有错,请重新选择!"; } if(k!=0) { menu(); cout<<"请根据系统功能列表选择相应的功能(请输入选项对应的数字) "<<endl; } } }

int main() { system("color");//设置背景和前景颜色 manage(); } 2.3.4 程序运行具体说明 (1)涉及知识点 类封装、面向对象程序设计、数组的应用、循环语句的使用、过程化设计的思想等。 (2)系统运行(主要运行界面抓图)

第 21



共 42



<1>编译首页截图:

<2>输入系统密码(lilin)之后的页面截图:

第 22



共 42



<3>选择功能列表 1(添加职工具体信息)的页面截图:

<4>选择功能列表 2(按姓名查找职员信息)的页面截图:

第 23



共 42



<5>选择功能列表 3(按编号查找职员信息)的页面截图:

<6>选择功能列表 4(按姓名删除职员)的页面截图:

第 24



共 42



<7>选择功能列表 5(按编号删除职员信息)的页面截图:

<8>选择功能列表 6(显示人事管理系统中所有职员信息)的页面截图:

第 25



共 42



<9>选择功能列表 7(清空人事管理系统中所有职员信息)的页面截图:

<10>选择功能列表 8(统计人事管理系统中所有职员信息)的页面截图:

第 26



共 42



<11>选择功能列表 0(退出人事档案管理系统)的页面截图:

第 27



共 42



3. 课程设计总结
3.1 编程日志
(1)日期:2012/6/11-2012/6/13 C++面向对象与程序设计这门课程截至今天,设计已经进行了三天。 我选的是题目五:人事档案管理。 在程序设计第一天,老师在机房组织同学们安装了 vs2010,每个人都固定使用一 台电脑。说实话,安装的第一天,我都没弄懂 vs2010 到底是搞什么的,清楚地意识到 扎实的基本功是多么重要。接着第二天便从网上找相关资料,也去图书馆翻看了 c++程 序设计这类的书, 算是有了点头目。 接着上网找模版, 看了网上的例子好像也没那么难, 自己一上机操作就出现了很多的问题,调试的时候系统总是在报错,还有很多警告,每 增加一个函数要调试很多次,有时候为了一个引号和括号,都要弄很久,这一方面是因 为自己粗心,另一方面也显示了自己基本功的不扎实。 或许先明白需求分析才更容易弄懂这个题目,才能完成这次设计。本题目要求:完 善的人事档案管理,支持员工照片、人员增加、调动。支持工作经历管理、社会关系管 理、证书管理、职称评定管理、职工培训管理、奖惩管理等,并且设立 9 个人事自定义 项目。提供大量统计报表及分析图表、支持数据导入、导出功能、提供人事工作提醒功 能:生日提醒、合同到期提醒、试用期到期提醒。总体上说具有编辑,查询,用户管理 等功能。 这就需要本程序拥有灵活的数据记录编辑功能,可以随时对记录进行增加,修改, 更新,删除,浏览等编辑操作。并将查询方式有机溶入编辑界面,可以实现对某项记录 定位,再进行编辑,修改,更新。然后具备分级用户权限管理设置,以确保人事档案的 保密性和安全性。最后具有比较友好的人机交互界面,各种操作可以在电脑上直观的界 面上通过人机交互式进行,提供人事工作提醒功能。 理清需求分析之后,我觉得自己下一步课程设计一定能更好的完成了。 (2)日期:2012/6/14-2012/6/20

第 28



共 42



3.2

测试报告

在程序修改的差不多的时候,用 C-Free 5.0 编译的时候,出现了如下截图所示的 问题。

然后把 程序按照错误指示中把“void”改成了“int”,之后就成功编译出来了。 之后编译出来的文档框背景颜色是绿色的,字体是黄色的,很纳闷,老师也问了 我这个问题。但是自己后来查看程序的时候还是发现的问题的所在,如下图:

就是这短短的程序决定了背景和前景颜色。 把程序弄得差不多了,就开始写课程设计报告的大纲。 然后一步一步把问题弄清楚,弄明白,最后才得以完成此次课程设计。

第 29



共 42



4. 心得体会
通过本次课程设计,让我对C++这门学科对有了进一步的认识,熟练掌握了类及类 模板的应用。 以前对该课程的恐惧感都以消失, 任何事情没有做不到只有愿不愿意去做。 刚开始接到该题,心中确实充满困惑。不过在图书馆和网上找了一些资料看了后, 便觉得思路就在眼前了, 之前不过就是由于对该课程的恐惧而产生了一定的心里影响而 已。 之后凭借那闪现在眼前的点点思路,慢慢在琢磨,终于想出了大体的程序内容。然 后一个一个函数的思考,一步一步的编写,调试,做起来也就越来越顺手了。通过我的 反复思考,程序中的错误得到顺利解决。函数功能也得到了进一步的完善。 这次的课程设计对我来说是一次尝试与挑战的过程。在这里,我由衷地感谢帮助、 支持和鼓励我完成课程设计的老师和一起奋斗过的伙伴。 首先我要感谢学校给我们提供 这样一个一起学习和研究的机会,让我们把理论知识应用到实际中来。其次我要感谢我 们的指导老师是石晓山老师,在进行课程设计的这段时间里他对我们的指导和帮助,为 我们课程设计的顺利完成指明了方向, 也给了我们锻炼和提高的机会。 根据老师的指导, 在设计中我基本能按照规范的方法和步骤进行,开始对人事档案管理系统问题进行讨 论,并查阅有关资料,最后确定设计方案,然后设计并制作。在实践过程中我们深刻的 认识到类在 C++中的重要性。在此我向老师及帮助我的同学致以最诚挚的谢意! 在这段时间的课程设计,我认识到 C++时一门很重要的课程。需要多花时间上机练 习,这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的 基本技能,调高了我适应实际,实践编程的能力。 我相信在今后的学习中,我会更加努力的掌握扎实的基础,使自己在编程等各方面 得到提高。

第 30



共 42



5. 参考文献
[1]陈维兴,林小茶.C++面向对象程序设计教程(第 2 版).北京:清华大学出版社, 2004 [2]陈维兴,陈昕,林小茶.C++面向对象程序设计习题解答与实验指导.北京:清华 大学出版社,2004 [3]徐孝凯.C++语言基础教程(第二版).北京:清华大学出版社,2004 [4]钱能,C++程序设计教程(修订版).北京:清华大学出版社,2005 [5]吴文虎,程序设计基础.北京:清华大学出版社,2003 [6]郑莉,董渊,张端丰,C++语言程序设计(第 3 版).北京:清华大学出版社, 2003 [7]罗建军,朱丹军,顾刚等 C++程序设计教程(第 2 版)北京:高等教育出版社, 2007 [8]编程入门网 http://www.biancheng.cn/ [9]网易学院视频教程 http://tech.163.com/school/ [10]编程论坛相关资料 http://bbs.bccn.net/

第 31



共 42



附录(源程序)
/*人事档案管理系统*/ #include<iostream> #include<fstream> #include<string> using namespace std; class person { public: char num[20]; char name[30]; char sex[20]; char age[20]; char position[20]; char address[500]; char tel[100]; char nation[30]; char political_status[20]; char marital_status[20]; char school[200]; char identity[500]; char email[20]; char engage_time[100]; char add_time[100];

public: void add_person(int&); bool searchnum(); bool searchname(); void delnum(int&); void delname(int&); void showall(); void get_i(); friend ostream &operator<<(ostream& out,person& pe); }; ostream &operator<<(ostream& out,person& pe) { out<<"编号: "<<pe.num<<endl; out<<"姓名: "<<pe.name<<endl; out<<"性别: "<<pe.sex<<endl; out<<"年龄: "<<pe.age<<endl;
第 32 页 共 42 页

out<<"职位: "<<pe.position<<endl; out<<"手机号: "<<pe.tel<<endl; out<<"民族: "<<pe.nation<<endl; out<<"政治面貌: "<<pe.political_status<<endl; out<<"婚姻状况:"<<pe.marital_status<<endl; out<<"毕业院校:"<<pe.school<<endl; out<<"身份证号:"<<pe.identity<<endl; out<<"邮箱: "<<pe.email<<endl; out<<"聘用时间: "<<pe.engage_time<<endl; out<<"记录时间:"<<pe.add_time<<endl; return out; } int i=0;

void person::get_i() { ifstream file("test.dat",ios::binary|ios::in); if(!file) { ofstream outfile("test.dat",ios::app|ios::binary); if(!outfile) { cerr<<"test.dat 文件打开错误!"<<endl; return; } return; } file.read((char*)(this),sizeof(*this)); while(!file.eof()) { i++; file.read((char*)(this),sizeof(*this)); } file.close(); }

void person::add_person(int& i) { string choice="Y"; while(choice=="Y"||choice=="y") {
第 33 页 共 42 页

cout<<"-----新建人事档案职员信息-----"<<endl; cout<<"请输入职员的的编号: (1000-9999)"<<endl; cin>>num; cout<<"请输入职员姓名:"<<endl; cin>>name; cout<<"请输入性别:"<<endl; cin>>sex; while((string)sex!="男"&&(string)sex!="女") { cout<<"您输入的性别有误,请核对后再输入:"<<endl; cin>>sex; } cout<<"请输入年龄:"<<endl; cin>>age; cout<<"请输入该职员的职位: (经理,管理员,员工)"<<endl; cin>>position; while((string)position!=" 经 理 "&&(string)position!=" 管 理 员 "&&(string)position!="员工") { cout<<"您输入的职工职位有误,请核对后再输入:"<<endl; cin>>position; } cout<<"请输入该职员的家庭地址:"<<endl; cin>>address; cout<<"请输入该职员的民族:"<<endl; cin>>nation; cout<<"请输入职员的政治面貌:(群众,团员,党员)"<<endl; cin>>political_status; while((string)political_status!=" 群众"&&(string)political_status!=" 团员"&&(string)political_status!="党员") { cout<<"您输入的职工政治面貌有误,请核对后再输入:"<<endl; cin>>political_status; } cout<<"请输入职员的婚姻状况(未婚,已婚)"<<endl; cin>>marital_status; while((string)marital_status!="未婚"&&(string)marital_status!="已婚 ") { cout<<"您输入的职工的婚姻状况有误,请核对后再输入:"<<endl; cin>>marital_status; } cout<<"请输入职员的毕业学校:"<<endl; cin>>school;
第 34 页 共 42 页

cout<<"请输入职员的身份证号:"<<endl; cin>>identity; cout<<"请输入职员的手机号:"<<endl; cin>>tel; cout<<"请输入职员的邮箱:"<<endl; cin>>email; cout<<"请输入职员的聘用时间:"<<endl; cin>>engage_time; cout<<"请输入此次记录的添加时间:"<<endl; cin>>add_time; cout<<endl; ofstream outfile("test.dat",ios::app|ios::binary); if(!outfile) { cerr<<"test.dat 文件打开错误!"<<endl; return; } outfile.write((char*)(this),sizeof(*this)); outfile.close(); cout<<"信息建立成功!"<<endl; i++; cout<<"您还想继续添加吗?(y/n)"<<endl; cin>>choice; while(choice!="Y"&&choice!="y"&&choice!="N"&&choice!="n") { cout<<"请按要求键入(y/n)"<<endl; cin>>choice; } if(choice=="N"||choice=="n") { outfile.close(); break; } } }

void person::showall() { if(i==0) cout<<"人事管理系统数据为空,请先增加职员信息!"<<endl; else {
第 35 页 共 42 页

ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); cout<<"所有职员的信息如下:"<<endl; while(!infile.eof()) { cout<<(*this); cout<<"*******************************"<<endl; infile.read((char*)(this),sizeof(*this)); } infile.close(); } }

bool person::searchnum() { char number[10]; cout<<"-----按编号查找信息-----"<<endl; cout<<"请输入要检索的编号: (1000-9999)"<<endl; cin>>number; ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); while(!infile.eof()) { if(strcmp(num,number)==0) { cout<<"该编号的职工信息如下:"<<endl; cout<<(*this)<<endl; infile.close(); return true; } infile.read((char*)(this),sizeof(*this)); } infile.close(); cout<<"对不起,没有该编号的职工信息!"<<endl; return false; } bool person::searchname() { char na[20]; cout<<"-----按姓名查找信息!-----"<<endl; cout<<"请输入要检索的职工姓名:"<<endl;
第 36 页 共 42 页

cin>>na; ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); while(!infile.eof()) { if(strcmp(name,na)==0) { cout<<"该职工的个人信息如下:"<<endl; cout<<(*this); infile.close(); return true; } infile.read((char*)(this),sizeof(*this)); } infile.close(); cout<<"对不起,没有您所要检索的职工信息!"<<endl; return false; }

void person::delnum(int& i) { char b; int delmark=0; char delnumber[10]; cout<<"-----按编号删除个人信息-----"<<endl; cout<<"请输入要删除的编号:"<<endl; cin>>delnumber; ofstream outfile("tmp.dat",ios::binary); ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); while(!infile.eof()) { if(strcmp(num,delnumber)==0) { cout<<"该编号的个人信息如下:"<<endl; cout<<(*this); cout<<endl<<"你确定要删除该编号的信息?y/n"<<endl; cin>>b; if(b=='y'||b=='Y') { delmark=1; i--; cout<<"信息已删除!"<<endl;
第 37 页 共 42 页

} else delmark=-1; } else outfile.write((char*)(this),sizeof(*this)); infile.read((char*)(this),sizeof(*this)); } infile.close(); outfile.close(); if(delmark==1) { ofstream outfile("test.dat",ios::binary); ifstream infile("tmp.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); while(!infile.eof()) { outfile.write((char*)(this),sizeof(*this)); infile.read((char*)(this),sizeof(*this)); } infile.close(); outfile.close(); } if(delmark==0) cout<<"欲删除的职工的编号尚不存在!"<<endl; } void person::delname(int& i) { char b; int delmark=0; char delname[20]; cout<<"-----按姓名删除个人信息-----"<<endl; cout<<"请输入要删除的姓名:"<<endl; cin>>delname; ofstream outfile("tmp.dat",ios::binary); ifstream infile("test.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); while(!infile.eof()) { if(strcmp(name,delname)==0) { cout<<"该人的个人信息如下:"<<endl; cout<<(*this); cout<<endl<<"你确定要删除该编号的信息?y/n"<<endl;
第 38 页 共 42 页

cin>>b; if(b=='y'||b=='Y') { delmark=1; i--; cout<<"信息已删除!"<<endl; } else delmark=-1; } else outfile.write((char*)(this),sizeof(*this)); infile.read((char*)(this),sizeof(*this)); } outfile.close(); infile.close(); if(delmark==1) { ofstream outfile("test.dat",ios::binary); ifstream infile("tmp.dat",ios::binary); infile.read((char*)(this),sizeof(*this)); while(!infile.eof()) { outfile.write((char*)(this),sizeof(*this)); infile.read((char*)(this),sizeof(*this)); } infile.close(); outfile.close(); } if(delmark==0) cout<<"欲删除的职员姓名不存在!"<<endl; } int { delall(int& i) char b; cout<<"你真的要清空人事管理系统数据吗?y/n"<<endl; cin>>b; if(b=='y'||b=='Y') { ofstream outfile("test.dat",ios::trunc); i=0; cout<<"人事档案管理系统数据已清空!"<<endl; } return i;
第 39 页 共 42 页

} void total() { cout<<"人事档案管理系统中的职员总数为:"<<ends<<ends; cout<<i<<endl; }

void menu() //定义菜单函数 { cout<<endl; cout<< "--------------------------- 人 事 档 案 管 理 系 统 ------------------------------------"<<endl<<endl; cout<< "------------------------- 此 系 统 由 【 李 林 】 完 成 ------------------------"<<endl<<endl; cout<<"\t\t\t 1:添加职员具体信息"<<endl; cout<<"\t\t\t 2:按姓名查找职员信息"<<endl; cout<<"\t\t\t 3:按编号查找职员信息"<<endl; cout<<"\t\t\t 4:按姓名删除职员信息"<<endl; cout<<"\t\t\t 5:按编号删除职员信息"<<endl; cout<<"\t\t\t 6:显示人事管理系统中所有职员信息"<<endl; cout<<"\t\t\t 7:清空人事管理系统中所有职员信息"<<endl; cout<<"\t\t\t 8:统计人事管理系统中的职员总数"<<endl; cout<<"\t\t\t 0:退出人事档案管理系统"<<endl; cout<<"******************************************************************** ************"<<endl; }

void password() { string password; int j=1; cout<<"欲使用本系统,请输入本系统的密码:"<<endl; cin>>password; while(password!="lilin"&&j<=3) { if(j==3&&password!="lilin") { cout<<"您连续三次输入密码有误,系统自动退出"<<endl; exit(0); }
第 40 页 共 42 页

cout<<"您输入的密码有误,请再次输入:"<<endl; cin>>password; j++; } if(password=="lilin"&&j<=3) { cout<<endl<<"欢迎进入人事档案管理系统\n 请根据系统功能列表选择相应的 功能(请输入选项对应的数字)"<<endl; } }

void manage() { person per; per.get_i(); int choice,k=1; menu(); password(); while(k) { cin>>choice; switch(choice) { case 1: per.add_person(i); break; case 2: per.searchname(); break; case 3: per.searchnum(); break; case 4: per.delname(i); break; case 5: per.delnum(i); break; case 6:
第 41 页 共 42 页

per.showall(); break; case 7: delall(i); break; case 8: total(); break; case 0: cout<<endl<<"谢谢本次使用由 【李林】开发的人事档案管理系 统,再见!"<<endl<<endl; k=0; break; default: cout<<"您输入的选项有错,请重新选择!"; } if(k!=0) { menu(); cout<<"请根据系统功能列表选择相应的功能(请输入选项对应的数字) "<<endl; } } }

int main() { system("color"); manage(); }

第 42



共 42




赞助商链接

更多相关文章:
管理信息系统课程设计-人事档案管理系统
辽 宁 工 业 大 学 管理信息系统设计课程设计报告(论文) 题目: 人事档案管理系统 院(系): 专业班级: 学号: 软件学院 软件工程 114 班 111301108 安凯辰 谷...
人事档案管理 课程设计
人事档案管理 课程设计_IT/计算机_专业资料。中国矿业大学银川学院面向对象程序设计课程设计报告(2011/2012 学年第二学期) 题目名称 系专班学学部业级生号 人事...
软件工程企业人事档案管理系统课程设计
软件工程企业人事档案管理系统课程设计_IT/计算机_专业资料。本课题主要是解决职员的在公司情况,目标是使这人事档案管理实现无纸化。本系统主要由用户登录模块、权限管...
人事管理系统_数据库课程设计
人事管理系统_数据库课程设计_管理学_高等教育_教育专区。沈阳理工大学学士学位...本人事档案管理信息系统的一些基本功能和组成情况包括系统 的需求分析、概念结构...
人事档案管理系统软件工程课程设计报告_图文
人事档案管理系统软件工程课程设计报告 - 福建农林大学计算机与信息学院 课程设计报告 课程名称: 课程设计题目: 姓名: 软件工程 人事档案管理系统 XXX C 辅助程序员...
c语言程序设计-人事档案管理系统
c语言程序设计-人事档案管理系统_学习总结_总结/汇报_实用文档。C语言程序设计 课程作业 ×××大学《C 语言程序设计》课程设计人事档案管理系统 方案名称 人事档案...
人事档案管理系统课程设计33
成绩 课程设计报告 题 目 人事档案管理系统 课程名称院部名称专班业级 数据库应用程序课程设计 信息技术学院 计算机科学与技术(软件) 08 计本(2) 郭根娟 080511...
c人事档案管理系统-课程设计报告
c人事档案管理系统-课程设计报告 - 学号 1608220203 2016 年-2017 年 第二学期 《C 语言程序设计》 课程设计 题目: 人事档案管理系统 专业: 网络工程...
人事档案管理系统_图文
人事档案管理系统 - 吉林化工学院 课程设计 题目 人事档案管理系统 教学院专班业级 经济管理学院 信息管理与信息系统 学生姓名 学生学号 指导教师 1 知识改变命运,...
人事档案管理系统
人事档案管理系统_IT/计算机_专业资料。c++课程设计,人事档案管理系统源代码#include<iostream> #include<cstdlib> #include<iomanip> #include<string> #include<cma...
更多相关标签:

All rights reserved Powered by 甜梦文库 9512.net

copyright ©right 2010-2021。
甜梦文库内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图