c++高校工资管理系统.doc
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec+高校工资管理系统程设计说明书-河南城建学院面向对象语言程序设计课程设计任务书班 级 0814102 专 业 计算机科学与技术 姓 名 李 二 萌 学 号 081410219 课程名称 面向对象语言程序设计 设计名称 高校工资管理系统 指导教师 耿永军 刘荣辉 周二强 计算机科学与工程系2012年6月20日摘要高校工资管理系统是企业管理中的一个重要内容,随着时代的进步,企业人员数量也不断增加、分工的不断细化、各个行业间联系的不断密切,对人事管理的要求也不断提高。如何管理好企业内部员工的信息,对员工实施高效的宏观管理,对企事业单位的人员构成情况和发展趋势进行统计、规划、分析并制定切实可行的人事政策,是一项繁重而艰巨的任务。 本文是采用C+作为前台开发工具,SQL Server2000作为后台数据库平台的基于C/S的两层模式的管理系统。旨在实现对现有的企业人事管理工作中遇到的各种情况和大量数据在数据库存储的基础上,提供信息咨询,信息检索,信息存取等服务,在此论文中主要实现对存储在数据库中的数据表进行这些简单的操作,为提高企业人事管理效率提供了行之有效的手段。 关键词:VC+6.0;高校工资管理目录目录1第一章开发环境和开发工具11.1C/C+语言简介11.2 开发背景11.3 开发环境1第二章 算法思想22.1 系统需求分析22.2 系统总体设计22.2.1 系统设计目标22.2.2 开发设计思想32.2.3 系统功能模块设计32.3 面向对象思想描述5第三章面向对象实现63.1 结构63.2 程序模块63.3 各类之间的关系63.4 源程序代码6第四章测试与分析194.1 测试数据选择194.2 测试结果分析19总 结21心得体会22参考文献23第一章 开发环境和开发工具1.1 C/ C +语言简介也可以让各种组件方便的转变为基于Web的应用,并且能够通过Internet被各种系统或是其他开发语言所开发的应用调用。1.2 开发背景 随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而人事管理的全面自动化、信息化则是其中重要的组成部分。人事管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。因此,本文所研究的人事管理信息系统具有一定的使用价值和现实意义。1.3 开发环境本文所采用的开发环境主要是基于C+在Microsoft Visual C+平台上开发的系统,界面友好,功能强大,调试也很方便。这是微软出的一个C语言集成开发环境(IDE),主要有:VC+6.0、VS2005VS2008VS2010等,分为企业版和学生版等。对于初学者VC+6.0是比较容易上手的,但其对标准支持的不好可能使人养成不良的编程习惯。第二章 面向对象思想2.1 系统需求分析C+不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基。本实验中,对不同的对象采取不同的存储结构,对参赛学校采取链式结构,而对于参赛运动员采取一个结构就可以了。本程序中主要用到线性表的一些基本操作,将各学校信息,运动员信息,项目信息都构造成线性表。具体功能通过主函数分别调用各函数实现。参考本实验的功能要求,本程序分为七个模块:主函数、信息录入函数、信息统计函数、信息查询函数,信息删除函数、存盘函数、读盘函数。信息录入函数有包括教师信息录入,实验人员信息录入,行政人员信息录入,教师兼实验人员信息录入,教师兼行政人员信息录入。信息统计不再结果中显示出来,为了信息查询。信息查询函数包括按编号查询、按人员姓名查询。信息删除函数是删除无关人员信息。2.2 系统总体设计2.2.1 系统设计目标 本文研究开发的人事管理信息系统用于支持企业完成劳动人事管理工作,有如下三个方面的目标: 支持企业实现规范化的管理。支持企业高效率完成劳动人事管理的日常业务,包括新员工加入时人事档案的建立、老员工转出、辞职、退休等。 支持企业进行劳动人事管理及其相关方面的科学决策,如企业领导根据现有的员工数目决定招聘人数等。2.2.2 开发设计思想 基于以上系统设计目标,本文在开发人事管理信息系统时遵循了以下开发设计思想: 采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。尽量达到操作过程中的直观、方便、实用、安全等要求。系统采用C/S体系结构,Clinet(客户端)负责提供表达逻辑、显示用户界面信息、访问数据库服务器;Server(服务器端)则用于提供数据服务。(写出三层设计思想)系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。2.2.3 系统功能模块设计 本系统有:信息录入、信息查询、信息删除、信息修改、数据存盘和数据装入。得到如图3-1所示的系统功能模块图。高校工资管理系统信息录入信息查询信息删除按编号查询信息修改数据存盘数据装入系统功能模块图2.3 面向对象思想描述本实验中,通过构造类来实现功能,先构造一个person类,里面是人员的基本信息,然后通过继承person类,来实现teacher、assistant、manager、tercher_assistant和manager_teacher类。程序中还有一个college类,里面包含 void Add(); /增加职工void Delete(); /删除职工void Modify(); /修改职工void Print(); /输出职工信息void Save(); /职工信息存盘void Load(); /职工信息装入六个主要函数,通过这些函数实现程序需要求的功能。并且college类是person的友元类。第三章 面向对象实现3.1 结构高校工资管理系统是一个数据库应用系统,高校人员的所有信息都保存在数据库中。 3.2程序模块 程序主要有六个模块:信息录入、信息查询、信息删除、信息修改、数据存盘和数据装入。3.3 各类之间的关系 程序开始建立了一个Person类,然后有在Person类的基础上继承了Teacher类、Assistant类和Manager类。而Teacher_ Assistant类是继承于Teacher类和Assistant类上,Manager_Teacher类是继承于Manager类和Teacher类上。 由于Teacher类、Assistant类和Manager类是继承于Person类,他们也是public继承,因此Person类里面的protected类型的变量子类是可以用的。子类从中继承了No(编号)、Name20(姓名)、Duty(职位)、Salary(基本工资)和Person类next指针。而Teacher_ Assistant类和Manager_Teacher类是两个父类,多继承。 程序还有一个友元类,College类是Person类的友元类。3.4 源程序代码#include<iostream>#include <cstring>#include<windows.h>using namespace std;#include <fstream>class Person /人员类(抽象类)protected:int No; /编号char Name20; /姓名int Duty; /人员类别标志(0:教师,1:实验员,2:行政人员,3:教师兼实验员,4:行政兼教师)double Salary; /基本工资Person *next; /指针域public:Person() /基类构造next=NULL; /指针域设置为空virtual Person() /基类虚析构virtual void Input()=0; /从键盘输入数据virtual void Input(ifstream& ifs)=0; /从文件输入数据virtual void Output()=0; /向屏幕输出数据virtual void Output(ofstream& ofs)=0; /向文件输出数据virtual double Incoming()=0; /计算收入friend class College;class Teacher:virtual public Person /教师类protected:int Hours; /教师课时public: /为对象设置数据分为两种途径,通过1)构造函数,2)一般成员函数/分开可以使得程序中应用更加灵活/本程序采用:缺省构造+Input()Teacher() /构造函数,初始化部分数据Duty=0; Salary=800;void Input() /键盘补充输入其它数据cout<<"编号:" cin>>No;cout<<"姓名:" cin>>Name;cout<<"教师上学期课时:" cin>>Hours; void Input(ifstream& ifs)ifs>>No>>Name>>Duty>>Hours; void Output()cout<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Hours<<"t"<<"工资:"<<Incoming()<<endl;void Output(ofstream& ofs)ofs<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Hours<<"t"<<"工资:"<<Incoming()<<endl;double Incoming()return Salary+(Hours-120)*20;class Assistant:virtual public Person /实验员protected:int Allowance;int Hours;public:Assistant()Duty=1; Salary=650;Allowance=150;void Input()cout<<"编号:n" cin>>No;cout<<"姓名:n" cin>>Name;cout<<"实验员上学期实验课时:" cin>>Hours;void Input(ifstream& ifs) ifs>>No>>Name>>Duty>>Hours; void Output()cout<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Hours<<"t"<<"工资:"<<Incoming()<<endl;void Output(ofstream& ofs)ofs<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Hours<<"t"<<"工资:"<<Incoming()<<endl;double Incoming()return Salary+Allowance+(Hours-70)*20;class Manager:virtual public Person /行政人员protected:int Allowance;public:Manager() Duty=2;Salary=750;Allowance=250;void Input()cout<<"编号:" cin>>No;cout<<"姓名:" cin>>Name;void Input(ifstream& ifs) ifs>>No>>Name>>Duty; void Output()cout<<No<<"t"<<Name<<"t"<<Duty<<"t"<<"工资:"<<Incoming()<<endl;void Output(ofstream& ofs)ofs<<No<<"t"<<Name<<"t"<<Duty<<"t"<<"工资:"<<Incoming()<<endl;double Incoming()return Salary+Allowance;class Teacher_Assistant:public Teacher,public Assistant /教师兼实验员public:Teacher_Assistant()Duty=3;Teacher:Salary=800;void Input()cout<<"编号:"cin>>No;cout<<"姓名:"cin>>Name;cout<<"教师上学期课时:"cin>>Teacher:Hours;cout<<"教师兼职实验员上学期实验课时:"cin>>Assistant:Hours;void Input(ifstream& ifs) ifs>>No>>Name>>Duty>>Teacher:Hours>>Assistant:Hours; void Output()cout<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Teacher:Hours<<"t"<<Assistant:Hours<<"t"<<"工资:"<<Incoming()<<endl;void Output(ofstream& ofs)ofs<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Teacher:Hours<<"t"<<Assistant:Hours<<"t"<<"工资:"<<Incoming()<<endl;double Incoming()return Salary+(Teacher:Hours-120)*20+Allowance+(Assistant:Hours-70)*20;class Manager_Teacher:public Manager,public Teacher /行政人员兼教师public:Manager_Teacher()Duty=4;Manager:Salary=750;void Input()cout<<"编号:" cin>>No;cout<<"姓名:" cin>>Name;cout<<"行政人员兼职教师上学期课时:" cin>>Hours;void Input(ifstream& ifs) ifs>>No>>Name>>Duty>>Hours; void Output()cout<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Hours<<"t"<<"工资:"<<Incoming()<<endl;void Output(ofstream& ofs)ofs<<No<<"t"<<Name<<"t"<<Duty<<"t"<<Hours<<"t"<<"工资:"<<Incoming()<<endl;double Incoming()return Salary+Allowance+(Hours-120)*20;class Collegeprivate:Person *PL;void Clear();int College:Find(int ID,Person *p1,Person *p2);public:College(); /构造College(); /析构void Add(); /增加职工void Delete(); /删除职工void Modify(); /修改职工void Print(); /输出职工信息void Save(); /职工信息存盘void Load(); /职工信息装入;College:College() /构造函数(创建1个头结点的链表)Person *p=new Teacher;PL=p;cout<<"自动装入数据.n"Load();College:College() /析构函数(仅保留1个头结点)Person *p=PL;while(p) /逐个删除结点,包括头结点PL=p->next;delete p;p=PL;PL=NULL;void College:Add() /增加职工cout<<"n*增加职工*n"/查找尾结点Person *p=PL;while(p->next)p=p->next;int ch;cout<<"输入职工分类码(0:教师,1:实验员,2:行政人员,3:教师兼实验员,4:行政兼教师):n"cin>>ch;/创建新结点,录入数据,连接到链表Person *pt;switch(ch) case 0: pt=new Teacher; pt->Input();p->next=pt; break; case 1: pt=new Assistant; pt->Input();p->next=pt; break; case 2: pt=new Manager; pt->Input();p->next=pt; break; case 3: pt=new Teacher_Assistant; pt->Input();p->next=pt; break; case 4: pt=new Manager_Teacher; pt->Input();p->next=pt;break; default: return;void College:Clear() /清除所有的职工结点(仅保留头结点)Person *p=PL->next;while(p)PL->next=p->next;delete p;p=PL->next;/查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)int College:Find(int ID,Person *p1,Person *p2) *p1=PL->next;*p2=PL;while(*p1)if(*p1)->No=ID)break; /找到else *p2=*p1; /继续查找*p1=(*p1)->next;return *p1?1:0;void College:Delete() /删除职工cout<<"n* 删除职工 *n"int No;Person *p1,*p2;cout<<"编号:" cin>>No;if(!Find(No,&p1,&p2)cout<<"指定的人员没有找到!n"elsep2->next=p1->next; /连接delete p1;cout<<"正确删除!n"void College:Modify() /修改职工cout<<"n* 修改职工 *n"int No;Person *p1,*p2;cout<<"编号:" cin>>No;if(!Find(No,&p1,&p2)cout<<"指定的人员没有找到!n"elsep1->Output(); /输出原来的职工信息(做提示)p1->Input(); /输入新的职工信息(更新)cout<<"修改完成!n"void College:Print() /输出职工信息cout<<"n* 职工信息表 *n"cout<<"编号 姓名 岗位 其它 收入情况n"Person *p=PL->next;if(!p)cout<<"无职工记录!n"return;while(p) /遍历链表,输出职工信息p->Output();p=p->next;void College:Save() /职工信息存盘ofstream f("Person.txt",ios:out); /打开文件/遍历输出至文件Person *p=PL->next;while(p) p->Output(f);p=p->next;f.close(); /关闭文件cout<<"职工信息已经保存在Person.txt.n"void College:Load() /职工信息装入char buf81; /临时空间int Duty; /人员类型Person *p2; /新建结点的指针long t; /读写位置/清除现有结点(保留头结点)Clear(); /打开文件ifstream f("Person.txt",ios:in); /建立结点,读数据Person *p=PL; /尾结点指针while(1)/读取人员类型t=f.tellg();f>>buf>>buf>>Duty;if(f)/根据人员类型创建新结点switch(Duty)case 0: p2=new Teacher; break;case 1: p2=new Assistant; break;case 2: p2=new Manager; break;case 3: p2=new Teacher_Assistant; break;case 4: p2=new Manager_Teacher; break;default: f.close(); return;p->next=p2;p=p->next;f.seekg(t);p->Input(f); elsebreak; /关闭文件f.close();void main()char ch;College c; /定义大学对象/显示主菜单,接受选择,并分支调用大学类的相应功能的成员函数do system("pause");system("cls");cout<<"n"cout<<" * * * * * * * * * *n"cout<<" * * * * * * * * * * *n"cout<<"* * *n"cout<<" * * * *n"cout<<"* *高校工资管理系统* *n"cout<<" * * * *n"cout<<"* * *n"cout<<" * *1:增加职工 *n"cout<<"* *2:删除职工 *n"cout<<" * *3:修改职工 *n"cout<<"* *4:输出职工信息(工资) *n"cout<<" * *5:数据存盘 *n"cout<<"* *6:数据装入 *n"cout<<" * *7:退出 *n"cout<<"* *请选择(1-7): *n"cout<<" * * * * * * * * * * *n"cout<<" * * * * * * * * * *n"cin>>ch;system("cls");switch(ch)case '1': c.Add(); break;case '2': c.Delete();break;case '3': c.Modify();break;case '4': c.Print(); break;case '5': c.Save(); break;case '6': c.Load(); break;while(ch!='7'); 第四章 测试与分析4.1 测试数据选择(0:教师,1:实验员,2:行政人员,3:教师兼实验员,4:行政兼教师)编号 姓名 职务 工作时间01 Zhang3 0 20002 Li4 1 12003 Wang5 204 Zhao6 3 200 12005 Qian7 4 200 4.2 测试结果分析主菜单增加职工删除职工修改职工 职工信息 数据存盘 Person.txt文件总 结在今后的工作、学习中我将认真总结经验教训,努力使自己成为一名技术过硬、工作严谨、思维活跃的工程人员,为提高人们的生活质量做出更大的贡献。 本文所述高校工资管理系统特色在于能输入各个人员信息,通过输入的人员信息来计算出人员的工资,并且可以通过编号查询已输入的人员信息且可修改错误人员信息和删除无关人员的信息,并可将信息保存在txt文件中方便查询。当然,这个高校工资管理系统也有很多不足之处,例如不能更加高效的为高校提供所需,并且多余输入错误的数据不能进行判定,健壮性不好。程序在查找上也有不足,程序只能通过编号查找信息,不能通过姓名查找。 心得体会做完这个课程设计,我们的自信一下子提高了;尽管对于有些人这种程序会很简单,可对我们C+初学者来说,已经很不容易了。这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊!虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此。做完这个程序最大的收获就是感受到了集体的力量,当然个人的智慧也是很重要的哦!忙碌了一个多星期,在大家的共同努力下,我们总算将此程序设计出来。尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。为了解决此。类问题,最好就是多向同学,老师请教,不要怕难为情。C+课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次实习时间虽然仅有一个星期,但确实使我受益非浅。通过实习我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了对Turbo C的使用技巧。 二十一世纪是计算机的世纪,是一个全新的世纪,计算机正逐步入侵我们的生活。刚开始接触计算机的时候感觉很新奇,那时觉得计算机很神秘,于是就产生了以后一定要熟练掌控计算机的念头。大学的教育模式和中学有很大不同,从平常的课程安排和教学就可以知道,但是完成课程设计和写论文这种任务对我们来说无疑是一个很大的挑战。参考文献 1郑阿奇.SQL Server实用教程(第二版).北京:电子工业出版社.20052崔淼,陈明非.Visual C# 2005 程序设计教程.北京:机械工业出版社,2007.1 3王小铭,管理信息系统及其开发技术,2003,电子工业出版社4李永平,管理信息系统,2004,科学出版社5项目管理信息系统的规划想法,2004,企业信息化论坛,http:/www.e-6皮德常,C+程序设计教程.北京:机械工业出版社,2009.3