职工工资管理系统课程设计报告

更新时间:2023-08-25 03:34:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

目 录

一、需求分析·········································2 二、概要设计·········································2 三、详细设计·········································5 四、调试分析·········································18 五、用户手册·········································19 六、测试数据·········································19 七、附录·············································23

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

一、 需求分析

职工工资管理系统 功能设计要求 (1)输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。 该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。

(2)显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。

(3)修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。

(4)查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。

(5)删除记录:可删除数据文件中的任一记录。 (6) 统计: (A)计算各项工资平均工资及总工资, (B) 统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元) 以内的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资( 包括各项总的平均工资)。 (7)保存数据文件功能。 例如:职工工资信息表

ID号 姓名 基本工资 职务工资 津贴 医疗保险- 公积金- 总工资 01 张望 1286 794 198 109 135 2034 02 李明 1185 628 135 94 114 1740 03 王小民 895 438 98 64 73 1294 04 张效章 1350 868 210 116 150 2162 05 彭山 745 398 84 61 68 1098

各项平均工资 1092.2 625.2 145 88.8 108 (要求:1.源文件采用多文件的工程结构2.数据存储采用文件形式3.标准的C输入输出4.功能完善,适当的注释,5.关于文件的内容需要自学)

二、概要设计

1、程序总体功能框架:

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

2、一些数据结构的介绍:

struct worker 定义职工的结构体 {

int num; 职工工号 char name[20]; 职工姓名

int jibengongzi; 职工的基本工资 int zhiwugongzi; 职工的职务工资 int jintie; 职工的津贴

int yiliaobaoxian; 职工的医疗保险 int gongjijin; 职工的公积金 int qiansan; 职工前三项工资(基本工资、职务工资、津贴)之和 int sum; 职工的总工资

}worker[100]; 建立最多为100,、名为worker的结构体

3、定义主要的函数:

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

void menu(); void Input(); void Modify(); void Search(); void Add(); void Delete(); void Show(); void Exit();

4、几个主要函数介绍:

○1清屏函数:system("cls"); 将前面操作的屏幕清楚,但不会清除数据 ○2菜单函数:menu(); 显示主菜单,便于选择 3输入函数:Input(); 用于输入数据 ○ ○4修改函数:Modify(); 用于修改数据 ○5查找函数:Search(); 用于查找信息 ○6添加函数:Add(); 用于增加信息 7删除函数:Delete(); 用于删除信息 ○

8显示函数:Show(); 用于显示信息 ○

9退出函数:Exit(); 用于退出该系统 ○

10选择函数:select(); 用于选择显示信息或返回到菜单 ○

11保存信息的函数:save(): 用于保存信息 ○

12保存人数的函数:P(); 用于保存已保存数据的人数 ○

5、本程序模块结构

⑴ 主函数模块 int main()

{

system("cls"); menu();

}

执行主函数后,执行菜单函数。 ⑵菜单函数模块 void menu() {

int n;

system("cls"); printf("\n\n\n");

printf("\t\t***********************************************\n"); printf("\t\t** **\n"); printf("\t\t** If you were the first to enter the system **\n");

printf("\t\t** please select Input! **\n");

printf("\t\t** **\n"); printf("\t\t** 1-------Input **\n"); printf("\t\t** 2-------Modify **\n");

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

printf("\t\t** 3-------Search **\n"); printf("\t\t** 4-------Add **\n"); printf("\t\t** 5-------Delete **\n"); printf("\t\t** 6-------Show **\n"); printf("\t\t** 7-------Exit **\n"); printf("\t\t** **\n"); printf("\t\t***********************************************\n");

printf("\t\t\n"); printf("\n\n");

printf("\t\tInput your choose(1-7):"); scanf("%d",&n); if(n>=1&&n<=7) {

switch(n) {

case 1:Input();break; case 2:Modify();break; case 3:Search();break; case 4:Add();break; case 5:Delete();break; case 6:Show();break; case 7:Exit();break; } } else

menu(); }

菜单函数中包括输入函数、修改函数、查找函数、添加函数、删除函数、显示函数、退出函数。根据菜单中各个函数代表的数字选择相应的数字进行操作。

三、详细设计

#include "stdio.h"

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

#include "string.h"

struct worker //定义结构体 {

int num;

char name[20]; int jibengongzi; int zhiwugongzi; int jintie;

int yiliaobaoxian; int gongjijin; int qiansan; int sum; } worker[100];

void menu(); //定义几个主要的函数 void Input(); void Modify(); void Search(); void Add(); void Delete(); void Show();

void Exit();

int main() //主函数 {

