C语言课程设计题目一:职工信息管理系统设计

看我的C/C++笔记专栏

序号系统设计题目链接
1职工信息管理系统设计链接
2图书信息管理系统设计链接
3图书管理系统设计链接
4实验设备管理系统设计链接
5西文下拉菜单的设计链接
6学生信息管理系统设计链接
7学生成绩管理系统设计链接
8学生选修课程系统设计课程管理系统
9学生成绩记录簿设计链接
10学生籍贯信息记录簿设计链接
11学生通讯录管理系统设计链接
12职工工作量统计系统设计链接
13销售管理系统设计链接
14成绩管理系统设计链接
15通信录管理系统设计链接
16学生管理系统设计链接
17单项选择题标准化考试系统设计链接
18设计一个简单计算器链接
19编写一万年历系统链接
20模拟时钟转动程序链接
21完整的学生成绩管理系统链接
22数字加一游戏链接
23聊天机器人链接
24音乐小天才链接

题目一:职工信息管理系统设计

职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。
设计职工信息管理系统,功能包括:

  1. 系统以菜单方式工作。
  2. 职工信息录入功能(职工信息用文件保存)--输入。
  3. 职工信息浏览功能--输出。
  4. 职工信息查询功能--算法。
    • 按学历查询等。
    • 按职工号查询等。
  5. 职工信息删除、修改功能(可选项)。

代码块

在这里插入图片描述

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;
}

调试验证

录入信息,并浏览

在这里插入图片描述
在这里插入图片描述

验证职工号唯一

在这里插入图片描述

保存职工信息,加载职工信息

在这里插入图片描述

在这里插入图片描述

按职工号进行查询

在这里插入图片描述

根据id删除职工

在这里插入图片描述

修改职工信息

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值