C语言课程设计-工资管理系统-课程设计_第1页
C语言课程设计-工资管理系统-课程设计_第2页
C语言课程设计-工资管理系统-课程设计_第3页
C语言课程设计-工资管理系统-课程设计_第4页
C语言课程设计-工资管理系统-课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

C语言课程设计-工资管理系统-课程设计C语言课程设计|工资管理系统一、需求分析题目:工资管理系统总体设计目标:使用者可以利用此系统进行对工资管理的各项运算操作,如根据用户提供的客户工资自动地进行计算实发工资,查找职工信息数据,删除记录,插入记录,保存记录及按实发工资排序等,最后清晰完整的工资管理结果显现在屏幕中。大大方便使用者对工资管理的统计操作,这样不仅可以提高效率,而且方便易操作。二、总体设计1、概述 该系统采用了自上而下、层层紧扣的模块结构。对于最高模块,采用以事务为中心的设计策略,把一个大的模块逐步分解成较小的相对简单的模块。对低层模块,采用以变换为中心的设计策略。为了提高每个小模块的内聚性、降低模块间的耦合性,将每个模块设计成具有单一功能的模块(即功能内聚),使模块间的联系完全是通过主模块的控制和调用来实现(即非直接耦合)。2、计算机系统配置硬件配置主板:顶星CPU: 华硕内存:80G硬盘:512M软件配置操作系统:windowXP;C语言编译系统:turbo C+3、系统结构图系统结构图工资管理系统的系统结构图如下所示,总共由7个模块组成,其中一个是总控模块,另外七个是分别实现不同功能的子模块: 模块说明书A工资管理系统总控模块的模块说明书模块名称:工资管理系统总控模块输 入:主菜单选择项输 出:整个所有学生的信息处理:1按以下格式显示主菜单和提示使用者选择:工资管理系统: 0计算实发工资1查找记录2删除记录3插入记录4保存文件5按实发工资升序排序6退出 请选择(0,2,3,4,5,6):2接收主菜单选择项 如果选择项的值为0,调用计算实发工资子模块。 如果选择项的值为1,调用查找记录子模块。 如果选择项的值为2,调用删除记录子模块。 如果选择项的值为3,调用插入记录子模块。如果选择项的值为4,调用保存文件子模块。如果选择项的值为5,调用按实发工资升序排序子模块。如果选择项的值为6,结束操作,退出本系统。 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 根据给定的学生的实发 工资从小到大进行排序 回车排序成功 返回四、编码1说明 “工资管理系统总控模块” 的功能由menu_select函数实现,根据“工资管理系统总控模块” 的程序流程图编写menu_select函数。 “计算实发工资子模块” 的功能由calc函数实现,根据“计算实发工资子模块” 的程序流程图编写calc函数。 “查找记录子模块” 的功能由search函数实现,根据“查找记录子模块” 的程序流程图编写search函数。 “删除记录子模块” 的功能由delete函数实现,根据“删除记录子模块” 的程序流程图编写delete函数。 “插入记录子模块” 的功能由insert函数实现,根据“插入记录子模块” 的程序流程图编写insert函数。 “保存记录子模块” 的功能由save函数实现,根据“插入记录子模块” 的程序流程图编写save函数。 “按实发工资升序排序子模块” 的功能由sort函数实现,根据“按实发工资升序排序子模块” 的程序流程图编写sort函数。2选择编写程序语言/*头文件(.h)*/#include stdio.h /*I/O函数*/#include bios.h /*ROM基本输入输出函数*/#include dos.h /*dos接口函数*/#include conio.h /*屏幕操作函数*/#include stdlib.h /*其它说明*/#include string.h /*字符串函数*/#include mem.h /*内存操作函数*/#include ctype.h /*字符操作函数*/#include alloc.h /*动态地址分配函数*/*变量定义*/typedef struct z1 /*定义数据结构*/ char no11; /*编号*/ char name15; /*姓名*/ char danwei15; /*单位*/ float jbgz; /*基本工资*/ float koukuan; /*扣款*/ float yfgz; /*应发工资*/ float shuijin; /*税金*/ float sfgz; /*实发工资*/ struct z1 *prior; /*前驱指针*/ struct z1 *next; /*后继指针*/SALARY; /*结构体类型名*/struct z1 *First; /*双链表头指针*/struct z1 *Last; /*双链表尾指针*/*函数原型*/void init(); /*初始化*/void create(); /*创建链表*/void calc(); /*计算应发工资*/void delete(); /*删除*/void search(); /*查找*/void save(); /*保存文件*/void load(); /*读取文件*/void computer(); /*计算所需各种票面张数*/void insert(); /*插入*/void append(); /*追加*/void copy(); /*复制文件*/void sort(); /*排序*/void index(); /*索引*/void total(); /*分类合计*/void list(); /*显示所有数据*/void print(SALARY *p);/*输出单条记录*/void display(); /*随意逐条显示*/float fax(float x); /*计算税金*/int menu_select(); /*主菜单*/*主函数开始*/main() int i; clrscr(); for(;) switch(menu_select() /*调用菜单函数返回一个整数值*/ case 0:calc();break; /*计算实发工资*/ case 1:search();break; /*查找职工信息数据*/ case 2:delete();break; /*删除记录*/ case 3:insert();break; /*插入记录*/ case 4:save();break; /*保存文件*/ case 5:sort();break; /*按实发工资升序排序*/ case 6:exit(0); /*退出*/ /*菜单函数,函数返回值为整型,代表所选的菜单项*/menu_select() char *f= /*定义菜单字符串数组*/ *MENU*, /*菜单的标题行*/ 0. Calc the salary, /*计算实发工资*/ 1. Search record on name, /*查找记录*/ 2. Delete a record, /*删除记录*/ 3. Insert record to list, /*插入记录*/ 4. Save data to the file, /*保存文件*/ 5. Sort on sfgz, /*排序*/ 6. Quit, /*退出*/ ; char s80; int i; int key=0; /*记录所压键值*/ int c=0; gotoxy(1,25); /*移动光标*/ printf(press any key enter menu.n);/*压任意键进入主菜单*/ getch(); clrscr(); /*清屏*/ textcolor(YELLOW); /*设置文本颜色为黄色*/ textbackground(RED); /*设置背景颜色为红色*/ gotoxy(10,2); putch(0xda); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xc4); /*输出上边框水平线*/ putch(0xbf); /*输出右上角边框 */ for(i=3;i22;i+) /*输出左右两边的垂直线*/ gotoxy(10,i);putch(0xb3); gotoxy(54,i);putch(0xb3); gotoxy(10,22);putch(0xc0); /*输出左上角边框*/ for(i=1;i44;i+) putch(0xc4); /*输出下边框水平线*/ putch(0xd9); /*输出右下角边框*/ window(11,3,53,21); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i8; /*对所压的键进行判断*/ gotoxy(10,i+1); textbackground(BLUE); /*设置背景颜色为蓝色*/ cprintf(%s,fi); /*输出菜单项*/ if(key=72) i=i=1?17:i-1; /*如压向上光标键,i减1,如已到第一行再上移,则到最后一行*/ if(key=80)i=i=17?1:i+1; /*如压向下光标键,i加1,如已到最后一行再下移,则到第一行*/ gotoxy(10,i+1); /*光标移动i的下一项*/ textbackground(LIGHTGREEN); /*将背景颜色设为浅绿*/ cprintf(%s,fi); /*输出菜单项*/ c=i-1; /*给代表菜单选项的整数赋值*/ textbackground(BLACK); /*设置背景颜色为黑色*/ window(1,1,80,25); /*恢复原窗口大小*/ return c; /*返回代表菜单选项的整数值*/*计算实发工资*/void calc() int x; /*行坐标*/ int i=0; /*记录数*/ float temp; /*临时变量扣款*/ SALARY *p; /*移动指针*/ clrscr(); /*清屏*/ p=First; /*从头指针开始*/ while(p!=NULL) /*当p不为空时,也就是有记录时,外循环控制换页*/ x=0; clrscr(); gotoxy(1,3);printf(*gongziguanli*); /*输出标题*/ gotoxy(1,5);printf(|-|); gotoxy(1,6); /*下面输出字段标题*/ printf(| no | name | jbgz | koukuan | yfgz |shuijin | sfgz |); while(p!=NULL) /*当p不为空时,也就是有记录时,内循环控制处理9条*/ gotoxy(1,7+x);printf(|-|-|-|-|-|-|-|); gotoxy(1,8+x);printf(|); gotoxy(12,8+x);printf(|); gotoxy(29,8+x);printf(|); gotoxy(38,8+x);printf(|); gotoxy(49,8+x);printf(|); gotoxy(58,8+x);printf(|); gotoxy(67,8+x);printf(|); gotoxy(76,8+x);printf(|); gotoxy(2,8+x); printf(%-10s,p-no); /*输出编号*/ gotoxy(13,8+x); printf(%-15s,p-name); /*输出姓名*/ gotoxy(30,8+x); printf(%.2f,p-jbgz); /*输出基本工资*/ gotoxy(39,8+x); scanf(%f,&temp); /*输入扣款*/ p-koukuan=temp; /*扣款字段赋值*/ p-yfgz=p-jbgz-p-koukuan; /*计算应发工资=基本工资-扣款*/ gotoxy(50,8+x); printf(%.2f,p-yfgz); /*输出应发工资*/ gotoxy(59,8+x); p-shuijin=(p-yfgz-1000)*fax(p-yfgz); /*否则按税率计算税金*/ printf(%.2f,p-shuijin); /*输出税金*/ gotoxy(68,8+x); p-sfgz=p-yfgz-p-shuijin; /*计算实发工资*/ printf(%-8.2f,p-sfgz); /*输出实发工资*/ x+=2; /*行坐标下移两行*/ i+; /*记录数加1*/ if(i%9=0)break; /*记录数超过9条,跳出内循环*/ p=p-next; /*指针后移,处理下一条*/ gotoxy(1,7+x);printf(|-|-|-|-|-|-|-|n); /*输出结束行*/ printf(Press any key congtinue.n); getch(); /*按编号查找记录*/SALARY *find(char *no) SALARY *p; /*定义移动指针*/ p=First; /*从头指针开始*/while(p) /*当p不为空时*/ if(!strcmp(no,p-no) return p; /*比较相等,查找成功,返回指针*/ p=p-next; /*不相等指针后移*/ printf(not foundn); /*没有找到*/ return NULL; /*返回为空指针*/*删除结点*/void delete() SALARY *p; /*定义临时变量,p指向要删除的结点p*/ char s11; /*要删除结点的编号*/ clrscr(); /*清屏*/ printf(please deleted non); /*提示输入信息*/ scanf(%s,s); /*输入要删除的职工编号*/ if(p=find(s)!=NULL) /*调用查找函数,如果找到做下面的处理*/ if(First=p) /*如果是第一个结点*/ First=p-next; /*将头指针指向其后继结点*/ if(First) /*如头指针不为空*/ First-prior=NULL; /*将头结点的前驱设为空*/ else Last=NULL; /*否则头为空,尾也为空*/ else /*删除的不是第一个结点*/ p-prior-next=p-next; /*p的前驱的后继指向p原来的后继*/void search() SALARY *p; /*移动指针*/ char s15; /*保存姓名*/ clrscr(); /*清屏*/ printf(please enter name for searchn); /*提示输入*/ scanf(%s,s); /*输入要查找人的姓名*/ p=First; /*移动指针从头指针开始*/ while(strcmp(p-name,s)&p!=NULL) /*做比较判断*/ p=p-next; /*没找到,指针后移继续查找*/ if(p=NULL) /*指针为空,说明没有找到*/ printf(nlist no %s SALARYn,s); /*显示没找到信息*/ else printf(nn); /*换行*/ print(p); /*查找成功,调用输出函数输出指针p所指记录*/ /*插入结点*/void insert() SALARY *p,*info; /* info为新结点,p为新结点的后继*/ char s11; /*保存查找的姓名*/ float temp; /*临时变量*/ clrscr(); /*清屏*/ printf(please enter location before the non); /*提示输入在哪个结点之前插入*/ scanf(%s,s); /*输入指定结点的编号*/ printf(nplease new recordn); /*提示输入记录*/ clrscr(); /*清屏*/ gotoxy(1,3); /*定位光标,按表格形式输入新结点信息*/ printf(*gongziguanli*); gotoxy(1,5); printf(|-|); gotoxy(1,6); printf(| no | name | jbgz | ); gotoxy(1,7); printf(|-|-|-|); info=(SALARY *)malloc(sizeof(SALARY); /*申请空间*/ if(!info)C语言课程设计 printf(nout of memory); /*如没有得到空间,内存溢出*/ exit(0); /*退出程序*/ info-next=NULL; /*新结点的后继为空*/ info-prior=NULL; /*新结点的前驱为空*/ gotoxy(1,8);printf(|); gotoxy(12,8);printf(|); gotoxy(29,8);printf(|); gotoxy(38,8);printf(|); gotoxy(2,8); inputs(info-no,10); /*输入新结点的编号,并校验*/ gotoxy(13,8); inputs(info-name,14); /*输入新结点的姓名,并校验*/ gotoxy(30,8); scanf(%f,&temp); /*输入基本工资*/ info-jbgz=temp; /*给基本工资字段赋值*/ info-koukuan=0; /*扣款初始为0*/ info-yfgz=0; /*应发工资初始为0*/ info-shuijin=0; /*税金初始为0*/ info-sfgz=0; /*实发工资初始为0*/ printf(|-|-|-|); p=First; /*移动指针从头指针开始*/ while(strcmp(p-no,s)&p!=NULL) /*查找结点确定插入位置*/ p=p-next; /*指针后移,继续查找*/ if(p=NULL) /*如p为空*/ if(p=First) /*如p为头指针,说明链表为空*/ First=info; /*新结点为头指针*/ First-prior=NULL; /*头结点的前驱为空*/ Last=First; /*唯一结点,尾指针等于头指针*/ else /*新结点插在尾部*/ Last-next=info; info-prior=Last; Last=info; /*尾指针指向新结点*/ else if(p=First) /*p不为空,但p为头指针,新结点插在第一个结点位置*/ info-prior=NULL; /*新结点的前驱为空*/ info-next=p; /*新结点的后继为p*/ p-prior=info; /*p的前驱是新结点*/ First=info; /*修改头指针指向新结点*/ else /*新结点插入在中间某一个位置p之前*/ info-next=p; /*新结点的后继是p*/ info-prior= p-prior; /*新结点的前驱是p的前驱*/ p-prior-next=info; /*p的前驱的后继是新结点*/ p-prior=info; /*p的前驱是新结点*/ printf(nnn -have inserted %s SALARY-n,info-name); printf(n-Dont forget save-n); /*提醒调用保存文件存盘*/*保存文件*/void save() FILE *fp; /*定义指向文件的指针*/ SALARY *p; /*定义移动指针*/ char outfile10; /*保存输出文件名*/ clrscr(); /*清屏*/ printf(Enter outfile name,for example c:f1te.txt:n);/*提示输入文件名格式信息*/ scanf(%s,outfile); if(fp=fopen(outfile,wb)=NULL) /*为输出打开一个二进制文件*/ printf(can not open filen); return; /*返回*/ printf(nSaving file.n); p=First; /*移动指针从头指针开始*/ while(p!=NULL) /*如p不为空*/ fwrite(p,sizeof(SALARY),1,fp); /*写入一条记录*/ p=p-next; /*指针后移,处理下一条记录*/ fclose(fp); /*关闭文件*/ printf(-save success!-n);/*显示保存成功*/*排序*/void sort() SALARY *p0,*p00,*p1,*p11,*p2; /*定义临时指针*/ int i=1; /*统计当前排第几个结点*/ clrscr(); /*清屏*/ printf(nn start sort.n); /*开始排序*/ p1=p11=p2=First; while(p1!

温馨提示

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

评论

0/150

提交评论