C语言单链表简单学生管理系统

C语言单链表简单学生成绩管理系统


文章目录

  • C语言单链表简单学生成绩管理系统
    • @[TOC]
    • 代码下载
      • 直接下载(含可执行程序)
      • 手动复制
    • 预览
    • 库包含
    • 功能定义
    • 结构体定义
      • 学生结构体
      • 节点结构体
      • 头结点
    • 其他预定义
    • 主函数
    • 主界面
    • 头结点创建
    • 创建学生信息
    • 打印学生信息
    • 保存学生信息
    • 读取学生信息
    • 统计学生人数
    • 查找学生信息
    • 更改学生信息
    • 删除学生信息
  • 全部代码

代码下载

直接下载(含可执行程序)

  链接:https://pan.baidu.com/s/1BL2HaTkagd9DmVUm9unMXw 提取码:6oi1

手动复制

  请到文章最底部复制全部代码


预览

主界面:

C语言单链表简单学生管理系统_第1张图片
学生信息录入:
C语言单链表简单学生管理系统_第2张图片
显示所有学生:

C语言单链表简单学生管理系统_第3张图片
保存学生信息到文件:
C语言单链表简单学生管理系统_第4张图片
搜索界面:
C语言单链表简单学生管理系统_第5张图片
更改学生信息界面:
C语言单链表简单学生管理系统_第6张图片


库包含

我们要用到屏幕输出、键盘输入以及文件读写功能,需要包含以下库

#include 
#include 
#include 

功能定义

在main函数之前,我们可以先把功能先定义好,程序包含了以下的功能:

//欢迎界面
int WelcomeInfo();

//创建头结点
void CreatListOfHead();

//录入学生信息
void InputStudentInfo();

//打印学生信息
void PrintStudentInfo();

//保存学生信息
void SaveData();

//读取学生信息
void LoadData();

//统计学生人数
void CountStudent();

//查找学生信息
void SearchStudent();

//更改学生信息
void AlterStudentInfo();

//删除学生信息
void DeleteStudent();

//永久循环体
int Loop();

结构体定义

学生结构体

这里需要定义学生的结构体,结构体包含了学号、姓名、性别、年龄、成绩的相关信息

//学生
typedef struct _Student
{
	unsigned int nStuNum; ///学号
	char name[20];		  /// 姓名
	char sex[4];		  ///性别
	unsigned int age;	 ///年龄
	unsigned int nScore;  ///成绩
} Student;

节点结构体

节点结构体包含两个结构,一个是学生信息,另一个就是下一个节点的指针

//链表	
typedef struct _Node
{
	Student stu;		///学生信息
	struct _Node *next; ///下一个节点指针
} Node;

头结点

在这里可以先把头结点先定义好

//头结点
Node *g_pHead = NULL;

其他预定义

这里包含了文件的定义,用于保存、加载文件。

//文件
FILE *fp;
char filename[127];

主函数

主函数这里只需要执行Loop()函数即可,其中Loop()是永久循环函数。

int main()
{
	Loop();

	return 0;
}

int Loop()
{
	while (1)
	{
		// 清除输出
		system("cls");

		WelcomeInfo();
		printf("请输入数字:");
		char ch = _getch();
		switch (ch)
		{
		case '1':
			//录入学生信息
			InputStudentInfo();
			break;
		case '2':
			//打印学生信息
			PrintStudentInfo();
			break;
		case '3':
			//保存学生信息
			SaveData();
			break;
		case '4':
			//读取学生信息
			LoadData();
			break;
		case '5':
			//统计学生人数
			CountStudent();
			break;
		case '6':
			//查找学生信息
			SearchStudent();
			break;
		case '7':
			//更改学生信息
			AlterStudentInfo();
			break;
		case '8':
			//删除学生信息
			DeleteStudent();
			break;
		case '0':
			//退出系统
			exit(0);
			break;
		default:
			break;
		}
	}
}

主界面

主界面应展示一级菜单

