C语言项目实战学生管理系统(5)
  micz61TEX78l 2023年11月02日 53 0

(文章目录)

前言

本文我们介绍如何在指定的位置添加学生的信息,还有main函数里面相关函数调用我们也展示给大家。

一、指定位置添加学生信息

在指定位置添加学生的信息首先要得到指定的位置。 这个时候我们采用之前学的查找函数查找到我们想要的位置,然后把得到的位置当成参数传入函数,若指定位置在尾节点处那么就和前面我们所讲尾添加是一样的操作。 如果不在尾节点处而是在中间位置那么我们就得按照下面方法插入。

//指定位置插入节点
void insertnote(STUNODE*Ptemp, char arrStunum[10], char arrStuname[10], int iStuSorce)
{
	//创建节点
	STUNODE*Pnewtemp = malloc(sizeof(STUNODE));
	strcpy(Pnewtemp->arrStuname, arrStuname);
	strcpy(Pnewtemp->arrStunum, arrStunum);
	Pnewtemp->iStuSorce = iStuSorce;
	Pnewtemp->pNext = NULL;
	if (Ptemp == g_pEnd) //指定节点为尾节点
	{
		g_pEnd->pNext = Pnewtemp;
		g_pEnd = Pnewtemp;
	}
	else
	{
		Pnewtemp->pNext = Ptemp->pNext; //先让指定位置下一个节点和插入节点连上
		Ptemp->pNext = Pnewtemp;  
	}
}

二、main函数里面的函数调用

在主函数里面我们主要是进行一些参数的初始化以及使用switch case结构进行命令的使用。

int main(void)
{
	int norder = -1;
	char arrStunum[10] = { '\0' };
	char arrStuname[10]= { '\0' };
	int iStuSorce=-1;
	char nflag = 1;
	char xorder = 0;
	STUNODE *Ptemp = NULL;

	showorder();

	//读取学生信息
	readstuformfile();
	while (nflag)
	{
		printf("请输入指令:\n");
		scanf_s("%d", &norder);

		switch (norder)
	   {
		case 1://头添加
			//添加一个学生信息
			printf("输入学号:");
			scanf("%s", arrStunum);
			printf("输入姓名:");
			scanf("%s", arrStuname);
			printf("输入分数:");
			scanf("%d", &iStuSorce);
			AddstuMSG(arrStunum, arrStuname, iStuSorce);
			break;
		case 11://尾添加
			//添加一个学生信息
			printf("输入学号:");
			scanf("%s", arrStunum);
			printf("输入姓名:");
			scanf("%s", arrStuname);
			printf("输入分数:");
			scanf("%d", &iStuSorce);
			AddstuMSGtolinkhead(arrStunum, arrStuname, iStuSorce);
			break;
		case 12://中间添加
			printf("输入指定学号:");
			scanf("%s", arrStunum);
			Ptemp = Findstunum(arrStunum); //将找到的节点传递给Ptemp
			if (NULL != Ptemp)
			{
				//TODO:插入
				//添加一个学生信息
				printf("输入学号:");
				scanf("%s", arrStunum);
				printf("输入姓名:");
				scanf("%s", arrStuname);
				printf("输入分数:");
				scanf("%d", &iStuSorce);
				insertnote(Ptemp, arrStunum, arrStuname, iStuSorce);
			}
			break;
		case 2://打印指定学生信息
			//输入一个学号
			printf("输入指定学号:\n");
			scanf("%s",arrStunum);
			//查找
			Ptemp = Findstunum(arrStunum);
			//打印
			if (NULL != Ptemp)
			{
				printf("学号:%s,分数:%d,姓名:%s\n",Ptemp->arrStunum, Ptemp->iStuSorce, Ptemp->arrStuname);
			}
			break;
		case 3://修改指定学生信息
			//输入一个学号
			printf("输入指定学号:\n");
			scanf("%s", arrStunum);
			//查找
			Ptemp = Findstunum(arrStunum);
			//修改
			if (NULL != Ptemp)
			{
				printf("修改学号按:%d 修改姓名按:%d 修改分数按:%d 退出修改按%d\n", 1, 2, 3,0);
				while (scanf("%d", &xorder)&&xorder!=0)
				{
					switch (xorder)
					{
					case 1:
						//修改学号
						printf("输入学号:");
						scanf("%s", arrStunum);
						strcpy(Ptemp->arrStunum, arrStunum);
						break;
					case 2:
						//修改姓名
						printf("输入姓名:");
						scanf("%s", arrStuname);
						strcpy(Ptemp->arrStuname, arrStuname);
						break;
					case 3:
						//修改分数
						printf("输入分数:");
						scanf("%d", &iStuSorce);
						Ptemp->iStuSorce = iStuSorce;
						break;
					}
				}
			}
			printf("修改完成!\n");
			break;
		case 6://删除指定学生信息
			//输入一个学号
			printf("输入要删除学生学号:\n");
			scanf("%s", arrStunum);
			//查找
			Ptemp = Findstunum(arrStunum);
			//删除
			if (NULL != Ptemp)
			{
				//删除指定学生
				delectstunode(Ptemp);
				printf("删除完成!\n");
			}
			break;
		case 7://恢复学生信息
			//释放链表
			FreeLinkDate();
			//恢复学生信息
			readstuformfile();
			break;
		case 4://保存学生信息
			savestutofile();
			printf("保存完成!\n");
			break;
		case 9:
			//显示链表信息
			showdate();
			break;
		case 10:
			//显示指令
			showorder();
			break;
		case 0:
			//退出系统
			nflag = 0;
			break;
		default:
			printf("输入的指令不对!\n");
			break;
	   }
	}
	
	//保存学生信息
	savestutofile();

	//清空链表
	FreeLinkDate();
	return 0;
}

总结

学了这么多大家应该发现了学生管理系统主要就是链表的添加、遍历、查找这些操作了。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  JBfJ5LpBD0AJ   2023年11月13日   23   0   0 初始化链表#define
micz61TEX78l