C语言利用链表实现学生成绩管理系统

C语言利用链表实现学生成绩管理系统的完整攻略分为以下几个步骤:

1. 设计数据结构

在设计链表之前,需要先设计数据结构来存储学生信息。通常会设计一个结构体,用来存储学生的姓名、学号、成绩等信息。例如:

typedef struct Student {
    int num;           // 学号
    char name[MAXLEN]; // 姓名
    int score;         // 成绩
    struct Student *next; // 指向下一个节点的指针
} Node;

其中,next 是指向下一个节点的指针,如果链表中有多个节点,每个节点都必须有 next 属性。

2. 创建链表

创建链表需要使用 malloc() 函数,该函数可以为节点分配内存空间,并返回一个指向该内存空间的指针。可以利用 while() 循环来创建链表,每次循环新建一个节点,并将其添加到链表的末尾,直到数据输入结束。

Node *createList() {
    Node *head, *p, *t;
    head = (Node*)malloc(sizeof(Node));
    head->next = NULL;
    t = head;
    printf("请依次输入学生的学号、姓名、成绩(输入-1结束):\n");
    while (1) {
        p = (Node*)malloc(sizeof(Node));
        scanf("%d", &p->num);
        if (p->num == -1) {
            free(p);
            break;
        }
        scanf("%s%d", p->name, &p->score);
        t->next = p;
        p->next = NULL;
        t = p;
    }
    return head;
}

以上实现的是在链表尾部插入节点的方法。也可以在头部、中间插入节点,关键点是要确定插入的位置。

3. 遍历链表

遍历链表可以使用 while() 循环,直到遇到指向 NULL 的指针代表链表到达结尾。

void traverseList(Node *head) {
    Node *p;
    p = head->next;
    while (p != NULL) {
        printf("%d\t%s\t%d\n", p->num, p->name, p->score);
        p = p->next;
    }
}

4. 删除节点

删除链表的一个节点需要先找到该节点,然后将其从链表中删除。可以使用 while() 循环来查找该节点,并使用 free() 函数来释放该节点占用的内存空间。例如:

void deleteNode(Node *head, int num) {
    Node *p, *q;
    q = head;
    p = head->next;
    while (p != NULL) {
        if (num == p->num) {
            q->next = p->next;
            printf("成功删除学号为 %d 的学生信息\n", num);
            free(p);
            return;
        }
        q = p;
        p = p->next;
    }
    printf("未找到学号为 %d 的学生信息\n", num);
}

5. 修改节点

修改链表的一个节点需要先找到该节点,然后根据要修改的内容对该节点进行修改。可以用 while() 循环来查找该节点,并使用 strcpy() 函数来改变该节点的姓名, scanf() 函数来更新该节点的成绩。例如:

void updateNode(Node *head, int num) {
    Node *p;
    p = head->next;
    while (p != NULL) {
        if (num == p->num) {
            printf("原信息:学号:%d,姓名:%s,成绩:%d\n", p->num, p->name, p->score);
            printf("输入新的姓名和成绩:");
            scanf("%s%d", p->name, &p->score);
            printf("成功修改学号为 %d 的学生信息\n", num);
            return;
        }
        p = p->next;
    }
    printf("未找到学号为 %d 的学生信息\n", num);
}

示例1:创建包含3个学生的链表,遍历该链表,删除学号为2的学生信息,再次遍历链表。

int main() {
    Node *l;
    l = createList();
    printf("学生信息如下:\n");
    traverseList(l);
    deleteNode(l, 2);
    printf("删除后学生信息如下:\n");
    traverseList(l);
    return 0;
}

示例2:创建包含2个学生的链表,遍历该链表,修改学号为1的学生成绩,再次遍历链表。

int main() {
    Node *l;
    l = createList();
    printf("学生信息如下:\n");
    traverseList(l);
    updateNode(l, 1);
    printf("修改后学生信息如下:\n");
    traverseList(l);
    return 0;
}

以上为 C语言利用链表实现学生成绩管理系统的完整攻略。

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

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

