模拟工资管理系统3_第1页
模拟工资管理系统3_第2页
模拟工资管理系统3_第3页
模拟工资管理系统3_第4页
模拟工资管理系统3_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

} this->Save();}//职工信息排序功能voidWorkers::Sort(){ buffer=NUM; this->Num(); if(NUM==0) { cout<<"没有职工信息存入,系统将返回主菜单"<<endl; NUM=buffer; return; } else { cout<<"请选择排序方式:"<<endl; cout<<"***********************************************"<<endl; cout<<"**1.按工号排序〔升序〕**"<<endl; cout<<"**2.按工号排序〔降序〕**"<<endl; cout<<"**3.按姓名排序〔升序〕**"<<endl; cout<<"**4.按姓名排序〔降序〕**"<<endl; cout<<"**5.按工资排序〔升序〕**"<<endl; cout<<"**6.按工资排序〔降序〕**"<<endl; cout<<"**0.返回主菜单**"<<endl; cout<<"***********************************************"<<endl; cout<<endl; cout<<"请选择数字编号0~6"<<endl; intchoice2; cin>>choice2; while(choice2<0||choice2>6) { cout<<"输入有误,请重新输入:"<<endl; cin>>choice2; } if(choice2==1) { inti,j; for(i=0;i<NUM-1;i++) for(j=0;j<NUM-1-i;j++) if(w[j].()>w[j+1].()||(w[j].()==w[j+1].()&&w[j].ID>w[j+1].ID)) { Worker*temp=newWorker(w[j]); w[j]=w[j+1]; w[j+1]=*temp; deletetemp; } cout<<"按工号升序后的信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; for(i=0;i<NUM;i++) { cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } } elseif(choice2==2) { inti,j; for(i=0;i<NUM-1;i++) for(j=0;j<NUM-1-i;j++) if(w[j].()<w[j+1].()||(w[j].()==w[j+1].()&&w[j].ID<w[j+1].ID)) { Worker*temp=newWorker(w[j]); w[j]=w[j+1]; w[j+1]=*temp; deletetemp; } cout<<"按工号降序后的信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; for(i=0;i<NUM;i++) { cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } } elseif(choice2==3) { inti,j; for(i=0;i<NUM-1;i++) for(j=0;j<NUM-1-i;j++) if(w[j].name>w[j+1].name) { Worker*temp=newWorker(w[j]); w[j]=w[j+1]; w[j+1]=*temp; deletetemp; } cout<<"按姓名升序后的信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; for(i=0;i<NUM;i++) { cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } } elseif(choice2==4) { inti,j; for(i=0;i<NUM-1;i++) for(j=0;j<NUM-i-1;j++) if(w[j].name<w[j+1].name) { Worker*temp=newWorker(w[j]); w[j]=w[j+1]; w[j+1]=*temp; deletetemp; } cout<<"按姓名降序后的信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; for(i=0;i<NUM;i++) { cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } } elseif(choice2==5) { inti,j; for(i=0;i<NUM-1;i++) for(j=0;j<NUM-i-1;j++) if(w[j].pay>w[j+1].pay) { Worker*temp=newWorker(w[j]); w[j]=w[j+1]; w[j+1]=*temp; deletetemp; } cout<<"按工资升序后的信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; for(i=0;i<NUM;i++) { cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } } elseif(choice2==6) { inti,j; for(i=0;i<NUM-1;i++) for(j=0;j<NUM-i-1;j++) if(w[j].pay<w[j+1].pay) { Worker*temp=newWorker(w[j]); w[j]=w[j+1]; w[j+1]=*temp; deletetemp; } cout<<"按工资降序后的信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; for(i=0;i<NUM;i++) { cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } } elseif(choice2==0) return; } ofstreamfout; ("E:\\worker.txt",ios_base::ate); if(!fout){ cout<<"Fileopenerror!\n"; exit(1); } cout<<"文件正在保存......请稍候!!"<<endl; cout<<"数据保存成功!!!"<<endl; for(inti=0;i<NUM;i++) { fout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; fout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].salary<<'\t'<<w[i].tax<<'\t'<<w[i].pay<<endl; } cout<<"系统返回主菜单:"<<endl; (); NUM=buffer;}//职工信息删除功能voidWorkers::Delete(){ if(NUM==0) { cout<<"没有职工信息输入,系统将返回主菜单"<<endl; return; } else { ofstreamfout,foutp; ("E:\\worker.txt",ios_base::trunc); if(!fout){ cout<<"Fileopenerror!\n"; exit(1); } SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_NORMAL); ("E:\\password.txt",ios_base::trunc); if(!foutp){ cout<<"Fileopenerror!\n"; SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); exit(1); } cout<<"文件正在保存......请稍候!!"<<endl; cout<<"数据保存成功!!!"<<endl; for(inti=0;i<NUM;i++) { fout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; fout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].salary<<'\t'<<w[i].tax<<'\t'<<w[i].pay<<endl; foutp<<w[i].Pw<<endl; } this->Showsaved(); (); (); SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); } intbuffer0=NUM; this->Num(); if(NUM==0) { cout<<"没有职工信息存入,系统将返回主菜单"<<endl; NUM=buffer0; return; } cout<<"请输入需要删除信息职工的工号:"<<endl; stringdelid; cin>>delid; intk; intflag=1; while(flag) { for(inti=0;i<NUM;i++) { if(delid==w[i].ID) { flag=0; k=i; break; } } if(flag) { cout<<"不存在此员工,请重新输入:"<<endl; cin>>delid; } } cout<<"你选择的职工的信息为:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; cout<<w[k].ID<<'\t'<<w[k].name<<'\t'<<w[k].sex<<'\t'<<w[k].edu<<'\t'<<w[k].age; cout<<'\t'<<w[k].address<<'\t'<<w[k].tel<<'\t'<<w[k].pay<<endl; cout<<"确认请输入Y\t返回主菜单请输入N"<<endl; stringp; cin>>p; while(1) { if(p=="y"||p=="Y") { cout<<"员工信息已删除!"<<endl; for(inti=0;i<NUM;i++) { intj=0; if(w[i].ID==delid) { j=i; for(;j<NUM;j++) w[j]=w[j+1]; NUM--; } } ofstreamfout,foutp; ("E:\\worker.txt",ios_base::trunc); if(!fout){ cout<<"Fileopenerror!\n"; exit(1); } SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_NORMAL); ("E:\\password.txt",ios_base::trunc); if(!foutp){ cout<<"Fileopenerror!\n"; SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); exit(1); } cout<<"文件正在保存......请稍候!!"<<endl; cout<<"数据保存成功!!!"<<endl; for(inti=0;i<NUM;i++) { fout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; fout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].salary<<'\t'<<w[i].tax<<'\t'<<w[i].pay<<endl; foutp<<w[i].Pw<<endl; } this->Showsaved(); cout<<"系统返回主菜单:"<<endl; (); (); SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); break; } elseif(p=="n"||p=="N") { NUM=buffer0; return; } else { cout<<"输入有误,请重新输入:"; cin>>p; } } NUM=buffer0;}//职工信息显示函数〔显示文件中的内容〕voidWorkers::Showsaved(){ buffer=NUM; this->Num(); if(NUM==0) { cout<<"职工文档为空,系统将返回主菜单"<<endl; NUM=buffer; return; } else { NUM=buffer; ifstreamin("E:\\worker.txt"); if(!in){ cout<<"Fileopenerror!\n"; exit(1); } cout<<"已保存的职工信息如下:"<<endl; cout<<"工号\t姓名\t性别\t学历\t年龄\t地址\t\t\t实际收入"<<endl; if(NUM==count) for(inti=0;i<count;i++) { in>>w[i].ID>>w[i].name>>w[i].sex>>w[i].edu>>w[i].age>>w[i].address>>w[i].tel>>w[i].salary>>w[i].tax>>w[i].pay; cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } else for(inti=0;i<NUM;i++) { in>>w[i].ID>>w[i].name>>w[i].sex>>w[i].edu>>w[i].age>>w[i].address>>w[i].tel>>w[i].salary>>w[i].tax>>w[i].pay; cout<<w[i].ID<<'\t'<<w[i].name<<'\t'<<w[i].sex<<'\t'<<w[i].edu<<'\t'<<w[i].age; cout<<'\t'<<w[i].address<<'\t'<<w[i].tel<<'\t'<<w[i].pay<<endl; } (); }}//获得职工工号stringWorkers::GetID(inti){ returnw[i].ID;}//用户登录时显示当前用户信息voidWorkers::Show(inti){ w[i].Show();}//获取某个职工旧密码char*Workers::GetPw(intl){ returnw[l].Pw;}//统计信息并且显示voidWorkers::Total(){ buffer=NUM; this->Num(); for(inti=0;i<NUM;i++) { tsalary+=w[i].salary; ttax+=w[i].tax; } cout<<"\n职工总数\t工资总数\t税金总数"<<endl; cout<<NUM<<"\t\t"<<tsalary<<"\t\t"<<ttax<<endl; NUM=buffer;}//用户修改密码voidWorkers::ChangePw(){ buffer=NUM; this->Num(); charpassword; charpw[20]; interror=0; boolback=0; boolout=0; do{ do{ cout<<"\n请输入修改前的密码:"<<endl; for(intj=0;j<20;j++) { password=getch(); if(password==13) { pw[j]='\0'; break; } if(password==8) { cout<<'\b'<<''<<'\b'; j-=2; } else { pw[j]=password; cout<<'*'; } } if(strcmp(pw,w[loc].Pw)==0) { char*p=newchar[50]; charp1[20]; while(1){ cout<<"\n请输入新密码(注:密码长度至少6位,但不得超过20位〕:"<<endl; for(inti=0;i<50;i++){ password=getch(); if(password==13) { p[i]='\0'; break; } if(password==8) { cout<<'\b'<<''<<'\b'; i-=2; } else { p[i]=password; cout<<'*'; } } if(strlen(p)>20) cout<<"\n密码过长,请重新输入:"<<endl; elseif(strlen(p)<6) cout<<"\n密码过短,请重新输入:"<<endl; else break; } while(1){ cout<<"\n请再次输入新密码:"<<endl; for(inti=0;i<20;i++){ password=getch(); if(password==13) { p1[i]='\0'; break; } if(password==8) { cout<<'\b'<<''<<'\b'; i-=2; } else { p1[i]=password; cout<<'*'; } } if(strcmp(p1,p)==0){ strcpy(w[loc].Pw,p1); ofstreamfout; SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_NORMAL); ("E:\\password.txt",ios_base::trunc); if(!fout){ cout<<"Fileopenerror!\n"; SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); exit(1); } for(inti=0;i<NUM;i++) { fout<<w[i].Pw<<'\t'<<endl; } (); SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); back=0; out=1; cout<<"\n密码修改成功!"<<endl; Sleep(1000); break; } else{ cout<<"\n两次密码不相同"<<endl; cout<<"是否需要返回?"<<endl; cout<<"是(Y)否(N)"<<endl; charchoice4; cin>>choice4; while(1){ if(choice4=='y'||choice4=='Y'){ back=1;break; } elseif(choice4='n'||choice4=='N'){ back=0;out=1;break; } else{ cout<<"\n输入有误,请输入Y/N(y/n):"<<endl; cin>>choice4; } } if(!back)break; elsecontinue; } } delete[]p; } else { error++; if(error==3) { for(inti=10;i>=0;i--) { system("cls"); cout<<"\n****************************************************"<<endl; cout<<"**密码错误3次,系统"<<setw(2)<<i<<"秒后自动退出,请稍后重新登录**"<<endl; cout<<"*******************************************************"<<endl; Sleep(1000); } exit(1); } cout<<"\n密码错误!请重新输入"<<endl; Sleep(1000); } }while(error<3&&!out); }while(back); NUM=buffer; cout<<endl;}//main函数调用执行函数Execute()intmain(){ system("COLOR30"); Execute(); SetFileAttributes(L"E:\\password.txt",FILE_ATTRIBUTE_HIDDEN); return0;}测试数据及其结果分析显示的登录界面〔图5-1〕:图5-1〔1〕管理员登录〔图5-2〕图5-2管理员界面:〔图5-3〕图5-3职工信息添加:〔图5-4〕图5-4当前信息查看:〔图5-5〕图5-5保存:〔图5-6〕图5-6查找:〔图5-8~图5-13〕图5-7按工号查找〔图5-8〕图5-8按姓名查找〔图5-9〕图5-9按工资查找〔图5-10〕图5-10按学历查找〔图5-11〕图5-11按年龄查找〔图5-12〕图5-12按地址查找〔图5-13〕图5-13修改:〔图5-14〕图5-14排序:〔图5-15〕图5-15删除:〔图5-16〕图5-16已存信息显示:〔图5-17〕〔图5-17〕职工信息统计:〔图5-18〕图5-18退出:〔图5-19〕图5-19〔2〕用户登录:〔图5-20〕图5-20信息查询:〔图5-21〕图5-21修改密码:〔图5-22〕图5-22结果分析如下:在输入登录界面菜单项选择项时如果输入的内容不是1和2,而输入的为其他字符〔字母或符号〕,系统将自动认为操作结束而推出系统。登录:选择管理员登录/用户登录。管理员登录密码为B14040215。用户登录初始密码为0215,登录后可以修改密码。添加职工:根据提示依次输入职工的工号、姓名、性别、学历、年龄、月薪、地址、。注意:输入格式必须严格按照要求,如:号码必须为11位号码或者8位固话号码;年龄必须在工龄范围内〔16-60〕,月薪必须高于中国最低劳工合同工资……。添加职工后,程序自动计算该职工的税金以及实际收入。管理员登录:输入密码,如果密码输错三次,系统进入倒计时,10秒后退出程序。查看信息:查看当前翻开程序时输入的职工信息。保存信息:保存当前输入的信息,追加存入文件系统内。查找职工:如果文件中没有职工信息那么返回主菜单。否那么根据工号、姓名、工资、学历、年龄、地址查找职工。可以返回主菜单。修改信息:如果文件中没有职工信息那么返回主菜单。否那么先显示给使用者已保存的职工信息。然后让其根据工号选择要修改的职工,可以修改选中职工的任意信息。最后自动保存。排序:如果文件中没有职工信息那么返回主菜单。否那么根据工号〔升序/降序〕,姓名〔升序/降序〕,工资〔升序/降序〕排序,并保存入文件。删除职工:如果文件中没有职工信息那么返回主菜单。否那么根据工号选择要删除的职工,并保存入文件。库显示:如果文件中没有职工信息那么返回主菜单。否那么查看显示已经保存入文件的职工信息。信息统计:如果文件中没有职工信息那么返回主菜单。否那么统计并查看已经保存的职工数目,工资总数以及税金总数。退出程序:程序询问是否离开,如果选择是,那么完全退出,并将密码文件隐藏;否,那么返回主界面。用户登录:如果文件中没有任何职工信息,那么退出程序。否那么输入ID号即工号,如果工号存在那么输入密码,如果密码输错三次,系统进入倒计时,10秒后退出程序。信息查询:仅可以查看当前登录的用户信息。修改密码:输入旧密码正确后可以输入新的密码,再次输入新密码确认后才可以成功修改密码。修改密码后下次登录可以使用该新密码。退出程序:程序询问是否离开,如果选择是,那么完全退出,并将密码文件隐藏;否,那么返回主界面。调试过程中的问题问题——排序函数中:由于工号是string类型,所以比拟的时候如果仅仅用strcmp〔〕函数,无法将例如B102与B1009这样的工号正确排序。解决方式——增加比拟工号长度,使用string类型自带的size()函数获取工号的长度。长度更长的,工号大,长度相等的那么使用strcmp()比拟大小。问题——添加、保存函数:每次翻开程序添加职工,职工数目在变化,如果仅添加而未保存,此时已输入的职工数目明显比文件中的职工数目多,两者不统一。如果使用单一的变量来记录职工数目,在显示当前输入的职工信息与显示已经保存的职工信息时是无法正确输出的。解决方法——使用NUM和count两个变量。每次翻开程序都将NUM值赋值为文件中已经保存的职工数目。每次调用与文件数目相关的函数时都将NUM值赋值为文件中已经保存的职工数目。而count变量记录当前翻开程序时添加的职工数目。问题——保存密码:密码如果存入worker.txt中,那就可以随意被别人翻查到。解决方法——新建一个password.txt文档,并且每次让它隐藏起来。问题——修改密码:隐藏密码文档后,发现翻开失败了,第二次运行程序的时候就不能将修改的密码存入。解决方法——在每次要翻开密码文档前将其显示为可见文档,使用完关闭文件时立即将其隐藏起来。问题——查找、库显示、删除等函数里:例如在查找职工时,如果输入的职工不存在,这时候应该要返回主菜单,而不是直接退出程序。、解决方法——在选择功能的switch外面套一层while循环,只有中选择退出的时候才能退出,否那么在操作完一个功能例如查找完毕,或者查找时发现员工不存在直接跳出该函数,都能返回到主菜单。问题

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论