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日

相关文章

  • word安装mathtype以后出现无法复制粘贴怎么办?

    如果在安装Mathtype(数学公式编辑器)后,Word无法复制和粘贴的问题,可能是由于Mathtype默认设置更改了剪贴板的内容导致。以下是解决问题的完整攻略: 步骤一:打开Mathtype选项并调整设置 在Windows上,单击“开始”按钮并输入“Mathtype”以查找Mathtype应用程序。找到Mathtype并打开它。 点击“Mathtype”菜…

    C 2023年5月22日
    00
  • vs code 配置c/c++环境的详细教程(推荐)

    下面是详细讲解“VS Code 配置 C/C++ 环境的详细教程(推荐)”的完整攻略: 1. 安装 MinGW-w64 MinGW-w64 是 Windows 平台上非常流行的 C/C++ 编译器环境,我们需要先安装它。可以在 MinGW-w64 官网( http://mingw-w64.org/doku.php/download )下载适合自己的安装包,安…

    C 2023年5月23日
    00
  • 4499元起!华为 Vision 智慧屏 3 发布

    华为 Vision 智慧屏 3 发布攻略 概述 华为 Vision 智慧屏 3 是华为公司推出的一款智能电视产品。该产品适用于家居娱乐、学习、办公等多种场景,具有高清晰度、大屏幕显示、语音控制等特点。据官方消息,华为 Vision 智慧屏 3 的价格从 4499 元起。 产品特点 华为 Vision 智慧屏 3 具有如下特点: 巨幕画质:采用 4K 高清分辨…

    C 2023年5月23日
    00
  • 解析JSON对象与字符串之间的相互转换

    解析JSON对象与字符串之间的相互转换是在前端开发中非常常见的操作之一。这里提供一份完整的攻略,帮助你轻松实现JSON对象与字符串之间的相互转换。 解析JSON对象 在JavaScript中,解析JSON对象需要使用到JSON.parse()方法。该方法可以将JSON格式的字符串转换为JavaScript对象。下面是一个示例: var jsonStr = ‘…

    C 2023年5月23日
    00
  • Octane Render渲染器C4D R17-19汉化破解详细教程(附完整下载)

    Octane Render渲染器C4D R17-19汉化破解详细教程 1. 下载Octane Render插件 Octane Render插件可以在官方网站上免费下载。下载链接:https://home.otoy.com/render/octane-render/ 请根据自己的操作系统和Cinema 4D版本选择下载相应的插件,下载完成后,解压缩文件。 2.…

    C 2023年5月22日
    00
  • 深入了解C++异常处理

    深入了解C++异常处理 C++异常处理是一种处理程序错误的机制,在代码出现错误时,以一种标准化的方式抛出异常,传递异常信息,然后可以选择在程序的其他部分捕获并处理它们,以便程序可以以一种优雅的方式退出或恢复。在这篇文章中,我们将介绍C++异常处理的基本概念,并提供示例来解释异常的情况。 异常处理的三个基本部分 C++异常处理的三个基本部分是:抛出异常、捕获异…

    C 2023年5月22日
    00
  • Golang异常处理之优雅地控制和处理异常

    Golang异常处理之优雅地控制和处理异常 异常处理的背景 在编写Golang程序时,难免会遇到各种各样的异常情况,例如网络连接中断、文件读取失败、空指针异常等等。这些异常情况可能会导致程序崩溃或数据丢失,因此我们需要对这些异常情况进行有效的处理,而这就是Golang的异常处理机制所要解决的问题。 与传统的错误处理不同的是,Golang提供了一种更加优雅的异…

    C 2023年5月23日
    00
  • 如何判断一个数是否为4的幂次方?若是,并判断出来是多少次方?

    要判断一个数是否为4的幂次方,可以有以下两种方法: 方法一:使用数学公式进行判断 如果一个正整数n是4的幂次方,那么它可以表示为: n = 4^k 其中k为非负整数。我们可以对n进行以下的操作: 若n为1,则返回true。 若n mod 4不为0,则返回false,因为4的幂次方必定是4的倍数。 对n除以4,得到一个新的数,用同样的方法判断,直到最终结果为1…

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