工资管理2.docx
《工资管理2.docx》由会员分享,可在线阅读,更多相关《工资管理2.docx(19页珍藏版)》请在冰豆网上搜索。
![工资管理2.docx](https://file1.bdocx.com/fileroot1/2023-1/6/20245ee6-62a9-4026-a731-7c8c7c432d97/20245ee6-62a9-4026-a731-7c8c7c432d971.gif)
工资管理2
辽宁工业大学
C语言程序设计课程设计(论文)
题目:
工资管理
院(系):
软件学院
专业班级:
汽车电子技术093班
学号:
091408070
学生姓名:
刘一男
指导教师:
闫海龙
教师职称:
助教
起止时间:
2009.12.14至2009.12.26
课程设计(报告)任务及评语
院(系):
软件学院教研室:
软件教研室
学号
091408070
学生姓名
刘一男
专业班级
汽车电子技术093班
程序设计(报告)题目
工资管理
程序设计(报告)任务
程序设计的任务与要求:
(1)掌握C语言编程的基础知识。
(2)较熟练地编写C语言应用程序。
(3)了解C语言的常用标准函数、编程技巧、异常处理。
(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。
(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。
(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。
课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。
正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。
指导教师评语及成绩
成绩:
指导教师签字:
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各模块的功能及程序说明4
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课程设计的实验环境
硬件要求能运行Windows2000/XP操作系统的微机系统。
C语言程序设计及相应的开发环境。
1.3课程设计的预备知识
熟悉C语言及C语言开发工具。
1.4课程设计要求
1.分析课程设计题目的要求
2.写出详细设计说明
3.编写程序代码,调试程序使其能正确运行
4.设计完成的软件要便于操作和使用
5.设计完成后提交课程设计报告
第2章课程设计内容
2.1程序功能介绍
(1)能完成对工资的录入、修改。
(2)能统计工资,计算工资,并能根据工资数额进行排序。
(3)能查询工资,分类合计。
2.2程序整体设计说明
应用c语言程序设计知识对该工资管理程序进行编写,对问题整体了解的同时,进行分析,然后算法设计,应用所需算法对程序进行精心设计。
使知识点与问题相结合按部就班的编写,最后进行完善,做到系统运行时无漏洞。
2.2.1设计思路
录用职工信息,能够按主要数据项查询某职工的信息;对职工求平均工资并显示。
其所有文件作为工资数据的保存介质,能将所有输入的员工工资数据保存到文件中,并可选择继续输入或退出。
2.2.2数据结构设计及用法说明
工资管理系统是企、事业单位常见的计算机信息管理系统。
它的主要任务是对各种工资信息进行日常的管理,如工资信息的输入、查询、修改、增加、删除,迅速准确地完成各种工资信息的统计计算和汇总,快速打印出报表。
2.2.3程序结构(流程图)
2.2.4各模块的功能及程序说明
部门管理模块:
可进行部门浏览以及部门信息的添加,删除。
职工信息模块:
可查看职工信息和工资信息,对管理人员来说,可对职工信息进行更新,对职工来说查询自己的信息或是知道姓名和密码的其他职工的信息。
工资信息管理模块:
只对管理员有用,进行新工资的添加和旧工资删除,对信息进行及时的更新。
浏览员工信息模块:
只对管理员有用,浏览所有的职工的信息,工资的信息。
2.2.5程序结果
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"/*动态地址分配函数*/
/****变量定义*******/
typedefstructz1/*定义数据结构*/
{
charno[11];/*编号*/
charname[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:
init();break;/*初始化*/case1:
create();break;/*输入数据创建双链表*/case2:
list();break;/*显示所有数据*/case3:
display();break;/*单条显示*/case4:
calc();break;/*计算实发工资*/case5:
search();break;/*查找职工信息数据*/case6:
delete();break;/*删除记录*/case7:
insert();break;/*插入记录*/case8:
append();break;/*追加记录*/case9:
save();break;/*保存文件*/case10:
load();break;/*读取文件*/case11:
copy();break;/*复制文件*/case12:
sort();break;/*按实发工资升序排序*/case13:
computer();break;/*计算所需票面数*/case14:
index();break;/*按职工号索引*/case15:
total();break;/*按部门求合计*/case16:
exit(0);/*退出*/
}
}
}
/*菜单函数,函数返回值为整型,代表所选的菜单项*/
menu_select()
{
char*f[]={/*定义菜单字符串数组*/
"**************MENU*************",/*菜单的标题行*/
"0.initlist",/*初始化双链表*/
"1.Enterlist",/*输入数据,创建双链表*/
"2.Listall\n",/*显示所有记录*/
"3.Displayrecordbystep",/*显示单条记录*/
"4.Calcthesalary",/*计算实发工资*/
"5.Searchrecordonname",/*查找记录*/
"6.Deletearecord",/*删除记录*/
"7.Insertrecordtolist",/*插入记录*/
"8.Appendrecordtofile",/*追加记录*/
"9.Savedatatothefile",/*保存文件*/
"10.Loaddatafromthefile",/*读取文件*/
"11.Copythefiletonewfile",/*复制文件*/
"12.Sortonsfgz",/*排序*/
"13.Computerticketnumber",/*计算所需票面数*/
"14.Indexonnumber",/*索引*/
"15.Totalonnumber",/*分类合计*/
"16.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<18;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)/*所压键不是回车键时*/
/*输入数据,创建双链表*/
voidcreate()
{
intx;/*记录行坐标*/
inti;/*记录输入记录数*/
intflag=0;/*做结束标记*/
floattemp;/*定义临时变量*/
SALARY*info,*p;/*定义临时变量*/
if(First!
=NULL)
init();/*如果头指针为空,调用初始化函数*/
p=First;/*从头指针开始*/
for(;;)
gotoxy(1,8+x);
}
printf("|----------|----------------|--------|");/*输出结尾水平线*/
}
/*字符串输入和验证函数*/
inputs(char*s,intcount)
{
charp[255];
do{
scanf("%s",p);/*输入字符串*/
if(strlen(p)>count)printf("\ntoolong!
\n");/*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p);/*将输入的字符串拷贝到字符串s中*/
}
/*单条显示记录*/
voiddisplay()
{
intch;/*菜单选项字符*/
SALARY*p;/*定义临时指针*/
clrscr();/*清屏*/
p=First;/*从头指针开始*/
if(p==NULL)/*指针为空,即链表为空,返回主函数*/
}
/*输出指针所指结点信息*/
voidprint(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");
/*根据应发工资,计算税率*/
floatfax(floatx)
{
floatf1;
if(x<1000)
return0;/*小于1000,返回0*/
switch((int)(x/1000))
{
case1:
f1=0.05;break;/*1000~1999,返回0.05*/
case2:
f1=0.1;break;/*2000~2999,返回0.1*/
case3:
f1=0.15;break;/*3000~3999,返回0.15*/
case4:
f1=0.2;break;/*4000~4999,返回0.2*/
/*保存文件*/
voidsave()
{
FILE*fp;/*定义指向文件的指针*/
SALARY*p;/*定义移动指针*/
charoutfile[10];/*保存输出文件名*/
clrscr();/*清屏*/
printf("Enteroutfilename,forexamplec:
\\f1\\te.txt:
\n");/*提示输入文件名格式信息*/
scanf("%s",outfile);
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",&temp);/*输入基本工资*/
info->jbgz=temp;
info->koukuan=0;/*扣款为0*/
info->yfgz=0;/*应发工资为0*/
info->shuijin=0;/*税金为0*/
info->sfgz=0;/*实发工资为0*/
printf("|----------|----------------|--------|");
printf("\n\n\nEnterinfilename,forexamplec:
\\f1\\te.txt:
\n");/*提示输入文件名*/
scanf("%s",infile);
if((fp=fopen(infile,"ab"))==NULL)/*打开文件*/
/*文件复制*/
voidcopy()
printf("Enteroutfilename,forexamplec:
\\f1\\te.txt:
\n");/*提示输入目标文件名*/
scanf("%s",outfile);/*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL)/*二进制写方式打开目标文件*/
{
printf("cannotopenoutputfile\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("youhavesuccesscopyfile!
!
!
\n");/*显示成功拷贝*/
}
/*排序*/
voidsort()
{
SALARY*p0,*p00,*p1,*p11,*p2;/*定义临时指针*/
inti=1;/*统计当前排第几个结点*/
clrscr();/*清屏*/
printf("\n\nstartsort....\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;/*指针后移*/
}
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("sortsucess!
!
!
\n");/*输出排序成功*/
}
/*索引*/
voidindex()
{
SALARY*p,*q,*t,*h1;/*定义临时指针*/
clrscr();/*清屏*/
printf("\n\nstartindex.....\n\n");/*显示开始索引*/
h1=First->next;/*将原表的头指针所指的下一个结点作头指针*/
First->next=NULL;/*第一个结点为新表的头结点*/
Last=First;/*尾指针等于头指针*/
while(h1!
=NULL)/*当原表不为空时,进行排序*/q=p;/*待排序点值大,应往后插,所以新表指针后移*/p=p->next;
}
if(p==q)/*p==q,说明待排序点值小,应排在首位*/
{
memcpy(sno,p->no,6);/*从编号中取出部门号*/
sno[6]='\0';/*做字符串结束标记*/
q=p->next;/*将指针指向待比较的记录*/
s1=p->sfgz;/*当前部门的实发工资初值作为该部门合计值的初值*/
whil