c语言实现学生管理系统详解

C语言实现学生管理系统详解

本文将详细讲解如何使用C语言实现一个简单的学生管理系统,包括设计思路、代码实现和运行效果展示。

设计思路

学生管理系统是一种常见的信息管理系统,其主要功能包括添加、删除、查询、修改学生信息。在设计实现过程中,我们可以采用如下思路:

1. 学生信息结构体的定义和存储

我们定义一个结构体(student)来表示每个学生的信息,包括姓名、学号、性别、年龄、成绩等字段。我们可以使用动态数组来存储学生信息,实现动态添加、删除学生信息的功能。

2. 学生信息的添加

用户在程序运行时可以选择添加一批学生信息,将信息保存到结构体数组中。

3. 学生信息的删除

程序运行时支持根据学号或者姓名来删除学生信息。

4. 学生信息的查询

程序支持根据学号或者姓名来查询学生信息,同时支持打印出全部学生信息。

5. 学生信息的排序

程序支持根据成绩或者年龄对学生信息进行排序。

代码实现

基于上述设计思路,我们可以通过编写C语言代码来实现学生管理系统。以下是示例代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX_STUDENT 1000  // 最大学生数

// 学生信息结构体
struct student {
    char name[20];     // 姓名
    char id[20];       // 学号
    char sex[5];       // 性别
    int age;           // 年龄
    float score;       // 成绩
};

// 全局变量
struct student* students[MAX_STUDENT];
int student_count = 0;

// 打印菜单
void print_menu() {
    printf("********************************************\n");
    printf("*          欢迎来到学生管理系统           *\n");
    printf("* 1. 添加学生信息                          *\n");
    printf("* 2. 删除学生信息                          *\n");
    printf("* 3. 查询学生信息                          *\n");
    printf("* 4. 显示所有学生信息                      *\n");
    printf("* 5. 学生成绩排序                          *\n");
    printf("* 0. 退出程序                              *\n");
    printf("********************************************\n");
}

// 添加学生信息
void add_student() {
    if (student_count >= MAX_STUDENT) {
        printf("学生数量已满,无法添加新的学生信息");
        return;
    }

    printf("请输入学生姓名:");
    char name[20];
    scanf("%s", name);

    printf("请输入学生学号:");
    char id[20];
    scanf("%s", id);

    printf("请输入学生性别:");
    char sex[5];
    scanf("%s", sex);

    printf("请输入学生年龄:");
    int age;
    scanf("%d", &age);

    printf("请输入学生成绩:");
    float score;
    scanf("%f", &score);

    struct student* s = (struct student*)malloc(sizeof(struct student));
    strcpy(s->name, name);
    strcpy(s->id, id);
    strcpy(s->sex, sex);
    s->age = age;
    s->score = score;
    students[student_count++] = s;

    printf("学生信息添加成功\n");
}

// 删除学生信息
void delete_student() {
    printf("请输入你要删除学生的学号或姓名:");
    char search[20];
    scanf("%s", search);

    int found = 0;
    for (int i = 0; i < student_count; i++) {
        if (strcmp(students[i]->name, search) == 0 || strcmp(students[i]->id, search) == 0) {
            // 找到目标学生,删除其信息
            free(students[i]);
            students[i] = NULL;
            student_count--;
            found = 1;
            printf("学生信息删除成功\n");
            break;
        }
    }

    if (!found) {
        printf("未找到要删除的学生信息\n");
    }
}

// 查询学生信息
void search_student() {
    printf("请输入你要查询学生的学号或姓名:");
    char search[20];
    scanf("%s", search);

    int found = 0;
    for (int i = 0; i < student_count; i++) {
        if (strcmp(students[i]->name, search) == 0 || strcmp(students[i]->id, search) == 0) {
            // 找到目标学生,输出其信息
            printf("姓名:%s 学号:%s 性别:%s 年龄:%d 成绩:%f\n",
                students[i]->name, students[i]->id, students[i]->sex, students[i]->age, students[i]->score);
            found = 1;
        }
    }

    if (!found) {
        printf("未找到要查询的学生信息\n");
    }
}

// 显示学生信息
void show_all_student() {
    for (int i = 0; i < student_count; i++) {
        printf("姓名:%s 学号:%s 性别:%s 年龄:%d 成绩:%f\n",
            students[i]->name, students[i]->id, students[i]->sex, students[i]->age, students[i]->score);
    }
}

// 成绩排序
int cmp_score(const void* a, const void* b) {
    struct student* s1 = *(struct student**)a;
    struct student* s2 = *(struct student**)b;
    return s1->score > s2->score ? -1 : 1;  // 按分数降序排序
}

void sort_student_by_score() {
    qsort(students, student_count, sizeof(struct student*), cmp_score);
    printf("学生成绩排序成功\n");
}

int main() {
    int option;
    do {
        print_menu();
        printf("请输入选项(0-5):");
        scanf("%d", &option);

        switch (option) {
        case 1:
            add_student();
            break;
        case 2:
            delete_student();
            break;
        case 3:
            search_student();
            break;
        case 4:
            show_all_student();
            break;
        case 5:
            sort_student_by_score();
            break;
        case 0:
            printf("感谢使用学生管理系统,下次再见!\n");
            break;
        default:
            printf("输入的选项有误,请重新输入\n");
            break;
        }
    } while (option != 0);

    // 释放学生信息内存
    for (int i = 0; i < student_count; i++) {
        free(students[i]);
    }

    return 0;
}

