链表实现学生管理系统

        byd这学期课好多,写了个接近1300行的实训项目,学校教的是用顺序表写的,我自己用链表写了一个:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#include<windows.h>
#include<time.h>

struct STU
{
	char name[10];
	char gender[5];
	int number;
	int score[6];
	double ave;
	char address[20];
};

typedef struct student
{
	struct STU s1;
	struct student* next;
}student;

int checkpassword(int number)
{
	printf("请输入一个6位数的密码(你还剩%d次机会!)\n", 3 - number);
	Sleep(200);
	printf("----->\n");
	int password;
	scanf("%d", &password);
	if (password == 123456)
	{
		return 1;
	}
	return 0;
}

void menu(void)
{
	printf("\t\t\t\t\t     _________________________________\n");
	printf("\t\t\t\t\t\t  欢迎使用学生成绩管理系统\n");
	printf("\t\t\t\t\t\t     1.输 入 学 生 信 息\n");
	printf("\t\t\t\t\t\t     2.显 示 学 生 信 息\n");
	printf("\t\t\t\t\t\t     3.查 找 学 生 信 息\n");
	printf("\t\t\t\t\t\t     4.插 入 学 生 信 息\n");
	printf("\t\t\t\t\t\t     5.删 除 学 生 信 息\n");
	printf("\t\t\t\t\t\t     6.更 新 学 生 信 息\n");
	printf("\t\t\t\t\t\t     7.排 序 学 生 信 息\n");
	printf("\t\t\t\t\t\t     8.统 计 单 科 成 绩\n");
	printf("\t\t\t\t\t\t     9.找 到 最 好 成 绩\n\n");
	printf("\t\t\t\t\t\t     10. 保 存 到 文 件\n");
	printf("\t\t\t\t\t\t     11. 从 文 件 读 取\n");
	printf("\t\t\t\t\t\t     12.  备 份 文 件\n");
	printf("\t\t\t\t\t\t     0.退 出 管 理 系 统\n");
	printf("\t\t\t\t\t     ----------------------------------\n");
	printf("\n\n\n");
	printf("请选择-->\n");
}

student* creatstudent()
{
	student* newnode = (student*)malloc(sizeof(student));
	if (newnode == NULL)
	{
		printf("内存申请失败\n");
		exit(1);
	}

	printf("请输入学生的姓名\n");
	scanf("%s", newnode->s1.name);
	printf("请输入学生的性别\n");
	scanf("%s", newnode->s1.gender);
	printf("请输入学生的学号\n");
	scanf("%d", &newnode->s1.number);
	printf("请输入学生的六门成绩\n");
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		scanf("%d", &newnode->s1.score[i]);
	}
	int sum = 0;
	for (i = 0; i < 6; i++)
	{
		sum += newnode->s1.score[i];
	}
	newnode->s1.ave = sum / 6.0;
	printf("请输入学生的家庭地址\n");
	scanf("%s", newnode->s1.address);
	newnode->next = NULL;
	return newnode;
}

void addstudent(student** head, int number)
{
	system("cls");
	printf("请输入第%d个学生的信息\n", number + 1);
	student* newnode = creatstudent();
	student* pointer = *head;
	if (pointer == NULL)
	{
		*head = newnode;
		return;
	}
	while (pointer->next != NULL)
	{
		pointer = pointer->next;
	}
	pointer->next = newnode;
}

void printstudent(student* head)
{

	student* pointer = head;
	if (pointer == NULL)
	{
		printf("请先输入学生的信息!\n");
		return;
	}
	printf("学生信息是--->\n\n");

	printf("\t姓名\t性别\t学号\t\t数学\tC语言\t英语\t物理\t信息\t线代\t平均分\t\t家庭地址\n");
	

	while (pointer != NULL)
	{
		printf("\t%s\t%s\t%d\t\t", pointer->s1.name, pointer->s1.gender, pointer->s1.number);
		int i = 0;
		for (i = 0; i < 6; i++)
		{
			printf("%d\t", pointer->s1.score[i]);
		}
		printf("%.2lf\t", pointer->s1.ave);
		printf("   ");
		printf("\t%s", pointer->s1.address);
		printf("\n");
		pointer = pointer->next;
	}
	printf("\n");
	Sleep(200);
	printf("输出完毕!\n");
}

