600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 纯c语言链表实现学生信息管理系统.(你学会了吗?)

纯c语言链表实现学生信息管理系统.(你学会了吗?)

时间:2023-03-26 14:26:01

相关推荐

纯c语言链表实现学生信息管理系统.(你学会了吗?)

纵使疾风来,人生不言弃

大家好!我是Cx_330

本篇博客是用c语言实现的用单链表的形式实现一个简单的学生管理系统,基本涵盖的单链表的所有相关的基础操作,希望对正在用c语言学习链表那一章节的人有所帮助,同时自己也回顾一下单链表的相关操作

实现内容

1.利用单链表建立学生基本信息表;

2.浏览每个学生的信息;

3.根据学号查询某个学生的基本信息;

4.添加学生信息到单链表中;

5、删除一个学生的信息。

实现代码

头文件源码

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>typedef int ElemType;typedef struct Student_List{ElemType Id_num;ElemType age;char name[20];struct Student_List* next;} Student_List, * stu;void menu();stu InitList();void Creat_StudentInfo(stu s);void Show_StudentInfo(stu s);void Add_Student(stu s);void Find_StudentInfo(stu s);void Del_StudentInfo(stu s);

功能实现源码

#include"LinkList.h"void menu(){printf("\n############################################\n");printf(" 1.建立学生基本信息\n");printf(" 2.浏览学生基本信息\n");printf(" 3.根据学号查询信息\n");printf(" 4.添加学生基本信息\n");printf(" 5.删除学生基本信息\n");printf("############################################\n");}stu InitList() {stu s = (stu)malloc(sizeof(Student_List));if (s) {s->next = NULL;return s;}else {printf("malloc fail...\n");exit(-1);}}void Creat_StudentInfo(stu s) {stu r = s;int count; int num;int age;char arr[20];printf("请输入要初建的学生个数 :");scanf("%d",&count);while (count--) {printf("\n请输入学号信息 :");scanf("%d",&num);printf("请输入要添加学生信息的姓名 :");scanf("%s",arr);printf("请输入要添加学生信息的年龄 :");scanf("%d", &age);stu ptr = (stu)malloc(sizeof(Student_List));ptr->next = NULL;ptr->Id_num = num;ptr->age = age;strcpy(ptr->name,arr);if (!r) {r = ptr;}else {stu x = r;while (x->next) {x = x->next;}x->next = ptr;}}printf("初始化成功.\n");}void Show_StudentInfo(stu s) {stu r = s->next;while (r) {printf("%d %s %d\n",r->Id_num,r->name,r->age);r = r->next;}}void Add_Student(stu s) {int num;char arr[20];int age;printf("请输入要添加学生信息的学号 :");scanf("%d",&num);printf("请输入要添加学生信息的年龄 :");scanf("%d", &age);printf("请输入要添加学生信息的姓名 :");scanf("%s",arr);stu x = (stu)malloc(sizeof(Student_List));x->next = NULL;x->Id_num = num;x->age = age;strcpy(x->name,arr);stu p = s->next,pro=s;while (p && p->Id_num < num) {pro = p;p = p->next;}if (!p) {pro->next = x;}else {x->next = p;pro->next = x;printf("添加成功\n");}}void Find_StudentInfo(stu s) {stu ptr=s->next;int num;printf("请输入要查询学生的学号 :");scanf("%d",&num);while (ptr) {if (ptr->Id_num == num) {break;}ptr = ptr->next;}if (!ptr) {printf("\n查询失败.\n");}else {printf("\n查询成功.\n该学生的学号为 :%d\n",ptr->Id_num);}}void Del_StudentInfo(stu s){stu ptr = s->next,pro=s;int num;printf("请输入要删除学生的学号 :");scanf("%d",&num);while (ptr && ptr->Id_num != num) {pro = ptr;ptr = ptr->next;}if (ptr == NULL) {printf("删除失败\n");return;}else {pro->next = ptr->next;free(ptr);ptr = NULL;printf("删除成功.\n");}}

main函数实现源码

#include"LinkList.h"int main(){int input;stu s = InitList();do{menu();printf("请输入一个选项 :");scanf("%d",&input);switch (input){case 1:Creat_StudentInfo(s);break;case 2:Show_StudentInfo(s);break;case 3:Find_StudentInfo(s);break;case 4:Add_Student(s);break;case 5:Del_StudentInfo(s);break;default :printf("输入错误,请重新输入一个合理的选项\n");break;}} while (input);return 0;}

实现过程中遇到的问题

我当时赋值学生姓名的时候是直接使p->name=St_name;在添加学生的姓名的时候开始我一直采用这种方法,但是当我遍历的时候发现姓名全部都是最后一次输入的姓名。就像这样。

解决方案

我当时调试的时候发现开始的时候输入 李四,王五的时候都还对,但是当我输入张三的时候发现前两个名字都变为张三了。然后我意识到我每次输入的时候都是让p->name=St_name,St_name没有改变所以每次输入后以前的名字也都被赋值成一样的了。通过思考,我想到一个方法,就是通过使用strcpy()这个赋值函数进行姓名的赋值。strcpy(p->name,St_name)这样的话就是把每次的姓名直接拷贝给结点里面的信息了。这样的话就不会出现姓名重叠的现象了

实现效果

总结

通过这个简单的学生信息管理的实现,可以增加我们对单链表基础相关的知识,对于我自己来说,当时遇到的那个学生赋值的那个问题,刚开始的时候不知道是怎么回事,自己简单的以为只需要 scanf(“%s”,p->name);就可以了。但是没有考虑到要是不拷贝的话,arr的最后改变会直接影响到前面所有学生的姓名的。我觉得这个小点对我自己的收获挺大的。希望也对其他小伙伴有帮助!

但凡不能杀死你的,最终都会试你变得更强大!

OK!以上就是本篇博客的所有内容了。看到最后的小伙伴给个素质三连吧😄😄😄同时在这里给自己打个气!!!希望明天的体测发挥出自己真正的实力!!!争取冲向80+!勇夺国奖!加油!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。