C语言基础(入门综合案例)

学生信息管理系统

  • 学员管理系统可以实现对学员的添加、全部显示、查询、修改、删除功能

  • 数据存储格式说明
    // 宏定义的常量,代表学生的最大个数
    #define NUM 100// 结构体类型 struct stu 别名为 STU
    typedef struct stu {char name[30];  // 姓名int age;        // 年龄char sex[5];    // 性别
    }STU;// 全局变量定义
    // 结构体数组
    STU s[NUM];  
    // 标志学生的个数,刚好为数组的下标,从0开始
    int n = 0;   
  • 示例代码
    #include <stdio.h>
    #include <string.h>// 宏定义的常量,代表学生的最大个数
    #define NUM 100// 结构体类型 struct stu 别名为 STU
    typedef struct stu {char name[30];  // 姓名int age;        // 年龄char sex[5];    // 性别
    }STU;// 全局变量定义
    // 结构体数组,默认有5个学生
    STU s[NUM] = {{"mike", 18, "男"},{"yoyo", 19, "女"},{"lily", 17, "女"},{"rock", 21, "男"},{"mary", 19, "女"}
    };  
    // 标志学生的个数,刚好为数组的下标
    int n = 5;   // 帮助菜单显示函数定义
    void help_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("* ================================ *\n");
    }// 显示所有学生函数定义
    void show_all_stu() {printf("学生信息如下:\n");// 遍历每一个结构体数组元素,打印元素的成员for (int i = 0; i < n; i++) {printf("%s    %d    %s\n", s[i].name, s[i].age, s[i].sex);}
    }// 添加学生函数定义
    void add_stu() {// 判断学生个数有没有超过最大值if (n >= NUM) {printf("存储空间不够\n");return; // 提前终止函数,不能往下操作}// 打印请输入第n+1个学生提示信息printf("准备输入第%d个学生的信息\n", n+1);// 输入学生信息printf("请输入姓名:");scanf("%s", s[n].name); // name为数组名,代表数组首元素地址,无需加&printf("请输入年龄:");scanf("%d", &s[n].age);printf("请输入性别(男或女):");scanf("%s", s[n].sex);  // sex为数组名,代表数组首元素地址,无需加&// 学生个数+1n++;
    }// 查询学生所在的下标位置
    int find_stu_index(char *p) {// 通过姓名查询某个学生,返回这个学生的下标for (int i = 0; i < n; i++) {// 判断姓名是否相等if (strcmp(s[i].name, p) == 0) {return i;   // 返回找到学生的下标}}// 程序能执行到,说明没有找到,返回-1return -1;
    }// 打印找到学生的信息
    void show_one_stu() {// 输入需要找的学生printf("请输入需要找的学生姓名:");char name[30];scanf("%s", name);// 获取学生下标int i = find_stu_index(name);// 如果不为-1,则打印学生信息if (i != -1) {printf("%s 信息如下\n", name);printf("%s    %d    %s\n", s[i].name, s[i].age, s[i].sex);} else {printf("没有 %s 相关信息\n", name);}
    }// 修改某个学生的信息
    void modify_one_stu() {// 输入需要找的学生printf("请输入需要修改的学生姓名:");char name[30];scanf("%s", name);// 获取学生下标int i = find_stu_index(name);// 如果不为-1,则修改学生信息if (i != -1) {printf("学生原来的信息:\n");printf("%s    %d    %s\n", s[i].name, s[i].age, s[i].sex);printf("\n");printf("请输入新的学生信息:\n");// 输入学生信息printf("请输入姓名:");scanf("%s", s[i].name); // name为数组名,代表数组首元素地址,无需加&printf("请输入年龄:");scanf("%d", &s[i].age);printf("请输入性别(男或女):");scanf("%s", s[i].sex);  // sex为数组名,代表数组首元素地址,无需加&printf("信息更新成功,新信息如下:\n");printf("%s    %d    %s\n", s[i].name, s[i].age, s[i].sex);} else {printf("没有 %s 相关信息\n", name);}
    }// 删除某个学生
    void del_one_stu() {// 输入需要找的学生printf("请输入需要删除的学生姓名:");char name[30];scanf("%s", name);// 获取学生下标int i = find_stu_index(name);// 如果不为-1,则删除if (i != -1) {// 如果删除不是最后一个元素,把最后一个元素的位置替换到删除元素那个位置if (i != n-1) {s[i] = s[n-1];}// n需要-1n--;printf("%s 删除成功\n", name);} else {printf("没有 %s 相关信息\n", name);}
    }int main() {// 死循环while (1) {// 帮助菜单显示help_menu();// 输入操作数字printf("请输入指令数字:");int cmd;scanf("%d", &cmd);// printf("cmd = %d\n", cmd);// 选择判断if (cmd == 1) {printf("添加学生\n");add_stu();} else if ( cmd == 2) {printf("显示学生\n");show_all_stu();} else if ( cmd == 3) {printf("查询学生\n");show_one_stu();} else if ( cmd == 4) {printf("修改学生\n");modify_one_stu();} else if ( cmd == 5) {printf("删除学生\n");del_one_stu();} else if ( cmd == 6) {printf("退出系统\n");break;} else {printf("指令数字错误,请重新输入\n");}}return 0;
    }

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

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

