1、1、 基本要求:为方便管理某单位职工档案信息,编写一个职工档案管理系统软件。系统记录必须包括职工的ID号、姓名以及性别、出生年月、职称、工资、所在单位、在岗情况等。2、 基本管理功能:(1) 添加:增加一名职工的档案信息到管理系统中。(2) 查询:可以根据职工姓名或ID号查找某人的相关信息,若找到则显示其信息。(3) 修改:在管理系统中修改一名职工的记录。(4) 保存:将所有职工档案信息保存在一个文件中(数据库文件或普通的文本文件)。(5) 读取:从文件中读取已保存了数据。(6) 删除:从管理系统中删除一条记录。(7) 恢复:能恢复被删除的记录。(8) 统计:(A)计算平均工资及总工资,(B)
2、统计男/女职工各占总职工的人数的百分比、统计职工平均年龄和单位在岗职工人数占总职工人数的百分比、统计副高以上职工人数占总职工人数的百分比。(C)以表格形式打印全部职工档案信息表。(9) 其他:可以根据自己的思路设计其他功能。三总体设计方案及思路我让主函数非常简洁,而每一个功能对应一个函数,还有几个另外函数就是界面函数,菜单选择函数和进入前用到的密码函数。密码函数中有初始密码,也可以修改密码;密码输入正确才可以进入菜单界面,否则重新输入或退出;菜单中有对应的功能选择和提示,是用一个switch结构进行选择的,每一个功能前都有对应的序号,用户可以根据序号来选择想要执行的功能;而在各个函数中,都会有
3、一些中文的提示让你知道该怎样执行这个函数。好的下面就来看一下程序的流程图和界面吧!四流程图及程序界面: 五 程序设计过程中遇到的问题及解决1. 第一个呢,就是怎样做文件的保存和读取啦。因为没怎么学文件的知识,后来就狠狠的看了一遍书,再问了下班上的大神,最后终于顺利解决了,才发现原来挺简单的呀!比如保存函数:void Save(int n) ofstream ofile(staff.txt,ios:out|ios:binary); for(i=0;ii;n-)stafn=stafn-1; stafi=staf1i; Save(n+1);问题难,可能就是你看着它难,但努力想想,其实就那样,甚至非常
4、简单,任何问题都经不住“认真”二字的。备注:以上的n都是职工的个数,由Load()函数确定。4、开始的时候,我把生日设为了char型的,就直接包括了年月日,由键盘一次性输入,但后来发现,这样就算不了平均年龄了,所以一定要把年分离开来,后来就把生日改为了一个3个成员的int数组,输入也就分三次依次输入年月日。这样就解决了平均年龄的统计问题啦,下面是统计代码:for(i=0;num; age=2014-stafi.birthday0; average+=age; average=average/num; cout全体职工的平均年龄是: average岁endl;很多问题可能一开始注意不到,但在后面
5、发现了,就要努力去改善它,因为还为时不晚。5. 在编写后期,我添加了进入界面前的密码输入功能,如果直接输入密码在屏幕上显示的话,不符合实际生活中的要求。就想用*号去代替输入进去的密码,而这个确确实实难到了我,但我想既然做了,就一定要把它做好,于是查找资料,再自行修改、调试,花了一个晚上的时间,终于做好了。不过还有一点点缺陷,就是密码只能是数字,不能是字母,暂定的是四位数,不过是可以修改的。当然我已经尽力了,就很欣慰了。下面来看看用*代替数字的函数吧!int key_hide () int str4;int t=0;int len=0,a=0,i,j; for(;len=0;i-) for(j=
6、i;j3;j+) stri=stri*10; a=a+stri; a=a+str3; return a;我只想说皇天不负有心人,这个函数做到一半的时候都想放弃了,但想想还是坚持了下来,终于也就完成了,这一个晚上的努力没有白费。所以认定了能干的就一定努力干下去,总会有收获的就是是没有,这个过程也会让人锻炼很多的。6、也有一个不足的地方就是,不能对输入的信息进行判断是否正确,比如对于名字,应该输入汉字,但输入字母也不报错,这样的话,确实有点不够完善,但也由于时间有限,而且要输入的东西挺多,给每一次的输入都进行判断,确有些麻烦,所以,就没编写这个功能。六 程序特色1.主函数非常简单,仅有三行,而且还
7、包括一个界面颜色的设置,看上去很简洁,很清爽。因为要执行的函数都在一个switch结构中了,输入一个数字就执行一种功能。下面是主函数和switch结构函数。int main() system(color 9C); key(); return 0;这是包括switch结构的函数;void handle_menu() int num; num=Load(); switch(menu_select() case 1: add(num); break; case 2: findrecord(num); case 3: modify(num); case 4: Save(num); case 5: di
8、splay(num+1); case 6: remove(num); case7: recover(num);display(num+1); case 8: tongji(num); case 9: cout亲 谢谢使用职工档案管理系统!exit(0); system(pausesystem(cls) ;key()就是下面要介绍的密码函数啦!它包括了handle_menu()函数,在密码输入正确之后就执行handle_menu()函数2. key()是我认为这个程序中亮点,也是我花了最多时间的一个功能函数。因为它不仅要输入正确的密码才能进入功能界面,而且还可以修改密码,且输入的密码是以*号代替
9、的,也就是说密码输入的时候,从屏幕上是看不到的你输入的数字的,这也正好符合现实中的使用要求,具有保密性,这一点在实际生活中是非常重要的。void key() int a,c,b,key=1111; system(endla; * 密码 :b=fun();cout * 按1进入系统,按2修改密码,按0退出:c; if(c=1&key=b) system(handle_menu(); else if(c!=1&c!=2) exit(0); else if(c=2) fstream iofile1(key.txt iofile1.read(char*)&key,sizeof(key);iofile1.close(); do system( 请输入原密码:a=fun(); 请输入新密码:key=fun(); cout 1.确认修改 2.重新设置 while(a=2); ofile.write(char*)&ke
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1