int WelcomeInfo()
{
	printf("\n\n");
	printf("    *******************************************\n");
	printf("    *          欢迎使用成绩管理系统           *\n");
	printf("    *******************************************\n");
	printf("    *             请选择功能列表              *\n");
	printf("    *******************************************\n");
	printf("    *             1:录入学生信息             *\n");
	printf("    *             2:打印学生信息             *\n");
	printf("    *             3:保存学生信息             *\n");
	printf("    *             4:读取学生信息             *\n");
	printf("    *             5:统计学生人数             *\n");
	printf("    *             6:查找学生信息             *\n");
	printf("    *             7:修改学生信息             *\n");
	printf("    *             8:删除学生信息             *\n");
	printf("    *             0:退出系统                 *\n");
	printf("    *******************************************\n");
	return 0;
}

头结点创建

应当有头结点的创建函数,用以从文件中加载学生信息的头结点创建。

//创建头结点
void CreatListOfHead()
{
	Node *g_pHead = (Node *)malloc(sizeof(Node));
	g_pHead->next = NULL;
}

创建学生信息

// 录入学生信息
void InputStudentInfo()
{
	//申请内存,开辟节点
	Node *p = (Node *)malloc(sizeof(Node));
	p->next = NULL;

	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息录入界面            *\n");
	printf("    *******************************************\n");
	printf("\n");
	printf("请输入学生姓名:");
	scanf("%s", p->stu.name);
	printf("请输入学生学号:");
	scanf("%d", &p->stu.nStuNum);
	printf("请输入学生性别:");
	scanf("%s", p->stu.sex);
	printf("请输入学生年龄:");
	scanf("%d", &p->stu.age);
	printf("请输入学生成绩:");
	scanf("%d", &p->stu.nScore);

	//将节点添加到链表中
	if (g_pHead == NULL)
	{
		g_pHead = p;
	}
	else
	{
		//头插法
		p->next = g_pHead;
		g_pHead = p;
	}
	system("cls");
	printf("    *******************************************\n");
	printf("    *            学生信息录入成功!           *\n");
	printf("    *******************************************\n");
	system("pause");
	system("cls");
}

打印学生信息

//打印学生信息
void PrintStudentInfo()
{
	system("cls");
	printf("\n\n");
	printf("---------------------------------------------------------------------------------\n");
	printf("|\t\t\t欢迎使用学生管理系统\t\t\t\t\t|\n");
	printf("---------------------------------------------------------------------------------\n");
	printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
	printf("---------------------------------------------------------------------------------\n");

	//遍历链表
	Node *p = g_pHead;
	while (p != NULL)
	{
		printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
		printf("---------------------------------------------------------------------------------\n");

		p = p->next;
	}
	if (g_pHead == NULL)
	{
		printf("|\t\t\t\t没有学生信息\t\t\t\t\t|\n");
		printf("---------------------------------------------------------------------------------\n");
	}

	printf("\n\n");
	system("pause");
}

保存学生信息

//保存学生信息
void SaveData()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息保存界面            *\n");
	printf("    *******************************************\n");
	printf("\n\n");
	printf("请输入要保存的文件名:");
	scanf("%s", filename);

	Node *p = g_pHead;
	if ((fp = fopen(filename, "w")) == NULL)
	{
		printf("\n文件保存失败!不能获得文件句柄!\n");
		system("pause");
		return;
	}

	while (p != NULL)
	{
		fprintf(fp, "%s %d %s %d %d\n", p->stu.name, p->stu.nStuNum, p->stu.sex, p->stu.age, p->stu.nScore);
		p = p->next;
	}

	fclose(fp);

	system("cls");
	printf("    *******************************************\n");
	printf("    *            学生信息保存成功!           *\n");
	printf("    *******************************************\n");
	system("pause");
	system("cls");
}

读取学生信息

