工资管理系统论文.docx
《工资管理系统论文.docx》由会员分享,可在线阅读,更多相关《工资管理系统论文.docx(29页珍藏版)》请在冰豆网上搜索。
工资管理系统论文
《高级语言程序设计》
课程设计说明书
设计题目:
工资管理系统
班级:
电子信息工程1003班
***王静
学号:
**********
****刘晓佩
成绩:
一、需求分析
题目:
工资管理系统
总体设计目标:
使用者可以利用此系统进行对工资管理的各项运算操作,如根据用户提供的客户工资自动地进行计算实发工资,查找职工信息数据,删除记录,插入记录,保存记录及按实发工资排序等,最后清晰完整的工资管理结果显现在屏幕中。
大大方便使用者对工资管理的统计操作,这样不仅可以提高效率,而且方便易操作。
二.课程设计目的:
1.进一步加深、巩固学生所学专业课程(《C语言》)的基本理论知识;
2.理论联系实际,进一步培养学生综合分析问题和解决问题的能力;
3.掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能;
4.充分发挥广大同学的潜力,使他们通过本次课程设计而得到全面的锻炼;
5.提高运用C语言解决实际问题的能力。
三.课程设计要求
1.分析课程设计题目的要求;
2.设计流程图,功能框图;
3.编写后续程序代码,调试程序使其能正确运行;
4.设计完成的程序要便于操作和使用;
5.设计完成后提交课程设计报告。
四.该程序具备的功能:
1)具备对职工的工资信息录入功能(添加、删除、排序)
2)具备对工资的排序功能(最高分,最低分等)
3)具备对工资的统计及查询功能。
(应发工资、实发工资、工资总数)
4)具备计算工资的功能
5)按职工号索引
6)按部门求合计
五.详细设计说明:
1.详细的设计说明:
1)在录入员工工资之前,必须知道员工的相关信息,所以员工基本信息的录入
包括工资的录入应事先完成。
由于需要将不同类型的数据组合成一个有机的整体,
组合在一起的数据是互相联系的,所以要用到结构体类型,来实现这样的功能。
即:
structnode
node编码姓名基本工资扣款应发工资税金实发工资
申明结构体变量同时定义变量。
2)由于要对一些信息进行删除,所以最好使用链表。
建立链表,即在定义结构体后,对链表进行初始化,后依次插入结点,输入结点数据,并建立前后连接的关系。
3)用冒泡法对员工工资进行排序。
2.流程图:
3结构功能图
四、编码
1.说明
“工资管理系统总控模块”的功能由menu_select函数实现,根据“工资管理系统总控模块”的程序流程图编写menu_select函数。
“计算实发工资子模块”的功能由calc函数实现,根据“计算实发工资子模块”的程序流程图编写calc函数。
“查找记录子模块”的功能由search函数实现,根据“查找记录子模块”的程序流程图编写search函数。
“删除记录子模块”的功能由delete函数实现,根据“删除记录子模块”的程序流程图编写delete函数。
“插入记录子模块”的功能由insert函数实现,根据“插入记录子模块”的程序流程图编写insert函数。
“保存记录子模块”的功能由save函数实现,根据“插入记录子模块”的程序流程图编写save函数。
“按实发工资升序排序子模块”的功能由sort函数实现,根据“按实发工资升序排序子模块”的程序流程图编写sort函数。
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" /*动态地址分配函数*/
/****变量定义*******/
typedefstructz1 /*定义数据结构*/
{
charno[11]; /*编号*/
charname[15]; /*姓名*/
chardanwei[15]; /*单位*/
floatjbgz; /*基本工资*/
floatkoukuan; /*扣款*/
floatyfgz; /*应发工资*/
floatshuijin; /*税金*/
floatsfgz; /*实发工资*/
structz1*prior; /*前驱指针*/
structz1*next; /*后继指针*/
}SALARY; /*结构体类型名*/
structz1*First; /*双链表头指针*/
structz1*Last; /*双链表尾指针*/
/******函数原型*********/
voidinit(); /*初始化*/
voidcreate(); /*创建链表*/
voidcalc(); /*计算应发工资*/
voiddelete(); /*删除*/
voidsearch(); /*查找*/
voidsave(); /*保存文件*/
voidload(); /*读取文件*/
voidcomputer(); /*计算所需各种票面张数*/
voidinsert(); /*插入*/
voidappend(); /*追加*/
voidcopy(); /*复制文件*/
voidsort(); /*排序*/
voidindex(); /*索引*/
voidtotal(); /*分类合计*/
voidlist(); /*显示所有数据*/
voidprint(SALARY*p);/*输出单条记录*/
voiddisplay(); /*随意逐条显示*/
floatfax(floatx); /*计算税金*/
intmenu_select(); /*主菜单*/
/*******主函数开始**********/
main()
{
inti;
clrscr();
for(;;)
{
switch(menu_select()) /*调用菜单函数返回一个整数值*/
{
case0:
calc();break; /*计算实发工资*/
case1:
search();break; /*查找职工信息数据*/
case2:
delete();break; /*删除记录*/
case3:
insert();break; /*插入记录*/
case4:
save();break; /*保存文件*/
case5:
sort();break; /*按实发工资升序排序*/
case6:
exit(0); /*退出*/
}
}
}
/*菜单函数,函数返回值为整型,代表所选的菜单项*/
menu_select()
{
char*f[]=
{
/*定义菜单字符串数组*/
"**************MENU*************",/*菜单的标题行*/
"0.Calcthesalary", /*计算实发工资*/
"1.Searchrecordonname", /*查找记录*/
"2.Deletearecord", /*删除记录*/
"3.Insertrecordtolist", /*插入记录*/
"4.Savedatatothefile", /*保存文件*/
"5.Sortonsfgz", /*排序*/
"6.Quit", /*退出*/
};
chars[80];
int i;
intkey=0; /*记录所压键值*/
intc=0;
gotoxy(1,25); /*移动光标*/
printf("pressanykeyentermenu......\n");/*压任意键进入主菜单*/
getch();
clrscr(); /*清屏*/
textcolor(YELLOW); /*设置文本颜色为黄色*/
textbackground(RED); /*设置背景颜色为红色*/
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<8;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) /*所压键不是回车键时*/
{
C语言课程设计-工资管理系统
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?
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",f[i]); /*输出菜单项*/
c=i-1; /*给代表菜单选项的整数赋值*/
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
returnc; /*返回代表菜单选项的整数值*/
}
/*计算实发工资*/
voidcalc()
{
intx; /*行坐标*/
inti=0; /*记录数*/
floattemp; /*临时变量扣款*/
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 | 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,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(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->next; /*指针后移,处理下一条*/
}
gotoxy(1,7+x);
printf("|----------|----------------|--------|----------|--------|--------|--------|\n");/*输出结束行*/
printf("Pressanykeycongtinue...\n");
getch();
}
}
/*按编号查找记录*/
SALARY*find(char*no)
{
SALARY*p; /*定义移动指针*/
p=First; /*从头指针开始*/
while(p) /*当p不为空时*/
{
if(!
strcmp(no,p->no))
returnp; /*比较相等,查找成功,返回指针*/
p=p->next; /*不相等指针后移*/
}
printf("notfound\n"); /*没有找到*/
returnNULL; /*返回为空指针*/
}
/*删除结点*/
voiddelete()
{
SALARY*p; /*定义临时变量,p指向要删除的结点p*/
chars[11]; /*要删除结点的编号*/
clrscr(); /*清屏*/
printf("pleasedeletedno\n"); /*提示输入信息*/
scanf("%s",s); /*输入要删除的职工编号*/
if((p=find(s))!
=NULL) /*调用查找函数,如果找到做下面的处理*/
{
if(First==p) /*如果是第一个结点*/
{
First=p->next; /*将头指针指向其后继结点*/
if(First) /*如头指针不为空*/
First->prior=NULL; /*将头结点的前驱设为空*/
else
Last=NULL; /*否则头为空,尾也为空*/
}
else /*删除的不是第一个结点*/
{
p->prior->next=p->next; /*p的前驱的后继指向p原来的后继*/
voidsearch()
{
SALARY*p; /*移动指针*/
chars[15]; /*保存姓名*/
clrscr(); /*清屏*/
printf("pleaseenternameforsearch\n");/*提示输入*/
scanf("%s",s); /*输入要查找人的姓名*/
p=First; /*移动指针从头指针开始*/
while(strcmp(p->name,s)&&p!
=NULL) /*做比较判断*/
p=p->next; /*没找到,指针后移继续查找*/