C课程设计论文高校工资管理系统设计_第1页
C课程设计论文高校工资管理系统设计_第2页
C课程设计论文高校工资管理系统设计_第3页
C课程设计论文高校工资管理系统设计_第4页
C课程设计论文高校工资管理系统设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计报告题 目 高校工资管理系统 (院)系 计算机科学与技术系 专业 计算机科学与技术 班级 0401 学号 34 学生姓名 导师姓名 完成日期 目录c+课程设计课程设计任务。(3)系统流程图及类的层次图。(5)系统源程序。(8)课程设计总结。(21)课程设计任务课程设计题目:  高校工资管理系统目的与要求:1、目的: (1)要求学生达到熟练掌握c+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、基本要求: (1)要求利用面向对象的方法以及c+的编程思想来完成系统的设计; (2)要求

2、在设计的过程中,建立清晰的类层次;(3)在系统中至少要定义四个类,每个类中要有各自的属性和方法;(3)在系统的设计中,至少要用到面向对象的一种机制。3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。4、写出设计说明书 设计方法和基本原理:1、功能要求 问题的描述(功能要求):现一高校有五类职工:教师,实验员,行政人员,教师兼职实验员,行政人员兼职教师。为了实现工资发放的自动功能,现要求编写程序来自动完成此功能。同时注意生成的相关数据结果以文件方式存放在硬盘中。程序应具备从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),如若有职工由于

3、工作调动,则可进行相对应的删除动作。相关信息:每一学期将学校职工的本学期任职情况及上学期工作的相关情况输入计算机,则本学期职工的月工资按程序处理后的结果发放,其中职工的工资计算方法如下:其中工资的基本构成如下: 教师: 基本工资+课时费; 实验员: 基本工资+实验室补助; 行政人员: 基本工资+行政补贴; 教师兼职实验员: 基本工资+课时费+实验室补助; 行政人员兼职教师:基本工资+行政补贴+课时费;(其中: (1).课时费:教师每一学期的基本工作量为120,实验员每学期基本工作量为70,行政人员没有基本工作量,每节课时费为20元;课时费=(上学期工作量-基本工作量)*20; 注意:如果上学期

4、基本工作量没完成,则其(上学期工作量-基本工作量)*20为负值。 (2).基本工资:教师800元,实验员650元,行政人员750元。 (3).行政补贴:250元。 (4).实验室补助:150元。2、问题的解决方案:根据系统功能要求,可以将问题解决分为以下步骤: a) 写出需求分析(该程序要实现什么什么样的功能) b) 分析系统中的各个实体之间的关系及其属性和行为; c) 根据问题描述,设计系统的类层次; d) 完成类层次中各个类的描述(包括属性和方法); e) 完成类中各个成员函数的定义; f) 用户界面的设计 g) 分析系统功能模块

5、(系统流程图) h) 代码编写 i) 功能调试; j) 完成系统总结报告以及系统使用说明书。设计思路此课题核心是研究高校工资的管理,我们要本着以工资自动发放为目的的思想进行研究设计。系统需要作到从键盘录入,文件的可继续录入,任意职工的工资查询(可由职工编号和职工姓名来实现),任意职工信息的存入,如若有职工由于工作调动,则可进行相对应的删除动作等功能,那我们就要从这几方面着手研究。首先,可以根据职工职位的不同将其分类,系统在运行的时候可以根据不同的职位选择不同的类,从而实现任意职工工资.信息的查询。接着就是程序功能,我们可以根据系统的各种功能先设计出适应各种功能的程

6、序,在将这些分散的程序块利用我们学习的c+的有关知识进行链接.合并,就可以达到工资自动发放的目的了。从该课程设计的要求可以看出该程序有以下五类:(1)教师类.(2)实验员类.(3)行政人员类.(4)教师兼实验员类.(5)行政人员兼教师类.系统的分部程序共包括以下几个:(1).新增职工.(2).删除职工.(3)修改职工信息.(4).查看职工信息.(5).数据存盘.(6).数据读取.(7)退出系统程序.所以我们就要先构造出这五类七函数,在将他们进行封装,整合,从而设计出一个完美的工资自动发放的系统。系统流程图及类的层次图。类的层次图 person no,name,duty,salary,next,

