C语言实现学生信息管理系统(链表)

yizhihongxing

C语言实现学生信息管理系统(链表)

简介

学生信息管理系统是管理学生的一种系统,可以实现添加、查找、删除和修改学生信息等功能。本文将使用C语言实现学生信息管理系统,并通过链表的方式进行实现。

前提条件

在开始之前,我们需要了解如下内容:

  • C语言基础知识
  • 链表的基本概念和使用

系统架构

学生信息管理系统主要包含以下几个模块:

  • 学生信息结构体
  • 添加学生信息
  • 查找学生信息
  • 删除学生信息
  • 修改学生信息
  • 显示所有学生信息

学生信息结构体定义如下:

typedef struct Student {
    char name[20];
    int age;
    char sex[10];
    char major[20];
    int num;
    struct Student* next;
}Stu;

添加学生信息

利用链表实现添加学生信息功能,示例代码如下:

Stu* create() {
    Stu* head, * p, * pre;
    int n;
    printf("请输入学生总人数:");
    scanf_s("%d", &n);
    head = p = (Stu*)malloc(sizeof(Stu));
    printf("请输入第 1 个学生的信息:\n");
    printf("第1个学生的学号为 1 \n");
    scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
    p->num = 1;
    p->next = NULL;
    for (int i = 2; i <= n; i++) {
        pre = p;
        p = (Stu*)malloc(sizeof(Stu));
        printf("请输入第 %d 个学生的信息:\n",i);
        printf("第 %d 个学生的学号为 %d \n",i, i);
        scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
        p->num = i;
        p->next = NULL;
        pre->next = p; 
    }
    return head;
}

查找学生信息

利用链表实现查找学生信息功能,示例代码如下:

void query(Stu* head, char name[20])
{
    Stu* p = head;
    while (p != NULL)
    {
        if (strcmp(p->name, name) == 0)
        {
            printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
            return;
        }
        p = p->next;
    }
    printf("未找到该学生信息!\n");
}

删除学生信息

利用链表实现删除学生信息功能,示例代码如下:

Stu* delete(Stu* head, char name[20]) {
    Stu* p, * pre;
    p = head->next;
    pre = head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            pre->next = p->next;
            free(p);
            printf("删除成功!\n");
            return head;
        }
        pre = p;
        p = p->next;
    }
    printf("对不起,未找到该学生信息!\n");
    return head;
}

修改学生信息

利用链表实现修改学生信息功能,示例代码如下:

Stu* change(Stu* head, char name[20]) {
    Stu* p = head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {            
            printf("请输入新的学生信息:\n");
            printf("请输入新的学生姓名:");
            scanf_s("%s", &p->name, 20);
            printf("请输入新的学生年龄:");
            scanf_s("%d", &p->age);
            printf("请输入新的学生性别:");
            scanf_s("%s", &p->sex, 10);
            printf("请输入新的学生专业:");
            scanf_s("%s", &p->major, 20);
            printf("修改成功\n");
            return head;
        }
        p = p->next;
    }
    printf("对不起,未找到该学生信息!\n");
    return head;
}

显示所有学生信息

利用链表实现显示所有学生信息功能,示例代码如下:

void show(Stu* head) {
    printf("序号\t姓名\t年龄\t性别\t专业\n");
    Stu* p = head;
    while (p != NULL) {
        printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
        p = p->next;
    }
}

完整示例代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Student {
    char name[20];
    int age;
    char sex[10];
    char major[20];
    int num;
    struct Student* next;
}Stu;

Stu* create() {
    Stu* head, * p, * pre;
    int n;
    printf("请输入学生总人数:");
    scanf_s("%d", &n);
    head = p = (Stu*)malloc(sizeof(Stu));
    printf("请输入第 1 个学生的信息:\n");
    printf("第1个学生的学号为 1 \n");
    scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
    p->num = 1;
    p->next = NULL;
    for (int i = 2; i <= n; i++) {
        pre = p;
        p = (Stu*)malloc(sizeof(Stu));
        printf("请输入第 %d 个学生的信息:\n",i);
        printf("第 %d 个学生的学号为 %d \n",i, i);
        scanf_s("%s %d %s %s", &p->name, 20, &p->age, &p->sex, 10, &p->major, 20);
        p->num = i;
        p->next = NULL;
        pre->next = p; 
    }
    return head;
}