相关文章

海外代理IP|Facebook对IP都有哪些要求?要选哪种?

众所周知&#xff0c;Facebook封号大多数情况都是因为IP的原因。Facebook对于用户账号有严格的IP要求和限制&#xff0c;以维护平台的稳定性和安全性。在这种背景下&#xff0c;海外IP代理成为了一种有效的解决方案&#xff0c;帮助用户避免检测&#xff0c;更加快捷安全地进行…

影响钕铁硼磁钢性能的因素及方法

钕铁硼永磁材料自问世以来&#xff0c;就以其优越的磁性能而备受关注&#xff0c;被称为“磁王“&#xff0c;在市场需求的不断地增长下&#xff0c;钕铁硼生产工艺及磁体性能也不断发展和提升。我们一般用剩磁、矫顽力和最大磁能积这几个指标来衡量磁性材料的磁性能。 剩磁 B…

C语言数据结构之链表

目录 前言 \color{maroon}{前言} 前言1.链表的概念及结构2.链表的分类3.无头单向非循环链表的实现4.带头双向循环链表的实现5.顺序表和链表的对比 前言 \color{maroon}{前言} 前言 在上一篇博客中我们提到&#xff0c;线性表包括顺序表和链表&#xff0c;顺序表在上篇博客中已…

力扣HOT100 - 25. K 个一组翻转链表

解题思路&#xff1a; class Solution {public ListNode reverseKGroup(ListNode head, int k) {ListNode dum new ListNode(0, head);ListNode pre dum;ListNode end dum;while (end.next ! null) {for (int i 0; i < k && end ! null; i) {end end.next;}if …

学习笔记-数据结构-线性表(2024-04-17)

设计一个算法实现在单链表中删除值相同的多余节点的算法。 设计思想&#xff1a;双指针 变量说明&#xff1a; head - 参数变量&#xff0c;代表链表的头节点。在调用DelSameNum函数时&#xff0c;需要传递链表的头节点的地址给这个参数&#xff0c;从而允许函数对链表进行操作…

类和对象(中)(构造函数、析构函数和拷贝构造函数)

1.类的六个默认成员函数 任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 //空类 class Date{}; 默认成员函数&#xff1a;用户没有显示实现&#xff0c;编译器会自动生成的成员函数称为默认成员函数 2.构造函数 构造函数 是一个 特殊的成员函数&a…

docker容器技术篇:centos7搭建docker swarm集群

centos7搭建docker swarm集群 一 docker swarm 概述 1.1 swarm简介 Docker Swarm是 Docker 的集群管理工具&#xff0c;Swarm 在 Docker 1.12 版本之前属于一个独立的项目&#xff1b;其主要作用是把Docker集群抽象为一个整体&#xff0c;并且通过一个统一管理这些 Docker 主…

密码学 | 数字证书:应用

&#x1f951;原文&#xff1a;数字签名和数字证书的原理解读 - 知乎 &#x1f951;前文&#xff1a;密码学 | 数字签名 数字证书 - CSDN &#x1f951;提示&#xff1a;把客户端想成 Alice&#xff0c;服务器端想成 Bob 即可。客户端实际上指的是客户端浏览器。 下面&#…

