职工管理系统
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 20
struct Earned
{
int basic;
int duty;
int allowance;
} ;
struct actual
{
int medical;
int fund;
int water;
} ;
struct staff
{
char no[ 20 ] ;
char name[ 20 ] ;
struct Earned income;
struct actual expend;
int EAENDINCOME;
int ACTUALINCOME;
} s[ M] ;
void input ( ) ;
void print ( ) ;
void menu ( ) ;
void OPEN ( ) ;
void menu2 ( ) ;
void refermenu ( ) ;
void referno ( ) ;
void refername ( ) ;
void referincome ( ) ;
void modify ( ) ;
void AddData ( ) ;
void Delete ( ) ;
void menu3 ( ) ;
void ordering ( ) ;
void orbasic ( ) ;
void oractual ( ) ;
void statistics ( ) ;
int i = 0 ;
char title[ 100 ] ;
int main ( )
{
input ( ) ;
OPEN ( ) ;
}
void menu ( )
{
printf ( "______________________________\n" ) ;
printf ( "| 主 目 录 |\n" ) ;
printf ( "|____________________________|\n" ) ;
printf ( "| 1.打印工资条 |\n" ) ;
printf ( "| 2.查询信息 |\n" ) ;
printf ( "| 3.修改信息 |\n" ) ;
printf ( "| 4.添加信息 |\n" ) ;
printf ( "| 5.删除信息 |\n" ) ;
printf ( "| 6.进行排序 |\n" ) ;
printf ( "| 7.统计信息 |\n" ) ;
printf ( "|____________________________|\n" ) ;
}
void OPEN ( )
{
int Q;
do
{
menu ( ) ;
printf ( "请输入你要执行的功能->" ) ;
scanf ( "%d" , & Q) ;
switch ( Q)
{
case 1 :
print ( ) ;
break ;
case 2 :
refermenu ( ) ;
break ;
case 3 :
modify ( ) ;
break ;
case 4 :
AddData ( ) ;
break ;
case 5 :
Delete ( ) ;
break ;
case 6 :
ordering ( ) ;
break ;
case 7 :
statistics ( ) ;
break ;
default :
printf ( "你输入的数字有误,请在1——7中选择!\n" ) ;
break ;
}
} while ( Q) ;
}
void menu2 ( )
{
printf ( "______________________________\n" ) ;
printf ( "| 查 询 页 面 |\n" ) ;
printf ( "|____________________________|\n" ) ;
printf ( "| 1.按职工号查询 |\n" ) ;
printf ( "| 2.按姓名查询 |\n" ) ;
printf ( "| 3.查询最低工资信息 |\n" ) ;
printf ( "| 0.返回上一级目录 |\n" ) ;
printf ( "|____________________________|\n" ) ;
}
void refermenu ( )
{
int Q;
do
{
menu2 ( ) ;
printf ( "请输入你要执行的功能->" ) ;
scanf ( "%d" , & Q) ;
switch ( Q)
{
case 1 :
referno ( ) ;
break ;
case 2 :
refername ( ) ;
break ;
case 3 :
referincome ( ) ;
break ;
case 0 :
OPEN ( ) ;
break ;
default :
printf ( "你输入的数字有误,请在0-2中选择!\n" ) ;
break ;
}
} while ( Q) ;
}
void menu3 ( )
{
printf ( "______________________________\n" ) ;
printf ( "| 查 询 页 面 |\n" ) ;
printf ( "|____________________________|\n" ) ;
printf ( "| 1.按基本工资排序 |\n" ) ;
printf ( "| 2.按实发工资排序 |\n" ) ;
printf ( "| 0.返回上一级目录 |\n" ) ;
printf ( "|____________________________|\n" ) ;
}
void ordering ( )
{
int Q;
do
{
menu3 ( ) ;
printf ( "请输入你要执行的功能->" ) ;
scanf ( "%d" , & Q) ;
switch ( Q)
{
case 1 :
orbasic ( ) ;
break ;
case 2 :
break ;
case 0 :
OPEN ( ) ;
break ;
default :
printf ( "你输入的数字有误,请在0-2中选择!\n" ) ;
break ;
}
} while ( Q) ;
}
void input ( )
{
FILE * fp;
fp= fopen ( "ZDH0121.txt" , "r" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fgets ( title, 100 , fp) ;
while ( ! feof ( fp) )
{
fscanf ( fp, "%s%s%d%d%d%d%d%d" , s[ i] . no, s[ i] . name,
& s[ i] . income. basic, & s[ i] . income. duty, & s[ i] . income. allowance,
& s[ i] . expend. medical, & s[ i] . expend. fund, & s[ i] . expend. water) ;
s[ i] . EAENDINCOME = s[ i] . income. basic + s[ i] . income. duty + s[ i] . income. allowance;
s[ i] . ACTUALINCOME = s[ i] . EAENDINCOME - ( s[ i] . expend. fund + s[ i] . expend. medical + s[ i] . expend. water) ;
i++ ;
}
fclose ( fp) ;
}
void print ( )
{
FILE * fp;
fp = fopen ( "工资条信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
int j = 0 ;
for ( j = 0 ; j < i; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "工资条信息已成功存放在 工资条信息.txt 文件中\n" ) ;
printf ( "工资条打印信息如下:\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water, s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
fclose ( fp) ;
}
void referno ( )
{
char nokey[ 100 ] ;
printf ( "请输入你要查询的职工号->" ) ;
scanf ( "%s" , nokey) ;
int j, flag = 0 ;
for ( j = 0 ; j < i; j++ )
{
if ( strcmp ( nokey, s[ j] . no) == 0 )
{
printf ( "已经查询到你要查找的信息->\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
flag = 1 ;
break ;
}
}
if ( flag == 0 )
{
printf ( "抱歉!你要查找的信息不存在!\n" ) ;
}
}
void refername ( )
{
char nokey[ 100 ] ;
printf ( "请输入你要查询的职工姓名->" ) ;
scanf ( "%s" , nokey) ;
int j, flag = 0 ;
for ( j = 0 ; j < i; j++ )
{
if ( strcmp ( nokey, s[ j] . name) == 0 )
{
printf ( "已经查询到你要查找的信息->\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
flag = 1 ;
break ;
}
}
if ( flag == 0 )
{
printf ( "抱歉!你要查找的信息不存在!\n" ) ;
}
}
void referincome ( )
{
int key;
printf ( "请输入你要查询最低实发工资->" ) ;
scanf ( "%d" , & key) ;
int j, flag = 0 ;
printf ( "已经查询到你要查找的信息->\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
if ( key <= s[ j] . ACTUALINCOME)
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
}
}
void modify ( )
{
char namekey[ 100 ] ;
printf ( "请输入你要修改的职工姓名->" ) ;
scanf ( "%s" , namekey) ;
int j, a, flag = 0 ;
for ( j = 0 ; j < i; j++ )
{
if ( strcmp ( namekey, s[ j] . name) == 0 )
{
printf ( "已经查到你要修改的信息!\n" ) ;
printf ( "确定修改请输入1\n" ) ;
printf ( "放弃修改请输入0\n" ) ;
scanf ( "%d" , & a) ;
if ( a== 1 )
{
printf ( "请输入你要修改的信息->\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费\n" ) ;
scanf ( "%s%s%d%d%d%d%d%d" , s[ j] . no, s[ j] . name,
& s[ j] . income. basic, & s[ j] . income. duty, & s[ j] . income. allowance,
& s[ j] . expend. medical, & s[ j] . expend. fund, & s[ j] . expend. water) ;
s[ j] . EAENDINCOME = s[ j] . income. basic + s[ j] . income. duty + s[ j] . income. allowance;
s[ j] . ACTUALINCOME = s[ j] . EAENDINCOME - ( s[ j] . expend. fund + s[ j] . expend. medical + s[ j] . expend. water) ;
flag = 1 ;
break ;
}
}
}
FILE * fp;
fp = fopen ( "修改后的工资信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "工资条信息已成功存放在 修改后的工资信息.txt 文件中\n" ) ;
printf ( "修改后的所有信息打印如下\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
if ( flag == 0 || a == 0 )
{
printf ( "抱歉!你要修改的信息不存在!\n" ) ;
}
fclose ( fp) ;
}
void AddData ( )
{
char namekey[ 100 ] ;
printf ( "请输入你要添加的职工信息->\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费\n" ) ;
scanf ( "%s%s%d%d%d%d%d%d" , s[ i] . no, s[ i] . name,
& s[ i] . income. basic, & s[ i] . income. duty, & s[ i] . income. allowance,
& s[ i] . expend. medical, & s[ i] . expend. fund, & s[ i] . expend. water) ;
s[ i] . EAENDINCOME = s[ i] . income. basic + s[ i] . income. duty + s[ i] . income. allowance;
s[ i] . ACTUALINCOME = s[ i] . EAENDINCOME - ( s[ i] . expend. fund + s[ i] . expend. medical + s[ i] . expend. water) ;
int j, a, flag = 0 ;
for ( j = 0 ; j < i+ 1 ; j++ )
{
if ( strcmp ( namekey, s[ j] . name) == 0 )
{
flag = 1 ;
break ;
}
}
if ( flag== 0 )
{
FILE * fp;
fp = fopen ( "添加后的工资信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i+ 1 ; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "工资条信息已成功存放在 添加后的工资信息.txt 文件中\n" ) ;
printf ( "添加后的所有信息打印如下\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i+ 1 ; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
fclose ( fp) ;
}
if ( flag == 1 )
{
printf ( "抱歉!你修改的信息重复!\n" ) ;
}
}
void Delete ( )
{
char namekey[ 100 ] ;
printf ( "请输入你要删除的职工姓名->" ) ;
scanf ( "%s" , namekey) ;
int j, a, k, flag= 0 ;
struct staff t;
for ( j = 0 ; j < i; j++ )
{
if ( strcmp ( namekey, s[ j] . name) == 0 )
{
printf ( "已经查到你要删除的信息!\n" ) ;
printf ( "确定修改请输入1\n" ) ;
printf ( "放弃修改请输入0\n" ) ;
scanf ( "%d" , & a) ;
if ( a== 1 )
{
for ( k = j; k < i; k++ )
{
t = s[ j] ;
s[ j] = s[ j+ 1 ] ;
}
flag = 1 ;
break ;
}
}
}
FILE * fp;
fp = fopen ( "删除后的工资信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "工资条信息已成功存放在 删除后的工资信息.txt 文件中\n" ) ;
printf ( "删除后的所有信息打印如下\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
if ( flag == 0 || a == 0 )
{
printf ( "抱歉!你要删除的信息不存在!\n" ) ;
}
fclose ( fp) ;
}
void orbasic ( )
{
int m, n, k, j;
struct staff t;
for ( m = 0 ; m < i; m++ )
{
k = m;
for ( n = m+ 1 ; n < i; n++ )
{
if ( s[ n] . income. basic > s[ m] . income. basic)
{
k = n;
}
t = s[ k] ;
s[ k] = s[ n] ;
s[ n] = t;
}
}
FILE * fp;
fp = fopen ( "按基本工资排序后的工资信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "工资条信息已成功存放在 按基本工资排序后的工资信息.txt 文件中\n" ) ;
printf ( "排序后的所有信息打印如下\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
}
void oractual ( )
{
int m, n, k, j;
struct staff t;
for ( m = 0 ; m < i; m++ )
{
k = m;
for ( n = m+ 1 ; n < i; n++ )
{
if ( s[ n] . ACTUALINCOME > s[ m] . ACTUALINCOME)
{
k = n;
}
t = s[ k] ;
s[ k] = s[ n] ;
s[ n] = t;
}
}
FILE * fp;
fp = fopen ( "按实际工资排序后的工资信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "工资条信息已成功存放在 按实际工资排序后的工资信息.txt 文件中\n" ) ;
printf ( "排序后的所有信息打印如下\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
}
void statistics ( )
{
int j, sum = 0 , sum2 = 0 ;
for ( j = 0 ; j < i; j++ )
{
sum = sum + s[ j] . income. basic;
sum2 = sum2 + s[ j] . ACTUALINCOME;
}
float average1, average2;
average1 = sum / float ( i) ;
average2 = sum2 / float ( i) ;
FILE * fp;
fp = fopen ( "按基本工资排序后的工资信息.txt" , "w" ) ;
if ( fp== NULL )
{
printf ( "文件打开失败!" ) ;
exit ( 0 ) ;
}
fprintf ( fp, "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
fprintf ( fp, "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
fprintf ( fp, "\n%d个员工的基本工资的平均值为:%.2f\n" , i, average1) ;
fprintf ( fp, "%d个员工的实际工资的平均值为:%.2f\n" , i, average2) ;
fclose ( fp) ;
printf ( "工资统计信息已成功存放在 统计工资信息.txt 文件中\n" ) ;
printf ( "统计后的所有信息打印如下\n" ) ;
printf ( "职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n" ) ;
for ( j = 0 ; j < i; j++ )
{
printf ( "%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n" , s[ j] . no, s[ j] . name,
s[ j] . income. basic, s[ j] . income. duty, s[ j] . income. allowance,
s[ j] . expend. medical, s[ j] . expend. fund, s[ j] . expend. water,
s[ j] . EAENDINCOME, s[ j] . ACTUALINCOME) ;
}
printf ( "\n%d个员工的基本工资的平均值为:%.2f\n" , i, average1) ;
printf ( "%d个员工的实际工资的平均值为:%.2f\n" , i, average2) ;
}