C语言课程设计(论文)工资管理.doc

上传人:laozhun 文档编号:2384990 上传时间:2023-02-17 格式:DOC 页数:23 大小:104KB
返回 下载 相关 举报
C语言课程设计(论文)工资管理.doc_第1页
第1页 / 共23页
C语言课程设计(论文)工资管理.doc_第2页
第2页 / 共23页
C语言课程设计(论文)工资管理.doc_第3页
第3页 / 共23页
C语言课程设计(论文)工资管理.doc_第4页
第4页 / 共23页
C语言课程设计(论文)工资管理.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《C语言课程设计(论文)工资管理.doc》由会员分享,可在线阅读,更多相关《C语言课程设计(论文)工资管理.doc(23页珍藏版)》请在三一办公上搜索。

1、辽 宁 工 业 大 学 C语言程序设计 课程设计(论文)题目: 工资管理 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 课程设计(报告)任务及评语院(系): 教研室:软件教研窒学 号学生姓名专业班级程序设计(报告)题目工资管理程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养

2、学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2009 年 1 月 11 日目 录第1章 课程设计的目的与要求31.1 课程设计目的31.2 课程设计的实验环境31.3 课程设计的预备知识31.4 课程设计要求3第2章 课程设计内容42.1课程设计题目42.2课程设计整体设计说明42.2.1课程设计内容42.2.2系统功能模块结构图42.2.3数据结构设计及用法说明42.2.4程序结构(画流程图)52.

3、2.5各模块的功能72.3程序源代码及注释7第3章 课程设计总结7参考资料19第1章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1

4、.3 课程设计的预备知识熟悉C语言及C语言开发工具。1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 课程设计内容2.1程序功能介绍(1)能完成对工资的录入、修改(2)能统计工资,计算工资,并能根据工资数额进行排序(3)能查询工资,分类合计2.2程序整体设计说明本系统是采用C程序设计思想进行编制的,整个系统由一个结构体、函数模块以及一个主函数组成,从而建立一个“员工工资管理系统”,以方便对工资数据进行管理操作。开发目的如:能对工资数据进行录入和修改;能统计工

5、资,计算工资,并能根据工资数额进行排序;能根据员工的姓名来查询该员工的工资、奖金及工资总额; 2.2.1设计思路利用单链表结构实现学生成绩管理,了解数据库管理的基本功能,掌握C语言中的结构体、指针、函数、文件操作等知识,是一个C语言知识的综合应用。注意其中的难点,指针变量做函数参数、函数值为指向结构体的指针及单链表结构的应用等知识。就是将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。2.2.2数据结构设计及用法说明 根据这些需求,设计一个CNode类 、CData类和CList类,在该类中

6、,除了定义构造函数以外,还应该一定义对员工工资应有的操作。在该类中包括的数据成员有添加、显示和查询等,构造函数用于设置数据成员添加、显示和查询等的初值。见如图所示。CNode- pData : CData *- pNext : CNode *+ CNode()+ CNode(node:CNode &) + InputData(pdata:CData *):void+ ShowNode():void+ GetData():CData * CData+ CData()+ Compare():int+ Show():void = 0+ CData()CList# pHead : CNode *+ C

7、List()+ CList()+ AddNode(pnode:CNode *):void+ DeleteList(:CNode *):CNode *+ LookUP(:CData &):CNode *+ ShowList():void+ DeleteList():void+ GetListHead():CNode *+ GetListNextNode(:CNode *):CNode *-pData图1员工工资管理程序的CNode类 、CData类和CList类的UML图2.2.3程序结构(流程图)利用单链表结构实现员工工资管理,包括添加、保存、显示、查询、删除、退出。见如图所示:员工工资管理系

8、统由相关工作人员录入干个员工的工资数据员工工资管理程序输入已录入好的员工工资、奖金及工资总额数据输入新的员工工资数据统计工资,计算工资,并能根据工资数额进行排序查找有无数据文件,找到后保存文件数据对工资的录入、修改查询工资,分类合计退出系统图2程序的流程图将员工工资管理程序的算法用N-S结构化流程图来表示,见如图所示。结束输出:自动排序、姓名、工奖、奖金及总额输入姓名、工资、号码开始是/否再输入是/否查询输出:自动排序、姓名、工资 、奖金和总额n+1=n是/否删除输出:自动排序、姓名、工资 、奖金和总额 Y N Y N N Y 图3 用N-S结构化流程图2.2.4各模块的功能及程序说明函数模块

9、功能主函数main()定义员工结构体数组,调用添加、显示等函数对工资表进行处理存储函数LoadFile()查找有无数据文件,找到后读取文件数据添加函数AddRecord()输入姓名、工资、资金及工资总额 显示函数DisplayRecord()显示姓名、员工工资、奖金及工资总额查询函数LookupRecord ()查询指定员工工资记录删除函数DeleteRecrd()删除指定员工姓名记录输出函数Operate()输出员工工资记录系统的功能模块图2.2.5程序结果 *MENU* 0. init list 1. Enter list 2. List all 3. Display record by

10、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 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 *gongz

11、iguanli* -Enter end-|-| no | name | jbgz |-|-|-| | | |*SALARY*|nO | name | jbgz | koukuan | yfgz | shuijin | sfgz |-|-|-|-|-|-|-|60 |liluoke | 6000.00| 0.00| 0.00| 0.00| 0.00|50 |zhangpeng | 5000.00| 0.00| 0.00| 0.00| 0.00|*end*Press any key congtinue.*SALARY*|no | name | jbgz | koukuan| yfgz | shui

12、jin | sfgz |-|-|-|-|-|-|-|60 |liluoke | 6000.00| 100.00| 5900.00| 1470.00| 4430.00|*end* *0. Quit 1. Prior 2. Next 3. First 4.Lastplease select 04:*gongziguanli* -Enter end-|-| no | name | jbgz |-|-|-|1 |zhang |12222 |-|-|-|2li |li |1000 |-|-|-|3 |sd |3231232 |-|-|-|12 |sadsas |1321231|-|-|-|-|-|-|p

13、ress any key enter menu.2.3程序源代码及注释/*12.3.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 /*动态地址分配

14、函数*/*变量定义*/typedef 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; /*

15、双链表尾指针*/*函数原型*/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(); /*索引*/vo

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

17、case 2:list();break; /*显示所有数据*/ 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:c

18、opy();break; /*复制文件*/ 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. En

19、ter list, /*输入数据,创建双链表*/ 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 da

20、ta from the file,/*读取文件*/ 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 e

21、nter menu.n);/*压任意键进入主菜单*/ 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);pu

22、tch(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?

23、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; /*

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

25、=0; x=0; /*确定移动的行坐标*/ 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(s

26、izeof(SALARY);/*申请一个记录空间*/ 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);/*光标到输入编号位置*/

27、inputs(info-no,10);/*输入编号,并验证长度不超过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; /*初始

28、实发工资为0,待计算工资时计算*/ 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;/*新结点的前驱指向

29、原来的头结点的前驱*/ p-prior=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);/*输入字符串*

30、/ if(strlen(p)count)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

31、); /*换行三次*/ printf(*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 */ if(i%10=0) break; /*如果满10行,跳出内循环*/ printf(*end*n); /*输出本页的结束行*/ printf(Press any key congtinue.n); getch(); /*输出一页暂停

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号