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

news2024/9/23 21:31:06

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

一,开发环境

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

二,功能需求

在这里插入图片描述

  1. 用户界面:
  • 提供一个简洁的文本界面,用户可以通过键入命令或选择选项来执行不同的操作。
  • 用户可以方便地选择要执行的操作,例如添加、查询、编辑、删除学生信息或显示所有学生信息。
  1. 学生信息记录:
  • 用户可以录入学生的基本信息,如学号、姓名、年龄、性别、班级等。
  • 学生信息应存储在内存中,在程序周期内可进行操作。
  1. 信息查询:
  • 用户可以通过学号或姓名查询学生信息。
  • 显示查询结果给用户。
  1. 信息修改:
  • 用户可以选择一个特定的学生信息进行编辑。
  • 提供修改学生的基本信息如学号、姓名、年龄、性别、班级等。
  1. 信息删除:
  • 用户可以选择删除特定的学生信息。
  • 在删除之前,询问用户是否确实要执行删除操作以防止错误。
  1. 列表:
  • 用户可以查看并显示所有已录入的学生信息的列表

三,功能设计

  1. 主界面:
  • 当程序启动时,首先显示一个欢迎消息,如“欢迎使用学生信息管理系统”。
  • 接着展示一个主菜单,列出所有可用的操作。例如:
请选择一个操作:
1. 添加学生信息
2. 查询学生信息
3. 修改学生信息
4. 删除学生信息
5. 显示所有学生信息
6. 退出系统
  • 用户可以通过输入相应的数字选择一个操作。
  1. 添加学生信息:
  • 用户选择“添加学生信息”后,系统提示用户逐个输入学生的信息。例如:
请输入学生的学号: 
请输入学生的姓名: 
请输入学生的年龄: 
请输入学生的性别: 
请输入学生的班级: 
  • 在信息录入后,系统将保存这些信息,并给出一个确认消息,如“学生信息已成功添加”。
  1. 查询学生信息:
  • 用户选择“查询学生信息”后,系统提示用户输入查询条件。例如:
请选择查询方式:
1. 通过学号查询
2. 通过姓名查询
  • 根据用户的选择,系统提示输入相应的信息。例如,“请输入学生的学号”或“请输入学生的姓名”。
  • 显示匹配的学生信息或提示未找到结果。
  1. 修改学生信息:
  • 用户选择“修改学生信息”后,系统首先提示用户输入学生的学号。
  • 如果找到相应的学生信息,系统将显示该学生的当前信息,并提示用户输入新的信息。例如:
学生信息:
学号: 123
姓名: 张三
年龄: 20
性别: 男
班级: 计算机1班

请输入新的学生信息:
请输入学生的姓名: 
请输入学生的年龄: 
请输入学生的性别: 
请输入学生的班级: 
  • 确认修改并保存。
  1. 删除学生信息:
  • 用户选择“删除学生信息”后,系统提示用户输入要删除的学生的学号。
  1. 显示所有学生信息:
  • 当用户选择“显示所有学生信息”时,系统应该列出存储在内存中的所有学生信息。
  • 数据可以以表格的形式呈现,例如:
+--------+--------+------+-------+------------+
学号   | 姓名   | 年龄 | 性别  | 班级        |
+--------+--------+------+-------+------------+
1001   | 张三    | 20   || 计算机1|
1002   | 李四    | 21   || 计算机2|
+--------+--------+------+-------+------------+
  • 在列表末尾提供返回主菜单的选项。
  1. 退出系统:
  • 当用户选择“退出系统”时,程序应给出一个友好的退出消息,如“感谢使用学生信息管理系统!再见!”然后安全地关闭程序。

四,代码结构

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. 显示所有学生信息

在这里插入图片描述

项目资料

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

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

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

相关文章

EA编写的十大注意事项:避免常见的错误和陷阱

EA编写是一项复杂而有挑战性的任务&#xff0c;需要投资者具备一定的编程技能及丰富的交易经验。下面我将分享EA编写过程中的十大注意事项&#xff0c;以及如何避免常见的错误和陷阱。 设定明确的目标和策略 在编写EA之前&#xff0c;一定要明确交易目标和策略。这包括交易工具…

从OVF矢量场文件中获取磁斯格明子的位置和半径的粗略方法(trace skyrmion)

文章目录 前言一、使用oommf的avf2odt命令行程序获取斯格明子中心位置的示例二、当磁体系的单个xy平面层仅有一个斯格明子的情况1.读取所有磁化文件中的指定磁化分量2.筛选出每一个xy平面层中位于磁化分量阈值范围内的单元格3.计算组成磁结构的所有单元格的平均坐标和平均距离 …

今年想考CISP,速看这篇

关键词&#xff1a;CISP考试&#xff0c;CISP认证&#xff0c;CISP报名条件&#xff0c;CISP培训&#xff0c;CISP考试费用&#xff0c;CISP考试大纲 注册信息安全专业人员&#xff08;Certified Information Security Professional&#xff0c;简称“CISP"&#xff09;&…

如何处理Long类型精度丢失问题?

如何处理Long类型精度丢失问题?_拒绝画大饼的博客-CSDN博客 解决问题&#xff1a;long型数据精度丢失_long精度丢失_YOLO小蜗的博客-CSDN博客 原因分析 通过观察控制台输出的SQL发现页面传递过来的员工id的值和数据库中的id值不一致&#xff0c;这是怎么回事呢&#xff1f; 在…

