C/C++ 图书馆预约座位系统

结构体:C 版本

#include <stdio.h>
            #include <windows.h> 
        

        //定义 图书管管理员 结构体
    struct Admin {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
            };
    //定义全局 图书管管理员 数组
    struct Admin adminList [100];
    //定义全局 图书管管理员 数组栈指针
    int adminCount = 0;
        //定义 学生 结构体
    struct Student {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
                    char name[15] ; // 名称
                    char numb[18] ; // 编号
                    char tele[16] ; // 电话
                    char gender[8] ; // 性别
            };
    //定义全局 学生 数组
    struct Student studentList [100];
    //定义全局 学生 数组栈指针
    int studentCount = 0;
        //定义 座位 结构体
    struct Seat {
                    char numb[18] ; // 座位编号
            };
    //定义全局 座位 数组
    struct Seat seatList [100];
    //定义全局 座位 数组栈指针
    int seatCount = 0;
        //定义 预约位置 结构体
    struct Pre {
                    char student[15] ; // 学生
                    char seat[15] ; // 位置编号
            };
    //定义全局 预约位置 数组
    struct Pre preList [100];
    //定义全局 预约位置 数组栈指针
    int preCount = 0;
    
        //图书管管理员 读入文件
    void readAdmin ();
    //图书管管理员 写入文件
    void writeAdmin ();
    //图书管管理员 添加记录
    void addAdmin ();
        //图书管管理员 删除记录
    void delAdmin ();
    //图书管管理员 根据下标删除
    int delAdminByIndex (int index);
    //图书管管理员 修改记录
    void modAdmin ();
    //图书管管理员 查找记录
    void findAdmin (int all);
    //图书管管理员 排序
    void sortAdmin ();
    //交换
    void exchangeAdmin (int i ,int j);
    //存在判断函数
                                    int getOneAdmin (const char *name,char *s);
                                    void modAdminInfo ();
                //学生 读入文件
    void readStudent ();
    //学生 写入文件
    void writeStudent ();
    //学生 添加记录
    void addStudent ();
        //学生 删除记录
    void delStudent ();
    //学生 根据下标删除
    int delStudentByIndex (int index);
    //学生 修改记录
    void modStudent ();
    //学生 查找记录
    void findStudent (int all);
    //学生 排序
    void sortStudent ();
    //交换
    void exchangeStudent (int i ,int j);
    //存在判断函数
                                    int getOneStudent (const char *name,char *s);
                                    void modStudentInfo ();
                //座位 读入文件
    void readSeat ();
    //座位 写入文件
    void writeSeat ();
    //座位 添加记录
    void addSeat ();
        //座位 删除记录
    void delSeat ();
    //座位 根据下标删除
    int delSeatByIndex (int index);
    //座位 修改记录
    void modSeat ();
    //座位 查找记录
    void findSeat (int all);
    //座位 排序
    void sortSeat ();
    //交换
    void exchangeSeat (int i ,int j);
    //存在判断函数
                                    int getOneSeat (const char *name,char *s);
                                    //预约位置 读入文件
    void readPre ();
    //预约位置 写入文件
    void writePre ();
    //预约位置 添加记录
    void addPre ();
        //预约位置 删除记录
    void delPre ();
    //预约位置 根据下标删除
    int delPreByIndex (int index);
    //预约位置 修改记录
    void modPre ();
    //预约位置 查找记录
    void findPre (int all);
    //预约位置 排序
    void sortPre ();
    //交换
    void exchangePre (int i ,int j);
    //存在判断函数
                    
        //菜单
            void login();
        void regist();
                                                                    struct Admin loginAdmin;
                                    void menuAdmin ();
                                                                                    struct Student loginStudent;
                                    void menuStudent ();
                                                                                            int loginStatus = 0;//意义:0 未登录
    
    // 主函数
    int main(){
            //读取数据
                        readAdmin ();//读取图书管管理员
                            readStudent ();//读取学生
                            readSeat ();//读取座位
                            readPre ();//读取预约位置
                while(1){
                                         printf("*---------------------------------------------*\n*------------1:登陆\n*------------2:注册\n*---------------------------------------------*\n请输入选择:");                    int logout=0; //返回上一级标志
                int select =0;
                            scanf("%d",&select);
                    if(select!=2){
                    login();
                }else{
                    regist();
                }
                        int choice;
                                                                        if(loginStatus == 1)
                                                                             while(logout==0){     menuAdmin ();
                scanf("%d",&choice);
        switch(choice){
                                                                            case 1 :
                            findAdmin (0);//查找图书管管理员
                break;
                            case 2 :
                            sortAdmin ();//排序图书管管理员
                break;
                                                            case 3 :
                            addStudent ();//添加学生
                break;
                                                    case 4 :
                            findStudent (1);//查找学生
                                delStudent ();//删除学生
                break;
                                                    case 5 :
                            findStudent (1);//查找学生
                                modStudent ();//修改学生
                break;
                                                    case 6 :
                            findStudent (0);//查找学生
                break;
                            case 7 :
                            sortStudent ();//排序学生
                break;
                                                            case 8 :
                            addSeat ();//添加座位
                break;
                                                    case 9 :
                            findSeat (1);//查找座位
                                delSeat ();//删除座位
                break;
                                                    case 10 :
                            findSeat (1);//查找座位
                                modSeat ();//修改座位
                break;
                                                    case 11 :
                            findSeat (0);//查找座位
                break;
                            case 12 :
                            sortSeat ();//排序座位
                break;
                                                            case 13 :
                            addPre ();//添加预约位置
                break;
                                                    case 14 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 15 :
                            findPre (0);//查找预约位置
                break;
                            case 16 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                    case -1:
                        printf("\n");                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modAdminInfo ();//修改个人信息
                break;
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
    }                                                                                if(loginStatus == 2)
                                                                             while(logout==0){     menuStudent ();
                scanf("%d",&choice);
        switch(choice){
                                                                                                                                    case 1 :
                            findStudent (0);//查找学生
                break;
                            case 2 :
                            sortStudent ();//排序学生
                break;
                                                                                                case 3 :
                            findSeat (0);//查找座位
                break;
                            case 4 :
                            sortSeat ();//排序座位
                break;
                                                            case 5 :
                            addPre ();//添加预约位置
                break;
                                                    case 6 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 7 :
                            findPre (0);//查找预约位置
                break;
                            case 8 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                    case -1:
                        printf("\n");                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modStudentInfo ();//修改个人信息
                break;
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
    }                                                                                                                                }
        return 0;
    }


			void login(){
		int i;
		while(loginStatus==0){
			char username[20],password[20];
                        printf("请输入账号:");    			            scanf("%s",username);
                            printf("请输入密码:");                            scanf("%s",password);
    			                                                // 图书管管理员 登录
            if(loginStatus==0){
                for(i=0;i < adminCount ;i++){
                    if(strcmp(adminList [i].username,username)==0 && strcmp( adminList [i].password,password)==0){
                        loginAdmin = adminList [i];
                        loginStatus = 1;
                        break;
                    }
                }
            }
                                            // 学生 登录
            if(loginStatus==0){
                for(i=0;i < studentCount ;i++){
                    if(strcmp(studentList [i].username,username)==0 && strcmp( studentList [i].password,password)==0){
                        loginStudent = studentList [i];
                        loginStatus = 2;
                        break;
                    }
                }
            }
                                                                			//判断登录情况
			if(loginStatus == 0){
				            printf("\n用户名密码错误请重新登录!\n\n");    			} else{
				            printf("\n登录成功!\n\n");    ;
			}
		}
	}
	void regist(){
		int flag = 0;//注册状态 0 失败 ,1 成功
		while(flag ==0){
			            printf("*---------------------------------------------*\n*------------0:返回 \n");    			                                                printf("*------------1:注册图书管管理员 \n");                    			                                                printf("*------------2:注册学生 \n");                    			                			                			                        printf("*---------------------------------------------*\n请输入选择:");    			int select = 0;
			            scanf("%d",&select);
    ;
			if(select == 0){
				flag = 1;//返回
			} else{
			char username[20],password[20];
                        printf("请输入账号:");                            scanf("%s",username);
    ;
                        printf("请输入密码:");                            scanf("%s",password);
    			                                                if( select == 1 ){ //注册图书管管理员
                if( getOneAdmin ("username",username)>=0) { //根据用户名查找用户是否存在
                                printf("\n用户名已存在!\n\n");                    }else{ //不存在则成功注册并且填写剩余属性
                    strcpy( adminList [adminCount].username,username);
                    strcpy(adminList [adminCount].password,password);
                                                                                                                                                    loginAdmin = adminList [adminCount];
                    adminCount ++;
                    loginStatus = 1;
                    writeAdmin ();
                    flag = 1;
                }
            }
                                            if( select == 2 ){ //注册学生
                if( getOneStudent ("username",username)>=0) { //根据用户名查找用户是否存在
                                printf("\n用户名已存在!\n\n");                    }else{ //不存在则成功注册并且填写剩余属性
                    strcpy( studentList [studentCount].username,username);
                    strcpy(studentList [studentCount].password,password);
                                                                                                                                                                                                                                 printf("请输入名称 :");    ;
                                            scanf("%s",studentList [ studentCount ] . name);
                                                                                                                                                                             printf("请输入编号 :");    ;
                                            scanf("%s",studentList [ studentCount ] . numb);
                                                                                                                                                                             printf("请输入电话 :");    ;
                                            scanf("%s",studentList [ studentCount ] . tele);
                                                                                                                                                                             printf("请输入性别 :");    ;
                                            scanf("%s",studentList [ studentCount ] . gender);
                                                                                                loginStudent = studentList [studentCount];
                    studentCount ++;
                    loginStatus = 2;
                    writeStudent ();
                    flag = 1;
                }
            }
                                                                			if(flag == 1)
                            printf("注册成功\n\n");    			else
                            printf("注册失败!\n\n");    			}
		}
	}
	
void modAdminInfo (){
	            printf("\n====您的个人信息如下====\n");    			            printf("用户名:%s\n",loginAdmin.username);    			            printf("密码:%s\n",loginAdmin.password);    		            printf("==========================\n1,修改个人信息\n2,返回上一级\n请选择:");    	int n,i;
	            scanf("%d",&n);
    	if (n == 1) {
		for( i = 0;i < adminCount ; i++){
			if(strcmp(adminList [i].username,loginAdmin .username)==0){
																				            printf("请输入密码 :");    						            scanf("%s",loginAdmin.password);
    								adminList [ i ] = loginAdmin;
				writeAdmin ();
				            printf("修改成功!\n");    				break;
			}
		}
	}
}
//图书管管理员 是否存在判断
int getOneAdmin (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < adminCount ;i++){
							if( strcmp(name,"username")==0 && strcmp(s, adminList [i]. username )==0){
				res = i;
				break;
			}
									}
	return res;
}
//图书管管理员 读入文件
void readAdmin (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Admin.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s"
								 ,adminList[i].username  ,adminList[i].password 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	adminCount = i;
	fclose(fp);
}
	//图书管管理员 写入文件
void writeAdmin (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Admin.txt", "w+");
	for( i = 0;i< adminCount ;i++){
		fprintf(fp,"%s %s\n"
				 ,adminList[i].username  ,adminList[i].password );
	}
	fclose(fp);
}
	//图书管管理员 添加记录
void addAdmin (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    						 				            printf("请输入用户名 :");    				char username[15]; 				            scanf("%s",username);
    									strcpy(adminList [ adminCount ] . username,username);
								 				//检索Admin 不重复
				int getOneAdminusername = getOneAdmin ("username",adminList [ adminCount ] . username);
				if( getOneAdminusername >=0){//检索不为空
					            printf("用户名已存在!\n");    				break;
				}
																							 				            printf("请输入密码 :");    				char password[15]; 				            scanf("%s",password);
    									strcpy(adminList [ adminCount ] . password,password);
																								//adminCount 是全局变量
		adminCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writeAdmin ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//图书管管理员 删除
void delAdmin (){
	            printf("请输入您要删除的 图书管管理员 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delAdminByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writeAdmin ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//图书管管理员 根据下标删除
int delAdminByIndex (int index){
	if(index >= adminCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < adminCount - 1 ; i++){
		//元素全部往前移一位。
		adminList [i] = adminList [i+1];
	}
	//最后令栈的长度减一
	adminCount = adminCount - 1;
	return 1;
}
	//图书管管理员 修改
void modAdmin (){
	            printf("请输入您要修改的图书管管理员 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < adminCount ){
		//开始修改
										 									            printf("请输入密码 :");    					char password[15];
					            scanf("%s",password);
    
																															//输入完毕,赋值
										 									strcpy(adminList [ indexOfMod ] . password,password);
											            printf("修改成功!\n");    		writeAdmin ();
	}else{
		            printf("输入错误!\n");    	}

}
//图书管管理员 查找 如果all=1:查询全部 否则按条件查询
void findAdmin (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-15s\n\n","序号" ,"用户名","密码" );
		if( adminList ){
			//用于统计信息所用
			int count = 0,i;
																				for (i = 0;i <  adminCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(adminList [i]. username,conCharArr) //根据用户名,模糊查询
																																	){
															printf("%-5d%-15s%-15s \n\n",i
																			,adminList [i] . username
													,adminList [i] . password
											);
					//用于统计信息所用
																																count++;
				}else{
					delAdminByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																							            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 用户名 筛选\n");    												            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readAdmin();//从新读取数据。
}
	//图书管管理员 排序
void sortAdmin (){
	int select,i,j;
			            printf("1:按 用户名 排序\n");    			            printf("2:按 密码 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = adminCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(adminList [j]. username , adminList [j+1]. username)>0
															|| select == 2 && strcmp(adminList [j]. password , adminList [j+1]. password)>0
										){
				exchangeAdmin (j,j+1);
			}
		}
	}
	findAdmin (1);
	writeAdmin ();
}
//图书管管理员 交换
void exchangeAdmin (int i,int j){
	struct Admin admin = adminList [i];
	adminList [i] = adminList  [j];
	adminList [j] = admin ;
}
void modStudentInfo (){
	            printf("\n====您的个人信息如下====\n");    			            printf("用户名:%s\n",loginStudent.username);    			            printf("密码:%s\n",loginStudent.password);    			            printf("名称:%s\n",loginStudent.name);    			            printf("编号:%s\n",loginStudent.numb);    			            printf("电话:%s\n",loginStudent.tele);    			            printf("性别:%s\n",loginStudent.gender);    		            printf("==========================\n1,修改个人信息\n2,返回上一级\n请选择:");    	int n,i;
	            scanf("%d",&n);
    	if (n == 1) {
		for( i = 0;i < studentCount ; i++){
			if(strcmp(studentList [i].username,loginStudent .username)==0){
																				            printf("请输入密码 :");    						            scanf("%s",loginStudent.password);
    															            printf("请输入名称 :");    						            scanf("%s",loginStudent.name);
    															            printf("请输入编号 :");    						            scanf("%s",loginStudent.numb);
    															            printf("请输入电话 :");    						            scanf("%s",loginStudent.tele);
    															            printf("请输入性别 :");    						            scanf("%s",loginStudent.gender);
    								studentList [ i ] = loginStudent;
				writeStudent ();
				            printf("修改成功!\n");    				break;
			}
		}
	}
}
//学生 是否存在判断
int getOneStudent (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < studentCount ;i++){
							if( strcmp(name,"username")==0 && strcmp(s, studentList [i]. username )==0){
				res = i;
				break;
			}
													if( strcmp(name,"name")==0 && strcmp(s, studentList [i]. name )==0){
				res = i;
				break;
			}
									if( strcmp(name,"numb")==0 && strcmp(s, studentList [i]. numb )==0){
				res = i;
				break;
			}
													}
	return res;
}
//学生 读入文件
void readStudent (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Student.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s%s%s%s%s"
								 ,studentList[i].username  ,studentList[i].password  ,studentList[i].name  ,studentList[i].numb  ,studentList[i].tele  ,studentList[i].gender 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	studentCount = i;
	fclose(fp);
}
	//学生 写入文件
void writeStudent (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Student.txt", "w+");
	for( i = 0;i< studentCount ;i++){
		fprintf(fp,"%s %s %s %s %s %s\n"
				 ,studentList[i].username  ,studentList[i].password  ,studentList[i].name  ,studentList[i].numb  ,studentList[i].tele  ,studentList[i].gender );
	}
	fclose(fp);
}
	//学生 添加记录
void addStudent (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    						 				            printf("请输入用户名 :");    				char username[15]; 				            scanf("%s",username);
    									strcpy(studentList [ studentCount ] . username,username);
								 				//检索Student 不重复
				int getOneStudentusername = getOneStudent ("username",studentList [ studentCount ] . username);
				if( getOneStudentusername >=0){//检索不为空
					            printf("用户名已存在!\n");    				break;
				}
																							 				            printf("请输入密码 :");    				char password[15]; 				            scanf("%s",password);
    									strcpy(studentList [ studentCount ] . password,password);
																											 				            printf("请输入名称 :");    				char name[15]; 				            scanf("%s",name);
    									strcpy(studentList [ studentCount ] . name,name);
								 				//检索Student 不重复
				int getOneStudentname = getOneStudent ("name",studentList [ studentCount ] . name);
				if( getOneStudentname >=0){//检索不为空
					            printf("名称已存在!\n");    				break;
				}
																							 				            printf("请输入编号 :");    				char numb[18]; 				            scanf("%s",numb);
    									strcpy(studentList [ studentCount ] . numb,numb);
								 				//检索Student 不重复
				int getOneStudentnumb = getOneStudent ("numb",studentList [ studentCount ] . numb);
				if( getOneStudentnumb >=0){//检索不为空
					            printf("编号已存在!\n");    				break;
				}
																							 				            printf("请输入电话 :");    				char tele[16]; 				            scanf("%s",tele);
    									strcpy(studentList [ studentCount ] . tele,tele);
																											 				            printf("请输入性别 :");    				char gender[8]; 				            scanf("%s",gender);
    									strcpy(studentList [ studentCount ] . gender,gender);
																								//studentCount 是全局变量
		studentCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writeStudent ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//学生 删除
void delStudent (){
	            printf("请输入您要删除的 学生 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delStudentByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writeStudent ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//学生 根据下标删除
int delStudentByIndex (int index){
	if(index >= studentCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < studentCount - 1 ; i++){
		//元素全部往前移一位。
		studentList [i] = studentList [i+1];
	}
	//最后令栈的长度减一
	studentCount = studentCount - 1;
	return 1;
}
	//学生 修改
void modStudent (){
	            printf("请输入您要修改的学生 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < studentCount ){
		//开始修改
										 									            printf("请输入密码 :");    					char password[15];
					            scanf("%s",password);
    
																																 									            printf("请输入名称 :");    					char name[15];
					            scanf("%s",name);
    
															if(strcmp(studentList [indexOfMod] . name,name) != 0 && getOneStudent ("name",name)>=0){//检索不为空
						            printf("名称 已存在!\n");    						return;
					}
																																 									            printf("请输入电话 :");    					char tele[16];
					            scanf("%s",tele);
    
																																 									            printf("请输入性别 :");    					char gender[8];
					            scanf("%s",gender);
    
																															//输入完毕,赋值
										 									strcpy(studentList [ indexOfMod ] . password,password);
												 									strcpy(studentList [ indexOfMod ] . name,name);
																	 									strcpy(studentList [ indexOfMod ] . tele,tele);
												 									strcpy(studentList [ indexOfMod ] . gender,gender);
											            printf("修改成功!\n");    		writeStudent ();
	}else{
		            printf("输入错误!\n");    	}

}
//学生 查找 如果all=1:查询全部 否则按条件查询
void findStudent (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-15s%-15s%-18s%-16s%-8s\n\n","序号" ,"用户名","密码","名称","编号","电话","性别" );
		if( studentList ){
			//用于统计信息所用
			int count = 0,i;
																																																for (i = 0;i <  studentCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(studentList [i]. username,conCharArr) //根据用户名,模糊查询
																																																	|| select == 2 && strstr(studentList [i]. name,conCharArr) //根据名称,模糊查询
																																						|| select == 3 && strstr(studentList [i]. numb,conCharArr) //根据编号,模糊查询
																																																	|| select == 4 && strstr(studentList [i]. gender,conCharArr) //根据性别,模糊查询
																						){
															printf("%-5d%-15s%-15s%-15s%-18s%-16s%-8s \n\n",i
																			,studentList [i] . username
													,studentList [i] . password
													,studentList [i] . name
													,studentList [i] . numb
													,studentList [i] . tele
													,studentList [i] . gender
											);
					//用于统计信息所用
																																																																												count++;
				}else{
					delStudentByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																																																			            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 用户名 筛选\n");    																	            printf("2:按 名称 筛选\n");    												            printf("3:按 编号 筛选\n");    																	            printf("4:按 性别 筛选\n");    							            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ||select==2 ||select==3 ||select==4 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readStudent();//从新读取数据。
}
	//学生 排序
void sortStudent (){
	int select,i,j;
			            printf("1:按 用户名 排序\n");    			            printf("2:按 密码 排序\n");    			            printf("3:按 名称 排序\n");    			            printf("4:按 编号 排序\n");    			            printf("5:按 电话 排序\n");    			            printf("6:按 性别 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = studentCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(studentList [j]. username , studentList [j+1]. username)>0
															|| select == 2 && strcmp(studentList [j]. password , studentList [j+1]. password)>0
															|| select == 3 && strcmp(studentList [j]. name , studentList [j+1]. name)>0
															|| select == 4 && strcmp(studentList [j]. numb , studentList [j+1]. numb)>0
															|| select == 5 && strcmp(studentList [j]. tele , studentList [j+1]. tele)>0
															|| select == 6 && strcmp(studentList [j]. gender , studentList [j+1]. gender)>0
										){
				exchangeStudent (j,j+1);
			}
		}
	}
	findStudent (1);
	writeStudent ();
}
//学生 交换
void exchangeStudent (int i,int j){
	struct Student student = studentList [i];
	studentList [i] = studentList  [j];
	studentList [j] = student ;
}
//座位 是否存在判断
int getOneSeat (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < seatCount ;i++){
							if( strcmp(name,"numb")==0 && strcmp(s, seatList [i]. numb )==0){
				res = i;
				break;
			}
					}
	return res;
}
//座位 读入文件
void readSeat (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Seat.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s"
								 ,seatList[i].numb 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	seatCount = i;
	fclose(fp);
}
	//座位 写入文件
void writeSeat (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Seat.txt", "w+");
	for( i = 0;i< seatCount ;i++){
		fprintf(fp,"%s\n"
				 ,seatList[i].numb );
	}
	fclose(fp);
}
	//座位 添加记录
void addSeat (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    						 				            printf("请输入座位编号 :");    				char numb[18]; 				            scanf("%s",numb);
    									strcpy(seatList [ seatCount ] . numb,numb);
								 				//检索Seat 不重复
				int getOneSeatnumb = getOneSeat ("numb",seatList [ seatCount ] . numb);
				if( getOneSeatnumb >=0){//检索不为空
					            printf("座位编号已存在!\n");    				break;
				}
																				//seatCount 是全局变量
		seatCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writeSeat ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//座位 删除
void delSeat (){
	            printf("请输入您要删除的 座位 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delSeatByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writeSeat ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//座位 根据下标删除
int delSeatByIndex (int index){
	if(index >= seatCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < seatCount - 1 ; i++){
		//元素全部往前移一位。
		seatList [i] = seatList [i+1];
	}
	//最后令栈的长度减一
	seatCount = seatCount - 1;
	return 1;
}
	//座位 修改
void modSeat (){
	            printf("请输入您要修改的座位 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < seatCount ){
		//开始修改
									//输入完毕,赋值
									            printf("修改成功!\n");    		writeSeat ();
	}else{
		            printf("输入错误!\n");    	}

}
//座位 查找 如果all=1:查询全部 否则按条件查询
void findSeat (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-18s\n\n","序号" ,"座位编号" );
		if( seatList ){
			//用于统计信息所用
			int count = 0,i;
													for (i = 0;i <  seatCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(seatList [i]. numb,conCharArr) //根据座位编号,模糊查询
																						){
															printf("%-5d%-18s \n\n",i
																			,seatList [i] . numb
											);
					//用于统计信息所用
																					count++;
				}else{
					delSeatByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 座位编号 筛选\n");    							            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readSeat();//从新读取数据。
}
	//座位 排序
void sortSeat (){
	int select,i,j;
			            printf("1:按 座位编号 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = seatCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(seatList [j]. numb , seatList [j+1]. numb)>0
										){
				exchangeSeat (j,j+1);
			}
		}
	}
	findSeat (1);
	writeSeat ();
}
//座位 交换
void exchangeSeat (int i,int j){
	struct Seat seat = seatList [i];
	seatList [i] = seatList  [j];
	seatList [j] = seat ;
}
//预约位置 读入文件
void readPre (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Pre.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s"
								 ,preList[i].student  ,preList[i].seat 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	preCount = i;
	fclose(fp);
}
	//预约位置 写入文件
void writePre (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Pre.txt", "w+");
	for( i = 0;i< preCount ;i++){
		fprintf(fp,"%s %s\n"
				 ,preList[i].student  ,preList[i].seat );
	}
	fclose(fp);
}
	//预约位置 添加记录
void addPre (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            printf("\n");    					if(loginStatus==2){
			strcpy(preList [ preCount ] . student,loginStudent .name);
		}else{
					 				            printf("请输入学生 :");    				char student[15]; 				            scanf("%s",student);
    									strcpy(preList [ preCount ] . student,student);
																				//检索Pre 是否存在
				int getOneStudentFrn =getOneStudent ("name",preList [ preCount ] . student);
				if(getOneStudentFrn ==-1){//检索不为空
					            printf("学生不存在!\n");    				break;
				}
											}								 				            printf("请输入位置编号 :");    				char seat[15]; 				            scanf("%s",seat);
    									strcpy(preList [ preCount ] . seat,seat);
																				//检索Pre 是否存在
				int getOneSeatFrn =getOneSeat ("numb",preList [ preCount ] . seat);
				if(getOneSeatFrn ==-1){//检索不为空
					            printf("位置编号不存在!\n");    				break;
				}
												//preCount 是全局变量
		preCount ++;
		            printf("\n是否继续录入?(y/n)");    		getchar();
		            scanf("%c",&selectYNFlag);
    	}
	writePre ( );
	            printf("\n*****************************\n");    	            printf("录入完成\n");    	            printf("*****************************\n");    }
	//预约位置 删除
void delPre (){
	            printf("请输入您要删除的 预约位置 序号(输入-1退出):");    	int index;
	            scanf("%d",&index);
    
	if(index >= 0){
		int res = delPreByIndex (index);
		if(res){
			            printf("删除成功!\n\n");    			writePre ();
		}else{
			            printf("删除失败!\n\n");    		}
	}

}
	//预约位置 根据下标删除
int delPreByIndex (int index){
	if(index >= preCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < preCount - 1 ; i++){
		//元素全部往前移一位。
		preList [i] = preList [i+1];
	}
	//最后令栈的长度减一
	preCount = preCount - 1;
	return 1;
}
	//预约位置 修改
void modPre (){
	            printf("请输入您要修改的预约位置 序号(输入-1退出):");    	int indexOfMod = -1;
	            scanf("%d",&indexOfMod);
    	if(indexOfMod >= 0 && indexOfMod < preCount ){
		//开始修改
					 								if(loginStatus==2){
					strcpy(preList [ preCount ] . student,loginStudent.name);
				}else{
									            printf("请输入学生 :");    					char student[15];
					            scanf("%s",student);
    
																									if(getOneStudent ("name",student)==-1){//检索不为空
						            printf("学生 不存在!\n");    						return;
					}
													}												 									            printf("请输入位置编号 :");    					char seat[15];
					            scanf("%s",seat);
    
																									if(getOneSeat ("numb",seat)==-1){//检索不为空
						            printf("位置编号 不存在!\n");    						return;
					}
																//输入完毕,赋值
										 									strcpy(preList [ indexOfMod ] . seat,seat);
											            printf("修改成功!\n");    		writePre ();
	}else{
		            printf("输入错误!\n");    	}

}
//预约位置 查找 如果all=1:查询全部 否则按条件查询
void findPre (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-15s\n\n","序号" ,"学生","位置编号" );
		if( preList ){
			//用于统计信息所用
			int count = 0,i;
																				for (i = 0;i <  preCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(preList [i]. student,conCharArr) //根据学生,模糊查询
																																						|| select == 2 && strstr(preList [i]. seat,conCharArr) //根据位置编号,模糊查询
																						){
					 					if(0
												//学生 只能查看和自己相关的预约位置
						|| loginStatus == 2 && strcmp(preList [i] . student,loginStudent . name)!=0
											){
						delPreByIndex(i--);//删掉
						continue;
					}
															printf("%-5d%-15s%-15s \n\n",i
																			,preList [i] . student
													,preList [i] . seat
											);
					//用于统计信息所用
																																count++;
				}else{
					delPreByIndex(i--);//删掉
				}
			}
			            printf("共%d条结果\n",count);    			            printf("-----------------------------------------------------------------------------------------------------\n");    																							            printf("\n");    		}else{
			            printf("\n【无记录!】\n\n");    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n");    		            printf("0:退出\n");    									            printf("1:按 学生 筛选\n");    												            printf("2:按 位置编号 筛选\n");    							            printf("请输入选择:");    		            scanf("%d",&select);
    		if(select>0){
			if(0  ||select==1 ||select==2 ){
				            printf("请输入筛选条件:");    				            scanf("%s",conCharArr);
    			}else if(0 ){
				            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");    				            scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
    			}
		}else{
			break;
		}
	}
	readPre();//从新读取数据。
}
	//预约位置 排序
void sortPre (){
	int select,i,j;
			            printf("1:按 学生 排序\n");    			            printf("2:按 位置编号 排序\n");    		            printf("请输入选择:");    	            scanf("%d",&select);
    	for( i = preCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(preList [j]. student , preList [j+1]. student)>0
															|| select == 2 && strcmp(preList [j]. seat , preList [j+1]. seat)>0
										){
				exchangePre (j,j+1);
			}
		}
	}
	findPre (1);
	writePre ();
}
//预约位置 交换
void exchangePre (int i,int j){
	struct Pre pre = preList [i];
	preList [i] = preList  [j];
	preList [j] = pre ;
}

                                                        void menuAdmin (){
        //菜单
                    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("*-------------9 :删除座位\n");                                                        printf("*-------------10 :修改座位\n");                                                        printf("*-------------11 :查找座位\n");                                printf("*-------------12 :排序座位\n");                                                                printf("*-------------13 :添加预约位置\n");                                                        printf("*-------------14 :删除预约位置\n");                                                                    printf("*-------------15 :查找预约位置\n");                                printf("*-------------16 :排序预约位置\n");                                            printf("*-------------0:退出\n");                                    printf("*------------(-1):登出\n");                            printf("*------------(-2):我的\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }
                                                                void menuStudent (){
        //菜单
                    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("*------------(-1):登出\n");                            printf("*------------(-2):我的\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }

结构体:C++版本

#include <io.h>
            #include <iostream>
            #include <windows.h>
            using namespace std; 
        

        //定义 图书管管理员 结构体
    struct Admin {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
            };
    //定义全局 图书管管理员 数组
    struct Admin adminList [100];
    //定义全局 图书管管理员 数组栈指针
    int adminCount = 0;
        //定义 学生 结构体
    struct Student {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
                    char name[15] ; // 名称
                    char numb[18] ; // 编号
                    char tele[16] ; // 电话
                    char gender[8] ; // 性别
            };
    //定义全局 学生 数组
    struct Student studentList [100];
    //定义全局 学生 数组栈指针
    int studentCount = 0;
        //定义 座位 结构体
    struct Seat {
                    char numb[18] ; // 座位编号
            };
    //定义全局 座位 数组
    struct Seat seatList [100];
    //定义全局 座位 数组栈指针
    int seatCount = 0;
        //定义 预约位置 结构体
    struct Pre {
                    char student[15] ; // 学生
                    char seat[15] ; // 位置编号
            };
    //定义全局 预约位置 数组
    struct Pre preList [100];
    //定义全局 预约位置 数组栈指针
    int preCount = 0;
    
        //图书管管理员 读入文件
    void readAdmin ();
    //图书管管理员 写入文件
    void writeAdmin ();
    //图书管管理员 添加记录
    void addAdmin ();
        //图书管管理员 删除记录
    void delAdmin ();
    //图书管管理员 根据下标删除
    int delAdminByIndex (int index);
    //图书管管理员 修改记录
    void modAdmin ();
    //图书管管理员 查找记录
    void findAdmin (int all);
    //图书管管理员 排序
    void sortAdmin ();
    //交换
    void exchangeAdmin (int i ,int j);
    //存在判断函数
                                    int getOneAdmin (const char *name,char *s);
                                    void modAdminInfo ();
                //学生 读入文件
    void readStudent ();
    //学生 写入文件
    void writeStudent ();
    //学生 添加记录
    void addStudent ();
        //学生 删除记录
    void delStudent ();
    //学生 根据下标删除
    int delStudentByIndex (int index);
    //学生 修改记录
    void modStudent ();
    //学生 查找记录
    void findStudent (int all);
    //学生 排序
    void sortStudent ();
    //交换
    void exchangeStudent (int i ,int j);
    //存在判断函数
                                    int getOneStudent (const char *name,char *s);
                                    void modStudentInfo ();
                //座位 读入文件
    void readSeat ();
    //座位 写入文件
    void writeSeat ();
    //座位 添加记录
    void addSeat ();
        //座位 删除记录
    void delSeat ();
    //座位 根据下标删除
    int delSeatByIndex (int index);
    //座位 修改记录
    void modSeat ();
    //座位 查找记录
    void findSeat (int all);
    //座位 排序
    void sortSeat ();
    //交换
    void exchangeSeat (int i ,int j);
    //存在判断函数
                                    int getOneSeat (const char *name,char *s);
                                    //预约位置 读入文件
    void readPre ();
    //预约位置 写入文件
    void writePre ();
    //预约位置 添加记录
    void addPre ();
        //预约位置 删除记录
    void delPre ();
    //预约位置 根据下标删除
    int delPreByIndex (int index);
    //预约位置 修改记录
    void modPre ();
    //预约位置 查找记录
    void findPre (int all);
    //预约位置 排序
    void sortPre ();
    //交换
    void exchangePre (int i ,int j);
    //存在判断函数
                    
        //菜单
            void login();
        void regist();
                                                                    struct Admin loginAdmin;
                                    void menuAdmin ();
                                                                                    struct Student loginStudent;
                                    void menuStudent ();
                                                                                            int loginStatus = 0;//意义:0 未登录
    
    // 主函数
    int main(){
            //读取数据
                        readAdmin ();//读取图书管管理员
                            readStudent ();//读取学生
                            readSeat ();//读取座位
                            readPre ();//读取预约位置
                while(1){
                                         cout<<"*---------------------------------------------*\n*------------1:登陆\n*------------2:注册\n*---------------------------------------------*\n请输入选择:";
                    int logout=0; //返回上一级标志
                int select =0;
                            cin>>select;
                    if(select!=2){
                    login();
                }else{
                    regist();
                }
                        int choice;
                                                                        if(loginStatus == 1)
                                                                             while(logout==0){     menuAdmin ();
                cin>>choice;
        switch(choice){
                                                                            case 1 :
                            findAdmin (0);//查找图书管管理员
                break;
                            case 2 :
                            sortAdmin ();//排序图书管管理员
                break;
                                                            case 3 :
                            addStudent ();//添加学生
                break;
                                                    case 4 :
                            findStudent (1);//查找学生
                                delStudent ();//删除学生
                break;
                                                    case 5 :
                            findStudent (1);//查找学生
                                modStudent ();//修改学生
                break;
                                                    case 6 :
                            findStudent (0);//查找学生
                break;
                            case 7 :
                            sortStudent ();//排序学生
                break;
                                                            case 8 :
                            addSeat ();//添加座位
                break;
                                                    case 9 :
                            findSeat (1);//查找座位
                                delSeat ();//删除座位
                break;
                                                    case 10 :
                            findSeat (1);//查找座位
                                modSeat ();//修改座位
                break;
                                                    case 11 :
                            findSeat (0);//查找座位
                break;
                            case 12 :
                            sortSeat ();//排序座位
                break;
                                                            case 13 :
                            addPre ();//添加预约位置
                break;
                                                    case 14 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 15 :
                            findPre (0);//查找预约位置
                break;
                            case 16 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                    case -1:
                        cout<<"\n";
                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modAdminInfo ();//修改个人信息
                break;
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
    }                                                                                if(loginStatus == 2)
                                                                             while(logout==0){     menuStudent ();
                cin>>choice;
        switch(choice){
                                                                                                                                    case 1 :
                            findStudent (0);//查找学生
                break;
                            case 2 :
                            sortStudent ();//排序学生
                break;
                                                                                                case 3 :
                            findSeat (0);//查找座位
                break;
                            case 4 :
                            sortSeat ();//排序座位
                break;
                                                            case 5 :
                            addPre ();//添加预约位置
                break;
                                                    case 6 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 7 :
                            findPre (0);//查找预约位置
                break;
                            case 8 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                    case -1:
                        cout<<"\n";
                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modStudentInfo ();//修改个人信息
                break;
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
    }                                                                                                                                }
        return 0;
    }


			void login(){
		int i;
		while(loginStatus==0){
			char username[20],password[20];
                        cout<<"请输入账号:";
    			            cin>>username;
                            cout<<"请输入密码:";
                            cin>>password;
    			                                                // 图书管管理员 登录
            if(loginStatus==0){
                for(i=0;i < adminCount ;i++){
                    if(strcmp(adminList [i].username,username)==0 && strcmp( adminList [i].password,password)==0){
                        loginAdmin = adminList [i];
                        loginStatus = 1;
                        break;
                    }
                }
            }
                                            // 学生 登录
            if(loginStatus==0){
                for(i=0;i < studentCount ;i++){
                    if(strcmp(studentList [i].username,username)==0 && strcmp( studentList [i].password,password)==0){
                        loginStudent = studentList [i];
                        loginStatus = 2;
                        break;
                    }
                }
            }
                                                                			//判断登录情况
			if(loginStatus == 0){
				            cout<<"\n用户名密码错误请重新登录!\n\n";
    			} else{
				            cout<<"\n登录成功!\n\n";
    ;
			}
		}
	}
	void regist(){
		int flag = 0;//注册状态 0 失败 ,1 成功
		while(flag ==0){
			            cout<<"*---------------------------------------------*\n*------------0:返回 \n";
    			                                                cout<<"*------------1:注册图书管管理员 \n";
                    			                                                cout<<"*------------2:注册学生 \n";
                    			                			                			                        cout<<"*---------------------------------------------*\n请输入选择:";
    			int select = 0;
			            cin>>select;
    ;
			if(select == 0){
				flag = 1;//返回
			} else{
			char username[20],password[20];
                        cout<<"请输入账号:";
                            cin>>username;
    ;
                        cout<<"请输入密码:";
                            cin>>password;
    			                                                if( select == 1 ){ //注册图书管管理员
                if( getOneAdmin ("username",username)>=0) { //根据用户名查找用户是否存在
                                cout<<"\n用户名已存在!\n\n";
                    }else{ //不存在则成功注册并且填写剩余属性
                    strcpy( adminList [adminCount].username,username);
                    strcpy(adminList [adminCount].password,password);
                                                                                                                                                    loginAdmin = adminList [adminCount];
                    adminCount ++;
                    loginStatus = 1;
                    writeAdmin ();
                    flag = 1;
                }
            }
                                            if( select == 2 ){ //注册学生
                if( getOneStudent ("username",username)>=0) { //根据用户名查找用户是否存在
                                cout<<"\n用户名已存在!\n\n";
                    }else{ //不存在则成功注册并且填写剩余属性
                    strcpy( studentList [studentCount].username,username);
                    strcpy(studentList [studentCount].password,password);
                                                                                                                                                                                                                                 cout<<"请输入名称 :";
    ;
                                            cin>>studentList [ studentCount ] . name;
                                                                                                                                                                             cout<<"请输入编号 :";
    ;
                                            cin>>studentList [ studentCount ] . numb;
                                                                                                                                                                             cout<<"请输入电话 :";
    ;
                                            cin>>studentList [ studentCount ] . tele;
                                                                                                                                                                             cout<<"请输入性别 :";
    ;
                                            cin>>studentList [ studentCount ] . gender;
                                                                                                loginStudent = studentList [studentCount];
                    studentCount ++;
                    loginStatus = 2;
                    writeStudent ();
                    flag = 1;
                }
            }
                                                                			if(flag == 1)
                            cout<<"注册成功\n\n";
    			else
                            cout<<"注册失败!\n\n";
    			}
		}
	}
	
void modAdminInfo (){
	            cout<<"\n====您的个人信息如下====\n";
    			            cout<<"用户名:" << loginAdmin.username <<"\n";
    			            cout<<"密码:" << loginAdmin.password <<"\n";
    		            cout<<"==========================\n1,修改个人信息\n2,返回上一级\n请选择:";
    	int n,i;
	            cin>>n;
    	if (n == 1) {
		for( i = 0;i < adminCount ; i++){
			if(strcmp(adminList [i].username,loginAdmin .username)==0){
																				            cout<<"请输入密码 :";
    						            cin>>loginAdmin.password;
    								adminList [ i ] = loginAdmin;
				writeAdmin ();
				            cout<<"修改成功!\n";
    				break;
			}
		}
	}
}
//图书管管理员 是否存在判断
int getOneAdmin (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < adminCount ;i++){
							if( strcmp(name,"username")==0 && strcmp(s, adminList [i]. username )==0){
				res = i;
				break;
			}
									}
	return res;
}
//图书管管理员 读入文件
void readAdmin (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Admin.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s"
								 ,adminList[i].username  ,adminList[i].password 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	adminCount = i;
	fclose(fp);
}
	//图书管管理员 写入文件
void writeAdmin (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Admin.txt", "w+");
	for( i = 0;i< adminCount ;i++){
		fprintf(fp,"%s %s\n"
				 ,adminList[i].username  ,adminList[i].password );
	}
	fclose(fp);
}
	//图书管管理员 添加记录
void addAdmin (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    						 				            cout<<"请输入用户名 :";
    				char username[15]; 				            cin>>username;
    									strcpy(adminList [ adminCount ] . username,username);
								 				//检索Admin 不重复
				int getOneAdminusername = getOneAdmin ("username",adminList [ adminCount ] . username);
				if( getOneAdminusername >=0){//检索不为空
					            cout<<"用户名已存在!\n";
    				break;
				}
																							 				            cout<<"请输入密码 :";
    				char password[15]; 				            cin>>password;
    									strcpy(adminList [ adminCount ] . password,password);
																								//adminCount 是全局变量
		adminCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writeAdmin ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//图书管管理员 删除
void delAdmin (){
	            cout<<"请输入您要删除的 图书管管理员 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delAdminByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writeAdmin ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//图书管管理员 根据下标删除
int delAdminByIndex (int index){
	if(index >= adminCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < adminCount - 1 ; i++){
		//元素全部往前移一位。
		adminList [i] = adminList [i+1];
	}
	//最后令栈的长度减一
	adminCount = adminCount - 1;
	return 1;
}
	//图书管管理员 修改
void modAdmin (){
	            cout<<"请输入您要修改的图书管管理员 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < adminCount ){
		//开始修改
										 									            cout<<"请输入密码 :";
    					char password[15];
					            cin>>password;
    
																															//输入完毕,赋值
										 									strcpy(adminList [ indexOfMod ] . password,password);
											            cout<<"修改成功!\n";
    		writeAdmin ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//图书管管理员 查找 如果all=1:查询全部 否则按条件查询
void findAdmin (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-15s\n\n","序号" ,"用户名","密码" );
		if( adminList ){
			//用于统计信息所用
			int count = 0,i;
																				for (i = 0;i <  adminCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(adminList [i]. username,conCharArr) //根据用户名,模糊查询
																																	){
															printf("%-5d%-15s%-15s \n\n",i
																			,adminList [i] . username
													,adminList [i] . password
											);
					//用于统计信息所用
																																count++;
				}else{
					delAdminByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																							            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 用户名 筛选\n";
    												            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readAdmin();//从新读取数据。
}
	//图书管管理员 排序
void sortAdmin (){
	int select,i,j;
			            cout<<"1:按 用户名 排序\n";
    			            cout<<"2:按 密码 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = adminCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(adminList [j]. username , adminList [j+1]. username)>0
															|| select == 2 && strcmp(adminList [j]. password , adminList [j+1]. password)>0
										){
				exchangeAdmin (j,j+1);
			}
		}
	}
	findAdmin (1);
	writeAdmin ();
}
//图书管管理员 交换
void exchangeAdmin (int i,int j){
	struct Admin admin = adminList [i];
	adminList [i] = adminList  [j];
	adminList [j] = admin ;
}
void modStudentInfo (){
	            cout<<"\n====您的个人信息如下====\n";
    			            cout<<"用户名:" << loginStudent.username <<"\n";
    			            cout<<"密码:" << loginStudent.password <<"\n";
    			            cout<<"名称:" << loginStudent.name <<"\n";
    			            cout<<"编号:" << loginStudent.numb <<"\n";
    			            cout<<"电话:" << loginStudent.tele <<"\n";
    			            cout<<"性别:" << loginStudent.gender <<"\n";
    		            cout<<"==========================\n1,修改个人信息\n2,返回上一级\n请选择:";
    	int n,i;
	            cin>>n;
    	if (n == 1) {
		for( i = 0;i < studentCount ; i++){
			if(strcmp(studentList [i].username,loginStudent .username)==0){
																				            cout<<"请输入密码 :";
    						            cin>>loginStudent.password;
    															            cout<<"请输入名称 :";
    						            cin>>loginStudent.name;
    															            cout<<"请输入编号 :";
    						            cin>>loginStudent.numb;
    															            cout<<"请输入电话 :";
    						            cin>>loginStudent.tele;
    															            cout<<"请输入性别 :";
    						            cin>>loginStudent.gender;
    								studentList [ i ] = loginStudent;
				writeStudent ();
				            cout<<"修改成功!\n";
    				break;
			}
		}
	}
}
//学生 是否存在判断
int getOneStudent (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < studentCount ;i++){
							if( strcmp(name,"username")==0 && strcmp(s, studentList [i]. username )==0){
				res = i;
				break;
			}
													if( strcmp(name,"name")==0 && strcmp(s, studentList [i]. name )==0){
				res = i;
				break;
			}
									if( strcmp(name,"numb")==0 && strcmp(s, studentList [i]. numb )==0){
				res = i;
				break;
			}
													}
	return res;
}
//学生 读入文件
void readStudent (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Student.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s%s%s%s%s"
								 ,studentList[i].username  ,studentList[i].password  ,studentList[i].name  ,studentList[i].numb  ,studentList[i].tele  ,studentList[i].gender 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	studentCount = i;
	fclose(fp);
}
	//学生 写入文件
void writeStudent (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Student.txt", "w+");
	for( i = 0;i< studentCount ;i++){
		fprintf(fp,"%s %s %s %s %s %s\n"
				 ,studentList[i].username  ,studentList[i].password  ,studentList[i].name  ,studentList[i].numb  ,studentList[i].tele  ,studentList[i].gender );
	}
	fclose(fp);
}
	//学生 添加记录
void addStudent (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    						 				            cout<<"请输入用户名 :";
    				char username[15]; 				            cin>>username;
    									strcpy(studentList [ studentCount ] . username,username);
								 				//检索Student 不重复
				int getOneStudentusername = getOneStudent ("username",studentList [ studentCount ] . username);
				if( getOneStudentusername >=0){//检索不为空
					            cout<<"用户名已存在!\n";
    				break;
				}
																							 				            cout<<"请输入密码 :";
    				char password[15]; 				            cin>>password;
    									strcpy(studentList [ studentCount ] . password,password);
																											 				            cout<<"请输入名称 :";
    				char name[15]; 				            cin>>name;
    									strcpy(studentList [ studentCount ] . name,name);
								 				//检索Student 不重复
				int getOneStudentname = getOneStudent ("name",studentList [ studentCount ] . name);
				if( getOneStudentname >=0){//检索不为空
					            cout<<"名称已存在!\n";
    				break;
				}
																							 				            cout<<"请输入编号 :";
    				char numb[18]; 				            cin>>numb;
    									strcpy(studentList [ studentCount ] . numb,numb);
								 				//检索Student 不重复
				int getOneStudentnumb = getOneStudent ("numb",studentList [ studentCount ] . numb);
				if( getOneStudentnumb >=0){//检索不为空
					            cout<<"编号已存在!\n";
    				break;
				}
																							 				            cout<<"请输入电话 :";
    				char tele[16]; 				            cin>>tele;
    									strcpy(studentList [ studentCount ] . tele,tele);
																											 				            cout<<"请输入性别 :";
    				char gender[8]; 				            cin>>gender;
    									strcpy(studentList [ studentCount ] . gender,gender);
																								//studentCount 是全局变量
		studentCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writeStudent ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//学生 删除
void delStudent (){
	            cout<<"请输入您要删除的 学生 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delStudentByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writeStudent ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//学生 根据下标删除
int delStudentByIndex (int index){
	if(index >= studentCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < studentCount - 1 ; i++){
		//元素全部往前移一位。
		studentList [i] = studentList [i+1];
	}
	//最后令栈的长度减一
	studentCount = studentCount - 1;
	return 1;
}
	//学生 修改
void modStudent (){
	            cout<<"请输入您要修改的学生 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < studentCount ){
		//开始修改
										 									            cout<<"请输入密码 :";
    					char password[15];
					            cin>>password;
    
																																 									            cout<<"请输入名称 :";
    					char name[15];
					            cin>>name;
    
															if(strcmp(studentList [indexOfMod] . name,name) != 0 && getOneStudent ("name",name)>=0){//检索不为空
						            cout<<"名称 已存在!\n";
    						return;
					}
																																 									            cout<<"请输入电话 :";
    					char tele[16];
					            cin>>tele;
    
																																 									            cout<<"请输入性别 :";
    					char gender[8];
					            cin>>gender;
    
																															//输入完毕,赋值
										 									strcpy(studentList [ indexOfMod ] . password,password);
												 									strcpy(studentList [ indexOfMod ] . name,name);
																	 									strcpy(studentList [ indexOfMod ] . tele,tele);
												 									strcpy(studentList [ indexOfMod ] . gender,gender);
											            cout<<"修改成功!\n";
    		writeStudent ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//学生 查找 如果all=1:查询全部 否则按条件查询
void findStudent (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-15s%-15s%-18s%-16s%-8s\n\n","序号" ,"用户名","密码","名称","编号","电话","性别" );
		if( studentList ){
			//用于统计信息所用
			int count = 0,i;
																																																for (i = 0;i <  studentCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(studentList [i]. username,conCharArr) //根据用户名,模糊查询
																																																	|| select == 2 && strstr(studentList [i]. name,conCharArr) //根据名称,模糊查询
																																						|| select == 3 && strstr(studentList [i]. numb,conCharArr) //根据编号,模糊查询
																																																	|| select == 4 && strstr(studentList [i]. gender,conCharArr) //根据性别,模糊查询
																						){
															printf("%-5d%-15s%-15s%-15s%-18s%-16s%-8s \n\n",i
																			,studentList [i] . username
													,studentList [i] . password
													,studentList [i] . name
													,studentList [i] . numb
													,studentList [i] . tele
													,studentList [i] . gender
											);
					//用于统计信息所用
																																																																												count++;
				}else{
					delStudentByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																																																			            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 用户名 筛选\n";
    																	            cout<<"2:按 名称 筛选\n";
    												            cout<<"3:按 编号 筛选\n";
    																	            cout<<"4:按 性别 筛选\n";
    							            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ||select==2 ||select==3 ||select==4 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readStudent();//从新读取数据。
}
	//学生 排序
void sortStudent (){
	int select,i,j;
			            cout<<"1:按 用户名 排序\n";
    			            cout<<"2:按 密码 排序\n";
    			            cout<<"3:按 名称 排序\n";
    			            cout<<"4:按 编号 排序\n";
    			            cout<<"5:按 电话 排序\n";
    			            cout<<"6:按 性别 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = studentCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(studentList [j]. username , studentList [j+1]. username)>0
															|| select == 2 && strcmp(studentList [j]. password , studentList [j+1]. password)>0
															|| select == 3 && strcmp(studentList [j]. name , studentList [j+1]. name)>0
															|| select == 4 && strcmp(studentList [j]. numb , studentList [j+1]. numb)>0
															|| select == 5 && strcmp(studentList [j]. tele , studentList [j+1]. tele)>0
															|| select == 6 && strcmp(studentList [j]. gender , studentList [j+1]. gender)>0
										){
				exchangeStudent (j,j+1);
			}
		}
	}
	findStudent (1);
	writeStudent ();
}
//学生 交换
void exchangeStudent (int i,int j){
	struct Student student = studentList [i];
	studentList [i] = studentList  [j];
	studentList [j] = student ;
}
//座位 是否存在判断
int getOneSeat (const char *name,char *s){
	int res = -1,i;
	for( i = 0;i < seatCount ;i++){
							if( strcmp(name,"numb")==0 && strcmp(s, seatList [i]. numb )==0){
				res = i;
				break;
			}
					}
	return res;
}
//座位 读入文件
void readSeat (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Seat.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s"
								 ,seatList[i].numb 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	seatCount = i;
	fclose(fp);
}
	//座位 写入文件
void writeSeat (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Seat.txt", "w+");
	for( i = 0;i< seatCount ;i++){
		fprintf(fp,"%s\n"
				 ,seatList[i].numb );
	}
	fclose(fp);
}
	//座位 添加记录
void addSeat (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    						 				            cout<<"请输入座位编号 :";
    				char numb[18]; 				            cin>>numb;
    									strcpy(seatList [ seatCount ] . numb,numb);
								 				//检索Seat 不重复
				int getOneSeatnumb = getOneSeat ("numb",seatList [ seatCount ] . numb);
				if( getOneSeatnumb >=0){//检索不为空
					            cout<<"座位编号已存在!\n";
    				break;
				}
																				//seatCount 是全局变量
		seatCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writeSeat ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//座位 删除
void delSeat (){
	            cout<<"请输入您要删除的 座位 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delSeatByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writeSeat ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//座位 根据下标删除
int delSeatByIndex (int index){
	if(index >= seatCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < seatCount - 1 ; i++){
		//元素全部往前移一位。
		seatList [i] = seatList [i+1];
	}
	//最后令栈的长度减一
	seatCount = seatCount - 1;
	return 1;
}
	//座位 修改
void modSeat (){
	            cout<<"请输入您要修改的座位 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < seatCount ){
		//开始修改
									//输入完毕,赋值
									            cout<<"修改成功!\n";
    		writeSeat ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//座位 查找 如果all=1:查询全部 否则按条件查询
void findSeat (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-18s\n\n","序号" ,"座位编号" );
		if( seatList ){
			//用于统计信息所用
			int count = 0,i;
													for (i = 0;i <  seatCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(seatList [i]. numb,conCharArr) //根据座位编号,模糊查询
																						){
															printf("%-5d%-18s \n\n",i
																			,seatList [i] . numb
											);
					//用于统计信息所用
																					count++;
				}else{
					delSeatByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 座位编号 筛选\n";
    							            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readSeat();//从新读取数据。
}
	//座位 排序
void sortSeat (){
	int select,i,j;
			            cout<<"1:按 座位编号 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = seatCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(seatList [j]. numb , seatList [j+1]. numb)>0
										){
				exchangeSeat (j,j+1);
			}
		}
	}
	findSeat (1);
	writeSeat ();
}
//座位 交换
void exchangeSeat (int i,int j){
	struct Seat seat = seatList [i];
	seatList [i] = seatList  [j];
	seatList [j] = seat ;
}
//预约位置 读入文件
void readPre (){
	FILE *fp = NULL;
	if (NULL == (fp = fopen("Pre.txt", "r")))//读打开
	{
		return;
	}
	int i=0;
	//从文件读取数据
	while (fscanf(fp, "%s%s"
								 ,preList[i].student  ,preList[i].seat 
	) != EOF)//读取
	{
		i++;
	}
	//记录总数
	preCount = i;
	fclose(fp);
}
	//预约位置 写入文件
void writePre (){
	FILE *fp = NULL;
	int i;
	fp = fopen("Pre.txt", "w+");
	for( i = 0;i< preCount ;i++){
		fprintf(fp,"%s %s\n"
				 ,preList[i].student  ,preList[i].seat );
	}
	fclose(fp);
}
	//预约位置 添加记录
void addPre (){
	char selectYNFlag = 'y';
	while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
	            cout<<"\n";
    					if(loginStatus==2){
			strcpy(preList [ preCount ] . student,loginStudent .name);
		}else{
					 				            cout<<"请输入学生 :";
    				char student[15]; 				            cin>>student;
    									strcpy(preList [ preCount ] . student,student);
																				//检索Pre 是否存在
				int getOneStudentFrn =getOneStudent ("name",preList [ preCount ] . student);
				if(getOneStudentFrn ==-1){//检索不为空
					            cout<<"学生不存在!\n";
    				break;
				}
											}								 				            cout<<"请输入位置编号 :";
    				char seat[15]; 				            cin>>seat;
    									strcpy(preList [ preCount ] . seat,seat);
																				//检索Pre 是否存在
				int getOneSeatFrn =getOneSeat ("numb",preList [ preCount ] . seat);
				if(getOneSeatFrn ==-1){//检索不为空
					            cout<<"位置编号不存在!\n";
    				break;
				}
												//preCount 是全局变量
		preCount ++;
		            cout<<"\n是否继续录入?(y/n)";
    		getchar();
		            cin>>selectYNFlag;
    	}
	writePre ( );
	            cout<<"\n*****************************\n";
    	            cout<<"录入完成\n";
    	            cout<<"*****************************\n";
    }
	//预约位置 删除
void delPre (){
	            cout<<"请输入您要删除的 预约位置 序号(输入-1退出):";
    	int index;
	            cin>>index;
    
	if(index >= 0){
		int res = delPreByIndex (index);
		if(res){
			            cout<<"删除成功!\n\n";
    			writePre ();
		}else{
			            cout<<"删除失败!\n\n";
    		}
	}

}
	//预约位置 根据下标删除
int delPreByIndex (int index){
	if(index >= preCount || index < 0){
		return 0;
	}
	//开始删除!
	int i;
	for(i = index; i < preCount - 1 ; i++){
		//元素全部往前移一位。
		preList [i] = preList [i+1];
	}
	//最后令栈的长度减一
	preCount = preCount - 1;
	return 1;
}
	//预约位置 修改
void modPre (){
	            cout<<"请输入您要修改的预约位置 序号(输入-1退出):";
    	int indexOfMod = -1;
	            cin>>indexOfMod;
    	if(indexOfMod >= 0 && indexOfMod < preCount ){
		//开始修改
					 								if(loginStatus==2){
					strcpy(preList [ preCount ] . student,loginStudent.name);
				}else{
									            cout<<"请输入学生 :";
    					char student[15];
					            cin>>student;
    
																									if(getOneStudent ("name",student)==-1){//检索不为空
						            cout<<"学生 不存在!\n";
    						return;
					}
													}												 									            cout<<"请输入位置编号 :";
    					char seat[15];
					            cin>>seat;
    
																									if(getOneSeat ("numb",seat)==-1){//检索不为空
						            cout<<"位置编号 不存在!\n";
    						return;
					}
																//输入完毕,赋值
										 									strcpy(preList [ indexOfMod ] . seat,seat);
											            cout<<"修改成功!\n";
    		writePre ();
	}else{
		            cout<<"输入错误!\n";
    	}

}
//预约位置 查找 如果all=1:查询全部 否则按条件查询
void findPre (int all){
	int select = 0;
	char conCharArr[40];
	double conNum1,conNum2;
	while(1){
		printf("\n%-5s%-15s%-15s\n\n","序号" ,"学生","位置编号" );
		if( preList ){
			//用于统计信息所用
			int count = 0,i;
																				for (i = 0;i <  preCount ; i++)
			{
				if(select == 0
																														|| select == 1 && strstr(preList [i]. student,conCharArr) //根据学生,模糊查询
																																						|| select == 2 && strstr(preList [i]. seat,conCharArr) //根据位置编号,模糊查询
																						){
					 					if(0
												//学生 只能查看和自己相关的预约位置
						|| loginStatus == 2 && strcmp(preList [i] . student,loginStudent . name)!=0
											){
						delPreByIndex(i--);//删掉
						continue;
					}
															printf("%-5d%-15s%-15s \n\n",i
																			,preList [i] . student
													,preList [i] . seat
											);
					//用于统计信息所用
																																count++;
				}else{
					delPreByIndex(i--);//删掉
				}
			}
			            cout<<"共" << count <<"条结果\n";
    			            cout<<"-----------------------------------------------------------------------------------------------------\n";
    																							            cout<<"\n";
    		}else{
			            cout<<"\n【无记录!】\n\n";
    		}
		//如果参数all为1,则表示列出所有就退出
		if(all == 1)break;
		//进入过滤。
		            cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
    		            cout<<"0:退出\n";
    									            cout<<"1:按 学生 筛选\n";
    												            cout<<"2:按 位置编号 筛选\n";
    							            cout<<"请输入选择:";
    		            cin>>select;
    		if(select>0){
			if(0  ||select==1 ||select==2 ){
				            cout<<"请输入筛选条件:";
    				            cin>>conCharArr;
    			}else if(0 ){
				            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
    				            cin>>conNum1;
                cin>>conNum2;
    			}
		}else{
			break;
		}
	}
	readPre();//从新读取数据。
}
	//预约位置 排序
void sortPre (){
	int select,i,j;
			            cout<<"1:按 学生 排序\n";
    			            cout<<"2:按 位置编号 排序\n";
    		            cout<<"请输入选择:";
    	            cin>>select;
    	for( i = preCount -1;i>0;i--){
		for( j = 0;j < i;j++){
			if(	0
											|| select == 1 && strcmp(preList [j]. student , preList [j+1]. student)>0
															|| select == 2 && strcmp(preList [j]. seat , preList [j+1]. seat)>0
										){
				exchangePre (j,j+1);
			}
		}
	}
	findPre (1);
	writePre ();
}
//预约位置 交换
void exchangePre (int i,int j){
	struct Pre pre = preList [i];
	preList [i] = preList  [j];
	preList [j] = pre ;
}

                                                        void menuAdmin (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                                                        cout<<"*-------------1 :查找图书管管理员\n";
                                cout<<"*-------------2 :排序图书管管理员\n";
                                                                cout<<"*-------------3 :添加学生\n";
                                                        cout<<"*-------------4 :删除学生\n";
                                                        cout<<"*-------------5 :修改学生\n";
                                                        cout<<"*-------------6 :查找学生\n";
                                cout<<"*-------------7 :排序学生\n";
                                                                cout<<"*-------------8 :添加座位\n";
                                                        cout<<"*-------------9 :删除座位\n";
                                                        cout<<"*-------------10 :修改座位\n";
                                                        cout<<"*-------------11 :查找座位\n";
                                cout<<"*-------------12 :排序座位\n";
                                                                cout<<"*-------------13 :添加预约位置\n";
                                                        cout<<"*-------------14 :删除预约位置\n";
                                                                    cout<<"*-------------15 :查找预约位置\n";
                                cout<<"*-------------16 :排序预约位置\n";
                                            cout<<"*-------------0:退出\n";
                                    cout<<"*------------(-1):登出\n";
                            cout<<"*------------(-2):我的\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }
                                                                void menuStudent (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                                                                                                                cout<<"*-------------1 :查找学生\n";
                                cout<<"*-------------2 :排序学生\n";
                                                                                                    cout<<"*-------------3 :查找座位\n";
                                cout<<"*-------------4 :排序座位\n";
                                                                cout<<"*-------------5 :添加预约位置\n";
                                                        cout<<"*-------------6 :删除预约位置\n";
                                                                    cout<<"*-------------7 :查找预约位置\n";
                                cout<<"*-------------8 :排序预约位置\n";
                                            cout<<"*-------------0:退出\n";
                                    cout<<"*------------(-1):登出\n";
                            cout<<"*------------(-2):我的\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }

链表:C版本

#include <stdio.h>
            #include <windows.h> 
        

        //定义 图书管管理员 链表
    struct Admin {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
                struct Admin* next;//链式存储
    };
    struct  Admin *adminList;//定义全局 图书管管理员 指针
    int adminCount = 0;//图书管管理员 个数记录
        //定义 学生 链表
    struct Student {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
                    char name[15] ; // 名称
                    char numb[18] ; // 编号
                    char tele[16] ; // 电话
                    char gender[8] ; // 性别
                struct Student* next;//链式存储
    };
    struct  Student *studentList;//定义全局 学生 指针
    int studentCount = 0;//学生 个数记录
        //定义 座位 链表
    struct Seat {
                    char numb[18] ; // 座位编号
                struct Seat* next;//链式存储
    };
    struct  Seat *seatList;//定义全局 座位 指针
    int seatCount = 0;//座位 个数记录
        //定义 预约位置 链表
    struct Pre {
                    char student[15] ; // 学生
                    char seat[15] ; // 位置编号
                struct Pre* next;//链式存储
    };
    struct  Pre *preList;//定义全局 预约位置 指针
    int preCount = 0;//预约位置 个数记录
    
        //图书管管理员 读入文件
    void readAdmin ();
    //图书管管理员 写入文件
    void writeAdmin ();
    //图书管管理员 添加记录
    void addAdmin ();
        void addOneAdmin (struct Admin *admin);
        //图书管管理员 删除记录
    void delAdmin ();
    //图书管管理员 根据下标删除
    int delAdminByIndex (int index);
    //图书管管理员 修改记录
    void modAdmin ();
    //图书管管理员 查找记录
    void findAdmin (int all);
    //图书管管理员 排序
    void sortAdmin ();
    //交换
    void exchangeAdmin (int i ,int j);
    //存在判断函数
                                    struct Admin* getOneAdmin (const char *name,char *s);
                                    void modAdminInfo ();
                //学生 读入文件
    void readStudent ();
    //学生 写入文件
    void writeStudent ();
    //学生 添加记录
    void addStudent ();
        void addOneStudent (struct Student *student);
        //学生 删除记录
    void delStudent ();
    //学生 根据下标删除
    int delStudentByIndex (int index);
    //学生 修改记录
    void modStudent ();
    //学生 查找记录
    void findStudent (int all);
    //学生 排序
    void sortStudent ();
    //交换
    void exchangeStudent (int i ,int j);
    //存在判断函数
                                    struct Student* getOneStudent (const char *name,char *s);
                                    void modStudentInfo ();
                //座位 读入文件
    void readSeat ();
    //座位 写入文件
    void writeSeat ();
    //座位 添加记录
    void addSeat ();
        void addOneSeat (struct Seat *seat);
        //座位 删除记录
    void delSeat ();
    //座位 根据下标删除
    int delSeatByIndex (int index);
    //座位 修改记录
    void modSeat ();
    //座位 查找记录
    void findSeat (int all);
    //座位 排序
    void sortSeat ();
    //交换
    void exchangeSeat (int i ,int j);
    //存在判断函数
                                    struct Seat* getOneSeat (const char *name,char *s);
                                    //预约位置 读入文件
    void readPre ();
    //预约位置 写入文件
    void writePre ();
    //预约位置 添加记录
    void addPre ();
        void addOnePre (struct Pre *pre);
        //预约位置 删除记录
    void delPre ();
    //预约位置 根据下标删除
    int delPreByIndex (int index);
    //预约位置 修改记录
    void modPre ();
    //预约位置 查找记录
    void findPre (int all);
    //预约位置 排序
    void sortPre ();
    //交换
    void exchangePre (int i ,int j);
    //存在判断函数
                    
        //菜单
            void login();
        void regist();
                                                                    struct Admin *loginAdmin = NULL;
                                    void menuAdmin ();
                                                                                    struct Student *loginStudent = NULL;
                                    void menuStudent ();
                                                                                            int loginStatus = 0;//意义:0 未登录
    
    // 主函数
    int main(){
            //读取数据
                        readAdmin ();//读取图书管管理员
                            readStudent ();//读取学生
                            readSeat ();//读取座位
                            readPre ();//读取预约位置
                while(1){
                                         printf("*---------------------------------------------*\n*------------1:登陆\n*------------2:注册\n*---------------------------------------------*\n请输入选择:");                    int logout=0; //返回上一级标志
                int select =0;
                            scanf("%d",&select);
                    if(select!=2){
                    login();
                }else{
                    regist();
                }
                        int choice;
                                                                        if(loginStatus == 1)
                                                                             while(logout==0){     menuAdmin ();
                scanf("%d",&choice);
        switch(choice){
                                                                            case 1 :
                            findAdmin (0);//查找图书管管理员
                break;
                            case 2 :
                            sortAdmin ();//排序图书管管理员
                break;
                                                            case 3 :
                            addStudent ();//添加学生
                break;
                                                    case 4 :
                            findStudent (1);//查找学生
                                delStudent ();//删除学生
                break;
                                                    case 5 :
                            findStudent (1);//查找学生
                                modStudent ();//修改学生
                break;
                                                    case 6 :
                            findStudent (0);//查找学生
                break;
                            case 7 :
                            sortStudent ();//排序学生
                break;
                                                            case 8 :
                            addSeat ();//添加座位
                break;
                                                    case 9 :
                            findSeat (1);//查找座位
                                delSeat ();//删除座位
                break;
                                                    case 10 :
                            findSeat (1);//查找座位
                                modSeat ();//修改座位
                break;
                                                    case 11 :
                            findSeat (0);//查找座位
                break;
                            case 12 :
                            sortSeat ();//排序座位
                break;
                                                            case 13 :
                            addPre ();//添加预约位置
                break;
                                                    case 14 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 15 :
                            findPre (0);//查找预约位置
                break;
                            case 16 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                    case -1:
                        printf("\n");                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modAdminInfo ();//修改个人信息
                break;
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
    }                                                                                if(loginStatus == 2)
                                                                             while(logout==0){     menuStudent ();
                scanf("%d",&choice);
        switch(choice){
                                                                                                                                    case 1 :
                            findStudent (0);//查找学生
                break;
                            case 2 :
                            sortStudent ();//排序学生
                break;
                                                                                                case 3 :
                            findSeat (0);//查找座位
                break;
                            case 4 :
                            sortSeat ();//排序座位
                break;
                                                            case 5 :
                            addPre ();//添加预约位置
                break;
                                                    case 6 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 7 :
                            findPre (0);//查找预约位置
                break;
                            case 8 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    printf("\n\n\n\t\t\t感谢使用\n\n\n");            exit(0);
                    case -1:
                        printf("\n");                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modStudentInfo ();//修改个人信息
                break;
                default :
        getchar();
                    printf("\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n");            system("pause");
        break;
    }
    }                                                                                                                                }
        return 0;
    }


			void login(){
		int i;
		while(loginStatus==0){
			char username[20],password[20];
                        printf("请输入账号:");    			            scanf("%s",username);
                            printf("请输入密码:");                            scanf("%s",password);
    			                                                // 图书管管理员 登录
            if(loginStatus==0){
                struct Admin *admin = adminList;
                while(admin){
                    if(strcmp(username,admin ->username)==0){
                        if(strcmp(password,admin ->password)==0){
                            loginAdmin = admin;
                            loginStatus = 1;
                            break;
                        }
                    }
                    admin = admin ->next;
                }
            }
                                            // 学生 登录
            if(loginStatus==0){
                struct Student *student = studentList;
                while(student){
                    if(strcmp(username,student ->username)==0){
                        if(strcmp(password,student ->password)==0){
                            loginStudent = student;
                            loginStatus = 2;
                            break;
                        }
                    }
                    student = student ->next;
                }
            }
                                                                			//判断登录情况
			if(loginStatus == 0){
				            printf("\n用户名密码错误请重新登录!\n\n");    			} else{
				            printf("\n登录成功!\n\n");    ;
			}
		}
	}
	void regist(){
		int flag = 0;//注册状态 0 失败 ,1 成功
		while(flag ==0){
			            printf("*---------------------------------------------*\n*------------0:返回 \n");    			                                                printf("*------------1:注册图书管管理员 \n");                    			                                                printf("*------------2:注册学生 \n");                    			                			                			                        printf("*---------------------------------------------*\n请输入选择:");    			int select = 0;
			            scanf("%d",&select);
    ;
			if(select == 0){
				flag = 1;//返回
			} else{
			char username[20],password[20];
                        printf("请输入账号:");                            scanf("%s",username);
    ;
                        printf("请输入密码:");                            scanf("%s",password);
    			                                                if( select == 1 ){
                if( getOneAdmin ("username",username)!=NULL) { //根据用户名查找
                                printf("\n用户名已存在!\n\n");                    }else{
                    struct Admin *admin =  (struct Admin*)malloc(sizeof(struct Admin));
                    strcpy( admin ->username,username);
                    strcpy( admin ->password,password);
                    admin ->next = NULL;
                                                                                                                                                    loginAdmin = admin;
                    addOneAdmin (admin);
                    loginStatus = 1;
                    writeAdmin ();
                    flag = 1;
                }
            }
                                            if( select == 2 ){
                if( getOneStudent ("username",username)!=NULL) { //根据用户名查找
                                printf("\n用户名已存在!\n\n");                    }else{
                    struct Student *student =  (struct Student*)malloc(sizeof(struct Student));
                    strcpy( student ->username,username);
                    strcpy( student ->password,password);
                    student ->next = NULL;
                                                                                                                                                                                                                                 printf("请输入名称 :");    ;
                                            scanf("%s",student ->name);
                                                                                                                                                                             printf("请输入编号 :");    ;
                                            scanf("%s",student ->numb);
                                                                                                                                                                             printf("请输入电话 :");    ;
                                            scanf("%s",student ->tele);
                                                                                                                                                                             printf("请输入性别 :");    ;
                                            scanf("%s",student ->gender);
                                                                                                loginStudent = student;
                    addOneStudent (student);
                    loginStatus = 2;
                    writeStudent ();
                    flag = 1;
                }
            }
                                                                			if(flag == 1)
                            printf("注册成功\n\n");    			else
                            printf("注册失败!\n\n");    			}
		}
	}
	
void modAdminInfo (){
                printf("\n====您的个人信息如下====\n");    	                    printf("用户名:%s\n",loginAdmin ->username);    	                    printf("密码:%s\n",loginAdmin ->password);    	                printf("==========================\n1,修改个人信息\n2,返回上一级\n请选择:");    	int n;
                scanf("%d",&n);
    	if (n == 1) {
        struct Admin *h = adminList;
        while(h){
			if(strcmp(h->username,loginAdmin ->username)==0){
														                                    printf("请输入密码 :");                                        scanf("%s",h->password);
    				                loginAdmin = h;
				writeAdmin ();
                            printf("修改成功!\n");    				break;
			}
            h=h->next;
		}
	}
}
            //是否存在判断
        struct Admin *getOneAdmin (const char *name,char *s){
            struct Admin *head = adminList;
            while(head){
                                                        if( strcmp(name,"username")==0 && strcmp(s, head->username )==0){
                        return head;
                    }
                                                                                        head = head->next;
            }
            return NULL;
        }
    //图书管管理员 读入文件
void readAdmin (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Admin.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    adminList = NULL;
    struct Admin *tail = adminList;
    while (1)//读取
    {
        //给节点分配空间
        struct Admin *p=(struct Admin*)malloc(sizeof(struct Admin));
        //读取数据到p
        if(fscanf(fp, "%s%s"
             ,p->username  ,p->password 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (adminList  == NULL)
        {
            adminList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    adminCount = i;
    fclose(fp);
}
//图书管管理员 写入文件
void writeAdmin (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Admin.txt", "w+");
    //定义指针
    struct Admin *p = adminList;
    //写入
    while(p){
        fprintf(fp,"%s %s\n"
             ,p->username  ,p->password );
        p=p->next;
    }
    fclose(fp);
}
//图书管管理员 添加记录
void addAdmin (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Admin *tempValue = (struct Admin*)malloc(sizeof(struct Admin)); //必须重新分配地址空间。
                                                                     printf("请输入用户名 :");                        char username[15];                                 scanf("%s",username);
                                                strcpy(tempValue->username,username);
                                                                 struct Admin* oneusername = getOneAdmin ("username",tempValue->username);
                        if(oneusername !=NULL){//检索不为空
                                        printf("用户名已存在!\n");                            break;
                        }
                                                                                                                                                             printf("请输入密码 :");                        char password[15];                                 scanf("%s",password);
                                                strcpy(tempValue->password,password);
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneAdmin (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writeAdmin ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOneAdmin (struct Admin *temp){
    //采用头插法
    if(adminList == NULL){
        adminList = temp;
    }else{
        temp->next = adminList;
        adminList = temp;
    }
    adminCount ++;
}
//图书管管理员 删除
void delAdmin (){
                printf("请输入您要删除的 图书管管理员 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delAdminByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writeAdmin ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//图书管管理员 根据下标删除
int delAdminByIndex (int index){
    if(index > adminCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Admin *p = (struct Admin*)malloc(sizeof(struct Admin));
    struct Admin *q = adminList;
    p->next = adminList;
    if(index == 1){
        adminList = adminList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    adminCount = adminCount - 1;
    return 1;
}
//图书管管理员 修改
void modAdmin (){
                printf("请输入您要修改的图书管管理员 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= adminCount ){
        //开始修改
        struct Admin *temp = adminList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                                         printf("请输入密码 :");                        char password[15];
                                scanf("%s",password);
    
                                                                                                                            //输入完毕,赋值
                                                                         strcpy(temp-> password,password);
                                                        printf("修改成功!\n");            writeAdmin ();
    }else{
                    printf("输入错误!\n");        }
}
//图书管管理员 查找 如果all=1:查询全部 否则按条件查询
void findAdmin (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-15s\n\n","序号" ,"用户名","密码" );
        int i=1,count = 0;
        if( adminList ){
            //用于统计信息所用
                                                                                struct Admin *t = adminList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->username,conCharArr) //根据用户名,模糊查询
                                                                                                                                    ){
                                                            printf("%-5d%-15s%-15s \n\n",i
                                                                    ,t->username
                                                ,t->password
                                            );
                    //用于统计信息所用
                                                                                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delAdminByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                                            printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 用户名 筛选\n");                                                                printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readAdmin();//从新读取数据。
}
//图书管管理员 排序
void sortAdmin (){
    int select,i,j;
                        printf("1:按 用户名 排序\n");                            printf("2:按 密码 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Admin *list[100];
    for(i = 0;i< adminCount;i++){
        list[i] = adminList;
        adminList = adminList ->next;
    }
    for( i = adminCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->username , list[j+1]->username)>0
                                                                || select == 2 && strcmp(list[j]->password , list[j+1]->password)>0
                                            ){
                struct Admin *temp = (struct Admin*)malloc(sizeof(struct Admin));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< adminCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ adminCount -1 ]->next = NULL;
    adminList = list[0];
    findAdmin (1);
    writeAdmin ();
}
void modStudentInfo (){
                printf("\n====您的个人信息如下====\n");    	                    printf("用户名:%s\n",loginStudent ->username);    	                    printf("密码:%s\n",loginStudent ->password);    	                    printf("名称:%s\n",loginStudent ->name);    	                    printf("编号:%s\n",loginStudent ->numb);    	                    printf("电话:%s\n",loginStudent ->tele);    	                    printf("性别:%s\n",loginStudent ->gender);    	                printf("==========================\n1,修改个人信息\n2,返回上一级\n请选择:");    	int n;
                scanf("%d",&n);
    	if (n == 1) {
        struct Student *h = studentList;
        while(h){
			if(strcmp(h->username,loginStudent ->username)==0){
														                                    printf("请输入密码 :");                                        scanf("%s",h->password);
    									                                    printf("请输入名称 :");                                        scanf("%s",h->name);
    									                                    printf("请输入编号 :");                                        scanf("%s",h->numb);
    									                                    printf("请输入电话 :");                                        scanf("%s",h->tele);
    									                                    printf("请输入性别 :");                                        scanf("%s",h->gender);
    				                loginStudent = h;
				writeStudent ();
                            printf("修改成功!\n");    				break;
			}
            h=h->next;
		}
	}
}
            //是否存在判断
        struct Student *getOneStudent (const char *name,char *s){
            struct Student *head = studentList;
            while(head){
                                                        if( strcmp(name,"username")==0 && strcmp(s, head->username )==0){
                        return head;
                    }
                                                                                                                if( strcmp(name,"name")==0 && strcmp(s, head->name )==0){
                        return head;
                    }
                                                                            if( strcmp(name,"numb")==0 && strcmp(s, head->numb )==0){
                        return head;
                    }
                                                                                                                            head = head->next;
            }
            return NULL;
        }
    //学生 读入文件
void readStudent (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Student.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    studentList = NULL;
    struct Student *tail = studentList;
    while (1)//读取
    {
        //给节点分配空间
        struct Student *p=(struct Student*)malloc(sizeof(struct Student));
        //读取数据到p
        if(fscanf(fp, "%s%s%s%s%s%s"
             ,p->username  ,p->password  ,p->name  ,p->numb  ,p->tele  ,p->gender 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (studentList  == NULL)
        {
            studentList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    studentCount = i;
    fclose(fp);
}
//学生 写入文件
void writeStudent (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Student.txt", "w+");
    //定义指针
    struct Student *p = studentList;
    //写入
    while(p){
        fprintf(fp,"%s %s %s %s %s %s\n"
             ,p->username  ,p->password  ,p->name  ,p->numb  ,p->tele  ,p->gender );
        p=p->next;
    }
    fclose(fp);
}
//学生 添加记录
void addStudent (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Student *tempValue = (struct Student*)malloc(sizeof(struct Student)); //必须重新分配地址空间。
                                                                     printf("请输入用户名 :");                        char username[15];                                 scanf("%s",username);
                                                strcpy(tempValue->username,username);
                                                                 struct Student* oneusername = getOneStudent ("username",tempValue->username);
                        if(oneusername !=NULL){//检索不为空
                                        printf("用户名已存在!\n");                            break;
                        }
                                                                                                                                                             printf("请输入密码 :");                        char password[15];                                 scanf("%s",password);
                                                strcpy(tempValue->password,password);
                                                                                                                                                                                 printf("请输入名称 :");                        char name[15];                                 scanf("%s",name);
                                                strcpy(tempValue->name,name);
                                                                 struct Student* onename = getOneStudent ("name",tempValue->name);
                        if(onename !=NULL){//检索不为空
                                        printf("名称已存在!\n");                            break;
                        }
                                                                                                                                                             printf("请输入编号 :");                        char numb[18];                                 scanf("%s",numb);
                                                strcpy(tempValue->numb,numb);
                                                                 struct Student* onenumb = getOneStudent ("numb",tempValue->numb);
                        if(onenumb !=NULL){//检索不为空
                                        printf("编号已存在!\n");                            break;
                        }
                                                                                                                                                             printf("请输入电话 :");                        char tele[16];                                 scanf("%s",tele);
                                                strcpy(tempValue->tele,tele);
                                                                                                                                                                                 printf("请输入性别 :");                        char gender[8];                                 scanf("%s",gender);
                                                strcpy(tempValue->gender,gender);
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneStudent (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writeStudent ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOneStudent (struct Student *temp){
    //采用头插法
    if(studentList == NULL){
        studentList = temp;
    }else{
        temp->next = studentList;
        studentList = temp;
    }
    studentCount ++;
}
//学生 删除
void delStudent (){
                printf("请输入您要删除的 学生 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delStudentByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writeStudent ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//学生 根据下标删除
int delStudentByIndex (int index){
    if(index > studentCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Student *p = (struct Student*)malloc(sizeof(struct Student));
    struct Student *q = studentList;
    p->next = studentList;
    if(index == 1){
        studentList = studentList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    studentCount = studentCount - 1;
    return 1;
}
//学生 修改
void modStudent (){
                printf("请输入您要修改的学生 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= studentCount ){
        //开始修改
        struct Student *temp = studentList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                                         printf("请输入密码 :");                        char password[15];
                                scanf("%s",password);
    
                                                                                                                                                                                 printf("请输入名称 :");                        char name[15];
                                scanf("%s",name);
    
                                                            if(strcmp(temp->name,name) != 0 && getOneStudent ("name",name)!=NULL){//检索不为空
                                    printf("名称 已存在!\n");                            return;
                    }
                                                                                                                                                                                 printf("请输入电话 :");                        char tele[16];
                                scanf("%s",tele);
    
                                                                                                                                                                                 printf("请输入性别 :");                        char gender[8];
                                scanf("%s",gender);
    
                                                                                                                            //输入完毕,赋值
                                                                         strcpy(temp-> password,password);
                                                                                 strcpy(temp-> name,name);
                                                                                                     strcpy(temp-> tele,tele);
                                                                                 strcpy(temp-> gender,gender);
                                                        printf("修改成功!\n");            writeStudent ();
    }else{
                    printf("输入错误!\n");        }
}
//学生 查找 如果all=1:查询全部 否则按条件查询
void findStudent (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-15s%-15s%-18s%-16s%-8s\n\n","序号" ,"用户名","密码","名称","编号","电话","性别" );
        int i=1,count = 0;
        if( studentList ){
            //用于统计信息所用
                                                                                                                                                                                                struct Student *t = studentList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->username,conCharArr) //根据用户名,模糊查询
                                                                                                                                                                                                    || select == 2 && strstr(t->name,conCharArr) //根据名称,模糊查询
                                                                                                                                                        || select == 3 && strstr(t->numb,conCharArr) //根据编号,模糊查询
                                                                                                                                                                                                    || select == 4 && strstr(t->gender,conCharArr) //根据性别,模糊查询
                                                                                        ){
                                                            printf("%-5d%-15s%-15s%-15s%-18s%-16s%-8s \n\n",i
                                                                    ,t->username
                                                ,t->password
                                                ,t->name
                                                ,t->numb
                                                ,t->tele
                                                ,t->gender
                                            );
                    //用于统计信息所用
                                                                                                                                                                                                                                                                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delStudentByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                                                                                                                                                            printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 用户名 筛选\n");                                                                                    printf("2:按 名称 筛选\n");                                                                printf("3:按 编号 筛选\n");                                                                                    printf("4:按 性别 筛选\n");                                            printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ||select==4 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readStudent();//从新读取数据。
}
//学生 排序
void sortStudent (){
    int select,i,j;
                        printf("1:按 用户名 排序\n");                            printf("2:按 密码 排序\n");                            printf("3:按 名称 排序\n");                            printf("4:按 编号 排序\n");                            printf("5:按 电话 排序\n");                            printf("6:按 性别 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Student *list[100];
    for(i = 0;i< studentCount;i++){
        list[i] = studentList;
        studentList = studentList ->next;
    }
    for( i = studentCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->username , list[j+1]->username)>0
                                                                || select == 2 && strcmp(list[j]->password , list[j+1]->password)>0
                                                                || select == 3 && strcmp(list[j]->name , list[j+1]->name)>0
                                                                || select == 4 && strcmp(list[j]->numb , list[j+1]->numb)>0
                                                                || select == 5 && strcmp(list[j]->tele , list[j+1]->tele)>0
                                                                || select == 6 && strcmp(list[j]->gender , list[j+1]->gender)>0
                                            ){
                struct Student *temp = (struct Student*)malloc(sizeof(struct Student));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< studentCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ studentCount -1 ]->next = NULL;
    studentList = list[0];
    findStudent (1);
    writeStudent ();
}
            //是否存在判断
        struct Seat *getOneSeat (const char *name,char *s){
            struct Seat *head = seatList;
            while(head){
                                                        if( strcmp(name,"numb")==0 && strcmp(s, head->numb )==0){
                        return head;
                    }
                                                    head = head->next;
            }
            return NULL;
        }
    //座位 读入文件
void readSeat (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Seat.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    seatList = NULL;
    struct Seat *tail = seatList;
    while (1)//读取
    {
        //给节点分配空间
        struct Seat *p=(struct Seat*)malloc(sizeof(struct Seat));
        //读取数据到p
        if(fscanf(fp, "%s"
             ,p->numb 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (seatList  == NULL)
        {
            seatList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    seatCount = i;
    fclose(fp);
}
//座位 写入文件
void writeSeat (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Seat.txt", "w+");
    //定义指针
    struct Seat *p = seatList;
    //写入
    while(p){
        fprintf(fp,"%s\n"
             ,p->numb );
        p=p->next;
    }
    fclose(fp);
}
//座位 添加记录
void addSeat (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Seat *tempValue = (struct Seat*)malloc(sizeof(struct Seat)); //必须重新分配地址空间。
                                                                     printf("请输入座位编号 :");                        char numb[18];                                 scanf("%s",numb);
                                                strcpy(tempValue->numb,numb);
                                                                 struct Seat* onenumb = getOneSeat ("numb",tempValue->numb);
                        if(onenumb !=NULL){//检索不为空
                                        printf("座位编号已存在!\n");                            break;
                        }
                                                                                                        //TODO

        //加入链表
        tempValue->next = NULL;
        addOneSeat (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writeSeat ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOneSeat (struct Seat *temp){
    //采用头插法
    if(seatList == NULL){
        seatList = temp;
    }else{
        temp->next = seatList;
        seatList = temp;
    }
    seatCount ++;
}
//座位 删除
void delSeat (){
                printf("请输入您要删除的 座位 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delSeatByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writeSeat ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//座位 根据下标删除
int delSeatByIndex (int index){
    if(index > seatCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Seat *p = (struct Seat*)malloc(sizeof(struct Seat));
    struct Seat *q = seatList;
    p->next = seatList;
    if(index == 1){
        seatList = seatList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    seatCount = seatCount - 1;
    return 1;
}
//座位 修改
void modSeat (){
                printf("请输入您要修改的座位 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= seatCount ){
        //开始修改
        struct Seat *temp = seatList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                    //输入完毕,赋值
                                                printf("修改成功!\n");            writeSeat ();
    }else{
                    printf("输入错误!\n");        }
}
//座位 查找 如果all=1:查询全部 否则按条件查询
void findSeat (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-18s\n\n","序号" ,"座位编号" );
        int i=1,count = 0;
        if( seatList ){
            //用于统计信息所用
                                                    struct Seat *t = seatList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->numb,conCharArr) //根据座位编号,模糊查询
                                                                                        ){
                                                            printf("%-5d%-18s \n\n",i
                                                                    ,t->numb
                                            );
                    //用于统计信息所用
                                                                                    count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delSeatByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 座位编号 筛选\n");                                            printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readSeat();//从新读取数据。
}
//座位 排序
void sortSeat (){
    int select,i,j;
                        printf("1:按 座位编号 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Seat *list[100];
    for(i = 0;i< seatCount;i++){
        list[i] = seatList;
        seatList = seatList ->next;
    }
    for( i = seatCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->numb , list[j+1]->numb)>0
                                            ){
                struct Seat *temp = (struct Seat*)malloc(sizeof(struct Seat));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< seatCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ seatCount -1 ]->next = NULL;
    seatList = list[0];
    findSeat (1);
    writeSeat ();
}
    //预约位置 读入文件
void readPre (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Pre.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    preList = NULL;
    struct Pre *tail = preList;
    while (1)//读取
    {
        //给节点分配空间
        struct Pre *p=(struct Pre*)malloc(sizeof(struct Pre));
        //读取数据到p
        if(fscanf(fp, "%s%s"
             ,p->student  ,p->seat 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (preList  == NULL)
        {
            preList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    preCount = i;
    fclose(fp);
}
//预约位置 写入文件
void writePre (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Pre.txt", "w+");
    //定义指针
    struct Pre *p = preList;
    //写入
    while(p){
        fprintf(fp,"%s %s\n"
             ,p->student  ,p->seat );
        p=p->next;
    }
    fclose(fp);
}
//预约位置 添加记录
void addPre (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    printf("\n");            struct Pre *tempValue = (struct Pre*)malloc(sizeof(struct Pre)); //必须重新分配地址空间。
                                if(loginStatus==2){
                strcpy(tempValue->student,loginStudent ->name);
            }else{
                                                             printf("请输入学生 :");                        char student[15];                                 scanf("%s",student);
                                                strcpy(tempValue->student,student);
                                                                                                        struct Student* studentTemp = getOneStudent ("name",tempValue->student);
                        if(studentTemp==NULL){//检索不为空
                                        printf("学生不存在!\n");                            break;
                        }
                                                            }                                                                                 printf("请输入位置编号 :");                        char seat[15];                                 scanf("%s",seat);
                                                strcpy(tempValue->seat,seat);
                                                                                                        struct Seat* seatTemp = getOneSeat ("numb",tempValue->seat);
                        if(seatTemp==NULL){//检索不为空
                                        printf("位置编号不存在!\n");                            break;
                        }
                                                                //TODO

        //加入链表
        tempValue->next = NULL;
        addOnePre (tempValue);
                    printf("\n是否继续录入?(y/n)");            getchar();
                    scanf("%c",&selectYNFlag);
        }
    writePre ( );
                printf("\n*****************************\n");                    printf("录入完成\n");                    printf("*****************************\n");    }
void addOnePre (struct Pre *temp){
    //采用头插法
    if(preList == NULL){
        preList = temp;
    }else{
        temp->next = preList;
        preList = temp;
    }
    preCount ++;
}
//预约位置 删除
void delPre (){
                printf("请输入您要删除的 预约位置 序号(输入-1退出):");        int index;
                scanf("%d",&index);
    
    if(index >= 0){
        int res = delPreByIndex (index);
        if(res){
                        printf("删除成功!\n\n");                writePre ();
        }else{
                        printf("删除失败!\n\n");            }
    }
}
//预约位置 根据下标删除
int delPreByIndex (int index){
    if(index > preCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Pre *p = (struct Pre*)malloc(sizeof(struct Pre));
    struct Pre *q = preList;
    p->next = preList;
    if(index == 1){
        preList = preList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    preCount = preCount - 1;
    return 1;
}
//预约位置 修改
void modPre (){
                printf("请输入您要修改的预约位置 序号(输入-1退出):");        int indexOfMod = -1,i;
                scanf("%d",&indexOfMod);
        if(indexOfMod > 0 && indexOfMod <= preCount ){
        //开始修改
        struct Pre *temp = preList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                     if(loginStatus==2){
                    strcpy(temp->student,loginStudent ->name);
                }else{
                                                printf("请输入学生 :");                        char student[15];
                                scanf("%s",student);
    
                                                                                                    if(getOneStudent ("name",student)==NULL){//检索不为空
                                    printf("学生 不存在!\n");                            return;
                    }
                                                    }                                                                                                 printf("请输入位置编号 :");                        char seat[15];
                                scanf("%s",seat);
    
                                                                                                    if(getOneSeat ("numb",seat)==NULL){//检索不为空
                                    printf("位置编号 不存在!\n");                            return;
                    }
                                                                //输入完毕,赋值
                                                                         strcpy(temp-> seat,seat);
                                                        printf("修改成功!\n");            writePre ();
    }else{
                    printf("输入错误!\n");        }
}
//预约位置 查找 如果all=1:查询全部 否则按条件查询
void findPre (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-15s\n\n","序号" ,"学生","位置编号" );
        int i=1,count = 0;
        if( preList ){
            //用于统计信息所用
                                                                                struct Pre *t = preList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->student,conCharArr) //根据学生,模糊查询
                                                                                                                                                        || select == 2 && strstr(t->seat,conCharArr) //根据位置编号,模糊查询
                                                                                        ){
                                         if(0
                                        //学生 只能查看和自己相关的预约位置
                    ||loginStatus == 2 && strcmp(t->student,loginStudent -> name)!=0
                                        ){
                        t=t->next;
                        delPreByIndex (i);//这个时候i不减减,因为continue了
                        continue;
                    }
                                                            printf("%-5d%-15s%-15s \n\n",i
                                                                    ,t->student
                                                ,t->seat
                                            );
                    //用于统计信息所用
                                                                                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delPreByIndex (i--);
                }
                i++;
            }
                        printf("共%d条结果\n",count);                            printf("-----------------------------------------------------------------------------------------------------\n");                                                                                                            printf("\n");            }else{
                        printf("\n【无记录!】\n\n");            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    printf("【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n");                        printf("0:退出\n");                                                    printf("1:按 学生 筛选\n");                                                                printf("2:按 位置编号 筛选\n");                                            printf("请输入选择:");                        scanf("%d",&select);
            if(select>0){
            if(0  ||select==1 ||select==2 ){
                            printf("请输入筛选条件:");                                scanf("%s",conCharArr);
                }else if(0 ){
                            printf("请输入筛选范围m,n,用空格隔开(m ≤X ≤n):");                                scanf("%lf",&conNum1);
                scanf("%lf",&conNum2);
                }
        }else{
            break;
        }
    }
    readPre();//从新读取数据。
}
//预约位置 排序
void sortPre (){
    int select,i,j;
                        printf("1:按 学生 排序\n");                            printf("2:按 位置编号 排序\n");                        printf("请输入选择:");                    scanf("%d",&select);
        struct Pre *list[100];
    for(i = 0;i< preCount;i++){
        list[i] = preList;
        preList = preList ->next;
    }
    for( i = preCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->student , list[j+1]->student)>0
                                                                || select == 2 && strcmp(list[j]->seat , list[j+1]->seat)>0
                                            ){
                struct Pre *temp = (struct Pre*)malloc(sizeof(struct Pre));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< preCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ preCount -1 ]->next = NULL;
    preList = list[0];
    findPre (1);
    writePre ();
}

                                                        void menuAdmin (){
        //菜单
                    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("*-------------9 :删除座位\n");                                                        printf("*-------------10 :修改座位\n");                                                        printf("*-------------11 :查找座位\n");                                printf("*-------------12 :排序座位\n");                                                                printf("*-------------13 :添加预约位置\n");                                                        printf("*-------------14 :删除预约位置\n");                                                                    printf("*-------------15 :查找预约位置\n");                                printf("*-------------16 :排序预约位置\n");                                            printf("*-------------0:退出\n");                                    printf("*------------(-1):登出\n");                            printf("*------------(-2):我的\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }
                                                                void menuStudent (){
        //菜单
                    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("*------------(-1):登出\n");                            printf("*------------(-2):我的\n");                                printf("*---------------------------------------------*\n");                        printf("请输入选择:");        }

链表:C++版本

#include <io.h>
            #include <iostream>
            #include <windows.h>
            using namespace std; 
        

        //定义 图书管管理员 链表
    struct Admin {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
                struct Admin* next;//链式存储
    };
    struct  Admin *adminList;//定义全局 图书管管理员 指针
    int adminCount = 0;//图书管管理员 个数记录
        //定义 学生 链表
    struct Student {
                    char username[15] ; // 用户名
                    char password[15] ; // 密码
                    char name[15] ; // 名称
                    char numb[18] ; // 编号
                    char tele[16] ; // 电话
                    char gender[8] ; // 性别
                struct Student* next;//链式存储
    };
    struct  Student *studentList;//定义全局 学生 指针
    int studentCount = 0;//学生 个数记录
        //定义 座位 链表
    struct Seat {
                    char numb[18] ; // 座位编号
                struct Seat* next;//链式存储
    };
    struct  Seat *seatList;//定义全局 座位 指针
    int seatCount = 0;//座位 个数记录
        //定义 预约位置 链表
    struct Pre {
                    char student[15] ; // 学生
                    char seat[15] ; // 位置编号
                struct Pre* next;//链式存储
    };
    struct  Pre *preList;//定义全局 预约位置 指针
    int preCount = 0;//预约位置 个数记录
    
        //图书管管理员 读入文件
    void readAdmin ();
    //图书管管理员 写入文件
    void writeAdmin ();
    //图书管管理员 添加记录
    void addAdmin ();
        void addOneAdmin (struct Admin *admin);
        //图书管管理员 删除记录
    void delAdmin ();
    //图书管管理员 根据下标删除
    int delAdminByIndex (int index);
    //图书管管理员 修改记录
    void modAdmin ();
    //图书管管理员 查找记录
    void findAdmin (int all);
    //图书管管理员 排序
    void sortAdmin ();
    //交换
    void exchangeAdmin (int i ,int j);
    //存在判断函数
                                    struct Admin* getOneAdmin (const char *name,char *s);
                                    void modAdminInfo ();
                //学生 读入文件
    void readStudent ();
    //学生 写入文件
    void writeStudent ();
    //学生 添加记录
    void addStudent ();
        void addOneStudent (struct Student *student);
        //学生 删除记录
    void delStudent ();
    //学生 根据下标删除
    int delStudentByIndex (int index);
    //学生 修改记录
    void modStudent ();
    //学生 查找记录
    void findStudent (int all);
    //学生 排序
    void sortStudent ();
    //交换
    void exchangeStudent (int i ,int j);
    //存在判断函数
                                    struct Student* getOneStudent (const char *name,char *s);
                                    void modStudentInfo ();
                //座位 读入文件
    void readSeat ();
    //座位 写入文件
    void writeSeat ();
    //座位 添加记录
    void addSeat ();
        void addOneSeat (struct Seat *seat);
        //座位 删除记录
    void delSeat ();
    //座位 根据下标删除
    int delSeatByIndex (int index);
    //座位 修改记录
    void modSeat ();
    //座位 查找记录
    void findSeat (int all);
    //座位 排序
    void sortSeat ();
    //交换
    void exchangeSeat (int i ,int j);
    //存在判断函数
                                    struct Seat* getOneSeat (const char *name,char *s);
                                    //预约位置 读入文件
    void readPre ();
    //预约位置 写入文件
    void writePre ();
    //预约位置 添加记录
    void addPre ();
        void addOnePre (struct Pre *pre);
        //预约位置 删除记录
    void delPre ();
    //预约位置 根据下标删除
    int delPreByIndex (int index);
    //预约位置 修改记录
    void modPre ();
    //预约位置 查找记录
    void findPre (int all);
    //预约位置 排序
    void sortPre ();
    //交换
    void exchangePre (int i ,int j);
    //存在判断函数
                    
        //菜单
            void login();
        void regist();
                                                                    struct Admin *loginAdmin = NULL;
                                    void menuAdmin ();
                                                                                    struct Student *loginStudent = NULL;
                                    void menuStudent ();
                                                                                            int loginStatus = 0;//意义:0 未登录
    
    // 主函数
    int main(){
            //读取数据
                        readAdmin ();//读取图书管管理员
                            readStudent ();//读取学生
                            readSeat ();//读取座位
                            readPre ();//读取预约位置
                while(1){
                                         cout<<"*---------------------------------------------*\n*------------1:登陆\n*------------2:注册\n*---------------------------------------------*\n请输入选择:";
                    int logout=0; //返回上一级标志
                int select =0;
                            cin>>select;
                    if(select!=2){
                    login();
                }else{
                    regist();
                }
                        int choice;
                                                                        if(loginStatus == 1)
                                                                             while(logout==0){     menuAdmin ();
                cin>>choice;
        switch(choice){
                                                                            case 1 :
                            findAdmin (0);//查找图书管管理员
                break;
                            case 2 :
                            sortAdmin ();//排序图书管管理员
                break;
                                                            case 3 :
                            addStudent ();//添加学生
                break;
                                                    case 4 :
                            findStudent (1);//查找学生
                                delStudent ();//删除学生
                break;
                                                    case 5 :
                            findStudent (1);//查找学生
                                modStudent ();//修改学生
                break;
                                                    case 6 :
                            findStudent (0);//查找学生
                break;
                            case 7 :
                            sortStudent ();//排序学生
                break;
                                                            case 8 :
                            addSeat ();//添加座位
                break;
                                                    case 9 :
                            findSeat (1);//查找座位
                                delSeat ();//删除座位
                break;
                                                    case 10 :
                            findSeat (1);//查找座位
                                modSeat ();//修改座位
                break;
                                                    case 11 :
                            findSeat (0);//查找座位
                break;
                            case 12 :
                            sortSeat ();//排序座位
                break;
                                                            case 13 :
                            addPre ();//添加预约位置
                break;
                                                    case 14 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 15 :
                            findPre (0);//查找预约位置
                break;
                            case 16 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                    case -1:
                        cout<<"\n";
                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modAdminInfo ();//修改个人信息
                break;
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
    }                                                                                if(loginStatus == 2)
                                                                             while(logout==0){     menuStudent ();
                cin>>choice;
        switch(choice){
                                                                                                                                    case 1 :
                            findStudent (0);//查找学生
                break;
                            case 2 :
                            sortStudent ();//排序学生
                break;
                                                                                                case 3 :
                            findSeat (0);//查找座位
                break;
                            case 4 :
                            sortSeat ();//排序座位
                break;
                                                            case 5 :
                            addPre ();//添加预约位置
                break;
                                                    case 6 :
                            findPre (1);//查找预约位置
                                delPre ();//删除预约位置
                break;
                                                                case 7 :
                            findPre (0);//查找预约位置
                break;
                            case 8 :
                            sortPre ();//排序预约位置
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                    case -1:
                        cout<<"\n";
                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        modStudentInfo ();//修改个人信息
                break;
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
    }                                                                                                                                }
        return 0;
    }


			void login(){
		int i;
		while(loginStatus==0){
			char username[20],password[20];
                        cout<<"请输入账号:";
    			            cin>>username;
                            cout<<"请输入密码:";
                            cin>>password;
    			                                                // 图书管管理员 登录
            if(loginStatus==0){
                struct Admin *admin = adminList;
                while(admin){
                    if(strcmp(username,admin ->username)==0){
                        if(strcmp(password,admin ->password)==0){
                            loginAdmin = admin;
                            loginStatus = 1;
                            break;
                        }
                    }
                    admin = admin ->next;
                }
            }
                                            // 学生 登录
            if(loginStatus==0){
                struct Student *student = studentList;
                while(student){
                    if(strcmp(username,student ->username)==0){
                        if(strcmp(password,student ->password)==0){
                            loginStudent = student;
                            loginStatus = 2;
                            break;
                        }
                    }
                    student = student ->next;
                }
            }
                                                                			//判断登录情况
			if(loginStatus == 0){
				            cout<<"\n用户名密码错误请重新登录!\n\n";
    			} else{
				            cout<<"\n登录成功!\n\n";
    ;
			}
		}
	}
	void regist(){
		int flag = 0;//注册状态 0 失败 ,1 成功
		while(flag ==0){
			            cout<<"*---------------------------------------------*\n*------------0:返回 \n";
    			                                                cout<<"*------------1:注册图书管管理员 \n";
                    			                                                cout<<"*------------2:注册学生 \n";
                    			                			                			                        cout<<"*---------------------------------------------*\n请输入选择:";
    			int select = 0;
			            cin>>select;
    ;
			if(select == 0){
				flag = 1;//返回
			} else{
			char username[20],password[20];
                        cout<<"请输入账号:";
                            cin>>username;
    ;
                        cout<<"请输入密码:";
                            cin>>password;
    			                                                if( select == 1 ){
                if( getOneAdmin ("username",username)!=NULL) { //根据用户名查找
                                cout<<"\n用户名已存在!\n\n";
                    }else{
                    struct Admin *admin =  (struct Admin*)malloc(sizeof(struct Admin));
                    strcpy( admin ->username,username);
                    strcpy( admin ->password,password);
                    admin ->next = NULL;
                                                                                                                                                    loginAdmin = admin;
                    addOneAdmin (admin);
                    loginStatus = 1;
                    writeAdmin ();
                    flag = 1;
                }
            }
                                            if( select == 2 ){
                if( getOneStudent ("username",username)!=NULL) { //根据用户名查找
                                cout<<"\n用户名已存在!\n\n";
                    }else{
                    struct Student *student =  (struct Student*)malloc(sizeof(struct Student));
                    strcpy( student ->username,username);
                    strcpy( student ->password,password);
                    student ->next = NULL;
                                                                                                                                                                                                                                 cout<<"请输入名称 :";
    ;
                                            cin>>student ->name;
                                                                                                                                                                             cout<<"请输入编号 :";
    ;
                                            cin>>student ->numb;
                                                                                                                                                                             cout<<"请输入电话 :";
    ;
                                            cin>>student ->tele;
                                                                                                                                                                             cout<<"请输入性别 :";
    ;
                                            cin>>student ->gender;
                                                                                                loginStudent = student;
                    addOneStudent (student);
                    loginStatus = 2;
                    writeStudent ();
                    flag = 1;
                }
            }
                                                                			if(flag == 1)
                            cout<<"注册成功\n\n";
    			else
                            cout<<"注册失败!\n\n";
    			}
		}
	}
	
void modAdminInfo (){
                cout<<"\n====您的个人信息如下====\n";
    	                    cout<<"用户名:" << loginAdmin ->username <<"\n";
    	                    cout<<"密码:" << loginAdmin ->password <<"\n";
    	                cout<<"==========================\n1,修改个人信息\n2,返回上一级\n请选择:";
    	int n;
                cin>>n;
    	if (n == 1) {
        struct Admin *h = adminList;
        while(h){
			if(strcmp(h->username,loginAdmin ->username)==0){
														                                    cout<<"请输入密码 :";
                                        cin>>h->password;
    				                loginAdmin = h;
				writeAdmin ();
                            cout<<"修改成功!\n";
    				break;
			}
            h=h->next;
		}
	}
}
            //是否存在判断
        struct Admin *getOneAdmin (const char *name,char *s){
            struct Admin *head = adminList;
            while(head){
                                                        if( strcmp(name,"username")==0 && strcmp(s, head->username )==0){
                        return head;
                    }
                                                                                        head = head->next;
            }
            return NULL;
        }
    //图书管管理员 读入文件
void readAdmin (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Admin.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    adminList = NULL;
    struct Admin *tail = adminList;
    while (1)//读取
    {
        //给节点分配空间
        struct Admin *p=(struct Admin*)malloc(sizeof(struct Admin));
        //读取数据到p
        if(fscanf(fp, "%s%s"
             ,p->username  ,p->password 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (adminList  == NULL)
        {
            adminList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    adminCount = i;
    fclose(fp);
}
//图书管管理员 写入文件
void writeAdmin (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Admin.txt", "w+");
    //定义指针
    struct Admin *p = adminList;
    //写入
    while(p){
        fprintf(fp,"%s %s\n"
             ,p->username  ,p->password );
        p=p->next;
    }
    fclose(fp);
}
//图书管管理员 添加记录
void addAdmin (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Admin *tempValue = (struct Admin*)malloc(sizeof(struct Admin)); //必须重新分配地址空间。
                                                                     cout<<"请输入用户名 :";
                        char username[15];                                 cin>>username;
                                                strcpy(tempValue->username,username);
                                                                 struct Admin* oneusername = getOneAdmin ("username",tempValue->username);
                        if(oneusername !=NULL){//检索不为空
                                        cout<<"用户名已存在!\n";
                            break;
                        }
                                                                                                                                                             cout<<"请输入密码 :";
                        char password[15];                                 cin>>password;
                                                strcpy(tempValue->password,password);
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneAdmin (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writeAdmin ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOneAdmin (struct Admin *temp){
    //采用头插法
    if(adminList == NULL){
        adminList = temp;
    }else{
        temp->next = adminList;
        adminList = temp;
    }
    adminCount ++;
}
//图书管管理员 删除
void delAdmin (){
                cout<<"请输入您要删除的 图书管管理员 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delAdminByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writeAdmin ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//图书管管理员 根据下标删除
int delAdminByIndex (int index){
    if(index > adminCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Admin *p = (struct Admin*)malloc(sizeof(struct Admin));
    struct Admin *q = adminList;
    p->next = adminList;
    if(index == 1){
        adminList = adminList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    adminCount = adminCount - 1;
    return 1;
}
//图书管管理员 修改
void modAdmin (){
                cout<<"请输入您要修改的图书管管理员 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= adminCount ){
        //开始修改
        struct Admin *temp = adminList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                                         cout<<"请输入密码 :";
                        char password[15];
                                cin>>password;
    
                                                                                                                            //输入完毕,赋值
                                                                         strcpy(temp-> password,password);
                                                        cout<<"修改成功!\n";
            writeAdmin ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//图书管管理员 查找 如果all=1:查询全部 否则按条件查询
void findAdmin (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-15s\n\n","序号" ,"用户名","密码" );
        int i=1,count = 0;
        if( adminList ){
            //用于统计信息所用
                                                                                struct Admin *t = adminList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->username,conCharArr) //根据用户名,模糊查询
                                                                                                                                    ){
                                                            printf("%-5d%-15s%-15s \n\n",i
                                                                    ,t->username
                                                ,t->password
                                            );
                    //用于统计信息所用
                                                                                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delAdminByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                                            cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 用户名 筛选\n";
                                                                cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readAdmin();//从新读取数据。
}
//图书管管理员 排序
void sortAdmin (){
    int select,i,j;
                        cout<<"1:按 用户名 排序\n";
                            cout<<"2:按 密码 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Admin *list[100];
    for(i = 0;i< adminCount;i++){
        list[i] = adminList;
        adminList = adminList ->next;
    }
    for( i = adminCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->username , list[j+1]->username)>0
                                                                || select == 2 && strcmp(list[j]->password , list[j+1]->password)>0
                                            ){
                struct Admin *temp = (struct Admin*)malloc(sizeof(struct Admin));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< adminCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ adminCount -1 ]->next = NULL;
    adminList = list[0];
    findAdmin (1);
    writeAdmin ();
}
void modStudentInfo (){
                cout<<"\n====您的个人信息如下====\n";
    	                    cout<<"用户名:" << loginStudent ->username <<"\n";
    	                    cout<<"密码:" << loginStudent ->password <<"\n";
    	                    cout<<"名称:" << loginStudent ->name <<"\n";
    	                    cout<<"编号:" << loginStudent ->numb <<"\n";
    	                    cout<<"电话:" << loginStudent ->tele <<"\n";
    	                    cout<<"性别:" << loginStudent ->gender <<"\n";
    	                cout<<"==========================\n1,修改个人信息\n2,返回上一级\n请选择:";
    	int n;
                cin>>n;
    	if (n == 1) {
        struct Student *h = studentList;
        while(h){
			if(strcmp(h->username,loginStudent ->username)==0){
														                                    cout<<"请输入密码 :";
                                        cin>>h->password;
    									                                    cout<<"请输入名称 :";
                                        cin>>h->name;
    									                                    cout<<"请输入编号 :";
                                        cin>>h->numb;
    									                                    cout<<"请输入电话 :";
                                        cin>>h->tele;
    									                                    cout<<"请输入性别 :";
                                        cin>>h->gender;
    				                loginStudent = h;
				writeStudent ();
                            cout<<"修改成功!\n";
    				break;
			}
            h=h->next;
		}
	}
}
            //是否存在判断
        struct Student *getOneStudent (const char *name,char *s){
            struct Student *head = studentList;
            while(head){
                                                        if( strcmp(name,"username")==0 && strcmp(s, head->username )==0){
                        return head;
                    }
                                                                                                                if( strcmp(name,"name")==0 && strcmp(s, head->name )==0){
                        return head;
                    }
                                                                            if( strcmp(name,"numb")==0 && strcmp(s, head->numb )==0){
                        return head;
                    }
                                                                                                                            head = head->next;
            }
            return NULL;
        }
    //学生 读入文件
void readStudent (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Student.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    studentList = NULL;
    struct Student *tail = studentList;
    while (1)//读取
    {
        //给节点分配空间
        struct Student *p=(struct Student*)malloc(sizeof(struct Student));
        //读取数据到p
        if(fscanf(fp, "%s%s%s%s%s%s"
             ,p->username  ,p->password  ,p->name  ,p->numb  ,p->tele  ,p->gender 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (studentList  == NULL)
        {
            studentList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    studentCount = i;
    fclose(fp);
}
//学生 写入文件
void writeStudent (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Student.txt", "w+");
    //定义指针
    struct Student *p = studentList;
    //写入
    while(p){
        fprintf(fp,"%s %s %s %s %s %s\n"
             ,p->username  ,p->password  ,p->name  ,p->numb  ,p->tele  ,p->gender );
        p=p->next;
    }
    fclose(fp);
}
//学生 添加记录
void addStudent (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Student *tempValue = (struct Student*)malloc(sizeof(struct Student)); //必须重新分配地址空间。
                                                                     cout<<"请输入用户名 :";
                        char username[15];                                 cin>>username;
                                                strcpy(tempValue->username,username);
                                                                 struct Student* oneusername = getOneStudent ("username",tempValue->username);
                        if(oneusername !=NULL){//检索不为空
                                        cout<<"用户名已存在!\n";
                            break;
                        }
                                                                                                                                                             cout<<"请输入密码 :";
                        char password[15];                                 cin>>password;
                                                strcpy(tempValue->password,password);
                                                                                                                                                                                 cout<<"请输入名称 :";
                        char name[15];                                 cin>>name;
                                                strcpy(tempValue->name,name);
                                                                 struct Student* onename = getOneStudent ("name",tempValue->name);
                        if(onename !=NULL){//检索不为空
                                        cout<<"名称已存在!\n";
                            break;
                        }
                                                                                                                                                             cout<<"请输入编号 :";
                        char numb[18];                                 cin>>numb;
                                                strcpy(tempValue->numb,numb);
                                                                 struct Student* onenumb = getOneStudent ("numb",tempValue->numb);
                        if(onenumb !=NULL){//检索不为空
                                        cout<<"编号已存在!\n";
                            break;
                        }
                                                                                                                                                             cout<<"请输入电话 :";
                        char tele[16];                                 cin>>tele;
                                                strcpy(tempValue->tele,tele);
                                                                                                                                                                                 cout<<"请输入性别 :";
                        char gender[8];                                 cin>>gender;
                                                strcpy(tempValue->gender,gender);
                                                                                                                            //TODO

        //加入链表
        tempValue->next = NULL;
        addOneStudent (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writeStudent ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOneStudent (struct Student *temp){
    //采用头插法
    if(studentList == NULL){
        studentList = temp;
    }else{
        temp->next = studentList;
        studentList = temp;
    }
    studentCount ++;
}
//学生 删除
void delStudent (){
                cout<<"请输入您要删除的 学生 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delStudentByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writeStudent ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//学生 根据下标删除
int delStudentByIndex (int index){
    if(index > studentCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Student *p = (struct Student*)malloc(sizeof(struct Student));
    struct Student *q = studentList;
    p->next = studentList;
    if(index == 1){
        studentList = studentList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    studentCount = studentCount - 1;
    return 1;
}
//学生 修改
void modStudent (){
                cout<<"请输入您要修改的学生 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= studentCount ){
        //开始修改
        struct Student *temp = studentList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                                                         cout<<"请输入密码 :";
                        char password[15];
                                cin>>password;
    
                                                                                                                                                                                 cout<<"请输入名称 :";
                        char name[15];
                                cin>>name;
    
                                                            if(strcmp(temp->name,name) != 0 && getOneStudent ("name",name)!=NULL){//检索不为空
                                    cout<<"名称 已存在!\n";
                            return;
                    }
                                                                                                                                                                                 cout<<"请输入电话 :";
                        char tele[16];
                                cin>>tele;
    
                                                                                                                                                                                 cout<<"请输入性别 :";
                        char gender[8];
                                cin>>gender;
    
                                                                                                                            //输入完毕,赋值
                                                                         strcpy(temp-> password,password);
                                                                                 strcpy(temp-> name,name);
                                                                                                     strcpy(temp-> tele,tele);
                                                                                 strcpy(temp-> gender,gender);
                                                        cout<<"修改成功!\n";
            writeStudent ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//学生 查找 如果all=1:查询全部 否则按条件查询
void findStudent (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-15s%-15s%-18s%-16s%-8s\n\n","序号" ,"用户名","密码","名称","编号","电话","性别" );
        int i=1,count = 0;
        if( studentList ){
            //用于统计信息所用
                                                                                                                                                                                                struct Student *t = studentList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->username,conCharArr) //根据用户名,模糊查询
                                                                                                                                                                                                    || select == 2 && strstr(t->name,conCharArr) //根据名称,模糊查询
                                                                                                                                                        || select == 3 && strstr(t->numb,conCharArr) //根据编号,模糊查询
                                                                                                                                                                                                    || select == 4 && strstr(t->gender,conCharArr) //根据性别,模糊查询
                                                                                        ){
                                                            printf("%-5d%-15s%-15s%-15s%-18s%-16s%-8s \n\n",i
                                                                    ,t->username
                                                ,t->password
                                                ,t->name
                                                ,t->numb
                                                ,t->tele
                                                ,t->gender
                                            );
                    //用于统计信息所用
                                                                                                                                                                                                                                                                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delStudentByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                                                                                                                                                            cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 用户名 筛选\n";
                                                                                    cout<<"2:按 名称 筛选\n";
                                                                cout<<"3:按 编号 筛选\n";
                                                                                    cout<<"4:按 性别 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ||select==4 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readStudent();//从新读取数据。
}
//学生 排序
void sortStudent (){
    int select,i,j;
                        cout<<"1:按 用户名 排序\n";
                            cout<<"2:按 密码 排序\n";
                            cout<<"3:按 名称 排序\n";
                            cout<<"4:按 编号 排序\n";
                            cout<<"5:按 电话 排序\n";
                            cout<<"6:按 性别 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Student *list[100];
    for(i = 0;i< studentCount;i++){
        list[i] = studentList;
        studentList = studentList ->next;
    }
    for( i = studentCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->username , list[j+1]->username)>0
                                                                || select == 2 && strcmp(list[j]->password , list[j+1]->password)>0
                                                                || select == 3 && strcmp(list[j]->name , list[j+1]->name)>0
                                                                || select == 4 && strcmp(list[j]->numb , list[j+1]->numb)>0
                                                                || select == 5 && strcmp(list[j]->tele , list[j+1]->tele)>0
                                                                || select == 6 && strcmp(list[j]->gender , list[j+1]->gender)>0
                                            ){
                struct Student *temp = (struct Student*)malloc(sizeof(struct Student));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< studentCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ studentCount -1 ]->next = NULL;
    studentList = list[0];
    findStudent (1);
    writeStudent ();
}
            //是否存在判断
        struct Seat *getOneSeat (const char *name,char *s){
            struct Seat *head = seatList;
            while(head){
                                                        if( strcmp(name,"numb")==0 && strcmp(s, head->numb )==0){
                        return head;
                    }
                                                    head = head->next;
            }
            return NULL;
        }
    //座位 读入文件
void readSeat (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Seat.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    seatList = NULL;
    struct Seat *tail = seatList;
    while (1)//读取
    {
        //给节点分配空间
        struct Seat *p=(struct Seat*)malloc(sizeof(struct Seat));
        //读取数据到p
        if(fscanf(fp, "%s"
             ,p->numb 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (seatList  == NULL)
        {
            seatList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    seatCount = i;
    fclose(fp);
}
//座位 写入文件
void writeSeat (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Seat.txt", "w+");
    //定义指针
    struct Seat *p = seatList;
    //写入
    while(p){
        fprintf(fp,"%s\n"
             ,p->numb );
        p=p->next;
    }
    fclose(fp);
}
//座位 添加记录
void addSeat (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Seat *tempValue = (struct Seat*)malloc(sizeof(struct Seat)); //必须重新分配地址空间。
                                                                     cout<<"请输入座位编号 :";
                        char numb[18];                                 cin>>numb;
                                                strcpy(tempValue->numb,numb);
                                                                 struct Seat* onenumb = getOneSeat ("numb",tempValue->numb);
                        if(onenumb !=NULL){//检索不为空
                                        cout<<"座位编号已存在!\n";
                            break;
                        }
                                                                                                        //TODO

        //加入链表
        tempValue->next = NULL;
        addOneSeat (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writeSeat ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOneSeat (struct Seat *temp){
    //采用头插法
    if(seatList == NULL){
        seatList = temp;
    }else{
        temp->next = seatList;
        seatList = temp;
    }
    seatCount ++;
}
//座位 删除
void delSeat (){
                cout<<"请输入您要删除的 座位 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delSeatByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writeSeat ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//座位 根据下标删除
int delSeatByIndex (int index){
    if(index > seatCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Seat *p = (struct Seat*)malloc(sizeof(struct Seat));
    struct Seat *q = seatList;
    p->next = seatList;
    if(index == 1){
        seatList = seatList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    seatCount = seatCount - 1;
    return 1;
}
//座位 修改
void modSeat (){
                cout<<"请输入您要修改的座位 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= seatCount ){
        //开始修改
        struct Seat *temp = seatList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                    //输入完毕,赋值
                                                cout<<"修改成功!\n";
            writeSeat ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//座位 查找 如果all=1:查询全部 否则按条件查询
void findSeat (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-18s\n\n","序号" ,"座位编号" );
        int i=1,count = 0;
        if( seatList ){
            //用于统计信息所用
                                                    struct Seat *t = seatList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->numb,conCharArr) //根据座位编号,模糊查询
                                                                                        ){
                                                            printf("%-5d%-18s \n\n",i
                                                                    ,t->numb
                                            );
                    //用于统计信息所用
                                                                                    count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delSeatByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 座位编号 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readSeat();//从新读取数据。
}
//座位 排序
void sortSeat (){
    int select,i,j;
                        cout<<"1:按 座位编号 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Seat *list[100];
    for(i = 0;i< seatCount;i++){
        list[i] = seatList;
        seatList = seatList ->next;
    }
    for( i = seatCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->numb , list[j+1]->numb)>0
                                            ){
                struct Seat *temp = (struct Seat*)malloc(sizeof(struct Seat));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< seatCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ seatCount -1 ]->next = NULL;
    seatList = list[0];
    findSeat (1);
    writeSeat ();
}
    //预约位置 读入文件
void readPre (){
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Pre.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    int i=0;
    //从文件读取数据
    preList = NULL;
    struct Pre *tail = preList;
    while (1)//读取
    {
        //给节点分配空间
        struct Pre *p=(struct Pre*)malloc(sizeof(struct Pre));
        //读取数据到p
        if(fscanf(fp, "%s%s"
             ,p->student  ,p->seat 
        ) == EOF)  {
            break;
        }
        p->next=NULL;
        //指针为空则赋值。
        if (preList  == NULL)
        {
            preList=p;
            tail=p;
        }
        else {
            tail->next=p;
            tail=p;
        }
        i++;
    }
    //记录总数
    preCount = i;
    fclose(fp);
}
//预约位置 写入文件
void writePre (){
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Pre.txt", "w+");
    //定义指针
    struct Pre *p = preList;
    //写入
    while(p){
        fprintf(fp,"%s %s\n"
             ,p->student  ,p->seat );
        p=p->next;
    }
    fclose(fp);
}
//预约位置 添加记录
void addPre (){
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
                    cout<<"\n";
            struct Pre *tempValue = (struct Pre*)malloc(sizeof(struct Pre)); //必须重新分配地址空间。
                                if(loginStatus==2){
                strcpy(tempValue->student,loginStudent ->name);
            }else{
                                                             cout<<"请输入学生 :";
                        char student[15];                                 cin>>student;
                                                strcpy(tempValue->student,student);
                                                                                                        struct Student* studentTemp = getOneStudent ("name",tempValue->student);
                        if(studentTemp==NULL){//检索不为空
                                        cout<<"学生不存在!\n";
                            break;
                        }
                                                            }                                                                                 cout<<"请输入位置编号 :";
                        char seat[15];                                 cin>>seat;
                                                strcpy(tempValue->seat,seat);
                                                                                                        struct Seat* seatTemp = getOneSeat ("numb",tempValue->seat);
                        if(seatTemp==NULL){//检索不为空
                                        cout<<"位置编号不存在!\n";
                            break;
                        }
                                                                //TODO

        //加入链表
        tempValue->next = NULL;
        addOnePre (tempValue);
                    cout<<"\n是否继续录入?(y/n)";
            getchar();
                    cin>>selectYNFlag;
        }
    writePre ( );
                cout<<"\n*****************************\n";
                    cout<<"录入完成\n";
                    cout<<"*****************************\n";
    }
void addOnePre (struct Pre *temp){
    //采用头插法
    if(preList == NULL){
        preList = temp;
    }else{
        temp->next = preList;
        preList = temp;
    }
    preCount ++;
}
//预约位置 删除
void delPre (){
                cout<<"请输入您要删除的 预约位置 序号(输入-1退出):";
        int index;
                cin>>index;
    
    if(index >= 0){
        int res = delPreByIndex (index);
        if(res){
                        cout<<"删除成功!\n\n";
                writePre ();
        }else{
                        cout<<"删除失败!\n\n";
            }
    }
}
//预约位置 根据下标删除
int delPreByIndex (int index){
    if(index > preCount || index < 1){
        return 0;//删除失败 ,数量没那么多
    }
    //开始删除!
    struct Pre *p = (struct Pre*)malloc(sizeof(struct Pre));
    struct Pre *q = preList;
    p->next = preList;
    if(index == 1){
        preList = preList ->next;
    }else{
        int i;
        for(i = 0;i < index-1 ; i++){
            p = p->next;
            q = q->next;
        }
        p->next = q->next;
    }
    preCount = preCount - 1;
    return 1;
}
//预约位置 修改
void modPre (){
                cout<<"请输入您要修改的预约位置 序号(输入-1退出):";
        int indexOfMod = -1,i;
                cin>>indexOfMod;
        if(indexOfMod > 0 && indexOfMod <= preCount ){
        //开始修改
        struct Pre *temp = preList ;
        for( i = 0;i < indexOfMod-1;i++){
            temp=temp->next;
        }
                                                     if(loginStatus==2){
                    strcpy(temp->student,loginStudent ->name);
                }else{
                                                cout<<"请输入学生 :";
                        char student[15];
                                cin>>student;
    
                                                                                                    if(getOneStudent ("name",student)==NULL){//检索不为空
                                    cout<<"学生 不存在!\n";
                            return;
                    }
                                                    }                                                                                                 cout<<"请输入位置编号 :";
                        char seat[15];
                                cin>>seat;
    
                                                                                                    if(getOneSeat ("numb",seat)==NULL){//检索不为空
                                    cout<<"位置编号 不存在!\n";
                            return;
                    }
                                                                //输入完毕,赋值
                                                                         strcpy(temp-> seat,seat);
                                                        cout<<"修改成功!\n";
            writePre ();
    }else{
                    cout<<"输入错误!\n";
        }
}
//预约位置 查找 如果all=1:查询全部 否则按条件查询
void findPre (int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    while(1){
        printf("\n%-5s%-15s%-15s\n\n","序号" ,"学生","位置编号" );
        int i=1,count = 0;
        if( preList ){
            //用于统计信息所用
                                                                                struct Pre *t = preList;
            while(t){
                int delFlag = 0;
                if(select == 0
                                                                                                                        || select == 1 && strstr(t->student,conCharArr) //根据学生,模糊查询
                                                                                                                                                        || select == 2 && strstr(t->seat,conCharArr) //根据位置编号,模糊查询
                                                                                        ){
                                         if(0
                                        //学生 只能查看和自己相关的预约位置
                    ||loginStatus == 2 && strcmp(t->student,loginStudent -> name)!=0
                                        ){
                        t=t->next;
                        delPreByIndex (i);//这个时候i不减减,因为continue了
                        continue;
                    }
                                                            printf("%-5d%-15s%-15s \n\n",i
                                                                    ,t->student
                                                ,t->seat
                                            );
                    //用于统计信息所用
                                                                                                                                count++;
                }else{
                    delFlag = 1;//删掉
                }
                t=t->next;
                if(delFlag){
                    delPreByIndex (i--);
                }
                i++;
            }
                        cout<<"共" << count <<"条结果\n";
                            cout<<"-----------------------------------------------------------------------------------------------------\n";
                                                                                                            cout<<"\n";
            }else{
                        cout<<"\n【无记录!】\n\n";
            }
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选:】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 学生 筛选\n";
                                                                cout<<"2:按 位置编号 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
    readPre();//从新读取数据。
}
//预约位置 排序
void sortPre (){
    int select,i,j;
                        cout<<"1:按 学生 排序\n";
                            cout<<"2:按 位置编号 排序\n";
                        cout<<"请输入选择:";
                    cin>>select;
        struct Pre *list[100];
    for(i = 0;i< preCount;i++){
        list[i] = preList;
        preList = preList ->next;
    }
    for( i = preCount -1;i>0;i--){
        for( j = 0;j < i;j++){
            if(	0
                                                || select == 1 && strcmp(list[j]->student , list[j+1]->student)>0
                                                                || select == 2 && strcmp(list[j]->seat , list[j+1]->seat)>0
                                            ){
                struct Pre *temp = (struct Pre*)malloc(sizeof(struct Pre));
                temp = list[j]; //交换位置
                list[j] = list[j+1];
                list[j+1] = temp;
            }

        }
    }
    for(i = 0;i< preCount -1;i++){
        list[i]->next = list[i+1];
    }
    list[ preCount -1 ]->next = NULL;
    preList = list[0];
    findPre (1);
    writePre ();
}

                                                        void menuAdmin (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                                                        cout<<"*-------------1 :查找图书管管理员\n";
                                cout<<"*-------------2 :排序图书管管理员\n";
                                                                cout<<"*-------------3 :添加学生\n";
                                                        cout<<"*-------------4 :删除学生\n";
                                                        cout<<"*-------------5 :修改学生\n";
                                                        cout<<"*-------------6 :查找学生\n";
                                cout<<"*-------------7 :排序学生\n";
                                                                cout<<"*-------------8 :添加座位\n";
                                                        cout<<"*-------------9 :删除座位\n";
                                                        cout<<"*-------------10 :修改座位\n";
                                                        cout<<"*-------------11 :查找座位\n";
                                cout<<"*-------------12 :排序座位\n";
                                                                cout<<"*-------------13 :添加预约位置\n";
                                                        cout<<"*-------------14 :删除预约位置\n";
                                                                    cout<<"*-------------15 :查找预约位置\n";
                                cout<<"*-------------16 :排序预约位置\n";
                                            cout<<"*-------------0:退出\n";
                                    cout<<"*------------(-1):登出\n";
                            cout<<"*------------(-2):我的\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }
                                                                void menuStudent (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                                                                                                                cout<<"*-------------1 :查找学生\n";
                                cout<<"*-------------2 :排序学生\n";
                                                                                                    cout<<"*-------------3 :查找座位\n";
                                cout<<"*-------------4 :排序座位\n";
                                                                cout<<"*-------------5 :添加预约位置\n";
                                                        cout<<"*-------------6 :删除预约位置\n";
                                                                    cout<<"*-------------7 :查找预约位置\n";
                                cout<<"*-------------8 :排序预约位置\n";
                                            cout<<"*-------------0:退出\n";
                                    cout<<"*------------(-1):登出\n";
                            cout<<"*------------(-2):我的\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }

C++面向对象

#include <iostream>
            #include  <vector>
            #include <fstream>
            #include <string.h>
            using namespace std; 
    

int compare(int a,int b);
int compare(const char *a,const char *b);


class Admin  //定义 图书管管理员 类
{
public:
    static vector< Admin*> dataList;
            char username[15] ; // 用户名
            char password[15] ; // 密码
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        static Admin* getOne(string name, string s);//存在判断函数
            static void modInfo();
    };
vector< Admin*> Admin::dataList;//必须类外初始化,用于存储图书管管理员
class Student  //定义 学生 类
{
public:
    static vector< Student*> dataList;
            char username[15] ; // 用户名
            char password[15] ; // 密码
            char name[15] ; // 名称
            char numb[18] ; // 编号
            char tele[16] ; // 电话
            char gender[8] ; // 性别
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        static Student* getOne(string name, string s);//存在判断函数
            static void modInfo();
    };
vector< Student*> Student::dataList;//必须类外初始化,用于存储学生
class Seat  //定义 座位 类
{
public:
    static vector< Seat*> dataList;
            char numb[18] ; // 座位编号
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        static Seat* getOne(string name, string s);//存在判断函数
        };
vector< Seat*> Seat::dataList;//必须类外初始化,用于存储座位
class Pre  //定义 预约位置 类
{
public:
    static vector< Pre*> dataList;
            char student[15] ; // 学生
            char seat[15] ; // 位置编号
        static void read();//读文件
    static void write();//写文件
    static void add();//添加
    static void del();//删除
    static void mod();//修改
    static void find(int all);//查找
    static void sort();//排序
        };
vector< Pre*> Pre::dataList;//必须类外初始化,用于存储预约位置

//定义菜单
void login();
void regist();
                        Admin *loginAdmin = NULL;
            void menuAdmin ();
                                Student *loginStudent = NULL;
            void menuStudent ();
                                    int loginStatus = 0;//意义 如:0 未登录 1 管理员 2 用户

    // 主函数
    int main(){
            //读取数据
                        Admin::read ();//读取图书管管理员
                            Student::read ();//读取学生
                            Seat::read ();//读取座位
                            Pre::read ();//读取预约位置
                while(1){
                                         cout<<"*---------------------------------------------*\n*------------1:登陆\n*------------2:注册\n*---------------------------------------------*\n请输入选择:";
                    int logout=0; //返回上一级标志
                int select =0;
                            cin>>select;
                    if(select!=2){
                    login();
                }else{
                    regist();
                }
                        int choice;
                                                                        if(loginStatus == 1)
                                                                             while(logout==0){     menuAdmin ();
                cin>>choice;
        switch(choice){
                                                                            case 1 :
                            Admin::find (0);//查找图书管管理员
                break;
                            case 2 :
                            Admin::sort ();//排序图书管管理员
                break;
                                                            case 3 :
                            Student::add ();//添加学生
                break;
                                                    case 4 :
                            Student::find (1);//查找学生
                                Student::del ();//删除学生
                break;
                                                    case 5 :
                            Student::find (1);//查找学生
                                Student::mod ();//修改学生
                break;
                                                    case 6 :
                            Student::find (0);//查找学生
                break;
                            case 7 :
                            Student::sort ();//排序学生
                break;
                                                            case 8 :
                            Seat::add ();//添加座位
                break;
                                                    case 9 :
                            Seat::find (1);//查找座位
                                Seat::del ();//删除座位
                break;
                                                    case 10 :
                            Seat::find (1);//查找座位
                                Seat::mod ();//修改座位
                break;
                                                    case 11 :
                            Seat::find (0);//查找座位
                break;
                            case 12 :
                            Seat::sort ();//排序座位
                break;
                                                            case 13 :
                            Pre::add ();//添加预约位置
                break;
                                                    case 14 :
                            Pre::find (1);//查找预约位置
                                Pre::del ();//删除预约位置
                break;
                                                                case 15 :
                            Pre::find (0);//查找预约位置
                break;
                            case 16 :
                            Pre::sort ();//排序预约位置
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                    case -1:
                        cout<<"\n";
                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        Admin::modInfo();//修改个人信息
                break;
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
    }                                                                                if(loginStatus == 2)
                                                                             while(logout==0){     menuStudent ();
                cin>>choice;
        switch(choice){
                                                                                                                                    case 1 :
                            Student::find (0);//查找学生
                break;
                            case 2 :
                            Student::sort ();//排序学生
                break;
                                                                                                case 3 :
                            Seat::find (0);//查找座位
                break;
                            case 4 :
                            Seat::sort ();//排序座位
                break;
                                                            case 5 :
                            Pre::add ();//添加预约位置
                break;
                                                    case 6 :
                            Pre::find (1);//查找预约位置
                                Pre::del ();//删除预约位置
                break;
                                                                case 7 :
                            Pre::find (0);//查找预约位置
                break;
                            case 8 :
                            Pre::sort ();//排序预约位置
                break;
                                            case 0:
                    cout<<"\n\n\n\t\t\t感谢使用\n\n\n";
            exit(0);
                    case -1:
                        cout<<"\n";
                logout =1;
            loginStatus = 0;
            break;
            case -2:
                        Student::modInfo();//修改个人信息
                break;
                default :
        getchar();
                    cout<<"\n\n\n\t提示:没有这个选项!请重新输入!\n\n\n\n";
            system("pause");
        break;
    }
    }                                                                                                                                }
        return 0;
    }


			void login(){
		int i;
		while(loginStatus==0){
			char username[20],password[20];
                        cout<<"请输入账号:";
    			            cin>>username;
                            cout<<"请输入密码:";
                            cin>>password;
    			                                                // 图书管管理员 登录
            if(loginStatus==0){
                Admin *admin = new Admin;
                for(int i = 0 ;i < Admin::dataList.size();i++){
                    if(strcmp(username,Admin::dataList[i]->username)==0){
                        if(strcmp(password,Admin::dataList[i]->password)==0){
                            loginAdmin = Admin::dataList[i];
                            loginStatus = 1;
                            break;
                        }
                    }
                }
            }
                                            // 学生 登录
            if(loginStatus==0){
                Student *student = new Student;
                for(int i = 0 ;i < Student::dataList.size();i++){
                    if(strcmp(username,Student::dataList[i]->username)==0){
                        if(strcmp(password,Student::dataList[i]->password)==0){
                            loginStudent = Student::dataList[i];
                            loginStatus = 2;
                            break;
                        }
                    }
                }
            }
                                                                			//判断登录情况
			if(loginStatus == 0){
				            cout<<"\n用户名密码错误请重新登录!\n\n";
    			} else{
				            cout<<"\n登录成功!\n\n";
    ;
			}
		}
	}
	void regist(){
		int flag = 0;//注册状态 0 失败 ,1 成功
		while(flag ==0){
			            cout<<"*---------------------------------------------*\n*------------0:返回 \n";
    			                                                cout<<"*------------1:注册图书管管理员 \n";
                    			                                                cout<<"*------------2:注册学生 \n";
                    			                			                			                        cout<<"*---------------------------------------------*\n请输入选择:";
    			int select = 0;
			            cin>>select;
    ;
			if(select == 0){
				flag = 1;//返回
			} else{
			char username[20],password[20];
                        cout<<"请输入账号:";
                            cin>>username;
    ;
                        cout<<"请输入密码:";
                            cin>>password;
    			                                                if( select == 1 ){
                if( Admin::getOne ("username",username)!=NULL) { //根据用户名查找
                    cout<<"\n用户名已存在!\n\n";
                }else{
                    Admin *temp = new Admin;
                    strcpy( temp->username,username);
                    strcpy( temp->password,password);
                                                                                                                                                    loginAdmin = temp;
                    Admin::dataList.push_back(temp);
                    loginStatus = 1;
                    Admin::write ();
                    flag = 1;
                }
            }
                                            if( select == 2 ){
                if( Student::getOne ("username",username)!=NULL) { //根据用户名查找
                    cout<<"\n用户名已存在!\n\n";
                }else{
                    Student *temp = new Student;
                    strcpy( temp->username,username);
                    strcpy( temp->password,password);
                                                                                                                                                                                                                 cout<<"请输入名称 :";
                            cin>>temp->name ;
                                                                                                                                                         cout<<"请输入编号 :";
                            cin>>temp->numb ;
                                                                                                                                                         cout<<"请输入电话 :";
                            cin>>temp->tele ;
                                                                                                                                                         cout<<"请输入性别 :";
                            cin>>temp->gender ;
                                                                                            loginStudent = temp;
                    Student::dataList.push_back(temp);
                    loginStatus = 2;
                    Student::write ();
                    flag = 1;
                }
            }
                                                                			if(flag == 1)
                            cout<<"注册成功\n\n";
    			else
                            cout<<"注册失败!\n\n";
    			}
		}
	}
	
void Admin::modInfo(){
    cout << "\n====您的个人信息如下====\n";
        cout << "用户名:" << loginAdmin ->username << endl;
        cout << "密码:" << loginAdmin ->password << endl;
        cout << "==========================\n1,修改个人信息\n2,返回上一级\n请选择:";
    char n;
    cin >> n;
    if (n == '1') {
                                cout << "请输入密码:";
        cin>>loginAdmin ->password;
                for (int i = 0; i < Admin::dataList.size(); i++) {
            if (strcmp(Admin::dataList[i]->username, loginAdmin ->username) == 0) {
                Admin::dataList[i] = loginAdmin;
                break;
            }
        }
        Admin::write();
        cout << "修改成功!\n";
    }
}
//是否存在判断
Admin* Admin::getOne(string name, string s) {
    for (int i = 0; i < dataList.size();i++) {
                                if( strcmp(name.c_str(),"username")==0 && strcmp(s.c_str(), dataList[i]->username )==0){
                return dataList[i];
            }
                                            }
    return NULL;
}
//读取文件内的图书管管理员
void Admin::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Admin.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建图书管管理员对象
        Admin *t = new Admin;
        //读取数据到p
        if(fscanf(fp, "%s%s"
             ,t->username  ,t->password 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//图书管管理员 写入文件
void Admin::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Admin.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Admin *t = dataList.at(i);
        fprintf(fp,"%s %s\n"
             ,t->username  ,t->password );
    }
    fclose(fp);
}
//图书管管理员 添加记录
void Admin::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Admin *tempValue = new Admin (); //必须重新分配地址空间。
                                                         cout<<"请输入用户名 :";
                    char username[15];                     cin>>username ;
                                            strcpy(tempValue->username,username);
                                                                 Admin* oneusername = getOne("username",tempValue->username);
                        if(oneusername!=NULL){//检索不为空
                        cout<<("用户名已存在!\n");
                        break;
                    }
                                                                                                                             cout<<"请输入密码 :";
                    char password[15];                     cin>>password ;
                                            strcpy(tempValue->password,password);
                                                                                                        //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//图书管管理员 删除
void Admin::del() {
    cout<<"请输入您要删除的 图书管管理员 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//图书管管理员 修改
void Admin::mod() {
    cout<<"请输入您要修改的图书管管理员 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Admin *temp = dataList.at(indexOfMod);
                                                                             cout<<"请输入密码 :";
                    char password[15];
                    cin>> password ;
                                                                                                                            //输入完毕,赋值
                                                                         strcpy(temp-> password,password);
                                            cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//图书管管理员 查找 如果all=1:查询全部 否则按条件查询
void Admin :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Admin*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-15s%-15s\n\n","序号" ,"用户名","密码" );
        int count = 0;
        //用于统计信息所用
                                                        for(int i = 0;i < dataList2.size();i++){
            Admin* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->username,conCharArr) //根据用户名,模糊查询
                                                                                                            ){
                                            printf("%-5d%-15s%-15s \n\n",i
                                                        ,t->username
                                        ,t->password
                                    );
                //用于统计信息所用
                                                                                                        count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                                                cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 用户名 筛选\n";
                                                                cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//图书管管理员 排序
void Admin::sort(){
    int select,i,j;
            cout<<"1:按 用户名 排序\n";
            cout<<"2:按 密码 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->username , dataList[j+1]->username )>0
                                || select == 2 && compare(dataList[j]->password , dataList[j+1]->password )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}
void Student::modInfo(){
    cout << "\n====您的个人信息如下====\n";
        cout << "用户名:" << loginStudent ->username << endl;
        cout << "密码:" << loginStudent ->password << endl;
        cout << "名称:" << loginStudent ->name << endl;
        cout << "编号:" << loginStudent ->numb << endl;
        cout << "电话:" << loginStudent ->tele << endl;
        cout << "性别:" << loginStudent ->gender << endl;
        cout << "==========================\n1,修改个人信息\n2,返回上一级\n请选择:";
    char n;
    cin >> n;
    if (n == '1') {
                                cout << "请输入密码:";
        cin>>loginStudent ->password;
                        cout << "请输入名称:";
        cin>>loginStudent ->name;
                        cout << "请输入编号:";
        cin>>loginStudent ->numb;
                        cout << "请输入电话:";
        cin>>loginStudent ->tele;
                        cout << "请输入性别:";
        cin>>loginStudent ->gender;
                for (int i = 0; i < Student::dataList.size(); i++) {
            if (strcmp(Student::dataList[i]->username, loginStudent ->username) == 0) {
                Student::dataList[i] = loginStudent;
                break;
            }
        }
        Student::write();
        cout << "修改成功!\n";
    }
}
//是否存在判断
Student* Student::getOne(string name, string s) {
    for (int i = 0; i < dataList.size();i++) {
                                if( strcmp(name.c_str(),"username")==0 && strcmp(s.c_str(), dataList[i]->username )==0){
                return dataList[i];
            }
                                                                if( strcmp(name.c_str(),"name")==0 && strcmp(s.c_str(), dataList[i]->name )==0){
                return dataList[i];
            }
                                            if( strcmp(name.c_str(),"numb")==0 && strcmp(s.c_str(), dataList[i]->numb )==0){
                return dataList[i];
            }
                                                                }
    return NULL;
}
//读取文件内的学生
void Student::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Student.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建学生对象
        Student *t = new Student;
        //读取数据到p
        if(fscanf(fp, "%s%s%s%s%s%s"
             ,t->username  ,t->password  ,t->name  ,t->numb  ,t->tele  ,t->gender 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//学生 写入文件
void Student::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Student.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Student *t = dataList.at(i);
        fprintf(fp,"%s %s %s %s %s %s\n"
             ,t->username  ,t->password  ,t->name  ,t->numb  ,t->tele  ,t->gender );
    }
    fclose(fp);
}
//学生 添加记录
void Student::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Student *tempValue = new Student (); //必须重新分配地址空间。
                                                         cout<<"请输入用户名 :";
                    char username[15];                     cin>>username ;
                                            strcpy(tempValue->username,username);
                                                                 Student* oneusername = getOne("username",tempValue->username);
                        if(oneusername!=NULL){//检索不为空
                        cout<<("用户名已存在!\n");
                        break;
                    }
                                                                                                                             cout<<"请输入密码 :";
                    char password[15];                     cin>>password ;
                                            strcpy(tempValue->password,password);
                                                                                                                                                 cout<<"请输入名称 :";
                    char name[15];                     cin>>name ;
                                            strcpy(tempValue->name,name);
                                                                 Student* onename = getOne("name",tempValue->name);
                        if(onename!=NULL){//检索不为空
                        cout<<("名称已存在!\n");
                        break;
                    }
                                                                                                                             cout<<"请输入编号 :";
                    char numb[18];                     cin>>numb ;
                                            strcpy(tempValue->numb,numb);
                                                                 Student* onenumb = getOne("numb",tempValue->numb);
                        if(onenumb!=NULL){//检索不为空
                        cout<<("编号已存在!\n");
                        break;
                    }
                                                                                                                             cout<<"请输入电话 :";
                    char tele[16];                     cin>>tele ;
                                            strcpy(tempValue->tele,tele);
                                                                                                                                                 cout<<"请输入性别 :";
                    char gender[8];                     cin>>gender ;
                                            strcpy(tempValue->gender,gender);
                                                                                                        //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//学生 删除
void Student::del() {
    cout<<"请输入您要删除的 学生 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//学生 修改
void Student::mod() {
    cout<<"请输入您要修改的学生 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Student *temp = dataList.at(indexOfMod);
                                                                             cout<<"请输入密码 :";
                    char password[15];
                    cin>> password ;
                                                                                                                                                                     cout<<"请输入名称 :";
                    char name[15];
                    cin>> name ;
                                                            if(compare(temp->name,name) != 0 && getOne("name",name)!=NULL){//检索不为空
                        cout<<("名称 已存在!\n");
                        return;
                    }
                                                                                                                                                                     cout<<"请输入电话 :";
                    char tele[16];
                    cin>> tele ;
                                                                                                                                                                     cout<<"请输入性别 :";
                    char gender[8];
                    cin>> gender ;
                                                                                                                            //输入完毕,赋值
                                                                         strcpy(temp-> password,password);
                                                                                 strcpy(temp-> name,name);
                                                                                                     strcpy(temp-> tele,tele);
                                                                                 strcpy(temp-> gender,gender);
                                            cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//学生 查找 如果all=1:查询全部 否则按条件查询
void Student :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Student*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-15s%-15s%-15s%-18s%-16s%-8s\n\n","序号" ,"用户名","密码","名称","编号","电话","性别" );
        int count = 0;
        //用于统计信息所用
                                                                                                                                        for(int i = 0;i < dataList2.size();i++){
            Student* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->username,conCharArr) //根据用户名,模糊查询
                                                                                                                                                                    || select == 2 && strstr(t->name,conCharArr) //根据名称,模糊查询
                                                                                                                                || select == 3 && strstr(t->numb,conCharArr) //根据编号,模糊查询
                                                                                                                                                                    || select == 4 && strstr(t->gender,conCharArr) //根据性别,模糊查询
                                                                        ){
                                            printf("%-5d%-15s%-15s%-15s%-18s%-16s%-8s \n\n",i
                                                        ,t->username
                                        ,t->password
                                        ,t->name
                                        ,t->numb
                                        ,t->tele
                                        ,t->gender
                                    );
                //用于统计信息所用
                                                                                                                                                                                                                                                        count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                                                                                                                                cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 用户名 筛选\n";
                                                                                    cout<<"2:按 名称 筛选\n";
                                                                cout<<"3:按 编号 筛选\n";
                                                                                    cout<<"4:按 性别 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ||select==3 ||select==4 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//学生 排序
void Student::sort(){
    int select,i,j;
            cout<<"1:按 用户名 排序\n";
            cout<<"2:按 密码 排序\n";
            cout<<"3:按 名称 排序\n";
            cout<<"4:按 编号 排序\n";
            cout<<"5:按 电话 排序\n";
            cout<<"6:按 性别 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->username , dataList[j+1]->username )>0
                                || select == 2 && compare(dataList[j]->password , dataList[j+1]->password )>0
                                || select == 3 && compare(dataList[j]->name , dataList[j+1]->name )>0
                                || select == 4 && compare(dataList[j]->numb , dataList[j+1]->numb )>0
                                || select == 5 && compare(dataList[j]->tele , dataList[j+1]->tele )>0
                                || select == 6 && compare(dataList[j]->gender , dataList[j+1]->gender )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}
//是否存在判断
Seat* Seat::getOne(string name, string s) {
    for (int i = 0; i < dataList.size();i++) {
                                if( strcmp(name.c_str(),"numb")==0 && strcmp(s.c_str(), dataList[i]->numb )==0){
                return dataList[i];
            }
                        }
    return NULL;
}
//读取文件内的座位
void Seat::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Seat.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建座位对象
        Seat *t = new Seat;
        //读取数据到p
        if(fscanf(fp, "%s"
             ,t->numb 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//座位 写入文件
void Seat::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Seat.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Seat *t = dataList.at(i);
        fprintf(fp,"%s\n"
             ,t->numb );
    }
    fclose(fp);
}
//座位 添加记录
void Seat::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Seat *tempValue = new Seat (); //必须重新分配地址空间。
                                                         cout<<"请输入座位编号 :";
                    char numb[18];                     cin>>numb ;
                                            strcpy(tempValue->numb,numb);
                                                                 Seat* onenumb = getOne("numb",tempValue->numb);
                        if(onenumb!=NULL){//检索不为空
                        cout<<("座位编号已存在!\n");
                        break;
                    }
                                                                                    //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//座位 删除
void Seat::del() {
    cout<<"请输入您要删除的 座位 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//座位 修改
void Seat::mod() {
    cout<<"请输入您要修改的座位 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Seat *temp = dataList.at(indexOfMod);
                                    //输入完毕,赋值
                                    cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//座位 查找 如果all=1:查询全部 否则按条件查询
void Seat :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Seat*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-18s\n\n","序号" ,"座位编号" );
        int count = 0;
        //用于统计信息所用
                                    for(int i = 0;i < dataList2.size();i++){
            Seat* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->numb,conCharArr) //根据座位编号,模糊查询
                                                                        ){
                                            printf("%-5d%-18s \n\n",i
                                                        ,t->numb
                                    );
                //用于统计信息所用
                                                                    count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                            cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 座位编号 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//座位 排序
void Seat::sort(){
    int select,i,j;
            cout<<"1:按 座位编号 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->numb , dataList[j+1]->numb )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}
//读取文件内的预约位置
void Pre::read() {
    FILE *fp = NULL;
    if (NULL == (fp = fopen("Pre.txt", "r")))//读打开
    {
        //文件不存在,不读取
        return;
    }
    //从文件读取数据
    dataList.clear();
    while (1)//读取
    {
        //新建预约位置对象
        Pre *t = new Pre;
        //读取数据到p
        if(fscanf(fp, "%s%s"
             ,t->student  ,t->seat 
        ) == EOF)  {
            break;
        }
        dataList.push_back(t);//将内容加入vector
    }
    fclose(fp);
}
//预约位置 写入文件
void Pre::write() {
    //打开文件
    FILE *fp = NULL;
    fp = fopen("Pre.txt", "w+");
    //写入
    for (int i = 0; i < dataList.size(); i++) {
        Pre *t = dataList.at(i);
        fprintf(fp,"%s %s\n"
             ,t->student  ,t->seat );
    }
    fclose(fp);
}
//预约位置 添加记录
void Pre::add() {
    char selectYNFlag = 'y';
    while(selectYNFlag == 'y' || selectYNFlag == 'Y' ){
        cout<<"\n";
        Pre *tempValue = new Pre (); //必须重新分配地址空间。
                                if(loginStatus==2){
                strcpy(tempValue->student,loginStudent ->name);
            }else{
                                                 cout<<"请输入学生 :";
                    char student[15];                     cin>>student ;
                                            strcpy(tempValue->student,student);
                                                                                    Student* studentTemp = Student :: getOne("name",tempValue->student);
                        if(studentTemp==NULL){//检索不为空
                        cout<<("学生不存在!\n");
                        break;
                        }
                                                            }                                                                     cout<<"请输入位置编号 :";
                    char seat[15];                     cin>>seat ;
                                            strcpy(tempValue->seat,seat);
                                                                                    Seat* seatTemp = Seat :: getOne("numb",tempValue->seat);
                        if(seatTemp==NULL){//检索不为空
                        cout<<("位置编号不存在!\n");
                        break;
                        }
                                                                //TODO,

        //加入记录
        dataList.push_back(tempValue);
        cout<<"\n是否继续录入?(y/n)";
        getchar();
        cin>>selectYNFlag;
    }
    //写入文件
    write();
    cout<<"\n*****************************\n";
    cout<<"录入结束\n";
    cout<<"*****************************\n";
}
//预约位置 删除
void Pre::del() {
    cout<<"请输入您要删除的 预约位置 序号(输入-1退出):";
    char c;
    cin >> c;
    int index = c - '0';
    if (index >= 0 && index < dataList.size()) {
        dataList.erase(dataList.begin()+index);
        write();
        cout << "删除成功!\n\n";
    }
    else if(index>0){
        cout << "请输入正确序号!\n\n";
    }
}

//预约位置 修改
void Pre::mod() {
    cout<<"请输入您要修改的预约位置 序号(输入-1退出):";
    char c;
    cin >> c;
    int indexOfMod = c - '0';
    if(indexOfMod >= 0 && indexOfMod < dataList.size() ){
        //开始修改
        Pre *temp = dataList.at(indexOfMod);
                                                     if(loginStatus==2){
                    strcpy(temp->student,loginStudent ->name);
                }else{
                                    cout<<"请输入学生 :";
                    char student[15];
                    cin>> student ;
                                                                                                    if(Student :: getOne("name",student)==NULL){//检索不为空
                        cout<<("学生 不存在!\n");
                        return;
                    }
                                                    }                                                                                     cout<<"请输入位置编号 :";
                    char seat[15];
                    cin>> seat ;
                                                                                                    if(Seat :: getOne("numb",seat)==NULL){//检索不为空
                        cout<<("位置编号 不存在!\n");
                        return;
                    }
                                                                //输入完毕,赋值
                                                                         strcpy(temp-> seat,seat);
                                            cout<<"修改成功!\n";
        write();
    }else{
        cout<<"输入错误!\n";
    }
}
//预约位置 查找 如果all=1:查询全部 否则按条件查询
void Pre :: find(int all){
    int select = 0;
    char conCharArr[40];
    double conNum1,conNum2;
    //复制一个容器dataList2,查询的操作再dataList2里面进行
    vector<Pre*> dataList2 = dataList;
    while(1){
        printf("\n%-5s%-15s%-15s\n\n","序号" ,"学生","位置编号" );
        int count = 0;
        //用于统计信息所用
                                                        for(int i = 0;i < dataList2.size();i++){
            Pre* t = dataList2.at(i);
            if(select == 0
                                                                                                    || select == 1 && strstr(t->student,conCharArr) //根据学生,模糊查询
                                                                                                                                || select == 2 && strstr(t->seat,conCharArr) //根据位置编号,模糊查询
                                                                        ){
                             if(0
                                            //学生 只能查看和自己相关的预约位置
                        ||loginStatus == 2 && strcmp(t->student,loginStudent -> name)!=0
                                        ){
                    dataList2.erase(dataList2.begin()+i);//删除
                    i--;
                    continue;
                }
                                            printf("%-5d%-15s%-15s \n\n",i
                                                        ,t->student
                                        ,t->seat
                                    );
                //用于统计信息所用
                                                                                                        count++;
            }else {
                dataList2.erase(dataList2.begin()+i);
                i--;
            }
        }
        cout<<"共"<< count <<"条结果\n";
        cout<<("-----------------------------------------------------------------------------------------------------\n");
                                                                cout<<"\n";
        //如果参数all为1,则表示列出所有就退出
        if(all == 1)break;
        //进入过滤。
                    cout<<"【筛选器:你可以在以上结果的基础上,进行以下条件筛选】\n";
                        cout<<"0:退出\n";
                                                    cout<<"1:按 学生 筛选\n";
                                                                cout<<"2:按 位置编号 筛选\n";
                                            cout<<"请输入选择:";
                        cin>>select;
            if(select>0){
            if(0  ||select==1 ||select==2 ){
                            cout<<"请输入筛选条件:";
                                cin>>conCharArr;
                }else if(0 ){
                            cout<<"请输入筛选范围m,n,用空格隔开(m ≤X ≤n):";
                                cin>>conNum1;
                cin>>conNum2;
                }
        }else{
            break;
        }
    }
}
//预约位置 排序
void Pre::sort(){
    int select,i,j;
            cout<<"1:按 学生 排序\n";
            cout<<"2:按 位置编号 排序\n";
        cout<<"请输入选择:";
    cin>>select;
    for (i = dataList.size() - 1; i > 0; i--) {
        for( j = 0;j < i;j++){
            if(	0
                                || select == 1 && compare(dataList[j]->student , dataList[j+1]->student )>0
                                || select == 2 && compare(dataList[j]->seat , dataList[j+1]->seat )>0
                            ){
                swap(dataList[j], dataList[j + 1]);
            }
        }
    }
    find(1);//排序后打印
    write();
}

                                                        void menuAdmin (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                                                        cout<<"*-------------1 :查找图书管管理员\n";
                                cout<<"*-------------2 :排序图书管管理员\n";
                                                                cout<<"*-------------3 :添加学生\n";
                                                        cout<<"*-------------4 :删除学生\n";
                                                        cout<<"*-------------5 :修改学生\n";
                                                        cout<<"*-------------6 :查找学生\n";
                                cout<<"*-------------7 :排序学生\n";
                                                                cout<<"*-------------8 :添加座位\n";
                                                        cout<<"*-------------9 :删除座位\n";
                                                        cout<<"*-------------10 :修改座位\n";
                                                        cout<<"*-------------11 :查找座位\n";
                                cout<<"*-------------12 :排序座位\n";
                                                                cout<<"*-------------13 :添加预约位置\n";
                                                        cout<<"*-------------14 :删除预约位置\n";
                                                                    cout<<"*-------------15 :查找预约位置\n";
                                cout<<"*-------------16 :排序预约位置\n";
                                            cout<<"*-------------0:退出\n";
                                    cout<<"*------------(-1):登出\n";
                            cout<<"*------------(-2):我的\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }
                                                                void menuStudent (){
        //菜单
                    cout<<"*------------------主菜单---------------------*\n";
                                                                                                                                                cout<<"*-------------1 :查找学生\n";
                                cout<<"*-------------2 :排序学生\n";
                                                                                                    cout<<"*-------------3 :查找座位\n";
                                cout<<"*-------------4 :排序座位\n";
                                                                cout<<"*-------------5 :添加预约位置\n";
                                                        cout<<"*-------------6 :删除预约位置\n";
                                                                    cout<<"*-------------7 :查找预约位置\n";
                                cout<<"*-------------8 :排序预约位置\n";
                                            cout<<"*-------------0:退出\n";
                                    cout<<"*------------(-1):登出\n";
                            cout<<"*------------(-2):我的\n";
                                cout<<"*---------------------------------------------*\n";
                        cout<<"请输入选择:";
        }
                                                                
//对比函数
int compare(int a,int b){
	return a-b;
}
int compare(const char *a,const char *b){
	return strcmp(a,b);
}

系统部分截图

 

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值