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

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

介绍

在学习 C 语言过程中,实现一些小型项目可以帮助我们更好的熟悉和巩固所学的知识。这里介绍一种用 C 语言实现学生信息管理系统的方法,使用单链表来管理学生详细信息,包括编号、姓名、年龄、性别、专业等。本文将讲解该项目的完整攻略。

步骤

步骤1:设计结构体

首先,在程序中需要设计一个结构体来储存学生详细信息。可以考虑在 main 函数外面定义一个结构体:

struct student {
    int id;
    char name[20];
    int age;
    char sex[5];
    char major[20];
    struct student *next;
};

上述结构体中,next 是指向下一个节点的指针,它将被用于组成链表。

步骤2:定义链表

接下来,我们需要定义一个链表结构,用来管理学生信息。具体实现如下:

struct student *head = NULL;
struct student *tail = NULL;

头指针 head 指向链表的第一个节点,尾指针 tail 指向链表的最后一个节点。因为是空链表,所以它们均初始化为 NULL

步骤3:添加学生信息

现在我们需要编写添加新学生信息的函数:

void add_student() {
    struct student *p = (struct student*)malloc(sizeof(struct student));
    printf("请输入新学生的学号:");
    scanf("%d", &p->id);
    printf("请输入新学生的姓名:");
    scanf("%s", p->name);
    printf("请输入新学生的年龄:");
    scanf("%d", &p->age);
    printf("请输入新学生的性别:");
    scanf("%s", p->sex);
    printf("请输入新学生的专业:");
    scanf("%s", p->major);
    p->next = NULL;
    if (tail == NULL) {
        head = p;
        tail = p;
    } else {
        tail->next = p;
        tail = p;
    }
    printf("添加成功!\n");
}

该函数会提示用户输入学生信息,然后创建一个新的学生结构体节点 p。接着,该节点会被添加到链表末尾。如果链表为空,则将 headtail 都指向新节点;否则,将新节点连接到 tail 的后面。

在主函数中,可以调用此函数来添加新学生:

int main() {
    add_student();
    return 0;
}

步骤4:查询学生信息

可以编写 find_student_by_id 函数,通过学号可以查询到学生信息。代码如下:

void find_student_by_id(int id) {
    struct student *p = head;
    while (p != NULL) {
        if (p->id == id) {
            printf("学生信息如下:\n");
            printf("学号:%d\n", p->id);
            printf("姓名:%s\n", p->name);
            printf("年龄:%d\n", p->age);
            printf("性别:%s\n", p->sex);
            printf("专业:%s\n", p->major);
            return;
        }
        p = p->next;
    }
    printf("没有查询到指定学号的学生信息!\n");
}

该函数传入参数为学号 id,会遍历链表,当找到节点的学号与传入参数相同时,打印该学生的信息。如果找不到该学号,则输出相应提示信息。

在主函数中,可以调用此函数查询学生信息:

int main() {
    add_student();
    find_student_by_id(1);
    return 0;
}

当然这里查询的是学号为 1 时的情况。

示例说明

接下来,我们举两个例子来做进一步说明:

示例 1:添加多个学生信息

int main() {
    add_student();
    add_student();
    add_student();
    return 0;
}

以上代码会提示用户加入 3 个学生的信息,将这 3 个学生节点连接成一个链表。

示例 2:查询某个学生信息

int main() {
    add_student();
    find_student_by_id(1);
    return 0;
}

以上代码会添加一个学生节点并查询学号为 1 的学生信息,如果找到,我们会打印查询到的学生信息,否则输出“没有查询到指定学号的学生信息!”的提示信息。

总结

以上我们实现了一个简单的学生信息管理系统。我们使用了单链表来管理学生详细信息,实现了添加学生信息和查询学生信息的功能。在实际应用中,我们还可以扩展其他功能,如修改、删除学生信息等。

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

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

