每个食堂工作人员的信息为:职工号、姓名、性别、职位、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资;
注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;其中税收是在应发工资的基础上扣除,请查阅相关网站说明,给出税收扣除的细则;实发工资=应发工资-合计扣款;
工作人员信息处理
1)输入人员信息;
2)修改人员信息(部分修改、全部修改) :
3)删除人员信息;
4)查询人员信息;
5)人员信息排序(按职工号、姓名、收入) ;
6)录入员工工资信息
7)计算员工工资
8)数据保存
9)数据读取
参考:https://blog.csdn.net/qq_63023553/article/details/122586808
架构参考代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_EMPLOYEE_NUM 1000 // 最多支持1000个员工信息
struct Employee {
char id[20]; // 职工号
char name[20]; // 姓名
char sex[10]; // 性别
char position[20]; // 职位
char company[20]; // 单位名称
char address[50]; // 家庭住址
char phone[20]; // 联系电话
double basic_salary; // 基本工资
double allowance; // 津贴
double living_subsidy; // 生活补贴
double should_pay; // 应发工资
double phone_bill; // 电话费
double utility_bill; // 水电费
double rent; // 房租
double income_tax; // 所得税
double health_care; // 卫生费
double accumulation_fund; // 公积金
double total_deductions; // 合计扣款
double actual_pay; // 实发工资
};
struct Employee employees[MAX_EMPLOYEE_NUM]; // 存储员工信息的数组
int employee_count = 0; // 已经录入的员工数目
// 显示主菜单
void show_main_menu();
// 输入一个员工信息
void input_employee();
// 显示员工信息
void show_employee(const struct Employee* employee);
// 显示所有员工信息
void show_all_employees();
// 查询员工信息
void search_employee();
// 修改员工信息
void modify_employee();
// 删除员工信息
void delete_employee();
// 排序员工信息
void sort_employees();
// 录入员工工资信息
void input_employee_salary();
// 计算员工工资
void calculate_employee_salary();
// 保存数据到文件
void save_data_to_file();
// 从文件读取数据
void load_data_from_file();
// 程序入口
int main() {
// 先读取数据
load_data_from_file();
while (1) {
show_main_menu();
int choice;
scanf("%d", &choice);
switch (choice) {
case 1: // 输入人员信息
input_employee();
break;
case 2: // 修改人员信息
modify_employee();
break;
case 3: // 删除人员信息
delete_employee();
break;
case 4: // 查询人员信息
search_employee();
break;
case 5: // 人员信息排序
sort_employees();
break;
case 6: // 录入员工工资信息
input_employee_salary();
break;
case 7: // 计算员工工资
calculate_employee_salary();
break;
case 8: // 数据保存
save_data_to_file();
break;
case 9: // 数据读取
load_data_from_file();
break;
case 0: // 退出程序
return 0;
default:
以下是一个简单的C语言示例程序,有帮助的话采纳一下哦
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 100 // 最大员工数
// 定义员工结构体
typedef struct {
char id[10]; // 职工号
char name[20]; // 姓名
char gender[5]; // 性别
char position[20]; // 职位
char company[50]; // 单位名称
char address[100]; // 家庭住址
char phone[20]; // 联系电话
float basic_salary; // 基本工资
float allowance; // 津贴
float living_allowance; // 生活补贴
float taxable_income; // 应税收入
float telephone_fee; // 电话费
float utility_fee; // 水电费
float rent; // 房租
float income_tax; // 所得税
float health_insurance; // 卫生费
float accumulation_fund; // 公积金
float total_deductions; // 合计扣款
float net_salary; // 实发工资
} Employee;
// 员工数组
Employee employees[MAX_EMPLOYEES];
// 员工数
int employee_count = 0;
// 函数声明
void input_employee_info();
void modify_employee_info();
void delete_employee_info();
void query_employee_info();
void sort_employee_info();
void input_employee_salary_info();
void calculate_employee_salary();
void save_employee_info();
void load_employee_info();
// 主函数
int main() {
int choice;
do {
// 显示菜单
printf("1. 输入人员信息\n");
printf("2. 修改人员信息\n");
printf("3. 删除人员信息\n");
printf("4. 查询人员信息\n");
printf("5. 人员信息排序\n");
printf("6. 录入员工工资信息\n");
printf("7. 计算员工工资\n");
printf("8. 数据保存\n");
printf("9. 数据读取\n");
printf("0. 退出程序\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_employee_info();
break;
case 2:
modify_employee_info();
break;
case 3:
delete_employee_info();
break;
case 4:
query_employee_info();
break;
case 5:
sort_employee_info();
break;
case 6:
input_employee_salary_info();
break;
case 7:
calculate_employee_salary();
break;
case 8:
save_employee_info();
break;
case 9:
load_employee_info();
break;
case 0:
printf("程序已退出。\n");
break;
default:
printf("无效的选择,请重新输入。\n");
break;
}
} while (choice != 0);
return 0;
}
// 输入人员信息
void input_employee_info() {
if (employee_count == MAX_EMPLOYEES) {
printf("员工数量已达到
您好,实现的c语言职工工资系统代码如下,可根据您的其它要求自行修改完善:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NUM 1000
void enter();
void search_num();
void dele_num();
void modi_num();
void browse();
void count();
void load();
void add();
void menu();
int n; //员工的总数
struct emploee //职工数据结构
{
char no[];
char name[];
char sex[];
int age;
float wage1; //员工的基本工资
float wage2; //员工的职务工资
float funds; //员工的住房公积金
float WATERfee; //员工的水电费
float TAXfee; //员工的个人所得税
float wage3; //员工的实发工资
}emp[NUM],newemp;
void main()
{
menu();
}
void menu()//主界面
{ int n,w1;
do
{ system("cls");
printf("************* 职工工资管理系统 **************\n");
printf("* 1-----输入职工信息 *\n");
printf("* 2-----查询职工信息 *\n");
printf("* 3-----根据职工ID号修改 *\n");
printf("* 4-----根据职工ID号删除 *\n");
printf("* 5-----据工资统计并浏览 *\n");
printf("* 6-----从文件载入信息 *\n");
printf("* 7-----浏览全部职工 *\n");
printf("* 8-----追加职工信息 *\n");
printf("* 9-----退出程序 *\n");
printf("***************************************************\n");
printf(" 输入您的选择(1-9):[ ]\b\b");
scanf("%d",&n);
if(n<||n>) //对选择的数字作判断
{
w1=;
printf("your choice is not between 1 and 9,Please input again:");
getchar();
}
else w1=;
}
while(w1==);
switch(n)
{ case :enter(); break;
case :search_num(); break;
case :modi_num(); break;
case :dele_num(); break;
case :count (); break;
case :load(); break; //保存模块
case :browse(); break; //加载模块
case :add(); break;
case :printf("\n×××××××谢谢,欢迎下次光临!×××××××\n\n");
default:exit(); //退出系统,exit(0)函数功能是退出程序。
}
}
/*************************输入模块**********************/
void enter()
{
FILE *fp;
int n,i;
if ((fp=fopen("emp.txt","wb"))==NULL)
{
printf("不能建立emp文件\n");
exit();
}
printf("输入职工人数:");
scanf("%d",&n);
printf("输入格式:职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税<Enter>\n");
for(i=;i<n;i++) /* 循环获取n个职工记录 */
{
printf("第%d个职工:",i+);
scanf("%s%s%s%d%f%f%f%f%f",emp[i].no,emp[i].name,emp[i].sex,&emp[i].age,
&emp[i].wage1,&emp[i].wage2,&emp[i].funds,&emp[i].WATERfee,&emp[i].TAXfee);
emp[i].wage3=emp[i].wage1+emp[i].wage2+emp[i].funds-emp[i].WATERfee-emp[i].TAXfee;
}
for(i=;i<n;i++) /*将n个职工记录写入文件*/
fwrite(&emp[i],sizeof(struct emploee),,fp);
fclose(fp);
}
/*************************统计模块**********************/
void count()
{
FILE *fp;
int n,num;
if((fp=fopen("emp.txt","rb"))==NULL)
{
printf("不能打开emp文件\n");
exit();
}
printf("请输入工资数:");
scanf("%d",&num);
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
for(n=;fread(&emp[n],sizeof(struct emploee),,fp)!=;n++)
if(emp[n].wage3>=num)
printf("%6d%6s%9s%4s%5d %.1f %.1f %.1f %.1f %.1f %.1f\n",n+,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,
emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);
fclose(fp);
}
/********************删除模块*******************/
void dele_num()
{
FILE *fp;
int i,j,n;
char num[];
if((fp=fopen("emp.txt","rb"))==NULL)
{
printf("不能打开emp文件\n");
exit();
}
printf("删除前:\n");
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
for(n=;fread(&emp[n],sizeof(struct emploee),,fp);n++)
printf("%6d%6s%9s%4s%5d %.1f %.1f %.1f %.1f %.1f %.1f\n",n+,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].wage1,
emp[n].wage2,emp[n].funds,emp[n].WATERfee,emp[n].TAXfee,emp[n].wage3);/*n为emp文件中记录数*/
printf("要删除的职工号:");
scanf("%s",num);
for(i=;(strcmp(emp[i].no,num)!=&&i<n);i++)
if(i>=n)
{
printf("\t没有%s职工号的职工\n",num);
exit();
}
fclose(fp);
fp=fopen("emp.dat","w+");
if(n==) /*一个记录已经删除了*/
{
fclose(fp);
exit();
}
for(j=;j<i;j++)
fwrite(&emp[j],sizeof(struct emploee),,fp);
for(j=i+;j<n;j++)
fwrite(&emp[j],sizeof(struct emploee),,fp);
printf("删除后:\n");
fseek(fp,,SEEK_SET);
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
for(i=;fread(&emp[i],sizeof(struct emploee),,fp);i++)
printf("%6d%6s%9s%4s%5d% %.1f %.1f %.1f %.1f %.1f %.1f\n",i+,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
fclose(fp);
}
/********************修改模块*******************/
void modi_num()
{
FILE *fp;
int i,j;
char num[];
if((fp=fopen("emp.txt","rb+"))==NULL)
{
printf("不能 打开emp文件\n");
exit();
}
printf("要修改的职工号:");
scanf("%s",num);
for(i=;fread(&emp[i],sizeof(struct emploee),,fp);i++)
if(!strcmp(emp[i].no,num))break;
if(feof(fp))
{
printf("\t没有%s职工号的职工\n",num);
exit();
}
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
printf("%6d%6s%9s%4s%5d% %.1f %.1f %.1f %.1f %.1f %.1f\n",i+,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
printf("输入格式:职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 <Enter>\n");
printf("第%d个记录:",i+);
scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,
&newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);//获取新的职工记录
newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;
fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR); //文件指针指向该修改的记录开头
fwrite(&newemp,sizeof(struct emploee),,fp); //用newemp覆盖当前记录
printf(" 修改后:\n");
fseek(fp,,SEEK_SET); //显示修改后的文件数据
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
for(i=;fread(&emp[i],sizeof(struct emploee),,fp)!=;i++)
printf("%6d%6s%9s%4s%5d %.1f %.1f %.1f %.1f %.1f %.1f\n",i+,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
fclose(fp);
}
/*************************查询模块***********************/
void search_num()
{
FILE *fp;
int i;
char num[];
if((fp=fopen("emp.txt","rb"))==NULL)
{
printf("不能打开emp文件\n");
exit();
}
printf("要查询的职工号:");
scanf("%s",num);
for(i=;fread(&emp[i],sizeof(struct emploee),,fp);i++)
if(!strcmp(emp[i].no,num)) break;
if(feof(fp))
{
printf("\t查无此人\n");
exit();
}
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
printf("%6d%6s%9s%4s%5d %.1f %.1f %.1f %.1f %.1f %.1f\n",i+,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
fclose(fp);
}
/*******************浏览模块********************/
void browse()
{ int i;
FILE *fp;
if((fp=fopen("emp.txt","r"))==NULL)
{
printf("不能打开emp文件\n");
exit();
}
printf("记录号 职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 实发工资\n");
for(i=;fread(&emp[i],sizeof(struct emploee),,fp)!=;i++)
{
printf("%6d%6s%9s%4s%5d %.1f %.1f %.1f %.1f %.1f %.1f\n",i+,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].wage1,
emp[i].wage2,emp[i].funds,emp[i].WATERfee,emp[i].TAXfee,emp[i].wage3);
}
fclose(fp);
}
/******************追加模块*******************/
void add()
{
FILE *fp;
int n,i,j;
if((fp=fopen("emp.txt","ab+"))==NULL)
{
printf("不能打开emp文件\n");
exit();
}
printf("要追加的职工人数:");
scanf("%d",&n);
for(i=;i<n;i++)
{
printf("输入格式:职工号 姓名 性别 年龄 基本工资 职务工资 公积金 水电费 税 <Enter>\n");
printf("追加记录:\n");
scanf("%s%s%s%d%f%f%f%f%f",newemp.no,newemp.name,newemp.sex,&newemp.age,
&newemp.wage1,&newemp.wage2,&newemp.funds,&newemp.WATERfee,&newemp.TAXfee);
newemp.wage3=newemp.wage1+newemp.wage2+newemp.funds-newemp.WATERfee-newemp.TAXfee;//获取一个新的职工记录
fwrite(&newemp,sizeof(struct emploee),,fp); //将该职工记录写入文件
}
fclose(fp);
}
/*************************载入模块**********************/
void load() //加载记录或可以计算记录个数的函数
{
FILE *fp;
int i,w;
w=;
system( "cls" );
if((fp=fopen("emp.txt","rb"))==NULL) //以输出打开方式,在此前的记录被覆盖
{
printf("\nCannot open file\n");
w=;
return ;
}
n=;
for(i=;!feof(fp);i++)
{
fread(&emp[i],sizeof(struct emploee),,fp);
n++;
}
n=n-;
fclose(fp);
if(w==)
{
printf("Load file ok!");
getchar();
getchar();
menu();
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct worker
{
char depa[30];
char name[30];
char ID[10];
int salary1;
int salary2;
int salary3;
int salary4;
}; //职工信息
int dq(struct worker wo[]);
void bc(struct worker wo[]);
void show(); //主界面
void add(); //添加信息
void see(); //查看信息
void search(); //查询信息
void ghcz(); //按工号查找
void xmcz(); //按姓名查找
void bmcz(); //按部门查找
void del(); //删除信息
void xmsc() ; //按姓名删除
void ghsc(); //按工号删除
void statistics(); //个人工资统计
void statistic(); //总计职工工资
void statistic1(); //统计职工工资
void average(); //职工工资求平均
void gzdtj(); //按工资段统计
void bmtj(); //按部门统计
void modify(); //修改职工信息
void ghxg(); //按工号修改
void xmxg(); //按姓名修改
void sort(); //职工工资排序
void reserve(); //保存
void back(); //返回
struct worker wo[100]; //保存所有的职工信息
int Number=0; //记录总的职工人数
int main()
{
int choose=0;
while (1)
{
show();
printf ("\t\t====>请选择:");
scanf ("%d",&choose);
system ("cls");
switch (choose)
{
case 0:exit(0); //退出
break ;
case 1:add();
back(); //添加职工信息
break ;
case 2:see();
back() ; //查看职工信息
break ;
case 3:search();
back(); //查找职工信息
break ;
case 4:del() ;
back(); //删除职工信息
break ;
case 5:statistics();
back( ); //个人工资统计
break ;
case 6:statistic();
back(); //总记职工工资
break ;
case 7:sort();
back(); //排序职工信息
break ;
case 8:modify();
back(); //修改职工信息
break ;
case 9:reserve();
back(); //保存数据
break ;
default:
break;
}
fflush(stdin);
system ("cls");
system("pause");
}
}
int dq(struct worker wo[])
{
FILE*fp=NULL;
int i=0;
fp=fopen("C://worker.dat","rb");
while(fread(&wo[i],sizeof(struct worker),1,fp))
i++;
fclose (fp);
return i;
}
void bc(struct worker *wo)
{
FILE*fp=NULL;
fp=fopen("C://worker.dat","ab+");
fwrite(wo,sizeof(struct worker),1,fp);
fclose(fp);
system("pause");
}
void show ()
{
printf ("\n");
printf ("\t——欢迎进入职工工资管理系统!您可以进行以下操作!——\n");
printf ("\t——————————————————————————————————————————————\n");
printf ("\t—— 职工工资管理系统 ——\n");
printf ("\t——————————————————————————————————————————————\n");
printf ("\t///No.1—————[1]添加职工信息 ——\n");
printf ("\t///No.2—————[2]查看职工信息 ——\n");
printf ("\t///No.3—————[3]查找职工信息 ——\n");
printf ("\t///No.4—————[4]删除职工信息 ——\n");
printf ("\t///No.5—————[5]个人工资统计 ——\n");
printf ("\t///No.6—————[6]总记职工工资 ——\n");
printf ("\t///No.7—————[7]排序职工工资 ——\n");
printf ("\t///No.8—————[8]修改职工信息 ——\n");
printf ("\t///No.9—————[9]保 存 数 据 ——\n");
printf ("\t///No.0—————[0]退 出 系 统 ——\n");
printf ("\t——————————————————————————————————————————————\n");
printf ("\t——————————————————————————————————————————————\n");
}
void add() //添加职工信息
{
int numberTemp=0;
int i=0;
struct worker temp;
printf("请输入要添加职工个数:");
scanf ("%d",&numberTemp);
for (i=0;i<numberTemp;i++)
{
printf ("输入第%d个职工信息\n",i+1);
printf ("姓名:");
scanf ("%s",temp.name);
printf ("工号:");
scanf ("%s",temp.ID);
printf ("所属部门:");
scanf ("%s",temp.depa);
printf ("基本工资:");
scanf ("%d",&temp.salary1);
printf ("奖励工资:");
scanf ("%d",&temp.salary2);
printf ("补贴项目即金额:");
scanf ("%d",&temp.salary3);
printf ("扣除项目即金额:");
scanf ("%d",&temp.salary4);
wo[Number++]=temp; //写入到数组
bc(&temp); //写入到文件
system("pause");
}
printf ("添加成功!\n");
}
void see() //查看职工信息
{
int i=0;
printf ("以下是全部职工\n");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
while (i<Number)
{
printf ("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
i++;
}system("pause");
}
void search() //查找职工信息
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按工号查找\n");
printf("3 按部门查找\n");
scanf ("%d",&n);
switch (n)
{
case 1:xmcz();
break ;
case 2:ghcz();
break ;
case 3:bmcz();
break ;
default: printf ("输入错误!\n");
break ;
}system("pause");
}
void xmcz() //按姓名查找
{
char name[30];
int i=0;
printf ("请输入要查找职工姓名:");
scanf ("%s",name);
system ("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}system("pause");
}
void ghcz() //按工号查找
{
char id[10];
int i=0;
printf("请输入要查找工号:");
scanf("%s",id);
system("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for(i=0;i<Number;i++){
if(strcmp(id,wo[i].ID)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}system("pause");
}
void bmcz() //按部门查找
{
char depa[30];
int i=0;
printf("请输入要查找部门名称:");
scanf("%s",depa);
system("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for(i=0;i<Number;i++){
if(strcmp(depa,wo[i].depa)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}system("pause");
}
void del() //删除职工信息
{
int n=0;
printf ("1 按姓名删除\n");
printf ("2 按工号删除\n");
scanf ("%d",&n);
switch (n)
{
case 1: xmsc();
break ;
case 2: ghsc();
break ;
}system("pause");
}
void xmsc ()//按姓名删除
{
FILE*fp=NULL;
char name[30];
int i=0;
int j=0;
printf ("请输入要删除的职工姓名:");
scanf ("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name)==0)
{
for (j=i;j<Number-1;j++)
{
wo[j]=wo[j+1];
}
Number --;
}system("pause");
}
//将剩余数据写入文件擦除以前的数据
fp = fopen ("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose (fp);
printf ("删除成功!\n");
}
void ghsc() //按工号删除
{
FILE*fp=NULL;
char id[60];
int i=0;
int j=0;
printf ("请输入要删除的职工工号:");
scanf ("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID)==0)
{
for(j=i;j<Number-1;j++)
{
wo[j]=wo[j+1];
}
Number--;
}system("pause");
}
//将剩余数据写入文件擦除以前的数据
fp=fopen("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose (fp);
printf ("删除成功!\n");
}
void statistics() //个人工资统计
{
int i=0;
double sum[100];
for (i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
printf ("%s的总工资为:%f\n",wo[i].name,sum[i]);
}system("pause");
}
void statistic() //总计职工工资
{
int n=0;
printf ("1 统计职工工资\n");
printf ("2 职工工资求平均\n");
scanf ("%d",&n);
switch (n){
case 1:statistic1();
break ;
case 2:average();
break ;
default:printf("输入错误!\n");
break;
}system("pause");
}
void statistic1() //统计职工工资
{
int n=0;
printf ("1 按工资段统计\n");
printf ("2 按部门统计\n");
scanf ("%d",&n);
switch (n){
case 1:gzdtj();
break ;
case 2:bmtj();
break ;
default:printf("输入错误!\n");
break;
}system("pause");
}
void gzdtj() //按工资段统计
{
int sa1,sa2;
int i=0;
int n,m;
int sl[20]={0,0};
double sum [100];
printf ("请输入要查询的工资段:");
scanf ("%d,%d",&sa1,&sa2);
system ("cls");
for (i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
}
for (i=0;i<Number;i++)
{ n=sum[i]/1000;
if (n>9)
n=10;
switch(n)
{ case 0:sl[0]++;
break ;
case 1:sl[1]++;
break ;
case 2:sl[2]++;
break ;
case 3:sl[3]++;
break ;
case 4:sl[4]++;
break ;
case 5:sl[5]++;
break ;
case 6:sl[6]++;
break ;
case 7:sl[7]++;
break ;
case 8:sl[8]++;
break ;
case 9:sl[9]++;
break ;
case 10:sl[10]++;
break ;
}
}
m=sa1/1000;
switch(m)
{case 0:printf ("工资在1000以下的人数为%d\n",sl[0]); break ;
case 1:printf("工资在1000到2000之间的人数为%d\n",sl[1]); break ;
case 2:printf("工资在2000到3000之间的人数为%d\n",sl[2]); break ;
case 3:printf("工资在3000到4000之间的人数为%d\n",sl[3]); break ;
case 4:printf("工资在4000到5000之间的人数为%d\n",sl[4]); break ;
case 5:printf("工资在5000到6000之间的人数为%d\n",sl[5]); break ;
case 6:printf("工资在6000到7000之间的人数为%d\n",sl[6]); break ;
case 7:printf("工资在7000到8000之间的人数为%d\n",sl[7]); break ;
case 8:printf("工资在8000到9000之间的人数为%d\n",sl[8]); break ;
case 9:printf("工资在9000到10000之间的人数为%d\n",sl[9]);break ;
case 10:printf("工资在10000以上的人数为%d\n",sl[10]); break ;
}system("pause");
}
void bmtj() //按部门统计
{
char depa[30];
float sum=0;
int i=0;
printf("请输入要查询的部门名称:");
scanf ("%s",depa);
system ("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for(i=0;i<Number;i++){
if (strcmp(depa,wo[i].depa)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
sum=sum+wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
}
}
printf("该部门的总工资为:%f\n",sum);
system("pause");
}
void average() //职工工资求平均
{ double all=0;
double sum[100];
int cnt=0;
int i=0;
printf("职工工资平均值如下:\n");
for (i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
all+=sum[i];
cnt++;
}
all/=cnt;
printf("%f\n",all);
system("pause");
}
void sort() //职工工资排序
{
int i=0;
int m,n;
double sum[100];
double t;
struct worker p;
for (i=0;i<Number;i++)
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
for(m=1;m<Number;m++){
for(n=1;n<Number;n++){
if(sum[n]>sum[n-1]){
t=sum[n];
sum[n]=sum[n-1];
sum[n-1]=t;
p=wo[n];
wo[n]=wo[n-1];
wo[n-1]=p;
}
}
}
for (i=0;i<Number;i++)
printf ("%s的总工资为:%lf\n",wo[i].name,sum[i]);
system("pause");
}
void modify() //修改职工信息
{
int mode=0;
printf ("请选择修改查找方式\n");
printf ("1 按姓名查找修改\n");
printf ("2 按工号查找修改\n");
scanf ("%d",&mode);
switch (mode){
case 1: xmxg() ;
break ;
case 2:ghxg();
break ;
default : printf ("输入错误!\n");
break ;
}system("pause");
}
void xmxg() //按姓名修改
{
FILE*fp=NULL ;
char name[30];
int i=0;
printf ("请输入要修改的职工姓名:");
scanf ("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name));
else
break;}
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
printf ("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
printf ("请重新输入该职工信息\n");
printf ("姓名:");
scanf ("%s",wo[i].name);
printf ("工号:");
scanf ("%s",wo[i].ID);
printf ("所属部门:");
scanf ("%s",wo[i].depa);
printf ("基本工资:");
scanf ("%d",&wo[i].salary1);
printf ("奖励工资:");
scanf ("%d",&wo[i].salary2);
printf ("补贴项目即金额:");
scanf ("%d",&wo[i].salary3);
printf ("扣除项目即金额:");
scanf ("%d",&wo[i].salary4);
//将剩余数据写入文件擦除以前的数据
fp = fopen ("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose ( fp );
printf("\t=======>修改成功!\n");
system("pause");
}
void ghxg() //按工号修改
{
FILE*fp=NULL ;
char id[30];
int i=0;
printf ("请输入要修改的职工工号:");
scanf ("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID));
else
break ;}
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
printf ("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
printf ("请重新输入该职工信息\n");
printf ("姓名:");
scanf ("%s",wo[i].name);
printf ("工号:");
scanf ("%s",wo[i].ID);
printf ("所属部门:");
scanf ("%s",wo[i].depa);
printf ("基本工资:");
scanf ("%d",&wo[i].salary1);
printf ("奖励工资:");
scanf ("%d",&wo[i].salary2);
printf ("补贴项目即金额:");
scanf ("%d",&wo[i].salary3);
printf ("扣除项目即金额:");
scanf ("%d",&wo[i].salary4);
//将剩余数据写入文件擦除以前的数据
fp = fopen ("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose ( fp );
printf("\t=======>修改成功!\n");
system("pause");
}
void reserve() //保存数据
{
printf("\t=====>程序在运行时已自动保存....\n");
system("pause");
}
void back()
{
printf("\t=====>按Enter键返回主菜单\n");
system("pause");
}
改回答引用ChatGPT
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 职工信息结构体
typedef struct {
char id[20]; // 职工号
char name[20]; // 姓名
char sex[6]; // 性别
char job[20]; // 职位
char unit[20]; // 单位名称
char address[50]; // 家庭住址
char phone[20]; // 联系电话
float basicSalary; // 基本工资
float allowance; // 津贴
float subsidy; // 生活补贴
float grossSalary; // 应发工资
float phoneFee; // 电话费
float utilityFee; // 水电费
float rent; // 房租
float tax; // 所得税
float healthFee; // 卫生费
float providentFund; // 公积金
float totalDeduction; // 合计扣款
float netSalary; // 实发工资
} Employee;
// 保存职工信息到文件中
void saveEmployees(Employee *employees, int n) {
FILE *fp = fopen("employees.dat", "wb");
fwrite(employees, sizeof(Employee), n, fp);
fclose(fp);
}
// 从文件中读取职工信息
int readEmployees(Employee *employees) {
FILE *fp = fopen("employees.dat", "rb");
if (fp == NULL) {
return 0;
}
int n = 0;
while (fread(&employees[n], sizeof(Employee), 1, fp) == 1) {
n++;
}
fclose(fp);
return n;
}
// 添加职工信息
void addEmployee(Employee *employees, int *n) {
Employee e;
printf("请输入职工信息(职工号 姓名 性别 职位 单位名称 家庭住址 联系电话 基本工资 津贴 生活补贴):\n");
scanf("%s%s%s%s%s%s%s%f%f%f", e.id, e.name, e.sex, e.job, e.unit, e.address, e.phone, &e.basicSalary, &e.allowance, &e.subsidy);
e.grossSalary = e.basicSalary + e.allowance + e.subsidy;
e.phoneFee = 0.0;
e.utilityFee = 0.0;
e.rent = 0.0;
e.tax = 0.0;
e.healthFee = 0.0;
e.providentFund = 0.0;
e.totalDeduction = e.phoneFee + e.utilityFee + e.rent + e.tax + e.healthFee + e.providentFund;
e.netSalary = e.grossSalary - e.totalDeduction;
employees[*n] = e;
(*n)++;
printf("职工信息已添加!\n");
}
// 修改职工信息
void modifyEmployee(Employee *employees, int n) {
char id[20];
printf("
如有帮助,望采纳
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct worker
{
char depa[30];
char name[30];
char ID[10];
int salary1;
int salary2;
int salary3;
int salary4;
}; //职工信息
int dq(struct worker wo[]);
void bc(struct worker wo[]);
void show(); //主界面
void add(); //添加信息
void see(); //查看信息
void search(); //查询信息
void ghcz(); //按工号查找
void xmcz(); //按姓名查找
void bmcz(); //按部门查找
void del(); //删除信息
void xmsc() ; //按姓名删除
void ghsc(); //按工号删除
void statistics(); //个人工资统计
void statistic(); //总计职工工资
void statistic1(); //统计职工工资
void average(); //职工工资求平均
void gzdtj(); //按工资段统计
void bmtj(); //按部门统计
void modify(); //修改职工信息
void ghxg(); //按工号修改
void xmxg(); //按姓名修改
void sort(); //职工工资排序
void reserve(); //保存
void back(); //返回
struct worker wo[100]; //保存所有的职工信息
int Number=0; //记录总的职工人数
int main()
{
int choose=0;
while (1)
{
show();
printf ("\t\t====>请选择:");
scanf ("%d",&choose);
system ("cls");
switch (choose)
{
case 0:exit(0); //退出
break ;
case 1:add();
back(); //添加职工信息
break ;
case 2:see();
back() ; //查看职工信息
break ;
case 3:search();
back(); //查找职工信息
break ;
case 4:del() ;
back(); //删除职工信息
break ;
case 5:statistics();
back( ); //个人工资统计
break ;
case 6:statistic();
back(); //总记职工工资
break ;
case 7:sort();
back(); //排序职工信息
break ;
case 8:modify();
back(); //修改职工信息
break ;
case 9:reserve();
back(); //保存数据
break ;
default:
break;
}
fflush(stdin);
system ("cls");
system("pause");
}
}
int dq(struct worker wo[])
{
FILE*fp=NULL;
int i=0;
fp=fopen("C://worker.dat","rb");
while(fread(&wo[i],sizeof(struct worker),1,fp))
i++;
fclose (fp);
return i;
}
void bc(struct worker *wo)
{
FILE*fp=NULL;
fp=fopen("C://worker.dat","ab+");
fwrite(wo,sizeof(struct worker),1,fp);
fclose(fp);
system("pause");
}
void show ()
{
printf ("\n");
printf ("\t——欢迎进入职工工资管理系统!您可以进行以下操作!——\n");
printf ("\t——————————————————————————————————————————————\n");
printf ("\t—— 职工工资管理系统 ——\n");
printf ("\t——————————————————————————————————————————————\n");
printf ("\t///No.1—————[1]添加职工信息 ——\n");
printf ("\t///No.2—————[2]查看职工信息 ——\n");
printf ("\t///No.3—————[3]查找职工信息 ——\n");
printf ("\t///No.4—————[4]删除职工信息 ——\n");
printf ("\t///No.5—————[5]个人工资统计 ——\n");
printf ("\t///No.6—————[6]总记职工工资 ——\n");
printf ("\t///No.7—————[7]排序职工工资 ——\n");
printf ("\t///No.8—————[8]修改职工信息 ——\n");
printf ("\t///No.9—————[9]保 存 数 据 ——\n");
printf ("\t///No.0—————[0]退 出 系 统 ——\n");
printf ("\t——————————————————————————————————————————————\n");
printf ("\t——————————————————————————————————————————————\n");
}
void add() //添加职工信息
{
int numberTemp=0;
int i=0;
struct worker temp;
printf("请输入要添加职工个数:");
scanf ("%d",&numberTemp);
for (i=0;i<numberTemp;i++)
{
printf ("输入第%d个职工信息\n",i+1);
printf ("姓名:");
scanf ("%s",temp.name);
printf ("工号:");
scanf ("%s",temp.ID);
printf ("所属部门:");
scanf ("%s",temp.depa);
printf ("基本工资:");
scanf ("%d",&temp.salary1);
printf ("奖励工资:");
scanf ("%d",&temp.salary2);
printf ("补贴项目即金额:");
scanf ("%d",&temp.salary3);
printf ("扣除项目即金额:");
scanf ("%d",&temp.salary4);
wo[Number++]=temp; //写入到数组
bc(&temp); //写入到文件
system("pause");
}
printf ("添加成功!\n");
}
void see() //查看职工信息
{
int i=0;
printf ("以下是全部职工\n");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
while (i<Number)
{
printf ("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
i++;
}system("pause");
}
void search() //查找职工信息
{
int n=0;
printf("1 按姓名查找\n");
printf("2 按工号查找\n");
printf("3 按部门查找\n");
scanf ("%d",&n);
switch (n)
{
case 1:xmcz();
break ;
case 2:ghcz();
break ;
case 3:bmcz();
break ;
default: printf ("输入错误!\n");
break ;
}system("pause");
}
void xmcz() //按姓名查找
{
char name[30];
int i=0;
printf ("请输入要查找职工姓名:");
scanf ("%s",name);
system ("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}system("pause");
}
void ghcz() //按工号查找
{
char id[10];
int i=0;
printf("请输入要查找工号:");
scanf("%s",id);
system("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for(i=0;i<Number;i++){
if(strcmp(id,wo[i].ID)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}system("pause");
}
void bmcz() //按部门查找
{
char depa[30];
int i=0;
printf("请输入要查找部门名称:");
scanf("%s",depa);
system("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for(i=0;i<Number;i++){
if(strcmp(depa,wo[i].depa)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
}
}system("pause");
}
void del() //删除职工信息
{
int n=0;
printf ("1 按姓名删除\n");
printf ("2 按工号删除\n");
scanf ("%d",&n);
switch (n)
{
case 1: xmsc();
break ;
case 2: ghsc();
break ;
}system("pause");
}
void xmsc ()//按姓名删除
{
FILE*fp=NULL;
char name[30];
int i=0;
int j=0;
printf ("请输入要删除的职工姓名:");
scanf ("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name)==0)
{
for (j=i;j<Number-1;j++)
{
wo[j]=wo[j+1];
}
Number --;
}system("pause");
}
//将剩余数据写入文件擦除以前的数据
fp = fopen ("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose (fp);
printf ("删除成功!\n");
}
void ghsc() //按工号删除
{
FILE*fp=NULL;
char id[60];
int i=0;
int j=0;
printf ("请输入要删除的职工工号:");
scanf ("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID)==0)
{
for(j=i;j<Number-1;j++)
{
wo[j]=wo[j+1];
}
Number--;
}system("pause");
}
//将剩余数据写入文件擦除以前的数据
fp=fopen("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose (fp);
printf ("删除成功!\n");
}
void statistics() //个人工资统计
{
int i=0;
double sum[100];
for (i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
printf ("%s的总工资为:%f\n",wo[i].name,sum[i]);
}system("pause");
}
void statistic() //总计职工工资
{
int n=0;
printf ("1 统计职工工资\n");
printf ("2 职工工资求平均\n");
scanf ("%d",&n);
switch (n){
case 1:statistic1();
break ;
case 2:average();
break ;
default:printf("输入错误!\n");
break;
}system("pause");
}
void statistic1() //统计职工工资
{
int n=0;
printf ("1 按工资段统计\n");
printf ("2 按部门统计\n");
scanf ("%d",&n);
switch (n){
case 1:gzdtj();
break ;
case 2:bmtj();
break ;
default:printf("输入错误!\n");
break;
}system("pause");
}
void gzdtj() //按工资段统计
{
int sa1,sa2;
int i=0;
int n,m;
int sl[20]={0,0};
double sum [100];
printf ("请输入要查询的工资段:");
scanf ("%d,%d",&sa1,&sa2);
system ("cls");
for (i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
}
for (i=0;i<Number;i++)
{ n=sum[i]/1000;
if (n>9)
n=10;
switch(n)
{ case 0:sl[0]++;
break ;
case 1:sl[1]++;
break ;
case 2:sl[2]++;
break ;
case 3:sl[3]++;
break ;
case 4:sl[4]++;
break ;
case 5:sl[5]++;
break ;
case 6:sl[6]++;
break ;
case 7:sl[7]++;
break ;
case 8:sl[8]++;
break ;
case 9:sl[9]++;
break ;
case 10:sl[10]++;
break ;
}
}
m=sa1/1000;
switch(m)
{case 0:printf ("工资在1000以下的人数为%d\n",sl[0]); break ;
case 1:printf("工资在1000到2000之间的人数为%d\n",sl[1]); break ;
case 2:printf("工资在2000到3000之间的人数为%d\n",sl[2]); break ;
case 3:printf("工资在3000到4000之间的人数为%d\n",sl[3]); break ;
case 4:printf("工资在4000到5000之间的人数为%d\n",sl[4]); break ;
case 5:printf("工资在5000到6000之间的人数为%d\n",sl[5]); break ;
case 6:printf("工资在6000到7000之间的人数为%d\n",sl[6]); break ;
case 7:printf("工资在7000到8000之间的人数为%d\n",sl[7]); break ;
case 8:printf("工资在8000到9000之间的人数为%d\n",sl[8]); break ;
case 9:printf("工资在9000到10000之间的人数为%d\n",sl[9]);break ;
case 10:printf("工资在10000以上的人数为%d\n",sl[10]); break ;
}system("pause");
}
void bmtj() //按部门统计
{
char depa[30];
float sum=0;
int i=0;
printf("请输入要查询的部门名称:");
scanf ("%s",depa);
system ("cls");
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
for(i=0;i<Number;i++){
if (strcmp(depa,wo[i].depa)==0)
{
printf("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
sum=sum+wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
}
}
printf("该部门的总工资为:%f\n",sum);
system("pause");
}
void average() //职工工资求平均
{ double all=0;
double sum[100];
int cnt=0;
int i=0;
printf("职工工资平均值如下:\n");
for (i=0;i<Number;i++)
{
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
all+=sum[i];
cnt++;
}
all/=cnt;
printf("%f\n",all);
system("pause");
}
void sort() //职工工资排序
{
int i=0;
int m,n;
double sum[100];
double t;
struct worker p;
for (i=0;i<Number;i++)
sum[i]=wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4;
for(m=1;m<Number;m++){
for(n=1;n<Number;n++){
if(sum[n]>sum[n-1]){
t=sum[n];
sum[n]=sum[n-1];
sum[n-1]=t;
p=wo[n];
wo[n]=wo[n-1];
wo[n-1]=p;
}
}
}
for (i=0;i<Number;i++)
printf ("%s的总工资为:%lf\n",wo[i].name,sum[i]);
system("pause");
}
void modify() //修改职工信息
{
int mode=0;
printf ("请选择修改查找方式\n");
printf ("1 按姓名查找修改\n");
printf ("2 按工号查找修改\n");
scanf ("%d",&mode);
switch (mode){
case 1: xmxg() ;
break ;
case 2:ghxg();
break ;
default : printf ("输入错误!\n");
break ;
}system("pause");
}
void xmxg() //按姓名修改
{
FILE*fp=NULL ;
char name[30];
int i=0;
printf ("请输入要修改的职工姓名:");
scanf ("%s",name);
for (i=0;i<Number;i++)
{
if (strcmp(name,wo[i].name));
else
break;}
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
printf ("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
printf ("请重新输入该职工信息\n");
printf ("姓名:");
scanf ("%s",wo[i].name);
printf ("工号:");
scanf ("%s",wo[i].ID);
printf ("所属部门:");
scanf ("%s",wo[i].depa);
printf ("基本工资:");
scanf ("%d",&wo[i].salary1);
printf ("奖励工资:");
scanf ("%d",&wo[i].salary2);
printf ("补贴项目即金额:");
scanf ("%d",&wo[i].salary3);
printf ("扣除项目即金额:");
scanf ("%d",&wo[i].salary4);
//将剩余数据写入文件擦除以前的数据
fp = fopen ("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose ( fp );
printf("\t=======>修改成功!\n");
system("pause");
}
void ghxg() //按工号修改
{
FILE*fp=NULL ;
char id[30];
int i=0;
printf ("请输入要修改的职工工号:");
scanf ("%s",id);
for (i=0;i<Number;i++)
{
if (strcmp(id,wo[i].ID));
else
break ;}
printf ("姓名 工号 所属部门 基本工资 奖励工资 补贴项目及金额 扣款项目及金额 总工资\n");
printf ("%s %s %s %d %d %d %d %d\n",wo[i].name,wo[i].ID,wo[i].depa,wo[i].salary1,wo[i].salary2,wo[i].salary3,wo[i].salary4,wo[i].salary1+wo[i].salary2+wo[i].salary3-wo[i].salary4);
printf ("请重新输入该职工信息\n");
printf ("姓名:");
scanf ("%s",wo[i].name);
printf ("工号:");
scanf ("%s",wo[i].ID);
printf ("所属部门:");
scanf ("%s",wo[i].depa);
printf ("基本工资:");
scanf ("%d",&wo[i].salary1);
printf ("奖励工资:");
scanf ("%d",&wo[i].salary2);
printf ("补贴项目即金额:");
scanf ("%d",&wo[i].salary3);
printf ("扣除项目即金额:");
scanf ("%d",&wo[i].salary4);
//将剩余数据写入文件擦除以前的数据
fp = fopen ("C://worker.dat","wb");
for (i=0;i<Number;i++)
{
fwrite(&wo[i],sizeof(struct worker),1,fp);
}
fclose ( fp );
printf("\t=======>修改成功!\n");
system("pause");
}
void reserve() //保存数据
{
printf("\t=====>程序在运行时已自动保存....\n");
system("pause");
}
void back()
{
printf("\t=====>按Enter键返回主菜单\n");
system("pause");
}
不知道你这个问题是否已经解决, 如果还没有解决的话: