辽 宁 工 业 大 学
C语言程序设计 课程设计(论文)
题目: 工资管理
院(系): 软件学院 专业班级:汽车电子技术093班 学 号: 091408070 学生姓名: 刘一男 指导教师: 闫海龙 教师职称: 助 教 起止时间: 2009.12.14至2009.12.26
课程设计(报告)任务及评语
院(系):软件学院 教研室:软件教研室 学 号 程序设计(报告)题目 程序设计的任务与要求: (1)掌握C语言编程的基础知识。 (2)较熟练地编写C语言应用程序。 (3)了解C语言的常用标准函数、编程技巧、异常处理。 (5)联系已学过的内容,巩固所学的理论,增强独立工作能力。 (6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 091408070 学生姓名 刘一男 专业班级 汽车电子技术093班 工资管理 程序设计(报告)任务 指导教师评语及成绩 成绩: 指导教师签字: 2009 年 12 月 31 日 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
目 录
第1章 课程设计的目的与要求 ................................................ 1
1.1 课程设计目的 ........................................................ 1
1.2 课程设计的实验环境 .................................................. 1 1.3 课程设计的预备知识 .................................................. 1 1.4 课程设计要求 ........................................................ 1 第2章 课程设计内容 ........................................................ 2
2.1程序功能介绍 ........................................................ 2 2.2程序整体设计说明 .................................................... 2
2.2.1设计思路 ...................................................... 2 2.2.2数据结构设计及用法说明 ........................................ 2 2.2.3程序结构(流程图) ............................................ 3 2.2.4各模块的功能及程序说明 ........................................ 3 2.2.5程序结果 ...................................................... 4 2.3程序源代码及注释 .................................................... 5 第3章 课程设计总结 ........................................................ 14 参考资料 15
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 第1章 课程设计的目的与要求
1.1 课程设计目的
本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。本课程设计的目的和任务:
1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的软件设计 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力 1.2 课程设计的实验环境
硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。
1.3 课程设计的预备知识
熟悉C语言及C语言开发工具。 1.4 课程设计要求
1. 分析课程设计题目的要求 2. 写出详细设计说明
3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告
1
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 第2章 课程设计内容
2.1程序功能介绍
(1)能完成对工资的录入、修改。
(2)能统计工资,计算工资,并能根据工资数额进行排序。 (3)能查询工资,分类合计。
2.2程序整体设计说明
应用c语言程序设计知识对该工资管理程序进行编写,对问题整体了解的同时,进行分析,然后算法设计,应用所需算法对程序进行精心设计。使知识点与问题相结合按部就班的编写,最后进行完善,做到系统运行时无漏洞。
2.2.1设计思路
录用职工信息,能够按主要数据项查询某职工的信息;对职工求平均工资并显示。其所有文件作为工资数据的保存介质,能将所有输入的员工工资数据保存到文件中,并可选择继续输入或退出。 2.2.2数据结构设计及用法说明
工资管理系统是企、事业单位常见的计算机信息管理系统。它的主要任务是对各种工资信息进行日常的管理,如工资信息的输入、查询、修改、增加、删除,迅速准确地完成各种工资信息的统计计算和汇总,快速打印出报表。
2
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 2.2.3程序结构(流程图)
员工登录 N 修改用户和部门信息 N 登陆信息 增加,删除员工信息 系统管理 工资登陆 Y 修改/查询工资发放 N 打印工资报表 退出系统 图2.1 工资管理流程图
2.2.4各模块的功能及程序说明
部门管理模块:可进行部门浏览以及部门信息的添加,删除。
职工信息模块:可查看职工信息和工资信息,对管理人员来说,可对职工信息进行更新,对职工来说查询自己的信息或是知道姓名和密码的其他职工的信息。
工资信息管理模块:只对管理员有用,进行新工资的添加和旧工资删除,对信息进
3
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 行及时的更新。
浏览员工信息模块:只对管理员有用,浏览所有的职工的信息,工资的信息。 2.2.5程序结果
4
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
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\" /*动态地址分配函数*/ /****变量定义*******/
typedef struct z1 /*定义数据结构*/ {
char no[11]; /*编号*/ char name[15]; /*姓名*/
float jbgz; /*基本工资*/ float koukuan; /*扣款*/
5
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 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:init();break; /*初始化*/
case 1:create();break; /*输入数据创建双链表*/ case 2:list();break; /*显示所有数据*/ case 3:display();break; /*单条显示*/ case 4:calc();break; /*计算实发工资*/
case 5:search();break; /*查找职工信息数据*/ case 6:delete();break; /*删除记录*/
6
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) case 7:insert();break; /*插入记录*/ case 8:append();break; /*追加记录*/ case 9:save();break; /*保存文件*/ case 10:load(); break; /*读取文件*/ case 11:copy();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. Enter 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 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\" }; /*退出*/ char s[80]; int i;
int key=0; /*记录所压键值*/ int c=0;
gotoxy(1,25); /*移动光标*/
printf(\"press any key enter menu......\\n\");/*压任意键进入主菜单*/ getch();
clrscr(); /*清屏*/
textcolor(YELLOW); /*设置文本颜色为黄色*/
7
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) textbackground(BLUE); /*设置背景颜色为兰色*/ gotoxy(10,2);
putch(0xda); /*输出左上角边框┏*/ for(i=1;i<44;i++)
putch(0xc4); /*输出上边框水平线*/ putch(0xbf); /*输出右上角边框 ┓*/
for(i=3;i<22;i++)/*输出左右两边的垂直线*/ {
gotoxy(10,i);putch(0xb3); gotoxy(54,i);putch(0xb3); }
gotoxy(10,22);putch(0xc0); /*输出左上角边框┗*/ for(i=1;i<44;i++)
putch(0xc4); /*输出下边框水平线*/ putch(0xd9); /*输出右下角边框┛*/
window(11,3,53,21); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/ for(i=0;i<18;i++) {
gotoxy(10,i+1);
cprintf(\"%s\输出菜单项数组*/ } i=1;
gotoxy(10,2); /*设置默认选项在第一项*/
textbackground(LIGHTGREEN);/*设置背景颜色为浅绿*/ cprintf(\"%s\输出菜单项,表示选中*/ gotoxy(10,2); /*移动光标到菜单的第一项*/ while(key!=13) /*所压键不是回车键时*/
/*输入数据,创建双链表*/ void create() {
int x; /*记录行坐标*/
int i; /*记录输入记录数*/ int flag=0; /*做结束标记*/
float temp; /*定义临时变量*/ SALARY *info,*p; /*定义临时变量*/ if(First!=NULL)
init();/*如果头指针为空,调用初始化函数*/ p=First; /*从头指针开始*/ for(;;)
gotoxy(1,8+x); }
8
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) printf(\"|----------|----------------|--------|\");/*输出结尾水平线*/ }
/*字符串输入和验证函数*/ inputs(char *s, int count) {
char p[255]; do{
scanf(\"%s\输入字符串*/
if(strlen(p)>count)printf(\"\\n too long! \\n\");/*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/ }
/*单条显示记录*/ void display() {
int ch; /*菜单选项字符*/ SALARY *p; /*定义临时指针*/ clrscr(); /*清屏*/
p=First; /*从头指针开始*/
if(p==NULL) /*指针为空,即链表为空,返回主函数*/ }
/*输出指针所指结点信息*/ void print(SALARY *p) {
if(p) /*如果指针不为空,则显示信息*/ {
clrscr(); /*清屏*/
printf(\"\\n\\n\\n\"); /*换行*/
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\");
9
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) /*根据应发工资,计算税率*/ float fax(float x) {
float f1; if(x<1000)
return 0; /*小于1000,返回0*/ switch((int)(x/1000)) {
case 1:f1=0.05;break; /*1000~1999,返回0.05*/ case 2:f1=0.1;break; /*2000~2999,返回0.1*/ case 3:f1=0.15;break; /*3000~3999,返回0.15*/ case 4:f1=0.2;break; /*4000~4999,返回0.2*/ /*保存文件*/ void save() {
FILE *fp; /*定义指向文件的指针*/ SALARY *p; /*定义移动指针*/
char outfile[10]; /*保存输出文件名*/ clrscr();/*清屏*/
printf(\"Enter outfile name,for example c:\\\\f1\\\e.txt:\\n\");/*提示输入文件名格式信息*/
scanf(\"%s\
if((fp=fopen(outfile,\"wb\"))==NULL) /*为输出打开一个二进制文件*/
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\输入基本工资*/ info->jbgz=temp;
info->koukuan=0; /*扣款为0*/ info->yfgz=0; /*应发工资为0*/ info->shuijin=0; /*税金为0*/ info->sfgz=0; /*实发工资为0*/
printf(\"|----------|----------------|--------|\");
printf(\"\\n\\n\\nEnter infile name,for example c:\\\\f1\\\e.txt:\\n\"); /*提示输入文件名*/
10
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) scanf(\"%s\
if((fp=fopen(infile,\"ab\"))==NULL) /*打开文件*/
/*文件复制*/ void copy()
printf(\"Enter outfile name,for example c:\\\\f1\\\e.txt:\\n\"); /*提示输入目标文件名*/
scanf(\"%s\输入目标文件名*/
if((tfp=fopen(outfile,\"wb\"))==NULL) /*二进制写方式打开目标文件*/ {
printf(\"can not open output file \\n\"); return; }
while(!feof(sfp)) /*读文件直到文件尾*/ {
if(1!=fread(p,sizeof(SALARY),1,sfp)) break;/*块读*/
fwrite(p,sizeof(SALARY),1,tfp); /*块写*/ }
fclose(sfp); /*关闭源文件*/ fclose(tfp); /*关闭目标文件*/
printf(\"you have success copy file!!!\\n\");/*显示成功拷贝*/ }
/*排序*/ void sort() {
SALARY *p0,*p00,*p1,*p11,*p2; /*定义临时指针*/ int i=1; /*统计当前排第几个结点*/ clrscr(); /*清屏*/
printf(\"\\n\\n start sort....\\n\"); /*开始排序*/ p1=p11=p2=First;
while(p1!=NULL) /*当p1不为空时*/ {
p0=p1; /*待比较结点从p1开始*/ p2=p1; /*p2从当前待排序位置开始*/
while(p2->next!=NULL) /*p2的后继不为空时*/ {
if(p0->sfgz>p2->next->sfgz) /*找当前最小结点*/ {
p00=p2; /*找到当前最小结点记录其前驱指针*/ p0=p2->next; /*记录当前最小值结点的指针p0*/ } p2=p2->next; /*指针后移*/
11
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) }
Last=p0; /*当前最小结点为尾结点*/
if(p1!=p0) /*判断最小结点是否是当前排序位置,不是则作指针修改*/ { p00->next=p0->next; /*将p00的后继指向p0的后继*/ p0->next->prior=p00; /*p0的后继的前驱为p00*/ p0->next=p1; /*p0的后继指向下个排序位置p1*/ p1->prior=p0; /*p1的前驱为p0*/ if(i==1)
{ First=p0; /*作头指针*/ First->prior=NULL; /*头指针的前驱为空*/
} else /*不是第一个结点*/
{ p11->next=p0; /*p11的后继指向p0*/
p0->prior=p11; /*p0的前驱指向p11*/
} p11=p1=p0; /*因p0是排好序的最后一个结点,p1是下一个将要排序的位置,所以将p0赋值给p1和p11*/
}
i++; /*排好序的结点数加1*/
p1=p1->next; /*p1后移指向下一个待排序位置*/ }
printf(\"sort sucess!!!\\n\"); /*输出排序成功*/ }
/*索引*/
void index() {
SALARY *p,*q,*t,*h1; /*定义临时指针*/ clrscr();/*清屏*/
printf(\"\\n\\n start index.....\\n\\n\"); /*显示开始索引*/
h1=First->next; /*将原表的头指针所指的下一个结点作头指针*/ First->next=NULL; /*第一个结点为新表的头结点*/ Last=First; /*尾指针等于头指针*/
while(h1!=NULL) /*当原表不为空时,进行排序*/ q=p; /*待排序点值大,应往后插,所以新表指针后移*/ p=p->next;
}
if(p==q) /*p==q,说明待排序点值小,应排在首位*/ {
12
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) memcpy(sno,p->no,6); /*从编号中取出部门号*/ sno[6]='\\0'; /*做字符串结束标记*/
q=p->next; /*将指针指向待比较的记录*/
s1=p->sfgz; /*当前部门的实发工资初值作为该部门合计值的初值*/ while(q!=NULL) /*内循环开始*/ {
memcpy(qno,q->no,6); /*读部门号*/ qno[6]='\\0'; /*做字符串结束标记*/ if(strcmp(qno,sno)==0) /*比较部门号*/
{ s1+=q->sfgz; /*累加实发工资*/
q=q->next; /*指针指向下一条记录*/
}
else break; /*不是一个部门的结束本次内循环*/
}
strcpy(unit[i].u,sno); /*将部门号写入部门结构体数组中*/ unit[i].s=s1; /*将实发工资写入部门结构体数组中*/ i++; /*部门数累加*/
if(q==NULL) /*如果q为空,跳出循环*/ break;
else p=q; /*否则,将q赋值给p*/
}
printf(\"\\n\\n**************Total table**************\\n\");/*输出合计标题*/
printf(\"\\n--no-------unit------------total---------\\n\"); /*输出序号、部门、合计字段标题*/
for(j=0;jprintf(\" %d %s %10.2f\\n\输出合计值*/
printf(\"----------------------------------------\\n\"); }
13
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 第3章 课程设计总结
课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。
选择什么等级的语言就是关键,最后我决定运用文件。文章设计有几个要求:要能录入新的文档,要能删除不需要的文档,要能按照关键字查找已有的文档,要能按照要求的顺序进行排序
通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
最后,我感谢老师,感谢学校,能给我这次C语言程序设计实验的机会。我以后还要更加努力,更加努力的学好C语言,学好计算机。
好好学习,天天向上!
14
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 参考资料
[1] 谭浩强.C程序设计题解与上机指导.北京:清华大学出版社.1992年. [2] 廖雷.C语言程序设计.北京:高等教育出版社.2006年.
[3] 贾学斌,宋海民.C语言程序设计.北京:中国铁道出版社.2007年. [4] 赵海廷.C语言程序设计.北京:人民邮电出版社.2005年.
[5] 何光明,杨静宇.C语言程序设计与应用开发.06年版.北京:清华大学出版社.2006年. [6]张强华. C 语言程序设计.北京. 人民邮电出版社.2001年. [7]徐新华. C 语言程序设计教程.北京. 清华大学出版社.1999年. [8]廖 雷. C语言程序设计.北京. 高等教育出版社.2006年. [9]方少卿. C语言程序设计. 北京. 中国铁道出版社.2007年.
[10] 谭浩强. C语言程序设计. (第二版).北京.清华大学出版社.2007年.
15
因篇幅问题不能全部显示,请点此查看更多更全内容