【娱乐大闯关】C语言实现学生信息录入系统


在这里插入图片描述

一、StuSystem.h

1、头文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

2、所录信息

#define MAX 20
typedef struct STUDENT {
	char xh[MAX], xm[MAX];//学号、姓名
	float cj;//成绩
	struct STUDENT* next;
}Student;
typedef struct HEADER {
	char bjm[MAX];//班级名
	int cnt;//班级人数
	struct STUDENT* next;
}Header;

3、函数声明

void menu();
void InitStu(Header* head);
void InputStu(Header* head);
void AppendStu(Header* head);
void ModifyStu(Header* head);
void DelStu(Header* head);
void FindStu(Header* head);
void ShowStu(Header head);
int Exit();

二、Main_stusystem.c

1、选择菜单

void menu() {
	puts("****************************************************");
	puts("* 1、初始化   2、录入信息 3、追加信息 4、修改信息  *");
	puts("* 5、删除信息 6、查找信息 7、显示信息 0、退出系统  *");
	puts("****************************************************");
	printf("请选择:> ");
}

2、选择器

void selec() {
	Header head;
	int input;
	//选择系统
	while (1) {
		system("cls");
		menu();
		scanf("%d", &input);
		switch (input) {
		case 1:InitStu(&head); break;
		case 2:InputStu(&head); break;
		case 3:AppendStu(&head); break;
		case 4:ModifyStu(&head); break;
		case 5:DelStu(&head); break;
		case 6:FindStu(&head); break;
		case 7:ShowStu(head); break;
		case 0:	if (Exit()) return; break;
		default:printf("你的选择有误,请重新选择!\n");
			system("pause");break;
		}
	}
}

3、主函数

int main() {
	selec();
	return 0;
}

三、Fun_stusystem.c

1、初始化

void InitStu(Header* head) {
	printf("输入班级名:> ");
	scanf("%s", head->bjm);
	printf("输入班级人数:> ");
	scanf("%d", &head->cnt);
	head->next = NULL;
	printf("初始化完毕\n");
	system("pause");
}

2、信息录入

void InputStu(Header* head) {
	int i = 0;
	Student* tail = NULL;//尾指针
	head->next = NULL;
	printf("录入学生的信息:学号 姓名 成绩\n");
	for (i = 0; i < head->cnt; i++) {
		Student* stu;
		stu = (Student*)malloc(sizeof(Student));//动态申请一个节点
		if (stu == NULL) {//如果stu节点为空,说明没有malloc到空间
			printf("mallco Fail!");
			return;
		}
		stu->next = NULL;//初始化stu的指针
		if (head->next == NULL) {//说明没有输入数据
			head->next = stu;//头节点的下一个指向stu节点
			tail = stu;//让尾指针指向stu
			scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
		}
		else {//说明已经输入了数据
			tail->next = stu;//尾指针的下一个指向stu
			tail = tail->next;//尾指针往下面移动
			scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);
		}
	}
	printf("录入信息完毕\n");
	system("pause");
}

3、追加信息

void AppendStu(Header* head) {
	int pos, i;
	Student* p = head->next;
	Student* stu;
	stu = (Student*)malloc(sizeof(Student));//申请一个节点用于存放追加的学生的信息
	if (stu == NULL) {//如果stu节点为空,说明没有malloc到空间
		printf("mallco Fail!");
		return;
	}
	stu->next = NULL;//初始化stu的指针
	printf("请选择你要在哪一名学生后面增加一个学生信息:> ");
	scanf("%d", &pos);
	if (pos<1 || pos>head->cnt) {
		puts("所选位置不合法!"); system("pause");
		return;
	}
	i = pos;
	while (--pos)
	{
		p = p->next;
	}
	printf("请输入第%d个学生的学号,姓名,成绩:\n", ++i);
	scanf("%s%s%f", stu->xh, stu->xm, &stu->cj);//输入信息
	head->cnt++;//学生人数+1
	fflush(stdin);//刷新输入——清空输入缓冲区
	stu->next = p->next;
	p->next = stu;
	printf("追加信息完毕\n");
	system("pause");
}

4、修改信息

