C语言单链表实现学生管理系统

C语言单链表实现学生管理系统

简介

单链表是一种线性结构,由多个节点组成。每个节点包含两个域,一个是数据域,用于存储数据,另一个是指针域,用于指向下一个节点。

学生管理系统是一个常见的应用程序,可以用于记录和管理学生信息。C语言单链表可以用来实现学生管理系统,通过链表数据结构的操作,实现学生信息的增删改查等功能。

程序框架

  1. 定义学生结构体
typedef struct student
{
    int id;           // 学生编号
    char name[20];    // 学生姓名
    int score;        // 学生成绩
    struct student *next;  // 指向下一个学生的指针
} Student;
  1. 实现创建新节点的函数
Student *createNewStudent(int id, char *name, int score)
{
    Student *newStudent = (Student*) malloc(sizeof(Student));
    newStudent->id = id;
    strcpy(newStudent->name, name);
    newStudent->score = score;
    newStudent->next = NULL;
    return newStudent;
}
  1. 实现添加学生的函数
void addStudent(Student **head, Student *newStudent)
{
    if(*head == NULL) {
        *head = newStudent;
    }
    else {
        Student *p = *head;
        while(p->next != NULL) {
            p = p->next;
        }
        p->next = newStudent;
    }
}
  1. 实现删除学生的函数
void deleteStudent(Student **head, int id)
{
    if(*head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = *head;
        Student *q = NULL;
        while(p != NULL && p->id != id) {
            q = p;
            p = p->next;
        }
        if(p == NULL) {
            printf("未找到该学生\n");
            return;
        }
        if(q == NULL) {
            *head = p->next;
        }
        else {
            q->next = p->next;
        }
        free(p);
    }
}
  1. 实现修改学生信息的函数
void changeStudent(Student *head, int id, char *name, int score)
{
    if(head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = head;
        while(p != NULL && p->id != id) {
            p = p->next;
        }
        if(p == NULL) {
            printf("未找到该学生!\n");
            return;
        }
        strcpy(p->name, name);
        p->score = score;
        printf("修改成功!\n");
    }
}
  1. 实现查找学生的函数
void findStudent(Student *head, int id)
{
    if(head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = head;
        while(p != NULL && p->id != id) {
            p = p->next;
        }
        if(p == NULL) {
            printf("未找到该学生!\n");
            return;
        }
        printf("学生姓名:%s 学生成绩:%d\n", p->name, p->score);
    }
}
  1. 实现显示所有学生信息的函数
void displayAllStudent(Student *head)
{
    if(head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = head;
        printf("所有学生信息如下:\n");
        while(p != NULL) {
            printf("学生编号:%d 学生姓名:%s 学生成绩:%d\n", p->id, p->name, p->score);
            p = p->next;
        }
    }
}

示例说明

示例1:添加学生信息

int main()
{
    Student *head = NULL;
    Student *s1 = createNewStudent(1, "张三", 89);
    Student *s2 = createNewStudent(2, "李四", 92);
    addStudent(&head, s1);
    addStudent(&head, s2);
    displayAllStudent(head);
    return 0;
}

输出结果:

所有学生信息如下:
学生编号:1 学生姓名:张三 学生成绩:89
学生编号:2 学生姓名:李四 学生成绩:92

示例2:删除学生信息

int main()
{
    Student *head = NULL;
    Student *s1 = createNewStudent(1, "张三", 89);
    Student *s2 = createNewStudent(2, "李四", 92);
    addStudent(&head, s1);
    addStudent(&head, s2);
    deleteStudent(&head, 2);
    displayAllStudent(head);
    return 0;
}

输出结果:

所有学生信息如下:
学生编号:1 学生姓名:张三 学生成绩:89

以上就是C语言单链表实现学生管理系统的完整攻略。通过以上代码的实现,可以实现常见的学生信息管理功能,也可以自由扩展,增加其他功能。

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

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

