文章目录
- 题目一:职工信息管理系统设计
- 代码块
- employeeManagement.h
- employeeManage.c
- test.c
- 调试验证
- 录入信息,并浏览
- 验证职工号唯一
- 保存职工信息,加载职工信息
- 按职工号进行查询
- 根据id删除职工
- 修改职工信息
题目一:职工信息管理系统设计
职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
设计职工信息管理系统,功能包括:
- 系统以菜单方式工作。
- 职工信息录入功能(职工信息用文件保存)--输入。
- 职工信息浏览功能--输出。
- 职工信息查询功能--算法。
- 按学历查询等。
- 按职工号查询等。
- 职工信息删除、修改功能(可选项)。
代码块
employeeManagement.h
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义最大职工数量
#define MAX_EMPLOYEES 100
//定义职工结构体
typedef struct {
int id; // 职工号
char name[50]; // 姓名
char gender[50]; // 性别
int age; // 年龄
char education[50]; // 学历
double salary; // 工资
char address[100]; // 地址
char phone[20]; // 电话
}Employee;
// 显示菜单
void showMenu();
// 主菜单函数
void menu(Employee* employees, int* count);
// 打印单个职工信息
void printEmployee(Employee emp);
// 检查职工号是否唯一
int isIdUnique(Employee* employees, int count, int id);
// 添加职工信息
void addEmployee(Employee* employees, int* count);
// 显示所有职工信息
void displayEmployee(Employee* employees, int count);
// 按学历查询职工信息
void searchByEducation(Employee* employees, int count);
// 按职工号查询职工信息
void searchById(Employee* employees, int count);
// 删除职工信息
void deleteEmployee(Employee* employees, int* count);
// 修改职工信息
void modifyEmployee(Employee* employees, int count);
// 保存职工信息到文件
void saveToFile(Employee* employees, int count);
// 加载职工信息
void loadFromFile(Employee* employees, int* count);
employeeManage.c
#include"employeeManagement.h"
// 显示菜单
void showMenu() {
printf("\n");
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");
printf("请选择操作: ");
}
// 主菜单函数
void menu(Employee* employees, int* count) {
int choice;
while (1) {
showMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
//printf("录入职工信息\n");
addEmployee(employees, count);
break;
case 2:
//printf("浏览职工信息\n");
displayEmployee(employees, *count);
break;
case 3:
//printf("按学历查询职工信息\n");
searchByEducation(employees, *count);
break;
case 4:
//printf("按职工号查询职工信息\n");
searchById(employees, *count);
break;
case 5:
//printf("删除职工信息\n");
deleteEmployee(employees, count);
break;
case 6:
//printf("修改职工信息\n");
modifyEmployee(employees, *count);
break;
case 7:
//printf("退出\n");
saveToFile(employees, *count);
return;
default:
printf("无效的选择,请重新输入。\n");
}
}
}
// 打印单个职工信息
void printEmployee(Employee emp) {
printf("职工号: %d\n", emp.id);
printf("姓名: %s\n", emp.name);
printf("性别: %s\n", emp.gender);
printf("年龄: %d\n", emp.age);
printf("学历: %s\n", emp.education);
printf("工资: %.2f\n", emp.salary);
printf("地址: %s\n", emp.address);
printf("电话: %s\n", emp.phone);
printf("\n");
}
// 检查职工号是否唯一
int isIdUnique(Employee* employees, int count, int id) {
for (int i = 0; i < count; i++) {
if (employees[i].id == id) {
return 0; //职工号不唯一
}
}
return 1;//职工号唯一
}
// 添加职工信息
void addEmployee(Employee* employees, int* count) {
if (*count >= MAX_EMPLOYEES) {
printf("已达到最大容量,无法添加更多职工。\n");
return;
}
Employee* emp = &employees[*count];
int id;
printf("请输入职工号: ");
scanf("%d", &id);
if (!isIdUnique(employees, *count, id)) {
printf("职工号已存在,请重新输入。\n");
return;
}
emp->id = id;
printf("请输入姓名: ");
scanf("%s", emp->name);
printf("请输入性别: ");
scanf("%s", emp->gender);
printf("请输入年龄: ");
scanf("%d", &emp->age);
printf("请输入学历: ");
scanf("%s", emp->education);
printf("请输入工资: ");
scanf("%lf", &emp->salary);
printf("请输入地址: ");
scanf("%s", emp->address);
printf("请输入电话: ");
scanf("%s", emp->phone);
(*count)++;
printf("职工 %s 信息录入成功\n", emp->name);
}
// 显示所有职工信息
void displayEmployee(Employee* employees, int count) {
for (int i = 0; i < count; i++) {
printEmployee(employees[i]);
}
}
// 按学历查询职工信息
void searchByEducation(Employee* employees, int count) {
char education[50];
printf("请输入学历进行查询:");
scanf("%s", education);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(employees[i].education, education) == 0) {
printEmployee(employees[i]);
found = 1;
}
}
if (!found) {
printf("没有找到符合条件的职工。\n");
}
}
// 按职工号查询职工信息
void searchById(Employee* employees, int count) {
int id;
printf("请输入职工号进行查询: ");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (employees[i].id == id) {
printEmployee(employees[i]);
return;
}
}
printf("没有找到该职工号的职工信息。\n");
}
// 删除职工信息
void deleteEmployee(Employee* employees, int* count) {
int id;
printf("请输入要删除的职工号: ");
scanf("%d", &id);
for (int i = 0; i < *count; i++) {
if (employees[i].id == id) {
//将要删除的职工信息后移
for (int j = i; j < *count - 1; j++) {
employees[j] = employees[j + 1];
}
(*count)--;//总数减一
printf("职工号 %d 的信息已经删除。\n", id);
return;
}
}
printf("没有找到该职工号的职工信息,无法删除。\n");
}
// 修改职工信息
void modifyEmployee(Employee* employees, int count) {
int id;
printf("请输入要修改的职工号:");
scanf("%d", &id);
for (int i = 0; i < count; i++) {
if (employees[i].id == id) {
// 提示用户输入新的信息
printf("请输入新的姓名: ");
scanf("%s", employees[i].name);
printf("请输入新的性别: ");
scanf("%s", employees[i].gender);
printf("请输入新的年龄: ");
scanf("%d", &employees[i].age);
printf("请输入新的学历: ");
scanf("%s", employees[i].education);
printf("请输入新的工资: ");
scanf("%lf", &employees[i].salary);
printf("请输入新的地址: ");
scanf("%s", employees[i].address);
printf("请输入新的电话: ");
scanf("%s", employees[i].phone);
printf("职工号 %d 的信息已修改。\n", id);
return;
}
}
printf("没有找到该职工号的职工信息,无法修改。\n");
}
// 保存职工信息到文件
void saveToFile(Employee* employees, int count) {
FILE* file = fopen("employees.txt", "w");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
for (int i = 0; i < count; i++) {
Employee* emp = &employees[i];
fprintf(file, "%d %s %s %d %s %.2f %s %s\n",
emp->id, emp->name, emp->gender, emp->age,
emp->education, emp->salary, emp->address, emp->phone);
}
fclose(file);
printf("职工信息保存成功。\n");
}
// 加载职工信息
void loadFromFile(Employee* employees, int* count) {
FILE* file = fopen("employees.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return;
}
*count = 0;
while (*count < MAX_EMPLOYEES && fscanf(file, "%d %s %s %d %s %lf %s %s",
&employees[*count].id,
employees[*count].name,
employees[*count].gender,
&employees[*count].age,
employees[*count].education,
&employees[*count].salary,
employees[*count].address,
employees[*count].phone) == 8) {
(*count)++;
}
fclose(file);
printf("从文件加载了 %d 条记录。\n", *count);
}
test.c
#include"employeeManagement.h"
int main() {
Employee employees[MAX_EMPLOYEES];
int count = 0;
loadFromFile(employees, &count);
menu(employees, &count);
return 0;
}
调试验证
录入信息,并浏览