用C语言编写工资管理系统软件,职工数据包括:职工号,姓名,基本补贴金额,奖励金额,扣除金额、实发工资等),注: 其中实发工资=基本+补贴金额 + 奖励金额-扣除金额,要求职工数据保存到一个文件中。完成1能: (1)输入职工数据 (2)能够查询某位职工的相关数据 (3)能够对职工的各项信息进行修改 (4)能够统计出所有职工的平均工资 (5) 退出程序。
时间: 2024-01-22 22:17:55 浏览: 66
以下是用C语言实现的工资管理系统软件代码,包括功能1-5:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 100 // 最大职工数
#define EMP_FILE "employee.dat" // 职工数据文件名
// 职工结构体
struct Employee {
int id; // 职工号
char name[20]; // 姓名
float basic_salary; // 基本工资
float subsidy; // 补贴金额
float reward; // 奖励金额
float deduction; // 扣除金额
float real_salary; // 实发工资
};
// 全局变量
struct Employee employees[MAX_EMPLOYEES]; // 职工数组
int num_employees = 0; // 职工数
// 函数声明
void load_employees(); // 从文件中加载职工数据
void save_employees(); // 将职工数据保存到文件
void input_employee(); // 输入职工数据
void query_employee(); // 查询职工数据
void modify_employee(); // 修改职工数据
void calculate_average_salary(); // 统计平均工资
// 主函数
int main() {
// 加载职工数据
load_employees();
// 显示菜单
int choice;
do {
printf("\n工资管理系统菜单\n");
printf("1. 输入职工数据\n");
printf("2. 查询职工数据\n");
printf("3. 修改职工数据\n");
printf("4. 统计平均工资\n");
printf("5. 退出程序\n");
printf("请选择操作(1-5): ");
scanf("%d", &choice);
switch (choice) {
case 1:
input_employee();
break;
case 2:
query_employee();
break;
case 3:
modify_employee();
break;
case 4:
calculate_average_salary();
break;
case 5:
break;
default:
printf("无效的选择,请重新输入!\n");
}
} while (choice != 5);
// 保存职工数据到文件
save_employees();
return 0;
}
// 从文件中加载职工数据
void load_employees() {
FILE *fp = fopen(EMP_FILE, "rb");
if (fp == NULL) {
printf("无法打开职工数据文件 %s!\n", EMP_FILE);
return;
}
num_employees = 0;
while (fread(&employees[num_employees], sizeof(struct Employee), 1, fp) == 1) {
num_employees++;
}
fclose(fp);
printf("成功加载 %d 条职工数据!\n", num_employees);
}
// 将职工数据保存到文件
void save_employees() {
FILE *fp = fopen(EMP_FILE, "wb");
if (fp == NULL) {
printf("无法创建职工数据文件 %s!\n", EMP_FILE);
return;
}
fwrite(employees, sizeof(struct Employee), num_employees, fp);
fclose(fp);
printf("成功保存 %d 条职工数据到文件 %s!\n", num_employees, EMP_FILE);
}
// 输入职工数据
void input_employee() {
if (num_employees >= MAX_EMPLOYEES) {
printf("职工数已达到最大值 %d,无法继续添加!\n", MAX_EMPLOYEES);
return;
}
struct Employee emp;
printf("请输入职工号: ");
scanf("%d", &emp.id);
printf("请输入姓名: ");
scanf("%s", emp.name);
printf("请输入基本工资: ");
scanf("%f", &emp.basic_salary);
printf("请输入补贴金额: ");
scanf("%f", &emp.subsidy);
printf("请输入奖励金额: ");
scanf("%f", &emp.reward);
printf("请输入扣除金额: ");
scanf("%f", &emp.deduction);
emp.real_salary = emp.basic_salary + emp.subsidy + emp.reward - emp.deduction;
employees[num_employees] = emp;
num_employees++;
printf("成功添加职工 %s 的数据!\n", emp.name);
}
// 查询职工数据
void query_employee() {
int id;
printf("请输入要查询的职工号: ");
scanf("%d", &id);
int index = -1;
for (int i = 0; i < num_employees; i++) {
if (employees[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("职工号为 %d 的职工不存在!\n", id);
} else {
struct Employee emp = employees[index];
printf("职工号: %d\n", emp.id);
printf("姓名: %s\n", emp.name);
printf("基本工资: %.2f\n", emp.basic_salary);
printf("补贴金额: %.2f\n", emp.subsidy);
printf("奖励金额: %.2f\n", emp.reward);
printf("扣除金额: %.2f\n", emp.deduction);
printf("实发工资: %.2f\n", emp.real_salary);
}
}
// 修改职工数据
void modify_employee() {
int id;
printf("请输入要修改的职工号: ");
scanf("%d", &id);
int index = -1;
for (int i = 0; i < num_employees; i++) {
if (employees[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("职工号为 %d 的职工不存在!\n", id);
} else {
struct Employee emp = employees[index];
printf("职工号: %d\n", emp.id);
printf("姓名: %s\n", emp.name);
printf("基本工资: %.2f\n", emp.basic_salary);
printf("补贴金额: %.2f\n", emp.subsidy);
printf("奖励金额: %.2f\n", emp.reward);
printf("扣除金额: %.2f\n", emp.deduction);
printf("实发工资: %.2f\n", emp.real_salary);
printf("请输入新的基本工资(原值为 %.2f): ", emp.basic_salary);
scanf("%f", &emp.basic_salary);
printf("请输入新的补贴金额(原值为 %.2f): ", emp.subsidy);
scanf("%f", &emp.subsidy);
printf("请输入新的奖励金额(原值为 %.2f): ", emp.reward);
scanf("%f", &emp.reward);
printf("请输入新的扣除金额(原值为 %.2f): ", emp.deduction);
scanf("%f", &emp.deduction);
emp.real_salary = emp.basic_salary + emp.subsidy + emp.reward - emp.deduction;
employees[index] = emp;
printf("成功修改职工 %s 的数据!\n", emp.name);
}
}
// 统计平均工资
void calculate_average_salary() {
if (num_employees == 0) {
printf("没有职工数据,无法统计平均工资!\n");
return;
}
float total_salary = 0;
for (int i = 0; i < num_employees; i++) {
total_salary += employees[i].real_salary;
}
float avg_salary = total_salary / num_employees;
printf("所有职工的平均工资为: %.2f\n", avg_salary);
}
```
注意:本程序中使用了文件读写操作,需要确保程序所在的目录有读写权限。
阅读全文