单链表的基本操作—驾校学员驾考成绩管理系统(C/C++源代码/示例/B站)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


这里写目录标题

  • 单链表的插入删除图片演示
  • 单链表插入操作:头插法
  • 单链表删除操作:具体问题具体分析
  • 驾校学员驾考成绩管理系统
  • 程序参考:
  • color.h
  • Final_code.cpp(主函数)
  • 运行示例:

单链表的插入删除图片演示

单链表插入操作:头插法

单链表的基本操作—驾校学员驾考成绩管理系统(C/C++源代码/示例/B站)_链表

单链表删除操作:具体问题具体分析

单链表的基本操作—驾校学员驾考成绩管理系统(C/C++源代码/示例/B站)_#define_02

驾校学员驾考成绩管理系统

单链表的基本操作—驾校学员驾考成绩管理系统(C/C++源代码/示例/B站)_#include_03

程序参考:

color.h

#ifndef _COLOR_H_
#define _COLOR_H_

#define NONE                  "\e[0m"           //清除颜色,即之后的打印为正常输出,之前的不受影响
#define BLACK                 "\e[0;30m"         //深黑
#define L_BLACK             "\e[1;30m"            //亮黑,偏灰褐
#define RED                     "\e[0;31m"      //深红,暗红
#define L_RED                 "\e[1;31m"        //鲜红
#define GREEN                "\e[0;32m"         //深绿,暗绿
#define L_GREEN            "\e[1;32m"           //鲜绿
#define BROWN               "\e[0;33m"          //深黄,暗黄
#define YELLOW              "\e[1;33m"          //鲜黄
#define BLUE                    "\e[0;34m"      //深蓝,暗蓝
#define L_BLUE                "\e[1;34m"        //亮蓝,偏白灰
#define PURPLE               "\e[0;35m"         //深粉,暗粉,偏暗紫
#define L_PURPLE           "\e[1;35m"           //亮粉,偏白灰
#define CYAN                   "\e[0;36m"       //暗青色
#define L_CYAN               "\e[1;36m"         //鲜亮青色
#define GRAY                   "\e[0;37m"       //灰色
#define WHITE                  "\e[1;37m"       //白色,字体粗一点,比正常大,比bold小
#define BOLD                    "\e[1m"         //白色,粗体
#define UNDERLINE         "\e[4m"               //下划线,白色,正常大小
#define BLINK                   "\e[5m"         //闪烁,白色,正常大小
#define REVERSE            "\e[7m"              //反转,即字体背景为白色,字体为黑色
#define HIDE                     "\e[8m"        //隐藏
#define CLEAR                  "\e[2J"          //清除
#define CLRLINE               "\r\e[K"          //清除行

#endif

Final_code.cpp(主函数)

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <errno.h>
#include <cstring>
#include <algorithm>
#include <unistd.h>
#include "color.h"
using namespace std;

int sort_array_length = 0; //	The number of the members
int sum_member = 0;
int pass_number[5]; //pass_number[i] represent total passing subject i number;
const int N = 1e2 + 10;
struct member_List
{
	char id[20];
	char name[20];
	int score[5];
	bool pass_or_not;
	struct member_List *next_address_point;
};
typedef struct member_List* Mem_List_Ptr;
struct member_List array_sort[N];

struct admin_List
{
	char name[20];
	struct admin_List *next_address_point;
};
typedef struct admin_List* Adm_List_Ptr;

struct coach_List
{
	char name[20];
	struct coach_List *next_address_point;
};
typedef struct coach_List* Coa_List_Ptr;

