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日

相关文章

  • 华硕X550C怎么拆机 华硕X550C清理灰尘与升级SSD图文教程

    华硕X550C是一款经典的笔记本电脑,通常情况下使用时间长了之后就会出现散热问题或者存储容量不足的问题。为了解决这些问题,我们需要拆卸笔记本电脑并进行清理灰尘或者升级SSD。下面我将为大家提供华硕X550C拆机、清理灰尘以及升级SSD的详细攻略。 步骤一:准备工作 首先,我们需要准备以下材料: 十字螺丝刀 塑料卡片 SSD硬盘 硬盘盒 硅脂 清洁剂 清理刷 …

    C 2023年5月23日
    00
  • 网络工程师面试时喜欢问的问题与参考答案集锦

    网络工程师面试时,通常会涉及到网络基础知识、网络安全、网络管理和运维等方面的问题。以下是一些常见的问题及参考答案,供面试准备时参考。 一、网络基础知识 1. OSI七层模型和TCP/IP四层模型是什么? 答:OSI七层模型和TCP/IP四层模型都是计算机网络的层次模型。OSI七层模型包括:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/I…

    C 2023年5月22日
    00
  • C语言菜鸟基础教程之判断

    下面是针对“C语言菜鸟基础教程之判断”进行详细讲解的完整攻略。 什么是判断语句? 判断语句是编程中非常重要的控制语句之一,它能够根据指定条件的真假来完成不同的操作。在C语言中,判断语句主要有两种:if语句和switch语句。 if语句 if语句是C语言中最为基础的判断语句,它的基本语法如下: if (condition) { statement1; } el…

    C 2023年5月22日
    00
  • C语言实现通讯录的示例代码

    C语言实现通讯录的示例代码是一个经典的练手项目。下面,我将为大家详细讲解:如何实现通讯录,在此过程中,我将会向大家展示这样一个经典的示例代码实现。本文主要分为以下几个部分: 实现通讯录系统需要考虑的因素 编写通讯录示例代码的具体步骤 两个示例说明 1. 实现通讯录系统需要考虑的因素 要实现一个通讯录系统,需要考虑以下几个因素: 数据结构:通讯录使用什么数据结…

    C 2023年5月24日
    00
  • C语言超详细讲解栈的实现及代码

    C语言超详细讲解栈的实现及代码 什么是栈? 栈(Stack)是计算机中的一种数据结构,也是一种线性结构。它只允许在特定一端进行插入和删除操作,即在栈顶进行操作。栈的特点是后进先出(LIFO,Last In First Out),即在栈顶进入元素,在栈顶取出元素。 栈的实现 栈的实现可以用数组(array)或链表(linked list)来实现。其中,一般使用…

    C 2023年5月23日
    00
  • C语言程序 数组的最大值和最小值的

    获取数组的最大值和最小值 使用 C 语言编写程序获取数组的最大值和最小值,可以先利用 for 循环遍历数组,依次将元素与当前最大值和最小值比较,更新最大值和最小值即可。代码如下: #include <stdio.h> int main() { int nums[5] = {1, 2, 3, 4, 5}; int i, max = nums[0],…

    C 2023年5月9日
    00
  • java使用FastJson解析Json数据

    当我们需要在Java应用程序中处理JSON数据时,我们可以使用一个轻量级、高效的JSON库——FastJson。FastJson是阿里巴巴公司推出的一款高效的JSON处理工具,它具有易用性、快速性和智能型等特点。本文将详细介绍如何使用FastJson解析JSON数据。 安装和导入FastJson 我们可以通过Maven或手动下载和导入FastJson库。这里…

    C 2023年5月23日
    00
  • Java日常练习题,每天进步一点点(47)

    首先对于题目“Java日常练习题,每天进步一点点(47)”,实际上这是一道Java语言练习题目的系列。根据具体的题目内容,需要我们运用Java语言的各种知识和技能进行解答。 这道题目的具体细节我不清楚,但我可以提供一些通用的解题思路和攻略: 仔细阅读题目要求,理解题目要求并思考解题思路; 如果不确定自己的思路是否正确,可以手动进行编写或者借助IDE进行运行调…

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