bool insertstudent(student** head)
{
	if (*head == NULL)
	{
		printf("请先输入学生信息!\n");
		return false;
	}
	char choice[10] = {0};
	printf("请输入\"yes\"确认你要插入\n");
	printf("-->");
	scanf("%s", choice);
	if (strcmp(choice, "yes") != 0)
	{
		system("cls");
		printf("插入取消,返回主程序\n");
		int i = 0;
		printf("please wait for a moment\n");
		for (i = 0; i < 6; i++)
		{
			printf(".");
			Sleep(200);
		}
		Sleep(200);
		system("cls");
		return false;
	}
	student* pointer = *head;
	student* newnode = creatstudent();
	system("cls");
	printf("现在有的学生信息如下:\n\n");
	printstudent(*head);
	printf("请选择插入的位置\n");
	int place;
	scanf("%d", &place);
	int i = 0;
	while (pointer != NULL && i < place - 1)
	{
		pointer = pointer->next;
		i++;
	}
	if (pointer == NULL)
	{
		printf("插入位置不合法,请重新选择!\n");
		return false;
	}
	newnode->next = pointer->next;
	pointer->next = newnode;
	system("cls");
	printf("正在插入中\n");
	for (i = 0; i < 6; i++)
	{
		printf(".");
		Sleep(300);
	}
	Sleep(300);
	return true;
}

bool deletestudent(student** head)
{
	if (*head == NULL)
	{
		printf("请先输入学生信息!\n");
		return false;
	}
	student* pointer = *head;
	printf("你想要删除第几个学生?\n");
	printf("-->");
	int place;
	scanf("%d", &place);
	printf("你确定你要删除第%d个学生吗?\n",place);
	printf("请输入yes确认\n");
	char choice[10] = {0};
	scanf("%s", choice);
	if (strcmp(choice, "yes") != 0)
	{
		system("cls");
		printf("删除操作取消,返回主程序!\n");
		Sleep(200);
		printf("返回中\n");
		int i = 0;
		for (i = 0; i < 6; i++)
		{
			printf(".");
			Sleep(200);
		}
		Sleep(200);
		printf("\n\n");
		return false;
	}
	int i = 0;
	while (pointer != NULL && i < place - 2)
	{
		pointer = pointer->next;
		i++;
	}
	if (pointer == NULL)
	{
		printf("删除位置不合法,请重新输入\n");
		return false;
	}
	student* temp = pointer->next;
	pointer->next = temp->next;
	free(temp);
	temp = NULL;
	printf("正在删除中\n");
	for (i = 0; i < 6; i++)
	{
		printf(".");
		Sleep(300);
	}
	Sleep(300);
	return true;
}

student* searchbynumber(int number, student* head)
{
	student* pointer = head;
	int flag = 0;
	while (pointer != NULL)
	{
		if (pointer->s1.number == number)
		{
			flag = 1;
			break;
		}
		pointer = pointer->next;
	}
	if (flag == 0)
	{
		return NULL;
	}
	return pointer;
}

student* searchbyname(char name[10], student* head)
{
	student* pointer = head;
	int flag = 0;
	while (pointer != NULL)
	{
		if (strcmp(pointer->s1.name, name) == 0)
		{
			flag = 1;
			break;
		}
		pointer = pointer->next;
	}
	if (flag == 0)
	{
		return NULL;
	}
	return pointer;
}


