C语言学生信息管理系统

news2024/11/28 22:47:48

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提问链接。
在这里插入图片描述

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

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

相关文章

windows 系统数据结构化组织

wmi 类枚举 枚举类实例 命令行查询类属性 Get-WmiObject -Query "select * from Win32_NTLogEvent where EventCode 104"wbemtest 查询 eventvwr 查看验证

Package amstex Error: Package `amstex‘ is obsolete, substituting `amsmath‘.

报错原文&#xff1a; Package amstex Error: Package amstex is obsolete, substituting amsmath.包 “amstex” 已过时&#xff0c;替换为 “amsmath” 将 改为 我本意是在公式中加入文本&#xff0c;用一下\text{文本} &#xff0c;之前要导入amstex&#xff0c;现在该包…

内存泄漏检测组件

文章目录 一、内存泄漏概述1.1 什么是内存泄漏1.2 内存泄漏导致的后果1.3 内存泄漏解决思路 二、宏定义方法2.1 宏定义2.2 检测位置2.3 结果分析 三、hook方法3.1 hook3.2 检测位置3.3 递归调用3.4 结果分析3.5 addr2line 四、__libc_malloc 和 __libc_free 一、内存泄漏概述 …

Linux 进度条

文章目录 一、理解回车换行二、认识行缓冲1、代码一、二&#xff08;回车换行理解&#xff09;2、代码三、四&#xff08;sleep函数和ffush函数理解&#xff09; 三、简单倒计时1、效果展示2、倒计时代码3、实现过程分析 四、进度条1、效果展示2、进度条代码   makefile   …

Mac上快速将视频转化为GIF动图

1、找到需要转为GIF的视频&#xff0c;使用QuickTime Player打开&#xff0c;找到屏幕左上角的QuickTime Player菜单&#xff0c;点击【编辑】-【修剪】 2、视频下方会出现一个时间轴&#xff0c;拖动选取自己想要的时间段&#xff0c;修剪完成后保存 3、右键剪辑好的视频&…

前端学习——Web API (Day4)

日期对象 实例化 日期对象方法 案例 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content…

【前端】网页开发精讲与实战 CSS Day 2

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;前端 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对你有…

『点云处理任务 』用PCL库 还是 深度学习模型?

深度学习和PCL库都可以用来做点云处理任务&#xff0c;但是二者侧重点有所不同。 1、PCL库&#xff08;点云库&#xff09;是一个专门用于点云处理和三维几何分析的开源类库&#xff0c;常用于以下任务&#xff1a; 1、点云滤波&#xff1a;用于去除噪音、下采样和平滑等操作&…

GM/T0015-2012学习笔记

GM/T0015-2012学习笔记 文章目录 GM/T0015-2012学习笔记数字证书数字证书特性用户证书形式 数字证书格式DER资料1资料2 //TODO 吐槽一下&#xff1a;既然是标准&#xff0c;就应该是广而告知&#xff0c;被一些信息查的网站&#xff0c;高价出售。 我从“密码行业标准化技术委…

一文读懂单分子标签UMI

背景 在整理分子标签&#xff08;unique molecular identifier&#xff0c;UMI&#xff09;之前&#xff0c;先了解下&#xff1a; NGS 中潜在的错误来源有哪些&#xff1f; 1. 来源建库过程&#xff1a;文库制备、靶向序列捕获和测序均涉及 DNA 聚合酶以及扩增步骤。这些过程…

和LangChain CEO一起讲解深度学习在数据领域的应用;如何识别语音DeepFake?

&#x1f989; AI新闻 &#x1f680; 如何识别语音DeepFake&#xff1f; 摘要&#xff1a;加拿大滑铁卢大学的研究人员开发了一种语音DeepFake软件&#xff0c;成功qipian语音认证系统概率高达99%。其他安全研究人员也开始应对这一技术挑战&#xff0c;亚马逊研究人员尝试检查…

【实验四】多态

1、完成第133页实验题目2 import java.util.Scanner;public class Application{private UserDao dao;public Application(UserDao dao){this.daodao;}public void setDao(UserDao dao){this.dao dao;}public void registe()//注册函数{Scanner scnnew Scanner(System.in);//获…

10分钟理解RNN、LSTM、Transformer结构原理!

文章目录 一、RNN1.1 RNN基本架构1.2 RNN经典的三种结构1.2.1 vector-to-sequence结构1.2.2 sequence-to-vector结构1.2.3 Encoder-Decoder结构 1.3 RNN常用领域1.4 RNN的优缺点1.5 RNN中为什么会出现梯度消失 二、LSTM2.1 LSTM与RNN差异2.2 LSTM核心思想图解2.2.1 忘记层门2.2…

小程序上传头像功能

前台wxml代码 点击navigator&#xff0c;跳转到裁剪页面 <navigator url"/pages/cropper/cropper?userid{{user._id}}&&imgSrc{{user.img}}" hover-class"none"><view class"user-logo-section"><text class"user…

1亿条数据批量插入 MySQL,哪种方式最快?

利用JAVA向Mysql插入一亿数量级数据—效率测评 这几天研究mysql优化中查询效率时&#xff0c;发现测试的数据太少&#xff08;10万级别&#xff09;&#xff0c;利用 EXPLAIN 比较不同的 SQL 语句&#xff0c;不能够得到比较有效的测评数据&#xff0c;大多模棱两可&#xff0c…

深化校企合作,开源网安为软件安全人才培养按下“加速键”

开源网安一直以来十分重视网络安全人才的培养&#xff0c;已陆续与湖北大学、武汉工业大学、桂林电子科技大学等多所高校建立战略合作&#xff0c;打造产学研协同的多类型人才培养模式。6月29日&#xff0c;开源网安与桂林电子科技大学携手举办了软件安全开发与DevSecOps实训课…

简要介绍 | 心脏机械-电耦合理论:原理、研究现状与未来展望

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对心脏机械-电耦合理论进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 心脏机械-电耦合理论&#xff1a;原理、研究现状与未来展望 心脏中精密的血流局部调控机制&#xff1a;electro-metabolic…

使用ChatGPT进行个性化学习

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 在这篇文章中&#xff0c;您将发现 ChatGPT 作为机器学习和数据科学爱好者的个人导师的好处。特别是&#xff0c;您将学习 如何让ChatGPT引导你学习抽象代数如何让 ChatGPT 帮助您…

代码随想录day9

28. 找出字符串中第一个匹配项的下标 思路&#xff1a; 没有。。。。真不会。。。。下次再来吧 代码&#xff1a; def strStr(self, haystack: str, needle: str) -> int:if not needle:return 0next [0] * len(needle)self.getNext(next, needle)j -1for i in range(…

路径规划算法:基于猎食者优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于猎食者优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于猎食者优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…