C语言程序设计职工工资管理系统,要求可以在visual studio2022上正常运行
时间: 2025-07-23 18:38:33 浏览: 0
<think>我们被要求用C语言编写一个职工工资管理系统,并在VisualStudio2022上运行。系统应该包括以下基本功能:1.添加职工信息2.显示所有职工信息3.查询职工信息(例如按工号或姓名)4.修改职工信息5.删除职工信息6.统计(如计算平均工资,总工资等)7.保存数据到文件8.从文件加载数据我们将使用结构体来表示职工信息,包括工号、姓名、部门、基本工资、奖金、扣款、实发工资等。实发工资可以通过计算得到:实发工资=基本工资+奖金-扣款。考虑到程序的结构,我们将使用数组来存储职工信息(为了简单,我们使用固定大小的数组,也可以考虑动态数组或链表)。同时,我们会实现一个菜单界面。注意:由于在VisualStudio2022中,C语言使用scanf等函数时会被认为不安全,我们可以使用scanf_s,或者定义_CRT_SECURE_NO_WARNINGS来避免警告。下面是一个示例代码框架:</think>以下是一个基于C语言的职工工资管理系统示例代码,可在Visual Studio 2022上运行。系统包含基本工资管理功能,使用结构体和文件存储数据。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 100 // 最大职工数
#define DATA_FILE "employees.dat" // 数据存储文件
// 职工结构体
typedef struct {
int id; // 工号
char name[50]; // 姓名
char dept[30]; // 部门
double base_sal; // 基本工资
double bonus; // 奖金
double deduction; // 扣款
double net_sal; // 实发工资
} Employee;
Employee employees[MAX_EMPLOYEES];
int employee_count = 0;
// 函数声明
void add_employee();
void display_all();
void search_employee();
void modify_employee();
void delete_employee();
void calculate_statistics();
void save_to_file();
void load_from_file();
void calculate_net_salary(Employee *emp);
int main() {
load_from_file(); // 启动时加载数据
int choice;
do {
printf("\n=== 职工工资管理系统 ===\n");
printf("1. 添加职工\n");
printf("2. 显示所有职工\n");
printf("3. 查询职工\n");
printf("4. 修改职工信息\n");
printf("5. 删除职工\n");
printf("6. 工资统计\n");
printf("7. 保存数据\n");
printf("0. 退出\n");
printf("请选择操作: ");
scanf("%d", &choice);
switch(choice) {
case 1: add_employee(); break;
case 2: display_all(); break;
case 3: search_employee(); break;
case 4: modify_employee(); break;
case 5: delete_employee(); break;
case 6: calculate_statistics(); break;
case 7: save_to_file(); break;
case 0: save_to_file(); printf("数据已保存,再见!\n"); break;
default: printf("无效选项!\n");
}
} while(choice != 0);
return 0;
}
// 计算实发工资
void calculate_net_salary(Employee *emp) {
emp->net_sal = emp->base_sal + emp->bonus - emp->deduction;
}
// 添加职工
void add_employee() {
if(employee_count >= MAX_EMPLOYEES) {
printf("职工数量已达上限!\n");
return;
}
Employee emp;
printf("\n输入工号: ");
scanf("%d", &emp.id);
printf("输入姓名: ");
scanf("%s", emp.name);
printf("输入部门: ");
scanf("%s", emp.dept);
printf("输入基本工资: ");
scanf("%lf", &emp.base_sal);
printf("输入奖金: ");
scanf("%lf", &emp.bonus);
printf("输入扣款: ");
scanf("%lf", &emp.deduction);
calculate_net_salary(&emp);
employees[employee_count++] = emp;
printf("职工添加成功!\n");
}
// 显示所有职工
void display_all() {
if(employee_count == 0) {
printf("没有职工记录!\n");
return;
}
printf("\n工号\t姓名\t部门\t基本工资\t奖金\t扣款\t实发工资\n");
for(int i = 0; i < employee_count; i++) {
printf("%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",
employees[i].id,
employees[i].name,
employees[i].dept,
employees[i].base_sal,
employees[i].bonus,
employees[i].deduction,
employees[i].net_sal);
}
}
// 查询职工
void search_employee() {
int id;
printf("输入要查询的工号: ");
scanf("%d", &id);
for(int i = 0; i < employee_count; i++) {
if(employees[i].id == id) {
printf("\n工号: %d\n姓名: %s\n部门: %s\n基本工资: %.2f\n奖金: %.2f\n扣款: %.2f\n实发工资: %.2f\n",
employees[i].id,
employees[i].name,
employees[i].dept,
employees[i].base_sal,
employees[i].bonus,
employees[i].deduction,
employees[i].net_sal);
return;
}
}
printf("未找到该职工!\n");
}
// 修改职工信息
void modify_employee() {
int id;
printf("输入要修改的工号: ");
scanf("%d", &id);
for(int i = 0; i < employee_count; i++) {
if(employees[i].id == id) {
printf("输入新姓名: ");
scanf("%s", employees[i].name);
printf("输入新部门: ");
scanf("%s", employees[i].dept);
printf("输入新基本工资: ");
scanf("%lf", &employees[i].base_sal);
printf("输入新奖金: ");
scanf("%lf", &employees[i].bonus);
printf("输入新扣款: ");
scanf("%lf", &employees[i].deduction);
calculate_net_salary(&employees[i]);
printf("信息修改成功!\n");
return;
}
}
printf("未找到该职工!\n");
}
// 删除职工
void delete_employee() {
int id;
printf("输入要删除的工号: ");
scanf("%d", &id);
for(int i = 0; i < employee_count; i++) {
if(employees[i].id == id) {
for(int j = i; j < employee_count - 1; j++) {
employees[j] = employees[j+1];
}
employee_count--;
printf("职工删除成功!\n");
return;
}
}
printf("未找到该职工!\n");
}
// 工资统计
void calculate_statistics() {
if(employee_count == 0) {
printf("没有职工记录!\n");
return;
}
double total_net = 0, max_sal = employees[0].net_sal, min_sal = employees[0].net_sal;
for(int i = 0; i < employee_count; i++) {
total_net += employees[i].net_sal;
if(employees[i].net_sal > max_sal) max_sal = employees[i].net_sal;
if(employees[i].net_sal < min_sal) min_sal = employees[i].net_sal;
}
printf("\n工资统计结果:\n");
printf("职工总数: %d\n", employee_count);
printf("总工资额: %.2f\n", total_net);
printf("平均工资: %.2f\n", total_net / employee_count);
printf("最高工资: %.2f\n", max_sal);
printf("最低工资: %.2f\n", min_sal);
}
// 保存到文件
void save_to_file() {
FILE *fp = fopen(DATA_FILE, "wb");
if(fp == NULL) {
printf("文件保存失败!\n");
return;
}
fwrite(&employee_count, sizeof(int), 1, fp);
fwrite(employees, sizeof(Employee), employee_count, fp);
fclose(fp);
printf("数据已保存到 %s\n", DATA_FILE);
}
// 从文件加载
void load_from_file() {
FILE *fp = fopen(DATA_FILE, "rb");
if(fp == NULL) {
printf("无历史数据,将创建新文件\n");
return;
}
fread(&employee_count, sizeof(int), 1, fp);
fread(employees, sizeof(Employee), employee_count, fp);
fclose(fp);
printf("已加载 %d 条职工记录\n", employee_count);
}
```
### 功能说明
1. **数据结构**:使用`Employee`结构体存储工资信息
2. **核心功能**:
- 添加/删除/修改职工信息
- 工资计算(实发工资 = 基本工资 + 奖金 - 扣款)
- 按工号查询
- 工资统计(总额/平均/最高/最低)
3. **数据持久化**:使用二进制文件保存数据
4. **用户界面**:控制台菜单交互
### 在Visual Studio 2022运行步骤
1. 创建新项目:选择"C++ 控制台应用"
2. 将文件重命名为`.c`扩展名(如`main.c`)
3. 复制上述代码到文件
4. 如需禁用安全警告,可在文件开头添加:
```c
#define _CRT_SECURE_NO_WARNINGS
```
5. 编译运行(Ctrl+F5)
### 系统优化建议
1. 增加输入验证(如工资不能为负数)
2. 添加部门工资统计功能
3. 实现按姓名模糊查询
4. 增加数据备份机制
5. 添加排序功能(如按工资排序)
阅读全文
相关推荐



