system("cls"); menu();

}

void menu() //菜单函数 {

int n;

system("cls"); //清屏

printf("\n\n\n"); //菜单界面

printf("\t\t***********************************************\n"); printf("\t\t** **\n"); printf("\t\t** If you were the first to enter the system **\n"); printf("\t\t** please select Input! **\n"); printf("\t\t** **\n"); printf("\t\t** 1-------Input **\n"); printf("\t\t** 2-------Modify **\n"); printf("\t\t** 3-------Search **\n"); printf("\t\t** 4-------Add **\n"); printf("\t\t** 5-------Delete **\n");

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

printf("\t\t** 6-------Show **\n"); printf("\t\t** 7-------Exit **\n"); printf("\t\t** **\n"); printf("\t\t***********************************************\n");

printf("\t\t\n");

printf("\n\n");

printf("\t\tInput your choose(1-7):"); //选择需要进行的功能,选择1-7之间的数 scanf("%d",&n); if(n>=1&&n<=7)

{

switch(n) //根据选择不同的数,实现不同的功能 {

case 1:Input();break; case 2:Modify();break; case 3:Search();break; case 4:Add();break; case 5:Delete();break; case 6:Show();break; case 7:Exit();break; }

} else

menu(); //如果选择的数不在1至7之间,返回菜单重新输入 }

void Input() //输入函数

