当前位置: 首页 > article >正文

C语言实现用户管理系统

以下是一个简单的C语言用户管理系统示例,它实现了用户信息的添加、删除、修改和查询功能。代码中包含了详细的注释和解释,帮助你理解每个部分的作用。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_USERS 100
#define NAME_LEN 50// 定义用户结构体
typedef struct {int id; // 用户IDchar name[NAME_LEN]; // 用户姓名int age; // 用户年龄
} User;// 全局用户数组和用户数量
User users[MAX_USERS];
int user_count = 0;// 添加用户
void addUser() {if (user_count >= MAX_USERS) {printf("用户数量已达上限,无法添加新用户。\n");return;}printf("请输入用户ID: ");scanf("%d", &users[user_count].id);printf("请输入用户姓名: ");scanf("%s", users[user_count].name);printf("请输入用户年龄: ");scanf("%d", &users[user_count].age);user_count++;printf("用户添加成功。\n");
}// 删除用户
void deleteUser() {int id;printf("请输入要删除的用户ID: ");scanf("%d", &id);for (int i = 0; i < user_count; i++) {if (users[i].id == id) {// 找到要删除的用户,将后续用户向前移动for (int j = i; j < user_count - 1; j++) {users[j] = users[j + 1];}user_count--;printf("用户删除成功。\n");return;}}printf("未找到ID为%d的用户。\n", id);
}// 修改用户信息
void updateUser() {int id;printf("请输入要修改的用户ID: ");scanf("%d", &id);for (int i = 0; i < user_count; i++) {if (users[i].id == id) {printf("请输入新的用户姓名: ");scanf("%s", users[i].name);printf("请输入新的用户年龄: ");scanf("%d", &users[i].age);printf("用户信息修改成功。\n");return;}}printf("未找到ID为%d的用户。\n", id);
}// 查询用户信息
void queryUser() {int id;printf("请输入要查询的用户ID: ");scanf("%d", &id);for (int i = 0; i < user_count; i++) {if (users[i].id == id) {printf("用户ID: %d, 姓名: %s, 年龄: %d\n", users[i].id, users[i].name, users[i].age);return;}}printf("未找到ID为%d的用户。\n", id);
}// 显示菜单
void showMenu() {printf("\n用户管理系统\n");printf("1. 添加用户\n");printf("2. 删除用户\n");printf("3. 修改用户信息\n");printf("4. 查询用户信息\n");printf("5. 退出系统\n");printf("请输入您的选择: ");
}int main() {int choice;while (1) {showMenu();scanf("%d", &choice);switch (choice) {case 1:addUser();break;case 2:deleteUser();break;case 3:updateUser();break;case 4:queryUser();break;case 5:printf("退出系统。\n");exit(0);default:printf("无效的选择,请重新输入。\n");}}return 0;
}

代码详解

1. 用户结构体
typedef struct {int id; // 用户IDchar name[NAME_LEN]; // 用户姓名int age; // 用户年龄
} User;

定义了一个User结构体,用于存储用户信息,包括用户ID、姓名和年龄。

2. 全局变量
User users[MAX_USERS];
int user_count = 0;

定义了一个用户数组users,用于存储所有用户信息,最大用户数为MAX_USERSuser_count用于记录当前用户数量。

3. 添加用户
void addUser() {if (user_count >= MAX_USERS) {printf("用户数量已达上限,无法添加新用户。\n");return;}printf("请输入用户ID: ");scanf("%d", &users[user_count].id);printf("请输入用户姓名: ");scanf("%s", users[user_count].name);printf("请输入用户年龄: ");scanf("%d", &users[user_count].age);user_count++;printf("用户添加成功。\n");
}

添加用户时,首先检查用户数量是否已达上限。如果没有达到上限,则提示用户输入用户ID、姓名和年龄,并将用户信息存储到users数组中,同时增加user_count

4. 删除用户
void deleteUser() {int id;printf("请输入要删除的用户ID: ");scanf("%d", &id);for (int i = 0; i < user_count; i++) {if (users[i].id == id) {for (int j = i; j < user_count - 1; j++) {users[j] = users[j + 1];}user_count--;printf("用户删除成功。\n");return;}}printf("未找到ID为%d的用户。\n", id);
}

删除用户时,首先提示用户输入要删除的用户ID。然后在users数组中查找该用户,如果找到,则将该用户及其后续用户向前移动一位,减少user_count

5. 修改用户信息
void updateUser() {int id;printf("请输入要修改的用户ID: ");scanf("%d", &id);for (int i = 0; i < user_count; i++) {if (users[i].id == id) {printf("请输入新的用户姓名: ");scanf("%s", users[i].name);printf("请输入新的用户年龄: ");scanf("%d", &users[i].age);printf("用户信息修改成功。\n");return;}}printf("未找到ID为%d的用户。\n", id);
}

修改用户信息时,首先提示用户输入要修改的用户ID。然后在users数组中查找该用户,如果找到,则提示用户输入新的用户姓名和年龄,并更新用户信息。

6. 查询用户信息
void queryUser() {int id;printf("请输入要查询的用户ID: ");scanf("%d", &id);for (int i = 0; i < user_count; i++) {if (users[i].id == id) {printf("用户ID: %d, 姓名: %s, 年龄: %d\n", users[i].id, users[i].name, users[i].age);return;}}printf("未找到ID为%d的用户。\n", id);
}

查询用户信息时,首先提示用户输入要查询的用户ID。然后在users数组中查找该用户,如果找到,则输出用户信息。

7. 显示菜单
void showMenu() {printf("\n用户管理系统\n");printf("1. 添加用户\n");printf("2. 删除用户\n");printf("3. 修改用户信息\n");printf("4. 查询用户信息\n");printf("5. 退出系统\n");printf("请输入您的选择: ");
}

显示用户管理系统菜单,提示用户输入选择。

8. 主函数
int main() {int choice;while (1) {showMenu();scanf("%d", &choice);switch (choice) {case 1:addUser();break;case 2:deleteUser();break;case 3:updateUser();break;case 4:queryUser();break;case 5:printf("退出系统。\n");exit(0);default:printf("无效的选择,请重新输入。\n");}}return 0;
}

主函数中,通过一个无限循环显示菜单,并根据用户的选择调用相应的函数。用户选择退出系统时,程序结束。

总结

这个简单的用户管理系统实现了用户信息的添加、删除、修改和查询功能。通过结构体存储用户信息,使用数组管理用户数据,并通过菜单驱动的方式让用户选择操作。代码中包含了详细的注释,帮助你理解每个部分的作用。你可以根据需要扩展这个系统,例如增加用户信息的持久化存储(如写入文件)或增加更多的用户信息字段。

相关文章:

C语言实现用户管理系统

以下是一个简单的C语言用户管理系统示例&#xff0c;它实现了用户信息的添加、删除、修改和查询功能。代码中包含了详细的注释和解释&#xff0c;帮助你理解每个部分的作用。 #include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX_USERS…...

【websocket】使用案例( ​JSR 356 标准)

目录 一、JSR 356方式&#xff1a;简单示例 1、引入依赖 2、注册端点扫描器 3、编写通过注解处理生命周期和消息 4、细节解读 5、总结 二、聊天室案例 方案流程 1、引入依赖 2、注册端点扫描器 3、编写一个配置类&#xff0c;读取httpsession 4、编写通过注解处理生…...

tcpdump`是一个非常强大的命令行工具,用于在网络上捕获并分析数据包

通过 tcpdump&#xff0c;你可以抓取网络流量&#xff0c;诊断网络问题&#xff0c;或分析通信协议的细节。下面是如何在 Linux 上使用 tcpdump 进行抓包的详细步骤。 1. 安装 tcpdump 在大多数 Linux 发行版中&#xff0c;tcpdump 是默认安装的。如果没有安装&#xff0c;可…...

IS-IS中特殊字段——OL过载

文章目录 OL 过载位 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Datacom专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年04月13日20点12分 OL 过载位 路由过载 使用 IS-IS 的过载标记来标识过载状态 对设备设置过载标记后&#xff…...

【时频谱分析】快速谱峭度

算法配置页面&#xff0c;也可以一键导出结果数据 报表自定义绘制 获取和下载【PHM学习软件PHM源码】的方式 获取方式&#xff1a;Docshttps://jcn362s9p4t8.feishu.cn/wiki/A0NXwPxY3ie1cGkOy08cru6vnvc...

Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解

Spring Boot 支持的内嵌服务器详解 1. 支持的内嵌服务器 Spring Boot 默认支持以下内嵌服务器&#xff1a; Tomcat&#xff08;默认&#xff09;JettyUndertowNetty&#xff08;用于 WebFlux 响应式应用&#xff09; 2. 各服务器使用示例 (1) Tomcat&#xff08;默认&#xf…...

微软Exchange管理中心全球范围宕机

微软已确认Exchange管理中心&#xff08;Exchange Admin Center&#xff0c;EAC&#xff09;发生全球性服务中断&#xff0c;导致管理员无法访问关键管理工具。该故障被标记为关键服务事件&#xff08;编号EX1051697&#xff09;&#xff0c;对依赖Exchange Online的企业造成广…...

基于AI的Web应用防火墙(AppWall)实战:漏洞拦截与威胁情报集成

摘要&#xff1a;针对Web应用面临的OWASP、CVE等漏洞攻击&#xff0c;本文结合群联AI云防护系统的AppWall模块&#xff0c;详解AI规则双引擎的防御原理&#xff0c;并提供漏洞拦截配置与威胁情报集成代码示例。 一、Web应用安全挑战与AppWall优势 传统WAF依赖规则库更新滞后&a…...

基于Qt的串口通信工具

程序介绍 该程序是一个基于Qt的串口通信工具&#xff0c;专用于ESP8266 WiFi模块的AT指令配置与调试。主要功能包括&#xff1a; 1. 核心功能 串口通信&#xff1a;支持串口开关、参数配置&#xff08;波特率、数据位、停止位、校验位&#xff09;及数据收发。 AT指令操作&a…...

CSS 字体学习笔记

在网页设计中&#xff0c;字体的使用对于提升用户体验和页面美观性至关重要。CSS 提供了一系列字体属性&#xff0c;用于控制文本的显示效果。以下是对 CSS 字体属性的详细学习笔记。 一、字体系列&#xff08;font-family&#xff09; 1. 字体系列的分类 在 CSS 中&#xf…...

《MySQL是怎样运行的》总结笔记

内容太多&#xff0c;主要总结一些自己认为重要的&#xff0c;另外太基础常见可能不会总结上。 字符集和比较规则 MySQL会通过把字符串编码后再进行比较大小并排序&#xff0c;有一些很早的字符集可能会不支持中文&#xff0c;比如ASCII、ISO 8859-1&#xff0c;现在最常用的…...

力扣每日打卡 1922. 统计好数字的数目 (中等)

力扣 1922. 统计好数字的数目 中等 前言一、题目内容二、解题方法1. 暴力解法&#xff08;会超时&#xff0c;此法不通&#xff09;2. 快速幂运算3. 组合计数的思维逻辑分析组合计数的推导例子分析思维小结论 4.官方题解4.1 方法一&#xff1a;快速幂 三、快速幂运算快速幂运算…...

上层 Makefile 控制下层 Makefile 的方法

在复杂的项目中&#xff0c;通常会将项目划分为多个模块或子项目&#xff0c;每个模块都有自己的 Makefile。上层 Makefile 的作用是协调和控制这些下层 Makefile 的构建过程。下面是几种常见的示例&#xff0c;实现上层 Makefile 对下层 Makefile 的控制。 直接调用&#xff1…...

html简易实现推箱子小游戏原理(易上手)

实现效果 使用方向键移动&#xff0c;将橙色箱子推到绿色目标区域&#xff08;黑色块为墙&#xff0c;白色块为可通过区域&#xff0c;蓝球为小人&#xff09; 实现过程 <!DOCTYPE html> <html> <head><title>推箱子小游戏</title><style&g…...

搭建一个Spring Boot聚合项目

1. 创建父项目 打开IntelliJ IDEA&#xff0c;选择 New Project。 在创建向导中选择 Maven&#xff0c;确保选中 Create from archetype&#xff0c;选择 org.apache.maven.archetypes:maven-archetype-quickstart。 填写项目信息&#xff1a; GroupId&#xff1a;com.exampl…...

字符串与栈和队列-算法小结

字符串 双指针 反转字符串(双指针) 力扣题目链接 void reverseString(vector<char>& s) {for (int i 0, j s.size() - 1; i < s.size()/2; i, j--) {swap(s[i],s[j]);} }反转字符串II 力扣题目链接 遍历字符串的过程中&#xff0c;只要让 i (2 * k)&#…...

类似东郊到家的上门按摩预约服务系统小程序APP源码全开源

&#x1f525; 为什么上门按摩正在席卷全国&#xff1f; 万亿蓝海市场爆发 2024年中国按摩市场规模突破8000亿&#xff0c;上门服务增速达65% 90后成消费主力&#xff0c;**72%**白领每月至少使用1次上门按摩&#xff08;数据来源&#xff1a;艾媒咨询&#xff09; 传统痛点…...

Python | 在Pandas中按照中值对箱形图排序

箱形图是可视化数据分布的强大工具&#xff0c;因为它们提供了对数据集内的散布、四分位数和离群值的洞察。然而&#xff0c;当处理多个组或类别时&#xff0c;通过特定的测量&#xff08;如中位数&#xff09;对箱形图进行排序可以提高清晰度并有助于揭示模式。在本文中&#…...

[实战] 二分查找与哈希表查找:原理、对比与C语言实现(附完整C代码)

二分查找与哈希表查找&#xff1a;原理、对比与C语言实现 一、引言 在计算机科学中&#xff0c;高效的数据查找是核心问题之一。本文深入解析两种经典查找算法&#xff1a;二分查找与哈希表查找&#xff0c;从算法原理、时间复杂度、适用场景到完整C语言实现&#xff0c;提供…...

游戏引擎学习第215天

总结并为今天做铺垫 今天的工作内容是解决调试系统中的一个小问题。昨天我们已经完成了大部分的调试系统工作&#xff0c;但还有一个小部分没有完全处理&#xff0c;那就是关于如何层次化组织数据的问题。我们遇到的一个问题是&#xff0c;演示代码中仍有一个尚未解决的部分&a…...

【Redis】redis事物与管道

Redis 事务&#xff08;Transaction&#xff09; 事务概念 事务&#xff1a;是一组操作的集合&#xff0c;是不可分割的工作单元。Redis 事务特点&#xff1a; 一个事务可以一次执行多个命令。所有命令都被顺序化&#xff0c;形成一个队列。所有命令在执行 EXEC 时一次性、顺…...

Django信号使用完全指南示例

推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 **引言:****先决条件:****目录:****1. 什么是Django信号?****2:设置你的Django项目****2.1. 安装Django**2.2. 创建一个Django项…...

DeepSeek BLEU和ROUGE(Recall)的计算

以下是 BLEU Score (Bilingual ​Evaluation ​Understudy)和 ROUGE Score(​Recall-Oriented ​Understudy for ​Gisting ​Evaluation) 的原生Python实现&#xff08;不依赖第三方库&#xff09;&#xff0c;通过分步计算逻辑和示例详细说明。 一、BLEU Score 实现 核心逻辑…...

vulkanscenegraph显示倾斜模型(5.9)-vsg中vulkan资源的编译

前言 上一章深入剖析了GPU资源内存及其管理&#xff0c;vsg中为了提高设备内存的利用率&#xff0c;同时减少内存(GPU)碎片&#xff0c;采用GPU资源内存池机制(vsg::MemoryBufferPools)管理逻辑缓存(VkBuffer)与物理内存(VkDeviceMemory)。本章将深入vsg中vulkan资源的编译(包含…...

今日行情明日机会——20250409

今日行情还需要考虑关税对抗~ 2025年4月8日涨停的主要行业方向分析 1. 军工&#xff08;19家涨停&#xff09; 细分领域&#xff1a;国防装备、航空航天、军民融合。催化因素&#xff1a;国家安全战略升级、国防预算增加、重大军工项目落地预期。 2. 免税&#xff08;15家涨…...

XHR、FetchAxios详解网络相关大片文件上传下载

以下是 XHR(XMLHttpRequest) 与 Fetch API 的全面对比分析,涵盖语法、功能、兼容性等核心差异: 一、语法与代码风格 XHR(基于事件驱动) 需要手动管理请求状态(如 onreadystatechange 事件)和错误处理,代码冗长且易出现回调地狱。 const xhr = new XMLHttpRequest(); x…...

Python基础总结(四)之元组

文章目录 一、元组格式二、元组操作2.1 转换元组 与 列表一样&#xff0c;元组也是序列&#xff0c;唯一的区别在于元组是不能修改的&#xff0c;与字符串一样。 一、元组格式 元组的创建方式很简单&#xff0c;秩序用逗号将元素隔开就能自动创建一个元组 示例&#xff1a; …...

系统分析师(六)-- 计算机网络

概述 TCP/IP 协议族 DNS DHCP 网络规划与设计 逻辑网络设计 物理网络设计 题目 层次化网络设计 网络冗余设计 综合布线系统 IP地址 网络接入技术 其他网络技术应用 物联网...

【前端】【React】useCallback的作用与使用场景总结

一、useCallback 的作用与使用场景总结 useCallback 是 React 提供的一个 Hook&#xff0c;用于缓存函数的引用&#xff0c;避免因为组件重新渲染而导致函数地址发生变化。它返回一个记忆&#xff08;memoized&#xff09;后的回调函数&#xff0c;只有当依赖项发生变化时才会…...

Qwen2.5-VL Technical Report 论文翻译和理解

一、TL&#xff1b;DR Qwen2.5-VL是QwenVL的最新模型&#xff0c;在视觉识别、精准目标定位、稳健文档解析以及长视频理解等方面实现了重大突破引入了动态分辨率处理和绝对时间编码&#xff0c;使其能够处理不同尺寸的图像以及长达数小时的视频&#xff0c;并实现秒级事件定位…...