职员工资管理系统陈冠宇.docx
- 文档编号:24011448
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:44
- 大小:197.55KB
职员工资管理系统陈冠宇.docx
《职员工资管理系统陈冠宇.docx》由会员分享,可在线阅读,更多相关《职员工资管理系统陈冠宇.docx(44页珍藏版)》请在冰豆网上搜索。
职员工资管理系统陈冠宇
湖南工程学院应用技术学院
课程设计说明书
课程设计:
C语言程序设计
专业:
电气工程及其自动化
班级:
0884班
学号:
200813010427
学生姓名:
陈冠宇
指导教师:
王宁肖伟平罗敬
2009年6月8日
湖南工程学院
课程设计任务书
课程名称C语言程序设计
课题工资管理系统
专业班级电气0884班
学生姓名陈冠宇
学号200813010427
指导老师王宁肖伟平罗敬
审批
任务书下达日期2009年6月2日
任务完成日期2009年6月18日
一、设计内容与设计要求
1.设计内容:
设计与发开一个工资管理系统,对工号、姓名、编号、姓名、基本工资、扣款、应发工资、税金、实发工资等信息进行管理。
主要完成以下功能:
1).显示所有数据
2).单条显示
3).计算实发工资
4).查找职工信息数据
5).删除记录
6).插入记录
7).追加记录
8).保存文件
9).读取文件
10).按实发工资升序排
2.设计要求:
1).设计正确,方案合理。
2).界面友好,使用方便。
3).程序精炼,结构清晰。
4).设计报告5000字以上,含程序设计说明、系统的功能框图、流程图、源程序清单等。
5).实际操作过程中遇到的问题及解决方法:
设计总结及心得体会.
6).上机演示。
二、进度安排
第十七周星期二8时:
00分——12时:
00分
查阅相关资料,补充编写源程序,把未编写完的程序自己补充完整
并自己开始编写程序设计实验报告;
星期六14时:
00分——18时:
00分
完成源程序编写调试运行课程设计报告
第十八周星期四18时:
30分——22时:
30分
完成课程设计报告以及答辩
附:
课程设计报告装订顺序:
封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。
正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:
一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。
正文总字数要求在5000字以上(不含程序原代码)。
目录
一.课题的主要功能6
分析:
6
程序的模块组成:
6
各个函数的主要功能:
6
二.课题的功能模块的划分:
7
三.主要功能的实现8
主函数main()8
主菜单选择函数intmenu_select()8
初始化函数voidinit()8
输入记录函数voidcreate()8
显示记录函数voidprint(SALARY*p)9
保存数据到文件函数voidsave()10
查找记录函数SALARY*find(char*no)10
删除记录函数voiddelete()10
插入函数voidinsert()11
从文件读数据函数voidload()12
四.程序调试:
13
部分错误13
部分截图13
五.总结:
17
六.附件:
18
源程序:
18
一:
课题的主要功能
程序的模块组成:
主函数:
intmain()
新建函数:
voidinit()
输入函数:
voidcreate()
显示函数:
voidlist()
删除函数:
voiddelete()
查找函数:
voidsearch()
保存函数:
voidsave()
读取函数:
voidload()
插入函数:
voidinsert()
追加函数:
voidappend()
计算实发工资函数:
voidcalc()
菜单函数:
intmenu_select()
各个函数的主要功能:
输入函数:
随时输入数据。
菜单函数:
显示系统主菜单。
显示函数:
显示所有员工工资信息。
寻找函数:
方便员工查找自己的工资。
删除函数:
删除某员工的工资信息。
排序函数:
按工资高低排序。
按编号排序函数:
按编号排序。
插入函数:
可以插入新的信息。
保存函数:
保存员工工资信息,以免丢失。
计算函数:
●计算每名员工的应发工资。
●计算每名员工的扣款。
●计算每名员工缴纳的税金。
●计算每名员工的实发工资。
二:
课题的功能模块的划分:
三.主要功能的实现
详细设计:
整个系统除了主函数外,另外还有13个函数,实现八大功能:
输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。
各个函数的详细设计说明分别如下:
主函数main()
利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
主菜单选择函数intmenu_select()
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的十大功能,对光标进行上下移动并选择。
等执行完每一个函数功能后,返回菜单。
代码设计:
初始化函数voidinit()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。
输入记录函数voidcreate()
这是一个无参函数,用来执行职工工资记录的输入,当职工为@时停止输入,函数结束后,带回一个链表头的指针指向一下个职工的信息插在表头。
N-S流程图如下:
head=NULL
无条件循环
指针p指向新开辟的单元
指针p是否为空
是否
输入编号p->num
输出p->num是否为@
内存是否
溢出输入姓名p->name
停止for(i=0;i<3;i++)
输入输入工资
返回p->sum=s;
菜单p->average=(float)s/3;
p->order=0;
p->next=head;head=p;
显示记录函数voidprint(SALARY*p)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:
先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。
然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重复执行此步聚直到p指针指向NULL为止。
N-S流程图如下:
p=head,使指向第一个结点
输出p所指向的结点
p指向一下个结点
当p指的不是表尾
保存数据到文件函数voidsave()
这是一个无参函数,可以把员工工资记录保存在电脑上由自己任意命名的文件。
N-S流程图如下:
输入要保存记录的文件地址outfile
文件不能打开
否是
p=head;
输出一个出错信
当p不为空时息,并返回菜单
fwrite(p,LEN,1,fp);(写入一条记录)
p=p—>next;(指针后移)
fclose(fp);(关闭文件)
查找记录函数SALARY*find(char*no)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按编号对某个职工进行查找,并显示所查找到的记录。
N-S流程图如下:
输入要查找的员工的编号s
p=head,使p指向第一结点
当记录的编号不是要找的,或指针不为空时
p=p->next
p!
=NULL如果指针不为空
是否
显示没有该
输出p所指向的结点员工
删除记录函数voiddelete()
这是一个有返回值的有参函数。
N-S流程图如下:
插入函数voidinsert()
这是一个无参函数
N-S流程图如下:
q=head
原来的链表是空表
是否
2秒后当记录的编号不是要找的,或指针不为空时
返回
主菜单info指向q位置q向后移一个结点
!
strcmp(p->no,info->no)
是
否
printf("Don't
forgetsave\n")
info->next=p->next;
q->next=info;
从文件读数据函数voidload()
这是一个无参函数。
N-S流程图如下:
定义两个指针变量p1,p2
输入要打开的记录文件地址infile
文件不能打开
否是
开辟一个新单元
指针p1是否为空返回菜单
否是
返回菜单
读入记录
fclose(fp);(关闭文件)
四.程序调试:
由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。
在用的时候难免出现这样那样的错误。
如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。
解决的这个问题的办法是调整。
最后还是老师帮我帮我们找到了问题的所在——for循环的次超过了链表中结点的数量。
再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。
又如:
在设计修改学生信息时的密密码时。
当用户发现输入密码错误按了退格键后,因为“*”并没有消去。
导致用户再次按退格键,又出现前面的情况。
最终导致输入密码错误。
所以用了两次退格键:
把恒等==错误的表示成-=
一个系统的菜单和提示信息非常重要。
如果没有这些用户根本不知道怎么用你设计的这个系统。
在设计的调试过程中也无法顺利的完成调试工作。
有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。
截图:
1.主程序选项
2.输入职工资料
3.查看全部资料
4.计算职工的工资
5查找单个职工的信息
6.删除职工资料
5.总结:
当今科学设计发展日新月异,其中计算机起到了重要的作用。
所以,作为当代大学生,我们有必要,也有责任将计算机学习好。
而本学期开设的C语言这门课程,无疑是为我们的计算机的学习打下结实的基础。
其中,课程设计是锻炼我们实际操作能力,检验所学知识的最好途径。
此次课程设计的过程中,我可以说得上是受益良多。
从刚刚开始,拿到设计任务的手足无措,到后来自己逐渐摸清楚它的来龙去脉,在不断的失败中认真总结,与同学互相探讨,共同面对困难,了解困难,解决困难。
所以说,此次设计任务带给我的不仅仅是一次设计任务,更是让我从中悟出了许多在日后工作学习中都可以运用的宝贵经验,例如遇到困难要迎难而上,相信团队合作,大胆假设,小心求证等等。
这是我自学习C语言来第一次必须自主完成一个设计任务,对我来说是既兴奋又紧张。
在完成设计的过程中,才发现自己的学习还不够扎实,而且把所学的理论知识运用到实际操作当中也并不是一件很容易的事情。
对于设计,可以说得上是困难重重,一路上遇到了很多阻碍。
而之前存在的侥幸心理,即自己掌握不牢固的知识点不一定会考,在这次实践过程中给予了我深刻的教训,让我意识到学习是十分严谨的事情,来不得半点马虎与怠慢。
当然,这次的课程设计也让我对C语言这门课程有了新的认识与热爱,而且在实践中能很好的运用自己所学的知识是一件十分有成就感的事情,任何一点点新的进展都会让我十分兴奋。
而我也终于承认,理论知识,必须与实际操作相结合,才能使自己的能力更加得到锻炼与提升。
而且在此次课程设计中,有些东西是书本上所没有的,要自己去查资料,虽然很麻烦,但也确实锻炼了我们的能力。
所以说,我们的知识面不应该仅仅停留于书本上,学海无涯,还有很多课外的东西等着我们去了解,学习。
当然,结局自然是皆大欢喜的,一道道难关终究还是被我攻克,程序设计终于做出来了,很高兴。
这与同学们,老师们的帮助是分不开的,正是有了他们,才会让我在短短两周的时间内,完成自己的第一次程序设计,对此我表示衷心的感谢。
第一次完成对于我来说如此庞大的设计任务,自然有很多的不足与稚嫩的地方,但我相信,只要自己肯钻研,认真总结,汲取好的地方,总结经验教训,在以后的任务中,我一定会越做越好。
而此次,只是一个开始。
六.附件:
源程序:
/******头文件(.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"/*动态地址分配函数*/
/****变量定义*******/
typedefstructz1/*定义数据结构*/
{
charno[11];/*编号*/
charname[15];/*姓名*/
floatjbgz;/*基本工资*/
floatkoukuan;/*扣款*/
floatyfgz;/*应发工资*/
floatshuijin;/*税金*/
floatsfgz;/*实发工资*/
structz1*next;/*后继指针*/
}SALARY;/*结构体类型名*/
structz1*head;/*链表头指针*/
/******函数原型*********/
voidinit();/*初始化*/
voidcreate();/*创建链表*/
voidcalc();/*计算应发工资*/
voiddelete();/*删除*/
voidsearch();/*查找*/
voidsave();/*保存文件*/
voidload();/*读取文件*/
voidinsert();/*插入*/
voidappend();/*追加*/
voidlist();/*显示所有数据*/
voidprint(SALARY*p);/*输出单条记录*/
floatfax(floatx);/*计算税金*/
intmenu_select();/*主菜单*/
/*******主函数开始**********/
main()
{
inti;
clrscr();
for(;;)
{
switch(menu_select())/*调用菜单函数返回一个整数值*/
{
case0:
init();break;/*初始化*/
case1:
create();break;/*输入数据创建双链表*/
case2:
list();break;/*显示所有数据*/
case3:
calc();break;/*计算实发工资*/
case4:
search();break;/*查找职工信息数据*/
case5:
delete();break;/*删除记录*/
case6:
insert();break;/*插入记录*/
case7:
append();break;/*追加记录*/
case8:
save();break;/*保存文件*/
case9:
load();break;/*读取文件*/
case10:
exit(0);/*退出*/
}
}
}
/*菜单函数,函数返回值为整型,代表所选的菜单项*/
menu_select()
{
char*f[]={/*定义菜单字符串数组*/
"**************MENU*************",/*菜单的标题行*/
"0.initlist",/*初始化双链表*/
"1.Enterlist",/*输入数据,创建链表*/
"2.Listall\n",/*显示所有记录*/
"3.Calcthesalary",/*计算实发工资*/
"4.Searchrecordonname",/*查找记录*/
"5.Deletearecord",/*删除记录*/
"6.Insertrecordtolist",/*插入记录*/
"7.Appendrecordtofile",/*追加记录*/
"8.Savedatatothefile",/*保存文件*/
"9.Loaddatafromthefile",/*读取文件*/
"10.Quit"};/*退出*/
chars[80];
inti;
intkey=0;/*记录所压键值*/
intc=0;
gotoxy(1,25);/*移动光标*/
printf("pressanykeyentermenu......\n");/*压任意键进入主菜单*/
getch();
clrscr();/*清屏*/
textcolor(YELLOW);/*设置文本颜色为黄色*/
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<12;i++)
{
gotoxy(10,i+1);
cprintf("%s",f[i]);/*输出菜单项数组*/
}
i=1;
gotoxy(10,2);/*设置默认选项在第一项*/
textbackground(LIGHTGREEN);/*设置背景颜色为浅绿*/
cprintf("%s",f[1]);/*输出菜单项,表示选中*/
gotoxy(10,2);/*移动光标到菜单的第一项*/
while(key!
=13)/*所压键不是回车键时*/
{
while(bioskey
(1)==0);/*查询是否压下了一个键*/
key=bioskey(0);/*返回下一个在键盘压下的键*/
key=key&0xff?
key&0xff:
key>>8;/*对所压的键进行判断*/
gotoxy(10,i+1);
textbackground(BLUE);/*设置背景颜色为蓝色*/
cprintf("%s",f[i]);/*输出菜单项*/
if(key==72)i=i==1?
11:
i-1;/*如压向上光标键↑,i减1,如已到第一行再上移,则到最后一行*/
if(key==80)i=i==11?
1:
i+1;/*如压向下光标键↓,i加1,如已到最后一行再下移,则到第一行*/
gotoxy(10,i+1);/*光标移动i的下一项*/
textbackground(LIGHTGREEN);/*将背景颜色设为浅绿*/
cprintf("%s",f[i]);/*输出菜单项*/
c=i-1;/*给代表菜单选项的整数赋值*/
}
textbackground(BLACK);/*设置背景颜色为黑色*/
window(1,1,80,25);/*恢复原窗口大小*/
returnc;/*返回代表菜单选项的整数值*/
}
/*初始化函数*/
voidinit()
{
head=NULL;
}
/*输入数据,创建链表*/
voidcreate()
{
intx;/*记录行坐标*/
inti;/*记录输入记录数*/
intflag=0;/*做结束标记*/
floattemp;/*定义临时变量*/
SALARY*info,*p;/*定义临时变量*/
if(head!
=NULL)
init();/*如果头指针为空,调用初始化函数*/
p=head;/*从头指针开始*/
for(;;)
{
if(flag==1)
break;/*如果flag=1,结束输入*/
i=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(sizeof(SALARY));/*申请一个记录空间*/
if(!
info)
{
printf("\noutofmemory");/*如没有得到空间,输出内存溢出信息*/
exit(0);/*退出程序*/
}
info->next=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);/*输入编号,并验证长度不超过10*/
if(info->no[0]=='@')
{
flag=1;
break;
}/*编号首字符为@结束输入*/
gotoxy(13,8+x);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职员 工资管理 系统 陈冠宇