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

news2024/11/14 23:06:33

文章目录

  • 题目一:职工信息管理系统设计
  • 代码块
      • employeeManagement.h
      • employeeManage.c
      • test.c
  • 调试验证
      • 录入信息,并浏览
      • 验证职工号唯一
      • 保存职工信息,加载职工信息
      • 按职工号进行查询
      • 根据id删除职工
      • 修改职工信息

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

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

  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删除职工

在这里插入图片描述

修改职工信息

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2163552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国家首次向全社会提供永久基本农田查询服务

自然资源部永久基本农田查询平台正式上线。 据悉&#xff0c;这是国家首次向全社会提供永久基本农田查询服务。 如何查询永久基本农田信息 永久基本农田查询平台正式上线&#xff0c;是对永久基本农田依法实施特殊保护的重要举措&#xff0c;是对各地已开展的永久基本农田公…

分割掩码标注转YOLO多边形标注

Ultralytics 团队付出了巨大的努力&#xff0c;使创建自定义 YOLO 模型变得非常容易。但是&#xff0c;处理大型数据集仍然很痛苦。训练 yolo 分割模型需要数据集具有其特定格式&#xff0c;这可能与你从大型数据集中获得的格式不完全相同。如果你想使用巨大的 OpenImagesV7 作…

MIPI包分析

如下图所示&#xff0c;长方形圈出来的是数据包的规定区域&#xff0c;注意SOT不在packet的定义区间。 分析可知&#xff0c;第一byte就知道包的类型&#xff0c;姑且记作VC2DT6。DT6就是6bits的data type。显而易见总共定义了64中类型&#xff0c;规范中定义了一些&#xff0…

【C++掌中宝】C++ 中的空指针救世主——nullptr

文章目录 1. 什么是 NULL&#xff1f;2. NULL 在 C 和 C 中的区别3. C11 引入 nullptr 的原因4. nullptr 与 NULL 的区别5. nullptr 的应用场景6. 模拟 nullptr 的实现7. 总结结语 1. 什么是 NULL&#xff1f; 在 C 和 C 编程中&#xff0c;NULL 常用于表示空指针&#xff0c;…

展示中国客车硬实力!苏州金龙海格纯电客车惊艳汉诺威商用车展

德国当地时间2024年9月22日&#xff0c;IAA汉诺威商用车展在德国汉诺威展览中心圆满落幕。本届展会&#xff0c;苏州金龙海格客车携新能源公交明星产品Azure7、斯堪尼亚海格高端巴士Fencer F1 Integral EV纯电车型重磅亮相&#xff0c;获得了众多参会嘉宾的好评和关注。来自欧洲…

【活动】人工智能时代,程序员如何保持核心竞争力?需要掌握哪些技能?

人工智能时代&#xff0c;程序员如何保持核心竞争力&#xff1f; 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;程序员面临着前所未有的挑战和机遇。AI不仅改变了软件开发的方式&#xff0c;也重新定义了程序员的角色。在这种背景下&#xff0c;如何保持…

人工智能助力阿尔茨海默症治疗:微软与上海精神卫生中心的新研究

最近&#xff0c;微软研究院与上海市精神卫生中心合作&#xff0c;基于微软 Azure OpenAI 服务中的多模态大模型&#xff0c;开发了一种名为“忆我”&#xff08;ReMe&#xff09;的个性化认知训练框架。这一创新项目旨在通过数字化手段扩展自动化认知训练的范围&#xff0c;为…

2025考研,报名和初试时间定了!

2025年全国硕士研究生招生初试时间为2024年12月21日至22日&#xff0c;考试时长为6小时的考试科目在12月23日举行。 请考生届时登录“中国研究生招生信息网”&#xff08;网址&#xff1a;https://yz.chsi.com.cn&#xff09;参加报名&#xff0c;查看报名须知、招生单位招生章…

软考高级:云计算架构的五层 AI 解读

云计算架构通常由多个层次构成&#xff0c;每个层次负责不同的功能&#xff0c;协同工作来提供完整的云服务。下面我将详细解释云计算架构的五个主要层次&#xff1a;管理层、用户访问层、应用层、平台层和资源层。 生活化例子 想象一下&#xff0c;云计算架构就像是一座大型…

从金蝶云星空到管易云通过接口配置打通数据

