📄 liabrary.c
字号:
for(i = 0; i < total; i++)
{
if(strstr(p->name,n) != NULL)
{
flag = 0;
printM(p); /*调用打印会员信息函数*/
printf("\n确定要删除吗?\n是输入1,否输入2.\n\n请选择:");
scanf("%d",&t);
if(t == 1) /*删除该会员对应指针节点*/
{
if(p == membershead)
{
p3 = p;
membershead = p2;
p = membershead;
p1 = p;
if(p2 != NULL)
p2 = p2->nextM;
totalMember--;
printf("\t%s成功删除",p3->memberID);
}
else
{
p3 =p;
p1->nextM = p->nextM;
p = p->nextM;
if(p2 != NULL)
p2 = p2->nextM;
totalMember--;
printf("\t%s成功删除",p3->memberID);
}
}
else
{
p1 = p;
p = p->nextM;
if(p2 !=NULL)
p2 = p2->nextM;
}
}
else
{
p1 = p;
p = p->nextM;
if(p2 !=NULL)
p2 = p2->nextM;
}
}
}
if((flag == 1) && (totalMember != 0))
printf("\t会员不存在.\n");
}
void delByMID() //按会员ID删除会员函数
{
char ID[20];
int i, t, flag = 1,total = totalMember;
Member *p, *p1, *p2, *p3;
if(totalMember == 0)
printf("\t没有注册会员.\n\n");
else
{
printf("输入要删除的会员的ID:");
scanf("%s",ID);
p = membershead;
p1 = p;
p2 = p->nextM;
for(i = 0; i < total; i++)
{
if(strcmp(p->memberID,ID) == 0)
{
flag = 0;
printM(p); /*调用打印会员信息函数*/
printf("\n确定要删除吗?\n是输入1,否输入2.\n\n请选择:");
scanf("%d",&t);
if(t == 1)
{
if(p == membershead) /*删除该会员结点指针*/
{
p3 = p;
membershead = p2;
totalMember--;
printf("\t%s成功删除",p3->memberID);break;
}
else
{
p3 =p;
p1->nextM = p->nextM;
totalMember--;
printf("\t%s成功删除",p3->memberID);break;
}
}
else
{
p1 = p;
p = p->nextM;
if(p2 !=NULL)
p2 = p2->nextM;
}
}
else
{
p1 = p;
p = p->nextM;
if(p2 !=NULL)
p2 = p2->nextM;
}
}
}
if((flag == 1) && (totalMember != 0))
printf("\tID不存在.\n");
}
void delMember() //删除会员函数
{
int n;
for(n = 1; n != 0; )
{
menu6(); /*调用删除会员目录函数*/
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
delByMName();break; /*按会员名查找并删除*/
case 2:
delByMID();break; /*按会员ID查找并删除*/
case 0:
break; /*返回上一层*/
default:
printf("输入有误,请重新输入.");break;
}
}
}
void listBook() //列出所有图书信息函数
{
Book *p;
int i;
p = bookshead;
if(totalBook == 0)
{
printf("\t图书库没有书.\n");
getch();
}
else
{
printf("图书列表如下:");
for(i = 0; i < totalBook; i++)
{
printB(p); /*调用打印图书信息函数*/
p = p->nextB;
}
getch();
}
}
void listMember() //列出所有会员信息函数
{
Member *m;
int i;
m = membershead;
if(totalMember == 0)
{
printf("\t没有注册会员.\n\n");
getch();
}
else
{
printf("会员列表如下:");
for(i = 0; i < totalMember; i++)
{
printM(m); /*调用打印会员信息函数*/
m = m->nextM;
}
getch();
}
}
void rewritepassword1(Manager *p) //修改当前管理员密码函数
{
char passw0[100], passw1[100], passw2[100];
int i = 0, flag = 0, t = 1;
for( ; t == 1; )
{
printf("\t旧密码:");
for(i = 0 ; ; )
{
passw0[i] = getch();
if(passw0[i] == '\r')
break;
else
{
if(i == 0)
{
if(passw0[i] == 8)
;
else
{
i++;
printf("*");
}
}
else
{
if(passw0[i] == 8)
{
i--;
printf("\b \b");
}
else
{
i++;
printf("*");
}
}
}
}
passw0[i]='\0';
printf("\n\t新密码(6位,英文字母或0-9的数字组成):"); /*输入新密码*/
for(i = 0 ; ; )
{
passw1[i] = getch();
if(passw1[i] == '\r')
break;
else
{
if(i == 0)
{
if(passw1[i] == 8)
;
else
{
i++;
printf("*");
}
}
else
{
if(passw1[i] == 8)
{
i--;
printf("\b \b");
}
else
{
i++;
printf("*");
}
}
}
}
passw1[i]='\0';
printf("\n\t再次输入新密码:"); /*再次输入确认新密码*/
for(i = 0 ; ; )
{
passw2[i] = getch();
if(passw2[i] == '\r')
break;
else
{
if(i == 0)
{
if(passw2[i] == 8)
;
else
{
i++;
printf("*");
}
}
else
{
if(passw2[i] == 8)
{
i--;
printf("\b \b");
}
else
{
i++;
printf("*");
}
}
}
}
passw2[i]='\0';
if(strcmp(passw0,p->password) == 0) /*检验两次新密码的输入是否一致*/
{
if(strcmp(passw1,passw2) == 0)
{
flag = 1;break;
}
else
printf("\n两次输入的密码不一样.\n");
}
else
printf("\n密码错误.\n");
}
if(flag == 1) /*调用strcpy() 函数修改密码*/
{
strcpy(p->password,passw1);
printf("\n密码修改成功!");
}
getch();
}
int textManagerID(char ID[]) //验证管理员ID函数
{
Manager *p;
int i;
if(totalManager == 0)
return 0;
else
{
p = managershead;
for(i = 0; i < totalManager; i++)
{
if(strcmp(p->name,ID) == 0)
return 1;
else
p = p->next;
}
return 0;
}
return 0;
}
void newmanager() //创建新管理员函数
{
Manager *p, *p1;
int i = 0;
char name[21];
char n[21];
char passw1[100], passw2[100];
struct MANAGER *next = NULL;
p = (Manager*)malloc(sizeof(Manager));
printf("管理员ID:");
scanf("%s",name);
printf("\t密码(6位,英文字母或0-9的数字组成):");
for(i = 0 ; ; )
{
passw1[i] = getch();
if(passw1[i] == '\r')
break;
else
{
if(i == 0)
{
if(passw1[i] == 8)
;
else
{
i++;
printf("*");
}
}
else
{
if(passw1[i] == 8)
{
i--;
printf("\b \b");
}
else
{
i++;
printf("*");
}
}
}
}
passw1[i]='\0';
printf("\n\t再次输入密码:");
for(i = 0 ; ; )
{
passw2[i] = getch();
if(passw2[i] == '\r')
break;
else
{
if(i == 0)
{
if(passw2[i] == 8)
;
else
{
i++;
printf("*");
}
}
else
{
if(passw2[i] == 8)
{
i--;
printf("\b \b");
}
else
{
i++;
printf("*");
}
}
}
}
passw2[i]='\0';
for( ; textManagerID(name) == 1; )
{
printf("\n管理员ID已存在,请重新输入.\n");
printf("\t管理员ID:");
scanf("%s",n);
strcpy(name,n);
}
for( ; strcmp(passw1,passw2) != 0; )
{
printf("\n\t两次输入的密码不一样,请重新输入.");
printf("\n\t密码(6位,英文字母或0-9的数字组成):");
while((passw1[i] = getch()) != '\r')
{
i++;
printf("*");
}
passw1[i] = '\0';
i = 0; /*把i重新置零*/
printf("\n\t再次输入密码:");
while((passw2[i] = getch())!='\r')
{
i++;
printf("*");
}
passw2[i] = '\0';
i = 0; /*把i重新置零*/
}
strcpy(p->name,name);
strcpy(p->password,passw1);
if(totalManager == 0)
{
managershead = p;
totalManager++;
printf("管理员申请成功!\n");
getch();
}
else
{
p1 = managershead;
for(i = 1; i < totalManager; i++)
p1 = p1->next;
p1->next = p;
totalManager++;
printf("管理员申请成功!");
getch();
}
}
void manager() //管理员函数
{
int n;
Manager *mp;
mp = enterpassword1();
if(mp != NULL)
{
for(n = 1; n != 0; )
{
menu2(); /*调用显示管理员目录函数*/
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
addBook();break; /*新增一本图书,调用对应函数*/
case 2:
delBook();break; /*删除图书,调用对应函数*/
case 3:
consultBook();break; /*查询图书,调用对应函数*/
case 4:
consultMember();break; /*查询会员,调用对应函数*/
case 5:
delMember();break; /*删除会员,调用对应函数*/
case 6:
listBook();break; /*查看所有图书信息,调用对应函数*/
case 7:
listMember();break; /*查看所有会员信息,调用对应函数*/
case 8:
rewritepassword1(mp);break; /*修改管理员密码,调用对应函数*/
case 9:
newmanager();break; /*创建新管理员,调用对应函数*/
case 0:
break; /*返回上一层*/
default :
printf("输入有误,请重新输入.");break;
}
}
}
}
Book* loadBook() //从文件载入图书信息
{
FILE *fp;
int i;
Book *p, *p1;
fp = fopen("books.txt", "r");
if (fp == NULL)
{
printf("Can't open books.txt");
return NULL;
}
fscanf(fp,"%d%*c",&totalBook);
p = (Book*)malloc(sizeof(Book));
bookshead = p;
if(totalBook != 0)
fscanf(fp,"%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",p->name,p->author,p->year,p->publisher,&p->page,&p->status,&p->bookNum,&p->price);//*c是为了除去回车键
for(i = 1; i < totalBook; i++)
{
p1 = p;
p = (Book*)malloc(sizeof(Book));
p1->nextB = p;
fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",p->name,p->author,p->year,p->publisher,&p->page,&p->status,&p->bookNum,&p->price);//*c是为了除去回车键
}
fclose(fp);
printf("图书载入成功!\n");
return bookshead;
}
Member* loadMember() //从文件载入读者信息
{
FILE *fp;
int i, j;
Member *p, *p1;
Book b;
fp = fopen("members.txt", "r");
if (fp == NULL)
{
printf("Can't open books.txt");
return NULL;
}
fscanf(fp,"%d%*c",&totalMember);
p = (Member*)malloc(sizeof(Member));
membershead = p;
if(totalMember != 0)
{
fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c",p->name,p->memberID,p->password,p->phoneNum,&p->borrowNum,&p->sex);//*c是为了除去回车键
for(j = 0; j < p->borrowNum; j++)
{
b = p->book[j];
fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",b.name,b.author,b.year,b.publisher,&b.page,&b.status,&b.bookNum,&b.price);//*c是为了除去回车键
}
}
for(i = 1; i < totalMember; i++)
{
p1 = p;
p = (Member*)malloc(sizeof(Member));
p1->nextM = p;
fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c",p->name,p->memberID,p->password,p->phoneNum,&p->borrowNum,&p->sex);//*c是为了除去回车键
for(j = 0; j < p->borrowNum; j++)
{
b = p->book[j];
fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",b.name,b.author,b.year,b.publisher,&b.page,&b.status,&b.bookNum,&b.price);//*c是为了除去回车键
}
}
fclose(fp);
printf("读者载入成功!\n");
return membershead;
}
void menu1() //显示图书管理系统主界面目录函数
{
system("cls");
printf("--------------欢迎进入图书管理系统---------------\n");
printf("\t注册会员:%ld",totalMember);
printf("\t\t藏书量:%ld\n",totalBook);
printf("\t\t1)管理员登陆.\n");
printf("\t\t2)会员登陆.\n");
printf("\t\t3)会员注册.\n");
printf("\t\t4)系统简介.\n");
printf("\t\t0)退出.\n");
}
void menu7() //显示会员界面目录函数
{
system("cls");
printf("--------------欢迎进入读者系统---------------");
printf("\n\t注册读者:%ld",totalMember);
printf("\n\t\t1)我的信息.\t");
printf("4)还书.\n");
printf("\t\t2)查询书目.\t");
printf("5)修改密码.\n");
printf("\t\t3)借书.\t\t");
printf("0)返回.\n");
}
Member* enterpassword2() //读者登陆输入密码函数
{
int i = 0, j = 0, flag = 1, t;
char ID[20], passw[100];
Member *p;
p = membershead;
printf("\n\t\t1)登陆.\n\t\t2)退出登陆.\n请选择:");
scanf("%d",&t);
for( ; t != 2; )
{
printf("\tID(即学号):");
scanf("%s",ID);
printf("\t密码:");
for(i = 0 ; ; )
{
passw[i] = getch();
if(passw[i] == '\r')
break;
else
{
if(i == 0)
{
if(passw[i] == 8)
;
else
{
i++;
printf("*");
}
}
else
{
if(passw[i] == 8)
{
i--;
printf("\b \b");
}
else
{
i++;
printf("*");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -