C++课程设计员工管理讲课教案.doc
Good is good, but better carries it.精益求精,善益求善。C+课程设计员工管理-淮阴工学院C+程序设计课程设计报告选题名称:员工管理系(院):计算机工程学院专业:软件工程班级:软件1111姓名:周淼学号:1111315217指导教师:于长辉学年学期:20112012学年第1学期2012年1月6日设计任务书课题名称员工管理设计目的1. 调研并熟悉幻方的基本功能、数据流程与工作规程;2. 学习与幻方相关的参考资料和基于VC+集成环境的编程技术;3. 通过实际编程加深对基础知识的理解,提高实践能力;4. 学习开发资料的收集与整理,学会撰写课程设计报告。实验环境1. 微型电子计算机(PC);2. 安装Windows2000以上操作系统,VisualC+6.0开发工具。任务要求1. 利用课余时间去图书馆或上网查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;2. 在第16周末之前完成预设计,并请指导教师审查,通过后方可进行下一步工作;3. 本课题主要实现添加、修改、删除、读出、写入、查找、排序等。4. 结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字(不含代码)。工作进度计划序号起止日期工作内容12012.1.22012.1.3在预设计的基础上,进一步查阅资料,完善设计方案,形成书面材料。22012.1.32012.1.4设计总体方案,构建、绘制流程框图,编写代码,上机调试。32012.1.42012.1.5测试程序,优化代码,增强功能,撰写设计报告。42012.1.52012.1.6提交软件代码、设计报告,参加答辩,根据教师反馈意见,修改、完善设计报告。指导教师(签章):年月日摘要:随着经济的快速发展,一个好的员工管理系统在企业及用人单位扮演者重要角色。因此,本次我设计的课题是员工管理系统。为了设计一个功能完善的的员工管理系统,我查阅图书,搜集了许多有关C+方面的资料,学会了switch语句的使用、全局对象数组(Person100)的定义、函数调用机制的实现等诸多技能,并且将一部分课外的知识运用于我的代码,例如:使程序运行稍作停顿(Sleep(1000))。在具体编程时,我没有使用链表结构,而是直接定义了一批全局对象数组,把员工信息通过函数储存在定义的全局对象数组中。也因为这样,使得编译时候错误发生的减少了很多。然而,在初步设计好该系统后,我发现这样的系统只能储存有限数目的员工信息,无法做到员工信息储存的不限量。但是考虑到实际应用,只要定义的全局对象数组达到200个就会足够企业使用。关键词:员工管理;全局对象数组;编程经验目录1课题综述-5-1.1课题来源-5-1.2课题意义-5-1.3预期目标-5-1.4面对的问题-5-1.5需要解决的关键技术-5-2总体方案-5-3系统设计-5-3.1.1算法描述-6-3.1.2实现方法-6-3.1.3详细设计-7-3.2员工管理系统程序模块设计-8-4代码编写-8-5程序调试-21-6问题与解决办法-22-总结-23-致谢-24-参考文献-25-1课题综述1.1课题来源现代社会经济发展迅速,不同类型人才在公司企业间的流动十分频繁,传统的纸质员工管理系统已不适合现阶段的实际情况。为此,必须通过设计新的更为便捷、操作简单、不受时空限制的员工管理系统来管理员工信息。否则既浪费时间,又不能适应经济社会发展。1.2课题意义设计一款新的员工管理系统,在实现系统添加、删除、查找、修改保存、排序等功能的同时,既锻炼了我实践操作能力,又增加了我对C+语言的熟悉程度,同时还初步了解了公司企业对员工的管理制度、增加了团队协作能力。1.3预期目标设计一个员工管理系统:定义一组全局对象数组;对部分全局对象数组进行操作;实现数据的输入、输出、查找、修改、删除、排序等。1.4面对的问题对VC环境下的系统编制程序不够熟悉,有的功能无法找到合适的代码,对部分临界数据的处理不够精确,代码的注释不能让他人完全理解。1.5需要解决的关键技术对部分全局对象数组进行操作,不影响其他已储存的数据。同时,要设计相应程序实现把数据储存在系统中,即使从新打开系统也要让数据存在。使用switch()语句实现函数的调用,最终实现系统的协调运作。2总体方案使用C+语言设计员工管理系统,通过函数调用方式使其能完成对员工的信息管理,对员工信息的任意添加(add())、查询(find())、删除(dele())、修改(modify())、保存(save())及排序(index())3系统设计3.1.1算法描述在主界面上选择相应操作项,通过运用switch语句来判断相应指令,实现对以下功能的选择1:add()添加员工信息2:modify()修改员工信息3:dele()删除员工信息4:index()排序员工信息5:find()查询员工信息6:save()保存员工信息。并用六个函数来实现各个部分的功能:voidadd();voidfind();voiddele();voidmodify();voidsave()和voidindex()。在执行完每一次数据操作后,通过判断程序,来判断是否返回等。如返回,则操作同开始,否则执行其他操作。3.1.2实现方法共同的基类person包含如下信息:classPersonpublic:Person()/构造函数voidsetPerson(char*num1,char*name1,char*sex1,char*birth1,char*tel1,char*salary1);/成员数据的修改函数;friendvoidadd();/声明为Person的友元,函数功能为:1.员工信息输入friendvoidmodify();/声明为Person的友元,函数功能为:2.员工信息修改friendvoiddele();/声明为Person的友元,函数功能为:3.员工信息删除friendvoidindex();/声明为Person的友元,函数功能为:4.员工信息排序friendvoidfind();/声明为Person的友元,函数功能为:5.员工信息查找friendvoidsave();/声明为Person的友元,函数功能为:6.员工信息保存friendvoidread();private:/声明编号、姓名、出生年月、性别、联系电话、基本工资等成员变量charnum15;charname15;charsex5;charbirth15;chartel15;charsalary15;在主函数中运用Switch(choice)选择需要的功能:switch(choice)case1:add();/1.员工信息输入break;case2:modify();/2.员工信息修改break;case3:dele();/3.员工信息删除break;case4:index();/4.员工信息排序break;case5:find();/5.员工信息查找break;case6:save();/6.员工信息保存break;default:run=0;break;3.1.3详细设计1.员工档案管理系统构建框架u 1、添加员工信息u 2、修改员工信息u 3、删除员工信息u 4、员工信息排序u 5、查找员工信息u 6、保存员工信息u 7、退出管理系统3.2员工管理系统程序模块设计模块一:头文件,变量定义,函数的声明对系统所使用的变量进行定义,对函数进行声明模块二:员工信息的添加voidadd()/1.添加员工信息模块三:员工信息修改voidmodify()/2.员工信息修改模块四:员工信息删除voiddele()/3.员工信息删除模块五:员工信息排序voidindex()/4.员工信息排序模块六:员工信息查找voidfind()/5.员工信息查找模块七:员工信息保存voidsave()/6.员工信息保存4代码编写#include<iostream>#include<string>#include<fstream>#include<iomanip>#include<windows.h>#include<stdlib.h>/字符转浮点atof()usingnamespacestd;intNUM=0;/计数员工的个数intsaveCtrl=1;/该变量用于检测数据的修改后是否保存的情况classPersonpublic:Person()/构造函数voidsetPerson(char*num1,char*name1,char*sex1,char*birth1,char*tel1,char*salary1);/成员数据的修改函数;friendvoidadd();/1.员工信息输入friendvoidmodify();/2.员工信息修改friendvoiddele();/3.员工信息删除friendvoidindex();/4.员工信息排序friendvoidfind();/5.员工信息查找friendvoidsave();/6.员工信息保存private:/声明编号、姓名、出生年月、性别、联系电话、基本工资等成员变量charnum15;charname15;charsex5;charbirth15;chartel15;charsalary15;PersonPer500;/声明全局Person对象数组voidPerson:setPerson(char*num1,char*name1,char*sex1,char*birth1,char*tel1,char*salary1)strcpy(num,num1);strcpy(name,name1);strcpy(sex,sex1);strcpy(birth,birth1);strcpy(tel,tel1);strcpy(salary,salary1);voidmenu()/主菜单cout<<setw(45)<<"员工管理系统"<<endl;cout<<endl;cout<<endl;cout<<setw(45)<<"1.员工信息添加"<<endl;cout<<setw(45)<<"2.员工信息修改"<<endl;cout<<setw(45)<<"3.员工信息删除"<<endl;cout<<setw(45)<<"4.员工信息排序"<<endl;cout<<setw(45)<<"5.员工信息查找"<<endl;cout<<setw(45)<<"6.员工信息保存"<<endl;cout<<setw(37)<<"0.退出"<<endl;cout<<"请选择(06):"cout<<setiosflags(ios:left)<<"请输入选择项(06):"<<endl;voidadd()/1.添加员工信息charnum15;/编号charname15;/姓名charsex5;/性别charbirth15;/生日chartel15;/电话charsalary15;/工资charp;/用于选择判断system("cls");/清屏while(1)/控制信息添加多次的循环cout<<"输入员工信息:"<<endl;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;cin>>num;cin>>name>>sex>>birth>>tel>>salary;for(inti=0;i<NUM;i+)/检测所添加员工的编号是否存在if(strcmp(Peri.num,num)=0)cout<<"该编号的已经存在"<<endl;system("pause");/按任意键继续return;p=0;cout<<"请选择:"<<'t'<<"1.确认添加数据"<<'t'<<"2.重新输入"<<'t'<<"3.返回主菜单"<<endl;cin>>p;/控制是否确认添加数据if(p<'1'|p>'3')cout<<"没有这个选项!"<<'n'<<"请重新输入:"<<endl;continue;if(p='2')/重新输入数据continue;if(p='3')/返回主菜单return;PerNUM.setPerson(num,name,sex,birth,tel,salary);cout<<"添加数据成功!"<<endl;saveCtrl=0;NUM+;cout<<"是否返回主菜单(y/n)"cin>>p;/返回主菜单if(p='y'|p='Y')return;voidmodify()/2.员工信息修改system("cls");/清屏if(NUM=0)/判断员工数是否为0,即是否存在员工记录,若无记录,则退出函数cout<<"没有任何员工记录。"<<"即将返回主菜单"Sleep(1000);return;charnum15;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;for(inti1=0;i1<NUM;i1+)/列出现有的员工的详情,方便修改cout<<Peri1.num<<'t'<<Peri1.name<<'t'<<Peri1.sex<<'t'<<Peri1.birth<<'t'<<Peri1.tel<<'t'<<Peri1.salary<<endl;cout<<"请输入要修改的员工的编号:"cin>>num;intchoice;for(inti=0;i<NUM;i+)if(strcmp(Peri.num,num)=0)dosystem("cls");/清屏cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;cout<<Peri.num<<'t'<<Peri.name<<'t'<<Peri.sex<<'t'<<Peri.birth<<'t'<<Peri.tel<<'t'<<Peri.salary<<endl;cout<<setw(45)<<"员工管理系统"<<endl;cout<<setw(45)<<"1.修改编号"<<endl;cout<<setw(45)<<"2.修改姓名"<<endl;cout<<setw(45)<<"3.修改性别"<<endl;cout<<setw(45)<<"4.修改生日"<<endl;cout<<setw(45)<<"5.修改电话"<<endl;cout<<setw(45)<<"6.修改工资"<<endl;cout<<setw(45)<<"7.返回主菜单"<<endl;cout<<"请选择(07):"cout<<"请选择:"cin>>choice;if(choice<0|choice>7)continue;switch(choice)case1:cout<<"请输入新的员工编号:"cin>>Peri.num;saveCtrl=0;break;case2:cout<<"请输入新的员工姓名:"cin>>Peri.name;saveCtrl=0;break;case3:cout<<"请输入新的员工性别:"cin>>Peri.sex;saveCtrl=0;break;case4:cout<<"请输入新的员工生日:"cin>>Peri.birth;saveCtrl=0;break;case5:cout<<"请输入新的员工电话:"cin>>Peri.tel;saveCtrl=0;break;case6:cout<<"请输入新的员工工资:"cin>>Peri.salary;saveCtrl=0;break;case7:return;while(choice<7);voiddele()/3.员工信息删除system("cls");/清屏if(NUM=0)/判断员工数是否为0,即是否存在员工记录,若无记录,则退出函数cout<<"没有任何员工记录。"<<"即将返回主菜单"<<endl;Sleep(1000);return;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;for(inti1=0;i1<NUM;i1+)/列出现有的员工的详情,方便删除if(Peri1.num!=NULL)cout<<Peri1.num<<'t'<<Peri1.name<<'t'<<Peri1.sex<<'t'<<Peri1.birth<<'t'<<Peri1.tel<<'t'<<Peri1.salary<<endl;charnum15;Persontemp;cout<<"请输入要删除的员工的编号"<<endl;cin>>num;for(inti=0;i<NUM;i+)if(strcmp(Peri.num,num)=0)temp=Peri;for(intj=i;j<NUM-1;j+)Perj=Perj+1;NUM-;break;cout<<"删除成功!"<<endl;system("pause");/按任意键继续saveCtrl=0;voidindex()/4.员工信息排序system("cls");/清屏if(NUM=0)/判断员工数是否为0,即是否存在员工记录,若无记录,则退出函数cout<<"没有任何员工记录。"<<endl;cout<<"即将返回主菜单"<<endl;Sleep(1000);return;Persont;intk=0;intchoice;cout<<"请选择:"<<'t'<<"1.按编号排序"<<'t'<<"2.按工资排序"<<endl;cin>>choice;if(choice=1)for(inti=0;i<NUM-1;i+)/选择排序法,对员工的编号进行排序k=i;for(intj=i+1;j<NUM;j+)if(atof(Perk.num)>atof(Perj.num)k=j;t=Perk;Perk=Peri;Peri=t;cout<<"按员工的编号排序结果"<<endl;elseif(choice=2)for(inti1=0;i1<NUM-1;i1+)/选择排序法,对员工的工资进行排序k=i1;for(intj1=i1+1;j1<NUM;j1+)if(atof(Perk.salary)<atof(Perj1.salary)k=j1;t=Perk;Perk=Peri1;Peri1=t;cout<<"按员工的工资排序结果"<<endl;elsecout<<"没有这个选项!"<<"即将返回主菜单!"<<endl;Sleep(1000);return;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;for(inti1=0;i1<NUM;i1+)if(Peri1.num!=NULL)cout<<Peri1.num<<'t'<<Peri1.name<<'t'<<Peri1.sex<<'t'<<Peri1.birth<<'t'<<Peri1.tel<<'t'<<Peri1.salary<<endl;system("pause");/按任意键继续saveCtrl=0;voidfind()/5.员工信息查找system("cls");/清屏if(NUM=0)/判断员工数是否为0,即是否存在员工记录,若无记录,则退出函数cout<<"没有任何员工记录。"<<"即将返回主菜单"<<endl;Sleep(2000);return;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;for(inti1=0;i1<NUM;i1+)cout<<Peri1.num<<'t'<<Peri1.name<<'t'<<Peri1.sex<<'t'<<Peri1.birth<<'t'<<Peri1.tel<<'t'<<Peri1.salary<<endl;charnum15;intfound=0;/用于检测是否找到该编号员工cout<<"请输入员工编号:"cin>>num;for(inti=0;i<NUM;i+)if(strcmp(Peri.num,num)=0)system("cls");cout<<"查询结果"<<endl;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;cout<<Peri.num<<'t'<<Peri.name<<'t'<<Peri.sex<<'t'<<Peri.birth<<'t'<<Peri.tel<<'t'<<Peri.salary<<endl;found=1;if(found=0)/如果未找到该编号员工system("cls");cout<<"未找到编号为:"<<num<<"的该员工!"<<"即将返回主菜单!"<<endl;Sleep(1000);return;system("pause");/按任意键继续voidsave()/6.员工信息保存system("cls");/清屏ofstreamfout;fout.open("E:worker.txt",ios:out);cout<<"正在保存,请稍等"<<endl;Sleep(1000);system("cls");/清屏cout<<"数据保存保存成功!"<<endl;if(NUM)/判断是否存在员工记录,若无记录,则执行elsecout<<"文件的数据为:"<<endl;cout<<"编号"<<"姓名"<<"性别"<<"生日"<<"电话"<<"工资"<<endl;for(inti=0;i<NUM;i+)/列出现有的员工的详情,方便检测保存是否正确和存入文件操作同时进行cout<<Peri.num<<'t'<<Peri.name<<'t'<<Peri.sex<<'t'<<Peri.birth<<'t'<<Peri.tel<<'t'<<Peri.salary<<endl;fout<<Peri.num<<'t'<<Peri.name<<'t'<<Peri.sex<<'t'<<Peri.birth<<'t'<<Peri.tel<<'t'<<Peri.salary<<endl;elsecout<<"提示:目前无任何员工的记录!"<<endl;fout.close();system("pause");/按任意键继续saveCtrl=1;intmain()intchoice;intrun=1;while(run)system("cls");/清屏menu();/显示主菜单cin>>choice;if(choice<0|choice>7)continue;switch(choice)case1:add();/1.员工信息输入break;case2:modify();/2.员工信息修改break;case3:dele();/3.员工信息删除break;case4:index();/4.员工信息排序break;case5:find();/5.员工信息查找break;case6:save();/6.员工信息保存break;default:run=0;break;system("cls");/清屏if(saveCtrl=0)cout<<"你没有对你的操作进行保存,是否保存?"<<endl;cout<<"请输入(y/n):"charp;cin>>p;if(p='y'|p='Y')save();system("cls");/清屏cout<<"谢谢使用"<<'t'<<"员工管理系统"<<'t'<<"再见!"<<endl;return0;5程序调试6问题与解决办法1、调试过程中遇到的主要问题及解决方法:在编译过程中执行了部分代码,经常发生系统崩溃的现象。通过询问老师和小组成员,我找到了其原因。那就是我调用了系统内未被定义的位置的全局对象数组。一维没有定义,自然在执行时发生错误。后来我在定义全局对象数组时,从分考虑到这一点,一开始便定义较多的全局标量数组,所以再后来的程序执行过程中很少发生系统崩溃的事。除了上面的问题,还有一个典型的问题也困惑了我很久。那就是每次调用函数后,屏幕上都现实的密密麻麻,很难一眼看出光标在哪里闪烁。为此,我专门跑去图书馆查阅资料。甚至有天晚上差点被图书馆的管理人员锁在馆内。但是,功夫不负有心人,终于让我在一本有关C+实验的书本中找到了清屏的代码(system("cls")),回头使用了这段代码,屏幕变的清爽又美观了。2、对设计和编码的回顾讨论和分析:按照该程序的内容、任务及要求,定义一个全局对象数组,操作类实现如下功能:显示菜单,操作对象。通过类的组合实现程序所要求的功能,并用文件存储数据,用中的文件处理函数。总结这次的C+课程设计,最然经历的时间不是很久,但是所涉及的知识却是十分广泛的。本次的课程设计,我设计的是员工管理系统,我相信我的作品会在完善之后得到推广和使用。首先,我的这个系统能够实现随时随地的对员工信息的添加、修改、删除、查找、排序保存等。这些功能完全满足普通企业对员工信息的管理。说道最让我难忘的,要属代码的编写了。在以前我编写代码都是在屏幕上按照从上到下顺序写的,中间不会返回补充或修改,但是在这次的课程设计中我发现这种编写方式一来容易出错,二来很难找到思路,尤其是在函数调用机制实现这一块,如果不按照先总体后详细的思路去写,根本写不了代码。因此,我在本次课程设计中,首先制定了总体框架,列出了主函数中所包含的内容及索要调用的函数。然后在这个框架下,完善了每一个调用函数中的详细信息,最终通过细心组合,很轻松的组合形成了可供执行的系统。当我初步设计好员工管理系统后,我发现我的管理项目里面没有薪水这一项,而这一项为员工不可或缺的信息,为此,我专门从头又把代码修改一遍。但是修改后,系统又不能识别其他组员设计的代码,造成了很大不便。因此,在日后的编程中,我会吸取教训,在编程之前就和团队其他成员商定好各项事宜,加强协作。在我的系统中,没有使用结构链表,反而使用了很多全局对象数组,这也在某种程度上造成了硬件资源的浪费。因此下一步我将集中注意力去思考解决如何实现同链表那样把全局对象数组进行任意增删,而不是在程序执行前就定义较多的全局对象数组。总体来说我本人对此次课程设计较为满意。在这次的课程设计中,我学会了很多,也体会到编程的乐趣,激发了编程设计的很多灵感。以后如果还有类似活动我会毫不犹豫的参加。致谢本次的课程设计我顺利的完成了,因此首先我要感谢我的团队成员和老师,如果没有团队成员的帮助、没有老师的指导我根本不可能完成这个管理系统。他们既给了我心理上的帮助,又给我提供了技术上的支持。在我编程遇到困难时,他们给了我很大支持。在此我表示衷心的感谢。除了老师、同学,我还要感谢淮阴工学院,感谢淮阴工学院计算机工程学院给我提供了这个学习、实践的机会。为了帮助我顺利完成课程设计,学校给我提供了干净宽敞的机房,里面的设施很棒,让我得以安心投入到课程设计中去。同样,我要感谢学校的图书馆,它书目齐全,种类繁多,在那里能查找到很多对我有益的代码,为我完成课程设计提供了知识基础。在这里,我要特意感谢我的C+于长辉于老师。她一直在一旁为我做指点,从不计较什么,十分无私,这也是让我最感动的地方。此外,她每天按时到机房督促我,还为我提供最详细的讲解。使我的编程能力进一步提高,对程序的了解更深入。这种无私奉献精神,不仅给我树立了榜样,也为我对未来编程充满信心和期待。最后,请允许我向所有帮助我完成课程设计的人说一声:谢谢你们,你们辛苦了!参考文献1. C+实验指导书2. 吴昊亮,李刚VisualC+程序设计教程20033. 钱能,C+程序设计教程(修订版)清华大学出版社4. 张岳新,VisualC+程序设计苏州大学出版社5. 龚沛曾,杨志强C/C+程序设计教程高等教育出版社2005指导教师评语学号1111315217姓名周淼班级软件1111选题名称员工管理系统序号评价内容权重(%)得分1考勤记录、学习态度、工作作风与表现。上网检索机时数、文献阅读情况(笔记)。论文选题是否先进,是否具有前沿性或前瞻性。202成果验收:是否完成设计任务;能否运行、可操作性如何等。203报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分