C语言学生信息管理系统

C语言版学生信息管理系统

一,开发环境

  1. 操作系统:windows10, windows11, linux, mac等。
  2. 开发工具:Qt, vscode, visual studio等
  3. 开发语言:c语言

二,功能需求

在这里插入图片描述

1. 用户界面:

  • 提供一个简洁的文本界面,用户可以通过键入命令或选择选项来执行不同的操作。
  • 用户可以方便地选择要执行的操作,例如添加、查询、编辑、删除学生信息或显示所有学生信息。

2. 学生信息记录:

  • 用户可以录入学生的基本信息,如学号、姓名、年龄、性别、班级等。
  • 学生信息应存储在内存中,在程序周期内可进行操作。

3. 信息查询:

  • 用户可以通过学号或姓名查询学生信息。
  • 显示查询结果给用户。

4. 信息修改:

  • 用户可以选择一个特定的学生信息进行编辑。
  • 提供修改学生的基本信息如学号、姓名、年龄、性别、班级等。

5. 信息删除:

  • 用户可以选择删除特定的学生信息。
  • 在删除之前,询问用户是否确实要执行删除操作以防止错误。

6. 列表:

  • 用户可以查看并显示所有已录入的学生信息的列表

三,功能设计

1. 主界面:

  • 当程序启动时,首先显示一个欢迎消息,如“欢迎使用学生信息管理系统”。
  • 接着展示一个主菜单,列出所有可用的操作。例如:
请选择一个操作:
1. 添加学生信息
2. 查询学生信息
3. 修改学生信息
4. 删除学生信息
5. 显示所有学生信息
6. 退出系统
  • 用户可以通过输入相应的数字选择一个操作。

2. 添加学生信息:

  • 用户选择“添加学生信息”后,系统提示用户逐个输入学生的信息。例如:
请输入学生的学号: 
请输入学生的姓名: 
请输入学生的年龄: 
请输入学生的性别: 
请输入学生的班级: 
  • 在信息录入后,系统将保存这些信息,并给出一个确认消息,如“学生信息已成功添加”。

3. 查询学生信息:

  • 用户选择“查询学生信息”后,系统提示用户输入查询条件。例如:
请选择查询方式:
1. 通过学号查询
2. 通过姓名查询
  • 根据用户的选择,系统提示输入相应的信息。例如,“请输入学生的学号”或“请输入学生的姓名”。
  • 显示匹配的学生信息或提示未找到结果。

4. 修改学生信息:

  • 用户选择“修改学生信息”后,系统首先提示用户输入学生的学号。
  • 如果找到相应的学生信息,系统将显示该学生的当前信息,并提示用户输入新的信息。例如:
学生信息:
学号: 123
姓名: 张三
年龄: 20
性别: 男
班级: 计算机1班

请输入新的学生信息:
请输入学生的姓名: 
请输入学生的年龄: 
请输入学生的性别: 
请输入学生的班级: 
  • 确认修改并保存。

5. 删除学生信息:

  • 用户选择“删除学生信息”后,系统提示用户输入要删除的学生的学号。

6. 显示所有学生信息:

  • 当用户选择“显示所有学生信息”时,系统应该列出存储在内存中的所有学生信息。
  • 数据可以以表格的形式呈现,例如:
+--------+--------+------+-------+------------+
学号   | 姓名   | 年龄 | 性别  | 班级        |
+--------+--------+------+-------+------------+
1001   | 张三    | 20   || 计算机1|
1002   | 李四    | 21   || 计算机2|
+--------+--------+------+-------+------------+
  • 在列表末尾提供返回主菜单的选项。

7. 退出系统:

  • 当用户选择“退出系统”时,程序应给出一个友好的退出消息,如“感谢使用学生信息管理系统!再见!”然后安全地关闭程序。

四,代码结构

StudentInfoManagementSystem/
├── CMakeLists.txt
├── src/
│   ├── main.c
│   ├── student.c
│   └── student.h
├── build/
└── README.md

五,源代码

student.h

// student.h
#ifndef STUDENT_H
#define STUDENT_H

typedef struct {
    int id;
    char name[50];
    int age;
    char gender[10];
    char class_name[50];
} Student;