void searchstudent(student* head)
{
	if (head == NULL)
	{
		printf("请先输入学生信息!\n");
		return;
	}
	int choice;
	student* pointer=NULL;
	printf("请选择你查找的方式\n");
	printf("   1.按学号查找\n");
	printf("   2.按姓名查找\n");
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
	{
		system("cls");
		int number;
		printf("请输入想要查找的学号\n");
		printf("-->\n");
		scanf("%d", &number);
		pointer = searchbynumber(number, head);
		break;
	}
	case 2:
	{
		system("cls");
		char name[10];
		printf("请输入想要查找的姓名\n");
		printf("-->\n");
		scanf("%s", name);
		pointer = searchbyname(name, head);
		break;
	}
	default:
	{
		printf("error : 请重新选择!\n");
		break;
	}
	}
	if (pointer == NULL)
	{
		printf("没有找到该学生,请重新确认\n");
		return;
	}
	printf("找到了!该生信息为-->\n");
	printf("\t姓名\t性别\t学号\t\t数学\tC语言\t英语\t物理\t信息\t线代\t平均分\t家庭地址");
	printf("\n");
	printf("\t%s\t%s\t%d\t\t", pointer->s1.name, pointer->s1.gender, pointer->s1.number);
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf("%d\t", pointer->s1.score[i]);
	}
	printf("%.2lf\t", pointer->s1.ave);
	printf("%s", pointer->s1.address);
	printf("\n");
}

void updatestudent(student** head)
{
	if (*head == NULL)
	{
		printf("请先输入学生信息!\n");
		return;
	}
	printf("请输入你想要更新的学生的学号\n");
	printf("-->");
	int number;
	scanf("%d", &number);
	student* pointer = searchbynumber(number, *head);
	printf("请重新录入学生信息\n");
	printf("请输入学生姓名-->");
	scanf("%s", pointer->s1.name);
	printf("请输入学生性别-->");
	scanf("%s", pointer->s1.gender);
	printf("请输入学生学号-->");
	scanf("%d", &pointer->s1.number);
	printf("请输入学生六门成绩-->");
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		scanf("%d", &pointer->s1.score[i]);
	}
	int sum = 0;
	for (i = 0; i < 6; i++)
	{
		sum += pointer->s1.score[i];
	}
	printf("请输入学生地址-->");
	scanf("%s", pointer->s1.address);
	printf("修改成功\n");
}

bool savestudent(student* head)
{
	if (head == NULL)
	{
		printf("保存失败!请先输入学生信息\n");
		return false;
	}
	char filename[20] = {0};
	printf("请选择你想要保存的文件名(如果没有该文件,会自动创建)\n");
	printf("-->");
	scanf("%s", filename);
	FILE* pf = fopen(filename, "w");
	if (pf == NULL)
	{
		printf("文件打开失败,请稍后再试!\n");
		return false;
	}
	student* pointer = head;
	//fprintf(pf, "\t\t%4s\t%2s\t%6s\t%3s\t%3s\t%3s\t%3s\t%3s\t%3s\t%4s\t%10s\t\n",
		//"姓名","性别","学号","数学","C语言","英语","物理","信息","线代","平均分","家庭地址");

	printf("正在保存到本地\n");
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf(".");
		Sleep(300);
	}
	Sleep(300);
	while (pointer != NULL)
	{
		fprintf(pf, "\t\t%4s\t", pointer->s1.name);
		fprintf(pf, "%2s\t", pointer->s1.gender);
		fprintf(pf, "%6d\t", pointer->s1.number);

		int i = 0;
		for (i = 0; i < 6; i++)
		{
			fprintf(pf, "%3d\t", pointer->s1.score[i]);
		}
		fprintf(pf, "%.2lf\t", pointer->s1.ave);
		fprintf(pf, "%10s\t", pointer->s1.address);
		fprintf(pf, "\n");
		pointer = pointer->next;
	}
	fclose(pf);
	pf = NULL;
	return true;
}



void swapdata(student* pointer, student* pointer2)
{
	char tempname[10];
	strcpy(tempname, pointer->s1.name);
	strcpy(pointer->s1.name,pointer2->s1.name);
	strcpy(pointer2->s1.name, tempname);
	
	char tempgender[5];
	strcpy(tempgender, pointer->s1.gender);
	strcpy(pointer->s1.gender, pointer2->s1.gender);
	strcpy(pointer2->s1.gender, tempgender);

	int tempnumber = pointer->s1.number;
	pointer->s1.number = pointer2->s1.number;
	pointer2->s1.number = tempnumber;
    int i = 0;
	for (i=0; i < 6; i++)
	{
		int tempscore = pointer->s1.score[i];
		pointer->s1.score[i] = pointer2->s1.score[i];
		pointer2->s1.score[i] = tempscore;
	}

	double tempave = pointer->s1.ave;
	pointer->s1.ave = pointer2->s1.ave;
	pointer2->s1.ave = tempave;

	char tempaddress[20];
	strcpy(tempaddress, pointer->s1.address);
	strcpy(pointer->s1.address, pointer2->s1.address);
	strcpy(pointer2->s1.address, tempaddress);
}