相关文章

  • VSCode下.json文件的编写之(1) linux/g++ (2).json中参数与预定义变量的意义解释

    下面是关于“VSCode下.json文件的编写之(1) linux/g++ (2).json中参数与预定义变量的意义解释”的完整攻略。 1. 简介 首先,我们应该知道,.json文件是一种轻量级的数据交换格式,可用于跨语言和跨平台传输数据,并且在VSCode中可以用来配置我们的编译环境。 在这个话题中,我们会讲解两个方面的内容:- (1) linux/g++…

    C 2023年5月23日
    00
  • Java编程中的vector类用法学习笔记

    Java编程中的Vector类用法学习笔记 Vector类概述 在Java中,Vector类是一种线程安全的动态数组,可以自动调整大小。它的用法类似于ArrayList,但是Vector是同步的,因此比ArrayList的访问开销更大。Vector实现了List接口,并且可以通过下标访问,插入和删除元素。 Vector类的基本用法 创建Vector对象 im…

    C 2023年5月22日
    00
  • Win7开机提示错误代码0xc0000102怎么办?

    Win7开机提示错误代码0xc0000102的解决方案 问题现象描述 在Windows 7系统开机的时候,会出现错误提示:0xc0000102。同时,系统无法正常启动,只能进入预启动维护模式。 问题解决方案 问题出现的可能原因是主引导记录(MBR)或系统分区被破坏或损坏。以下是一些解决方案: 1. 修复MBR或系统分区 1.1 使用Windows 7安装光盘…

    C 2023年5月23日
    00
  • C语言编程银行ATM存取款系统实现源码

    C语言编程银行ATM存取款系统实现源码攻略 背景介绍 随着现金支付逐渐落后于时代的步伐,银行ATM机成为了人们日常生活中不可或缺的一部分。银行ATM机内置了众多功能,例如可以查询余额、转账、存取款等,其中存取款是最为基本且常用的功能。 实现源码攻略 在实现ATM机的存取款系统时,我们可以采用C语言进行编程,以下是实现源码的攻略: 确定目标 在进行ATM机的编…

    C 2023年5月23日
    00
  • Linux折腾记(八):使用GCC和GNU Binutils编写能在x86实模式运行的16位代码

    Linux折腾记(八)的主题是如何使用GCC和GNU Binutils编写能在x86实模式运行的16位代码。针对这个主题,我们可以分为以下几步。 步骤1:准备工作 在开始编写代码之前,我们需要安装在Ubuntu系统上安装GCC和GNU Binutils。可以使用以下命令进行安装: sudo apt-get update sudo apt-get instal…

    C 2023年5月23日
    00
  • C++版图书管理系统

    下面我就为大家详细讲解一下使用C++编写图书管理系统的完整攻略。我们将会涵盖整个实现过程,包括构建UI界面、实现数据读取与存储、实现添加、删除、查询和修改功能等。 构建UI界面 为了构建UI界面,我们需要使用C++中的图形界面库。在此,我们选择使用QT库。QT库是跨平台的图形开发框架,可以在Windows、Mac和Linux等操作系统上使用。最新的QT版本是…

    C 2023年5月23日
    00
  • C++ 内存分配处理函数set_new_handler的使用

    当C++程序在运行时发现内存分配失败时,会抛出一个std::bad_alloc异常。为了避免程序崩溃,我们可以使用set_new_handler函数来注册一个新的处理函数,当内存分配失败时,程序会调用该函数来处理内存分配失败的情况。 set_new_handler函数的语法 set_new_handler函数是一个全局函数,它的原型如下: std::new_…

    C 2023年5月23日
    00
  • C++深入讲解对象的销毁之析构函数

    C++深入讲解对象的销毁之析构函数 什么是析构函数 在C++中,每个类都有一个析构函数。析构函数的作用是在对象被销毁时完成一些清理工作。 C++中的析构函数的命名规则为:在类名前加一个波浪线(~)构成一个特殊的函数名。例如,如果类名为MyClass,则析构函数的函数名应该为~MyClass()。 析构函数不需要任何参数,也不能重载。只能声明一个析构函数,因为…

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