职工信息管理系统设计 总体需求 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。所有信息用文件保存。 功能要求: (1)系统以菜单方式工作 (2)职工信息录入功能(职工信息用文件保存)——输入 (3)职工信息浏览功能——输出 (4)查询或排序功能:按工资查询,按学历查询等 (5)职工信息删除功能 (6)职工信息修改功能 (7)按照某种信息进行排序显示(比如工资从低到高等)。用c语言实现
时间: 2023-12-19 16:21:46 浏览: 24
以下是一个简单的职工信息管理系统设计,实现了上述功能要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_WORKERS 100 // 最大职工数
#define MAX_NAME 20 // 姓名最大长度
#define MAX_ADDRESS 50 // 地址最大长度
#define FILENAME "workers.dat" // 保存职工信息的文件名
// 职工信息结构体
typedef struct {
int id; // 职工号
char name[MAX_NAME]; // 姓名
char sex[4]; // 性别
char birth[11]; // 出生年月,格式为 yyyy-mm-dd
char education[10]; // 学历
char position[20]; // 职务
float salary; // 工资
char address[MAX_ADDRESS]; // 住址
char phone[20]; // 电话
} Worker;
// 全局变量,保存职工信息
Worker workers[MAX_WORKERS];
int num_workers = 0;
// 菜单函数
void menu() {
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("8. 退出\n");
printf("-----------------\n");
printf("请选择操作:");
}
// 录入职工信息函数
void add_worker() {
if (num_workers == MAX_WORKERS) {
printf("职工信息已满,无法继续添加!\n");
return;
}
Worker worker;
printf("请输入职工号:");
scanf("%d", &worker.id);
for (int i = 0; i < num_workers; i++) {
if (workers[i].id == worker.id) {
printf("职工号重复,无法添加!\n");
return;
}
}
printf("请输入姓名:");
scanf("%s", worker.name);
printf("请输入性别:");
scanf("%s", worker.sex);
printf("请输入出生年月(格式为 yyyy-mm-dd):");
scanf("%s", worker.birth);
printf("请输入学历:");
scanf("%s", worker.education);
printf("请输入职务:");
scanf("%s", worker.position);
printf("请输入工资:");
scanf("%f", &worker.salary);
printf("请输入住址:");
scanf("%s", worker.address);
printf("请输入电话:");
scanf("%s", worker.phone);
workers[num_workers] = worker;
num_workers++;
printf("职工信息添加成功!\n");
}
// 浏览职工信息函数
void show_workers() {
if (num_workers == 0) {
printf("没有职工信息!\n");
return;
}
printf("|%-10s|%-10s|%-6s|%-12s|%-8s|%-12s|%-10s|%-20s|%-20s|\n", "职工号", "姓名", "性别", "出生年月", "学历", "职务", "工资", "住址", "电话");
for (int i = 0; i < num_workers; i++) {
printf("|%-10d|%-10s|%-6s|%-12s|%-8s|%-12s|%-10.2f|%-20s|%-20s|\n", workers[i].id, workers[i].name, workers[i].sex, workers[i].birth, workers[i].education, workers[i].position, workers[i].salary, workers[i].address, workers[i].phone);
}
}
// 按工资查询函数
void search_by_salary() {
float min_salary, max_salary;
printf("请输入最低工资:");
scanf("%f", &min_salary);
printf("请输入最高工资:");
scanf("%f", &max_salary);
printf("|%-10s|%-10s|%-6s|%-12s|%-8s|%-12s|%-10s|%-20s|%-20s|\n", "职工号", "姓名", "性别", "出生年月", "学历", "职务", "工资", "住址", "电话");
for (int i = 0; i < num_workers; i++) {
if (workers[i].salary >= min_salary && workers[i].salary <= max_salary) {
printf("|%-10d|%-10s|%-6s|%-12s|%-8s|%-12s|%-10.2f|%-20s|%-20s|\n", workers[i].id, workers[i].name, workers[i].sex, workers[i].birth, workers[i].education, workers[i].position, workers[i].salary, workers[i].address, workers[i].phone);
}
}
}
// 按学历查询函数
void search_by_education() {
char education[10];
printf("请输入学历:");
scanf("%s", education);
printf("|%-10s|%-10s|%-6s|%-12s|%-8s|%-12s|%-10s|%-20s|%-20s|\n", "职工号", "姓名", "性别", "出生年月", "学历", "职务", "工资", "住址", "电话");
for (int i = 0; i < num_workers; i++) {
if (strcmp(workers[i].education, education) == 0) {
printf("|%-10d|%-10s|%-6s|%-12s|%-8s|%-12s|%-10.2f|%-20s|%-20s|\n", workers[i].id, workers[i].name, workers[i].sex, workers[i].birth, workers[i].education, workers[i].position, workers[i].salary, workers[i].address, workers[i].phone);
}
}
}
// 删除职工信息函数
void delete_worker() {
int id;
printf("请输入要删除的职工号:");
scanf("%d", &id);
int index = -1; // 要删除的职工在数组中的下标
for (int i = 0; i < num_workers; i++) {
if (workers[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("没有找到要删除的职工!\n");
return;
}
for (int i = index; i < num_workers - 1; i++) {
workers[i] = workers[i + 1];
}
num_workers--;
printf("职工信息删除成功!\n");
}
// 修改职工信息函数
void modify_worker() {
int id;
printf("请输入要修改的职工号:");
scanf("%d", &id);
int index = -1; // 要修改的职工在数组中的下标
for (int i = 0; i < num_workers; i++) {
if (workers[i].id == id) {
index = i;
break;
}
}
if (index == -1) {
printf("没有找到要修改的职工!\n");
return;
}
printf("请输入姓名(原值为 %s):", workers[index].name);
scanf("%s", workers[index].name);
printf("请输入性别(原值为 %s):", workers[index].sex);
scanf("%s", workers[index].sex);
printf("请输入出生年月(格式为 yyyy-mm-dd,原值为 %s):", workers[index].birth);
scanf("%s", workers[index].birth);
printf("请输入学历(原值为 %s):", workers[index].education);
scanf("%s", workers[index].education);
printf("请输入职务(原值为 %s):", workers[index].position);
scanf("%s", workers[index].position);
printf("请输入工资(原值为 %.2f):", workers[index].salary);
scanf("%f", &workers[index].salary);
printf("请输入住址(原值为 %s):", workers[index].address);
scanf("%s", workers[index].address);
printf("请输入电话(原值为 %s):", workers[index].phone);
scanf("%s", workers[index].phone);
printf("职工信息修改成功!\n");
}
// 按工资排序函数
void sort_by_salary() {
for (int i = 0; i < num_workers - 1; i++) {
for (int j = i + 1; j < num_workers; j++) {
if (workers[i].salary > workers[j].salary) {
Worker temp = workers[i];
workers[i] = workers[j];
workers[j] = temp;
}
}
}
printf("按工资排序成功!\n");
}
// 保存职工信息到文件函数
void save_workers() {
FILE *fp;
fp = fopen(FILENAME, "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(workers, sizeof(Worker), num_workers, fp);
fclose(fp);
printf("职工信息保存成功!\n");
}
// 从文件中读取职工信息函数
void load_workers() {
FILE *fp;
fp = fopen(FILENAME, "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
num_workers = fread(workers, sizeof(Worker), MAX_WORKERS, fp);
fclose(fp);
printf("职工信息加载成功!\n");
}
int main() {
load_workers(); // 程序运行前从文件中读取职工信息
while (1) {
menu();
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_worker();
break;
case 2:
show_workers();
break;
case 3:
search_by_salary();
break;
case 4:
search_by_education();
break;
case 5:
delete_worker();
break;
case 6:
modify_worker();
break;
case 7:
sort_by_salary();
break;
case 8:
save_workers(); // 程序结束前将职工信息保存到文件
printf("再见!\n");
return 0;
default:
printf("输入有误,请重新选择!\n");
break;
}
}
}
```
注意:为了实现职工信息的永久保存,程序运行前会从文件中读取职工信息,程序结束前会将职工信息保存到文件。文件名为 "workers.dat",可以根据需要更改。