7、person( ),incoming( ),input( ),output( )teacher assistant manager teacher_assistant manager_teacher teacher( ), assistant( ), manager( ), teacher_assistant( ), manager_teacher( ),input( ), input( ), input( ), input( ), input( ),output( ), output( ), output( ), output( ), output( ),incoming( ) incomi

8、ng( ) incoming( ) incoming( ) incoming( ) 开 始 函数流程图(!)主函数流程 创 建 高 校 对 象显 示 菜 单接 受 输 入根据输入执行工资操作退出在? 结 束(2)college:add() (3)college:delete()开 始开 始 输入职工编号输入职工信息查找要删除结点输入数据,创建对象结点 结点存在?职工结点加入链表结 束 提示为找到删除结点 (4)college:modify()结 束开 始输入职工编号 (5)college:print()开 始查到结点输出所有职工信息结点存在?结 束修改结点提示未找到结 束(6)college:

9、save()开 始是否保存?保存信息退到主菜单结 束(7)college:load()开 始打开职工数据文件读一条记录链表接入结点根据职工类型创建结点文件未结束 y n读下面一行记录关闭文件结 束系统源程序#include <fstream.h>#include <string.h>#include <iostream.h>#include <iomanip.h>#include <stdlib.h>class personprotected: int no;/编号 char name15;/姓名 int duty; /人员类别标志(

10、1-教师,2-实验员,3-行政人员,4-教师兼实验员,5-行政兼教师) double salary;/基本工资 person *next;/指针域public:person(int no,char *name,int duty) this->no=no;strcpy(this->name,name);this->duty=duty;virtual double incoming()=0;virtual void output()=0;friend class college;class teacher:public person /教师类protected:int hour;

11、public:void gethour(int h)hour=h;teacher(int no,char *name,int duty,int hour):person(no,name,duty) this->hour=hour;this->salary=800;int gethour() return hour;double incoming() return (hour-120)*20+salary);void output() cout<<no<<"t"<<name<<"t教师t"<

12、<gethour()<<"t"<<incoming()<<endl;class assistant:public person /实验员类protected: int allowance;/实验室补助 int hour;public:assistant(int no,char *name,int duty,int hour ):person(no,name,duty)this->hour=hour; this->salary=650; this->allowance=150; int gethour() retur

13、n hour;double incoming()return salary+allowance+(hour-70)*20;void output()cout<<no<<"t"<<name<<"t实验员t"<<gethour()<<"t"<<incoming()<<endl;class manager:public person /行政人员类protected:int allowance;public:manager(int no,char

14、*name,int duty):person(no,name,duty)this->salary=750;this->allowance=250;double incoming()return salary+allowance;void output()cout<<no<<"t"<<name<<"t行政人员t"<<incoming()<<endl;class teacher_assistant:public person /教师兼实验员类protected:int hou

15、r;int allowance;public:void gethour(int h)hour=h;teacher_assistant(int no,char *name,int duty,int hour):person(no,name,duty) this->salary=800; this->allowance=150; this->hour=hour;double incoming()return (hour-120)*20+salary+allowance); int gethour()return hour;void output()cout<<no&l

16、t;<"t"<<name<<"教师兼实验员t"<<gethour()<<"t"<<incoming()<<endl;class manager_teacher:public person /行政人员兼教师protected: int hour; int allowance;public:void gethour(int h)hour=h;manager_teacher(int no,char *name,int duty,int hour):person(n

17、o,name,duty)this->salary=750;this->allowance=250;this->hour=hour;double incoming()return (hour-120)*20+allowance+salary);int gethour()return hour;void output()cout<<no<<"t"<<name<<"t行政人员兼t"<<gethour()<<"t"<<incoming()&l

18、t;<endl;class collegeprivate: person *pl;public: college(); /构造 college(); /析构 void add(); /增加职工 void delete(); /删除职工 void modify(); /修改职工 void print(); /输出职工信息 void save(); /职工信息存盘 void load(); /数据装入;college:college() /构造函数(创建1个头结点的链表) pl=0; college:college()person *p;p=pl;while(p->next)p=p-&