//读取学生信息
void LoadData()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息加载界面            *\n");
	printf("    *******************************************\n");
	printf("\n\n");
	printf("请输入保存有学生信息的文件名:");
	scanf("%s", filename);

	if ((fp = fopen(filename, "a+")) == NULL)
	{
		printf("\n文件打开失败!不能获得文件句柄!\n");
		system("pause");
		return;
	}
	if (g_pHead == NULL)
	{
		CreatListOfHead();
	}

	while (1)
	{
		Node *p = (Node *)malloc(sizeof(Node));
		p->next = NULL;

		//printf("p:%p\n", &p);
		if (fscanf(fp, "%s %d %s %d %d\n", p->stu.name, &p->stu.nStuNum, p->stu.sex, &p->stu.age, &p->stu.nScore) == EOF)
		{
			break;
		}
		//将节点添加到链表中
		if (g_pHead == NULL)
		{
			//printf("p->next:%p \t\t g_pHead:%p\t\t g_pHead->next:%p\n", &p->next, &g_pHead, &g_pHead->next);
			p->next = g_pHead;
			g_pHead = p;
		}
		else
		{
			//printf("p->next:%p \t\t g_pHead:%p\t\t g_pHead->next:%p\n", &p->next, &g_pHead,&g_pHead->next);
			p->next = g_pHead;
			g_pHead = p;
		}
	}

	fclose(fp);

	system("cls");
	printf("    *******************************************\n");
	printf("    *            学生信息加载成功!           *\n");
	printf("    *******************************************\n");
	printf("\n\n");
	system("pause");
	system("cls");
}

统计学生人数

//统计学生人数
void CountStudent()
{
	system("cls");
	printf("\n\n");
	printf("---------------------------------------------------------------------------------\n");
	printf("|\t\t\t欢迎使用学生管理系统\t\t\t\t\t|\n");
	printf("---------------------------------------------------------------------------------\n");

	//遍历链表
	Node *p = g_pHead;
	unsigned int count = 0;
	while (p != NULL)
	{
		count++;
		p = p->next;
	}
	printf("|\t\t\t\t学生人数:%d\t\t\t\t\t|\n", count);
	printf("---------------------------------------------------------------------------------\n");
	printf("\n\n");
	system("pause");
}

查找学生信息

//查找学生信息
void SearchStudent()
{
	while (1)
	{
		system("cls");
		printf("\n\n");
		printf("---------------------------------------------------------------------------------\n");
		printf("|\t\t\t搜索学生信息界面\t\t\t\t\t|\n");
		printf("---------------------------------------------------------------------------------\n");
		printf("\n\n");
		printf("请选择查询方式:【1】按学号   |  【2】按姓名 | 【-1】退出\n请选择:");
		int k;
		Node *p = g_pHead;
		scanf("%d", &k);
		switch (k)
		{
		case 1:
			printf("请输入学生学号:");
			int nStuNum;
			scanf("%d", &nStuNum);
			while (p->next != NULL)
			{
				if (p->stu.nStuNum == nStuNum)
				{
					printf("---------------------------------------------------------------------------------\n");
					printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
					printf("---------------------------------------------------------------------------------\n");
					printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
					printf("---------------------------------------------------------------------------------\n");
					p = p->next;
				}
				else
				{
					system("pause");
					printf("\t\t\t\t未查询到该生信息!\t\t\t\t\t");
					printf("---------------------------------------------------------------------------------\n");
					return;
				}
			}
			system("pause");
			return;
		case 2:
			printf("请输入学生姓名:");
			char name[20];
			scanf("%s", name);
			while (p && (strcmp(p->stu.name, name) != 0 )){p = p->next;}
			
			if (p)
			{
				printf("---------------------------------------------------------------------------------\n");
				printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
				printf("---------------------------------------------------------------------------------\n");
				printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
				printf("---------------------------------------------------------------------------------\n");
			}
			else
			{
				printf("---------------------------------------------------------------------------------\n");
				printf("\t\t\t\t未查询到该生信息!\t\t\t\t\t");
				printf("---------------------------------------------------------------------------------\n");
			}
			
			system("pause");
			return;
		case -1:
			return;
		default:
			printf("请重新选择!");
			system("pause");
			break;
		}
	}
}

