工资管理C语言课程设计.doc

上传人:豆**** 文档编号:17221787 上传时间:2022-05-22 格式:DOC 页数:18 大小:204KB
返回 下载 相关 举报
工资管理C语言课程设计.doc_第1页
第1页 / 共18页
工资管理C语言课程设计.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《工资管理C语言课程设计.doc》由会员分享,可在线阅读,更多相关《工资管理C语言课程设计.doc(18页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流工资管理C语言课程设计.精品文档.#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 /*动态地址分配函数*/*变量定义*/typed

2、ef struct z1 /*定义数据结构*/ char no11; /*编号*/ char name15; /*姓名*/ float jbgz; /*基本工资*/ float koukuan; /*扣款*/ float yfgz; /*应发工资*/ float shuijin; /*税金*/ float sfgz; /*实发工资*/ struct z1 *prior;/*前驱指针*/ struct z1 *next;/*后继指针*/SALARY; /*结构体类型名*/struct z1 *First; /*双链表头指针*/struct z1 *Last; /*双链表尾指针*/*函数原型*/v

3、oid 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(); /*分类

4、合计*/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:init();break; /*初始化*/ case 1:create();break; /*输入数据创建双链表*/ case 2:list();br

5、eak; /*显示所有数据*/ case 3:display();break; /*单条显示*/ case 4:calc();break; /*计算实发工资*/ case 5:search();break; /*查找职工信息数据*/ case 6:delete();break; /*删除记录*/ case 7:insert();break; /*插入记录*/ case 8:append();break; /*追加记录*/ case 9:save();break; /*保存文件*/ case 10:load(); break; /*读取文件*/ case 11:copy();break; /*复

6、制文件*/ case 12:sort();break; /*按实发工资升序排序*/ case 13:computer();break; /*计算所需票面数*/ case 14:index();break; /*按职工号索引*/ case 15:total();break; /*按部门求合计*/ case 16:exit(0); /*退出*/*菜单函数,函数返回值为整型,代表所选的菜单项*/menu_select() char *f= /*定义菜单字符串数组*/ *MENU*, /*菜单的标题行*/ 0. init list, /*初始化双链表*/ 1. Enter list, /*输入数据,创

7、建双链表*/ 2. List all n, /*显示所有记录*/ 3. Display record by step, /*显示单条记录*/ 4. Calc the salary, /*计算实发工资*/ 5. Search record on name, /*查找记录*/ 6. Delete a record, /*删除记录*/ 7. Insert record to list, /*插入记录*/ 8. Append record to file, /*追加记录*/ 9. Save data to the file, /*保存文件*/ 10. Load data from the file,/

8、*读取文件*/ 11. Copy the file to new file, /*复制文件*/ 12. Sort on sfgz, /*排序*/ 13. Computer ticket number, /*计算所需票面数*/ 14. Index on number, /*索引*/ 15. Total on number, /*分类合计*/ 16. Quit ; /*退出*/ char s80; int i; int key=0; /*记录所压键值*/ int c=0; gotoxy(1,25); /*移动光标*/ printf(press any key enter menu.n);/*压任意

9、键进入主菜单*/ getch(); clrscr(); /*清屏*/ textcolor(YELLOW); /*设置文本颜色为黄色*/ textbackground(BLUE); /*设置背景颜色为兰色*/ 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、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; /*如压向上光标键,

11、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; /*返回代表菜单选项的整数值*/*初始化

12、函数*/void init() First=NULL; Last=NULL;/*输入数据,创建双链表*/void create() int x; /*记录行坐标*/ int i; /*记录输入记录数*/ int flag=0; /*做结束标记*/ float temp; /*定义临时变量*/ SALARY *info,*p; /*定义临时变量*/ if(First!=NULL) init();/*如果头指针为空,调用初始化函数*/ p=First; /*从头指针开始*/ for(;) if(flag=1) break; /*如果flag=1,结束输入*/ i=0; x=0; /*确定移动的行坐

13、标*/ clrscr(); /*清屏*/ gotoxy(1,3); printf(*gongziguanli*);/*输出标题*/ gotoxy(1,4); printf( -Enter end-);/*提示输入结束*/ gotoxy(1,5); printf(|-|);/*输出表格的起始线*/ gotoxy(1,6); printf(| no | name | jbgz |);/*输出字段标题,注意空格数*/ for(;) gotoxy(1,7+x); printf(|-|-|-|);/*输出表格的水平线*/ info=(SALARY *)malloc(sizeof(SALARY);/*申请

14、一个记录空间*/ if(!info) printf(nout of memory);/*如没有得到空间,输出内存溢出信息*/ exit(0);/*退出程序*/ info-next=NULL;/*新结点的后继为空*/ info-prior=NULL;/*新结点的前驱为空*/ gotoxy(1,8+x);printf(|); /*输出数据间的分割线*/ gotoxy(12,8+x);printf(|); gotoxy(29,8+x);printf(|); gotoxy(38,8+x);printf(|); gotoxy(2,8+x);/*光标到输入编号位置*/ inputs(info-no,10)

15、;/*输入编号,并验证长度不超过10*/ if(info-no0=) flag=1; break; /*编号首字符为结束输入*/ gotoxy(13,8+x); /*光标到输入姓名位置*/ inputs(info-name,14); /*输入姓名,并验证长度不超过14*/ gotoxy(30,8+x); /*光标到输入基本工资位置*/ scanf(%f,&temp); /*输入基本工资到临时变量*/ info-jbgz=temp; /*基本工资赋值*/ info-koukuan=0; /*初始扣款为0,待计算工资时输入*/ info-sfgz=0; /*初始实发工资为0,待计算工资时计算*/

16、info-shuijin=0; /*初始税金为0,待计算工资时计算*/ info-yfgz=0; /*初始应发工资为0,待计算工资时计算*/ if(p=NULL)/*如果p为空,说明输入的是第一个结点*/ First=Last=info;/*头指针和尾指针*/ First-prior=NULL; /*头指针的前驱是空*/ Last-next=NULL; /*尾指针的后继是空*/ else /*插入的结点不是第一结点,则插入在头结点之前*/ info-next=p;/*新结点的后继指向原来的头结点*/ info-prior=p-prior;/*新结点的前驱指向原来的头结点的前驱*/ p-prio

17、r=info;/*原来结点的前驱指向新结点*/ p=info; /*新结点变为p结点,暂时的头结点*/ First=info; /*新结点变为头结点*/ x+=2; /*因为水平线,将光标下移两行*/ gotoxy(1,8+x); i+; /*输入记录数加1*/ if(i%9=0) break; /*输入9个记录,换一页输入*/ gotoxy(1,8+x); printf(|-|-|-|);/*输出结尾水平线*/*字符串输入和验证函数*/inputs(char *s, int count) char p255; do scanf(%s,p);/*输入字符串*/ if(strlen(p)coun

18、t)printf(n too long! n);/*进行长度校验,超过count值重输入*/ while(strlen(p)count); strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/*显示链表*/void list() int i=0,n; /*记录输出行数*/ SALARY *p; /*定义移动指针*/ clrscr(); /*清屏*/ p=First; /*从头指针开始*/ while(i%10=0&p!=NULL) /*外循环控制换页*/ i=0; /*记录一页的输出行数*/ clrscr(); /*清屏*/ printf(nnn); /*换行三次*/ printf

19、(*SALARY*n); /*输出大标题*/ printf(|nO | name | jbgz | koukuan | yfgz | shuijin | sfgz |n); /*输出字段标题*/ printf(|-|-|-|-|-|-|-|n); /*输出水平线*/ while(p!=NULL) /*当p不为空时*/ printf(|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|n, p-no,p-name,p-jbgz,p-koukuan,p-yfgz,p-shuijin,p-sfgz); p=p-next; /*指针后移*/ i+; /*输出行数加1

20、*/ if(i%10=0) break; /*如果满10行,跳出内循环*/ printf(*end*n); /*输出本页的结束行*/ printf(Press any key congtinue.n); getch(); /*输出一页暂停一下,压任意键继续*/ /*返回到外循环,准备下一页的输出*/*单条显示记录*/void display() int ch; /*菜单选项字符*/ SALARY *p; /*定义临时指针*/ clrscr(); /*清屏*/ p=First; /*从头指针开始*/ if(p=NULL) /*指针为空,即链表为空,返回主函数*/ printf(record is

21、 empty!n); return; else print(p); /*调用输出函数显示头结点信息*/ for(;) /*循环开始*/ printf(nn0. Quit 1. Prior 2. Next 3. First 4.Last nn);/*菜单项Quit退出 Prior前驱 Next后继 First第一条 Last最后一条*/ printf(nplease select 04:); /*提示输入菜单选项04*/ scanf(%d,&ch); /*输入菜单选项04*/ if(ch=0) break; /*如果选项为0,退出*/ switch(ch) /*开关语句根据选项字符判断*/ ca

22、se 1:p=p-prior;if(p=NULL)p=First;break; /*指向前驱,没有前驱指向第一个*/ case 2:p=p-next;if(p=NULL) p=Last;break; /*指向后继,没有后继指向最后一个*/ case 3:p=First;break; /*指向第一个结点*/ case 4:p=Last;break; /*指向最后一个结点*/ print(p); /*调用输出函数显示指针所指结点信息*/*输出指针所指结点信息*/void print(SALARY *p) if(p) /*如果指针不为空,则显示信息*/ clrscr(); /*清屏*/ printf

23、(nnn); /*换行*/ printf(*SALARY*n); /*输出标题信息*/ printf(|no | name | jbgz | koukuan| yfgz | shuijin | sfgz |n); /*输出字段标题*/ printf(|-|-|-|-|-|-|-|n); /*输出分割线*/ printf(|%-10s|%-15s|%9.2f|%9.2f|%9.2f|%9.2f|%9.2f|n, p-no,p-name, p-jbgz,p-koukuan,p-yfgz,p-shuijin,p-sfgz);/*输出结点信息*/ printf(*end* *n); /*输出结束标记*

24、/*计算实发工资*/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

25、| 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,

26、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

27、(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-ne

28、xt; /*指针后移,处理下一条*/ gotoxy(1,7+x); printf(|-|-|-|-|-|-|-|n); /*输出结束行*/ printf(Press any key congtinue.n); getch();/*根据应发工资,计算税率*/float fax(float x) float f1; if(xsfgz/100; /*计算100元张数*/ a0=a0+t100; /*累加保存*/ t=p-sfgz-t100*100; /*剩余工资*/ t50=(int)(t/50); /*计算50元张数*/ a1=a1+t50; /*累加保存*/ t=t-t50*50; /*剩余工资

29、*/ t20=(int)(t/20); /*计算20元张数*/ a2=a2+t20; /*累加保存*/ t=t-t20*20; /*剩余工资*/ t10=(int)(t/10); /*计算10元张数*/ a3=a3+t10; /*累加保存*/ t=t-t10*10; /*剩余工资*/ t5=(int)(t/5); /*计算5元张数*/ a4=a4+t5; /*累加保存*/ t=t-t5*5; /*剩余工资*/ t2=(int)(t/2); /*计算2元张数*/ a5=a5+t2; /*累加保存*/ t=t-t2*2; /*剩余工资*/ t1=(int)(t); /*计算1元张数*/ a6=a6

30、+t1; /*累加保存*/ p=p-next; /*指针后移,处理下一条记录*/ clrscr(); /*清屏*/ printf(nnn*ticket number*n); /*输出标题*/ printf(-100-50-20-10-5-2-1-n); /*输出张数标题*/ for(i=0;ino) return p; /*比较相等,查找成功,返回指针*/ p=p-next; /*不相等指针后移*/ printf(not foundn); /*没有找到*/ return NULL; /*返回为空指针*/*删除结点*/void delete() SALARY *p; /*定义临时变量,p指向要删

31、除的结点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; /*否则头为空,尾也为空*/ el

32、se /*删除的不是第一个结点*/ p-prior-next=p-next; /*p的前驱的后继指向p原来的后继*/ if(p!=Last) /*如果p不是最后个结点*/ p-next-prior=p-prior; /*p后继的前驱指向p原来的前驱*/ else Last=p-prior;/*如p是最后一个结点,修改尾指针为p的前驱*/ free(p); /*删除结点后,不要忘记释放空间*/ printf(n have deleted %s SALARYn,s); printf(Dont forget saven);/*按姓名查找结点*/void search() SALARY *p; /*移

33、动指针*/ 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); /*换

34、行*/ 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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com