void sortbynumber(student* head)
{
	int control;
	student* pointer;
	student* lastpointer = NULL;

	if (head == NULL)
	{
		return;
	}
	flag:
	printf("请问你想要升序还是降序?\n");
	printf("        1.升序\n");
	printf("        2.降序\n");
	printf("-->");
	int choice;
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
	{
		do
		{
			control = 0;
			pointer = head;
			while (pointer->next != lastpointer)
			{
				if (pointer->s1.number > pointer->next->s1.number)
				{
					swapdata(pointer, pointer->next);
					control = 1;
				}
				pointer = pointer->next;
			}
			lastpointer = pointer;
		} while (control);
		break;
	}
	case 2:
	{
		do
		{
			control = 0;
			pointer = head;
			while (pointer->next != lastpointer)
			{
				if (pointer->s1.number < pointer->next->s1.number)
				{
					swapdata(pointer, pointer->next);
					control = 1;
				}
				pointer = pointer->next;
			}
			lastpointer = pointer;
		} while (control);
		break;
	}
	default:
	{
		system("cls");
		printf("error:选择错误,请重新选择\n");
		system("pause");
		system("cls");
		goto flag;
	}
	}
	
}



void sortbyave(student* head)
{
	
	int control;
	student* pointer;
	student* lastpointer = NULL;

	if (head == NULL)
	{
		return;
	}
	flag:
	printf("请问你想要升序还是降序?\n");
	printf("        1.降序\n");
	printf("        2.升序\n");
	printf("-->");
	int choice;
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
	{
		do
		{
			control = 0;
			pointer = head;
			while (pointer->next != lastpointer)
			{
				if (pointer->s1.ave < pointer->next->s1.ave)
				{
					swapdata(pointer, pointer->next);
					control = 1;
				}
				pointer = pointer->next;
			}
			lastpointer = pointer;
		} while (control);
		break;
	}
	case 2:
	{
		do
		{
			control = 0;
			pointer = head;
			while (pointer->next != lastpointer)
			{
				if (pointer->s1.ave > pointer->next->s1.ave)
				{
					swapdata(pointer, pointer->next);
					control = 1;
				}
				pointer = pointer->next;
			}
			lastpointer = pointer;
		} while (control);
		break;
	}
	default:
	{
		system("cls");
		printf("error:选择错误,请重新选择\n");
		system("pause");
		system("cls");
		goto flag;
	}
	}
	
}

bool sortstudent(student* head)
{
	if (head == NULL)
	{
		printf("请先输入学生\n");
		return false;
	}
flag:
	printf("请选择排序的方式\n");
	printf("   1.按照学号\n");
	printf("   2.按照平均分\n");
	printf("   0.退出排序\n");
	printf("请选择-->");
	int choice;
	scanf("%d", &choice);
	switch (choice)
	{
	case 1:
	{
		system("cls");
		sortbynumber(head);
		return true;
	}
	case 2:
	{
		system("cls");
		sortbyave(head);
		return true;
	}
	case 0:
	{
		system("cls");
		printf("排序退出\n");
		system("cls");
		return false;
	}
	default:
	{
		system("cls");
		printf("选择错误,请重新选择!\n");
		system("pause");
		system("cls");
		goto flag;
	}
	}
}

student* searchbyave(student* head)
{
	student* pointer = head;
	student* max = pointer;
	while (pointer->next != NULL)
	{
		if (pointer->s1.ave < pointer->next->s1.ave)
		{
			max = pointer->next;
		}
		pointer = pointer->next;
	}
	return max;
}