void add_student(Student students[], int *num_students);
void query_student(Student students[], int num_students);
void modify_student(Student students[], int num_students);
void delete_student(Student students[], int *num_students);
void display_students(Student students[], int num_students);

#endif // STUDENT_H

student.c

// student.c
#include <stdio.h>
#include <string.h>
#include "student.h"

void add_student(Student students[], int *num_students) {
    printf("请输入学生的学号: ");
    scanf("%d", &students[*num_students].id);
    printf("请输入学生的姓名: ");
    scanf("%s", students[*num_students].name);
    printf("请输入学生的年龄: ");
    scanf("%d", &students[*num_students].age);
    printf("请输入学生的性别: ");
    scanf("%s", students[*num_students].gender);
    printf("请输入学生的班级: ");
    scanf("%s", students[*num_students].class_name);
    (*num_students)++;
}

void query_student(Student students[], int num_students) {
    int choice;
    printf("请选择查询方式:\n");
    printf("1. 通过学号查询\n");
    printf("2. 通过姓名查询\n");
    printf("请输入你的选择: ");
    scanf("%d", &choice);

    if (choice == 1) {
        int id;
        printf("请输入学生的学号: ");
        scanf("%d", &id);
        for (int i = 0; i < num_students; i++) {
            if (students[i].id == id) {
                printf("学号: %d, 姓名: %s, 年龄: %d, 性别: %s, 班级: %s\n", 
                    students[i].id, students[i].name, students[i].age, students[i].gender, students[i].class_name);
                return;
            }
        }
        printf("未找到该学生信息\n");
    } else if (choice == 2) {
        char name[50];
        printf("请输入学生的姓名: ");
        scanf("%s", name);
        for (int i = 0; i < num_students; i++) {
            if (strcmp(students[i].name, name) == 0) {
                printf("学号: %d, 姓名: %s, 年龄: %d, 性别: %s, 班级: %s\n", 
                    students[i].id, students[i].name, students[i].age, students[i].gender, students[i].class_name);
                return;
            }
        }
        printf("未找到该学生信息\n");
    } else {
        printf("无效的选择\n");
    }
}

void modify_student(Student students[], int num_students) {
    int id;
    printf("请输入要修改的学生的学号: ");
    scanf("%d", &id);

    int index = -1;
    for (int i = 0; i < num_students; i++) {
        if (students[i].id == id) {
            index = i;
            break;
        }
    }

    if (index != -1) {
        printf("请输入学生的新姓名: ");
        scanf("%s", students[index].name);
        printf("请输入学生的新年龄: ");
        scanf("%d", &students[index].age);
        printf("请输入学生的新性别: ");
        scanf("%s", students[index].gender);
        printf("请输入学生的新班级: ");
        scanf("%s", students[index].class_name);
        printf("学生信息已更新。\n");
    } else {
        printf("未找到该学生信息。\n");
    }
}

void delete_student(Student students[], int *num_students) {
    int id;
    printf("请输入要删除的学生的学号: ");
    scanf("%d", &id);

    int index = -1;
    for (int i = 0; i < *num_students; i++) {
        if (students[i].id == id) {
            index = i;
            break;
        }
    }

    if (index != -1) {
        for (int i = index; i < (*num_students) - 1; i++) {
            students[i] = students[i + 1];
        }
        (*num_students)--;
        printf("学生信息已删除。\n");
    } else {
        printf("未找到该学生信息。\n");
    }
}

void display_students(Student students[], int num_students) {
    printf("+--------+--------+------+-------+------------+\n");
    printf("| 学号    | 姓名    | 年龄  | 性别  | 班级        |\n");
    printf("+--------+--------+------+-------+------------+\n");
    for (int i = 0; i < num_students; i++) {
        printf("| %-6d | %-6s | %-4d | %-5s | %-10s |\n",
               students[i].id, students[i].name, students[i].age, students[i].gender, students[i].class_name);
    }
    printf("+--------+--------+------+-------+------------+\n");
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)

# 设置项目名称和版本
project(StudentInfoManagementSystem VERSION 1.0)

# 设置C标准
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED True)

