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

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

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

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

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

浏览功能要求能够按照工资卡号、姓名分类浏览;

有排序功能,排序后按照工资卡号升序或实发工资降序输出;

查询功能要求能够按照工资卡号、姓名查询。

【提示】

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%;

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.新增模块

3.浏览模块

4.排序模块

Y

12

5.查询模块

12

6.程序代码

(每个函数都要有功能说明)

#include<

stdio.h>

string.h>

conio.h>

stdlib.h>

#defineN50

voidmain()

voidmenu();

menu();

}

voidmenu()//主菜单函数

voidenter();

voidadd();

voidbrowse();

voidsearch();

voidorder();

intn,w1;

do

{

puts("

\t\t*********************MENU*************************\n\n"

);

\t\t\t1.Enter"

\t\t\t2.Add"

\t\t\t3.browseall"

\t\t\t4.Search"

\t\t\t5.Order"

\t\t\t6.Exit"

\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();

/*新增模块*/

case3:

browse();

/*浏览模块*/

case4:

search();

/*查找模块*/

case5:

order();

/*排序模块*/

case6:

exit(0);

/*退出模块*/

structlist//结构体定义工资信息

intnum;

//姓名

//电费

floatfax;

//税金

voidenter()//输入模块函数

voidprintf_back();

voidsave(intn);

voidinput(inti);

inti,n;

howmanyworkers(1-%d)?

:

"

N-1);

//输入职工数目

\nenterdatenow\n\n"

for(i=0;

i<

n;

i++)//输入职工各项信息

\ninput%dthstudentrecord.\n"

i+1);

input(i);

//调用职工信息输入函数

if(i!

=0)save(n);

//储存职工信息

printf_back();

//执行返回函数

voidadd()//新增模块函数

{

inti,n,m,k;

intload();

FILE*fp;

//定义文件指针变量

n=load();

//导出文件信息,得到返回值

howmanyworkersareyouwanttoadd(0-%d)?

N-1-n);

m);

//输入新增职工数目

k=m+n;

//总职工数=新增职工数+已有职工数

for(i=n+1;

=k;

i++)//输入新增职工信息

\ninput%dthworkersrecord.\n"

i-n+2);

//调用职工信息输入函数

fp=fopen("

workers.txt"

"

ab"

//以追加形式打开文件

i++)

fwrite(&

list[i],sizeof(structlist),1,fp);

//将内存中的职工信息输出到磁盘文件中

save(n);

//储存输入信息

fclose(fp);

//关闭文件

voidbrowse()//浏览模块函数

voidprintf_one(inti);

voidprintf_face();

printf_face();

if((i!

=0)&

(i%10==0))//以10个职工为一组输出

{printf("

\n\npassanykeytocontinue..."

getch();

\n\n"

printf_one(i);

//输出各职工信息

printf("

\n"

\tthereare%drecode.\n"

n);

\npassanykeytoback.."

//返回主菜单

voidsearch()//查询模块函数

{

\t\t\t1.searchbyname"

//按姓名查询

\t\t\t2.searchbynum"

//按工资卡号查询

if(n<

2)

voidsearch_1();

voidsearch_2();

search_1();

search_2();

voidsearch_1()//按姓名查询

inti,n,k,w1=1,w2,w3,w4;

structlists;

k=-1;

\n\nenternamethatyouwanttosearch!

name:

%s"

s.name);

//输入要查找的姓名

//输出职工信息项目

if(strcmp(s.name,list[i].name)==0)//查询出与输入姓名相同的职工的信息

k=i;

printf_one(k);

//输出查询结果并中断,说明只能输出查到的第一个数据

if(k==-1)//如果没有查出信息则执行如下选择菜单

\n\nNO.exit!

please"

\n\nareyouagain?

\n\t1).again2).NOandback[]\b\b"

w1);

if(w1==2)break;

while(k==-1&

w1==1);

//选择1继续循环执行查询

w4=0;

w3=0;

if(k!

=-1)

successful"

\n\nwhatdoyouwanttodo?

\n\t1).searchanother2).back[]\b\b"

//选择查找下一个数据或返回

w2);

while(w2==1);

//选择1循环执行查询下一个数据

voidsearch_2()//按工资卡号查询

\n\nenternumthatyouwanttosearch!

num:

s.num);

//输入要查找的工资卡号

//输出职工信息项目

if(s.num==list[i].num)//查询出与输入工资卡号相同的职工的信息

printf_one(k);

if(k==-1)//如果没有查出信息则执行如下选择菜单

//选择1继续循环执行查询

w4=0;

while(w2==1);

//选择1循环执行查询下一个数据

voidorder()//排序功能模块函数

{intw1,n;

voidorder_1();

voidorder_2();

\t\t\t1.orderbynum"

//按工资卡号排序

\t\t\t2.orderbysalary2"

//按实发工资排序

order_1();

order_2();

voidorder_1()//按工资卡号升序排序

voidsave(inti);

inti,j,n;

voidbrowse();

structlists;

n-1;

i++)//冒泡排序法,按职工工资卡号升序排列出职工信息

{for(j=i+1;

j<

j++)

{if(list[j].num<

list[i].num)

s=list[j];

list[j]=list[i];

list[i]=s;

save(n);

//储存排序后的信息

browse();

//显示排序后的信息

voidorder_2()//按实发工资升序排序

i++)//冒泡排序法,按实发工资升序排列出职工信息

{if(list[i].salary2<

list[j].salary2)

list[j]=list[i];

list[i]=s;

voidsave(intn)//储存函数

inti;

wb"

//以只写方式打开文件

}

intload()//导出文件信息

rb"

//以只读方式打开文件

!

feof(fp);

fread(&

//读出磁盘文件中的职工信息

return(i-1);

//返回数值i-1

voidinput(inti)//职工信息输入函数

floatsalary2(inti);

floatfax(inti);

No.:

list[i].num);

name:

list[i].name);

month:

list[i].month);

salary1:

list[i].salary1);

water:

list[i].water);

electricity:

list[i].electri

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

当前位置:首页 > 教学研究 > 教学计划

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

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