版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
35/40成绩评定表学生姓名初珊珊班级学号1203060111专业通信工程课程设计题目小型人员信息治理系统的设计与实现评语组长签字:成绩日期20年月日课程设计任务书学院信息科学与工程专业通信工程学生姓名初珊珊班级学号1203060111课程设计题目小型人员信息治理系统的设计与实现实践教学要求与任务某小型公司要紧有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级不、当月薪水,计算月薪总额并显示全部信息。人员编号基数为1000,每输入一个人员信息编号顺序加1。程序要有对所有人员提升级不的功能。本例中为简单起见,所有人员的初始级不均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级。月薪计算方法是:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员差不多信息,并依照这些差不多信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。要求编写程序实现上述功能,同时能够通过实例演示上述功能。工作打算与进度安排第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收。指导教师:201年月日专业负责人:201年月日学院教学副院长:201年月日摘要C++是支持面向过程的设计,更是支持基于对象和面向对象的程序设计。类是C++中十分重要的概念,它是实现面向对象程序设计的基础。本文采纳虚基类及其派生类实现了对小型人员信息的治理,类的封装性和信息隐蔽性能够专门好的爱护公司职员的信息,同时采纳了VisualC++6.0的操纵台工程和MFC工程实现了对职员差不多信息的输入和全部信息的输出及保存。关键词:信息治理;类;操纵台工程;MFC工程
目录1需求分析 12算法差不多原理 13类设计 24基于操纵台的应用程序 34.1类的接口设计 44.2类的实现 74.3主函数设计 114.4基于操纵台的应用程序测试 125基于MFC的应用程序 145.1基于MFC的应用程序设计 155.1.1MFC程序界面设计 155.1.2MFC程序代码设计 165.2基于MFC的应用程序测试 21结论 23参考文献 241需求分析(1)对小型公司进行小型人员信息操作治理系统。该公司要紧有四类人员:经理、销售经理、兼职技术人员、兼职推销员;定义一个虚基类同时派生四个子类。(2)系统需要存储这些人员的姓名、编号、级不、当月薪水,输入差不多信息,计算月薪总额,显示并保存全部信息;每个派生类的构造函数要实现对其特有数据成员的初始化。(3)系统具体要求:①编号要求:人员编号基数为1000,每输入一个职员姓名编号加1;编号定义为全局静态变量即可。②级不要求:所有人员的初始级不均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,兼职推销员为1级;直接对级不赋值即可。③月薪要求:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4%提成;销售经理既拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。④总体要求:为每一类人员单独建立文件,并在每个文件中手工录入一些人员差不多信息,并依照这些差不多信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。2算法差不多原理(1)定义一个职员虚基类Employmee(),包括职员姓名、级不、编号月薪共有的差不多数据成员;(2)在基类的基础上派生出经理Mansger()类、销售经理Salemansger()类、兼职技术人员Technology()类和兼职推销员Saleman()类,并在这四个派生类中添加各自数据成员和成员函数。具体分析如下:①职员编号的能够定义全局静态变量staticintcount=0;同时初始化职员编号number=1000+count;每输入一个职员的姓名编号加1。②职员等级按照要求直接赋值即可;③在派生类的构造函数中初始化数据成员同时按照要求计算各成员的月薪。(3)定义一个结构体链表structLinked,并将链表的头指针头封装在友元类Head()中。(4)运行时构造对象指针,并存在链表中,利用类中的成员函数来实现对链表节点的打印、添加、保存。这些操作均作为数据结构中对单链表的操作。3类设计首先定义一个职员基类Employee,由于要派生出多个子类,因此将其定义为虚基类;在类外定义全局静态变量,用于记录职员的编号。虚基类Employee中的数据成员包括姓名、编号、等级、月薪。虚基类的成员函数包括打印函数printf(),并声明友元类。然后派生出经理Mansger类、销售经理Salemansger类、兼职技术人员Technology类和兼职推销员Saleman类。在派生类Mansger的构造函数直接对月薪和等级赋值:月薪8000,等级4;在派生类Salemansger的构造函数中定义特有的数据成员:销售总额sum1,并依照要求计算月薪,等级赋值3;在派生类Technology的构造函数中定义特有的数据成员:工作时刻time,并依照要求计算月薪,等级赋值3;在派生类Saleman的构造函数中定义特有的数据成员:销售额sum2,并依照要求计算月薪,等级赋值1。派生类的功能有打印函数printf(),储存函数save()。友元类Head存放的数据成员有Linkedtop,功能有构造函数Head()、插入函数Insert()、打印函数printf()以及析构函数~Head();其中功能构造函数用来开发储存空间,插入函数采纳单链表现实信息的输入,打印函数用来输出录入职员的全部信息,析构函数用来释放空间。基类与各派生类之间的关系如下图所示: charname[30]; charname[30]; intnumber; intlevel; floatwages;Employee()voidprintf()friendclassHeadvoidsave()voidprintf()friendclassHeadintsum1Salemansger():Employee()voidsave()Technology():Employee()floattimevoidprintf()friendclassHeadvoidsave()intsum2Saleman():Employee()voidprintf()friendclassHeadvoidsave()Mansger():Employee()图1Employee类和其派生类关系的图形表示在程序实现过程中,各派生类的成员函数需要访问基类Employee的数据成员,利用公有继承方式派生,同时将Employee类中的数据成员的访问操纵设置为爱护类型。如此,通过公有派生之后,基类的爱护成员在派生类中依旧是爱护成员,能够被派生类的成员函数访问。4基于操纵台的应用程序整个程序分为三部分,各种职员的类,结构体链表以及封装在结构体链表的类。实现时先生成各种职员的对象指针,之后将生成的对象指针插入到链表中,最后通过封装类类的成员函数对链表节点进行操作,实现对职员的操作。4.1类的接口设计#include<iostream>#include<string.h>#include<fstream>usingnamespacestd;staticintcount=0;//全局动态变量,用于记录职员编号//定义虚基类classEmployee{public:Employee()//构造函数,初始化职员差不多信息 {cout<<"请输入职员姓名:"; cin>>name; ++count; number=count+1000; level=1; } voidprintf();//打印函数 friendclassHead;//声明友元类protected://数据成员为爱护类型 charname[30]; intnumber; intlevel; floatwages;};//派生类MansgerclassMansger:publicvirtualEmployee{public:Mansger():Employee(){level=4;wages=8000;}//构造函数定义 voidsave();//储存函数 voidprintf();//打印函数 friendclassHead;//声明友元类};//派生类SalemansgerclassSalemansger:publicvirtualEmployee{public:Salemansger():Employee()//构造函数定义 {level=3; cout<<"输入月部门销售总额:"; cin>>sum1; wages=5000+0.005*sum1;//计算销售经理工资 }voidsave();//储存函数 voidprintf();//打印函数 friendclassHead;protected: intsum1;//销售总额};//派生类TechnologyclassTechnology:publicvirtualEmployee{public:Technology():Employee()//构造函数定义 {level=3; cout<<"输入该技术人员的工作时刻:"; cin>>time; wages=100*time;//计算技术人职员资 } voidsave();//储存函数 voidprintf();//打印函数 friendclassHead;protected: floattime;//工作时刻};//派生类SalemanclassSaleman:publicvirtualEmployee/{public:Saleman():Employee()//构造函数定义 {level=1; cout<<"输入部门月销售总额:"; cin>>sum2; wages=0.04*sum2;//计算销售职员资 }voidsave();//储存函数 voidprintf(); friendclassHead;protected: intsum2;//销售总额};//定义友元类classHead{public:Head();//构造函数 voidInsert(Employee*temp);//单链表的插入函数 voidprintf();//打印函数 ~Head();//析构函数private: Linked*top;//单链表的头结点};通过公有派生,四个派生类获得了除构造函数之外的Employee类的全部成员,由于基类的成员是公有和爱护类型,因此在派生类中的成员函数中,基类继承来的成员全部能够访问,而关于建立派生类对象的外部模块来讲,基类的爱护成员是无法访问的。通过爱护访问类型和公有的继承方式,实现了基类Employee的数据的有效共享和可靠爱护。友元类能够实现外部函数对类中数据成员的调用,在程序中,职员的差不多信息的输入,全部信息的保存差不多上在基类、派生类的构造函数以及友元类的成员函数中完成,它们的清理工作在友元类析构函数中完成。4.2类的实现//基类输出函数voidEmployee::printf(){cout<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl;}//派生类Mansger输出函数voidMansger::printf(){cout<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl;}//派生类Mansger储存函数voidMansger::save(){ofstreamfs("f:\\Mansger.txt"); fs<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl; cout<<"MansgerOK"<<endl; }//派生类Salemansger输出函数voidSalemansger::printf(){cout<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl;}//派生类Salemansger储存函数voidSalemansger::save(){ofstreamfs("f:\\Salemansger.txt"); fs<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl; cout<<"SalemansgerOK"<<endl; }//派生类Technology输出函数voidTechnology::printf(){cout<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl;}//派生类Technology储存函数voidTechnology::save(){ofstreamfs("f:\\Technology.txt"); fs<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl; cout<<"TechnologyOK"<<endl; }//派生类Saleman输出函数voidSaleman::printf(){{cout<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl;}//派生类Saleman:储存函数voidSaleman::save(){ofstreamfs("f:\\Saleman.txt"); fs<<"姓名:"<<name<<""<<"编号:"<<number<<""<<"等级:"<<level<<""<<"月薪:"<<wages<<endl; cout<<"SalemanOK"<<endl;}//友元类的实现Head::Head()//友元类的构造函数实现初始化链表{if((top=newLinked)==NULL) exit(-1); top->next=NULL;}voidHead::Insert(Employee*temp)//链表的插入函数{ Linked*ttop=top; while(ttop->next)//链表的头结点的下个结点不为空时,开发空间 ttop=ttop->next; ttop->next=newLinked; ttop->next->p=temp; ttop->next->next=0;}//链表的输出函数voidHead::printf() {Linked*pbuf=top->next; while(pbuf!=NULL) { pbuf->p->printf();//插入打印函数 pbuf=pbuf->next; } }//链表的析构函数 Head::~Head() {Linked*ttop,*q; ttop=top->next; while(ttop!=NULL) {q=ttop; ttop=ttop->next; deleteq;//释放空间 } } //菜单函数voidmenu(Head*Data) {intn; cout<<"请输入1、打印0、退出:"; cin>>n; switch(n)//多分支选择语句 {case1:Data->printf();//输出链表节点 break; case0: break; } cout<<"是否接着?假如接着请按1,退出请按0:"; cin>>n; if(n!=0) menu(Data);//递归调用}//菜单函数1 voidmenu1(Head*Data) {Mansger*M;//声明类指针 Salemansger*S; Technology*T; Saleman*S1; intn; cout<<"请输入1、经理2、销售经理3、技术人员4、销售员0、退出:"; cin>>n; switch(n) {case1: M=newMansger;//构造对象指针 M->save();//储存对象数据 Data->Insert(M);//将对象指针插入到链表中 break; case2: S=newSalemansger;//构造对象指针 S->save();//储存对象数据 Data->Insert(S);//将对象指针插入到链表中 break; case3: T=newTechnology;//构造对象指针 T->save();//储存对象数据 Data->Insert(T);//将对象指针插入到链表中 break; case4: S1=newSaleman;//构造对象指针 S1->save();//储存对象数据 Data->Insert(S1);//将对象指针插入到链表中 break; case0: break; } cout<<"是否接着?假如接着请按1,退出请按0:"; cin>>n; if(n!=0)menu1(Data);//递归调用 }在类的成员函数实现过程中,派生类的成员函数调用了基类的构造函数,只是整个调用过程中完全是由系统内部完成。基类的爱护数据成员,通过公有派生之后,在派生类中是以爱护成员的身份出现的,派生类的成员函数能够自由地进行访问。通过定义友元类访问类内的爱护成员,并通过单链表法开发输入空间以便插入职员的信息。最后通过友元类的析构函数释放空间。4.3主函数设计//主函数voidmain(){HeadData;//构造对象 intn; while(1) {cout<<"请输入:1、输入2、打印0、退出:"; cin>>n; switch(n)//多分支语句进行菜单的选择 {case1: menu1(&Data); break; case2: menu(&Data); break; case0: system("pause"); return; } } system("cls");}在程序的主函数部分,定义一个构造对象以便实现调用。Switch多分支选择语句能够选择菜单从而实现输入、打印操作。4.4基于操纵台的应用程序测试程序运行结果如图2-1和2-2所示。图2-1程序运行结果1图2-2程序运行结果2为每类职员保存的文件夹如图3-1所示的Mansger.txt、Salemansger.txt、Saleman.txt、Technology.txt:图3-1存盘文件夹为经理建立的文件夹打开后如图3-2所示:图3-2显示经理文件夹为销售经理建立的文件夹打开后如图3-3所示:图3-3显示销售经理文件夹为兼职技术人员建立的文件夹打开后如图3-4所示:图3-4显示兼职技术人员文件夹为兼职推销员建立的文件夹打开后如图3-5所示:图3-5显示兼职推销员文件夹从图2-1到3-5能够看出,在DOS界面通过对菜单的选择能够输入和打印职员的信息。经理只需要输入姓名,销售经理要输入姓名和当月的部门的销售总额,兼职技术人员要输入姓名和工作时刻,兼职推销员要输入姓名和月销售额,然后选择打印菜单即可输出各类人员的全部信息,而这些信息差不多通过程序的文件输出流以TXT的格式保存在了电脑磁盘F:\梁庶芹文件夹中。打开后便可显示各类职员的全部信息。 5基于MFC的应用程序MFC是通过窗口和控件实现输入输出,设置MFC界面也专门重要,界面的美观程度直接阻碍了程序设计的好坏。下面在MFC类的框架下加入上述类并实现人员的信息治理,通过图形界面的输入和输出。5.1基于MFC的应用程序设计5.1.1MFC程序界面设计首先在VC中建立MFCAppWizard(exe)工程,名称为lsq,并在向导的Step1中选择Dialogbased,即建立基于对话框的应用程序,如下图4~1和4-2所示。图4-1建立MFCAppWizard(exe)工程图4-2建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图4-3所示。图4-3显示职员信息程序界面设计图4-3所示的界面中包含了5个GroupBox,7个StaticText控件,5个Button控件,和15个EditBox控件,控件的差不多信息列表如下表1所示。表1控件差不多信息控件类不控件ID控件Caption讲明GroupBoxIDC_STATIC职位见图6姓名级不月薪存盘StaticTextIDC_STATIC经理见图6销售经理技术人员推销员销售总额工作时刻销售额BottonIDC_BUTTON1提交见图6IDC_BUTTON2MansgerIDC_BUTTON3SalemansgerIDC_BUTTON4TechnologyIDC_BUTTON5SalemanEditBoxIDC_JL姓名栏第一个EditIDC_XSJL姓名栏第二个EditIDC_JSRY姓名栏第三个EditIDC_TXY姓名栏第四个EditIDC_DJ1级不栏第一个EditIDC_DJ2级不栏第二个EditIDC_DJ3级不栏第三个EditIDC_DJ4级不栏第四个EditIDC_YX1月薪栏第一个EditIDC_YX1月薪栏第二个EditIDC_YX1月薪栏第三个EditIDC_YX1月薪栏第四个EditIDC_XSZE销售总额右边EditIDC_GZSJ工作时刻右边EditIDC_XSE销售额右边Edit5.1.2MFC程序代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为15个EditBox控件建立MemberVariables,按Ctrl+w键进入MFCClassWizard界面,选择MemberVariables选项卡,可显示成员变量设置界面,如图4-4所示。图4-4成员变量设置界面1通过该界面设置与15个EditBox控件对应的成员变量,具体Type与Member请详见图4-4MFC编写代码也是特不重要的时期,能够借鉴在设计基于DOS界面的操纵台应用程序的代码,并将其作必要的改写,具体改写如下。①各职员的姓名直接在MFC界面的姓名档中输入,等级和月薪直接赋值即可。②修改内容包括:将显示职员信息的prinft()函数去掉,因为在图形界面的程序上差不多不需要连个函数承担输出功能了;将存盘函数save()去掉直接在MFC界面的存盘档位每类职员建立文件夹并保存,仍然使用文件输出流;菜单函数也不再需要,直接通过对按钮的选择进行输入输出和存盘操作。具体代码如下:①//为提交键编写的程序,用来实现信息的输出:voidCLsqDlg::OnButton1(){ UpdateData(TRUE); if(m_Mansger)//为经理的等级和月薪赋值 {m_level1=4; m_wages1=8000; }if(m_Salemansger)//为销售经理的等级和月薪赋值 {m_level2=3; m_wages2=5000+m_sum2*0.005; } if(m_Technology)//为兼职技术人员的等级和月薪赋值 {m_level3=3; m_wages3=m_time*100; } if(m_Saleman)//为兼职推销员的等级和月薪赋值 {m_level4=1; m_wages4=m_sum1*0.04; UpdateData(FALSE); }}②//为经理建立文件夹,将其信息保存在磁盘中voidCLsqDlg::OnButton2(){ofstreamfs("f:\\MFCMansger.txt");fs<<"姓名:"<<m_Mansger<<""<<"等级:"<<m_level1<<""<<"月薪:"<<m_wages1<<endl;}
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年暑期工劳动合同标准文本集3篇
- 番禺2025版租赁市场房源代理服务合同
- 2024结款协议合同范本
- 二零二四年国际货物销售合同:FOB条款与运输2篇
- 二零二五版高校毕业生就业指导与职业规划服务合同6篇
- 二零二五版电影剧本改编与制作投资合同范本3篇
- 2024物联网应用项目建设的合同标的
- 年度健腹椅竞争策略分析报告
- 年度全自动板框污泥脱水机产业分析报告
- 2025年度教育领域临时工招聘及教学质量合同4篇
- 第7课《中华民族一家亲》(第一课时)(说课稿)2024-2025学年统编版道德与法治五年级上册
- 2024年医销售药销售工作总结
- 急诊科十大护理课件
- 山东省济宁市2023-2024学年高一上学期1月期末物理试题(解析版)
- GB/T 44888-2024政务服务大厅智能化建设指南
- 2025年上半年河南郑州荥阳市招聘第二批政务辅助人员211人笔试重点基础提升(共500题)附带答案详解
- 山东省济南市历城区2024-2025学年七年级上学期期末数学模拟试题(无答案)
- 国家重点风景名胜区登山健身步道建设项目可行性研究报告
- 投资计划书模板计划方案
- 《接触网施工》课件 3.4.2 隧道内腕臂安装
- 2024-2025学年九年级语文上学期第三次月考模拟卷(统编版)
评论
0/150
提交评论