//检查文件是否打开成功
void open_File_Check(FILE *fp);
//加载学员的名单
Mem_List_Ptr file_Load_Member(Mem_List_Ptr member_head_list);
//加载管理员的名单
Adm_List_Ptr file_Load_Admin(Adm_List_Ptr admin_head_list);
//加载教练的名单
Coa_List_Ptr file_Load_Coach(Coa_List_Ptr coach_head_list);
//创建学员名单(list)
Mem_List_Ptr create_Member_List(const Mem_List_Ptr incept_from_txt_pointer, Mem_List_Ptr member_head_list);
//创建管理员名单(list)
Adm_List_Ptr create_Admin_List(const Adm_List_Ptr incept_from_txt_pointer, Adm_List_Ptr admin_head_list);
//创建教练名单(list)
Coa_List_Ptr create_Coach_List(const Coa_List_Ptr incept_from_txt_pointer, Coa_List_Ptr coach_head_list);

//插入新学员
Mem_List_Ptr insert_Member_List(const Mem_List_Ptr incept_from_txt_pointer, Mem_List_Ptr member_head_list);
//删除新学员
Mem_List_Ptr remove_Member_List(const char *aim_string, Mem_List_Ptr member_head_list);
//查询学员
void find_Member_List(const char aim_string[], const Mem_List_Ptr member_head_list);
//修改学员信息
void alter_Member_List(const char aim_string[], const Mem_List_Ptr member_head_list);

//use quick sort for array
void sort_Member_List(const Mem_List_Ptr member_head_list);
//print sorted array
void print_Array_Sort(const struct member_List array[], int flag);

//user login
int User_Login(char name[], const Mem_List_Ptr member_head_list, const Adm_List_Ptr admin_head_list, const Coa_List_Ptr coach_head_list);
//write updated information of member to member.txt
void data_Write(Mem_List_Ptr member_head_list);

//释放三根链表
void destroy_member_List(Mem_List_Ptr member_head_list);
void destroy_Admin_List(Adm_List_Ptr admin_head_list);
void destroy_Coach_List(Coa_List_Ptr coach_head_list);
void progress_Bar_Print();
//打印彩色进度条 
void progress_Bar_Print()
{
   char buf[102] = "#";
   char sym[] = "/|-\\";
   for(int i = 1;i <= 100;i++)
   {
      buf[i] = '#';
      //设置进度条为蓝色,百分比进度为绿色,\r为不换行,光标移动到行首输出
      //printf("\033[34m[%-100s]\033[32m[%d%]\033[0m[%c]\r",buf,i,sym[i%4]);
      //因为没有遇到\n因此需要刷新缓冲区立刻输出printf的内容,,否则会先执行usleep
      printf( BLUE "[%-100s]" L_GREEN "[%d%%]" NONE "[%c]\r",buf,i,sym[i%4]);
      fflush(stdout);
      //Linux下usleep是按照毫秒计算的
      usleep(30000);
   }
   printf("\n");
}
//whether a is front of b 
bool cmp_Positive_Order_Id(struct member_List &a, struct member_List &b)
{
	if(strlen(a.id) != strlen(b.id))
		return strlen(a.id) < strlen(b.id);
	else if(strcmp(a.id, b.id) <= 0)
		return true;
	return false;
}
bool cmp_Positive_Order_Name(struct member_List &a, struct member_List &b)
{
	if(strcmp(a.name, b.name) <= 0)
		return true;
	return false;
}
/*
	检查文件是否打开成功
*/
void open_File_Check(FILE *fp)
{
	if(fp == NULL)
	{
		printf("fopen():%s\n", strerror(errno));
		exit(1);
	}
}

//加载管理员的名单
Adm_List_Ptr file_Load_Admin(Adm_List_Ptr admin_head_list)
{
	int return_fscanf;
	FILE *fp = NULL;
	fp = fopen("/root/20210830/Txt_Doc/admin.txt", "r");
	open_File_Check(fp);
	struct admin_List incept_from_txt;
	
	while((return_fscanf =  fscanf(fp, "%s", incept_from_txt.name) != EOF))
	{
	//	printf("return_fscanf_= %d\n", return_fscanf);
	//	printf("%s\n", incept_from_txt.name);
		admin_head_list = create_Admin_List(&incept_from_txt, admin_head_list);
	}
	fclose(fp);
	return admin_head_list;
}
//将admin中的数据元素插入list
Adm_List_Ptr create_Admin_List(const Adm_List_Ptr incept_from_txt_pointer, Adm_List_Ptr admin_head_list)
{
	Adm_List_Ptr index = NULL;
	index = (Adm_List_Ptr)malloc(sizeof(struct admin_List));
	if(index == NULL)
		printf("error!\n failed!\n");
	
	memset(index, 0, sizeof(struct admin_List));

	
	strcpy(index->name, incept_from_txt_pointer->name);
	
	index->next_address_point = admin_head_list;
	admin_head_list = index;	
	return admin_head_list;
}

