链表实现学生管理系统

这篇具有很好参考价值的文章主要介绍了链表实现学生管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这次我们运用链表的基础知识,增删改查,实现对学生系统进行管理,采用的多文件编程模式,接下来介绍一下什么叫做多文件编程。

程序一般分三类文件:

  • 头文件( .h )。放置各种声明,用于被文件包含。(头文件的存在是为了联系多个源文件,是源文件之间的接口。)
  • 模块文件(.c)。放置一些函数定义,也称为功能模块。
  • 主程序文件(.c)。包含main()的文件,程序入口,调用模块文件实现的方法
  • 在这里呢要给大家强调一下在我们包含自己所写的头文件时,用"  "(<>包含的头文件为标准库路径下的," "为工作路径下的,搜索范围是整个磁盘)

头文件的完整流程描述

#pragma once//避免头文件重复引用

进行头文件引用,把需要运用的都添加进来

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

首先需要定义一个结构体变量 student,其中包括学生的id,姓名,年龄,专业。

typedef struct Student{
    int id;
    char name[50];
    int age;
    char major[50];
    struct Student*next;
    }Stu;

头文件也需要满足对后续函数的声名定义功能

111

 主函数的完整流程描述

菜单printMenu.c的完整流程描述

  • 功能:打印操作菜单到控制台,提示用户进行选择。
  • 实现
    • 使用printf函数打印菜单的各个部分,包括欢迎语句、各个操作选项以及一个提示用户输入选择的语句。
    • 菜单中的每个选项对应一个数字,用户可以通过输入这个数字来选择对应的操作
  • 菜单选项
    • 添加学生:允许用户输入新学生的详细信息(如ID、姓名、年龄和专业),并将这些信息添加到系统中。
    • 删除学生:允许用户通过指定学生的ID来删除该学生的信息。
    • 更新学生:允许用户修改已存在学生的信息,如姓名、年龄和专业等。
    • 搜索学生:允许用户通过学生的ID来搜索并查看该学生的详细信息。
    • 退出:退出程序,在退出前,程序应该释放所有动态分配的内存资源,确保没有内存泄漏。
  • 用户引导
    • 在打印完菜单后,最后一行"输入您的选择: "用于提示用户输入他们的选择。这是一个重要的交互步骤,它告诉用户该怎么做来选择一个操作。
#include "NodeList.h"
void printMenu(){
    printf("\n##########学生管理系统#######\n");
    printf("\n请进行选择操作\n");
    printf("1.添加学生\n"):
    printf("2.删除学生\n"):
    printf("3.更新学生\n"):
    printf("4.搜索学生\n");
    printf("5.退出程序\n");
    printf("\n##################\n");
    }

 appendStudent.c的完整流程描述:

createStudent 函数

  • 功能:动态分配内存以创建一个新的Student结构体实例,并初始化其成员变量。
  • 参数:int id: 学生的ID。
    • char* name: 学生的姓名。
    • int age: 学生的年龄。
    • char* major: 学生的专业。
  • 返回值:返回一个指向新创建的Student实例的指针。如果内存分配失败,则返回NULL。