19、gt;next;delete pl;pl=p;pl=0;void college:add() /增加职工person *p;/新结点指针int no;char name20;int duty;int hour;cout<<"n* 新增员工 *n"do cout<<"请选择要增加的岗位"<<endl<<"(1教师 2实验员 3行政人员 4-教师兼实验员 5-行政人员兼教师):"cin>>duty;while(duty<1 |duty>5);cout<<&

20、quot;请输入编号:"cin>>no;cout<<"请输入名字:"cin>>name;if(duty=1) cout<<"请输入本学期教师的工作量:" cin>>hour;else if(duty=2)cout<<"请输入本学期实验员的工作量:"cin>>hour;else if(duty=4)cout<<"请输入本学期教师兼实验员的工作量:"cin>>hour;else if(duty=5)co

21、ut<<"请输入本学期行政人员兼教师的工作量:"cin>>hour;/创造新职工结点switch(duty) case 1:p=new teacher(no,name,duty,hour);break; case 2:p=new assistant(no,name,duty,hour);break; case 3:p=new manager(no,name,duty);break; case 4:p=new teacher_assistant(no,name,duty,hour);break; case 5:p=new manager_teacher

22、(no,name,duty,hour);break;p->next=0;/职工结点加入链表if(pl)/若已存在结点 person *tp; tp=pl; while(tp->next)/查找尾结点 tp=tp->next; tp->next=p;/连接else/若不存在结点pl=p;/连接void college:delete()int no;cout<<"n* 删除职员 *n"cout<<"请输入职员编号:"cin>>no;/查找要删除的结点person *p1,*p2;p1=pl;whil

23、e(p1)if(p1->no=no) break;else p2=p1; p1=p1->next;/删除结点if(p1!=null)/若找到则删除 if(p1=pl)/若要删除的结点是第一个结点 pl=p1->next; delete p1; else/若要删除的结点是后续结点 p2->next=p1->next; delete p1; cout<<"n编号为"<<no<<"的员工已经删除n" else cout<<"n编号为"<<no<&

24、lt;"的员工不存在n"void college:modify() int no,duty,hour; char name20; person *p1,*p2; p1=pl; cout<<"n* 修改职员信息 *n" cout<<"请输入需要修改职员的编号:" cin>>no; /查找要修改的结点 while(p1) if(p1->no=no) break; else p2=p1; p1=p1->next; /修改寻找到的节点 if(p1=null) cout<<"

25、输入的职员编号不存在!n" else cout<<"该职工的信息如下:"<<endl;p1->output();cout<<"选择要修改的岗位"<<"(1教师 2实验员 3行政人员 4-教师兼实验员 5-行政人员兼教师):"cin>>duty;if(p1->duty!=duty)cout<<"请输入修改后职员编号:"cin>>no;cout<<"请输入修改后职员名字:"cin&g

26、t;>name;if(duty=1)cout<<"请输入修改后教师本学期的工作量:" cin>>hour;else if(duty=2)cout<<"请输入修改后实验员本学期的工作量"cin>>hour;else if(duty=4)cout<<"请输入修改后教师兼实验员本学期的工作量"cin>>hour;else if(duty=5)cout<<"请输入修改后行政人员兼教师本学期的工作量:" cin>>hour;

27、/创建新职工结点 person *p; switch(duty) case 1:p=new teacher(no,name,duty,hour);break; case 2:p=new assistant(no,name,duty,hour);break; case 3:p=new manager(no,name,duty);break; case 4:p=new teacher_assistant(no,name,duty,hour);break; case 5:p=new manager_teacher(no,name,duty,hour);break; /职工结点替换到链表 p->

28、next=p1->next; if(p1=pl)/若要替换的结点是第一个结点 pl=p; else/若要删除的结点是后续结点 p2->next=p; /删除原来的职工结点 delete p1;elsecout<<"请输入修改后职员编号:"cin>>p1->no; cout<<"请输入修改后职员名字:"cin>>p1->name;if(duty=1)cout<<"请输入修改后教师本学期工作量:"cin>>hour; (teacher *)p1