相关文章

  • Windows 2003 服务器安全设置图文教程

    针对“Windows 2003 服务器安全设置图文教程”的完整攻略,我给出如下的详细讲解。 Windows 2003 服务器安全设置图文教程攻略 为什么需要进行安全设置 Windows 2003服务器上的安全设置非常重要,它无论是对个人用户,还是企业用户,都拥有不可忽视的重要性。 首先,Windows 2003服务器安全设置可以保障服务器的安全稳定性,避免网…

    C 2023年5月22日
    00
  • VC6.0常用快捷键大全

    VC6.0常用快捷键大全 为什么需要快捷键? 在编程的过程中,我们需要频繁地进行复制、粘贴、撤销等操作。如果每次都使用鼠标进行操作,效率会非常低下。而快捷键的存在,可以极大地提高我们的工作效率。以下是VC6.0中的一些常用快捷键。 快捷键列表 常用快捷键 Ctrl + S 保存当前文件 Ctrl + C 复制选中内容 Ctrl + V 粘贴剪贴板内容 Ctr…

    C 2023年5月23日
    00
  • Visual Studio 2022 的安装和创建C++项目(图文教程)

    下面是详细讲解 Visual Studio 2022 的安装和创建 C++ 项目的攻略: 1.下载和安装 Visual Studio 2022 首先,我们需要下载并安装 Visual Studio 2022。可以在微软官网上下载安装包,具体流程如下: 1.1 访问 Visual Studio 官网 首先,在浏览器中访问 Visual Studio 官网。 1…

    C 2023年5月30日
    00
  • jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)

    为了实现滚动到页面底部自动加载图文列表效果,需要使用jQuery和ajax两个插件。下面是具体的实现步骤: 步骤一:提前准备好HTML结构 首先,需要将需要加载的内容放置在一个容器里,比如一个div,这个容器需要有一个id,比如id=”content”。 步骤二:编写jquery代码 通过jquery的scroll事件可以捕获到页面滚动事件。当用户滚动滚动条…

    C 2023年5月23日
    00
  • C/C++ Qt 运用JSON解析库的实例代码

    下面将为您详细讲解在C/C++ Qt中运用JSON解析库的实例代码的完整攻略。 一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON建立在两种结构上:一个用来表示值的简单原始类型(数字、字符串、布尔值、空值)以及一种集合值的有序列表(数组)和一个包含…

    C 2023年5月23日
    00
  • 浅谈C语言的字节对齐 #pragma pack(n)2

    浅谈C语言的字节对齐 在C语言中,结构体是将不同类型的数据存储在一起的一种基本数据类型。在结构体中,结构体成员所占用的内存空间是按照类型大小和字节对齐规则来确定的。字节对齐是计算机领域中的一个重要话题,本文将深入浅出地讲解C语言的字节对齐。 定义 字节对齐指的是将数据存储在内存中时,按照一定的规则将数据的起始位置往后挪动若干字节,使得成员变量对齐到特定的地址…

    C 2023年5月23日
    00
  • C++11系列学习之可调用对象包装器和绑定器

    C++11系列学习之可调用对象包装器和绑定器 在C++11标准中,引入了可调用对象包装器和绑定器(Function Objects and Binders),它们为函数式编程提供了更加简洁的语法和灵活的操作方式。 可调用对象包装器 可调用对象包装器是一种能够将可调用对象(函数指针、函数对象、成员函数指针等)包装成一个可以通过类对象来调用的对象。C++11中提…

    C 2023年5月22日
    00
  • C语言程序环境编译+链接理论

    C语言程序的编译与链接是程序开发的重要环节之一,理解这一过程对于程序员来说是至关重要的。下面是一个完整攻略,分为以下几个步骤: 步骤一:编辑程序 在开始编译和链接之前,我们需要先编写C语言程序。这一步通常通过文本编辑器,如vscode、sublime等完成。我们以Hello World程序为例,来说明这一步。 #include <stdio.h>…

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