欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    课程设计小型人员信息管理系统的设计与实现.doc

    • 资源ID:3993305       资源大小:353.50KB        全文页数:25页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计小型人员信息管理系统的设计与实现.doc

    封 皮(按学校要求手工填写)课 程 设 计 任 务 书学院信息科学与工程学院专业通信工程学生姓名张昊学号1203060417设计题目小型人员信息管理系统的设计与实现内容及要求:小型人员信息管理系统的设计与实现某小型公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。人员编号基数为1000,每输入一个人员信息编号顺序加1。程序要有对所有人员提升级别的功能。本例中为简单起见,所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级。月薪计算办法是:经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五。要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。要求编写程序实现上述功能,并且可以通过实例演示上述功能。进度安排:第17周:分析题目,查阅课题相关资料,进行类设计、算法设计;第18周:程序的设计、调试与实现;第19周:程序测试与分析,撰写课程设计报告,进行答辩验收指导教师(签字):年 月 日学院院长(签字)年 月 日1 需求分析- 1 -2 算法基本原理- 1 -3 类设计- 2 -4 详细设计- 3 -4.1 类的接口设计- 3 -4.2 类的实现- 5 -4.3 主函数设计- 10 -5 DOS界面程序运行结果及分析- 11 -5.1 程序运行结果- 11 -5.2运行结果分析- 12 -6 基于MFC的图形界面程序开发- 13 -6.1 基于MFC的图形界面程序设计- 13 -6.2 程序测试- 17 -6.3 MFC程序编写总结- 19 -7 参考文献··························································- 19 -1 需求分析(1)对小型公司做一个小型人员信息管理系统。该公司主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。(2)该管理系统需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。(3)该系统具体要求:人员编号基数为1000,每输入一个人员信息编号顺序加1;对所有人员提升级别,所有人员的初始级别均为1级,然后进行升级,经理升为4级,兼职技术人员和销售经理升为3级,推销员认为1级;经理拿固定月薪8000元;兼职技术人员按每小时100元领取月薪;兼职推销员的月薪按该推销员当月销售额的4提成;销售经理即拿固定月薪也领取销售提成,固定月薪为5000元,销售提成为所管辖部门当月销售总额的千分之五;要求为每一类人员单独建立文件,并在每个文件中手工录入一些人员基本信息,并根据这些基本信息计算职工的月薪,并将计算结果保存入相应的磁盘文件中。2 算法基本原理1、 定义一个员工虚基类Employee()包含姓名、编号、级别、当月薪水四个共有属性的数据成员;并在该虚基类基础上派生出经理Mansger()、兼职技术人员Technology()、销售经理Salemansger()和兼职推销员Salesman()四类派生类。四种派生类分别实现各自的的员工升级、编号,添加各自特有的数据成员并计算出各自的月薪。 (1)员工等级直接按照要求赋值即可; (2) 在积累中定义静态数据成员static int count,并初始化int Employee:count=1000, 并在基类构造函数中实现编号的赋值 +count; num=count; (3)派生类调用构造函数时对数据成员进行赋值,并对各种派生类输入各自的用于计算月薪的数据成员,并按照要求计算各自的月薪。 2、 定义一个结构体链表struct Linked,并将该链表头指针封装在友元类Head()中。3、 运行时构造对象指针,并存在链表中,讲链表的头指针封装在一个友元类中。利用类中的成员函数来实行对链表节点的打印、添加、删除以及查询。这里所以的操作均为数据结构中对单链表的操作。3 类设计首先定义一个员工类Employee作为基类,由于要派生多个派生类,所以将其定义成虚基类;然后由基类派生出四种派生类,分别是Mansger,Technology,Salemansger和Salesman。定义一个结构体链表Linked用来存放生成的对象指针,并将头指针封装存放在友元类Head中。基类Employee中的数据成员姓名、编号、等级、月薪以及一个静态变量,静态变量用来为员工自动赋值编号,在基类构造函数中输入员工姓名,并将编号和等级自动赋值。派生类Mansger中无需添加新成员,在派生类Technology中添加工作时间,在Salemansger中添加部门月销售额,在Salesman添加月销售额。派生类的功能有输出函数print(),储存函数save();友元类Head中存放的数据成员有Linked *top,功能有构造函数Head(),插入函数Insert(),查询函数Check(),删除函数Delete(),输出函数print()。基类与各派生类之间的关系如图:Employee# name20: char# num: int# rank: int#wages: float#count: int=1000+Employee()+print(): voidSalesman# name20: char# num: int# rank: int#wages: float+Employee()+print(): void-sum1 :int+Salesman ()+print(): void+save(): voidSalemansger# name20: char# num: int# rank: int#wages: float+Employee()+print(): void-sum :int+Salemansger()+print(): void+save(): voidTechnology# name20: char# num: int# rank: int#wages: float+Employee()+print(): void-time :int+Technology()+print(): void+save(): void Mansger# name20: char# num: int# rank: int#wages: float+Employee()+print(): void+ Mansger ()+print(): void+save(): voidHead-top: struct*+Insert(Employee *temp)+Check(): void+Delete():void+print():void 4 详细设计整个程序分为三部分,各种职员的类,结构体链表以及封装链表的类。实现时先生成各职员的对象指针,之后将生成的对象指针插入到链表中,最后通过封装类的成员函数对链表节点进行操作,最后实现对各员工的操作。4.1 类的接口设计#include<iostream>#include<string.h>#include<fstream>using namespace std;class Employee /基类Employee声明protected: /数据成员char name20; /员工姓名int num; /员工编号int rank; /员工登记float wages; /员工月薪static int count; /静态变量public: /外部接口Employee(); /构造函数 void print(); /输出函数friend class Head; /声明友元类;class Mansger:virtual public Employee /派生类Mansger声明public:Mansger():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head;class Salemansger:virtual public Employee /派生类Salemansger声明protected:int sum; /部门销售额public:Salemansger():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head; class Technology:virtual public Employee /派生类Technology声明protected:int time; /工作时间public:Technology():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head; class Salesman:virtual public Employee /派生类Salesman声明protected:int sum1; /个人销售额public:Salesman():Employee(); /构造函数void print(); /输出函数void save(); /储存函数friend class Head;struct Linked /定义单链表Employee *p;Linked *next;class Head /友元类Head声明public:Head(); /构造函数void Insert(Employee *temp); /单链表插入函数void Check(); /查找函数void Delete(); /删除函数void print(); /输出函数Head(); /析构函数private:Linked *top; /单链表头指针;4.2 类的实现Employee /基类的实现Employee :Employee() /基类的构造函数cout<<"输入姓名:"cin>>name;+count;num=count;rank=1; /基类成员赋值void Employee: print() /输出类数据成员cout<<"编号"<<num<<" "<<"姓名"<<name<<" "<<"等级"<<rank<<" "<<"月薪"<<wages<<endl;Mansger /派生类的实现Mansger :Mansger():Employee() /派生类构造函数rank=4;wages=8000;void Mansger: print() /输出函数cout<<"编号"<<num<<" "<<"姓名"<<name<<" "<<"等级"<<rank<<" "<<"月薪"<<wages<<endl;void Mansger :save() /储存函数ofstream fs("d:Mansger.txt");fs<<wages;cout<<"Mansger OK"<<endl; Salemansger /派生类的实现Salemansger:Salemansger():Employee() /派生类构造函数rank=3;cout<<"输入部门销售总额:"cin>>sum;wages=0.005*sum;void Salemansger:print() /输出函数cout<<"编号"<<num<<" "<<"姓名"<<name<<" "<<"等级"<<rank<<" "<<"月薪"<<wages<<endl;void Salemansger:save() /储存函数ofstream fs("d:Salemansger.txt");fs<<wages;cout<<"Salemansger OK"<<endl; Technology /派生类的实现Technology:Technology():Employee() /派生类的构造函数rank=3;cout<<"输入工作时间"cin>>time;wages=100*time;void Technology:print() /输出函数cout<<"编号"<<num<<" "<<"姓名"<<name<<" "<<"等级"<<rank<<" "<<"月薪"<<wages<<endl;void Technology:save() /储存函数ofstream fs("d:Technology.txt");fs<<wages;cout<<"Technology OK"<<endl; Salesman /派生类的实现Salesman :Salesman():Employee() /派生类的构造函数cout<<"输入月销售额:"cin>>sum1;wages=0.04*sum1;void Salesman:print() /派生类的输出函数cout<<"编号"<<num<<" "<<"姓名"<<name<<" "<<"等级"<<rank<<" "<<"月薪"<<wages<<endl;void Salesman:save() /储存函数ofstream fs("d:Salesman.txt");fs<<wages;cout<<"Salesman OK"<<endl; Head /友元类得实现Head:Head() /友元类的构造函数if(top=new Linked)=NULL)exit(-1);top->next=NULL;void Head:Insert(Employee *temp) /链表的插入函数Linked *ttop = top;while(ttop->next)ttop = ttop->next;ttop->next = new Linked;ttop->next->p = temp;ttop->next->next = 0;void Head:Check() /链表的查找函数char s20;cout<<"输入要查找人的姓名:"cin>>s;Linked *pbuf = top->next;while(pbuf!=NULL)if(strcmp(pbuf->p->name,s)!=0)pbuf=pbuf->next;else if(strcmp(pbuf->p->name,s)=0)cout<<"编号"<<pbuf->p->num<<" "<<"姓名"<<pbuf->p->name<<" "<<"等级"<<pbuf->p->rank<<" "<<"月薪"<<pbuf->p->wages<<endl;pbuf=pbuf->next;continue;elsecout<<"查无此人"<<endl;void Head:Delete() /链表的删除函数int a;cout<<"输入要删除人的编号:"cin>>a;Linked *pbuf = top,*q;while(pbuf->next!=NULL)if(a!=pbuf->next->p->num)pbuf=pbuf->next;else if(a=pbuf->next->p->num)q=pbuf->next;pbuf->next=pbuf->next->next;delete q;cout<<"删除成功"<<endl;elsecout<<"查无此人"<<endl;void Head:print() /链表的输出Linked *pbuf = top->next;while(pbuf!=NULL)pbuf->p->print();pbuf=pbuf->next;Head:Head() /友元类的析构函数Linked *ttop,*q;ttop = top->next;while(ttop!=NULL)q=ttop;ttop = ttop->next;delete q;void mnue(Head *Data) /菜单函数int n;cout<<"请输入1、查找 2、删除 3、打印 0、退出:n"cin>>n;switch(n)case 1:Data->Check(); /查找链表节点break;case 2:Data->Delete(); /删除链表节点break;case 3:Data->print(); /输出链表节点break;case 0:break; cout<<"是否继续(继续请按1/退出请按0)"cin>>n;if(n!=0) mnue(Data);void menu(Head *Data) /菜单函数Mansger *M; Salemansger *S; Technology *T;Salesman *SA; /声明类指针int n;cout<<"请输入1、经理 2、销售经理 3、技术员 4、销售员 0、退出:n"cin>>n;switch(n)case 1:M=new Mansger; /构造对象指针M->save(); /储存对象数据Data->Insert(M); /将对象指针插入到链表中break;case 2:S=new Salemansger; /构造对象指针S->save(); /储存对象数据Data->Insert(S); /将对象指针插入到链表中break;case 3:T=new Technology; /构造对象指针T->save(); /储存对象数据Data->Insert(T); /将对象指针插入到链表中break;case 4:SA=new Salesman; /构造对象指针SA->save(); /储存对象数据Data->Insert(SA); /将对象指针插入到链表中break;case 0:break;cout<<"是否继续(继续请按1/退出请按0)"cin>>n;if(n!=0) menu(Data); /递归调用在类的成员函数实现过程中,派生类的构造函数使用参数调用了基类的构造函数。在类外定义成对象指针,并用new生成动态内存空间来储存,并将其插入到链表中并进行封装。通过封装类对链表的操作从而调用各员工类中的成员函数对各员工类进行题目所需功能的操作。4.3 主函数设计void main() /主函数Head Data;/构造对象int n;while(1)cout<<"请输入(1、输入 2、其他操作 0、退出):n"cin>>n;switch(n)case 1:menu(&Data); /菜单函数1break;case 2:mnue(&Data); /菜单函数2break;case 0:system("pause");return;system("cls");5 DOS界面程序运行结果及分析5.1 程序运行结果对员工类进行输入操作实现查找、删除以及输出功能5.2运行结果分析整个程序是采用单链表的形式来储存对象指针,合理的利用的内存资源。为了通过封装链表的类对各员工类里的成员函数进行调用,再次将该类声明成友元类。类的外部为对象指针申请动态的储存空间,并将其插入到单链表中,通过头结点对各个节点进行访问操作。最后执行析构函数的时候讲点链表的节点一个一个释放掉。利用MFC AppWizard创建一个基于对话框的MFC应用程序。该程序使用链表类,对公司的员工信息进行输入、删除、存盘以及读取的功能6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面程序设计(1)界面设计首先在VC中建立MFC AppWizard(exe)工程,名称为GuassLineGUI,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图45所示。将对话框资源中的默认对话框利用工具箱改造成如下界面,如图所示。6.2详细设计本程序链表类对象为一结构体CFund,它记录了姓名,编号,等级,月薪等所有员工的信息。struct CFundCString m_name; /姓名CString m_rank; /等级float wages; /月薪float income; /用于计算月薪的变量;声明一个CPtrList型的链表类m_fundlist。public:Ch8Demo2Dlg(CWnd* pParent = NULL); / standard constructor CPtrList m_fundlist;为对话框类添加一个成员函数Resfiesh,将链表对象中的数据在列表框显示。void Ch8Demo2Dlg:Reflesh() CString str,str1;m_cTheList.ResetContent (); /清空列表框if(!m_fundlist.IsEmpty() /链表不为空POSITION pos=m_fundlist.GetHeadPosition(); /获取链表头的位置for(int i=0;i<m_fundlist.GetCount();i+) /遍历链表CFund *m_pFund=(CFund*)m_fundlist.GetNext(pos);str1.Format("%f",m_pFund->income); /格式化月薪str="姓名:"+m_pFund->m_name+" 等级:"+m_pFund->m_rank+" 薪水:"+str1;m_cTheList.AddString(str); /添加列表框数据UpdateData(false); /更新总量编辑框对列表框类进行输入,删除的操作代码如下:void Ch8Demo2Dlg:OnCheck() UpdateData(TRUE); /获得编辑框数据CFund *m_pFund=new CFund; /创建结构体对象指针switch(m_radio)case 0: /插入操作if(m_name.IsEmpty()AfxMessageBox("用户输入不正确");return;m_pFund->m_name=m_name;m_pFund->m_rank="4"/m_pFund->wages=m_wages;m_pFund->income=8000;m_fundlist.AddTail(m_pFund);m_name=" "m_wages=0;UpdateData(false);Reflesh();break;case 1: /插入操作if(m_name.IsEmpty()AfxMessageBox("用户输入不正确");return;m_pFund->m_name=m_name;m_pFund->m_rank="3"m_pFund->wages=m_wages;m_pFund->income=m_wages*100;m_fundlist.AddTail(m_pFund);m_name=" "m_wages=0;UpdateData(false);Reflesh();break;case 2: /插入操作if(m_name.IsEmpty()AfxMessageBox("用户输入不正确");return;m_pFund->m_name=m_name;m_pFund->m_rank="3"m_pFund->wages=m_wages;m_pFund->income=5000+m_wages*0.005;m_fundlist.AddTail(m_pFund);m_name=" "m_wages=0;UpdateData(false);Reflesh();break;case 3: /插入操作if(m_name.IsEmpty()AfxMessageBox("用户输入不正确");return;m_pFund->m_name=m_name;m_pFund->m_rank="1"m_pFund->wages=m_wages;m_pFund->income=m_wages*0.04;m_fundlist.AddTail(m_pFund);m_name=" "m_wages=0;UpdateData(false);Reflesh();break;case 4: /去除表头操作if(m_fundlist.GetCount()m_fundlist.RemoveHead();m_name=" "m_wages=0;UpdateData(false);Reflesh();break;case 5: /去除表尾操作if(m_fundlist.GetCount()m_fundlist.RemoveTail();m_name=" "m_wages=0;UpdateData(false);Reflesh();break;为更方便使用,在操作单选按钮是设置了一下响应函数:void Ch8Demo2Dlg:OnRadio1() /单选按钮的响应函数UpdateData(TRUE);switch(m_radio) case 0:m_temp="nothing"bre

    注意事项

    本文(课程设计小型人员信息管理系统的设计与实现.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开