29、)->gethour(hour);p1->incoming();else if(duty=2)cout<<"请输入修改后实验员本学期工作量:"cin>>hour;(teacher_assistant *)p1)->gethour(hour);p1->incoming();else if(duty=4)cout<<"请输入修改后教师兼实验员本学期工作量:"cin>>hour;(teacher_assistant *)p1)->gethour(hour);p1->incomi

30、ng();else if(duty=5)cout<<"请输入修改后行政人员兼教师本学期工作量:"cin>>hour;(manager_teacher *)p1)->gethour(hour);p1->incoming();cout<<"修改成功!n" void college:print() /输出职工信息 person *p; p=pl; if(!p) cout<<"数据不存在,请输入数据!n" else cout<<setw(5)<<"编

31、号"<<setw(15)<<"名字"<<setw(15)<<"职位"<<setw(15)<<"薪水"<<endl; while(p) switch(p->duty) case 1: cout<<setw(5)<<p->no<<setw(15)<<p->name<<setw(15)<<"教师"<<setw(15)<&l

32、t;p->incoming()<<endl; break; case 2: cout<<setw(5)<<p->no<<setw(15)<<p->name<<setw(15)<<"实验员"<<setw(15)<<p->incoming()<<endl; break; case 3: cout<<setw(5)<<p->no<<setw(15)<<p->name<<

33、;setw(15)<<"行政人员"<<setw(15)<<p->incoming()<<endl; break; case 4: cout<<setw(5)<<p->no<<setw(15)<<p->name<<setw(15)<<"教师兼实验员"<<setw(15)<<p->incoming()<<endl; break; case 5: cout<<setw(5

34、)<<p->no<<setw(15)<<p->name<<setw(15)<<"行政人员兼教师"<<setw(15)<<p->incoming()<<endl; break; p=p->next; void college:save() /职工信息存盘 ofstream fsave; char c; cout<<"n保存职员的数据,是否继续?y/n:" cin>>c; if(c='y'|c=

35、9;y') fsave.open("data.txt",ios:out); person *p=pl; while(p) fsave<<p->no<<"t"<<p->name<<"t"<<p->duty<<"t"<<p->incoming()<<"t" if(p->duty=1) fsave<<(teacher *)p)->gethour()&l

36、t;<"t" else if(p->duty=2) fsave<<(assistant *)p)->gethour()<<"t" else if(p->duty=4) fsave<<(teacher_assistant *)p)->gethour()<<"t" else if(p->duty=5) fsave<<(manager_teacher *)p)->gethour()<<"t" fsave<

37、;<endl; p=p->next; fsave.close();/保存 cout<<"n职员数据已经保存.n" else return;void college:load()/数据装入ifstream fload;person *p=pl;int no,duty,hour;char name20;double sum;fload.clear();fload.open("data.txt",ios:in);fload>>no>>name>>duty>>sum;if(duty=1|du

38、ty=2|duty=4|duty=5)fload>>hour;while(fload.good()switch(duty) case 1:p=new teacher(no,name,duty,hour); break; case 2:p=new assistant(no,name,duty,hour); break; case 3:p=new manager(no,name,duty); break; case 4:p=new teacher_assistant(no,name,duty,hour); break; case 5:p=new manager_teacher(no,n

39、ame,duty,hour); if(pl) person *tp; tp=pl; while(tp->next) tp=tp->next; tp->next=p; else pl=p; fload>>no>>name>>duty>>sum; if(duty=1|duty=2|duty=4|duty=5) fload>>hour; fload.close();cout<<"n职员数据读取完成.n"void main() char c; college a; while(1) cout&

40、lt;<" nnnnn nn 高校工资管理系统n" cout<<" 1增加职员 n" cout<<" 2删除职员 n" cout<<" 3修改职员信息 n" cout<<" 4查看职员信息 n" cout<<" 5数据存盘 n" cout<<" 6数据读取 n" cout<<" 7-退出 n" cout<<" *" cout<<" n 请选择(1-7):" cin>>c; switch(c) case '1':a.add(); break; case '2':a.delete(); break; case '3':a.modify(); break; case '4':a.print()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论