C语言实现学籍管理系统

C语言实现学籍管理系统攻略

一、需求分析

学籍管理系统需要具备以下功能:
1. 添加学生信息
2. 修改学生信息
3. 删除学生信息
4. 查询学生信息
5. 查看全部学生信息

二、设计思路

学籍管理系统的数据结构可以使用链表来实现,具体分为两个结构体:教务处(包含链表头)和学生。其中教务处是包含多个学生的一个链表,学生则是链表中的一个节点。

具体实现思路如下:
1. 创建学生信息结构体。
2. 创建教务处信息结构体,包含链表头和链表操作函数。
3. 创建教务处进行初始化、添加、删除、修改、查询、查看全部等操作的函数。
4. 创建菜单函数,为用户提供操作选项。
5. 在主函数中,循环等待用户输入进行不同操作。

三、代码实现

1. 创建学生信息结构体

struct student {
    char name[20]; // 学生姓名
    int id;        // 学生学号
    float grade;   // 学生成绩
    struct student *next; // 指向下一个学生结构体的指针
};

2. 创建教务处信息结构体

struct estate {
    struct student *head;  // 头结点
    int num;               // 学生总数
};

3. 创建教务处进行初始化、添加、删除、修改、查询、查看全部等操作的函数

// 初始化
void init(struct estate *p) {
    p->head = NULL;
    p->num = 0;
}

// 添加
void add(struct estate *p) {
    struct student *stu = (struct student*)malloc(sizeof(struct student));
    printf("请输入学生姓名:");
    scanf("%s", stu->name);
    printf("请输入学生学号:");
    scanf("%d", &stu->id);
    printf("请输入学生成绩:");
    scanf("%f", &stu->grade);
    stu->next = p->head; // 新添加学生结构体的下一个节点指向原来的头结点
    p->head = stu; // 将新添加结构体设置为头节点,完成添加
    p->num++; // 学生数加1
}

// 删除
void del(struct estate *p) {
    int id;
    printf("请输入需要删除的学生学号:");
    scanf("%d", &id);
    struct student *pre = p->head;
    while(pre != NULL) {
        if(pre->id == id) break; // 当前节点是要删除的节点
        pre = pre->next;
    }    
    if(pre == NULL) {
        printf("没有找到该学生!\n");
        return;
    }    
    if(pre == p->head) p->head = pre->next; // 要删除的节点是头结点
    else {
        struct student *temp = p->head;
        while(temp->next != pre) temp = temp->next; // 找到当前节点的前一个节点
        temp->next = pre->next; // 将前一个节点的指针指向要删除节点的下一个节点
    }
    free(pre); // 释放删除节点的空间
    p->num--; // 学生数减1
    printf("删除成功!\n");
}

// 修改
void modify(struct estate *p) {
    int id;
    printf("请输入需要修改的学生学号:");
    scanf("%d", &id);
    struct student *temp = p->head;
    while(temp != NULL) {
        if(temp->id == id) break; // 找到需要修改的学生
        temp = temp->next;
    }
    if(temp == NULL) printf("没有找到该学生!\n");
    else {
        printf("请输入修改后的学生姓名:");
        scanf("%s", temp->name);
        printf("请输入修改后的学生成绩:");
        scanf("%f", &temp->grade);
        printf("修改成功!\n");
    }
}

// 查询
void search(struct estate *p) {
    int id;
    printf("请输入需要查询的学生学号:");
    scanf("%d", &id);
    struct student *temp = p->head;
    while(temp != NULL) {
        if(temp->id == id) break; // 找到要查询的学生
        temp = temp->next;
    }
    if(temp == NULL) printf("没有找到该学生!\n");
    else {
        printf("学生信息如下:\n");
        printf("学生姓名:%s\n", temp->name);
        printf("学生学号:%d\n", temp->id);
        printf("学生成绩:%.2f\n", temp->grade);
    }
}

// 查看全部
void view(struct estate *p) {
    struct student *temp = p->head;
    printf("学生信息如下:\n");
    printf("姓名\t学号\t成绩\n");
    while(temp != NULL) {
        printf("%s\t%d\t%.2f\n", temp->name, temp->id, temp->grade);
        temp = temp->next;
    }
}

