C语言(链表)-学生成绩管理系统(简要描述)

C语言-学生成绩管理系统

C语言应该是绝大多数初学者必备的技能之一,下面展示的是一个以C语言编写的学生成绩管理系统,希望对各位有所帮助。
程序部分代码如下:

定义一个学生的结构体:

typedef struct student
{
	int number;
	char name[20];
	char major[10];
	int math;
	int English;
	int cyy;
	struct student *next;//指向下一个节点的指针}student,*pstudent;
	//定义结构体指针
}student,*pstudent;

菜单函数:

void menu()
{

	system("cls");
	printf("----------------------------学生管理系统---------------------------\n");
	printf("\n\t                 1:新建学生信息                   \n");
	printf("\n\t                 2:查询学生信息                   \n");
	printf("\n\t                 3:修改学生信息             \n");
	printf("\n\t                 4:删除学生信息                   \n");
	printf("\n\t                 5:显示学生信息                   \n");
	printf("\n\t                 6:显示学生信息的数量   \n");  
	printf("\n\t                 7:保存数据                   \n");  
	printf("\n\t                 8:读取数据                   \n");  
	printf("\n\t                 0:退出系统                   \n");
	printf("-------------------------------------------------------------------\n");
}

新建学生信息,创建一个节点,它会返回一个新学生的指针:

pstudent CreateStudent ()
{
	pstudent pstu =(pstudent)malloc (sizeof (student));//申请内存
	if (!pstu)
	{
		printf ("申请内存失败!\n");
		return NULL;
	}
	printf("请输入学生的编号(正整数!):");
	while(1!=scanf("%d",&pstu->number)||getaddr(pstu->number))//1!=("%d",&pstu->number)这是判断所输入的是否为数字
	{ 	printf("\n学生编号错误或已经有这个编号,重新输入学生的编号(整数):");
	fflush(stdin);
	}
		printf("请输入学生的姓名:");
	scanf("%s",pstu->name);
		printf("请输入学生的专业:");
	scanf("%s",pstu->major);
		printf("请输入学生的高数成绩:");
	scanf("%d",&pstu->math);
		printf("请输入学生的英语成绩:");
	scanf("%d",&pstu->English);
		printf("请输入学生的C语言成绩:");
	scanf("%d",&pstu->cyy);
	printf("学生信息新建成功!\n按任意键继续");
	pstu->next=NULL;
	getch();
	return pstu;
}

把学生节点加入链表中:

int AddStudent(pstudent pstu)
{
	pstudent ps=&head;
	if (!pstu)
	{
		return 0;
	}
	//判断该学生信息是否重复
	if (getaddr(pstu->number))
	{	printf("编号为%d的学生信息已经存在!\n",pstu->number);
		free(pstu);//释放该内存的空间
		return 0;//表示没有成功加入
	}
	//while循环的作用是找到当前链表的最后一个节点
	while (ps->next)
		ps=ps->next ;
	//把新节点加入到最后那个节点的后面
	ps->next =pstu;
	pstu->next =NULL;
	return 1;	//表示成功加入
}

返回指定学生节点上一个节点的指针:

pstudent getaddr(int number)
{
	pstudent pstu=&head;
	while (pstu->next)//如果这个节点有下一个节点,一直遍历到最后。
	{
		if (pstu->next->number==number)
			return pstu;
			pstu=pstu->next ;
	}
		return NULL;
}

显示所有学生信息:

void ShowAll()
{
	system("cls");
pstudent pstu = &head;
printf("------------------------------------------------------------------\n");
printf("编号       姓名          专业        高数      英语      C语言 \n");
printf("------------------------------------------------------------------\n");
while (pstu->next)
{
	printf("%-10d",pstu->next->number);
printf("%-10s",pstu->next->name);
printf("%10s",pstu->next->major);
printf("%10d",pstu->next->math);
printf("%10d",pstu->next->English);
printf("%10d\n",pstu->next->cyy);
pstu=pstu->next;//让指针指向下一个节点
}
printf("\n------------------------------------------------------------------\n");
getch();
}

显示学生信息的数量:

int showcount()
{
	pstudent pstu=&head;
	int count =0;
	while (pstu->next)
	{
		count++;
		pstu=pstu->next;
	}
	printf("\n学生信息数量为%d",count); 
	getch();
	getch();
	return count;
	}

修改学生信息:

void xiugai(int number)
{
	pstudent pstu=getaddr(number);//获取要修改的学生信息节点的上一个节点
	if (pstu==NULL)
	{
		printf("没有编号为%d的学生信息",number);
		getch();
		getch();
	return;
	}
	pstu=pstu->next;//让指针指向自己
	printf("请修改学生的姓名:");
	scanf("%s",pstu->name);
		printf("请修改学生的专业:");
	scanf("%10s",pstu->major);
		printf("请修改学生的高数成绩:");
	scanf("%10d",&pstu->math);
		printf("请修改学生的英语成绩:");
	scanf("%10d",&pstu->English);
		printf("请修改学生的C语言成绩:");
	scanf("%10d",&pstu->cyy);
	printf("修改完毕!请指示!");
	getch();
	}

获取学生编号:

int getnumber()
	{
		int number;
	printf("请输入学生的编号:");
	while (1!=scanf("%d",&number))
	{
		printf("编号不存在,请重新输入:");
		fflush(stdin);
	}
	return number;
		}

删除学生信息:

	void Deletestudent(int number)
	{
		pstudent pstu,p; pstu=getaddr(number);//获取要修改的学生信息节点的上一个节点
	if (pstu==NULL)
	{
		printf("没有编号为%d的学生信息",number);
		getch();
		getch();
	return;
	}
		p =pstu->next;
		pstu->next=p->next;
		free (p);	printf("已删除编号为%d的学生信息!\n",number);
		getch();
		getch();
		}

文件等功能就不一一上传了,有兴趣可以去文章最下方下载源码。

相关实现效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如有错误之处,欢迎指出,万分感谢!

源码链接:https://download.csdn.net/download/qq_37430108/12339347

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值