c++课程设计--高校工资管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高校工资管理系统
任务书
一、设计题目
高校工资管理系统
二、主要内容
三、具体要求及应提交的材料
高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。
为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。
同时注意生成的相关数据结果以文件方式存放在硬盘中。
程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于工作调动,则可进行相对应的删除工作。
相关信息:
每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:其中工资的基本构成如下:
教师:基本工资+课时费;
实验员:基本工资+实验室补助;
行政人员:基本工资+行政补贴;
教师兼职实验员:基本工资+课时费+实验室补助;
行政人员兼职教师:基本工资+行政补贴+课时费;
(其中:
1.课时费:教师每一学期的基本工作量为120,实验员每学期基本工作量为70,行政人员没有基本工作量,每节课时费为20元;课时费=(上学期工作量-基本工作量)*20;
注意:如果上学期基本工作量没完成,则其(上学期工作量-基本工作量)*20为负值。
2.基本工资:教师800元,实验员650元,行政人员750元。
3.行政补贴:250元。
课程设计说明书
4.实验室补助:150元。
)
四、主要技术路线提示
五、进度安排
六、推荐参考资料(不少于3篇)
1 引言
1.1 问题的提出
随着高等学校的快速发展,高校规模越来越大,教职工的数量也越来越多,高校工资管理更加的复杂化,儿工资管理是一项琐碎、复杂而又十分细致的工作,工资计算、发放、核算的工作量很大,这就会耗费工作人员大量的时间和精力,计算机进行工资发放工作,不仅能够保证工资核算准确无误,而且还可以利用计算机对有关工资的各种信息进行统计,服务于财政部门其他发面的核算和财务处理,同时计算机具有着手工管理嗦无法比拟的优点。
高校工资管理系统便是以计算机为工具,通过对工资管理所需的信息管理,优化了管理体系,使其高效化、智能化,也提高了透明度和互动性。
2.程序的主要功能
2.1添加功能
可以从键盘或文件录入职工的相应信息。
2.2删除功能
能够对指定的职工信息进行删除。
2.3 显示功能
能够显示职工编号、姓名、类别、本学期任职情况和工资等信息。
2.4查找功能
根据你键入的职工编号,显示其详细信息。
1
2.5计算功能
根据你键入的职工相关信息自动计算其工资功能。
3 程序运行平台
4 总体设计
5 模块分析
5.1 添加模块
系统将提示用户输入新添加的职员的信息,插入在链表中。
void College::Add() //增加职工
{
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<<"输入职工分类码[0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师]:\n";
cin>>ch;
Teacher *pt; //创建新结点,录入数据,连接到链表
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 0:
pt=new Teacher;
pt->Input();
p->next=pt;
break;
case 1:
pa=new Assistant;
pa->Input();
p->next=pa;
break;
case 2:
pm=new Manager;
pm->Input();
p->next=pm;
break;
2
课程设计说明书
3
case 3:
pta=new Teacher_Assistant; pta->Input(); p->next=pta; break; case 4:
pmt=new Manager_Teacher; pmt->Input(); p->next=pmt; break; default: return; } }
输入需要添加的教职工类别ch
(0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师) 创建新结点,录入数据,连接到链表 switch(ch) case0: pt=new Teacher; pt->Input(); p->next=pt; break;
case 1: pa=new Assistant; pa->Input(); p->next=pa; break;
case 2: pm=new Manager; pm->Input(); p->next=pm; break;
case 3: pta=new Teacher_Assistant; pta->Input(); p->next=pta; break;
case 4: pmt=new
Manager_Teacher; pmt->Input(); p->next=pmt; break;
5.2 显示模块
显示模块将输出所有职员的主要资料 。
void College::Print() //显示输出职工信息 {
cout<<"\n** 职工信息表 **\n";
cout<<"编号 姓名 岗位 课时 收入情况\n"; Person *p=PL->next; if(!p) {
cout<<"无职工记录!\n"; return; }
while(p) //找到并输出职工信息 {
p->Output(); p=p->next; }
4
}
5.3 删除模块
首先由用户输入要删除的单个职员姓名,然后调用删除函数,删除该名职员的资料。
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"; } else {
p2->next=p1->next; //连接
Person *p=PL->next; true !p false
cout<<"无职工记录!\n"; return; p->Output(); p=p->next; //找到并输出职工信息
课程设计说明书
5
delete p1;
cout<<"正确删除!\n"; } }
5.4 查找模块
首先由用户输入要查找的职员姓名,然后系统用查找函数查找,然后系统就调用输出函数,输出所查找的职员资料。
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::Find1() //查询职工信息 {
cout<<"\n** 查询职工 **\n"; int no;
Person *p1,*p2; cout<<"编号:"; cin>>no;
if(!Find(no,&p1,&p2))
由输入的职工编号查找职工结点 找到
未找到
p2->next=p1->next; //连接 delete p1;
cout<<"正确删除!\n";
cout<<"指定的人员没有找到!\n";
6
{
cout<<"指定的人员没有找到!\n"; } else {
cout<<"编号 姓名 岗位 课时 收入情况\n";
cout<<setw(4)<<p1->no<<setw(6)<<p1->name<<setw(4)<<p1->duty<<setw(8)<<p1->hours<<setw(8)<<p1->Incoming()<<endl; } }
结论
通过这次课程设计,我对C++又有了更深一步的了解,尤其是关于指针、链表等数据结构,还有类的使用,基本上可以灵活运用指针数组了。
类与对象的使用使程序更加模块化,与客观世界的联系也更为紧密。
在编写程序之前对自己所要编写的程序所要实现的功能,使用什么结构等要有大致的构思,这样在编写时思路才会更清晰,程序出错的几率降低,程序总体上的考虑也能更周全、运行更顺畅。
附 录
附录1 源程序代码 #include <iostream.h> #include <iomanip.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <fstream.h> const int P=20;
class Person //定义抽象类
由输入的职工编号查找职工结点 找到
未找到
按照格式输出所查找到的职工相关信息
cout<<"指定的人员没有找到!\n";
课程设计说明书
{
protected:
int no; //编号
char name[20]; //姓名
int duty; //人员类别:0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师
int hours; //基本工作量
Person *next; //指针域
public:
Person() //构造基类
{
next=0; //指针域设为空
}
virtual ~Person() //基类虚析构
{}
virtual void Input()=0; //从键盘输入数据
virtual void Input(ifstream& ifs)=0; //从文件输入数据
virtual void Output()=0; //向屏幕输出数据
virtual void Output(ofstream& ofs)=0; //向文件输出数据
virtual int Incoming()=0; //计算收入
friend class College;
};
class Teacher:virtual public Person //教师类
{
public:
Teacher() //构造函数,初始化部分数据
{
duty=0;
}
void Input() //键盘补充输入其它数据
{
cout<<"编号:"; cin>>no;
cout<<"姓名:"; cin>>name;
cout<<"教师上学期课时:";
cin>>hours;
}
void Input(ifstream& ifs) //从文件输入数据
{
ifs>>no>>name>>duty>>hours;
}
void Output()
{
7
cout<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<hours<<setw( 8)<<Incoming()<<endl;
}
void Output(ofstream& ofs)
{
ofs<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<hours<<setw(8)<< endl;
}
int Incoming() //计算教师工资
{
return hours*P-1600;
}
};
class Assistant:virtual public Person //实验员类
{
public:
Assistant()
{
duty=1;
}
void Input()
{
cout<<"编号:";
cin>>no;
cout<<"姓名:";
cin>>name;
cout<<"实验员上学期课时:";
cin>>hours;
}
void Input(ifstream& ifs)
{
ifs>>no>>name>>duty>>hours;
}
void Output()
{
cout<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<hours<<setw(8)< <Incoming()<<endl;
}
void Output(ofstream& ofs)
{
8
课程设计说明书
ofs<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<hours<<setw(8)<< endl;
}
int Incoming()
{
return hours*P-600;
}
};
class Manager:virtual public Person //行政人员类
{
public:
Manager()
{
duty=2;
hours=0;
}
void Input()
{
cout<<"编号:";
cin>>no;
cout<<"姓名:";
cin>>name;
}
void Input(ifstream& ifs)
{
ifs>>no>>name>>duty;
}
void Output()
{
cout<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<hours<<setw(8)< <Incoming()<<endl;
}
void Output(ofstream& ofs)
{
ofs<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<hours<<setw(8)<<endl;
}
int Incoming()
{
return 1000;
}
};
9
class Teacher_Assistant:public Teacher,public Assistant //教师兼实验员类
{
public:
Teacher_Assistant()
{
duty=3;
}
void Input()
{
cout<<"编号:";
cin>>no;
cout<<"姓名:";
cin>>name;
cout<<"教师兼职实验员上学期实验课时:";
cin>>Teacher::hours;
}
void Input(ifstream& ifs)
{
ifs>>no>>name>>duty>>Teacher::hours;
}
void Output()
{
cout<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<Teacher::hours<< setw(8)<<Incoming()<<endl;
}
void Output(ofstream& ofs)
{
ofs<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<Teacher::hours<<s etw(8)<<endl;
}
int Incoming() //计算工资
{
return 1450+Teacher::hours*P;
}
};
class Manager_Teacher:public Manager,public Teacher //行政人员兼教师类
{
public:
Manager_Teacher()
{
课程设计说明书
duty=4;
}
void Input()
{
cout<<"编号:";
cin>>no;
cout<<"姓名:";
cin>>name;
cout<<"行政人员兼职教师上学期课时:";
cin>>Manager::hours;
}
void Input(ifstream& ifs)
{
ifs>>no>>name>>duty>>Manager::hours;
}
void Output()
{
cout<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<Manager::hou rs<<setw(8)<<Incoming()<<endl;
}
void Output(ofstream& ofs)
{
ofs<<setw(4)<<no<<setw(6)<<name<<setw(4)<<duty<<setw(8)<<Manager::hours<< setw(8)<<endl;
}
int Incoming() //计算工资
{
return 1000+Manager::hours*P;
}
};
class College
{
private:
Person *PL;
void Clear();
int College::Find(int ID,Person **p1,Person **p2);
public:
College(); //构造函数
void Add(); //增加职工函数
void Delete(); //删除职工函数
void Modify(); //修改职工函数
void Print(); //输出职工信息函数
void Save(); //职工信息存盘函数
void Load(); //职工信息装入函数
void Find1(); //查找职工信息函数
~College(); //析构函数
};
College::College() //构造函数(创建1个头结点的链表)
{
Person *p=new Teacher;
PL=p;
Load();
}
College::~College() //析构函数(仅保留1个头结点)
{
Person *p=PL;
while(p) //逐个删除结点,包括头结点
{
PL=p->next;
delete p;
p=PL;
}
PL=0;
}
void College::Add() //增加职工
{
Person *p=PL;
while(p->next)p=p->next;
int ch;
cout<<"输入职工分类码[0-教师,1-实验员,2-行政人员,3-教师兼实验员,4-行政兼教师]:\n";
cin>>ch;
Teacher *pt; //创建新结点,录入数据,连接到链表
Assistant *pa;
Manager *pm;
Teacher_Assistant *pta;
Manager_Teacher *pmt;
switch(ch)
{
case 0:
pt=new Teacher;
pt->Input();
课程设计说明书
p->next=pt;
break;
case 1:
pa=new Assistant;
pa->Input();
p->next=pa;
break;
case 2:
pm=new Manager;
pm->Input();
p->next=pm;
break;
case 3:
pta=new Teacher_Assistant;
pta->Input();
p->next=pta;
break;
case 4:
pmt=new Manager_Teacher;
pmt->Input();
p->next=pmt;
break;
default:
return;
}
}
void College::Clear() //清除职工结点,仅保留头结点
{
Person *p=PL->next;
while(p)
{
PL->next=p->next;
delete p;
p->next=PL->next;
}
}
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";
}
else
{
p2->next=p1->next; //连接
delete p1;
cout<<"正确删除!\n";
}
}
void College::Find1() //查询职工信息
{
cout<<"\n** 查询职工**\n";
int no;
Person *p1,*p2;
cout<<"编号:";
cin>>no;
if(!Find(no,&p1,&p2))
{
cout<<"指定的人员没有找到!\n";
}
else
{
cout<<"编号姓名岗位课时收入情况\n";
课程设计说明书
cout<<setw(4)<<p1->no<<setw(6)<<p1->name<<setw(4)<<p1->duty<<setw(8)<< p1->hours<<setw(8)<<p1->Incoming()<<endl;
}
}
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.dat",ios::out); //打开文件
//遍历输出至文件
Person *p=PL->next;
while(p)
{
p->Output(f);
p=p->next;
}
f.close(); //关闭文件
cout<<"职工信息已经保存在Person.dat.\n";
}
void College::Load() //职工信息装入
{
char buf[81]; //临时空间
int duty; //人员类型
Person *p2; //新建结点的指针
long t; //读写位置
Clear(); //清除现有结点(保留头结点)
ifstream f("Person.dat",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);
}
else
break;
}
f.close(); //关闭文件
}
void main()
{
int i,j;
char ch;
College c; //定义大学对象
do //显示主菜单
{
cout<<"|-------------------------菜单----------------------|\n";
cout<<"1-增加教职工信息\n";
cout<<"2-删除教职工信息\n";
cout<<"3-输出教职工信息\n";
cout<<"4-查询教职工信息\n";
cout<<"5-数据存盘\n";
cout<<"0-结束"<<endl;
cout<<"|---------------------------------------------------|"<<endl;
cout<<"输入1~4应的操作,输入0 结束"<<endl;
cin>>ch;
课程设计说明书system("cls");
switch(ch)
{
case '1':
{
cout<<"\n** 增加职工**\n";
cout<<"请输入需要增加的职工数:";
cin>>i;
for(j=1;j<=i;j++)
{
c.Add();
}
break;}
case '2':c.Delete();break;
case '3':c.Print();break;
case '4':c.Find1();break;
case '5':c.Save();break;
default :break}
}while(ch!='0');
}。