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日

相关文章

  • c语言中&的用法示例代码

    下面是关于 C 语言中 & 的用法攻略,针对此问题,我们需要从以下两个方向进行讲解: 变量声明和引用时的 & 符号使用 当我们声明一个变量时,可以使用 & 符号获取该变量的地址。例如: int x = 10; int *p = &x; 上述代码中,我们声明了一个整型变量 x,并将其初始化为 10。然后,我们使用指针变量 p 来…

    C 2023年5月24日
    00
  • C语言调试手段:锁定错误的实现方法

    当我们编写C语言程序时,难免会出现各种错误。这时候,调试就是必不可少的工作。但是,要想顺利地调试程序,我们需要掌握一些调试手段。下面,我将详细讲解“C语言调试手段:锁定错误的实现方法”的完整攻略。 一、使用调试器 调试器是一种通过逐行执行程序并观察程序运行状态来找出程序中的错误的工具。使用调试器进行调试的时候,我们可以逐行执行程序,并且在程序运行的过程中查看…

    C 2023年5月24日
    00
  • C/C++ 引用作为函数的返回值方式

    C/C++ 中引用是一种特别的数据类型,其本质是指向其他变量地址的别名。引用作为函数的返回值方式,可以避免拷贝对象造成的性能浪费,并且使代码更加简洁易懂。 返回值为左值引用 当函数的返回值声明为左值引用时,我们可以在函数内返回对象的引用,由于返回值是一个引用,因此可以对该对象进行修改。下面是一个简单的例子: #include <iostream>…

    C 2023年5月22日
    00
  • C++实现简易计算器功能

    下面是C++实现简易计算器功能的攻略: 1. 确定计算器的功能 在开始实现计算器之前,我们需要明确计算器的功能要求,例如要支持哪些运算符、如何处理优先级等等。一个常见的简易计算器需要支持加减乘除四种基本运算,可以不考虑优先级问题。 2. 选择合适的数据结构 在C++中实现计算器,我们可以使用stack(栈)来存储数字和运算符。具体来说,我们可以定义两个栈,一…

    C 2023年5月23日
    00
  • VS2019使用Windows桌面应用程序模块创建Win32窗口

    在VS2019中创建新的Windows桌面应用程序项目 打开VS2019,选择“创建新项目”; 在弹出的“新建项目”对话框中,选择“Windows桌面应用程序”项目; 在下一步中,选择“Win32应用程序”模板; 给项目命名,并设置存储路径; 最后,点击“创建”按钮,即可创建新的Windows桌面应用程序项目。 在Windows桌面应用程序中创建Win32窗…

    C 2023年5月30日
    00
  • office2003怎么设置R1C1样式?

    当你使用Microsoft Office 2003时,可以选择使用相对参照样式,也就是R1C1样式,而不使用A1样式。下面将为你详细讲解如何设置R1C1样式。 步骤1:进入选项设置 首先打开Microsoft Excel 2003,然后单击工具栏上的“选项”按钮。在弹出的“选项”窗口中,单击“工作表”选项卡。 步骤2:启用R1C1样式选项 在“工作表”选项卡…

    C 2023年5月23日
    00
  • Spring应用抛出NoUniqueBeanDefinitionException异常的解决方案

    关于“Spring应用抛出NoUniqueBeanDefinitionException异常的解决方案”,我将为你提供以下攻略分步骤: 1. 异常的产生 在 Spring ApplicationContext 容器中,如果某个类型的 Bean 的数量超过了一个,但是在注入的时候却没有明确指定使用哪个 Bean,就会抛出 NoUniqueBeanDefinit…

    C 2023年5月22日
    00
  • C++实现简单的计算器功能

    C++实现简单的计算器功能可以分为以下几步: 步骤1 准备工作 首先,需要包含必要的库文件,如 iostream 和 cmath,以便使用 C++ 的输入和输出功能和数学函数。然后,定义一个 main() 函数,在函数中声明需要的变量,例如存储用户输入的 double 类型的 num1、 num2 变量和变量 result 存储计算结果。 #include …

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