//加载教练的名单
Coa_List_Ptr file_Load_Coach(Coa_List_Ptr coach_head_list)
{
	int return_fscanf;
	FILE *fp = NULL;
	fp = fopen("/root/20210830/Txt_Doc/coach.txt", "r");
	open_File_Check(fp);
	struct coach_List incept_from_txt;
	
	while((return_fscanf =  fscanf(fp, "%s", incept_from_txt.name) != EOF))
	{
	//	printf("return_fscanf_= %d\n", return_fscanf);
	//	printf("%s\n", incept_from_txt.name);
		coach_head_list = create_Coach_List(&incept_from_txt, coach_head_list);
	}
	fclose(fp);
	return coach_head_list;
}
//将coach中的数据元素插入list
Coa_List_Ptr create_Coach_List(const Coa_List_Ptr incept_from_txt_pointer, Coa_List_Ptr coach_head_list)
{
	Coa_List_Ptr index = NULL;
	index = (Coa_List_Ptr)malloc(sizeof(struct coach_List));
	if(index == NULL)
		printf("error!\n failed!\n");
	
	memset(index, 0, sizeof(struct coach_List));

	
	strcpy(index->name, incept_from_txt_pointer->name);
	
	index->next_address_point = coach_head_list;
	coach_head_list = index;	
	return coach_head_list;
}

/**
 * 读取已经存在的成员名单,并且串入链表中
 */
Mem_List_Ptr file_Load_Member(Mem_List_Ptr member_head_list)
{
	int return_fscanf;
	FILE *fp = NULL;
	fp = fopen("/root/20210830/Txt_Doc/member.txt", "r");
	open_File_Check(fp);
	struct member_List incept_from_txt;
	char pass_or_not_string[20];
	while((return_fscanf =  fscanf(fp, "%s	%s	%d	%d	%d	%d	%s", incept_from_txt.id, incept_from_txt.name, &incept_from_txt.score[1], &incept_from_txt.score[2], &incept_from_txt.score[3], &incept_from_txt.score[4], pass_or_not_string)) != EOF)
	{
	//	printf("return_fscanf_= %d\n", return_fscanf);
	//	printf("%s	%s	4 = %d	%s\n", incept_from_txt.id, incept_from_txt.name, incept_from_txt.score[4], pass_or_not_string);
		member_head_list = create_Member_List(&incept_from_txt, member_head_list);
	}
	fclose(fp);
	return member_head_list;
}
/*
* 采用头插入法录入从文件中读取的节点
*/
Mem_List_Ptr create_Member_List(const Mem_List_Ptr incept_from_txt_pointer, Mem_List_Ptr member_head_list)
{
	Mem_List_Ptr index = NULL;
	index = (Mem_List_Ptr)malloc(sizeof(struct member_List));
	if(index == NULL)
		printf("error!\n failed!\n");
	
	memset(index, 0, sizeof(struct member_List));
	
	strcpy(index->id, incept_from_txt_pointer->id);
	strcpy(index->name, incept_from_txt_pointer->name);
	index->pass_or_not = true;
	for(int i = 1; i <= 4; ++i)
	{
		index->pass_or_not = index->pass_or_not && (incept_from_txt_pointer->score[i] >= 90);
		index->score[i] = incept_from_txt_pointer->score[i];
	}
	
	index->next_address_point = member_head_list;
	member_head_list = index;	
	return member_head_list;
}