相关文章

  • Java多态实现原理详细梳理总结

    Java多态实现原理详细梳理总结 多态是面向对象编程(Object-Oriented Programming)中的一种重要特性。Java以及其他面向对象语言,利用多态性来提高代码的重用性、可维护性、可读性和可扩展性。Java多态实现原理包括以下几个方面: 动态绑定(Dynamic Binding):在多态场景下,相同的方法会根据对象的类型产生不同的结果。这是…

    C 2023年5月23日
    00
  • jQuery实现的一个自定义Placeholder属性插件

    下面是详细的jQuery实现自定义Placeholder属性插件的攻略。 什么是Placeholder? Placeholder是HTML5新增的一个属性,可以用于在input输入框中显示提示信息。它可以在输入框为空的时候显示提示文字,当用户输入文字时,提示文字就会消失。 但是早期的浏览器并不支持该属性,因此我们需要一个jQuery插件来实现Placehol…

    C 2023年5月22日
    00
  • C++定时器Timer在项目中的使用方法

    下面是“C++定时器Timer在项目中的使用方法”的攻略。 1. Timer类和定时器的原理 首先,要使用C++定时器,我们需要了解Timer类以及定时器的原理。Timer类实现了简单的定时器功能。它内部使用了C++11的库,通过高精度计时来实现定时器的功能。定时器的原理是:在一定时间间隔之后执行一个任务,而这个任务可以是一个函数,一个类的成员函数,或者一个…

    C 2023年5月23日
    00
  • C语言代码实现井字棋游戏

    C语言代码实现井字棋游戏攻略 1. 程序设计思路 井字棋游戏是一款经典的两人策略游戏,通过编写C语言代码实现其功能需要考虑以下几个方面的问题: 游戏规则 玩家需要在一个3*3的棋盘上,轮流下“X”或“O”棋子,分别表示先手和后手,若出现任意一方在某一行、某一列或者某一斜线上形成了3个连续的棋子,则该方获胜。 数据结构 在程序中,我们需要设置一个3*3的二维数…

    C 2023年5月23日
    00
  • 前端JS,删除JSON数据(JSON数组)中的指定元素方式

    删除JSON数据(JSON数组)中的指定元素分为两个步骤: 找到指定元素在数组中的位置 删除该位置的元素并更新数组 下面我将分别对这两个步骤进行详细讲解,并且提供两个示例供参考。 步骤一:寻找指定元素在数组中的位置 首先需要遍历JSON数组,找到待删除元素在数组中的位置。一种常见的方法是使用Array.prototype.findIndex()函数来查找。 …

    C 2023年5月23日
    00
  • C++超详细讲解函数对象

    C++超详细讲解函数对象 函数对象,也称为仿函数,是一种重载了()运算符并可以像函数一样被调用的对象。在C++中,函数对象可以看作是一个类,它可以像一个函数一样去调用。 为什么需要函数对象? 在许多场景中,我们需要对容器(如vector、map等)中的元素进行排序、查找或者进行相关的算术计算。这个时候我们常常使用STL中提供的STL算法函数,其中就用到了函数…

    C 2023年5月22日
    00
  • C++实现教务管理系统

    C++实现教务管理系统攻略 1. 简介 教务管理系统是学校行政管理的重要组成部分,方便教务管理人员进行课程管理、考试管理、成绩管理、学籍管理等工作。C++作为一种高级编程语言,具有良好的可移植性、强大的数据处理能力和较高的运行效率,适合用于教务管理系统的开发。 本文将介绍如何使用C++编程语言实现教务管理系统的开发,包括如何进行需求分析、系统设计、数据结构选…

    C 2023年5月23日
    00
  • C语言 以字符形式读写文件详解及示例代码

    C语言 以字符形式读写文件详解及示例代码 文件操作是C语言中必不可少的一部分,在我们的编程过程中,常常需要读取文件或将数据写入文件,本文将详细讲解以字符形式读写文件的方法及示例代码。 文件输入输出流 在C语言中,对文件的输入输出操作都是通过文件流(file stream)实现的。文件流是一种数据流,它代表了一个文件,通过文件流,我们可以将数据从文件中读取,也…

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