void ModifyStu(Header* head) {
	int pos;
	Student* p;
	p = head->next;
	printf("请选择你要修改第几个学生的信息:> ");
	scanf("%d", &pos);
	if (pos<1 || pos>head->cnt) {
		puts("所选位置不合法!"); system("pause");
		return;
	}
	while (--pos) p = p->next;
	if (p == NULL)
	{
		printf("该学生不存在!"); system("pause");
		return;
	}
	else
	{
		puts("请选择你要修改的内容:");
		puts("\n** 1、学生姓名 **** 2、学生学号 **** 3、学生成绩 **\n");
		fflush(stdout);//刷新输出——清空读写缓冲区
		scanf("%d", &pos);
		switch (pos)
		{
		case 1:printf("原信息为%s\n", p->xm); printf("请输入你要修改的内容\n"); scanf("%s", p->xm); break;
		case 2:printf("原信息为%s\n", p->xh); printf("请输入你要修改的内容\n"); scanf("%s", p->xh); break;
		case 3:printf("原信息为%.2f\n", p->cj); printf("请输入你要修改的内容\n"); scanf("%f", &p->cj); break;
		default:printf("你的选择有误!\n"); break;
		}
		fflush(stdin);
	}
	printf("修改信息完毕\n");
	system("pause");
}

5、删除信息

void DelStu(Header* head) {
	int pos, flag = 1;
	Student* p = head->next;
	Student* q = head->next;
	Student* k = head->next;
	head->next = NULL;
	printf("请输入你要删除第几名学生的信息:>");
	scanf("%d", &pos);
	if (pos<1 || pos>head->cnt) {
		puts("所选位置不合法!"); system("pause");
		return;
	}
	if (pos == 1) {//删除第一个
		p = p->next;
		head->next = p;
		free(q);
		head->cnt--;
		printf("删除信息完毕!\n");
		system("pause");
		return;
	}
	while (--pos)
	{
		p = p->next;
		if (flag == 0) {
			q = q->next;
		}
		flag = 0;
	}
	if (p->next == NULL) {
		q->next = NULL;
		head->next = k;
		free(p);
		head->cnt--;
		printf("删除信息完毕!\n");
		system("pause");
		return;
	}
	if (p == NULL)
		puts("该学生不存在!");
	q->next = p->next;
	head->next = k;
	free(p);
	head->cnt--;
	printf("删除信息完毕!\n");
	system("pause");
}

6、查找信息

void FindStu(Header* head) {
	int pos;
	Student* p = head->next;
	char Xh[20], Xm[20];
	puts("\n** 1 按学号查找 *** 2 按姓名查找 **\n");
	printf("请选择你想查找的方式:> ");
	scanf("%d", &pos);
	if (pos != 1 && pos != 2) {
		puts("你的选择出错!");
		system("pause");
		return;
	}
	if (pos == 1) {
		printf("请输入该生的学号:\n");
		scanf("%s", Xh);
		while (p) {
			if (strcmp(Xh, p->xh) == 0) {
				puts("该生的信息如下:");
				printf("%s %s %.2f\n", p->xh, p->xm, p->cj);
				system("pause");
				break;
			}
			p = p->next;
		}
	}
	else {
		printf("请输入该生的姓名\n");
		scanf("%s", Xm);
		while (p) {
			if (strcmp(Xm, p->xm) == 0) {
				puts("该生的信息如下:");
				printf("%s %s %.2f\n", p->xh, p->xm, p->cj);
				system("pause");
				break;
			}
			p = p->next;
		}
	}
	printf("信息查找完毕\n");
	system("pause");
}

7、显示信息

void ShowStu(Header head) {
	Student* p = head.next;
	int i;
	if (p == NULL)
		puts("你还没有录入信息!\n");
	printf("%s 共有 %d 名学生,具体信息如下:\n", head.bjm, head.cnt);
	for (i = 0; i < head.cnt; i++) {
		printf("%s\t%s\t%.2f\n", p->xh, p->xm, p->cj);
		p = p->next;
	}
	printf("信息显示完毕!\n");
	system("pause");
}

8、退出

int Exit() {
	int i;
	system("cls");
	menu();
	puts("\n\n** 1、确认退出 *** 0、重新开始 **\n");
	printf("您的选择是:> ");
	scanf("%d", &i);
	switch (i) {
	case 1:printf("退出成功!\n"); return i; break;
	case 0:break;
	default:printf("选择无效,请重新选择!\n"); system("pause"); Exit();
	}
	return i;
}

四、执行结果

初始化
image.png
信息录入
image.png
追加信息
image.png
修改信息
image.png
显示信息
image.png
删除信息
image.png
查找信息
image.png

注:此程序只做参考使用,并不完善……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一段路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值