课 程 设 计
教 学 院 课程名称
题 目 专 业
计算机学院
面向对象程序设计课程设计
人事档案管理系统
软件工程 12软件工程 包先跃
吕鹏飞、林科辰、龙浪、陈精良
谢晋
班 级 姓 名 同组人员 指导教师
2021 年 12 月 15 日
(完成时间)
课程设计〔论文〕
目 录
一 概述 ............................................................................................................................................. 2
二 总体方案设计 ............................................................................................................................. 3 三 详细设计 ..................................................................................................................................... 3 程序流程图 ............................................................................................................................... 7 四 程序的调试与运行结果说明 ..................................................................................................... 8
4.1调试方法 ............................................................................................................................. 8 4.2运行的主要功能界面及分析 ............................................................................................. 9 4.3测试中的问题 ................................................................................................................... 12 五 课程设计总结 ........................................................................................................................... 13
5.1程序的效果描述 ............................................................................................................... 13 5.2优点与缺乏 ....................................................................................................................... 13 5.3个人体会 ........................................................................................................................... 13 参考文献 ......................................................................................................................................... 14 附录:............................................................................................................................................. 14
1
课程设计〔论文〕
一 概述
1. 课程设计的目的
1.理解和掌握该课程中的有关根本概念,程序设计思想和方法。 2.培养综合运用所学知识独立完成课题的能力。
3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
2. 课程设计的要求
1.需求分析:
①能够输入职工的综合情况的输入、修改以及删除; ②能够实现对职工信息的浏览; ③能够实现对职工进行查询; ④设计系统封面并由计时器控制; 2.系统性能要求: ①系统平安、可靠; ②功能齐全;
③操作方便、界面友好; ④易于维护和扩充。
3.系统的功能分析: 资料维护:系统维护包括对各种表记录的修改、删除、添加等操作。
4.资料维护:对数据表中的信息进行浏览。
系统查询:可以按职工编号、等相关信息进行详细或模糊查询。
报表统计:包括统计职工编号、职工、职工性别、所在部门、职工年龄、工作日期、根本工资、职称、职务和简历等字段。 其它操作:系统封面、计时器控制与人性化提示信息。 系统功能模块
人事管理系统有:数据查找与浏览、数据修改、报表显示和系统封面构成。 5.功能的实现:
1“数据查找与浏览〞模块: 〔1〕数据查找:
2
课程设计〔论文〕
对职工的编号、职工、职工性别、所在部门、职工年龄、工作日期、 根本工资、职称、职务和简历等字段进行精确或模糊查找。
〔2〕数据浏览:可以对数据表中的数据实现,上一项、下一项、首相、尾项等操作。
〔3〕其他信息:设置字体、颜色属性和一些提示信息。 2“数据修改〞模块:
〔1〕添加数据:增加一个新的记录 〔2〕修改数据:修改原有记录。
二 总体方案设计
整体设计为数据输入模块、数据添加模块、数据删除模块、数据查询模块、数据修改模块、数据统计模块、数据排序模块。
数据输入模块把职工信息逐一写入人事档案文件。数据添加模块用追加的方式把新增职工信息写入人事档案文件。数据删除模块根据人员编号查找要删除的人员,从文件中读一条记录,查看编号是否要删除,如果是,那么舍弃。数据查询模块把编号和作为查询字段,用根本查找算法查找人事档案文件,把符合查找要求的记录输出。数据输出模块通过菜单项选择择年龄或者来时时间,把数据从文件中读出来,任意选择一种排序算法对记录进行排序,输出排序结果。这些模块中我负责数据查询和删除两个局部。
三 详细设计
数据结构采用成员类:
class person //定义通讯成员类 { public:
char num[20];//编号 char name[30];// char sex[20];//性别 char age[20];//年龄 char position[20];//职位 char address[500];//地址 char tel[100];// 号
3
课程设计〔论文〕
char nation[30];//民族
char political_status[20];//政治面貌 char marital_status[20];//婚姻状况 char school[200];//毕业院校 char identity[500];//身份证号 char email[20];//邮箱
P ublic: //对其成员函数的声明 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);//重载运算符\"<<\" };
数据输入模块
把职工信息逐一写入人事档案文件。 数据添加模块
用追加的方式把新增职工信息写入人事档案文件。 cout<<\"请输入职员的的编号:〔1000-9999〕\"< cout<<\"请输入职员:\"< cout<<\"请输入性别:\"< while((string)sex!=\"男\"&&(string)sex!=\"女\") { cout<<\"您输入的性别有误,请核对后再输入:\"< cout<<\"请输入年龄:\"< 4 课程设计〔论文〕 cout<<\"请输入该职员的职位:〔经理,管理员,职工〕\"< while((string)position!=\"经理\"&&(string)position!=\"管理员\"&&(string)position!=\"职工\") { cout<<\"您输入的职工职位有误,请核对后再输入:\"< cout<<\"请输入该职员的家庭地址:\"< cout<<\"请输入该职员的民族:\"< cout<<\"请输入职员的政治面貌:(群众,团员,党员)\"< while((string)political_status!=\"\") { cout<<\"您输入的职工政治面貌有误,请核对后再输入:\"< cout<<\"请输入职员的婚姻状况〔未婚,已婚〕\"< while((string)marital_status!=\"\"&&(string)marital_status!=\"已婚\") { cout<<\"您输入的职工的婚姻状况有误,请核对后再输入:\"< cout<<\"请输入职员的毕业学校:\"< cout<<\"请输入职员的身份证号:\"< 未 婚 群 众 \"&&(string)political_status!=\"团员\"&&(string)political_status!=\"党员 5 课程设计〔论文〕 cout<<\"请输入职员的 号:\"< cout<<\"请输入职员的邮箱:\"< cout<<\"请输入职员的聘用时间:\"< cout<<\"请输入此次记录的添加时间:\"< \"test.dat\"文件,并将指针指向文件尾 〔3〕数据删除模块 根据人员编号查找要删除的人员,从文件中读一条记录,查看编号是否要删除,如果是,那么舍弃 如:\"test.dat\" { ofstream outfile(\"test.dat\翻开用于写的二进制ifstream infile(\"tmp.dat\翻开用于读的二进制文infile.read((char*)(this),sizeof(*this));//读取一个类对象数据while(!infile.eof()) { } outfile.write((char*)(this),sizeof(*this));// 将 从 文件\"test.dat\" 件\"tmp.dat\" 放入*this中 \"tmp.dat\"中读取的数据写入\" test.dat\"中 infile.read((char*)(this),sizeof(*this));//再从\"tmp.dat\" 中读取一个类对象数据放入*this中 不再写入文件;否那么重新写入文件。 〔4〕数据查询模块 把编号和作为查询字段,用根本查找算法查找人事档案文件,把符合查找要求的记录输出。 〔5〕数据修改模块 6 课程设计〔论文〕 查找要修改的记录,修改之。先读记录,假设是要修改的记录,那么修改信息,把修改后的信息写入文件;否那么直接写入文件。例如按修改:if(delmark==1)//假设找到了删除对象,就用\"tmp.dta\"文件内容去充当 〔6〕数据输出模块 通过菜单项选择择年龄或者来时时间,把数据从文件中读出来,任意选择一种排序算法对记录进行排序,输出排序结果。 if(i==0)//人事管理系统中无此职员,请先增加职员信息信息 { ifstream infile(\"test.dat\翻开用于读的binary文件 infile.read((char*)(this),sizeof(*this));//读取一个类对象数据放cout<<\"所有职员的信息如下:\"< cout<<(*this);//输出当前对象的各数据成员 cout<<\"人事管理系统数据为空,请先增加职员信息!\"< 程序流程图 人事管理系统 1、添加人事信息 保存信息 7 2、 按查找 人事信息 课程设计〔论文〕 3、4、 5、6、7、8、按按按显清统编删编示空计号除 号人人人查人删事事事找 事 除 管管管人人理理理事 事 系系系4.1具体函数 per.get_i(); menu(); password(); per.add_person();//调用增加人事档案中职员信息函数 per.searchname();//调用按查找职工信息函数 per.searchnum();//调用按编号查找职工信息函数 per.delname();//调用按删除职工信息函数 per.delnum();//调用按编号删除职工信息函数 per.showall();//调用显示人事档案管理系统中所有职员信息的函数 delall();//调用清空人事档案管理系统中所有数据的函数 total();//调用输出人事档案管理系统中职员数的函数 四 程序的调试与运行结果说明 4.1调试方法 将已经编好的程序放在VC++6.0的环境中进行调试与测试,发现程序中的错误, 8 0、退出人事档案管 课程设计〔论文〕 在提示的情况下进行改正。 4.2运行的主要功能界面及分析 〔1〕、菜单界面 图2-1菜单 〔2〕、输入信息界面 图2-2 信息输入 9 课程设计〔论文〕 (3)、按查找信息界面 图2-3 查找 〔4〕、编号查找信息界面 图2-4 编号查找信息 〔5〕、按删除信息界面 2-5 按删除信息 〔6〕、按编号删除信息界面 10 课程设计〔论文〕 2-6按编号删除信息 〔7〕、显示人事档案管理系统中所有职员信息界面 图2-7〔由于前面两步将系统中唯有的2租数据删除了 需哦亿显示职工信息需重新添加新的 职 工 信 息 〔8〕统计人事管理系统中职员人数 图2-8 11 课程设计〔论文〕 〔9〕、清空人事管理系统中的数据 图2-9 〔10〕、退出界面 图2-10 退出程序 〔11〕、程序运行分析 测试是将在屏幕上出来有关人事档案需要填写的东西,输入需要填写的信息,然后逐步操作添加信息,删除信息,查询信息,修改信息等操作来实现程序的功能。 4.3测试中的问题 注意声明函数时,各函数之间的调用关系。 12 课程设计〔论文〕 五 课程设计总结 5.1程序的效果描述 该程序主要实现人事管理的功能。利用14个函数的组合组成程序,然后通过该程序输入人事信息,然后利用各个函数的调用,实现信息输入,信息添加,信息查询,信息删除,信息修改等功能。 5.2优点与缺乏 优点:使用结构使程序的输入输出更简洁 使用函数可以使程序更简便; 缺乏:输入的内容比拟多; 用文件储存信息不能用结构输入; 读取文件中的信息也不能用结构读取; 程序比拟大,各局部之间的关系繁琐; 5.3个人体会 学习C++要切忌急躁,要明白欲速那么不达。如果想要学好C++就要多看多写,而最关键的是要上课听老师分析。 通过一个学期的学习,我更了解计算机编程了,同时也更喜欢计算机了。并且我也知道了如何学好C++,学C++靠的不是上课的那点儿时间,而是课前的预习工作及课后的复习工作,还有对写程序的及时练习,练习写程序不仅是对知识的复习也是对知识的熟练从而也能更深刻的理解程序,理解C++。我们学习C++不仅要看课本,更重要的是看学习资料,从而使掌握的知识更广阔。只有拥有丰富的知识以及掌握对编程的熟练度,才能对程序灵活书写。 C++是比C语言更高级的一门语言,我们也可以通过学习C语言来学习C++,这样就可以减少学习中遇到的困难。想要学好C++,让我们一起努力吧。 13 课程设计〔论文〕 参考文献 【1】谭浩强,C程序设计题解与上机指导〔第二版〕,北京,清华大学出版社,2000年9月。 【2】?C++程序设计语言〔特别版〕?,机械工业出版社。 【3】袁志祥、秦锋主编 ,?数据结构〔c语言版〕例题详解与课程设计指导?第二版 中国科学技术大学出版社出版 附录: /*人事档案管理系统*/ #include class person //定义通讯成员类 { public: char num[20];//编号 char name[30];// 14 课程设计〔论文〕 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<<\"编号: \"< 15 课程设计〔论文〕 ifstream file(\"test.dat\翻开用于读的binary文件 if(!file) { ofstream outfile(\"test.dat\翻开\"test.dat\"文件,并将指针指向文件尾 if(!outfile) { cerr<<\"test.dat 文件翻开错误!\"< 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<<\"-----新建人事档案职员信息-----\"< cout<<\"请输入职员:\"< cout<<\"请输入性别:\"< while((string)sex!=\"男\"&&(string)sex!=\"女\") { cout<<\"您输入的性别有误,请核对后再输入:\"< cout<<\"请输入年龄:\"< cout<<\"请输入该职员的职位:〔经理,管理员,职工〕\"< while((string)position!=\"经理\"&&(string)position!=\"管理员\"&&(string)position!=\"职工\") { 16 课程设计〔论文〕 cout<<\"您输入的职工职位有误,请核对后再输入:\"< cout<<\"请输入该职员的家庭地址:\"< cout<<\"请输入该职员的民族:\"< cout<<\"请输入职员的政治面貌:(群众,团员,党员)\"< while((string)political_status!=\"群众\"&&(string)political_status!=\"团员\"&&(string)political_status!=\"党员\") { cout<<\"您输入的职工政治面貌有误,请核对后再输入:\"< cout<<\"请输入职员的婚姻状况〔未婚,已婚〕\"< while((string)marital_status!=\"未婚\"&&(string)marital_status!=\"已婚\") { cout<<\"您输入的职工的婚姻状况有误,请核对后再输入:\"< cout<<\"请输入职员的毕业学校:\"< cout<<\"请输入职员的身份证号:\"< cout<<\"请输入职员的 号:\"< cout<<\"请输入职员的邮箱:\"< cout<<\"请输入职员的聘用时间:\"< cout<<\"请输入此次记录的添加时间:\"< cerr<<\"test.dat 文件翻开错误!\"< 课程设计〔论文〕 cout<<\"信息建立成功!\"< while(choice!=\"Y\"&&choice!=\"y\"&&choice!=\"N\"&&choice!=\"n\") { cout<<\"请按要求键入〔y/n〕\"< if(choice==\"N\"||choice==\"n\") { outfile.close(); break; } } } void person::showall()//定义显示人事档案管理系统中所有职员信息的函数 { if(i==0)//人事管理系统中无此职员,请先增加职员信息信息 cout<<\"人事管理系统数据为空,请先增加职员信息!\"< 18 课程设计〔论文〕 if(strcmp(num,number)==0) { cout<<\"该编号的职工信息如下:\"< 课程设计〔论文〕 cin>>delnumber; ofstream outfile(\"tmp.dat\翻开用于写的二进制文件\"tmp.dat\" ifstream infile(\"test.dat\翻开用于读的二进制文件\"test.dat\" infile.read((char*)(this),sizeof(*this));//从\"test.dat\"中读取一个类对象数据放入*this中 while(!infile.eof()) { if(strcmp(num,delnumber)==0) { cout<<\"该编号的个人信息如下:\"< 课程设计〔论文〕 } void person::delname(int& i)//定义按删除信息函数 { char b; int delmark=0; //用于标记该编号信息是否已找到 char delname[20]; cout<<\"-----按删除个人信息-----\"< cout<<\"该人的个人信息如下:\"< 21 课程设计〔论文〕 infile.read((char*)(this),sizeof(*this));//再从\"tmp.dat\"中读取一个类对象数据放 入*this中 } infile.close();//关闭文件\"tmp.dat\" outfile.close();//关闭文件\"test.dat\" } if(delmark==0) cout<<\"欲删除的职员不存在!\"< cout< 课程设计〔论文〕 void password() { string password; int j=1; //密码出错次数 cout<<\"欲使用本系统,请输入本系统的密码:\"< if(j==3&&password!=\"BXY\") { cout<<\"您连续三次输入密码有误,系统自动退出\"< j++; } if(password==\"hjzljy\"&&j<=3) { cout< 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; 23 课程设计〔论文〕 case 3: per.searchnum();//调用按编号查找职工信息函数 break; case 4: per.delname(i);//调用按删除职工信息函数 break; case 5: per.delnum(i);//调用按编号删除职工信息函数 break; case 6: per.showall();//调用显示人事档案管理系统中所有职员信息的函数 break; case 7: delall(i);//调用清空人事档案管理系统中所有数据的函数 break; case 8: total();//调用输出人事档案管理系统中职员数的函数 break; case 0: cout< menu(); cout<<\"请根据系统功能列表选择相应的功能〔请输入选项对应的数字〕\"< system(\"color 3E\"); manage(); } 24 因篇幅问题不能全部显示,请点此查看更多更全内容