void query(Stu* head, char name[20])
{
    Stu* p = head;
    while (p != NULL)
    {
        if (strcmp(p->name, name) == 0)
        {
            printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
            return;
        }
        p = p->next;
    }
    printf("未找到该学生信息!\n");
}

Stu* delete(Stu* head, char name[20]) {
    Stu* p, * pre;
    p = head->next;
    pre = head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            pre->next = p->next;
            free(p);
            printf("删除成功!\n");
            return head;
        }
        pre = p;
        p = p->next;
    }
    printf("对不起,未找到该学生信息!\n");
    return head;
}

Stu* change(Stu* head, char name[20]) {
    Stu* p = head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {            
            printf("请输入新的学生信息:\n");
            printf("请输入新的学生姓名:");
            scanf_s("%s", &p->name, 20);
            printf("请输入新的学生年龄:");
            scanf_s("%d", &p->age);
            printf("请输入新的学生性别:");
            scanf_s("%s", &p->sex, 10);
            printf("请输入新的学生专业:");
            scanf_s("%s", &p->major, 20);
            printf("修改成功\n");
            return head;
        }
        p = p->next;
    }
    printf("对不起,未找到该学生信息!\n");
    return head;
}

void show(Stu* head) {
    printf("序号\t姓名\t年龄\t性别\t专业\n");
    Stu* p = head;
    while (p != NULL) {
        printf("%d\t%s\t%d\t%s\t%s\n", p->num, p->name, p->age, p->sex, p->major);
        p = p->next;
    }
}

void menu() {
    printf("\n\n\n");
    printf("\t\t\t********************\n");
    printf("\t\t\t     学生信息管理系统    \n");
    printf("\t\t\t********************\n");
    printf("\t\t\t** 1.添加学生信息 **\n");
    printf("\t\t\t** 2.查找学生信息 **\n");
    printf("\t\t\t** 3.删除学生信息 **\n");
    printf("\t\t\t** 4.修改学生信息 **\n");
    printf("\t\t\t** 5.显示所有学生信息 **\n");
    printf("\t\t\t** 0.退出管理系统 **\n");
    printf("\t\t\t************************************************************\n");
}

int main() {
    int num;
    char name[20];
    Stu* head=create();
start:
    menu();
    printf("请输入你选择的模块编号:");
    scanf_s("%d", &num);
    switch (num) {
    case 1: {
        printf("添加新学生\n");
        printf("请输入学生姓名:");
        Stu* p = (Stu*)malloc(sizeof(Stu));
        p->next = NULL;
        scanf_s("%s", &p->name, 20);
        printf("请输入学生年龄:");
        scanf_s("%d", &p->age);
        printf("请输入学生性别:");
        scanf_s("%s", &p->sex, 10);
        printf("请输入学生专业:");
        scanf_s("%s", &p->major, 20);
        Stu* q = head;
        while (q->next != NULL) {
            q = q->next;
        }
        p->num = q->num + 1;
        q->next = p; 
        printf("添加成功!\n");
        goto start;
    }
    case 2: {
        printf("查找学生\n");
        printf("请输入要查找的学生姓名:");
        scanf_s("%s", &name, 20);
        query(head, name);
        goto start;
    }
    case 3: {
        printf("删除学生\n");
        printf("请输入要删除的学生姓名:");
        scanf_s("%s", &name, 20);
        Stu* p = delete(head, name);
        goto start;
    }
    case 4: {
        printf("修改学生信息\n");
        printf("请输入要修改的学生姓名:");
        scanf_s("%s", &name, 20);
        Stu* p = change(head, name);
        goto start;
    }
    case 5: {
        printf("显示所有学生信息\n");
        show(head);
        goto start;
    }
    case 0: {
        printf("退出管理系统\n"); return 0;
    }
    default: goto start;
    }

    return 0;
}

总结

通过本文的介绍,我们了解了如何使用C语言实现学生信息管理系统,并掌握了链表的应用。学生信息管理系统是一种比较基础的实践项目,可以帮助我们更好地学习和掌握C语言编程。

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

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

