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

文章目录

  • 题目一:职工信息管理系统设计
  • 代码块
      • 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.mzph.cn/diannao/54693.shtml

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

相关文章

下水道内缺陷识别检测数据集 yolo数据集 共2300张

下水道内缺陷识别检测数据集 yolo数据集 共2300张 下水道内部缺陷识别数据集&#xff08;Sewer Interior Defect Recognition Dataset, SIDRD&#xff09; 摘要 SIDRD 是一个专门针对下水道内部缺陷识别的数据集&#xff0c;旨在为城市基础设施维护和管理提供一个标准化的训练…

VmWare安装虚拟机保姆级教程(centos7,虚拟机网络设置,虚拟机桌面显示)

VMWare下载&#xff1a; 下载 VMware Workstation Pro - VMware Customer Connect 安装包&#xff1a;&#xff08;16的版本&#xff09;免费&#xff01;&#xff08;一个赞就行&#xff09; 一直点下一步即可&#xff0c;注意修改一下安装位置就好 二、安装虚拟机 安装虚…

论文复现:考虑电网交互的风电、光伏与电池互补调度运行(MATLAB-Yalmip-Cplex全代码)

论文复现:考虑电网交互的风电、光伏与电池储能互补调度运行(MATLAB-Yalmip-Cplex全代码) 针对风电、光伏与电化学储能电站互补运行的问题,已有大量通过启发式算法寻优的案例,但工程上更注重实用性和普适性。Yalmip工具箱则是一种基于MATLAB平台的优化软件工具箱,被广泛应用…

MyBatis-Mapper 接口与 XML 映射

MyBatis 是一款流行的持久层框架&#xff0c;提供了对 SQL 语句的良好支持和灵活的配置方式。在 MyBatis 中&#xff0c;可以通过两种方式进行 SQL 映射&#xff1a;Mapper 接口 和 XML 映射。这两种方式各有优劣&#xff0c;灵活的使用能够满足不同的开发需求。 一、MyBatis …

[uni-app]小兔鲜-02项目首页

轮播图 轮播图组件需要在首页和分类页使用, 封装成通用组件 准备轮播图组件 <script setup lang"ts"> import type { BannerItem } from /types/home import { ref } from vue // 父组件的数据 defineProps<{list: BannerItem[] }>()// 高亮下标 const…

【React】Ant Design 5.x版本drawer抽屉黑边问题

环境 antd: ^5.14.1react: ^18 问题情况 <Drawer open{open} closable{false} mask{false} width{680}getContainer{props.getContainer || undefined}><p>Some contents...</p><p>Some contents...</p><p>Some contents...</p> …

时序数据库 TDengine 的入门体验和操作记录

时序数据库 TDengine 的学习和使用经验 什么是 TDengine &#xff1f;什么是时序数据 &#xff1f;使用RPM安装包部署默认的网络端口 TDengine 使用TDengine 命令行&#xff08;CLI&#xff09;taosBenchmark服务器内存需求删库跑路测试 使用体验文档纠错 什么是 TDengine &…

OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例

✨报告阅读&#xff1a;使用大模型来学习推理(Reason) 首先是原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 接下来我们看一个简单的关于模型安全性的测试&#xff0c;当模型被问到一个有风险的话题时&#xff0c;会如何思考并回答用户呢&…

深度学习:数据增强

目录 前言 一、为什么要使用数据增强&#xff1f; 二、数据增强有哪些方法&#xff1f; 1. 几何变换 2. 颜色变换 3. 噪声添加 4. 裁剪 5. 混合技术 6. 其他方法 三、代码实现 前言 数据增强是深度学习中常用的一种技术&#xff0c;旨在通过对训练数据进行各种变换来…

C++ | Leetcode C++题解之第421题数组中两个数的最大异或值