#if 1
void data_Write(Mem_List_Ptr member_head_list)
{
	//int return_fscanf;
	FILE *fp = NULL;
	//对于member.txt 有则清空,无则创建
	fp = fopen("/root/20210830/Txt_Doc/member.txt", "w");
	open_File_Check(fp);
	
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	while(index)
	{
		fprintf(fp,"%s	%s	%d	%d	%d	%d", index->id, index->name, index->score[1], index->score[2], index->score[3], index->score[4]);
		
		if(index->pass_or_not)
			fprintf(fp, "	PASS!\n");
		else
			fprintf(fp, "	NOT_PASS\n");

		index = index->next_address_point;
	}
	fflush(fp);	
	fclose(fp);
}
#endif
/*
* 采用头插入法插入新的节点
*/
Mem_List_Ptr insert_Member_List(const Mem_List_Ptr incept_from_txt_pointer, Mem_List_Ptr member_head_list)
{
	return create_Member_List(incept_from_txt_pointer, member_head_list);
}

//删除操作
Mem_List_Ptr remove_Member_List(const char aim_string[], Mem_List_Ptr member_head_list)
{
	Mem_List_Ptr index_front = member_head_list, index = member_head_list, index_behind = member_head_list->next_address_point;
	
	//int cnt = 1;
	//printf("remove----\n", );
	//该字符串为姓名或编号	
	while(index != NULL)
	{
		//printf("cnt = %d\n", cnt++);
		//if(cnt >= 20)
			//break;
		if((strcmp(index->name, aim_string) == 0) || (strcmp(index->id, aim_string) == 0))
		{
			if(index_front == index)  //头部就是要删除的节点
			{
				index_front = index_behind; //直接删除第一个节点
				member_head_list = index_front;
				break;
			}
			else if(index->next_address_point == NULL) //尾部才是要删除的节点
			{
				index_front->next_address_point = NULL; //直接删除最后一个节点
				break;
			}
			else	//中间某个节点是要删除的节点 
			{
				index_front->next_address_point = index_behind; //直接删除中间节点
				break;	
				
			}
		}
		//index_front 始终在指向index的前面一个节点,index_behind始终指向index的后面一个节点
		//除非一开始状态是front和index一样,指向最后一个节点时候,behind和index一样
		index = index_behind;
		if(index != NULL)
		{
			index_behind = index->next_address_point;
		}
		if(index_front->next_address_point != index)
		{
			index_front = index_front->next_address_point;
		}	
		
	}
	//释放已经删除节点的内存
	free(index);
	return member_head_list;
}

/*
* find the member who you want
* you can find him use his name or id
*/
void find_Member_List(const char aim_string[], const Mem_List_Ptr member_head_list)
{
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	while(index)
	{
		if((strcmp(index->id, aim_string) == 0) || (strcmp(index->name, aim_string) == 0))
			{
				printf("%s	%s	%d 	%d	%d	%d", index->id, index->name, index->score[1], index->score[2], index->score[3], index->score[4]);
				if(index->pass_or_not)
					printf("	PASS!\n");
				else
					printf("	NOT_PASS\n");
				
				break;
			}
		index = index->next_address_point;	
	}
}

/**
 * 修改学员信息
 */
void alter_Member_List(const char aim_string[], const Mem_List_Ptr member_head_list)
{
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	while(index)
	{
		if((strcmp(index->id, aim_string) == 0) || (strcmp(index->name, aim_string) == 0))
		{
			printf("%s	%s	%d 	%d	%d	%d", index->id, index->name, index->score[1], index->score[2], index->score[3], index->score[4]);
			if(index->pass_or_not)
				printf("	PASS!\n");
			else
				printf("	NOT_PASS\n");
			
			printf("---重新录入成绩----\n");

			index->pass_or_not = true;
			for(int i = 1; i <= 4; ++i)
			{
				printf("科目[ %d ] : ", i);
				scanf("%d", &index->score[i]);

				index->pass_or_not = index->pass_or_not && (index->score[i] >= 90);
			}
			printf("---更新成功!----\n");
			
			break;
		}
		index = index->next_address_point;	
	}
}

