高校工资管理系统实验报告.docx
《高校工资管理系统实验报告.docx》由会员分享,可在线阅读,更多相关《高校工资管理系统实验报告.docx(32页珍藏版)》请在冰豆网上搜索。
![高校工资管理系统实验报告.docx](https://file1.bdocx.com/fileroot1/2022-11/30/fbf7b8f0-4356-46c9-b691-17e03e78fcbe/fbf7b8f0-4356-46c9-b691-17e03e78fcbe1.gif)
高校工资管理系统实验报告
课程设计报告
课程名称算法与程序设计
课题名称高校工资管理系统
专业信息与计算科学
班级1303
学号31
姓名唐婷
指导教师王祝君老师
2014年12月25日
湖南工程学院
课程设计任务书
课程名称算法与程序设计
课题高校工资管理系统
专业班级信息与计算科学1303
学生姓名唐婷
学号31
指导老师王祝君老师
审批
任务书下达日期2014年12月10日
任务完成日期2014年12月26日
一、设计内容与设计要求
1.设计内容:
对课程《算法与程序设计》中的相关内容进行综合设计或应用(具体课题题目见后面的供选题目)。
2.设计要求:
●前言(包括课题的背景资料,别人已做了些什么,自己准备做哪些改进)
●课程设计报告正文内容
(包括系统设计要求,设计思路,系统功能模块图,系统流程图,类的层次图(包括类成员列表),调试过程,关键程序代码,总结,参考书目等)。
(一)需求分析
系统设计目的与意义
系统功能需求(系统流程图);
输入输出的要求;
(二)总体设计
系统功能分析;
系统功能模块划分与设计(系统功能模块图)。
(三)详细设计
数据库需求分析
数据库概念结构设计(E-R图);
数据库逻辑结构设计。
类层次图
(四)界面设计与各功能模块实现
(五)系统调试
调试问题出现的主要问题:
编译语法错误及修改,重点是运行逻辑问题修改和调整
(六)使用说明及编程体会
说明如何使用你编写的程序,详细列出每一步的操作步骤。
(七)关键源程序(带注释)
●书写格式
a.要求用A4纸打印成册
b.正文格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
c.正文的内容:
正文总字数要求在3000字左右(不含程序原代码)。
d.封面格式如下页。
●考核方式
指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。
具体考核标准包含以下几个部分:
a.平时出勤(占10%)
b.系统需求分析、功能设计、数据结构设计及程序总体结构合理与否(占10%)
c.程序能否完整、准确地运行,个人能否独立、熟练地调试程序(占40%)
d.设计报告(占30%)
注意:
不得抄袭他人的报告(或给他人抄袭),一旦发现,成绩为零分。
e.独立完成情况(占10%)。
●课程验收要求
a.判定算法设计的合理性,运行相关程序,获得正确的数值结果。
b.回答有关问题。
c.提交课程设计报告。
d.提交软盘(源程序、设计报告文档)。
e.依内容的创新程度,完善程序情况及对程序讲解情况打分。
三、 教材及参考书
朱战立等著,C++面向对象程序设计,人民邮电出版社;
郑莉著,C++语言程序设计(含实验指导书)。
清华大学出版社(结构化程序设计部分)
钱能主编,C++程序设计教程,清华大学出版社,2000.11
戴锋编著,VisualC++程序设计基础,清华大学出版社,2001.4
吕日著,C++程序设计教程,清华大学出版社,
C++大学教程,美国HarveyM.Deitel等
四、进度安排
1、主讲教师:
2、辅班级:
信息与计算科学:
1301、1302、1303
3、导教师:
4、时间安排:
第16-17周星期二8时:
00分——11时:
30分
星期二14时:
00分——17时:
30分
星期六8时:
30分——11时:
30分
星期六14时:
30分——17时:
30分
理学院课程设计评分表
课程名称:
项目
评价
设计方案的合理性与创造性
设计与调试结果
设计说明书的质量
答辩陈述与回答问题情况
课程设计周表现情况
综合成绩
教师签名:
日期:
题目5:
高校工资管理系统
(一)、课程设计题目:
高校工资管理系统
(二)、目的与要求:
1、目的:
(1)要求学生达到熟练掌握C++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及C++的编程思想来完成系统的设计;
(2)要求在设计的过程中,建立清晰的类层次;
(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;
(3)在系统的设计中,至少要用到面向对象的一种机制。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。
4、写出设计说明书
(三)、设计方法和基本原理:
1、功能要求
问题的描述(功能要求):
现一高校有五类职工:
教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。
为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。
同时注意生成的相关数据结果以文件方式存放在硬盘中。
程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于工作调动,则可进行相对应的删除动作。
相关信息:
每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:
其中工资的基本构成如下:
教师:
基本工资+课时费;
实验员:
基本工资+实验室补助;
行政人员:
基本工资+行政补贴;
教师兼职实验员:
基本工资+课时费+实验室补助;
行政人员兼职教师:
基本工资+行政补贴+课时费;
其中:
(1)课时费:
教师每一学期的基本工作量为120,实验员每学期基本工作量为70,行政人员没有基本工作量,每节课时费为20元;课时费=(上学期工作量-基本工作量)*20;
注意:
如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*20为负值。
(2)基本工资:
教师800元,实验员650元,行政人员750元。
(3)行政补贴:
250元。
(4)实验室补助:
150元。
2、问题的解决方案:
根据系统功能要求,可以将问题解决分为以下步骤:
a)写出需求分析(该程序要实现什么什么样的功能)
b) 分析系统中的各个实体之间的关系及其属性和行为;
c) 根据问题描述,设计系统的类层次;
d) 完成类层次中各个类的描述(包括属性和方法);
e) 完成类中各个成员函数的定义;
f) 用户界面的设计
g) 分析系统功能模块(系统流程图)
h) 代码编写
i) 功能调试;
j) 完成系统总结报告以及系统使用说明书。
一.实验目的:
综合运用封装、继承、多态性、文件流、异常处理来设计和实现简单的信息管理系统
二.实验任务:
设计和实现高校工资管理系统:
高校中人员有:
行政人员、教师、实验室人员、后勤人员、外聘人员。
通过本系统要求实现以下功能:
1)添加职员的基本信息;
2)校内人员调离学校删除信息;
3)根据工作证号查询校内人员的工资,根据姓名查询外聘人员的工资;
4)根据工资计算准则计算总工资;
分类输出所有人员的信息。
三.程序思想:
(1)分析各系统中各个实体之间的关系及其属性和行为;
(2)根据问题描述,建立Person基类,从Person中派生出的五类职工类,及Person的友元类College类;
(3)完成类层次中的各个类的描述(包括属性和方法),及成员定义,基本工资,课时费的计算,输入输出等。
(4)完成系统的应用模块,及问题的基本功能实现,建立了一个链表,把数据存放在链表中,根据每条数据的指地址针完成对数据的增、删、查询、统计操作。
(5)功能调试,输入一些具体数据进行调试,检查程序运行结果。
四.对象模型:
高校工资管理系统对象模型:
高校工资管理系统类关系:
五.程序清单:
(部分源代码)
#include
#include
#include
#include
classPerson//人员类(抽象类)
{protected:
doublenum;//编号
charName[20];//姓名
intAge;//年龄
intDuty;//人员类别标志(1-教师,2-实验室人员,3-行政人员,4-后勤人员,5-外聘人员)
doubleSalary;//基本工资
Person*next;//指针域
public:
Person()//基类构造
{next=0;//指针域设置为空
}
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=1;
Salary=800;}
voidInput()//键盘补充输入其它数据
{cout<<"\n编号:
";cin>>num;
cout<<"\n姓名:
";cin>>Name;
cout<<"\n年龄:
";cin>>Age;
cout<<"\n教师上学期课时:
";cin>>Hours;
Salary=Incoming();
}
voidInput(ifstream&ifs)
{ifs>>num>>Name>>Age>>Duty>>Hours>>Salary;}
voidOutput()
{cout<}
voidOutput(ofstream&ofs)
{ofs<}
doubleIncoming()
{if(Hours>120)
returnSalary+(Hours-120)*20;
else
returnSalary;
}
};
classAssistant:
virtualpublicPerson//实验员
{protected:
intAllowance;
intHours;
public:
Assistant()
{Duty=2;
Salary=650;
Allowance=150;
}
voidInput()
{cout<<"\n编号:
";cin>>num;
cout<<"\n姓名:
";cin>>Name;
cout<<"\n年龄:
";cin>>Age;
cout<<"\n实验员上学期实验课时:
";cin>>Hours;
Salary=Incoming();
}
voidInput(ifstream&ifs)
{
ifs>>num>>Name>>Age>>Duty>>Hours>>Salary;
}
voidOutput()
{
cout<}
voidOutput(ofstream&ofs)
{
ofs<}
doubleIncoming()
{if(Salary>70)
returnSalary+Allowance+(Hours-70)*20;
elsereturnSalary+Allowance;
}
};
classManager:
virtualpublicPerson//行政人员
{protected:
intAllowance;
public:
Manager()
{Duty=3;
Salary=750;
Allowance=250;
}
voidInput()
{cout<<"编号:
";cin>>num;
cout<<"姓名:
";cin>>Name;
cout<<"年龄:
";cin>>Age;
Salary=Incoming();
}
voidInput(ifstream&ifs)
{
ifs>>num>>Name>>Age>>Duty>>Salary;
}
voidOutput()
{
cout<}
voidOutput(ofstream&ofs)
{
ofs<}
doubleIncoming()
{returnSalary+Allowance;
}
};
classLogistic:
publicTeacher,publicAssistant//后勤人员
{
public:
Logistic()
{Duty=4;
Teacher:
:
Salary=800;
}
voidInput()
{cout<<"\n编号:
";cin>>num;
cout<<"\n姓名:
";cin>>Name;
cout<<"\n年龄:
";cin>>Age;
cout<<"\n后勤人员的补助:
";cin>>Allowance;
Salary=Incoming();
}
voidInput(ifstream&ifs)
{
ifs>>num>>Name>>Age>>Duty>>Teacher:
:
Hours>>Salary;
}
voidOutput()
{
cout<<<"\t"<}
voidOutput(ofstream&ofs)
{
ofs<<}
doubleIncoming()
{returnSalary+Allowance;
}
};
classInvitation:
publicManager,publicTeacher//外聘人员
{public:
Invitation()
{Duty=5;
intSalary=1650;
}
voidInput()
{cout<<"\n编号:
";cin>>num;
cout<<"\n姓名:
";cin>>Name;
cout<<"\n年龄:
";cin>>Age;
cout<<"\n外骋人员上学期课时:
";cin>>Hours;
Salary=Incoming();
}
voidInput(ifstream&ifs)
{
ifs>>num>>Name>>Age>>Duty>>Hours>>Salary;
}
voidOutput()
{
cout<}
voidOutput(ofstream&ofs)
{
ofs<}
doubleIncoming()
{returnSalary+Hours*20;
}
};
classCollege
{private:
Person*PL;
voidClear();
intCollege:
:
Find(intID,Person**p1,Person**p2);
intCollege:
:
Find1(char*NAME,Person**p1,Person**p2);
public:
College();//构造
~College();//析构
voidAdd();//增加职工
voidDelete();//删除职工
voidModify();//修改职工
voidPrint();//输出职工信息
voidSave();//职工信息存盘
voidLoad();//职工信息装入
voidFind();//查找
voidBuild();//导引
voidStat();//统计
voidInterface2();
};
College:
:
College()//构造函数(创建1个头结点的链表)
{Person*p=newTeacher;
PL=p;
cout<<"自动装入数据……………………\n";
Build();
}
College:
:
~College()//析构函数(仅保留1个头结点)
{
Person*p=PL;
while(p)//逐个删除结点,包括头结点
{PL=p->next;
deletep;
p=PL;
}
PL=0;
}
voidCollege:
:
Add()//增加职工
{
charc;
do
{cout<<"\n**增加职工**\n";
//查找尾结点
Person*p=PL;
while(p->next)p=p->next;
intch;
cout<<"输入职工分类码[1-教师,2-实验员,3-行政人员,4-后勤人员,5-外聘人员]:
\n";cin>>ch;
//创建新结点,录入数据,连接到链表
Teacher*pt;
Assistant*pa;
Manager*pm;
Logistic*pta;
Invitation*pmt;
switch(ch)
{
case1:
pt=newTeacher;pt->Input();
p->next=pt;
break;
case2:
pa=newAssistant;pa->Input();
p->next=pa;
break;
case3:
pm=newManager;pm->Input();
p->next=pm;
break;
case4:
pta=newLogistic;pta->Input();
p->next=pta;
break;
case5:
pmt=newInvitation;pmt->Input();
p->next=pmt;
break;
default:
return;
}
cout<<"是否进行循环?
y/n\n";
cin>>c;
}while(c=='y'||c=='Y');
Save();
}
voidCollege:
:
Clear()//清除所有的职工结点(仅保留头结点)
{Person*p=PL->next;
while(p)
{PL->next=p->next;
deletep;
p=PL->next;
}
}
//查找
voidCollege:
:
Find()
{Person*p1,*p2;
intch,num;
charname[20];
intagain=1;
charah;
while(again)
{
Interface2();
cout<<"请输入所要查看职员的类别:
";
cin>>ch;
if(ch==1)
{cout<<"请输入所要查看的职员的工作证号:
";
cin>>num;
Find(num,&p1,&p2);
}
if(ch==2)
{cout<<"请输入所要查看的职员的姓名:
";
cin>>name;
Find1(name,&p1,&p2);
}
cout<<"是否继续查看工资(y/n)?
";
cin>>ah;
cout<if(!
(ah=='Y'||ah=='y'))
again=0;
}
}
//查找职工结点(返回1-找到,0-未找到.结点指针由p1返回,p2为前看指针)
intCollege:
:
Find(intID,Person**p1,Person**p2)
{*p1=PL->next;
*p2=PL;
while(*p1)
{
if((*p1)->num==ID)
{cout<<"姓名:
"<<(*p1)->Name<cout<<"工作证号:
"<<(*p1)->num<cout<<"工资:
"<<(*p1)->Incoming()<//p1->Output();
break;}//找到
else
{
*p2=*p1;//继续