前端入门:HTML(CSS边框综合案例)

案例&#xff1a; 源代码&#xff1a; css-borders.html: <body> <div id"square"> </div> <br> <div id"triangle"> </div> <br> <div id"trapezium"> </div> <br> <div id…

【C语言】指针篇-深入探索数组名和指针数组(2/5)- 必读指南

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章目录 认识指针与数组之间的关系(涉及二级指针)**数组名****指针访问…

面试后,公司如何决定你的去留

在现代职场中&#xff0c;求职者在经历了一系列严格的面试流程后&#xff0c;往往会进入一段等待期。在这段时间里&#xff0c;他们满怀希望地等待企业的最终反馈。但有一个现象普遍存在&#xff1a;无论面试过程如何&#xff0c;最终决定权总是掌握在公司手中&#xff0c;由公…

企业常用Linux三剑客awk及案例/awk底层剖析/淘宝网cdn缓存对象分级存储策略案例/磁盘知识/awk统计与计算-7055字

高薪思维&#xff1a; 不愿意做的事情:加班&#xff0c;先例自己在利他 生活中先利他人在利自己 感恩&#xff0c;假设别人帮助过你&#xff0c;先帮助别人&#xff0c;感恩境界 awk三剑客老大 find其实也算是一种新的第四剑客 find 查找文件 查找文件&#xff0c;与其他命令…

推荐实用网站——算法可视化

网站链接 https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

variant

class RTTR_API variant 对github项目rttr&#xff08;C反射库&#xff09;解析&#xff0c;链接&#xff1a;https://github.com/rttrorg/rttr namespace rttr { class variant_associative_view; class variant_sequential_view; class type; class variant; class argumen…

真实世界的密码学(四)

原文&#xff1a;annas-archive.org/md5/655c944001312f47533514408a1a919a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第十六章&#xff1a;加密何时何地失败 本章涵盖 使用加密时可能遇到的一般问题 遵循烘烤良好的加密的要点 加密从业者的危险和责任 问候…

论文笔记:Time-LLM: Time Series Forecasting by Reprogramming Large Language Models

iclr 2024 reviewer 评分 3888 1 方法 提出了 Time-LLM&#xff0c; 是一个通用的大模型重编程&#xff08;LLM Reprogramming&#xff09;框架将 LLM 轻松用于一般时间序列预测&#xff0c;而无需对大语言模型本身做任何训练 为什么需要时序数据和文本数据对齐&#xff1a;时…

Oracle 窗口函数 02 (排名问题)

目录 一、什么是窗口函数 1.语法里每部分表示什么 2.窗口函数可以解决这几类经典问题 二、排名问题 1.学生成绩排名 2.去除最大值、最小值后求平均值 知识点&#xff1a; 一、什么是窗口函数 窗口函数也叫作OLAP&#xff08;Online Analytical Processing&#xff0c;联…

正确的原因是错误的:可解释的 ML 技术能否检测出虚假相关性?

Right for the Wrong Reason: Can Interpretable ML Techniques Detect Spurious Correlations? 摘要 虽然深度神经网络模型提供了无与伦比的分类性能&#xff0c;但它们容易在数据中学习虚假相关性。如果测试数据与训练数据来自相同的分布&#xff0c;则使用性能指标很难检…

mysql基础20——数据备份

数据备份 数据备份有2种 一种是物理备份 一种是逻辑备份 物理备份 物理备份 通过把数据文件复制出来 达到备份的目的 用得比较少 逻辑备份 逻辑备份 把描述数据库结构和内容的信息保存起来 达到备份的目的 是免费的 数据备份工具 mysqldump &#xff08;3种模式&#x…

【蓝桥杯2025备赛】集合求和

集合求和 题目描述 给定一个集合 s s s&#xff08;集合元素数量 ≤ 30 \le 30 ≤30&#xff09;&#xff0c;求出此集合所有子集元素之和。 输入格式 集合中的元素&#xff08;元素 ≤ 1000 \le 1000 ≤1000&#xff09; 输出格式 s s s 所有子集元素之和。 样例 #1 …