//print the member'list
void print_Member_List(const Mem_List_Ptr member_head_list)
{
	//初始化
	for(int i = 0; i <= 4; ++i)
		pass_number[i] = 0;
	
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	sum_member = 0; // 初始化
	while(index)
	{
		sum_member++;
		printf("%-3s	%-10s	%d 	%d	%d	%d", index->id, index->name, index->score[1], index->score[2], index->score[3], index->score[4]);
		for(int i  = 1; i <= 4; ++i)
		{
			if(index->score[i] >= 90)
				pass_number[i]++;
		}
		if(index->pass_or_not)
		{
			pass_number[0]++;  //如果该学员通过则pass_number[0] + 1	
			printf("	PASS!\n");
		}
		else
			printf("	NOT_PASS\n");
		index = index->next_address_point;	
	}
}

#if 1
//printed sorted array use name or id of student
void print_Array_Sort(const struct member_List array[], int flag)
{
	int incept_from_input;
	printf("\n[1]正序 	[2]逆序 !\n");
	scanf("%d", &incept_from_input);
	if(incept_from_input == 1)
	{
		if(flag == 1)
		{
			for(int i = 1; i <= sort_array_length; ++i)
			{
				printf(YELLOW "%-3s" NONE "	%-10s	%d 	%d	%d	%d", array[i].id,  array[i].name, array[i].score[1], array[i].score[2], array[i].score[3], array[i].score[4]);
				if(array[i].pass_or_not)
					printf("	PASS!\n");
				else
					printf("	NOT_PASS\n");
			}

		}
		else
		{
			for(int i = 1; i <= sort_array_length; ++i)
			{
				printf("%-3s	" YELLOW "%-10s" NONE "	%d 	%d	%d	%d", array[i].id,  array[i].name, array[i].score[1], array[i].score[2], array[i].score[3], array[i].score[4]);
				if(array[i].pass_or_not)
					printf("	PASS!\n");
				else
					printf("	NOT_PASS\n");
			}


		}
	}
	else if(incept_from_input == 2)
	{
		if(flag == 1)
		{
			for(int i = sort_array_length; i >= 1; --i)
			{
				printf(YELLOW "%-3s" NONE "	%-10s	%d 	%d	%d	%d", array[i].id,  array[i].name, array[i].score[1], array[i].score[2], array[i].score[3], array[i].score[4]);
				if(array[i].pass_or_not)
					printf("	PASS!\n");
				else
					printf("	NOT_PASS\n");
			}

		}
		else
		{
			for(int i = sort_array_length; i >= 1; --i)
			{
				printf("%-3s	" YELLOW "%-10s" NONE "	%d 	%d	%d	%d", array[i].id,  array[i].name, array[i].score[1], array[i].score[2], array[i].score[3], array[i].score[4]);
				if(array[i].pass_or_not)
					printf("	PASS!\n");
				else
					printf("	NOT_PASS\n");
			}


		}
	}
}
#endif

