C++课程设计职工工资管理系统(报告内含程序完整清单)_第1页
C++课程设计职工工资管理系统(报告内含程序完整清单)_第2页
C++课程设计职工工资管理系统(报告内含程序完整清单)_第3页
C++课程设计职工工资管理系统(报告内含程序完整清单)_第4页
C++课程设计职工工资管理系统(报告内含程序完整清单)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

-.z.目录TOC\o"2-3"\h\z\t"标题1,1,次标题,1"目录i1概述11.1程序的基本功能1HYPERLINK\l"_Toc282091170"1.2其它功能11.3扩展功能12课题的分析22.1会员登入系统模块即systemhead静态全局函数模块22.2查询功能模块即search函数模块22.3职务信息匹配及处理模块即systembody静态全局函数模块模块422.4循环控制模块即while(1)模块23详细设计33.1类声明33.2系统简略流程图79\h43.3会员登入系统模块即systemhead静态全局函数模块53.4查询功能模块即search函数模块63.5职务信息匹配及处理模块即systembody静态全局函数模块73.6循环控制模块即while(1)模块74课程设计总结84.1完成情况84.2遇到的问题及解决8参考文献11附录12-.z.概述本课程设计是《面向对象程序设计》课程的后继教学环节,学好C++语言就必须坚持用面向对象的思维方式分析问题、解决问题,最好的方法是仿照教材编写C++实际应用程序。此次课程设计的题目及要求:实现一个简单的工资管理系统。程序的基本功能系统的主要功能是计算职工当月工资并存档。公司内有5种不同类型的职工:技术人员、销售人员、文秘、技术经理和销售经理,他们的工资计算方式各不相同。其它功能将工资信息存入salary.t*t文件中,工资信息包含雇员编号、、职务、月份、月收入。Info.t*t文件中只存留一些信息及会员最后进入系统时输入的数据,最多含有编号、、职务、月份的信息。扩展功能采用了会员制度,并将登入信息及编号、密码存入number.t*t文件中。课题的分析通过对课题的深入分析,我将这个课题分为以下几个模块,深入详细得剖析它们。会员登入系统模块即systemhead静态全局函数模块程序运行后,先进行会员选择判断。为减少会员重新注册,通过输入两次编号及密码,增加繁琐度。同时在一定的方面上,又方便忘记密码的会员。通过密码匹配,雇员的工资信息这一隐私得到了很好的保障。查询功能模块即search函数模块首先,从info.t*t中提取编号,与salary.t*t中的编号进行匹配,匹配成功,输出工资信息,直到文件!indata.eof()==0。.职务信息匹配及处理模块即systembody静态全局函数模块模块4从info.t*t中提取职务信息,用switch语句进行匹配,据匹配情况调用不同的函数进行输入、处理、显示并以增加方式记录到salary.t*t中。循环控制模块即while(1)模块为了更加方便使用,尽量改善系统,实现search函数及systembody函数功能,在search函数及systembody函数模块的基础上加了一些必要的语句,并增加了外层循环控制。详细设计作为一个面向对象程序设计,我们不得不先从类的声明开始设计,而后是一个整体的流程图做框架。最后在从小的模块结构着手。classTechManager:publicTechnician,publicManager{private:floatgradeBonus;classTechManager:publicTechnician,publicManager{private:floatgradeBonus;intgrade;public:TechManager(float*=1000);voidsetgrade(float*);voidcountSalary();};图3.1类声明图3.2职工工资管理系统简略流程图系统简略流程图图3.2职工工资管理系统简略流程图开始优点:一个入口,一个出口!处理5输入5输入4输入3输入2输入1处理4处理3处理2处理1工资记录在salary.t*t职务代码分析显示真10查询信息选择?开始优点:一个入口,一个出口!处理5输入5输入4输入3输入2输入1处理4处理3处理2处理1工资记录在salary.t*t职务代码分析显示真10查询信息选择?是否会员否是否会员否注册注册是是输入编号及密码输入编号及密码假检验?假检验?真真输入姓名、职务、月份输入姓名、职务、月份记录编码姓名职务月份至info.t*t记录编码姓名职务月份至info.t*t从info.t*t提取职务代码从info.t*t提取职务代码再次输入再次输入假结束假结束会员登入系统模块即systemhead静态全局函数模块清空info.t*t并将编号存入到info.t*t中清空info.t*t并将编号存入到info.t*t中图3.3登入系统模块详细流程图否是否会员输入编号及密码打开name.t*t并输出编号及密码匹配?关闭name.t*t否是以增加方式打开name.t*t并输入编号及密码关闭name.t*t.输入编号及密码查询功能模块即search函数模块110否是输出info.t*t中的职务信息将info.t*t的编号与salary.t*t中的编号进行匹配是否打开info.t*t!indata.eof()?图3.4查询功能模块以默认方式打开info.t*t以默认方式打开salary.t*t从文件info.t*t中提取编号并关闭文件输出"以上是你的工资信息!”关闭salary.t*t职务信息匹配及处理模块即systembody静态全局函数模块图3.5systembody函数模块图3.5systembody函数模块以默认方式打开info.t*t提取info.t*t中的职务信息switch语句进行职务匹配调用不同函数进行数据处理及显示循环控制模块即while(1)模块图3.6循环控制模块即while(1)模块图3.6循环控制模块即while(1)模块102输入选择操作查询功能模块Info及recordinfo调用systembody调用选择?结束课程设计总结完成情况本次面向对象课程设计的所有功能基本完成,并且扩展功能也成功的实现!可执行文件能正常执行指令并运行!遇到的问题及解决图错误[Error]C:\Users\权\Desktop\main.o(.data$_vt$8Employee+0*c):main.cpp:undefinedreferenceto`Employee::countSalary(void)'错误:没有定义Employee类中的countSalary函数!改正:将原先的"virtualvoidcountSalary();”改为”virtualvoidcountSalary(){}”图错误错误分析:(会员板块中)提示:"数字1表示是!其他键表示否!”,但定义的选择变量为整型。加上我当时输入字符p。改正:"其他键表示否!”改为”数字0表示否”。输入时按提示进行输入即可!图错误调试分析:错误发生在systemhead静态全局函数内的文件输入循环模块中!改正:将以nocreate方式即”ifstreamindata("d:\\number.t*t",ios::nocreate);"该为默认打开方式即"ifstreamindata("d:\\number.t*t");”。图错误调试分析:错误发生在调用systembody静态全局函数前后的while循环模块中,很有可能是数据存取混乱造成的。改正:systemhead静态全局函数内"ofstreamoutdata("d:\\info.t*t",ios::trunc);”改为先清后在以默认方式输入!且将存取整型编号的变量类型从字符型改为整型。图错误错误:后面莫名其妙的跟着一个提示语句指令。分析调试:当语句指令是基类info函数内的语句,很有可能是循环控制出现了一些问题。改正:见程序源代码!参考文献下面给出几个参考文献的格式参考匿名,不知道,非常多.计算机实用教程.:**大学出版社,2004,123~234[美]DonisSomething.Visual*#2008技术内幕.:YYY大学出版社,2007,56~78JohnsSmith,JamesNothing.ProgramminginC++orAnythingandSomething..worldplus/nothing/inde*.html2007Anonymous.SomethingtoSay..somewhere./something.html2007《面向对象程序设计》,郑莉,清华大学出版社,《面向对象程序设计C++语言》,朱战立等编西安电子科技大学出版社《面向对象程序设计VisualC++》,刘斌等编,清华大学出版社《面向对象程序设计C++语言描述》,RichardJohnsonbaugh(美)等著,蔡宇辉等译,机械工业出版社,2003附录本系统有三个源程序文件构成,分别为system.h,system.cpp及main.cpp。同时含有三个系统文件,分别为info.t*t,name.t*t及salary.t*t,且全部存放在D盘根目录下,请勿随意移动或修改系统文件。当会员正式进入系统,info.t*t是先清空后用来存储会员输入的信息,最多含有编号、、职务及月份。当仅会员注册时,会将编码及密码存储到name.t*t中。当仅会员登入的编号及密码进行匹配时,会打开输入文件name.t*t,提取编号及密码,进行匹配。当仅当输入工资数据时,会将工资、编号、、职务、月份存储到salary.t*t中。当仅当查询工资信息时,会打开salary.t*t,提取编号、、职务、月份及工资。该系统是一个只适合5种及5种职务的工资管理系统。并将职务分为技术人员、销售人员、文秘、技术经理和销售经理,其代号分别为1,2,3,4,5。雇员编号以整型变量存储,编号所取范围在-65536至65535之内(包括边界值),首位数字表示相应的职务代码。该系统能力有限,请根据指示严格输入相应字符!程序清单Main函数#include"system.cpp"#include"cstring"staticvoidsystemhead();staticvoidsystembody();staticvoidtechnician();staticvoidsalesman();staticvoidsecretary();staticvoidtechmanager();staticvoidsalesmanager();usingnamespacestd;voidmain(){ systemhead();//调用systemhead静态全局函数 cout<<"\n\n1:查询工资"; cout<<"\n\n2:输入工资数据"; cout<<"\n\n0:退出系统!\n\n"; cout<<"请选择您需要的操作!!\n"; while(1) {int*uanze; cin>>*uanze; if(*uanze==1) { employeea; cout<<endl<<endl; a.search(); cout<<"\n\n输入工资数据请按数字2,退出系统请按数字0!\n\n"; }//查询工资信息 if(*uanze==2) { employeea; (); a.recordinfo();//输入处理工资数据并暂时记录 systembody();//调用systembody静态全局函数 cout<<"\n\n查询工资请按数字1,退出系统请按数字0!\n\n"; } if(*uanze==0)e*it(0); }}staticvoidsalesmanager(){ SalesManagera5; floatsum; cout<<"请输入整个月的总营业额:"; cin>>sum; a5.setsalesnum(sum); a5.countSalary(); a5.recordSalary();}staticvoidtechmanager(){ TechManagera4; intgra; cout<<"请输入这个月的评级:";//1,2,3三个等级 cin>>gra; a4.setgrade(gra); a4.countSalary(); a4.recordSalary(); }staticvoidsecretary(){ Secretarya3; floatbon; cout<<"请输入这个月的额外奖励:"; cin>>bon; a3.setbonus(bon); a3.countSalary(); a3.recordSalary();}staticvoidsalesman(){ Salesmana2; floatsum; cout<<"请输入整个月的营业额:"; cin>>sum; a2.setsalesnum(sum); a2.countSalary(); a2.recordSalary();}staticvoidtechnician(){ Techniciana1; floathour; cout<<"请输入整个月的工作时间:"; cin>>hour; a1.setHour(hour); a1.countSalary(); a1.recordSalary();}staticvoidsystembody(){ ifstreamindata("info.t*t"); if(indata==NULL)e*it(0); intnum; charna[25]; intsta; indata>>num>>na>>sta;//职务代号分别为1,2,3,4,5 switch(sta) { case1:technician();break; case2:salesman();break; case3:secretary();break; case4:techmanager();break; case5:salesmanager();break; default:cout<<"职务代号错误!\n请重新输入!"; }}staticvoidsystemhead(){ char*,y='y'; intnum; charsecret[6]; while(y) { cout<<"\n\n系统会员请输入'y',非系统会员请输入‘n’\n"; cin>>*; if(*){ cout<<"请输入编号(首位为职务代号且为不超过5位数的整数):\n"; cin>>num; cout<<"请输入密码(6及6位字符以下):\n"; cin>>secret;//输入编号及密码 ifstreamindata("number.t*t"); if(indata==NULL) { cout<<"文件打开失败!请联系管理员!\n";e*it(0);//文件没打开,退出程序 } intnum1;charsecret1[6]; indata>>num1; while(!indata.eof()) { indata>>secret1; if((num==num1)&&(strcmp(secret,secret1)==0)) { y=0;//改变判断变量的值,停止外层循环 break;//终止内层循环 } indata>>num1; } indata.close();//检验登入信息 } else { cout<<"请输入编号(首位为职务代号且为不超过5位数的整数):\n"; cin>>num; cout<<"请输入密码(6及6位字符以下):\n"; cin>>secret;//注册输入编号及密码 ofstreamoutdata("number.t*t",ios::app); outdata<<num<<'\t'<<secret<<'\t'; outdata.close();//将编号及密码保存到number.t*t中 cout<<endl<<endl; } }ofstreamoutdata("info.t*t",ios::trunc);outdata.close();//清空文件内容 ofstreamoutdata1("info.t*t"); outdata1<<num<<'\t'; outdata.close();//输入编号至info.t*t}System.cpp#include<iostream>#include<fstream>#include"system.h"usingnamespacestd;voidEmployee::info(){ charna[25];intsta,mon; cout<<"请依次输入姓名、职务代号及月份(以空格符分隔):"; cin>>na>>sta>>mon; name=na;status=sta;month=mon;//存储姓名、职务、月份}voidEmployee::search(){ intnum; ifstreamindata0("info.t*t"); if(indata0==NULL)e*it(0); indata0>>num; indata0.close();//从文件info.t*t中提取编号 intnum1;charna1[25];intsta1;intmon1;floatsal; intmon0; ifstreamindata("salary.t*t"); if(indata==NULL)e*it(0); while(!indata.eof()) { indata>>num1>>na1>>sta1>>mon1>>sal; if(num==num1) cout<<num1<<'\t'<<na1<<'\t'<<sta1<<'\t'<<mon1<<'\t'<<sal<<'\n'; //依次输出该雇员的工资信息 } if(indata.eof()) cout<<"\n\n以上是你的工资信息!\n\n"; indata.close();}voidEmployee::recordinfo(){ ofstreamoutdata("info.t*t",ios::app); outdata<<name<<'\t'<<status<<'\t'<<month; outdata.close();//添加姓名、职务、月份至存有编号的info.t*t中}voidEmployee::recordSalary(){ ifstreamindata("info.t*t"); indata>>number>>name>>status>>month; indata.close();//依次输出该雇员的工资信息 intnum1;charna1[25];intsta1;intmon1;floatsal; ifstreamindata1("salary.t*t"); if(indata1==NULL)e*it(0); while(!indata1.eof()) { indata1>>num1>>na1>>sta1>>mon1>>sal; if(month!=mon1) cout<<num1<<'\t'<<na1<<'\t'<<sta1<<'\t'<<mon1<<'\t'<<sal<<'\n'; else e*it(0); //依次输出该雇员的工资信息 } cout<<number<<'\t'<<name<<'\t'<<status<<'\t'<<month<<'\t'<<salary; //显示工资信息 ofstreamoutdata("salary.t*t",ios::app); outdata<<'\n'<<number<<'\t'<<name<<'\t'<<status<<'\t'<<month<<'\t'<<salary; outdata.close(); }voidTechnician::setHour(float*){ workHour=*;}Technician::Technician(float*){ hourSalary=*;}voidTechnician::countSalary(){ salary=workHour*hourSalary;}voidSalesman::setsalesnum(float*){ salesnum=*;}Salesman::Salesman(float*){ getRate=*;}voidSalesman::countSalary(){ salary=salesnum*getRate;}voidSecretary::setbonus(float*){ bonus=*;}Secretary::Secretary(float*){ fi*edSalary=*;}voidSecretary::countSalary(){ salary=fi*edSalary+bonus;}Manager::Manager(float*){ fi*edSalary=*;}voidTechManager::setgrade(int*){ grade=*;}TechManager::TechManager(float*){ gradeBonus=*;}voidTechManager::countSalary(){ salary=fi*edSalary+grade*gradeBonus;}SalesManager::SalesManager(float*){ getRate=*;}voidSalesManager::countSalary(){ salary=fi*edSalary+salesnum*getRate;}voidTechnician::setHour(float*){ workHour=*;}Technician::Technician(float*){ hourSalary=*;}voidTechnician::countSalary(){ salary=workHour*hourSalary;}voidSalesman::setsalesnum(float*){ salesnum=*;}Salesman::Salesman(float*){ getRate=*;}voidSalesman::countSalary(){ salary=salesnum*getRate;}voidSecretary::setbonus(float*){ bonus=*;}Secretary::Secretary(float*){ fi*edSalary=*;}voidSecretary::countSalary(){ salary=fi*edSalary+bonus;}Manager::Manager(float*){ fi*edSalary=*;}voidTechManager::setgrade(int*){ grade=*;/

温馨提示

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

评论

0/150

提交评论