从金蝶云星空到管易云通过接口配置打通数据 接通系统&#xff1a;金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。K/3Cloud支持…

yolov8环境安装

yolov8 git地址 https://github.com/ultralytics/ultralytics/tree/main 我的电脑显卡配置 nvidia-smi cuda11.8下载 https://developer.nvidia.com/cuda-11-8-0-download-archive?target_osWindows&target_archx86_64&target_version10&target_typeexe_local …

保姆级教程!0基础小白也适用,教你用AI美女在小红书“疯狂上分”

文章开始之前&#xff0c;先考考各位小伙伴的眼力&#xff1a;下面的图是真人还是 AI&#xff0c;你能分辨出来吗&#xff1f; 答案是&#xff1a;AI&#xff0c;AI&#xff0c;全是使用stable diffusion生成的AI美女&#xff01; 说实话&#xff0c;最近AI美女是彻底杀疯了&a…

大数据Hive组件安装

组件版本 组件版本Hadoop3.3.0JDK1.8.0_241Mysql5.7.25Hive3.1.2 Hadoop集群服务分布 Node1Node2Node3NameNode DataNode DataNodeDataNode NodeManager NodeManagerResourceManagerSecondaryNameNode 安装前请确定Hadoop集群服务全部启动&#xff0c;不然后续测试时会报…

【学习笔记】手写 Tomcat 四

目录 一、Read 方法返回 -1 的问题 二、JDBC 优化 1. 创建配置文件 2. 创建工具类 3. 简化 JDBC 的步骤 三、修改密码 优化返回数据 创建修改密码的页面 注意 测试 四、优化响应动态资源 1. 创建 LoginServlet 类 2. 把登录功能的代码放到 LoginServlet 类 3. 创…

企业新购买的设备需要做仪器校准吗?为什么新设备也要做检测?

企业在定制一批设备仪器到厂后&#xff0c;会需要对设备进行验货和接收&#xff0c;而这个环节很多人对于设备是否同时需要先做校准的问题犹豫不决&#xff0c;一些企业觉得新设备都是刚买的&#xff0c;做仪器校准没有必要&#xff0c;但是另一部分认为即便是新买的仪器也要先…

easyexcel常见问题分析

文章目录 一、读取数字多了很多小数位的精度问题 一、读取数字多了很多小数位的精度问题 浮点型转成BigDecimal的时候会出现精度问题&#xff0c;例如 这儿设置的实体类对象类型是String&#xff0c;默认用到的是StringNumberConverter转换器 2.1.4 版本 public class Strin…

葡萄城亮相2024全球产品经理大会,共探创新之旅

葡萄城亮相2024全球产品经理大会&#xff0c;共探创新之旅 9 月 20-21 日&#xff0c;由 CSDN 举办的“2024 全球产品经理大会”于北京盛大开幕&#xff0c;现场超 40 位互联网与科技产品领域专业人士发表主题演讲&#xff0c;1000 与会者齐聚一堂。 大会现场气氛热烈&#…

【LangChain系列】实战案例5:用LangChain实现灵活的Agents+RAG,该查时查,不该查时就别查

目前为止&#xff0c;我们实现的RAG练习中&#xff0c;答案都是全部来源于检索到的文本内容。而检索过程可能在某些情况下是不需要的。 如何优化这个过程&#xff0c;让我们的RAG程序在必要时才去检索&#xff0c;不必要时&#xff0c;直接使用大模型原有数据来回答呢&#xf…

Python酷玩之旅_如何在Centos8顺利安装Python最新版(3.12)

全文导览 前言Q&#xff1a;如何在Centos8顺利安装Python最新版一. 下载安装包1.1 wget1.2. 官网下载 二. 执行安装2.1. 检查环境2.2. 安装依赖2.3. 解压tgz包2.4. 编译2.5. 安装2.6. 设置环境变量2.6.1 编辑/etc/profile2.6.2 激活生效 三. 操作示例3.1. helloworld 结语 前言…

DevOps学习路线图

DevOps 是软件工程领域中的一种文化和实践方法&#xff0c;它将开发 (Dev) 和运维 (Ops) 相结合&#xff0c;从而在应用程序规划、开发、交付和运营中统一人员、流程和技术。 DevOps 支持以前孤立角色&#xff08;如开发、IT 运营、质量工程和安全&#xff09;之间的协调和协作…