实现细节:

  1. 使用malloc函数分配足够的内存来存储一个Student结构体实例。
  2. 检查malloc是否成功分配了内存。如果没有(即返回NULL),则打印错误消息并返回NULL。
  3. 使用参数值初始化新创建的Student实例的各个字段。
  4. 将next指针设置为NULL,因为这个新节点目前不指向任何其他节点。
  5. 返回新创建的Student实例的指针。
  6. #include "NodeList.h"
    Stu*creatStudent(int id,char *name,int age,char*major){
        Stu*student=(Stu*)malloc(sizeof(Stu));
        if(student==NULL){
            printf("分配空间失败\n");
            return 0;
        }
        student->id=id;
        strcpy(student->name,name);
        studnet->age=age;
        strcpy(student->major,major);
        student->next=NULL;
        return student;
        
        
    

 

appendStudent 函数

  • 功能:将一个新的Student节点添加到学生链表的末尾。
  • 参数:Student** head: 指向链表头节点指针的指针。
    • 其他参数(id, name, age, major)与createStudent函数相同,用于创建新的学生节点。
  • 返回值:无。

实现细节:

  1. 调用createStudent函数创建一个新的学生节点。
  2. 如果新节点创建成功,检查链表是否为空(即头指针是否为NULL)。如果链表为空,直接将头指针指向新节点。
    1. 如果链表不为空,遍历链表找到最后一个节点,然后将其next指针指向新节点,从而将新节点添加到链表末尾。
      #include "NodeList.h"
      void appendStudent(Student**head,int id,char*name,int age,char*major){
          Stu*newstu=creatStudent(id,name,age,major);
          if(newstu==NULL){        newstu=*head;
          }else{
          Stu*temp=*head;
          while(temp->next!=NULL){
              temp=temp->next;
          }
          temp->next=newstu;
             }
              }
              
      

 

deleteStudent.c的完整流程描述:

deleteStudent 函数

  • 功能:从链表中删除具有指定ID的学生节点。
  • 参数
    • Student** head:指向链表头节点指针的指针。使用指针的指针是为了能够在函数内部修改头节点指针的值(例如,当头节点被删除时)。
    • int id:要删除的学生的ID。
  • 返回值:无。

实现细节:

  1. 检查链表是否为空:首先检查头指针是否指向NULL,如果是,表示链表为空,打印一条消息并直接返回。
  2. 删除头节点的情况
    1. 如果链表不为空,检查头节点是否就是要删除的节点(通过比较id字段)。
    2. 如果是,将头指针指向下一个节点(*head = fast->next;),释放原头节点占用的内存,并打印一条删除成功的消息。
  3. 查找要删除的节点:
    1. 如果要删除的节点不是头节点,遍历链表寻找匹配的id。使用两个指针fast和slow进行遍历,fast用于指向当前检查的节点,而slow用于记录temp的前一个节点。
    2. 遍历过程中,如果找到了匹配的节点(fast->id == id),则退出循环准备进行删除操作;如果遍历结束也没有找到匹配的节点,则temp将为NULL。
  4. 处理学号不存在的情况:
    1. 如果遍历结束fast为NULL,表示链表中没有找到具有指定ID的学生,打印一条消息说明找不到该学生,并返回。
  5. 删除找到的节点:
    1. 如果找到了要删除的节点,将slow->next指向fast->next,这样就从链表中移除了fast指向的节点。
    2. 然后释放fast节点占用的内存,并打印一条删除成功的消息。
    3. #include"NodeList.h"
      void deleteSudent(Stu**head,int id){
        
          if(*head==NULL){
              printf("链表为空\n");
              return ;
          }else{
              Stu*fast=head,*slow;
              if((*head)->id=id){
                  *head=fast->next;
                  printf("删除成功\n");
                  free(fast);
                  
              }else{
              while(fast!=NULL&&fast->id!=id){
                  slow=fast;
                  fast=fast->next;
                  }
                  if(fast==NULL){
                      pritnf("没有找到要删除的学生\n");
                  return;
                  }
                  slow-next=fast->next;
                  free(fast);
                  printf("删除成功\n");  
                  }
      

      updateStudent.c的完整流程描述:

      updateStudent 函数

      • 功能:更新链表中具有指定ID的学生节点的信息。
      • 参数:
        • Student* head:链表头节点的指针。
        • int id:要更新的学生的ID。
        • char* newName:学生的新姓名。
        • int newAge:学生的新年龄。
        • char* newMajor:学生的新专业。
      • 返回值:无。

      实现细节:

      1. 初始化变量:
        1. 使用一个临时指针temp来遍历链表,从头节点开始。
        2. 使用一个标志变量found来记录是否找到了具有指定ID的学生节点。
      2. 遍历链表:
        1. 在链表不为空的情况下,遍历每个节点。
        2. 对于每个节点,检查其ID是否与要更新的学生ID相匹配。
      3. 更新学生信息:
        1. 如果找到了匹配的节点,使用strcpy函数将新姓名和新专业复制到该节点的相应字段中,并直接更新年龄字段。
        2. 更新完成后,打印一条确认消息,并将found标志设置为1,然后跳出循环。
      4. 处理未找到的情况:
        1. 如果遍历完整个链表后没有找到匹配的节点(即found仍为0),打印一条错误消息说明找不到具有指定ID的学生。
        2. #include "NodeList.h"
          void updataStudent(Stu*head,int id,char*newName,int newAge,char*newMajor){
              Stu*temp=head;
              int found=0;
              if(head==NULL)return ;
              while(temp!=NULL){
                  if(temp->id=id){
                  strcpy(temp->name,newName);
                  temp->age=newAge;
                  strcpy(temp->major,newMajor);
                  printf("更新完成\n");
                  found=1;
                  break;
              }
              printf("\n");
              }
              
              
          

          searchStudent.c的完整流程描述:

          searchStudent 函数

          • 功能:在链表中搜索具有指定ID的学生,并打印该学生的详细信息。
          • 参数:
            • Student* head:链表头节点的指针。
            • int id:要搜索的学生的ID。
          • 返回值:无。

          实现细节:

          1. 初始化变量:
            1. 使用一个临时指针temp来遍历链表,从头节点开始。
            2. 使用一个标志变量found来记录是否找到了具有指定ID的学生节点。
          2. 遍历链表:
            1. 在链表不为空的情况下,遍历每个节点。
            2. 对于每个节点,检查其ID是否与要搜索的学生ID相匹配。
          3. 打印学生信息:
            1. 如果找到了匹配的节点,使用printf函数打印该学生的详细信息(包括ID、姓名、年龄和专业)。
            2. 打印完成后,将found标志设置为1,并跳出循环。
          4. 处理未找到的情况:
            1. 如果遍历完整个链表后没有找到匹配的节点(即found仍为0),打印一条错误消息说明找不到具有指定ID的学生。
#include "NodeList.h"
void searchStudent(Stu*head,int id){
    Stu*temp=head;
    int found=0;
    if(temp=NULL)return;
    while(temp!=NULL&&temp->id!=id){
        temp=temp->next;
        }
        if(temp==NULL){
            printf("没有找到\n");
            return; 
        }
        printf("找到了id为%d的学生姓名为%s\n",id,name);
        printf("找到了id为%d的学生年龄为%d\n",id,age);
        printf("找到了id为%d的学生专业为%s\n",id,major);

        }

 文章来源地址https://www.toymoban.com/news/detail-847762.html

到了这里,关于链表实现学生管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言实现学生信息管理系统(附原码)

    本人的C语言学习完后,用所学的知识自己实现了一个学生管理系统,新手一个,代码还有待完善,欢迎大家在评论区指出错误! 一、流程图 二、函数的目录  三、程序介绍  1.主要功能: 添加学生信息、打印学生信息、查找学生信息、添加学生信息、修改学生信息、计算学

    2024年02月12日
    浏览(46)
  • 学生成绩管理系统(C语言有结构体实现)

    本文章介绍了一个通过C语言实现的一个简单的学生管理系统,该系统要是使用结构体数组来管理学生成绩数据的,通过该系统的练习能够对结构体的相关知识有更好的理解,提高逻辑思维能力。 系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令 开

    2024年02月06日
    浏览(82)
  • 在c语言中使用链表完成学生成绩管理系统(密码登录系统的采纳,加入了隐藏与删除功能,添加了指针域与数据域两种不同的排序)

    #二、每个函数的简绍与思路 ##1:密码登录的验证思路: (1)在主函数main里定义一个标志 flat2=0;如果flat2!=0,就代表密码登录成功,可以进入系统! (2)在具体函数mima()之中,使用了控制台函数_getch();其头文件为#includeconio.h,该函数可以隐藏输出,注意:_getch()是隐藏单

    2024年04月23日
    浏览(40)
  • C语言学生管理系统(链表实现)

    C语言学生管理系统主要是由链表实现的学生信息增,删,改,查等功能,我的管理系统由于为用到文件相关知识,感兴趣的同学们可以去学习添加文件保存等功能。 目录 我们首先需要用一个结构体来储存我们每一个学生的信息,以结构体为链表的数据域是不是要好理解一些

    2024年02月11日
    浏览(49)
  • ChatGPT实现用C语言写一个学生成绩管理系统

    随着ChatGPT爆火,大家都在使用ChatGPT来帮助自己提高效率,对于程序员来说使用它来写代码怎么样呢?今天尝试让ChatGPT,写了一个学生成绩管理系统。 问题是:使用C语言写一个学生成绩管理系统,要求使用链表,实现增删改查功能。 下面是ChatGPT写的代码,用时不到30秒,速

    2023年04月13日
    浏览(56)
  • 【C语言基础】学生信息管理系统-纯结构体实现

    ps.一定要先确实掌握结构体,结构体数组,函数中的传参,全局变量作用域等知识 一.设计构思和简单的准备工作 首先,要确定一个什么样的结构体,就需要看我需要什么功能。 于是,我写下来一个 我想要的 , 能做xxx功能的 ,可能还 很美观的 学生信息管理系统的目录,既

    2024年02月03日
    浏览(48)
  • C语言用链表实现通讯录管理系统

    目录 总体思路 具体代码 编译通过 总体代码 一、创建一个结构体保存通讯录信息。 二、构建链表,并存于文件中。 三、实现链表结点的增加、删除、查询、输出。 一、创建一个结构体,保存信息。 二、用尾插法创建一个链表,并让用户选择是否输入数据。 三、将链表数据

    2024年02月02日
    浏览(52)
  • 赶紧进来看看---C语言实现学生信息管理系统(3.0文件存储版)

    本文主要介绍了将学生信息管理系统改造为文件存储版本… 主要涉及文件操作函数–将学生信息导入文件和从文件读取学生信息到程序中,从而达到数据持久化的效果 文章最后有源码展示 学生信息管理系统1.0静态版-学生信息管理系统2.0动态内存增长版-学生信息管理系统3.0文

    2024年01月20日
    浏览(44)
  • C语言——学生信息管理系统

    目录 功能展示 界面展示  所有功能模块: 功能1:菜单模块(显示功能菜单) 功能2:增加学生信息 功能3:输出学生信息(查看所有学习信息) 功能4:修改学生信息 功能5:删除学生信息 功能6:查询单个学生信息 功能7:排序学习信息(按照学号升序排序) 功能8:退出管

    2024年02月09日
    浏览(47)
  • 【学生成绩管理系统----C语言】

    还在为期末程序设计而烦恼吗,不要担心,大师帮你安利一波完整的的管理系统代码,对你有帮助记得加关注噢! 文章目录 一、学生成绩管理系统是什么? 二、信息管理的七个模块 1.Step one 2.Step Two  3.Step Three 4.Step four 5.Step five 6.Step Six 7.Next 总结        学生信息管理系统

    2024年02月03日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包