c++高校工资管理系统1.docx
《c++高校工资管理系统1.docx》由会员分享,可在线阅读,更多相关《c++高校工资管理系统1.docx(31页珍藏版)》请在冰点文库上搜索。
c++高校工资管理系统1
河南城建学院
《面向对象语言程序设计》课程设计任务书
班级0814102
专业计算机科学与技术
姓名李二萌
学号081410219
课程名称面向对象语言程序设计
设计名称高校工资管理系统
指导教师耿永军刘荣辉周二强
计算机科学与工程系
2012年6月20日
摘要
高校工资管理系统是企业管理中的一个重要内容,随着时代的进步,企业人员数量也不断增加、分工的不断细化、各个行业间联系的不断密切,对人事管理的要求也不断提高。
如何管理好企业内部员工的信息,对员工实施高效的宏观管理,对企事业单位的人员构成情况和发展趋势进行统计、规划、分析并制定切实可行的人事政策,是一项繁重而艰巨的任务。
本文是采用C++作为前台开发工具,SQLServer2000作为后台数据库平台的基于C/S的两层模式的管理系统。
旨在实现对现有的企业人事管理工作中遇到的各种情况和大量数据在数据库存储的基础上,提供信息咨询,信息检索,信息存取等服务,在此论文中主要实现对存储在数据库中的数据表进行这些简单的操作,为提高企业人事管理效率提供了行之有效的手段。
关键词:
VC++6.0;高校工资管理
目录
目录1
第一章开发环境和开发工具1
1.1C/C++语言简介1
1.2开发背景1
1.3开发环境1
第二章算法思想2
2.1系统需求分析2
2.2系统总体设计2
2.2.1系统设计目标2
2.2.2开发设计思想3
2.2.3系统功能模块设计3
2.3面向对象思想描述5
第三章面向对象实现6
3.1结构6
3.2程序模块6
3.3各类之间的关系6
3.4源程序代码6
第四章测试与分析19
4.1测试数据选择19
4.2测试结果分析19
总结21
心得体会22
参考文献23
第一章开发环境和开发工具
1.1C/C++语言简介
也可以让各种组件方便的转变为基于Web的应用,并且能够通过Internet被各种系统或是其他开发语言所开发的应用调用。
1.2开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。
采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而人事管理的全面自动化、信息化则是其中重要的组成部分。
人事管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。
因此,本文所研究的人事管理信息系统具有一定的使用价值和现实意义。
1.3开发环境
本文所采用的开发环境主要是基于C++在MicrosoftVisualC++平台上开发的系统,界面友好,功能强大,调试也很方便。
这是微软出的一个C语言集成开发环境(IDE),主要有:
VC++6.0、VS2005.VS2008.VS2010等,分为企业版和学生版等。
对于初学者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类,里面包含
voidAdd();//增加职工
voidDelete();//删除职工
voidModify();//修改职工
voidPrint();//输出职工信息
voidSave();//职工信息存盘
voidLoad();//职工信息装入
六个主要函数,通过这些函数实现程序需要求的功能。
并且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(编号)、Name[20](姓名)、Duty(职位)、Salary(基本工资)和Person类next指针。
而Teacher_Assistant类和Manager_Teacher类是两个父类,多继承。
程序还有一个友元类,College类是Person类的友元类。
3.4源程序代码
#include
#include
#include
usingnamespacestd;
#include
classPerson//人员类(抽象类)
{
protected:
intNo;//编号
charName[20];//姓名
intDuty;//人员类别标志(0:
教师,1:
实验员,2:
行政人员,3:
教师兼实验员,4:
行政兼教师)
doubleSalary;//基本工资
Person*next;//指针域
public:
Person()//基类构造
{
next=NULL;//指针域设置为空
}
virtual~Person()//基类虚析构
{
}
virtualvoidInput()=0;//从键盘输入数据
virtualvoidInput(ifstream&ifs)=0;//从文件输入数据
virtualvoidOutput()=0;//向屏幕输出数据
virtualvoidOutput(ofstream&ofs)=0;//向文件输出数据
virtualdoubleIncoming()=0;//计算收入
friendclassCollege;
};
classTeacher:
virtualpublicPerson//教师类
{
protected:
intHours;//教师课时
public:
//为对象设置数据分为两种途径,通过1)构造函数,2)一般成员函数
//分开可以使得程序中应用更加灵活
//本程序采用:
缺省构造+Input()
Teacher()//构造函数,初始化部分数据
{
Duty=0;
Salary=800;
}
voidInput()//键盘补充输入其它数据
{
cout<<"编号:
";cin>>No;
cout<<"姓名:
";cin>>Name;
cout<<"教师上学期课时:
";cin>>Hours;
}
voidInput(ifstream&ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
voidOutput()
{
cout<"<}
voidOutput(ofstream&ofs)
{
ofs<"<}
doubleIncoming()
{
returnSalary+(Hours-120)*20;
}
};
classAssistant:
virtualpublicPerson//实验员
{
protected:
intAllowance;
intHours;
public:
Assistant()
{
Duty=1;
Salary=650;
Allowance=150;
}
voidInput()
{
cout<<"编号:
\n";cin>>No;
cout<<"姓名:
\n";cin>>Name;
cout<<"实验员上学期实验课时:
";cin>>Hours;
}
voidInput(ifstream&ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
voidOutput()
{
cout<"<}
voidOutput(ofstream&ofs)
{
ofs<"<}
doubleIncoming()
{
returnSalary+Allowance+(Hours-70)*20;
}
};
classManager:
virtualpublicPerson//行政人员
{
protected:
intAllowance;
public:
Manager()
{
Duty=2;
Salary=750;
Allowance=250;
}
voidInput()
{
cout<<"编号:
";cin>>No;
cout<<"姓名:
";cin>>Name;
}
voidInput(ifstream&ifs)
{
ifs>>No>>Name>>Duty;
}
voidOutput()
{
cout<"<}
voidOutput(ofstream&ofs)
{
ofs<"<}
doubleIncoming()
{
returnSalary+Allowance;
}
};
classTeacher_Assistant:
publicTeacher,publicAssistant//教师兼实验员
{
public:
Teacher_Assistant()
{
Duty=3;
Teacher:
:
Salary=800;
}
voidInput()
{
cout<<"编号:
";
cin>>No;
cout<<"姓名:
";
cin>>Name;
cout<<"教师上学期课时:
";
cin>>Teacher:
:
Hours;
cout<<"教师兼职实验员上学期实验课时:
";
cin>>Assistant:
:
Hours;
}
voidInput(ifstream&ifs)
{
ifs>>No>>Name>>Duty>>Teacher:
:
Hours>>Assistant:
:
Hours;
}
voidOutput()
{
cout<:
Hours<<"\t"
<:
Hours<<"\t"<<"工资:
"<}
voidOutput(ofstream&ofs)
{
ofs<:
Hours<<"\t"
<:
Hours<<"\t"<<"工资:
"<}
doubleIncoming()
{
returnSalary+(Teacher:
:
Hours-120)*20
+Allowance+(Assistant:
:
Hours-70)*20;
}
};
classManager_Teacher:
publicManager,publicTeacher//行政人员兼教师
{
public:
Manager_Teacher()
{
Duty=4;
Manager:
:
Salary=750;
}
voidInput()
{
cout<<"编号:
";cin>>No;
cout<<"姓名:
";cin>>Name;
cout<<"行政人员兼职教师上学期课时:
";cin>>Hours;
}
voidInput(ifstream&ifs)
{
ifs>>No>>Name>>Duty>>Hours;
}
voidOutput()
{
cout<"<}
voidOutput(ofstream&ofs)
{
ofs<"<}
doubleIncoming()
{
returnSalary+Allowance+(Hours-120)*20;
}
};
classCollege
{
private:
Person*PL;
voidClear();
intCollege:
:
Find(intID,Person**p1,Person**p2);
public:
College();//构造
~College();//析构
voidAdd();//增加职工
voidDelete();//删除职工
voidModify();//修改职工
voidPrint();//输出职工信息
voidSave();//职工信息存盘
voidLoad();//职工信息装入
};
College:
:
College()//构造函数(创建1个头结点的链表)
{
Person*p=newTeacher;
PL=p;
cout<<"自动装入数据...\n";
Load();
}
College:
:
~College()//析构函数(仅保留1个头结点)
{
Person*p=PL;
while(p)//逐个删除结点,包括头结点
{
PL=p->next;
deletep;
p=PL;
}
PL=NULL;
}
voidCollege:
:
Add()//增加职工
{
cout<<"\n****增加职工****\n";
//查找尾结点
Person*p=PL;
while(p->next)p=p->next;
intch;
cout<<"输入职工分类码(0:
教师,1:
实验员,2:
行政人员,3:
教师兼实验员,4:
行政兼教师):
\n";
cin>>ch;
//创建新结点,录入数据,连接到链表
Person*pt;
switch(ch)
{
case0:
pt=newTeacher;pt->Input();
p->next=pt;
break;
case1:
pt=newAssistant;pt->Input();
p->next=pt;
break;
case2:
pt=newManager;pt->Input();
p->next=pt;
break;
case3:
pt=newTeacher_Assistant;pt->Input();
p->next=pt;
break;
case4:
pt=newManager_Teacher;pt->Input();
p->next=pt;
break;
default:
return;
}
}
voidCollege:
:
Clear()//清除所有的职工结点(仅保留头结点)
{
Person*p=PL->next;
while(p)
{
PL->next=p->next;
deletep;
p=PL->next;
}
}
//查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)
intCollege:
:
Find(intID,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;
}
voidCollege:
:
Delete()//删除职工
{
cout<<"\n**删除职工**\n";
intNo;
Person*p1,*p2;
cout<<"编号:
";cin>>No;
if(!
Find(No,&p1,&p2))
{
cout<<"指定的人员没有找到!
\n";
}
else
{
p2->next=p1->next;//连接
deletep1;
cout<<"正确删除!
\n";
}
}
voidCollege:
:
Modify()//修改职工
{
cout<<"\n**修改职工**\n";
intNo;
Person*p1,*p2;
cout<<"编号:
";cin>>No;
if(!
Find(No,&p1,&p2))
{
cout<<"指定的人员没有找到!
\n";
}
else
{
p1->Output();//输出原来的职工信息(做提示)
p1->Input();//输入新的职工信息(更新)
cout<<"修改完成!
\n";
}
}
voidCollege:
:
Print()//输出职工信息
{
cout<<"\n**职工信息表**\n";
cout<<"编号姓名岗位其它收入情况\n";
Person*p=PL->next;
if(!
p)
{
cout<<"无职工记录!
\n";
return;
}
while(p)//遍历链表,输出职工信息
{
p->Output();
p=p->next;
}
}
voidCollege:
:
Save()//职工信息存盘
{
ofstreamf("Person.txt",ios:
:
out);//打开文件
//遍历输出至文件
Person*p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close();//关闭文件
cout<<"职工信息已经保存在Person.txt.\n";
}
voidCollege:
:
Load()//职工信息装入
{
charbuf[81];//临时空间
intDuty;//人员类型
Person*p2;//新建结点的指针
longt;//读写位置
//清除现有结点(