相关文章

  • C语言数据结构与算法之排序总结(二)

    C语言数据结构与算法之排序总结(二) 本篇文章是关于C语言数据结构与算法中排序算法的详细讲解,涉及了八种排序算法。 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。在排序过程中,它会重复地交换相邻的元素,这是它名称的由来。 示例代码: c void bubble_sort(int arr[], int n) { for (int i = 0…

    数据结构 2023年5月17日
    00
  • Java常见基础数据结构

    Java常见基础数据结构攻略 Java是一种面向对象的编程语言,拥有丰富的数据结构,大多数基础数据结构都包含在Java API中。在本文中,我们将讨论Java中常见的基础数据结构,包括数组、链表、栈、队列、集合和映射。我们将探讨每种数据结构的定义、用法和基本操作,并提供两个示例说明。 数组 数组是Java中最基本的数据结构之一。它是一个有序的集合,可以包含任…

    数据结构 2023年5月17日
    00
  • 一些常见的字符串匹配算法

    作者:京东零售 李文涛 一、简介 1.1 Background 字符串匹配在文本处理的广泛领域中是一个非常重要的主题。字符串匹配包括在文本中找到一个,或者更一般地说,所有字符串(通常来讲称其为模式)的出现。该模式表示为p=p[0..m-1];它的长度等于m。文本表示为t=t[0..n-1],它的长度等于n。两个字符串都建立在一个有限的字符集上。 一个比较常见…

    算法与数据结构 2023年4月25日
    00
  • Java数据结构之循环队列简单定义与用法示例

    Java数据结构之循环队列简单定义与用法示例 什么是循环队列? 循环队列是一种数据结构,它具有先进先出(FIFO)的特点,即最先进队列的元素总是被最先取出。不同于普通队列,循环队列的尾指针指向数组的头部,因此可以实现循环利用数组空间,提高存储空间的利用率,避免因队列的操作大量移动数组元素而导致的时间浪费。 循环队列的基本操作 循环队列的基本操作包括:入队、出…

    数据结构 2023年5月17日
    00
  • 数据结构 红黑树的详解

    数据结构:红黑树的详解攻略 一、红黑树的定义 红黑树是一种二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红色或黑色。红黑树的特征是对于任何有效的红黑树,从根到叶子结点或空子结点的每条路径都包含相同数目的黑色结点。 二、插入操作 对于新插入的节点,将其涂红并插入红黑树中,然后按照二叉搜索树的规则将其插入到红黑树中。 如果父节点是黑色,则不需…

    数据结构 2023年5月17日
    00
  • C语言顺序表的基本结构与实现思路详解

    C语言顺序表的基本结构与实现思路详解 什么是顺序表 顺序表,顾名思义,就是使用连续的存储空间来存储数据元素的线性表。在顺序表中,每一个数据元素都占用一个连续的存储单元,这些存储单元在物理上连续存放,因此,顺序表实际上就是由一个存储数据元素的数组和记录该数组大小的变量组成的。 顺序表的基本结构 顺序表的定义 “`c #define MAXSIZE 100 /…

    数据结构 2023年5月17日
    00
  • Java常见数据结构面试题(带答案)

    Java常见数据结构面试题(带答案)完整攻略 介绍 在Java面试中,数据结构不可避免地成为一部分的考察内容。因此,掌握Java常见数据结构,对于提高面试成功率十分必要。本篇攻略将会介绍常见的Java数据结构,并提供相应的面试题目和答案,希望可以帮助面试者在面试当中更好地展示自己的实力。 目录 结构体 数组 链表 栈 队列 树 哈希表 结构体 在Java中并…

    数据结构 2023年5月17日
    00
  • LinkedList学习示例模拟堆栈与队列数据结构

    下面是关于“LinkedList学习示例模拟堆栈与队列数据结构”的完整攻略。 什么是LinkedList? LinkedList是Java语言中的一个类,用于表示链表数据结构。链表数据结构可以根据需要进行增、删、改、查等操作,是常用的数据结构之一。 如何使用LinkedList实现堆栈? 堆栈是一种先进后出(LIFO)的数据结构,可以使用LinkedList…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部