void searchmax(student* head)
{
	if (head == NULL)
	{
		printf("查找失败!!!\n");
		printf("请先输入学生信息\n");
		return;
	}
	student* max = searchbyave(head);
	printf("成功找到!!!\n");
	printf("\n学生信息是--->\n\n");
	printf("\t姓名\t性别\t学号\t\t数学\tC语言\t英语\t物理\t信息\t线代\t平均分\t\t家庭地址\n");
	printf("\t%s\t%s\t%d\t\t", max->s1.name, max->s1.gender, max->s1.number);
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf("%d\t", max->s1.score[i]);
	}
	printf("%.2lf\t", max->s1.ave);
	printf("   ");
	printf("\t%s", max->s1.address);
	printf("\n");
}

student* creatfilenode(FILE* pf, student* head)
{
	student* newnode = (student*)malloc(sizeof(student));
	if (newnode == NULL)
	{
		exit(1);
	}
	char tempname[10] = {0};
	char tempgender[5] = {0};
	int tempnumber = 0;
	int tempscore[6] = {0};
	double tempave = 0.0;
	char tempaddress[20] = {0};
	fscanf(pf, "%s", tempname);
	fscanf(pf, "%s", tempgender);
	fscanf(pf, "%d", &tempnumber);
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		fscanf(pf, "%d", &tempscore[i]);
	}
	fscanf(pf, "%lf", &tempave);
	fscanf(pf, "%s", tempaddress);
	strcpy(newnode->s1.name, tempname);
	strcpy(newnode->s1.gender, tempgender);
	strcpy(newnode->s1.address, tempaddress);
	for (i = 0; i < 6; i++)
	{
		newnode->s1.score[i] = tempscore[i];
	}
	newnode->s1.number = tempnumber;
	newnode->s1.ave = tempave;
	newnode->next = NULL;
	return newnode;
}

bool readfilehead(student** head)
{
	student* pointer = *head;
	printf("请输入文件名(注意:包含后缀)\n");
	char filename[20] = { 0 };
	scanf("%s", filename);
	FILE* pf = fopen(filename, "r");
	if (pf == NULL)
	{
		printf("文件打开失败,请稍后再试\n");
		system("pause");
		return false;
	}
	student* newnode = creatfilenode(pf, *head);
	*head = newnode;
	return true;
}

void deletehead(student* head)
{
	student* temp = head->next;
	head->next = temp->next;
	free(temp);
}


bool readfile(student** head)
{
	student* pointer = *head;
	printf("请再次输入文件名确认\n");
	char filename[20] = { 0 };
	scanf("%s", filename);
	FILE* pf = fopen(filename, "r");
	if (pf == NULL)
	{
		printf("文件打开失败,请稍后再试\n");
		return false;
	}
	printf("正在从本地读取\n");
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf(".");
		Sleep(300);
	}
	system("cls");
	printf("读取成功\n");
	while (!feof(pf))
	{
		student* newnode = creatfilenode(pf, *head);
		while (pointer->next != NULL)
		{
			pointer = pointer->next;
		}
		pointer->next = newnode;
	}
	deletehead(*head);
	pointer->next = NULL;
	return true;
}

double rank(int choice, student* head)
{
	student* pointer = head;
	int sum = 0;
	int count = 0;
	double ave = 0.0;
	switch (choice)
	{
	case 1://数学的平均分
	{
		while (pointer != NULL)
		{
			sum += pointer->s1.score[0];
			pointer = pointer->next;
			count++;
		}
		return sum / (count * 1.0);
	}
	case 2:
	{
		while (pointer != NULL)
		{
			sum += pointer->s1.score[1];
			pointer = pointer->next;
			count++;
		}
		return sum / (count * 1.0);
	}
	case 3:
	{
		while (pointer != NULL)
		{
			sum += pointer->s1.score[2];
			pointer = pointer->next;
			count++;
		}
		return sum / (count * 1.0);
	}
	case 4:
	{
		while (pointer != NULL)
		{
			sum += pointer->s1.score[3];
			pointer = pointer->next;
			count++;
		}
		return sum / (count * 1.0);
	}
	case 5:
	{
		while (pointer != NULL)
		{
			sum += pointer->s1.score[4];
			pointer = pointer->next;
			count++;
		}
		return sum / (count * 1.0);
	}
	case 6:
	{
		while (pointer != NULL)
		{
			sum += pointer->s1.score[5];
			pointer = pointer->next;
			count++;
		}
		return sum / (count * 1.0);
	}
	}
	return -1;
}