void sort_Member_List(const Mem_List_Ptr member_head_list)
{	
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	
	sort_array_length = 0;
	for(int i = 1; index; ++i)
	{
		strcpy(array_sort[i].id, index->id);	
		strcpy(array_sort[i].name, index->name);
		for(int j = 1; j <= 4; ++j)
		{
			array_sort[i].score[j] = index->score[j];
		}
		array_sort[i].pass_or_not = index->pass_or_not;
		++sort_array_length;

		index = index->next_address_point;	
	}
	int incept_from_input;
	printf("\n [1] 编号 		[2] 姓名\n");
	scanf("%d", &incept_from_input);
	
	if(incept_from_input == 1)
		sort(array_sort+1, array_sort+sort_array_length+1, cmp_Positive_Order_Id);	
	else if(incept_from_input == 2)
		sort(array_sort+1, array_sort+sort_array_length+1, cmp_Positive_Order_Name);
	else
		printf("\nerror, do not have this option!\n");
	print_Array_Sort(array_sort, incept_from_input);
}
void destroy_Member_List(Mem_List_Ptr member_head_list)
{
		
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	while(member_head_list)
	{
		index = member_head_list;
		member_head_list = member_head_list->next_address_point;
		free(index);
	}
}
void destroy_Admin_List(Adm_List_Ptr admin_head_list)
{
	
	Adm_List_Ptr index = NULL;
	index = admin_head_list;
	while(admin_head_list)
	{
		index = admin_head_list;
		admin_head_list = admin_head_list->next_address_point;
		free(index);
	}
}
void destroy_Coach_List(Coa_List_Ptr coach_head_list)
{
	
	Coa_List_Ptr index = NULL;
	index = coach_head_list;
	while(coach_head_list)
	{
		index = coach_head_list;
		coach_head_list = coach_head_list->next_address_point;
		free(index);
	}
}

int find_User_Member(const char aim_string[], const Mem_List_Ptr member_head_list)
{
	Mem_List_Ptr index = NULL;
	index = member_head_list;
	while(index)
	{
		//printf("find_user");
		if(strcmp(index->name, aim_string) == 0)
		{
			return 1; //represent member	
			break;
		}
		index = index->next_address_point;	
	}
	return -1;
}

int find_User_Coach(const char aim_string[], const Coa_List_Ptr coach_head_list)
{
	Coa_List_Ptr index = NULL;
	index = coach_head_list;
	while(index)
	{
		if(strcmp(index->name, aim_string) == 0)
		{
			return 2; //represent coach
			break;
		}
		index = index->next_address_point;	
	}
	return -1;
}

int find_User_Admin(const char aim_string[], const Adm_List_Ptr admin_head_list)
{
	Adm_List_Ptr index = NULL;
	index = admin_head_list;
	while(index)
	{
		if(strcmp(index->name, aim_string) == 0)
		{
			return 3; //represent admin
			break;
		}
		index = index->next_address_point;	
	}
	return -1;
}

