C语言课程设计报告职工工资信息管理系统.docx
- 文档编号:9145720
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:31
- 大小:150.91KB
C语言课程设计报告职工工资信息管理系统.docx
《C语言课程设计报告职工工资信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告职工工资信息管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告职工工资信息管理系统
中国地质大学
本科生课程论文封面
课程名称C语言课程设计
教师姓名邵老师
本科生姓名杨梦欢
本科生学号***********
本科生专业应用化学
所在院系材化学院
类别:
C.本科生
日期:
2011年7月6日
课程设计评语
对课程论文的评语:
平时成绩:
课程论文成绩:
总成绩:
评阅人签名:
注:
1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
3.功能模块图....................................................................................................................................6
4.数据结构设计................................................................................................................................6
5.算法设计.........................................................................................................................................7
6.程序代码......................................................................................................................................10
7.程序运行结果..............................................................................................................................19
8.编程中遇到的困难及解决方法..................................................................................................22
9.总结心得及良好建议..................................................................................................................23
10.致谢............................................................................................................................................24
1.课程论文题目
职工工资信息管理系统
【要求】
该系统能够实现工资信息管理。
系统包括录入、新增、浏览、查询和排序等功能。
其中录入功能要求能够添加新的工资信息到文件;新增功能要求能够新增职工信息到文件;浏览功能要求能够按照工资卡号、姓名分类浏览;有排序功能,排序后按照工资卡号升序或实发工资降序输出;查询功能要求能够按照工资卡号、姓名查询。
【提示】
1、文件中一行数据对应一个职工工资信息
2、工资信息的数据结构采用结构体数组,一个数组元素对应一条工资单记录。
3、工资单信息包括工资卡号、姓名、月份、应发工资、税费、电费、税金、实发工资等
4、实发工资=应发工资—税费—电费—税金,其中税金计算方法为:
(1)应发工资<800元,税金=0
(2)800<应发工资<1400元,税金=(应发工资—800)*5%
(3)应发工资>1400元,税金=(应发工资—1400)*10%
2.程序设计思路
1、设计思路
(1)根据题目要求,应该把职工工资信息用结构体形式输入,在定义一个全局变量和文件指针进行整个程序的运行,然后把职工工资信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;
(2)在程序中需实现职工工资浏览、查询、统计等功能的操作,所以需要建立相应的功能模块来实现;
(3)另外还需要提供键盘式选择菜单实现功能,在运行时达到所要的目的。
2、总体设计
整个系统可以分为信息输入、信息新增、信息浏览、信息排序和信息查询五个主要模块。
3、详细设计
(1)工资信息采用结构体数组:
structlist
{
intnum;//工资卡号
charname[20];//姓名
intmonth;//月份
intsalary1;//应发工资
intwater;//水费
intelectrisity;//电费
floatfax;//税金
floatsalary2;//实发工资
}list[N];//list[N]中每个数组元素对应一个职工工资信息
(2)输入模块
按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息,税金和实发工资根据输入的信息进行计算得到,这些信息被录入到文件中。
文件操作函数:
fopen,fwrite,fclose.
税金的计算:
if(应发工资<=800)
税金=0;
elseif(应发工资>800&&应发工资<=1400)
税金=(应发工资-800)*5%;
elseif(应发工资>1400)
税金=(应发工资-1400)*10%;
实发工资=应发工资-水费-电费-税金。
(3)新增模块
增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式(以”ab”方式打开文件)。
(4)浏览模块
调用排序模块的排序功能,可以浏览排序后的所有职工信息。
(5)排序模块
排序模块提供菜单选择,实现按照工资卡号升序、实发工资升序排序。
排序方法可以选择冒泡排序、插入排序、选择排序等,本系统用的是冒泡排序。
(6)查询模块
实现按照工资卡号和姓名的查询,采用基本的查找方法即可。
3.功能模块图
4.数据结构设计
系统用将职工各项信息以结构体类型structlist来定义,它包括num,name[20],month,salary1,water,electricity,fax,salaly2等不同类型的数据项,同时定义了结构体数组,包括N个数组元素,对应N个职工,每一个元素用来存放一个职工的数据;每个职工的信息以结构体方式从内存和磁盘文件中进行存储和导出。
以结构体方式来整合职工的不同信息,将不同的数据组合成一个有机整体,非常方便程序的调用。
5.算法设计
1.主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。
N
Y
2.添加模块
1
2
2.新增模块
1
2
3.浏览模块
4.排序模块
N
Y
12
1
2
5.查询模块
N
Y
12
1
2
6.程序代码
(每个函数都要有功能说明)
#include
#include
#include
#include
#defineN50
voidmain()
{
voidmenu();
menu();
}
voidmenu()//主菜单函数
{
voidenter();
voidadd();
voidbrowse();
voidsearch();
voidorder();
intn,w1;
do
{
puts("\t\t*********************MENU*************************\n\n");
puts("\t\t\t1.Enter");
puts("\t\t\t2.Add");
puts("\t\t\t3.browseall");
puts("\t\t\t4.Search");
puts("\t\t\t5.Order");
puts("\t\t\t6.Exit");
puts("\n\n\t\t*************************************************\n");
printf("Choiceyournumber(1-6):
[]\b\b");
scanf("%d",&n);
if(n<1||n>6)/*对选择的数字进行判断*/
{
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(n)
{
case1:
enter();break;/*输入模块*/
case2:
add();break;/*新增模块*/
case3:
browse();break;/*浏览模块*/
case4:
search();break;/*查找模块*/
case5:
order();break;/*排序模块*/
case6:
exit(0);/*退出模块*/
}
}
structlist//结构体定义工资信息
{
intnum;//工资卡号
charname[20];//姓名
intmonth;//月份
intsalary1;//应发工资
intwater;//水费
intelectrisity;//电费
floatfax;//税金
floatsalary2;//实发工资
}list[N];//list[N]中每个数组元素对应一个职工工资信息
voidenter()//输入模块函数
{
voidprintf_back();
voidsave(intn);
voidinput(inti);
inti,n;
printf("howmanyworkers(1-%d)?
:
",N-1);
scanf("%d",&n);//输入职工数目
printf("\nenterdatenow\n\n");
for(i=0;i { printf("\ninput%dthstudentrecord.\n",i+1); input(i);//调用职工信息输入函数 } if(i! =0)save(n);//储存职工信息 printf_back();//执行返回函数 } voidadd()//新增模块函数 { voidprintf_back(); inti,n,m,k; intload(); voidsave(intn); voidinput(inti); FILE*fp;//定义文件指针变量 n=load();//导出文件信息,得到返回值 printf("howmanyworkersareyouwanttoadd(0-%d)? : ",N-1-n); scanf("%d",&m);//输入新增职工数目 k=m+n;//总职工数=新增职工数+已有职工数 for(i=n+1;i<=k;i++)//输入新增职工信息 { printf("\ninput%dthworkersrecord.\n",i-n+2); input(i);//调用职工信息输入函数 } fp=fopen("workers.txt","ab");//以追加形式打开文件 for(i=n+1;i<=k;i++) fwrite(&list[i],sizeof(structlist),1,fp);//将内存中的职工信息输出到磁盘文件中 save(n);//储存输入信息 fclose(fp);//关闭文件 printf_back();//执行返回函数 } voidbrowse()//浏览模块函数 { voidprintf_one(inti); voidprintf_face(); intload(); voidmenu(); inti,n; n=load(); printf_face(); for(i=0;i { if((i! =0)&&(i%10==0))//以10个职工为一组输出 {printf("\n\npassanykeytocontinue..."); getch(); puts("\n\n");} printf_one(i);//输出各职工信息 printf("\n"); } printf("\tthereare%drecode.\n",n); printf("\npassanykeytoback.."); getch(); menu();//返回主菜单 } voidsearch()//查询模块函数 { intn,w1; do { puts("\t\t\t1.searchbyname");//按姓名查询 puts("\t\t\t2.searchbynum");//按工资卡号查询 scanf("%d",&n); if(n<1||n>2) { w1=1; getchar(); } elsew1=0; } while(w1==1); switch(n) { voidsearch_1(); voidsearch_2(); case1: search_1();break; case2: search_2();break; } } voidsearch_1()//按姓名查询 { intload(); voidprintf_face(); voidmenu(); voidprintf_one(inti); inti,n,k,w1=1,w2,w3,w4; structlists; n=load();//导出文件信息,得到返回值 do { do { k=-1; printf("\n\nenternamethatyouwanttosearch! name: "); scanf("%s",s.name);//输入要查找的姓名 printf_face();//输出职工信息项目 for(i=0;i if(strcmp(s.name,list[i].name)==0)//查询出与输入姓名相同的职工的信息 { k=i; printf_one(k);break;//输出查询结果并中断,说明只能输出查到的第一个数据 } if(k==-1)//如果没有查出信息则执行如下选择菜单 { printf("\n\nNO.exit! please"); printf("\n\nareyouagain? \n\t1).again2).NOandback[]\b\b"); scanf("%d",&w1); if(w1==2)break; } } while(k==-1&&w1==1);//选择1继续循环执行查询 w4=0;w3=0; if(k! =-1) { printf("successful"); printf("\n\nwhatdoyouwanttodo? \n\t1).searchanother2).back[]\b\b");//选择查找下一个数据或返回 scanf("%d",&w2); } } while(w2==1);//选择1循环执行查询下一个数据 menu(); } voidsearch_2()//按工资卡号查询 { intload(); voidprintf_face(); voidmenu(); voidprintf_one(inti); structlists; inti,n,k,w1=1,w2,w3,w4; n=load(); do { do { k=-1; printf("\n\nenternumthatyouwanttosearch! num: "); scanf("%d",&s.num);//输入要查找的工资卡号 printf_face();//输出职工信息项目 for(i=0;i if(s.num==list[i].num)//查询出与输入工资卡号相同的职工的信息 { k=i; printf_one(k);break; } if(k==-1)//如果没有查出信息则执行如下选择菜单 { printf("\n\nNO.exit! please"); printf("\n\nareyouagain? \n\t1).again2).NOandback[]\b\b"); scanf("%d",&w1); if(w1==2)break; } } while(k==-1&&w1==1);//选择1继续循环执行查询 w4=0;w3=0; if(k! =-1) { printf("successful"); printf("\n\nwhatdoyouwanttodo? \n\t1).searchanother2).back[]\b\b"); scanf("%d",&w2); } } while(w2==1);//选择1循环执行查询下一个数据 menu(); } voidorder()//排序功能模块函数 {intw1,n; voidorder_1(); voidorder_2(); do { puts("\t\t\t1.orderbynum");//按工资卡号排序 puts("\t\t\t2.orderbysalary2");//按实发工资排序 scanf("%d",&n); if(n<1||n>2) { w1=1; getchar(); } elsew1=0; } while(w1==1); switch(n) { case1: order_1();break; case2: order_2();break; } } voidorder_1()//按工资卡号升序排序 { intload(); voidprintf_back(); voidsave(inti); inti,j,n; voidbrowse(); structlists; n=load(); for(i=0;i {for(j=i+1;j {if(list[j].num s=list[j]; list[j]=list[i]; list[i]=s; } } save(n);//储存排序后的信息 browse();//显示排序后的信息 puts("\n\n"); printf_back();//执行返回函数 } voidorder_2()//按实发工资升序排序 { intload(); voidprintf_back(); voidsave(inti); inti,j,n; structlists; voidbrowse(); n=load(); for(i=0;i {for(j=i+1;j {if(list[i].salary2 s=list[j];list[j]=list[i];list[i]=s; } } save(n);//储存排序后的信息 browse();//显示排序后的信息 puts("\n\n"); printf_back();//执行返回函数 } voidsave(intn)//储存函数 { FILE*fp; inti; fp=fopen("workers.txt","wb");//以只写方式打开文件 for(i=0;i fwrite(&list[i],sizeof(structlist),1,fp);//将内存中的职工信息输出到磁盘文件中 fclose(fp);//关闭文件 } intload()//导出文件信息 { FILE*fp; inti; fp=fopen("workers.txt","rb");//以只读方式打开文件 for(i=0;! feof(fp);i++) fread(&list[i],sizeof(structlist),1,fp);//读出磁盘文件中的职工信息 fclose(fp);//关闭文件 return(i-1);//返回数值i-1 } voidinput(inti)//职工信息输入函数 { floatsalary2(inti); floatfax(inti); printf("No.: "); scanf("%d",&list[i].num); printf("name: "); scanf("%s",list[i].name); printf("month: "); scanf("%d",&list[i].month); printf("salary1: "); scanf("%d",&list[i].salary1); printf("water: "); scanf("%d",&list[i].water); printf("electricity: "); scanf("%d",&list[i].electri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课程设计报告 职工工资信息管理系统 语言 课程设计 报告 职工工资 信息 管理 系统