C语言课程设计报告职工工资信息管理系统.docx

上传人:b****6 文档编号:5362899 上传时间:2022-12-15 格式:DOCX 页数:27 大小:150.97KB
下载 相关 举报
C语言课程设计报告职工工资信息管理系统.docx_第1页
第1页 / 共27页
C语言课程设计报告职工工资信息管理系统.docx_第2页
第2页 / 共27页
C语言课程设计报告职工工资信息管理系统.docx_第3页
第3页 / 共27页
C语言课程设计报告职工工资信息管理系统.docx_第4页
第4页 / 共27页
C语言课程设计报告职工工资信息管理系统.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告职工工资信息管理系统.docx

《C语言课程设计报告职工工资信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告职工工资信息管理系统.docx(27页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告职工工资信息管理系统.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1