题目&#xff1a; 题解&#xff1a; struct Trie {// 左子树指向表示 0 的子节点Trie* left nullptr;// 右子树指向表示 1 的子节点Trie* right nullptr;Trie() {} };class Solution { private:// 字典树的根节点Trie* root new Trie();// 最高位的二进制位编号为 30static…

【linux】gcc makefile

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;linux笔记仓 目录 01.gcc如何完成02.gcc选项03.函数库与动静态链接静态链接动态链接库文件特点和用途动态链接版本和兼容性 04.makefile自动推导 01.gcc如何完成 预处理(进行宏替换) 预处理功能主要…

828华为云征文|使用Flexus X实例创建FDS+Nginx服务实现图片上传功能

一、Flexus X实例 什么是Flexus X实例呢&#xff0c;这是华为云最新推出的云服务器产品&#xff0c;如下图&#xff1a; 华为云推出的Flexus云服务器X系列&#xff0c;是在华为顶尖技术团队&#xff0c;特别是荣获国家科技进步奖的领军人物顾炯炯博士及其团队的主导下精心研发…

EventSource 和 WebSocket的区别

EventSource 和 WebSocket 都是用于在客户端和服务器之间进行实时通信的技术&#xff0c;但它们之间存在一些区别&#xff1a; 一、连接方式 EventSource&#xff1a; 建立连接相对简单&#xff0c;客户端通过向服务器发送一个 HTTP 请求来初始化连接&#xff0c;请求的 URL 指…

Verilog学习之旅~

记录Verilog的学习日常~ 第一阶段&#xff1a;牛客网刷题 1.Verilog快速入门 基础语法 VL1:四选一多路器&#xff1a;case语句、条件表达符&#xff1b; VL2:异步复位的串联T触发器:T触发器的基本功能及代码实现、异步复位的概念&#xff1b; VL3:奇偶校验&#xff1a;缩…

spring boot导入多个配置文件

1、简介 Spring Boot从2.4.x版本开始支持了导入文件的方式来加载配置参数&#xff0c;与spring.config.additional-location不同的是不用提前设置而且支持导入的文件类型相对来说要丰富很多。 我们只需要在application.properties/application.yml配置文件中通过spring.config.…

通过document获取节点元素

1.层级节点 <ul><li id"li1">1</li><li>2</li><li id"li3">3</li><li>4</li><li>5</li></ul><script>//获取id名为li1的元素赋值给li1let li1document.getElementById(li…

Java语言程序设计基础篇_编程练习题**18.34 (游戏:八皇后问题)

目录 题目&#xff1a;**18.34 (游戏:八皇后问题) 代码示例 代码解析 输出结果 使用文件 题目&#xff1a;**18.34 (游戏:八皇后问题) 八皇后问题是要找到一个解决方案&#xff0c;将一个皇后棋子放到棋盘上的每行中&#xff0c;并且两个皇后棋子之间不能相互攻击。编写个…

Oracle Truncate和delete的区别

DropTruncatedelete语句类型 DDl &#xff08;数据定义语言 Data Definition Language DDl &#xff08;数据定义语言 Data Definition Language DML&#xff08;数据操作语言 Data Manipulation Language 速度 快 删除整个表 快 一次性删除 慢 逐行删除 回滚不可不可可del…

基于C#+SQL Server2005(WinForm)图书管理系统

图书管理系统 一、 首先把数据库脚本贴出来(数据库名为library) USE [library] GO /****** Object: Table [dbo].[books] Script Date: 06/12/2016 11:27:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[books]([bNum] [nvarchar](10…

【python】利用python处理数据(stata等价命令)

1.一般运算 加法 # gen x y z df[x] df[y] df[z]减法 # gen x y - 1 df[x] df[y] - 1乘法 # gen var x * y df[var] df[x] * df[y]除法 # gen x z / y df[x] df[z] / df[y]取对数 # gen logx log(x) df[logx] np.log(df[x])开根号 # gen z sqrt(y) df[z] …