Node中的模块引擎EJS模块渲染

1.导入 const ejsrequire("ejs") 2.声明数组 const group["张三","李四","王二","麻子"] 3.EJS实现 let resultejs.render(<ul> <% group.forEach(item>{ %> <li><%item%></li> <% }) …

ionic实现滑动的三种方式

ionic实现滑动的三种方式 在移动端受屏幕大小所限&#xff0c;展示内容很多的时候&#xff0c;就要使部分区域进行滑动。本文展示项目中所有到的几种方式&#xff0c;大家可以看自己的需求选择合适的滑动方式。实现滑动的基本原理&#xff0c;有两个容器A、B,假如A在外层&#…

[element-ui] el-descriptions站位,换行用法

使用element-ui组件el-descriptions element-ui组件el-descriptions官方文档 需要将el-descriptions-item换行用法&#xff1a;使用span &#xff08;1&#xff09;span 代表占位&#xff0c;当span 的值大于 column的值&#xff0c;就会自动换一行 &#xff08;2&#xff0…

通过正则表达式删除包含某个字符串的一整行

正则表达式为&#xff1a;^.*YourString.*\R 以下为NotePad编辑器的操作步骤&#xff1a; 1、CtrlH打开文本编辑器的替换功能 2、将上面的正则表达式复制到"查找目标"文本框 3、"替换为"文本框置为空 4、勾选“正则表达式” 5、点击替换或者全部替换

数据结构-ArrayList

目录 线性表 顺序表 ArrayList ArrayList的使用 ArrayList的构造方法 ArrayList的常用方法 ArrayList的遍历 实现简单的ArrayList 洗牌算法 删除公共字符串问题 杨辉三角 线性表 线性表是n个具有相同特性的数据元素的有限序列.线性表是一种在实际中广泛使用的数据结…

【标准】国家标准GB7713-87(科学论文编写格式)

目 录 1 引言 2 定义 2.1 科学技术报告 2.2 学位论文 2.3 学术论文 3 编写要求 4 编写格式 5 前置部分 5.1 封面 5.2 封二 5.3 题名页 5.4 变异本 5.5 题名 5.6 序或前言 5.7 摘要 5.8 关键词 5.9 目次页 6 主体部分 6.1 格式 6.2 序号 6.3 引言(或绪论)…

如何在没有软件的情况下将 PDF 转换为 PPT(100% 免费)

演示文稿由文字、图片、音频、动画等元素组成&#xff0c;通常用于会议、课堂或演讲中&#xff0c;展示演讲者想要表达的主要内容。如果您遇到重要文档以 PDF 格式存储&#xff0c;但现在需要转换为 PPT 格式的情况&#xff0c;请不要担心。我们本指南的目标是帮助用户将 PDF 转…

BeanFactory和ApplicationContext的入门、关系和继承

BeanFactory快速入门 ApplicationContext快速入门 BeanFactory与ApplicationContext的关系 1)BeanFactory是Spring的早期接口&#xff0c;称为Spring的Bean工厂。ApplicationContext是后期更高级接口&#xff0c;称之为Spring 容器; 2)ApplicationContext在BeanFactory基础上…

路径规划算法:基于瞬态优化的路径规划算法- 附代码

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

充电桩系统的阿里云服务器的配置如何?

两台ecs. 微信公众号 微信小程序 微信商户 Redis mysql netty mqtt 更多信息私信我

【Leetcode】203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 # Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextNone): # self.val va…

Apollo、RocketMQ加载顺序问题

在SpringCloudAlibaba框架中&#xff0c;因Nacos配置中心管理权限过于简单&#xff0c;决定用Apollo代替Nacos配置中心&#xff0c;但在启动时&#xff0c;Nacos、Redis等配置读取正常&#xff0c;RocketMQ由于启动过早&#xff0c;无法从Apollo读取自己的服务地址配置。 报错…

基于github制作个人学术网站(主页)

模板 首先找到一个学术模板&#xff0c;fork到远程仓库。academicpages&#xff0c;如果不是很清楚具体的步骤&#xff0c;可以参考保姆级教程。在github上对该网站代码修改不是很方便&#xff0c;肯定是在本地进行更新后push到远程仓库。 本地Git 学会下载和安装就行&#…

读取摄像机的内参和畸变系数并对畸变图像进行去畸变

这个程序的目标是读取摄像机的参数(内参和畸变系数),并对畸变图像进行去畸变操作,然后进行一些特征点和矩形框的绘制。 #include 语句引入所需的库。using namespace std; 和 using namespace cv; 语句是在代码中使用std和opencv命名空间,这样就不用在每次使用这些库的函数…

Bluetooth 开发科普

Bluetooth 开发科普 1、蓝牙协议结构 Controller运行在蓝牙芯片上&#xff0c;host运行在主控上&#xff0c;两芯片通过硬件通信接口&#xff08;uart或usb&#xff09;&#xff0c;进行通信连接&#xff08;HCI&#xff09;。 实际使用中有不同场景&#xff0c;根据场景需求&…

第三章 SSD存储介质:闪存 3.2-3.3

3.2 闪存实战指南 闪存接口有同步异步之分。一般来说&#xff0c;异步传输速率慢&#xff0c;同步传输速率快。 &#xff08;1&#xff09;异步接口没有时钟&#xff0c;每个数据读由一次RE_n信号触发&#xff0c;每个数据写由一次WE_n信号触发。 &#xff08;2&#xff09;同步…