// 主菜单
void menu() {
    printf("==============================\n");
    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 main() {
    struct estate p;
    init(&p); // 对教务处进行初始化
    int choice;
    do {
        menu(); // 显示菜单
        printf("请输入操作选项:");
        scanf("%d", &choice);
        switch(choice) {
            case 1: add(&p); break;
            case 2: modify(&p); break;
            case 3: del(&p); break;
            case 4: search(&p); break;
            case 5: view(&p); break;
            case 0: exit(0); break;
            default: printf("输入有误,请重新输入!\n");
        }
    }while(1); // 循环等待用户操作
}

4. 示例说明

4.1 添加学生信息

添加一个学生,其中学生姓名为“张三”,学号为“001”,成绩为“90.5”:

示例代码如下:

add(&p);

执行结果如下:

请输入学生姓名:张三
请输入学生学号:001
请输入学生成绩:90.5

4.2 查询学生信息

查询学号为“001”的学生信息:

示例代码如下:

search(&p);

执行结果如下:

请输入需要查询的学生学号:001
学生信息如下:
学生姓名:张三
学生学号:1
学生成绩:90.50

四、总结

通过以上代码实现,我们实现了一个简单的学籍管理系统。在实现过程中,我们学习了使用链表数据结构来存储学生信息,并用结构体来定义链表节点。同时我们也学习了C语言中函数的定义和调用,以及循环、条件等控制语句的使用。

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

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

相关文章

  • C++深入讲解对象的销毁之析构函数

    C++深入讲解对象的销毁之析构函数 什么是析构函数 在C++中,每个类都有一个析构函数。析构函数的作用是在对象被销毁时完成一些清理工作。 C++中的析构函数的命名规则为:在类名前加一个波浪线(~)构成一个特殊的函数名。例如,如果类名为MyClass,则析构函数的函数名应该为~MyClass()。 析构函数不需要任何参数,也不能重载。只能声明一个析构函数,因为…

    C 2023年5月22日
    00
  • C++构造和解析Json的使用示例

    C++构造和解析Json的使用示例 简介 Json是一种轻量级的数据交换格式,常用于前后端数据传输、配置文件等。本文将介绍在C++中如何构造和解析Json数据。 Json库 C++中有很多称手的Json库,常用的有: RapidJson nlohmann/json C++ Json 这些库都提供了简单易用的Api,形式上大同小异,具体使用可以结合文档查询。 …

    C 2023年5月23日
    00
  • C++:函数对象,STL提供的函数对象,函数适配器详解

    C++:函数对象、STL 提供的函数对象、函数适配器详解 函数对象是一种封装了函数行为的对象,它可以像函数一样执行。在 C++ 中,任何符合特定原型的类实例都可以被当做函数对象使用。 STL 中提供了一些函数对象(如算术、逻辑、关系型操作符等),可以方便地进行一些常见操作。 函数适配器是一种用来修改已有函数对象行为的对象。它可以帮助将一个函数对象从一种类型适…

    C 2023年5月22日
    00
  • C++三色球问题描述与算法分析

    下面是详细讲解C++三色球问题的完整攻略: 问题描述 假设有n个球,其中有红、黄、蓝三种颜色的球,每种颜色至少有一个球。将这n个球排成一列,并记下它们的颜色序列。请问,有多少种不同的颜色序列方式? 算法分析 可以使用递归算法来解决这个问题。 我们可以把球分为两个部分,第一个和剩下的n-1个。那么就可以先求出剩下的n-1个球的颜色排序,然后将第一个球插入到所有…

    C 2023年5月22日
    00
  • 关于C语言除0引发的思考

    关于C语言除0引发的思考 在C语言中,除数为0是一个经常出现的问题,因为这种情况会导致程序崩溃。我们需要理解C语言的除法运算,以便更好地处理这种异常情况。 C语言除数为0的问题 在C语言中,当一个数除以0的时候,会导致除法运算异常。程序将会因此崩溃。这个问题的解决方法是,我们可以在代码中包含对0的判断,避免代码解除0。 #include <stdio.…

    C 2023年5月23日
    00
  • C++顺序表的实例代码

    我来详细讲解一下“C++顺序表的实例代码”的完整攻略。 什么是顺序表? 顺序表是一种线性结构,它的元素在物理上是连续的。顺序表的实现方法是利用数组来存储元素,这个数组称为顺序表的存储空间。 如何实现顺序表? 下面是一份简单的顺序表的实例代码: #include <iostream> using namespace std; #define MAX…

    C 2023年5月24日
    00
  • 逍遥自在学C语言 | 位运算符&的高级用法

    前言 在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、位掩码 位掩码是一种用于按位操作的技术 它通过使用一个二进制数(掩码)来屏蔽或保留目标数中的一些特定位 例…

    C语言 2023年4月17日
    00
  • C++连接并使用MySQL数据库

    一、C++连接MySQL数据库简介C++是一门非常流行的编程语言,除了可以进行基本的编程外,它还可以连接多种数据库进行数据操作,其中之一就是MySQL数据库。在本篇文章中,我们将讲解如何使用C++连接并操作MySQL数据库,并提供用C++语言的示例代码。 二、安装MySQL C++ Connector在使用C++连接MySQL数据库之前,需要先安装MySQL…

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