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

下载本文档

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

文档简介

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 | |-|-|-|12 |sadsas |-|-|-|-|-|-|press any key en

13、ter 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 /*动态地址分配函数*/*变量定义*/type

14、def 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(); /*索引*/void total(); /*分

16、类合计*/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();b

17、reak; /*显示所有数据*/ 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; /*

18、复制文件*/ 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, /*输入数

19、据,创建双链表*/ 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 fil

20、e,/*读取文件*/ 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);/*

21、压任意键进入主菜单*/ 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); goto

22、xy(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; /*如压向上光

23、标键,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=0; x=0; /*确定移动

25、的行坐标*/ 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);/

26、*申请一个记录空间*/ 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,

27、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; /*初始实发工资为0,待计算工资时计算

28、*/ 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-p

29、rior=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)c

30、ount)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); /*换行三次*/ pri

31、ntf(*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+; /*输出行数

32、加1 */ 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

33、 is 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*/第3章 课程设计总结 通过这次课程设计,使我对C程序设计有了更进一步的认识和了解,对系统设计及开发有了全面的思路。首先,通过对系统进行算法分析,确定各个功能函数;然后一个个

34、具体地对他们进行编程,并且仔细检查看是否有错;在完成这一步之后才开始构造主函数,通过主函数把各个功能函数联系起来,编译修改错误和不足之处。在实际编程的过程中按照老师所说的模块化思想,分部分的进行编写。而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行,所以认真仔细就是非常重要的了。开始的时候真的感觉编程是一件难以编辑的事情,没有办法只好利用断点调试来一步一步检查代码中的错误,这样为了找一个错误花费了大量的时间,当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。又经过不到半个月的努力,终于把程序完成了,尽管程序还有很多错误和漏洞,仍然是很高兴的。无论如何是自己的劳动成果,是学习C程序设计的一次实践作业,也是给了我一个非常有价值的经验。 在做课程设计过程中,收获知识,提高能力,同时也将书本上

温馨提示

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

评论

0/150

提交评论