更改学生信息

//更改学生信息
void AlterStudentInfo()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息更改界面            *\n");
	printf("    *******************************************\n");
	printf("\n");
	printf("请输入学生学号:");
	int nStuNum;
	scanf("%d", &nStuNum);
	Node *p = g_pHead;
	while (p && (p->stu.nStuNum != nStuNum))
	{
		p = p->next;
	}
	if (p)
	{
		printf("---------------------------------------------------------------------------------\n");
		printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
		printf("---------------------------------------------------------------------------------\n");
		printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
		printf("---------------------------------------------------------------------------------\n");
		printf("请输入更改后的学生学号:");
		scanf("%d", &p->stu.nStuNum);
		printf("请输入更改后的学生姓名:");
		scanf("%s", p->stu.name);
		printf("请输入更改后的学生性别:");
		scanf("%s", p->stu.sex);
		printf("请输入更改后的学生年龄:");
		scanf("%d", &p->stu.age);
		printf("请输入更改后的学生成绩:");
		scanf("%d", &p->stu.nScore);
		system("cls");
		printf("    *******************************************\n");
		printf("    *            学生信息更改成功!           *\n");
		printf("    *******************************************\n");
		system("pause");
		system("cls");
		return;
	}
	else
	{
		system("cls");
		printf("    *******************************************\n");
		printf("    *               找不到该学生!             *\n");
		printf("    *******************************************\n");
		system("pause");
		system("cls");
		return;
	}
}

删除学生信息

//删除学生信息
void DeleteStudent()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息删除界面            *\n");
	printf("    *******************************************\n");
	printf("\n");
	printf("请输入要删除的学生学号:");
	int nStuNum;
	scanf("%d", &nStuNum);
	Node *p = g_pHead;
	while (1)
	{
		if (p->next && (p->next->stu.nStuNum == nStuNum))
		{
			Node *useless = p->next;
			p->next = p->next->next;
			printf("以下信息已被删除:\n");
			printf("---------------------------------------------------------------------------------\n");
			printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
			printf("---------------------------------------------------------------------------------\n");
			printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", useless->stu.nStuNum, useless->stu.name, useless->stu.sex, useless->stu.age, useless->stu.nScore);
			printf("---------------------------------------------------------------------------------\n");
			printf("\n\n");
			system("pause");
			free(useless);
			return;
		}
		else
		{
			if (p->next != NULL)
			{
				p = p->next;
			}
			else
			{
				system("cls");
				printf("    *******************************************\n");
				printf("    *            学生信息删除失败!            *\n");
				printf("    *******************************************\n");
				printf("\n");
				system("pause");
				return;
			}
		}
	}
}

全部代码

// 学生成绩管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

#include 
#include 
#include 

//学生
typedef struct _Student
{
	unsigned int nStuNum; ///学号
	char name[20];		  /// 姓名
	char sex[4];		  ///性别
	unsigned int age;	 ///年龄
	unsigned int nScore;  ///成绩

} Student;

//链表	
typedef struct _Node
{
	Student stu;		///学生信息
	struct _Node *next; ///下一个节点指针
} Node;

//头结点
Node *g_pHead = NULL;

//文件
FILE *fp;
char filename[127];

//欢迎界面
int WelcomeInfo();

//创建头结点
void CreatListOfHead();

//录入学生信息
void InputStudentInfo();

//打印学生信息
void PrintStudentInfo();

//保存学生信息
void SaveData();

//读取学生信息
void LoadData();

//统计学生人数
void CountStudent();

//查找学生信息
void SearchStudent();

//更改学生信息
void AlterStudentInfo();

//删除学生信息
void DeleteStudent();

int Loop();

int main()
{
	Loop();

	return 0;
}

