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日

相关文章

  • JSON的String字符串与Java的List列表对象的相互转换

    Sure! 首先说明一下,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简单易读易写,通常用于在前后端之间传递数据。在Java中,我们可以通过Jackson或Gson等库来实现JSON的序列化和反序列化。下面我将详细说明如何将JSON的String字符串和Java的List列表对象相互转换。 JSON字符串转…

    C 2023年5月23日
    00
  • MathWorks MATLAB R2020b详细密钥安装教程(附许可下载)

    MathWorks MATLAB R2020b详细密钥安装教程(附许可下载) 简介 MathWorks MATLAB R2020b是一款流行的科学计算软件,广泛用于工程、科学和数学领域。为了使用MATLAB软件,需要先安装软件并激活许可证。 本篇文章将提供详细的步骤来完成MathWorks MATLAB R2020b的安装和许可证激活过程。此外,我们还会提供…

    C 2023年5月22日
    00
  • NopCommerce架构分析之(三)EntityFramework数据库初试化及数据操作

    NopCommerce是一个基于ASP.NET Core的开源电子商务平台,其中使用了EntityFramework数据库进行数据操作。在这篇文章中,我们将详细讲解如何初始化NopCommerce的数据库,并且进行基本的数据操作。 EntityFramework数据库初始化 EntityFramework是一种ORM(Object-Relational Ma…

    C 2023年5月22日
    00
  • C语言模拟实现memmove的示例代码

    下面我将帮助您详细讲解“C语言模拟实现memmove的示例代码”的完整攻略。 什么是memmove函数? memmove函数是C语言标准库中的字符串处理函数之一,用于将一块位于内存中的区域复制到另一块位于内存的区域中。memmove函数的声明如下: void *memmove(void *dest, const void *src, size_t n); 其…

    C 2023年5月23日
    00
  • UltraEdit技巧总结

    UltraEdit 技巧总结攻略 简介 UltraEdit 是一款功能强大的文本编辑器,被广泛应用于程序员、系统管理员、DBA 等专业人群的日常工作中。UltraEdit 不仅仅是一个文本编辑器,还拥有丰富的编码、调试、FTP/SFTP 等功能。本文旨在总结 UltraEdit 的常见技巧,帮助使用者提高使用效率和体验。 使用技巧 以下是使用 UltraEd…

    C 2023年5月22日
    00
  • C语言实现猜数字游戏的两种方法

    让我来详细讲解一下如何通过C语言实现猜数字游戏的两种方法。 1. 第一种方法:使用随机数 1.1 实现思路 使用随机数实现猜数字游戏的流程如下: 程序随机生成一个数字; 用户输入一个数进行猜测; 程序根据用户猜测的数,判断是大、小还是等于随机数; 如果猜对了,输出提示信息并结束程序;如果猜错了,输出提示信息并继续猜。 1.2 代码示例 下面是使用随机数实现猜…

    C 2023年5月23日
    00
  • YII Framework教程之异常处理详解

    YII Framework教程之异常处理详解 在YII Framework中,异常处理是非常重要的一个方面。合理处理异常可以有效提高程序的健壮性、可靠性和安全性。下面是关于YII Framework异常处理的详解。 异常处理的作用 异常处理可以有效帮助程序员更好地捕获和处理程序中可能出现的异常,比如错误的用户输入、系统异常或者外部错误。合理的异常处理可以让程…

    C 2023年5月23日
    00
  • Visual Studio Code (VSCode) 配置搭建 C/C++ 开发编译环境的流程

    下面是关于Visual Studio Code (VSCode) 配置搭建 C/C++ 开发编译环境的流程的完整攻略: 准备工作 Step 1 安装Visual Studio Code 首先,我们需要在官网下载并安装 Visual Studio Code,官网地址为:https://code.visualstudio.com/ Step 2 安装C/C++插…

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