运行效果展示

下面是一个简单的运行效果展示,仅供参考。

********************************************
*          欢迎来到学生管理系统           *
* 1. 添加学生信息                          *
* 2. 删除学生信息                          *
* 3. 查询学生信息                          *
* 4. 显示所有学生信息                      *
* 5. 学生成绩排序                          *
* 0. 退出程序                              *
********************************************
请输入选项(0-5):1
请输入学生姓名:Tom
请输入学生学号:123456
请输入学生性别:male
请输入学生年龄:20
请输入学生成绩:90
学生信息添加成功
请输入选项(0-5):4
姓名:Tom 学号:123456 性别:male 年龄:20 成绩:90.000000
请输入选项(0-5):2
请输入你要删除学生的学号或姓名:123456
学生信息删除成功
请输入选项(0-5):4
请输入选项(0-5):0
感谢使用学生管理系统,下次再见!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c语言实现学生管理系统详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • c++非变易算法-stl算法

    当我们需要对一些数据集合进行一些固定的操作的时候,我们就可以使用STL(标准模板库)提供的算法来简化我们的代码并提高效率。STL算法主要包括三种,分别是变易算法、非变易算法和排序算法。其中,非变易算法指的是在执行算法的过程中不更改输入的数据集的内容。 在C++的STL库中,STL算法被封装在Algorithm头文件中。下面是一些常用的非变易算法: for_e…

    C 2023年5月22日
    00
  • 如何利用最简单的C语言实现AI五子棋

    以下是详细的攻略。 一、概述 AI五子棋的实现可以使用简单的C语言编写。整个程序可以分为三个部分:用户交互、棋盘表示、决策引擎。用户交互包括输入和输出,棋盘表示包括棋盘的状态,决策引擎则用于决策AI下一步的位置。下面将分别对这三个部分进行详细的说明。 二、用户交互 用户交互可以通过控制台实现。程序需要输出当前棋局状态并获取用户下子的位置。输出可以使用简单的A…

    C 2023年5月23日
    00
  • C语言详细实现猜拳游戏流程

    C语言详细实现猜拳游戏流程 游戏规则 猜拳游戏是一款两人对战的游戏,游戏的主要流程如下: 游戏开始时,系统提示玩家输入自己的姓名。 系统随机选择出石头、剪刀、布三个选项之一,并提示玩家进行出拳。 玩家根据自己的想法输入石头、剪刀、布三个选项之一。 系统对出拳进行比较,输出比赛结果:玩家胜利、系统胜利或平局。 系统询问玩家是否继续游戏。 如果玩家选择继续游戏,…

    C 2023年5月23日
    00
  • c#操作json示例分享

    下面我将为你详细讲解如何使用C#操作JSON。 首先,我们需要了解C#中的JSON库。C#自带了一个System.Text.Json的库,它能够实现将JSON字符串转换为C#对象以及将C#对象转换为JSON字符串,而且相比其他的JSON库,它的性能更加出色。 下面是一些常用的操作: 将JSON字符串转换为C#对象 使用System.Text.Json库将JS…

    C 2023年5月23日
    00
  • c++如何实现跳表(skiplist)

    跳表(skiplist)是一种随机化的数据结构,它允许快速查询一个有序序列中的元素,并且它的插入和删除操作具有相对较低的时间复杂度。下面我们将介绍如何使用C++实现跳表。 基本思路 跳表的基本思路是建立多层索引,即使用多级指针来跳过一些元素,在链表的基础上进行优化。第一层是原始链表,其他层则是链表的子集。每一层的元素数量越来越少,随着层数的增加,跳过元素的能…

    C 2023年5月23日
    00
  • ProE怎么设计立体的C型轮廓?

    要设计立体的C型轮廓,可以遵循以下步骤: 步骤一:绘制基本轮廓线 首先,打开ProE软件并创建一个新的零件。然后选择绘图工具中的“草图”工具,开始绘制轮廓线的基本形状。 例如,可以先绘制上部和底部线条,然后在中间画上一条垂直线条将两条线连接起来。在绘图时,需要注意轮廓曲线应该是封闭的,因为这是一个立体的轮廓线。在草图中可以加入尺寸,以确保轮廓大小和位置的准确…

    C 2023年5月23日
    00
  • C/C++编译器GCC下的常用编译命令总结

    下面我将为你讲解“C/C++编译器GCC下的常用编译命令总结”的完整攻略。 总述 GCC是一款广受欢迎的开源编译器,支持多种编程语言,并且跨平台。它是GNU编译器套件中的一个组件,可在Linux,macOS和Windows上运行。本文将介绍几个GCC编译器的常用命令。 命令详解 编译命令 1. 编译C文件 编译C文件的命令为: gcc [-g] [-O] […

    C 2023年5月23日
    00
  • 在QT5中实现求两个输入值的和并输出(实例)

    下面我将为你讲解在QT5中实现求两个输入值的和并输出的完整攻略。首先,我们需要创建一个QT5项目,然后编写代码。 第一步:设计界面 首先,我们需要设计一个简单的界面,让用户可以输入两个值并计算它们的和。可以使用QT Designer来设计界面,也可以手动编写代码来创建相应的界面。 以下是一个简单的界面设计示例: <?xml version="…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部