int WelcomeInfo()
{
	printf("\n\n");
	printf("    *******************************************\n");
	printf("    *          欢迎使用成绩管理系统           *\n");
	printf("    *******************************************\n");
	printf("    *             请选择功能列表              *\n");
	printf("    *******************************************\n");
	printf("    *             1:录入学生信息             *\n");
	printf("    *             2:打印学生信息             *\n");
	printf("    *             3:保存学生信息             *\n");
	printf("    *             4:读取学生信息             *\n");
	printf("    *             5:统计学生人数             *\n");
	printf("    *             6:查找学生信息             *\n");
	printf("    *             7:修改学生信息             *\n");
	printf("    *             8:删除学生信息             *\n");
	printf("    *             0:退出系统                 *\n");
	printf("    *******************************************\n");
	return 0;
}

//创建头结点
void CreatListOfHead()
{
	Node *g_pHead = (Node *)malloc(sizeof(Node));
	g_pHead->next = NULL;
}

// 录入学生信息
void InputStudentInfo()
{
	//申请内存,开辟节点
	Node *p = (Node *)malloc(sizeof(Node));
	p->next = NULL;

	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息录入界面            *\n");
	printf("    *******************************************\n");
	printf("\n");
	printf("请输入学生姓名:");
	scanf("%s", p->stu.name);
	printf("请输入学生学号:");
	scanf("%d", &p->stu.nStuNum);
	printf("请输入学生性别:");
	scanf("%s", p->stu.sex);
	printf("请输入学生年龄:");
	scanf("%d", &p->stu.age);
	printf("请输入学生成绩:");
	scanf("%d", &p->stu.nScore);

	//将节点添加到链表中
	if (g_pHead == NULL)
	{
		g_pHead = p;
	}
	else
	{
		//头插法
		p->next = g_pHead;
		g_pHead = p;
	}
	system("cls");
	printf("    *******************************************\n");
	printf("    *            学生信息录入成功!           *\n");
	printf("    *******************************************\n");
	system("pause");
	system("cls");
}

//打印学生信息
void PrintStudentInfo()
{
	system("cls");
	printf("\n\n");
	printf("---------------------------------------------------------------------------------\n");
	printf("|\t\t\t欢迎使用学生管理系统\t\t\t\t\t|\n");
	printf("---------------------------------------------------------------------------------\n");
	printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
	printf("---------------------------------------------------------------------------------\n");

	//遍历链表
	Node *p = g_pHead;
	while (p != NULL)
	{
		printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
		printf("---------------------------------------------------------------------------------\n");

		p = p->next;
	}
	if (g_pHead == NULL)
	{
		printf("|\t\t\t\t没有学生信息\t\t\t\t\t|\n");
		printf("---------------------------------------------------------------------------------\n");
	}

	printf("\n\n");
	system("pause");
}

//保存学生信息
void SaveData()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息保存界面            *\n");
	printf("    *******************************************\n");
	printf("\n\n");
	printf("请输入要保存的文件名:");
	scanf("%s", filename);

	Node *p = g_pHead;
	if ((fp = fopen(filename, "w")) == NULL)
	{
		printf("\n文件保存失败!不能获得文件句柄!\n");
		system("pause");
		return;
	}

	while (p != NULL)
	{
		fprintf(fp, "%s %d %s %d %d\n", p->stu.name, p->stu.nStuNum, p->stu.sex, p->stu.age, p->stu.nScore);
		p = p->next;
	}

	fclose(fp);

	system("cls");
	printf("    *******************************************\n");
	printf("    *            学生信息保存成功!           *\n");
	printf("    *******************************************\n");
	system("pause");
	system("cls");
}

