C语言学生信息管理系统

这是一个使用C语言编写的链表实现的学生信息管理系统,具备添加、查找、排序、修改和删除学生信息等功能。系统通过头插法和尾插法管理链表,支持按照姓名、性别、学号查找学生,并能对学生信息进行排序和修改。此外,系统还提供保存学生信息到文件的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言学生信息管理系统

此系统主要通过链表实现学生信息的增删查改。

目录

1.定义结构体

 2.新增学生信息

3.查找学生信息

(1)打印所有学生信息

 (2)按照姓名查找学生

(3)按照性别查找

(4)按照学号查找

4.添加新的学生信息

5.按照学生成绩排序

6.修改学生信息

(1)打印出修改前此学生的信息

(2)修改姓名

(3)修改学号

(4)修改全部信息

7.删除学生信息

8.保存学生信息

9.主函数

10.演示


1.定义结构体

定义一个结构体,里面包括学生的姓名、年龄、专业、学号、成绩,另外包括一个结构体指针。结构体指针用来存放下一个结点的地址,连接链表。

typedef struct student { 
	char name[20];//姓名
	int age;//年龄
	char sex[20] ;//性别
	char major[20];//专业
	char id[20];//学号
	int score;//成绩
	struct student *next;//结构体指针
} stu;

 

 2.新增学生信息

通过一个for循环控制录入的学生信息个数。每新增一个学生信息都会开辟一块新空间,将信息录入,并通过尾插法接入链表。

void add(stu *head) {
	system("cls");
	stu *p=head;
	stu *q;
	int a;
	printf("请输入你想新增几个学生信息:\n");
	scanf("%d",&a);
	int c=0;
	for(int n=0; n<a; n++) {
		stu *p1=(stu*)malloc(sizeof(stu));
		c++;
		printf("请输入第%d个学生的信息\n",c);
		printf("请输入学生姓名:\n");
		scanf("%s",&p1->name );
		printf("请输入学生年龄:\n");
		scanf("%d",&p1->age );
		while(p1->age <0) {                                  //判断年龄是否小于0
			printf("请检查是否输入错误,请重新输入!\n");
			scanf("%d",&p1->age );
		}
		printf("请输入学生性别:\n");
		scanf("%s",&p1->sex );
		while(strcmp(p1->sex,"男")!=0&&strcmp(p1->sex,"女")!=0 ) { //判断性别是否为男女
			printf("输入格式有误,请重新输入: (输入男或女!)\n");
			scanf("%s",&p1->sex );
		}
		printf("请输入学生专业:\n");
		scanf("%s",&p1->major );
		printf("请输入学生学号:\n");
		scanf("%s",&p1->id );
		q=head;
		while(q->next !=NULL) {                           //判断录入的学号是否重复
			q=q->next ;
			while(strcmp(p1->id ,q->id)==0) {
				printf("该学号已存在,请重新输入!\n");
				scanf("%s",&p1->id);
			}

		}
		printf("请输入学生成绩:\n");
		scanf("%d",&p1->score );
		while(p1->score < 0) {                             //判断成绩是否小于0
			printf("请检查是否输入错误,请重新输入!\n");
			scanf("%d",&p1->score );
		}
		p->next=p1;                                        //尾插法
		p=p->next;
		p->next=NULL;
		printf("添加成功!!\n");
		printf("\n");
	}
	p->next=NULL;
	printf("\n创建完毕!\n");
	system("pause");
	return;
}

3.查找学生信息

查找学生信息可以通过姓名、学号、性别查找,或打印出所有学生信息。

void find(stu *head) {
	printf("查看所有学生信息请按1\n");
	printf("按照学生姓名查找请按2\n");
	printf("按照学生学号查找请按3\n");
	printf("按照学生性别查找请按4\n");
	printf("请输入查询模式:\n");
	int i;
	scanf("%d",&i);
	system("cls");
	switch(i) {
		case 1:
			whileList(head);
			break;
		case 2:
			chazhao(head);
			break;
		case 3:
			xuehao(head);
			break;
		case 4:
			Xingbie(head);
			break;
	}
}

(1)打印所有学生信息

void whileList(stu *head) {
	printf("学生信息:\n\t姓名\t年龄\t性别  \t专业\t\t学号\t\t成绩\n");
	stu *p,*p1;
	p=head;
	p1=p->next ;
	while(p1!=NULL) {
		printf("%13s",p1->name );
		printf("%6d",p1->age );
		printf("%8s",p1->sex );
		printf("%10s",p1->major );
		printf("%17s",p1->id );
		printf("%13d",p1->score );
		printf("\n");
		p1=p1->next ;
	}
	system("pause");
}

 (2)按照姓名查找学生

通过字符串比较来找出要查询的姓名与链表中所相同的姓名,并将其打印出来。特别的,如果存在相同的姓名,则会将同名的人全部打印。

void chazhao(stu *head) {
	stu *p,*p1;
	p=head;
	p1=p->next ;
	char named[20];
	printf("请输入要查找的学生的姓名:\n");
	scanf("%s",&named);
	int n=0;
	while(p1!=NULL) {
		while(strcmp(p1->name ,named)==0) {
			printf("学生信息:\n\t姓名\t年龄\t性别  \t专业\t\t学号\t\t成绩\n");
			printf("%13s"
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值