结构体: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);
}
系统部分截图