//读取学生信息
void LoadData()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息加载界面            *\n");
	printf("    *******************************************\n");
	printf("\n\n");
	printf("请输入保存有学生信息的文件名:");
	scanf("%s", filename);

	if ((fp = fopen(filename, "a+")) == NULL)
	{
		printf("\n文件打开失败!不能获得文件句柄!\n");
		system("pause");
		return;
	}
	if (g_pHead == NULL)
	{
		CreatListOfHead();
	}

	while (1)
	{
		Node *p = (Node *)malloc(sizeof(Node));
		p->next = NULL;

		//printf("p:%p\n", &p);
		if (fscanf(fp, "%s %d %s %d %d\n", p->stu.name, &p->stu.nStuNum, p->stu.sex, &p->stu.age, &p->stu.nScore) == EOF)
		{
			break;
		}
		//将节点添加到链表中
		if (g_pHead == NULL)
		{
			//printf("p->next:%p \t\t g_pHead:%p\t\t g_pHead->next:%p\n", &p->next, &g_pHead, &g_pHead->next);
			p->next = g_pHead;
			g_pHead = p;
		}
		else
		{
			//printf("p->next:%p \t\t g_pHead:%p\t\t g_pHead->next:%p\n", &p->next, &g_pHead,&g_pHead->next);
			p->next = g_pHead;
			g_pHead = p;
		}
	}

	fclose(fp);

	system("cls");
	printf("    *******************************************\n");
	printf("    *            学生信息加载成功!           *\n");
	printf("    *******************************************\n");
	printf("\n\n");
	system("pause");
	system("cls");
}

//统计学生人数
void CountStudent()
{
	system("cls");
	printf("\n\n");
	printf("---------------------------------------------------------------------------------\n");
	printf("|\t\t\t欢迎使用学生管理系统\t\t\t\t\t|\n");
	printf("---------------------------------------------------------------------------------\n");

	//遍历链表
	Node *p = g_pHead;
	unsigned int count = 0;
	while (p != NULL)
	{
		count++;
		p = p->next;
	}
	printf("|\t\t\t\t学生人数:%d\t\t\t\t\t|\n", count);
	printf("---------------------------------------------------------------------------------\n");
	printf("\n\n");
	system("pause");
}

//查找学生信息
void SearchStudent()
{
	while (1)
	{
		system("cls");
		printf("\n\n");
		printf("---------------------------------------------------------------------------------\n");
		printf("|\t\t\t搜索学生信息界面\t\t\t\t\t|\n");
		printf("---------------------------------------------------------------------------------\n");
		printf("\n\n");
		printf("请选择查询方式:【1】按学号   |  【2】按姓名 | 【-1】退出\n请选择:");
		int k;
		Node *p = g_pHead;
		scanf("%d", &k);
		switch (k)
		{
		case 1:
			printf("请输入学生学号:");
			int nStuNum;
			scanf("%d", &nStuNum);
			while (p->next != NULL)
			{
				if (p->stu.nStuNum == nStuNum)
				{
					printf("---------------------------------------------------------------------------------\n");
					printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
					printf("---------------------------------------------------------------------------------\n");
					printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
					printf("---------------------------------------------------------------------------------\n");
					p = p->next;
				}
				else
				{
					system("pause");
					printf("\t\t\t\t未查询到该生信息!\t\t\t\t\t");
					printf("---------------------------------------------------------------------------------\n");
					return;
				}
			}
			system("pause");
			return;
		case 2:
			printf("请输入学生姓名:");
			char name[20];
			scanf("%s", name);
			while (p && (strcmp(p->stu.name, name) != 0 )){p = p->next;}
			
			if (p)
			{
				printf("---------------------------------------------------------------------------------\n");
				printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
				printf("---------------------------------------------------------------------------------\n");
				printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
				printf("---------------------------------------------------------------------------------\n");
			}
			else
			{
				printf("---------------------------------------------------------------------------------\n");
				printf("\t\t\t\t未查询到该生信息!\t\t\t\t\t");
				printf("---------------------------------------------------------------------------------\n");
			}
			
			system("pause");
			return;
		case -1:
			return;
		default:
			printf("请重新选择!");
			system("pause");
			break;
		}
	}
}