# 添加一个可执行文件
add_executable(StudentInfoManagementSystem src/main.c src/student.c)

# 如果你有其他库文件或者链接的需求,你可以在这里添加

六,功能展示

1. 用户界面

在这里插入图片描述

2. 添加学生信息

在这里插入图片描述

3. 查询学生信息

在这里插入图片描述

4. 修改学生信息

在这里插入图片描述

5. 删除学生信息

在这里插入图片描述

6. 显示所有学生信息

在这里插入图片描述

项目资料

项目的资料及代码已整理打包,有需要可取,也可定制开发,附带GPT提问链接。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 对抗超级细菌:麦克马斯特大学利用深度学习发现新型抗生素 abaucin

内容一览&#xff1a;鲍曼不动杆菌是一种常见的医院获得性革兰氏阴性病原体&#xff0c;通常表现出多重耐药性。利用传统方法&#xff0c;发现抑制此菌的新型抗生素很困难。但利用机器学习可以快速探索化学空间&#xff0c;从而增加发现新型抗菌分子的可能性。近期&#xff0c;…

AI大数据智能视频融合平台EasyCVR新增Ehome黑白名单配置

EasyCVR视频融合平台基于云边端智能协同架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;平台支持海量视频汇聚管理&#xff0c;可支持多协议接入&#xff0c;包括市场主流标准协议与厂家私有协议及SDK&#xff0c;如&#xff1a;国标GB28181、RTMP、RTSP/Onvi…

2023-07-12:RocketMQ如何做到消息不丢失?

2023-07-12&#xff1a;RocketMQ如何做到消息不丢失&#xff1f; 答案2023-07-12&#xff1a; RocketMQ通过刷盘机制、消息拉取机制和ACK机制等多种方式来确保消息投递的可靠性&#xff0c;防止消息丢失。 1.刷盘机制 RocketMQ中的消息分为内存消息和磁盘消息&#xff0c;内…

【Linux】基础开发工具——gcc/g++篇

文章目录 一、预处理1.1 头文件展开1.2 条件编译 二、编译三、汇编四、链接4.1 什么是库?4.2 库的分类4.3 目标文件和库是如何链接的&#xff1f;4.3.1 动态链接4.3.2 静态链接 4.4 动静态链接的优缺点对比 五、Debug&&release 前言 &#xff1a;  在前面的文章里给大…

1、计算机网络核心

序号地址1计算机网络核心2数据库相关3Redis4Linux相关5JVM的内容6GC相关的7Java多线程与并发8Java多线程与并发-原理9Java常用类库与技巧10Java框架-Spring 文章目录 1、OSI开放式互联参考模型2、TCP/IP3、TCP报文头4、TCP的三次握手5、TCP的四次挥手6、为什么会有TIME_WAIT状态…

ARM Coresight 系列文章 7 - ARM Coresight 通过 AHB-AP 访问 cpu 内部 coresight 组件

文章目录 如下图所示&#xff0c;如果A78想去访问M33的内部 coresight 组件 ETM&#xff0c;需要要怎么做&#xff1f; 答案也正是在图中&#xff0c;首先A78 通过AXI 互联&#xff0c;接入到 APBIC 的 slave port&#xff0c;再通过APBIC 的 master 送出&#xff0c;而APBIC中…

机器学习-进化算法

进化算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;crossovermutation 进化策略&#xff08;Evolutionary Strategies&#xff0c;ES&#xff09;基因编程&#xff08;Genetic Programming&#xff09;Multi-objective Evolutionary Algorithms 遗传算…

在Linux中传输文件文件夹的10个scp命令

scp 命令的基本语法 下面的命令将读作 copy source_file_name进入destination_folder在destination_host使用username account。 > scp source_file_name usernamedestination_host:destination_folder里面有很多参数scp你可以使用的命令。以下是可能在日常使用中使用的参数…

跟着Promise的节奏,让你的代码脱颖而出