int User_Login(char name[], const Mem_List_Ptr member_head_list, const Adm_List_Ptr admin_head_list, const Coa_List_Ptr coach_head_list)
{
	int flag = 0;
	
	flag = find_User_Member(name, member_head_list);
	if(flag == 1)
	{
		
		progress_Bar_Print();
		printf("Welcome %s " L_RED "Student!\n" NONE, name);
		return flag;
	}
	
	flag = find_User_Coach(name, coach_head_list);
	if(flag == 2)
	{
		progress_Bar_Print();
		printf("Welcome %s " L_RED "Coach!\n" NONE, name);
		return flag;
	}
	
	flag = find_User_Admin(name, admin_head_list);
	if(flag == 3)
	{	
		progress_Bar_Print();
		printf("Welcome %s " L_RED "Admin!\n" NONE, name);
		return flag;
	}

	return flag;  //no such man "-1"
}
int main()
{
#if 0
	Mem_List_Ptr member_head_list = NULL;
	member_head_list = file_Load_Member(member_head_list);	
	Adm_List_Ptr admin_head_list  = NULL;
	admin_head_list  = file_Load_Admin(admin_head_list);
	Coa_List_Ptr coach_head_list  = NULL;
	coach_head_list  = file_Load_Coach(coach_head_list);

	//user Login
	int flag = User_Login(member_head_list, admin_head_list, coach_head_list);
	if(flag < 0)
	{
		printf("无此人记录!\n");
		exit(1);
	}
#endif
	Mem_List_Ptr member_head_list = NULL;
	Adm_List_Ptr admin_head_list  = NULL;
	Coa_List_Ptr coach_head_list  = NULL;
	int option = 8;
	char aim_string[20], name[20];
	int flag;
	while(1)
	{
		if(option == 8)
		{
			member_head_list = NULL;
			admin_head_list  = NULL;
			coach_head_list  = NULL;

			member_head_list = file_Load_Member(member_head_list);	
			admin_head_list  = file_Load_Admin(admin_head_list);
			coach_head_list  = file_Load_Coach(coach_head_list);
			//user Login
			//	1. 学员
			//	2. coach
			//	3、admin
			memset(name, '\0', 20*sizeof(char));
			printf("\n--------------登陆窗口用户名:------------\n");
			scanf("%s", name);
			flag = User_Login(name, member_head_list, admin_head_list, coach_head_list);
			if(flag < 0)
			{
				printf("\n无此人记录!\n");
				break;
			}
		}
		printf("\n------******--------\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("\n------******--------\n");
		printf("请选择: ");
		scanf("%d", &option);
		getchar();
		switch(option)
		{
			case 1:
			   	if(flag == 1)
				{	
					printf(L_RED);
					find_Member_List(name, member_head_list);
					printf(NONE);
					break;
				}
				printf("\ninput the id or name which you want search:\n");
				memset(aim_string, '\0', 20*sizeof(char));
				cin.getline(aim_string, 20);
				printf(YELLOW);
				find_Member_List(aim_string, member_head_list);
				printf(NONE);
				break;
			case 2:
				if(flag != 2 && flag != 3)
				{
					printf("\nNo such permission\n");
					break;
				}
				memset(aim_string, '\0', 20*sizeof(char));
				printf("\ninput the id or name which you want to alter:\n");
				cin.getline(aim_string, 20);

				alter_Member_List(aim_string, member_head_list);
				break;
			case 3:
				if(flag != 3)
				{
					printf("\nNo such permission\n");
					break;
				}	
				struct member_List aim_member;
				printf("\ninput the information which you want to insert:\n");
				printf("input his id: ");
				cin.getline(aim_member.id, 20); 
				printf("input his name: ");
				cin.getline(aim_member.name, 20);
				for(int i = 1; i <= 4; ++i)
				{
					printf("\n科目[ %d ] : ", i);
					scanf("%d", &aim_member.score[i]);
				}
				member_head_list = insert_Member_List(&aim_member, member_head_list);
				break;
			case 4:
				if(flag != 3)
				{
					printf("\nNo such permission\n");
					break;
				}	
				memset(aim_string, '\0', 20*sizeof(char));
				printf("\ninput the id or name which you want to remove:\n");
				cin.getline(aim_string, 20);

				member_head_list = remove_Member_List(aim_string, member_head_list);
				break;
			case 5:
				if(flag != 2 && flag != 3)
				{
					printf("\nNo such permission\n");
					break;
				}	
				printf(YELLOW);
				print_Member_List(member_head_list);
				printf(NONE);//清除颜色

				if(flag == 3)
				{
					printf(L_RED);
					for(int i = 1; i <= 4; ++i)
					{
						printf("科目[ %d ] 的通过率为:  %d/%d\n", i, pass_number[i], sum_member);
					}
					printf("\n一共通过%d个学员, 通过率为: %d/%d!\n", sum_member, pass_number[0], sum_member);
					printf(NONE);
					break;
				}

				break;
			case 6:
				sort_Member_List(member_head_list);
				break;
			case 7:
				
				progress_Bar_Print();
				data_Write(member_head_list);
				printf("\nwrite Success!\n");	
				break;
			case 8:
				destroy_Member_List(member_head_list);
				destroy_Admin_List(admin_head_list);
				destroy_Coach_List(coach_head_list);
				break;
			default:
				printf("\nnot have this option\n");
				break;
		}
	}
	exit(0);
}

运行示例:

待补充

基于C/C++实现的驾校学员驾考成绩管理系统(大学实验周/源代码/示例)

链接添基于C/C++实现的驾校学员驾考成绩管理系统(大学实验周/源代码/示例))


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++

“单链表的基本操作—驾校学员驾考成绩管理系统(C/C++源代码/示例/B站)” 的相关文章