利用单链表实现学生信息管理系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

随着你们的代码能力不断提升,我觉得也该是做一些小项目的时候了,所以我们利用所学的单链表的知识来做一个信息管理系用吧


提示:以下是本篇文章正文内容,下面案例可供参考

一、学生信息管理系统是什么?

1.我们应该从何下手学生信息管理系统呢,其实这里面应该先定义两个结构体,第一个存放学生的数据,因为学生总不可能只有一个性名吧,肯定还有性别年龄,学号,在定义一个单链表的结构体那么这样我们的初始步骤就算完成了接下来请欣赏初步的代码段吧

typedef int Datatype;
struct Person
{
	char name[20];//存放姓名
	char num[10];//存放学号
	char age[3];//存放年龄
};
typedef struct SListNode
{
	struct SListNode* next;
	Datatype data;
}SLN;

二、使用步骤

1.定义接口

1.其中的接口肯定不止一个吧!肯定有单链表的初始化,单链表的插入,单链表的删除,单链表的遍历,单链表的查找

代码如下(示例):

1.首先是单链表的建立代码如下

void SList_Init(SLN** pphead)
{
	SLN* tail = NULL, * phead = NULL;
	int n = 0, i = 0;
	*pphead = (SLN*)malloc(sizeof(SLN));
	tail = *pphead;
	printf("请输入学生的总人数\n");
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		phead = (SLN*)malloc(sizeof(SLN));
		phead->next = NULL;
		printf("请输入你的学号\n");
		scanf("%s", &phead->data.num);
		printf("请输入你的姓名\n");
		scanf("%s", &phead->data.name);
		printf("请输入你的年龄\n");
		scanf("%s", &phead->data.age);
		tail->next = phead;
		tail = phead;
	}
	tail->next = NULL;
}
接下来是单链表的遍历
void SList_Print(SLN* pphead)
{
	SLN* cur = pphead;
	printf("学号\t姓名\t年龄\t\n");
	do
	{
		cur = cur->next;
		printf("%s\t%s\t%s\t\n",cur->data.num,cur->data.name,cur->data.age);
	} while (cur->next != NULL);
}

定义一个临时的结构体变量SLN* cur存储数据的地址,本次采用的是do while循环,用while循环也可以,看个人!因为遍历不用改变数值,所以说传一级指针就行了,到目前为止,我们已经可以开始进行一些小的测试了,我们需要测试看一下之前写的代码有没有错误,因为写一些测一些嘛,假设你写了很多,然后一测试几十个报错你是不是就开始慌了呢?所以写一点测一点是一个非常好的习惯哦

int main()
{
	SLN* plist = NULL;
	int i = 1, n = 0;
	printf("1.建立学生信息\n2.查看学生的信息\n");
	while (i != 0)
	{
		printf("请选择你想要的操作\n");
		scanf("%d", &i);
		switch (i)
		{
		case 1:
			SList_Init(&plist);
			break;
		case 2:
			SList_Print(plist);
			break;
		default:
			break;
		}
	}
	return 0;
}

这是到目前为止的主函数段下面来进行测试吧

4fb7941104b546249900957d899854bb.png

接下来是单链表的插入

void InsertNode(SLN* phead, int n)
{
	SLN* plist = phead;
	int i = 1;
	while (plist && i < n)
	{
		plist = plist->next;
		++i;
	}
	SLN* newnode = (SLN*)malloc(sizeof(SLN));
	printf("请输入你的学号\n");
	scanf("%s", &newnode->data.num);
	printf("请输入你的姓名\n");
	scanf("%s", &newnode->data.name);
	printf("请输入你的年龄\n");
	scanf("%s", &newnode->data.age);
	newnode->next = plist->next;
	plist->next = newnode;
}

插入的话其实就是malloc一块节点出来,然后在把前后链接一下,plist->next其实是下一个数据的地址现在赋给了newnode->next其实就是让newnode指向下一个,然后再让plist->next指向newnode相当于把newnode与plist又链接起来了这样就完成了前后的连接

接下来写单链表的删除

void SListDelete(SLN* phead)
{
	char arr[12] = { 0 };
	SLN* tail, * cur;
	tail = phead;
	cur = phead->next;
	printf("请输入你要删除的学号\n");
	scanf("%s", arr);
	while (cur && strcmp(arr, cur->data.num) !=0)
	{
		tail = cur;
		cur = cur->next;
	}
	if (cur!= NULL)
	{
		tail->next = cur->next;
		cur->next = NULL;
		free(cur);
	}
	else
	{
		printf("删除失败\n");
	}
}

这边利用的是一级指针,strcmp是string.h里面的一个函数用来比较的,当两个比较的数相等是就会等于0,所以此时我判断他不等于0,因为while里面一般放的都是继续的条件,讲一下思路吧,定义两个指针一个指向前一个指向后,如果没找到对应的学号就继续往下走,如果找到就停下来,这边我们要进行一个判断只有当cur不等于NULL的时候才会继续的往下走,然后把要删除位置的地址给覆盖,然后再置成NULL最后在free掉。

最后是单链表的查找

void SListSearch(SLN* phead)
{
	char arr[12] = { 0 };
	SLN* plist = phead->next;
	printf("请输入你要查找的学号\n");
	scanf("%s", arr);
	while (plist && strcmp(arr, plist->data.num))
	{
		plist = plist->next;
	}
	if (plist)
	{
		printf("学号:%s\t姓名%s\t年龄%s\t\n", plist->data.num, plist->data.name, plist->data.age);
	}
	else
	{
		printf("查找失败\n");
	}
}

好啦,本次的学生信息管理系统的内容已经完成啦,大家如果还想要其他的话可以在我底下评论并且关注我噢!


总结

最好是自己手敲一遍不要直接crtl c crtl v了,我们可不是cv工程师哦!

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M malloc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值