工资管理系统课程设计报告89485880.doc_第1页
工资管理系统课程设计报告89485880.doc_第2页
工资管理系统课程设计报告89485880.doc_第3页
工资管理系统课程设计报告89485880.doc_第4页
工资管理系统课程设计报告89485880.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

20092010学年度第一学期#3学院#科学学院课程设计报告册课程设计名称:工资管理系统专 业:计算机科学与技术班 级:学 号:姓 名:指 导 老 师: 一、需求分析 题目:工资管理系统总体设计目标:使用者可以利用此系统进行对工资管理的各项运算操作,如根据用户提供的客户工资自动地进行计算实发工资,查找职工信息数据,删除记录,插入记录,保存记录及按实发工资排序等,最后清晰完整的工资管理结果显现在屏幕中。大大方便使用者对工资管理的统计操作,这样不仅可以提高效率,而且方便易操作。二、总体设计1、概述 该系统采用了自上而下、层层紧扣的模块结构。对于最高模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。对低层模块,采用以变换为中心的设计策略。为了提高每个小模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即非直接耦合)。2、模块说明书A 工资管理系统总控模块的模块说明书模块名称:工资管理系统总控模块输 入:主菜单选择项输 出:整个所有职工的信息处理: 1 按以下格式显示主菜单和提示使用者选择:工资管理系统: 0读取文件信息 1职工数据输入 2显示职工工资 3查找职工工资 4增加职工工资 5删除职工工资 6修改职工信息 7 保存信息 8安全退出系统 2 接收主菜单选择项 如果选择项的值为0,调用读取文件信息子模块。 如果选择项的值为1,调用职工数据输入子模块。 如果选择项的值为2,调用显示职工工资子模块。 如果选择项的值为3,调用查找职工工资子模块。 如果选择项的值为4,调用增加职工工资子模块。 如果选择项的值为5,调用删除职工工资子模块。 如果选择项的值为6,调用修改职工信息子模块。 如果选择项的值为7,调用保存信息子模块 如果选择项的值为8,安全退出系统 B 插入工资记录子模块说明书模块名称:插入工资记录模块输 入:根据给定员工的编号,姓名,基本工资进行添加输 出:该员工的工资信息处理:按以下格式显示子菜单和提示使用者选择:插入员工工资系统 请按提示输入要插入的员工的编号在第二菜单中输入员工的号码,姓名,基本工资 回车返回主菜单 C保存文件子模块说明书模块名称:保存文件子模块输 入:所需保存的员工的姓名输 出:保存成功该员工资料 处理: 按以下格式显示子菜单和提示使用者选择: 保存文件系统 请按提示输入要保存的员工资料的员工姓名(此员工资料之前已经确定插入) 回车显示保存成功 回车返回主菜单 D计算实发工资子模块说明书模块名称:计算实发工资子模块输 入:员工的工资扣款输 出:员工的应发工资,税金,实发工资 处理: 按以下格式显示子菜单和提示使用者选择: 计算实发工资系统 首先,要先插入、保存好员工的工资信息 按号码排序提示,输入该员工的扣款,回车得到员工的应发工资,税金,实发工资 依次填入其它员工的扣款即得到所有员工的应发工资 计算完后回车返回主菜单 E查找记录子模块说明书模块名称:查找员工工资记录子模块输 入:要查找的员工编号及姓名输 出:所要查找的员工的工资信息 处理: 1按以下格式显示子菜单和提示使用者选择: 查找员工工资系统 输入所要查找的员工工资的编号,回车2显示出所查员工的工资信息,回车返回主菜单显示不出所查员工任何信息,出现查不到的情况,回车返回主菜单 F删除记录子模块说明书模块名称:删除员工工资记录子模块输 入:根据给定员工的号码进行删除输 出:整个员工的所有工资资料 处理: 按以下格式显示子菜单和提示使用者选择: 删除员工工资记录系统 请输入要删除的员工工资的员工号码 回车确定删除 再次回车返回主菜单 G按实发工资升序排序子模块说明书模块名称:按实发工资升序排序子模块输 入:根据给定的学生的实发工资从小到大进行排序输 出:已经排好序的员工实发工资的序列 处理: 按以下格式显示子菜单和提示使用者选择: 按实发工资升序排序系统 对已经保存过的员工资料,按提示回车 系统自动完成对员工实发工资由小到大的顺序进行排序 回车返回主菜单 三、详细设计1“工资管理系统总控模块”的详细设计 概述 本模块的详细设计依据是:总体设计中的“A.工资管理系统的总控模块说明书”。 程序流程图如下169C语言课程设计2“计算实发工资子模块”的详细设计 本模块的详细设计的依据是:总体设计中的“D计算实发工资子模块”的模块说明书。 程序流程图如下: 开始 定义整型变量x=0 显示操作项目让使用者选择,输入员工号码 如果存在,输入扣款, 不存在 返回得实发工资 返回 3“查找记录子模块”的详细设计 本模块的详细设计的依据是:总体设计中的“E查找记录子模块”的模块说明书。 程序流程图如下: 开始 定义整型变量x=1 输入所要查找的员工工资姓名 显示查找结果 显示不存在 返回 4“删除记录子模块”的详细设计本模块的详细设计的依据是:总体设计中的“F删除记录子模块”的模块说明书。程序流程图如下: 开始 定义整型变量x=2 输入要删除的员工工资 的员工号码 存在对象,回车确定 不存在该对象 删除 返回 5“插入工资记录子模块”的详细设计 本模块的详细设计的依据是:总体设计中的“B. 插入工资记录子模块”的模块说明书。 程序流程图如下: 开始 定义整型变量x=3 输入要插入的员工的号码 输入员工的号码,姓名,基本工资 确定,退出保存 输入错误 返回 6“保存文件子模块”的详细设计 本模块的详细设计的依据是:总体设计中的“C保存文件子模块”的模块说明书。 程序流程图如下: 开始 定义整型变量x=4 输入所需保存的员工的姓名 保存员工工 保存不成功 资资料成功 返回 7“按实发工资升序排序子模块”的详细设计 本模块的详细设计的依据是:总体设计中的“G按实发工资升序排序子模块”的模块说明书。 程序流程图如下: 开始 定义整型变量x=5 根据给定的学生的实发 工资从小到大进行排序 回车排序成功4、 编码1说明 “工资管理系统总控模块” 的功能由menu_select函数实现,根据“工资管理系统总控模块” 的程序流程图编写menu_select函数。 “计算实发工资子模块” 的功能由calc函数实现,根据“计算实发工资子模块” 的程序流程图编写calc函数。 “查找记录子模块” 的功能由find根据“查找记录子模块” 的程序流程图编写search函数。 “删除记录子模块” 的功能由cancel根据“删除记录子模块” 的程序流程图编写delete函数。 “插入记录子模块” 的功能由insert函数实现,根据“插入记录子模块” 的程序流程图编写insert函数。 “保存记录子模块” 的功能由save函数实现,根据“插入记录子模块” 的程序流程图编写save函数。 “按实发工资升序排序子模块” 的功能由sort函数实现,根据“按实发工资升序排序子模块” 的程序流程图编写sort函数。2、 源程序代码如下:/*/-职工工资管理系统/程序清单:#include #include #include #include #include #include #include#include#include#define NULL 0int const N=20;#define LEN sizeof(struct student)using namespace std; void Menu(); void Pass();int n=0; /定义一个全局变量统计职工人数 /-定义一个职工信息的结构体struct student char nameN; /用来存放姓名char sexN; /用来存放性别long id; /用来存放编号float paid3; /用来存放工资int total; /用来存放总工资struct student *next;/-职工类class Information public:Information() ; /构造函数. Information() ; /析构函数. student *creat(); /建立链表void output(student *head); /显示职工信息int count(student *head); /定义函数count()统计职工总数student *insert(student*head); /指针函数*insert()用来添加职工信息.student *cancel(student *head,long id); /指针函数*cancel()用来删除职工信息.student *find(student *head,long id); /指针函数*find()用来查找职工信息.student *modify(student *head,long id); /指针函数*modife()用来修改职工的信息.void paixu(student *head); /定义paixu()函数将职工的总额从大到小排列并输出void average(student *head); /定义职工工资平均值的函数void save(student *head); /保存文件信息student *Read(); /读取文件信息private:student *p1,*p2,*p3,*head,st; ;Information:Information() cout *n;cout -n; cout作者的信息和提示/*void zuozhe()coutnttt本程序制作者 :nntttliuguanghuinntttTELcoutnntttMade By VC6.0+nnttt2009年12月1日nnttt按键进入登陆界面!;coutnnttt如果需要对原来的信息进行操作,则先选择0读取文件信息nendl;*/Information:Information() cout *n;cout -n; cout建立链表信息student *Information:creat(void) /定义一个指向struct student的结构体指针函数*creat()用来录入职工信息. char chN;n=0; /用来存放职工姓名 p1=p2=(student *)malloc(LEN);/调用malloc()函数用来开辟一个新的存储单元 cout -endl;coutch;head=NULL; /给指针head赋初值while (strcmp(ch,#)!=0) /调用字符比较函数strcmp()用来判断是否继续输入 p1=(student *)malloc(LEN); /调用malloc()函数用来开辟一个新的存储单元strcpy(p1-name,ch); /将循环结构前面输入的姓名复制到结构体名为p1的数组name中coutp1-sex;coutp1-id;while(p1-id)id)100000) /判断输入的编号是否有效(100000个)cin.clear() ;cin.ignore (1024,n);coutp1-id; coutp1-paid0;while(p1-paid0)paid0)100000) /判断输入的分数是否有效(=0 =100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid0; coutp1-paid1;while(p1-paid1)paid1)100000) /判断输入的分数是否有效(=0 =100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid1; coutp1-paid2;while(p1-paid2)paid2)100000) /判断输入的分数是否有效(=0 =100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid2; p1-total=p1-paid0+p1-paid1+p1-paid2; /计算总额 if(n=0)head=p1; /如果是输入第一组职工信息就将指针p1赋给指针headelse p2-next=p1; /否则将p1赋给p2所指结构体的next指针p2=p1; /将指针p1赋给指针p2n+; /将职工人数n的值加1coutch; /将输入的姓名存放到字符数组ch中p2-next=NULL; /将p2所指结构体的next指针重新赋空值return (head);/将输入的第一组职工信息返回/-定义output()函数将职工的信息从头指针所指内容开始输出void Information:output(student *head) system(cls);if(head=NULL) cout 这是一个空表,请先输入职工信息!n;elsecout-n;cout *职工工资信息表*n;cout-n; cout|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n;cout-n; p1=head; /将头指针赋给p docoutidsetw(8)namesetw(12)sexsetw(12)paid0setw(12)paid1setw(12)paid2setw(12)totalendl;coutnext; /将下一组职工信息的next指针赋给pwhile(p1!=NULL); /若指针p非空则继续,目的是把所有的职工信息都传给指针p然后输出./-统计职工人数的函数int Information:count(struct student *head) /定义函数count()统计职工总数if(head=NULL)return(0); /若指针head为空返回值为0else return(1+count(head-next); /函数的递归调用/-添加职工的工资的函数student *Information:insert( student *head) /插入新结点定义一个指向struct student的结构体指针函数*insert()用来添加职工信息.system(cls);coutt-nendl;p1=(student *)malloc(LEN); /使p1指向插入的新结点coutp1-id;while(p1-id)id)100000)cin.clear() ;cin.ignore (1024,n);coutp1-id; /将输入的编号存放到p1所指结构体的数组id中 coutp1-name; /将输入的姓名存放到结构体名为p1的数组name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid0; /将输入的基本工资存放到p1所指结构体的数组paid中coutp1-paid1;while(p1-paid1)paid1)100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid1; /将输入的加班工资存放到p1所指结构体的数组paid中coutp1-paid2;while(p1-paid2)paid2)100000)cin.clear() ;cin.ignore (1024,n);coutp1-paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1-total=p1-paid0+p1-paid1+p1-paid2;/计算总分 p2=head; /将头指针赋给p2if(head=NULL) /若没调用次函数以前的头指针head为空head=p1;p1-next=NULL; /则将p1赋给头指针head并将p1所指结构体成员指针next赋空值else while(p1-idp2-id)&(p2-next!=NULL)p3=p2; /p3指向原p2指向的结点p2=p2-next; /p2后移一个结点if(p1-idid)if(head=p2)p1-next=head;head=p1; /插入到第一个结点之前else p3-next=p1;p1-next=p2; /插入到p3所指结点之后elsep2-next=p1;p1-next=NULL; /插入到尾结点之后n+; /将职工人数加1coutt-删除职工信息student *Information:cancel(student *head,long id) /定义一个指向struct student的结构体指针函数*delete()用来删除考生信息. system(cls);if(head=NULL) /若调用次函数以前的头指针head为空 return(head);elsep1=head; /否则将头指针赋给p1while(id!=p1-id&p1-next!=NULL) /寻找要删除的结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p2=p1;p1=p1-next; /p2指向原p1指向的结点p1后移一个结点if(id=p1-id) /如果输入的职工编号是p1所指的职工编号/结点找到后删除if(p1=head) head=p1-next; /如果head指针和p1指针相等则将下一个结点赋给指针head else p2-next=p1-next; /否则将p1所指结点赋给p2所指结点将要删除的职工信息跳过去cout 删除编号为id的职工n;n-; /将职工人数减1 return(head); /将头指针返回/*修改职工数据*/student *Information:modify(student *head,long id)system(cls);coutt-nid&p1-next!=NULL)/寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p1=p1-next; /p2指向原p1指向的结点p1后移一个结点 if(id=p1-id) /如果要查找的职工编号是p1所指的职工编号cout你需要修改的职工信息如下:n;cout-n;cout|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n;cout-n;coutsetw(6)idsetw(8)namesetw(12)sexsetw(12)paid0setw(12)paid1setw(12)paid2setw(12)totalendl;cout-n;coutp1-id;while(p1-id)id)100000)cin.clear() ;cin.ignore (1024,n);cout0p1-id; /将输入的编号存放到p1所指结构体的数组id中 coutp1-name; /将输入的姓名存放到结构体名为p1的数组name中coutp1-sex; coutp1-paid0;while(p1-paid0)paid0)100000)cin.clear() ;cin.ignore (1024,n);cout0p1-paid0; /将输入的基本工资存放到p1所指结构体的数组paid中coutp1-paid1;while(p1-paid1)paid1)100000)cin.clear() ;cin.ignore (1024,n);cout0p1-paid1; /将输入的加班工资存放到p1所指结构体的数组paid中coutp1-paid2;while(p1-paid2)paid2)100000)cin.clear() ;cin.ignore (1024,n);cout0p1-paid2; /将输入的其他奖金存放到p1所指结构体的数组paid中 p1-total=p1-paid0+p1-paid1+p1-paid2; /计算总分 else cout 需要修改的信息中没有编号为id查找职工信息student *Information:find(student *head,long id) /定义一个指向struct student的结构体指针函数*find()用来查找职工信息.system(cls);if(head=NULL) /若调用次函数以前的头指针head为空coutid&p1-next!=NULL)/寻找结点当p1所指的职工编号不是输入的职工编号并且p1所指的next指针不为空p1=p1-next; /p2指向原p1指向的结点p1后移一个结点if(id=p1-id) /如果要查找的职工编号是p1所指的职工编号cout-n;cout|编 号| |姓 名| |性别| |基本工资| |加班工资| |其他奖金| |总额|n;cout-n;coutsetw(6)idsetw(10)namesetw(10)sexsetw(10)paid0setw(10)paid1setw(12)paid2setw(12)totalendl;cout-n;elsecout信息中没有编号为id的职工.n; /结点没找到return(head);/-定义paixu()函数将职工的工资总额从大到小排列并输出void Information:paixu(student *head) system(cls);int i,k,m=0,j;student *pN;/定义一个指向struct student的结构体指针数组p if(head!=NULL)/如果头指针是空则继续 m=count(head);cout-n;cout *职工工资统计表*n;cout-n;cout|编号| |姓名| |性别| |基本工资| |加班工资| |其他奖金| |总额| |名次|n;cout-n;p1=head;for(k=0;knext;for(k=0;km-1;k+) /选择排序法for(j=k+1;jtotaltotal)p2=pk;pk=pj;pj=p2; /从大到小排列的指针 for(i=0;im;i+)coutsetw(6)idsetw(8)namesetw(9)sexsetw(10)paid0setw(10)paid1setw(10)paid2setw(10)totalsetw(10)i+1endl;cout求各工资的平均值的函数void Information:average(student *head)int k,m;float arg1=0,arg2=0,arg3=0;if(head=NULL)/如果头指针是空则继续cout 这是一个空表,请先输入职工信息!n;elsem=count(head);p1=head;for(k=0;kpaid0;arg2+=p1-paid1;arg3+=p1-paid2;

温馨提示

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

评论

0/150

提交评论