void wait()
{
	printf("正在查询中\n");
	printf("wiat for a moment\n");
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf(".");
		Sleep(200);
	}
	Sleep(200);
}

void checkscore(student* head)
{
	if (head == NULL)
	{
		printf("请先输入学生!\n");
		return;
	}
	
	int choice;
	
	do
	{
		printf("\t\t\t\t可以查询数学、C语言、英语、物理、信息、线代共六门课程\n\n");
		printf("\t\t\t\t                     1.数学\n");
		printf("\t\t\t\t                     2.C语言\n");
		printf("\t\t\t\t                     3.英语\n");
		printf("\t\t\t\t                     4.物理\n");
		printf("\t\t\t\t                     5.信息\n");
		printf("\t\t\t\t                     6.线代\n\n");
		printf("请选择你想要查询的科目\n");
		printf("请输入-->");
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:
		{
			system("cls");
			wait();
			system("cls");
			printstudent(head);
			printf("这些学生中的数学平均分是%.2lf\n", rank(1, head));
			system("pause");
			system("cls");
			break;
		}
		case 2:
		{
			system("cls");
			wait();
			system("cls");
			printstudent(head);
			printf("这些学生中的C语言平均分是%.2lf\n", rank(2, head));
			system("pause");
			system("cls");
			break;
		}
		case 3:
		{
			system("cls");
			wait();
			system("cls");
			printstudent(head);
			printf("这些学生中的英语平均分是%.2lf\n", rank(3, head));
			system("pause");
			system("cls");
			break;
		}
		case 4:
		{
			system("cls");
			wait();
			system("cls");
			printstudent(head);
			printf("这些学生中的物理平均分是%.2lf\n", rank(4, head));
			system("pause");
			system("cls");
			break;
		}
		case 5:
		{
			system("cls");
			wait();
			system("cls");
			printstudent(head);
			printf("这些学生中的信息平均分是%.2lf\n", rank(5, head));
			system("pause");
			system("cls");
			break;
		}
		case 6:
		{
			system("cls");
			wait();
			system("cls");
			printstudent(head);
			printf("这些学生中的线代平均分是%.2lf\n", rank(6, head));
			system("pause");
			system("cls");
			break;
		}
		case 0:
		{
			system("cls");
			printf("单科成绩查询退出!\n");
			system("pause");
			int i = 0;
			system("cls");
			printf("正在回到主程序\n");
			for (i = 0; i < 6; i++)
			{
				printf(".");
				Sleep(200);
			}
			Sleep(200);
			break;
		}
		default:
		{
			system("cls");
			printf("选择错误,请重新选择\n");
			system("pause");
			system("cls");
			
		}
		}
	}while (choice);
}

void saveagain()
{
	char sourcename[15] = {0};
	char goalname[15] = {0};
	printf("请输入源文件的名字(请包含后缀)\n");
	printf("-->");
	scanf("%s", sourcename);
	printf("请输入备份文件的名字(请包含后缀)\n");
	printf("-->");
	scanf("%s", goalname);
	FILE* source = fopen(sourcename, "r");
	if (source == NULL)
	{
		printf("源文件打开失败,请重试\n");
		return;
	}
	FILE* goal = fopen(goalname, "w");
	if (goal == NULL)
	{
		printf("备份文件打开失败,请重试\n");
		return;
	}
	system("cls");
	printf("正在备份中\n");
	printf("wait for a moment\n");
	int i = 0;
	for (i = 0; i < 6; i++)
	{
		printf(".");
		Sleep(200);
	}
	Sleep(200);
	char ch = fgetc(source);
	while (ch != EOF)
	{
		fputc(ch, goal);
		//ch = fgetc(source);
	}
	printf("\n\n备份成功!\n");
}

