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语言如何求整数的位数及各位数字之和 求整数的位数 求整数的位数可以通过循环计算每一位上的数字来实现,具体过程如下: 定义一个变量count用于计数,初值为0; 使用循环,每次将整数除以10,直到整数变为0; 在循环中每执行一次,就将count加1; 最后输出count即可。 下面是一段示例代码: int count = 0; int num = 12345…

    C 2023年5月23日
    00
  • C语言实现数独程序的示例代码

    下面是关于“C语言实现数独程序的示例代码”的完整攻略: 一、编写数独程序的流程 1. 确定程序输入和输出 数独程序的输入应该是一个9×9的矩阵,即数独的谜题,其中0表示未知格子。程序的输出应该是一个解开谜题后的9×9矩阵。 2. 确定算法 数独程序的算法一般有两种,分别是暴力求解和回溯法。 2.1 暴力求解 暴力求解是指从左到右、从上到下依次填数,直到填到空…

    C 2023年5月23日
    00
  • 整型数据在内存中存储方式的讲解

    当我们声明一个整型变量时,计算机会在内存中分配一段连续的存储空间来存储该变量的值。在C语言中,整型数据的存储空间占用长度是根据数据类型决定的,在32位系统中一般为4字节(32位),在64位系统中一般为8字节(64位)。 整型数据在内存中存储方式是使用二进制补码表示。 二进制补码是一种表示有符号整数的方法,它对一个数的正负没有区别,而且在计算机中操作速度更快,…

    C 2023年5月23日
    00
  • C语言实现逆序输出详细

    当我们需要逆序输出一个字符数组或字符串时,我们可以使用C语言中的循环语句和数组下标实现。 首先,我们先定义一个字符数组或字符串,存储数据。接着,我们创建一个循环语句,从最后一个元素开始逆序输出到第一个元素。最后,我们在每个元素之间添加一个空格或其他特定符号,以便于人类阅读。 以下是完整的C语言实现逆序输出的攻略: 步骤如下: 1. 定义字符数组或字符串 我们…

    C 2023年5月23日
    00
  • c++显式类型转换示例详解

    C++ 显式类型转换示例详解 什么是显式类型转换 在C++中,有时候我们需要将一种数据类型(例如字符串)转换为另一种数据类型(例如数字)。这就需要使用类型转换操作符。 C++中的类型转换分为两种,一种是隐式类型转换,另一种是显式类型转换。其中隐式类型转换由编译器自动完成,而显式类型转换需要程序员手动调用类型转换操作符进行转换。 显式类型转换的语法 C++支持…

    C 2023年5月24日
    00
  • C语言 深入讲解条件编译的用处

    C语言 深入讲解条件编译的用处 在C语言中,条件编译是一项非常重要的功能。通过条件编译,我们能够根据不同的条件选择是否编译某段代码,从而提高代码的灵活性和可读性。本篇文章将详细讲解条件编译的用处及使用方式。 条件编译的概念 条件编译,顾名思义,就是根据一定的条件选择是否编译特定的代码。在C语言中,条件编译是通过预处理指令来实现的。预处理指令以#开头,可以在程…

    C 2023年5月23日
    00
  • C语言的动态内存管理的深入了解

    C语言的动态内存管理的深入了解 什么是动态内存 在 C 语言中,动态内存是由程序员在运行时分配的内存。与之相对的是静态内存,即在编译器静态分配的内存。动态内存分配在需要的时候进行,这使得程序在运行时更加灵活。 在 C 语言中,动态内存的分配和管理不同于栈空间和全局/静态内存。程序员可以使用几个库函数来进行动态内存分配和释放,这个过程也称为 动态内存管理 。 …

    C 2023年5月22日
    00
  • C++ qt 使用jsoncpp json 读写操作

    下面是关于C++ Qt使用jsoncpp进行json读写操作的完整攻略。 步骤一:安装jsoncpp库 作为我们使用jsoncpp的前提,需要先安装jsoncpp库。可以通过如下命令进行安装: sudo apt-get update sudo apt-get install libjsoncpp-dev 步骤二:头文件及命名空间声明 在使用jsoncpp时,…

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