{

int i,p; clrscr();

printf("\n\nHow many people?(0-100):"); //输入需要输入信息的职工人数 scanf("%d",&p);

if(p>=0&&p<=100) //输入职工的信息 {

printf("\n\n");

printf("Please input data:\n"); printf("\n"); f1();

for(i=0;i<p;i++) {

input(i);

worker[i].sum=worker[i].jibengongzi+worker[i].zhiwugongzi

+worker[i].jintie-worker[i].yiliaobaoxian-worker[i].gongjijin; //计算职工的总工资

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

worker[i].qiansan=worker[i].jibengongzi+worker[i].zhiwugongzi+worker[i].jintie; //职工前三项工资(基本工资、职务工资、津贴)之和 } }

else

Input(); //如果输入的职工人数超过100,返回输入函数重新输入 save(p); //保存输入的职工信息

select(); //选择显示信息或返回到菜单 }

void Modify() //修改函数

{

int i,j=-1,d,k,t,n;char m[20];

FILE *fp; //定义一个文件指针 system("cls"); //清屏

n=P();

printf("\n\n");

printf("Choose the way you want to modify:\n"); //选择通过何种方式修改信息 printf("\n\n"); //选择方式的界面

printf("\t\t****************************************\n");

printf("\t\t* *\n"); printf("\t\t* 1.By name to modify *\n"); printf("\t\t* *\n"); printf("\t\t* 2.By number to modify *\n");

printf("\t\t* *\n"); printf("\t\t****************************************\n"); printf("\ninput your selection:"); scanf("%d",&d); if(d!=1&&d!=2)

{

printf("\ninput error! Press any key to continue."); getchar();

Modify(); //选择的数字错误,返回修改函数重新选择 }

else if(d==1) {

do {

printf("\nPlease input the name:"); //输入需要修改职工的姓名 scanf("%s",m);

for(i=0;i<n;i++)

if(strcmp(m,worker[i].name)==0) j=i;

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

if(j==-1)

printf("\nNot find!Please input again!\n"); //没有找到该职工,重新输入 }

while(j==-1); } else {

do {

printf("\nPlease input the num:"); //输入需要修改职工的工号 scanf("%d",&k); for(i=0;i<n;i++) if(k==worker[i].num) j=i;

if(j==-1)

printf("\nNot find!Please again!\n"); //没有找到该职工,重新输入 }

while(j==-1); }

printf("\nWhat do you want to modify?\n\n"); //需要修改信息的界面 printf("\t\t**************************************\n");

printf("\t\t* *\n"); printf("\t\t* http://www.77cn.com.cn 2.number *\n"); printf("\t\t* *\n"); printf("\t\t* 3.jibengongzi 4.zhiwugongzi *\n");

printf("\t\t* *\n"); printf("\t\t* 5.jintie 6.yiliaobaoxian *\n"); printf("\t\t* *\n"); printf("\t\t* 7.gongjijin *\n"); printf("\t\t* *\n"); printf("\t\t**************************************\n");

printf("\nPlease input your selection:"); //选择需要修改的信息 scanf("%d",&t);

switch(t) //通过选择的数字,实现修改该信息 {

case 1:printf("\nbefore modify:%s",worker[j].name); printf("\nchange to:"); scanf("%s",worker[j].name);

printf("\nafter modify:%s",worker[j].name);break; case 2:printf("\nbefore modify:%d",worker[j].num); printf("\nchange to:");

scanf("%d",&worker[j].num);

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

printf("\nafter modify:%d",worker[j].num);break; case 3:printf("\nbefore modify:%d",worker[j].jibengongzi); printf("\nchange to:");

scanf("%d",&worker[j].jibengongzi);

printf("\nafter modify:%d",worker[j].jibengongzi);break; case 4:printf("\nbefore modify:%d",worker[j].zhiwugongzi); printf("\nchange to:");

scanf("%d",&worker[j].zhiwugongzi);

printf("\nafter modify:%d",worker[j].zhiwugongzi);break; case 5:printf("\nbefore modify:%d",worker[j].jintie); printf("\nchange to:");

scanf("%d",&worker[j].jintie);

printf("\nafter modify:%d",worker[j].jintie);break; case 6:printf("\nbefore modify:%d",worker[j].yiliaobaoxian); printf("\nchange to:");

scanf("%d",&worker[j].yiliaobaoxian);

printf("\nafter modify:%d",worker[j].yiliaobaoxian);break; case 7:printf("\nbefore modify:%d",worker[j].gongjijin); printf("\nchange to:");

scanf("%d",&worker[j].gongjijin);

printf("\nafter modify:%d",worker[j].gongjijin);break; default:printf("Error!choice again!!\n");break; }

getchar(); printf("\n");

f2();

worker[j].sum=worker[j].jibengongzi+worker[j].zhiwugongzi+worker[j].jintie -worker[j].yiliaobaoxian-worker[j].gongjijin; //职工的总工资 output(j);

printf("\nSave it?\n\n1.Yes 2.No\n"); //询问是否保存修改后的信息 scanf("%d",&i); if(i==1)

save(n); //保存修改后的信息

printf("\nPress any key to back!"); //返回到菜单 getchar(); menu(); }

void Search() //查找函数 {

int i,j=-1,k,d,n;char m[20];

n=P();

system("cls"); //清屏

printf("Choose the way you want to search:\n"); //选择通过何种方式查找信息

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

printf("\n\n"); //选择方式的界面

printf("\t\t****************************************\n"); printf("\t\t* *\n"); printf("\t\t* 1.By name to search *\n"); printf("\t\t* *\n");

printf("\t\t* 2.By number to search *\n"); printf("\t\t* *\n"); printf("\t\t****************************************\n"); printf("\n\n");

printf("Please input your selection:"); //选择查找的方式 scanf("%d",&d); if(d==2) {

do

{

printf("\nPlease input the number:"); //输入需要查找的职工工号 scanf("%d",&k); for(i=0;i<n;i++) {

if(k==worker[i].num) j=i;

}

if(j==-1)

printf("Not find!Please input again!\n"); //没有找到该职工,重新输入 }

while(j==-1); printf("\n");

f2();

output(j); //输出信息 }

else if(d==1) {

do {

printf("\nPlease input the name:"); //输入需要查找的职工姓名 scanf("%s",m); for(i=0;i<n;i++)

if(strcmp(m,worker[i].name)==0) j=i;

if(j==-1)

printf("Not find!Please input again!\n"); //没有找到该职工,重新输入 }

while(j==-1); printf("\n");

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

f2();

output(j); //输出信息

}

if(d!=1&&d!=2) {

printf("\nInput error! Press any key to continue."); //输入错误,按enter键继续 getchar();

Search(); //返回到查找函数 }

select(); //选择显示信息或返回到菜单 }

void Add() //添加函数 {

int i,k,m,n;

FILE *fp; //定义一个文件指针 system("cls"); //清屏

n=P();

printf("\n\nHow many people do you want to add:"); //输入需要添加的职工人数 scanf("%d",&m); k=m+n;

if(k<=100) {

printf("\n\nPlease input their information:\n\n"); //输入添加的职工信息 f1();

for(i=n;i<k;i++) {

input(i);

worker[i].sum=worker[i].jibengongzi+worker[i].zhiwugongzi+worker[i].jintie -worker[i].yiliaobaoxian-worker[i].gongjijin; //职工的总工资

}

if((fp=fopen("D:\\zggz.txt","ab"))==NULL) //如果文件为空,则不能打开文件 {

printf("\nCan not open file.\n"); //不能打开文件 getchar();

menu(); //返回到菜单

}

for(i=n;i<k;i++)

if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1) //判断是否写入了数 printf("file write error.\n"); //文件写入错误

fclose(fp); //关闭文件

select(); //选择显示信息或返回到菜单 }

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

Add(); //返回到添加函数 }

void Delete() //删除函数 {

int i,j=-1,d,k,t,n;char m[20];

FILE *fp; //定义一个文件指针 system("cls"); //清屏

n=P();

fp=fopen("D:\\zggz.txt","rb"); //打开只读文件

printf("\n\n");

printf("Choose the way you want to delete:\n"); //选择通过何种方式删除信息 printf("\n\n"); //删除函数的界面

printf("\t\t****************************************\n"); printf("\t\t* *\n"); printf("\t\t* 1.By name to delete *\n"); printf("\t\t* *\n"); printf("\t\t* 2.By number to delete *\n"); printf("\t\t* *\n"); printf("\t\t****************************************\n"); printf("\ninput your selection:"); //选择删除的方式

scanf("%d",&d); if(d!=1&&d!=2) {

printf("\ninput error! Press any key to continue."); //输入错误,按enter键继续 getchar();

Delete(); //返回到删除函数 }

else if(d==1) { do

{

printf("\nPlease input the name:"); //输入需要删除的职工姓名 scanf("%s",m); for(i=0;i<n;i++)

if(strcmp(m,worker[i].name)==0)

j=i; if(j==-1)

printf("\nNot find!Please again!\n"); //没有找到该职工,重新输入 }

while(j==-1); } else

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

do {

printf("\nPlease input the num:"); //输入需要删除的职工工号 scanf("%d",&k); for(i=0;i<n;i++) if(k==worker[i].num)

j=i; if(j==-1)

printf("\nNot find!Please again!\n"); //没有找到该职工,重新输入 }

while(j==-1); }

printf("\n");

f2();

for(i=j;i<n-1;i++)

worker[i]=worker[i+1]; //删除信息后,将后面的职工信息按原来的顺序补充 for(i=0;i<n-1;i++) output(i);

printf("Save it?\n\n1.Yes 2.No\n"); //询问是否保存删除后的职工信息 scanf("%d",&i);

if(i==1)

save(n-1); //保存删除后的职工信息

printf("\nPress any key to back!"); //按enter键继续 getchar();

menu(); //返回到菜单 }

void Show() //显示函数 {

int i,p,a=0,b=0,c=0,j=0,k=0,l=0,m=0,n=0; p=P();

system("cls"); //清屏 f2();

for(i=0;i<p;i++) output(i);

printf("\nnaverage salary:\n");

for(i=0;i<p;i++) //各项工资的总和 {

j+=worker[i].jibengongzi; k+=worker[i].zhiwugongzi; l+=worker[i].jintie;

m+=worker[i].yiliaobaoxian; n+=worker[i].gongjijin;

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

printf("%13d %11d %12d %7d %15d",j/p,k/p,l/p,m/p,n/p); printf("\n(qian san xiang)renshu baifenbi\n");

for(i=0;i<p;i++) //统计前三项工资在各个范围内的人数 {

if(worker[i].qiansan>3000) a++;

else if(worker[i].qiansan>=2000 && worker[i].qiansan<=3000) b++;

else if(worker[i].qiansan>=1000 && worker[i].qiansan<=2000) c++;

}

//显示前三项工资在各个范围内的人数及所占人数的百分比

printf(" over 3000:%-7d%6d%%\n",a,(a*100/p)); printf(" 2000~3000:%-7d%6d%%\n",b,(b*100/p)); printf(" 1000~2000:%-7d%6d%%\n",c,(c*100/p)); }

void Exit() //退出函数

{

int i,p,a=0,b=0,c=0,j=0,k=0,l=0,m=0,n=0; p=P();

system("cls"); //清屏 f2();

for(i=0;i<p;i++) output(i);

printf("\nnaverage salary:\n");

for(i=0;i<p;i++) //各项工资的总和 {

j+=worker[i].jibengongzi; k+=worker[i].zhiwugongzi; l+=worker[i].jintie; m+=worker[i].yiliaobaoxian; n+=worker[i].gongjijin; }

printf("%13d %11d %12d %7d %15d",j/p,k/p,l/p,m/p,n/p); printf("\n(qian san xiang)renshu baifenbi\n");

for(i=0;i<p;i++) //统计前三项工资在各个范围内的人数 {

if(worker[i].qiansan>3000)

printf("\n");

printf("Press any key to back."); getchar();

menu(); //返回到菜单

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

a++;

else if(worker[i].qiansan>=2000 && worker[i].qiansan<=3000) b++;

else if(worker[i].qiansan>=1000 && worker[i].qiansan<=2000) c++;

}

//显示前三项工资在各个范围内的人数及所占人数的百分比 printf(" over 3000:%-7d%6d%%\n",a,(a*100/p)); printf(" 2000~3000:%-7d%6d%%\n",b,(b*100/p)); printf(" 1000~2000:%-7d%6d%%\n",c,(c*100/p)); printf("\n"); getchar();

system("cls"); //清屏

printf("\n\n\n\n\n\n\n\n"); //退出系统的界面

printf("\t***********************************************************\n"); printf("\t ** **\n"); printf("\t ** Thank you for the use of staff wage management system! **\n"); printf("\t ** **\n"); printf("\t ** **\n"); printf("\t ** Good-bye! **\n"); printf("\t ** **\n"); printf("\t***********************************************************\n"); printf("\t\t\n\n"); getchar(); } f1()

{

printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin\n\n"); } f2() {

printf("num name jibengongzi zhiwugongzi jintie yiliaobaoxian gongjijin sum\n\n"); }

input(int i) //将输入的信息保存到结构体中 {

scanf("%d %s %d %d %d %d %d",&worker[i].num,worker[i].name,

&worker[i].jibengongzi,&worker[i].zhiwugongzi,&worker[i].jintie, &worker[i].yiliaobaoxian,&worker[i].gongjijin);

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

}

output(int i) //输出信息

{

printf("%-3d%-5s %-12d %-12d %-8d %-14d %-10d %-7d\n\n",worker[i].num, worker[i].name,worker[i].jibengongzi,worker[i].zhiwugongzi,

worker[i].jintie,worker[i].yiliaobaoxian,worker[i].gongjijin,worker[i].sum); }

select() //选择函数 {

int i;

printf("\n\n");

printf("\t\t\t* Successful! *\n");

printf("\n\n");

printf("What do you want to do now?\n\n1.Show all data 2.Back\n"); //选择显示信息或返回

scanf("%d",&i); if(i==1)

Show(); //返回到显示函数 else if(i==2)

menu(); //返回到菜单 }

save(int n) //向文件中输入数据 {

FILE *fp; //定义一个文件指针

int i;

if((fp=fopen("D:\\zggz.txt","wb"))==NULL) //判断打开的写入文件是否为空 {

printf("\nCan not open file.\n"); return NULL; }

for(i=0;i<n;i++)

if(worker[i].num!=0)

if(fwrite(&worker[i],sizeof(struct worker),1,fp)!=1) //判断是否写入了数 printf("file write error!\n"); //写入文件错误 fclose(fp); //关闭文件 } P()

{

FILE *fp; //定义一个文件指针 int i;

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

if((fp=fopen("D:\\zggz.txt","rb"))==NULL) //判断打开的只读文件是否为空 {

printf("\nCan not open file.\n"); return NULL; }

for(i=0;!feof(fp);i++)

fread(&worker[i],sizeof(struct worker),1,fp); //读取文件 fclose(fp); //关闭文件 return (i-1); }

四、调试分析

1、使用getchar()可以使字符一个个地存入缓冲区。

2、在删除、修改、添加函数中save(保存)函数,可以有针对性地保存需要保

存的文件。

3、使用input(输入)和output(输出)的子函数,可以避免多次写入信息

的麻烦。

4、P()函数在保存删除、修改后的人数中有很大的作用,在以后的调用保

存的人数中起到了很大的作用

5、用数字代替需要选择的选项,避免了输入字符的麻烦。

6、该程序使用的是结构体,没有用到链表,所以在删除数据后需要将后面

的数据放到前面,故将第n+1个职工的信息赋给第n个职工。

职工工资管理系统课程设计报告(c语言),很全的课设报告。。

五、用户手册

1、在进入系统后显示菜单。有输入函数、修改函数、查找函数、添加函数、

删除函数、显示函数、退出函数可供选择。用户可以依次用1至7,七个数字选择需要进行的操作(说明:如果用户第一次进入该系统,或以前进入系统没有保存数据,需要选择1即选择输入函数输入数据)。

2、在删除、修改、添加信息完成后会询问用户是否保存当前的信息,用户

可根据自己的需要选择是否保存信息。

3、在几个函数最后会询问用户显示当前的信息或是返回到菜单,用户可以

自己的需要选择。

4、用户在选择时需注意各个数字代表的字符。

5、用户在输入职工的人数后点击enter键,如果依然停在当前页面,需注

意所输入的总职工人数是否超过了总人数N(该程序中N定义为100)。

6、注:职工工号为整型,不是字符型。

六、测试数据

菜单界面:

本文来源:https://www.bwwdw.com/article/v3li.html

Top