//更改学生信息
void AlterStudentInfo()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息更改界面            *\n");
	printf("    *******************************************\n");
	printf("\n");
	printf("请输入学生学号:");
	int nStuNum;
	scanf("%d", &nStuNum);
	Node *p = g_pHead;
	while (p && (p->stu.nStuNum != nStuNum))
	{
		p = p->next;
	}
	if (p)
	{
		printf("---------------------------------------------------------------------------------\n");
		printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
		printf("---------------------------------------------------------------------------------\n");
		printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", p->stu.nStuNum, p->stu.name, p->stu.sex, p->stu.age, p->stu.nScore);
		printf("---------------------------------------------------------------------------------\n");
		printf("请输入更改后的学生学号:");
		scanf("%d", &p->stu.nStuNum);
		printf("请输入更改后的学生姓名:");
		scanf("%s", p->stu.name);
		printf("请输入更改后的学生性别:");
		scanf("%s", p->stu.sex);
		printf("请输入更改后的学生年龄:");
		scanf("%d", &p->stu.age);
		printf("请输入更改后的学生成绩:");
		scanf("%d", &p->stu.nScore);
		system("cls");
		printf("    *******************************************\n");
		printf("    *            学生信息更改成功!           *\n");
		printf("    *******************************************\n");
		system("pause");
		system("cls");
		return;
	}
	else
	{
		system("cls");
		printf("    *******************************************\n");
		printf("    *               找不到该学生!             *\n");
		printf("    *******************************************\n");
		system("pause");
		system("cls");
		return;
	}
}

//删除学生信息
void DeleteStudent()
{
	system("cls");
	printf("    *******************************************\n");
	printf("    *             学生信息删除界面            *\n");
	printf("    *******************************************\n");
	printf("\n");
	printf("请输入要删除的学生学号:");
	int nStuNum;
	scanf("%d", &nStuNum);
	Node *p = g_pHead;
	while (1)
	{
		if (p->next && (p->next->stu.nStuNum == nStuNum))
		{
			Node *useless = p->next;
			p->next = p->next->next;
			printf("以下信息已被删除:\n");
			printf("---------------------------------------------------------------------------------\n");
			printf("|\t学号\t|\t姓名\t|\t性别\t|\t年龄\t|\t成绩\t|\n");
			printf("---------------------------------------------------------------------------------\n");
			printf("|\t%d\t|\t%s\t|\t%s\t|\t%d\t|\t%d\t|\n", useless->stu.nStuNum, useless->stu.name, useless->stu.sex, useless->stu.age, useless->stu.nScore);
			printf("---------------------------------------------------------------------------------\n");
			printf("\n\n");
			system("pause");
			free(useless);
			return;
		}
		else
		{
			if (p->next != NULL)
			{
				p = p->next;
			}
			else
			{
				system("cls");
				printf("    *******************************************\n");
				printf("    *            学生信息删除失败!            *\n");
				printf("    *******************************************\n");
				printf("\n");
				system("pause");
				return;
			}
		}
	}
}

int Loop()
{
	while (1)
	{
		// 清除输出
		system("cls");

		WelcomeInfo();
		printf("请输入数字:");
		char ch = _getch();
		switch (ch)
		{
		case '1':
			//录入学生信息
			InputStudentInfo();
			break;
		case '2':
			//打印学生信息
			PrintStudentInfo();
			break;
		case '3':
			//保存学生信息
			SaveData();
			break;
		case '4':
			//读取学生信息
			LoadData();
			break;
		case '5':
			//统计学生人数
			CountStudent();
			break;
		case '6':
			//查找学生信息
			SearchStudent();
			break;
		case '7':
			//更改学生信息
			AlterStudentInfo();
			break;
		case '8':
			//删除学生信息
			DeleteStudent();
			break;
		case '0':
			//退出系统
			exit(0);
			break;
		default:
			break;
		}
	}
}

你可能感兴趣的:(C语言&数据结构)