实现一个简单的工资管理系统,可以进行添加员工、查询员工、显示员工信息、删除员工信息、修改员工信息以及退出系统。添加员工时可以输入员工工号、姓名、性别、年龄、工资和工时。查询、删除、修改都是按照工号进行操作,如果不存在该员工就会作出提示,点击显示时可以显示当前系统中的所有员工,选择0操作就会退出当前系统。
void Menu(int *n) //主菜单 *n为返回操作数
{
int a;
printf(" ——————职工工资管理系统——————\n");
printf("| 1.建立职工工资表 |\n");
printf("| 2.职工扣税和实发工资 |\n");
printf("| 3.实发工资从高到低排序 |\n");
printf("| 4.修改职工工资信息 |\n");
printf("| 5.查询职工工资信息 |\n");
printf("| 6.职工工资统计分析 |\n");
printf("| 0.退出系统 |\n");
printf(" ————————————————————\n");
printf("提示:请输入数字序号选择对应的操作!\n");
scanf("%d",&a);
*n=a;
system("cls");
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
#define Q 15 //最大字符串长度
#define N 500 //最大员工数量
typedef struct workers{
int workersID; //职工工号
char name[Q]; //职工姓名
double basicsalary; //基本工资
double allowance; //津贴
double taxsalary; //扣税
double truesalary; //实发工资
}WORKERS; //职工信息
void Menu(int *n); //主菜单
void Payroll(WORKERS work[],int *p); //建立工资表
void Taxsalary(WORKERS work[],int num); //计算职工扣税和实发工资
void Sort(WORKERS work[],int num ) ; //将工资从高到低排序
void Change(WORKERS work[],int num); //修改职工的工资信息
int Find(WORKERS work[],int num); //按工号查询职工工资信息
void Analyse(WORKERS work[],int num); //职工工资统计分析
void Printworkroll(WORKERS work[],int num); //显示工资明细表
void Writefile(WORKERS work[],int num); //输出数据并写入 data.txt 文件
int main()
{
WORKERS work[N]; //定义一个结构体数组来存储员工信息
char ch; //ch为检测是否返回主菜单
int n,num=0,ret; //n为操作数,num为总人数,ret判断数
while(1){
system("cls");
Menu(&n); //主菜单
switch(n){
case 0:
system("cls"); //退出程序
printf("退出成功!\n");
exit(0);
case 1:
Payroll(work,&num); //建立工资表
break;
case 2:
Taxsalary(work,num); //职工扣税和实发工资
Writefile(work,num); //输出数据并写入 data.txt 文件
printf("计算完成,并输出数据至txt文件!\n");
Sleep(2000);
system("cls");
break;
case 3:
Sort(work,num); //将工资从高到低排序
Printworkroll(work,num); //显示工资明细表
printf("\n是否返回主菜单?Y or N\n");
fflush(stdin);
ch=getchar();
if(ch=='N'){
exit(0);
}
break;
case 4:
Change(work,num); //修改职工的工资信息
printf("\n是否返回主菜单?Y or N\n");
fflush(stdin);
ch=getchar();
if(ch=='N'){
exit(0);
}
break;
case 5:
ret=Find(work,num); //按工号查询职工工资信息
if(ret==0){
printf("查无此人!"); //反馈查询不到信息
}
printf("\n是否返回主菜单?Y or N\n");
fflush(stdin);
ch=getchar();
if(ch=='N'){
exit(0);
}
break;
case 6:
Analyse(work,num); //职工工资统计分析
printf("\n是否返回主菜单?Y or N\n");
fflush(stdin);
ch=getchar();
if(ch=='N'){
exit(0);
}
break;
}
}
return 0;
}
void Menu(int *n) //主菜单 *n为返回操作数
{
int a;
printf(" ——————职工工资管理系统——————\n");
printf("| 1.建立职工工资表 |\n");
printf("| 2.职工扣税和实发工资 |\n");
printf("| 3.实发工资从高到低排序 |\n");
printf("| 4.修改职工工资信息 |\n");
printf("| 5.查询职工工资信息 |\n");
printf("| 6.职工工资统计分析 |\n");
printf("| 0.退出系统 |\n");
printf(" ————————————————————\n");
printf("提示:请输入数字序号选择对应的操作!\n");
scanf("%d",&a);
*n=a;
system("cls");
}
void Payroll(WORKERS work[],int *p) //建立工资表
{
int num=*p;
char ch;
do{
system("cls");
printf("员工(%d)的信息\n",num+1);
printf("工号:");
scanf("%d",&work[num].workersID);
printf("姓名:");
scanf("%s",&work[num].name);
printf("基本工资:");
scanf("%lf",&work[num].basicsalary);
printf("津贴:");
scanf("%lf",&work[num].allowance);
printf("是否继续录入?Y or N\n");
fflush(stdin);
scanf("%c",&ch);
num++;
}while(ch=='Y');
*p=num; //返回总人数
system("cls");
}
void Taxsalary(WORKERS work[],int num) //职工扣税和实发工资
{
int i;
double money;
for(i=0;i<num;i++)
{
money=work[i].basicsalary+work[i].allowance;
if( money<3000)
{
work[i].taxsalary=0;
work[i].truesalary= money-work[i].taxsalary;
}
else if((money<4000)&&(money>=3000))
{
work[i].taxsalary=(money-3000)*0.05;
work[i].truesalary= money-work[i].taxsalary;
}
else
{
work[i].taxsalary=(money-3000)*0.05+(money-4000)*0.1;
work[i].truesalary= money-work[i].taxsalary;
}
}
}
void Sort(WORKERS work[],int num) //将工资从高到低排序
{
int i,j;
WORKERS temp;
for (i=0;i<num-1;i++)
{
for(j=i+1;j<num;j++)
{