文章目录 Promise简介Promise实例方法1. then(onFulfilled, onRejected)2. catch(onRejected)3. finally(onFinally)4. Promise.resolve(value)5. Promise.reject(reason)6. Promise.all(iterable)7. Promise.race(iterable) Promise实例方法1. prototype.then(onFulfilled, on…

基于springboot+Redis的前后端分离项目(八)-【黑马点评】

&#x1f381;&#x1f381;资源文件分享 链接&#xff1a;https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwdeh11 提取码&#xff1a;eh11 好友关注&Feed流 &#xff08;一&#xff09;好友关注-关注和取消关注(二)好友关注-共同关注&#xff08;三&#xff09; 好友…

mfc120u.dll丢失修复,mfc120u.dll缺失的解决方法

MFC120u.dll缺失的原因 当系统中缺少或损坏了MFC120u.dll文件时&#xff0c;就会出现"MFC120u.dll缺失"的错误提示。造成MFC120u.dll缺失的原因可能有以下几种情况&#xff1a; 1.文件删除或损坏&#xff1a;MFC120u.dll文件可能因为误删除、病毒感染、硬盘故障等原…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十一)

今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏…

Jmeter上传文件接口测试

Jmeter上传文件接口测试 接口测试&#xff0c;想必大家都做过&#xff0c;但是上传文件的接口&#xff0c;可能就不知所措。其实呢&#xff0c;还是那么回事~ 一、接口的业务 在接口文档缺失的前提下&#xff0c;那就从抓包玩起~Fiddler或者F12都可以。 本次我们接口实现的…

python验证公网ip与内网ip

什么是公网IP 公网IP&#xff08;Public IP&#xff09;是指在互联网中全球唯一标识一个设备或网络的IP地址。它是供公众访问和通信的IP地址。 公网IP是由互联网服务提供商&#xff08;ISP&#xff09;分配给用户或组织的&#xff0c;它允许设备通过互联网与其他设备进行通信…

如何高效的开展app的性能测试

目录 APP性能测试是什么 APP性能测试怎么做 性能测试场景的设计 性能指标的定义 规范化执行流程 性能数据数据收集 性能数据分析 性能问题定位 性能测试报告 APP性能测试是什么 从网上查了一下&#xff0c;貌似也没什么特别的定义&#xff0c;我这边根据自己的经验给出…

3.清除浮动

3.1 为什么需要清除浮动? 由于父级盒子在很多情况下&#xff0c;不方便给高度&#xff0c;但是子盒子浮动又不占有位置&#xff0c;最后父级盒子高度为0时&#xff0c;就会影响下面的标准流盒子。 ●由于浮动元素不再占用原文档流的位置&#xff0c;所以它会对后面的元素排…

进制转换解析

进制 进制介绍 对于整数&#xff0c;有四种表示方式&#xff1a; 二进制&#xff1a;0,1 &#xff0c;满 2 进 1.以 0b 或 0B 开头。 十进制&#xff1a;0-9 &#xff0c;满 10 进 1。 八进制&#xff1a;0-7 &#xff0c;满 8 进 1. 以数字 0 开头表示。 十六进制&#xff1…

Spring Boot 中的 Spring Cloud Feign

Spring Boot 中的 Spring Cloud Feign Spring Boot 是一个非常流行的 Java Web 开发框架&#xff0c;它提供了很多工具和组件来简化 Web 应用程序的开发。其中&#xff0c;Spring Cloud Feign 是 Spring Boot 中的一个非常重要的组件&#xff0c;它可以帮助我们实现声明式的 R…

VSCode中打开NodeJS项目自动切换对应版本的配置

这几年搞了不少静态站点&#xff0c;有的是Hexo的&#xff0c;有的是VuePress的。由于不同的主题对于NodeJS的版本要求不同&#xff0c;所以本机上不少NodeJS的版本。 关于如何管理多个NodeJS版本&#xff0c;很早之前就写过用nvm来管理的相关文章&#xff0c;这里就不赘述了&a…

拼多多商品参数怎样复制(实用小技巧分享)

拼多多是一家以拼团购物为主打的电商平台&#xff0c;拼多多的商品信息非常详细&#xff0c;包括商品的价格、规格、型号、颜色、尺寸等多种参数。当我们需要在拼多多上发布商品或者参与拼团购物时&#xff0c;可能需要复制商品参数&#xff0c;那么拼多多商品参数怎样复制呢&a…