int main()
{
	system("color C");
	int flag = 0;
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		flag = checkpassword(i);
		if (flag == 1)
		{
			printf("密码正确!\n");
			system("color 2");
			system("pause");
			system("cls");
			break;
		}
		system("color 4");
		printf("密码错误,请再试一次\n");
		system("pause");
		system("cls");

	}
	if (flag == 0)
	{
		printf("密码输入错误次数过多,请稍后继续!\n");
		system("pause");
		system("cls");
		printf("程序结束\n");
		system("pause");
		return 0;
	}

	system("color 7");
	student* head = NULL;
	int choice;
	do
	{
		menu();
		scanf("%d", &choice);
		switch (choice)
		{
		case 1:
		{
			system("cls");
			printf("你想要添加几个学生?\n");
			int i = 0;
			int n;
			printf("-->");
			scanf("%d", &n);
			for (i = 0; i < n; i++)
			{
				addstudent(&head, i);
			}
			system("cls");
			break;
		}
		case 2:
		{
			system("cls");
			Sleep(200);
			printstudent(head);
			system("pause");
			system("cls");
			break;
		}
		case 3:
		{
			system("cls");
			Sleep(200);
			searchstudent(head);
			system("pause");
			system("cls");
			break;
		}
		case 4:
		{
			system("cls");
			bool flag = insertstudent(&head);
			if (flag)
			{
				system("cls");
				printf("插入成功!\n");
			}
			system("cls");
			printf("现在的学生信息有:\n");
			printstudent(head);
			system("pause");
			system("cls");
			break;
		}
		case 5:
		{
			system("cls");
			bool flag = deletestudent(&head);
			if (flag)
			{
				printf("\n删除成功\n");
			}
			system("pause");
			system("cls");
			break;
		}
		case 6:
		{
			system("cls");
			printf("正在准备更新信息\n");
			int i = 0;
			for (i = 0; i < 6; i++)
			{
				printf(".");
				Sleep(300);
			}
			Sleep(300);
			system("cls");
			updatestudent(&head);
			system("pause");
			system("cls");
			break;
		}
		case 7:
		{
			system("cls");
			bool symbol = sortstudent(head);
			printf("\n\n正在排序中\n");
			int i = 0;
			for (i = 0; i < 6; i++)
			{
				printf(".");
				Sleep(300);
			}
			Sleep(300);
			system("cls");
			if (symbol)
			{
				printf("排序成功\n");
			}
			else
			{
				printf("排序退出,请继续使用\n");
			}
			system("pause");
			system("cls");
			break;
		}
		case 8:
		{
			system("cls");
			checkscore(head);
			system("pause");
			system("cls");
			break;
		}
		case 9:
		{
			system("cls");
			printf("正在寻找中\n");
			int i = 0;
			for (i = 0; i < 6; i++)
			{
				printf(".");
				Sleep(300);
			}
			Sleep(300);
			system("cls");
			searchmax(head);
			system("pause");
			system("cls");
			break;
		}
		case 10:
		{
			system("cls");
			bool flag = savestudent(head);
			if (flag)
			{
				printf("保存成功\n");
			}
			system("pause");
			system("cls");
			break;
		}
		case 11:
		{
			system("cls");

			bool flag = readfilehead(&head);
			if (flag == false)
			{
				system("cls");
				break;
			}
			readfile(&head);
			system("pause");
			system("cls");
			break;
		}
		case 12:
		{
			system("cls");
			saveagain(head);
			system("pause");
			system("cls");
			break;
		}
		case 0:
		{
			system("cls");
			printf("程序退出,感谢使用\n");
			Sleep(200);
			system("pause");
			break;
		}
		default:
		{
			system("cls");
			printf("选择错误,请重新选择!\n");
			Sleep(200);
			system("pause");
			system("cls");
			break;
		}
		}
	} while (choice);
	return 0;
}

        第一次写这么长的,有很多都是为了用户体验添加的,然后很多也是重复的(鄙人才疏学浅),大概就是这个样子。明天会更好。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值