📄 liabrary.c
字号:
}
}
passw[i]='\0';
for(j = 0; j < totalMember; j++)
{
if(strcmp(p->memberID,ID) == 0)
{
flag = 0;
if(strcmp(p->password,passw) == 0)
return p;
else
{
printf("\n密码错误,请重新输入.\n");break; //跳出第二个for循环
}
}
else
p = p->nextM;
}
if(flag == 1)
printf("\nID不存在.");
printf("\n\t\t1)登陆.\n\t\t2)退出登陆.\n请选择:");
scanf("%d",&t);
}
getch();
return NULL;
}
void myInformation(Member *m) //会员查看借书信息
{
printM(m); /*调用打印会员相关信息函数*/
getch();
}
Book* searchBook(int num) //按bookNum查找图书结点函数
{
int i;
Book *p;
p = bookshead;
for(i = 0; i < totalBook; i++)
{
if(num == p->bookNum)
return p;
else
p = p->nextB;
}
return NULL;
}
void borrowBook(Member *m) //借阅图书函数
{
int num;
Book *b, *b1;
printf("输入要借书的编码:");
scanf("%d",&num);
b = searchBook(num); /*调用查找图书结点函数*/
if(b != NULL)
{
if(m->borrowNum < 10)
{
b->status = 0;
b1 = &m->book[m->borrowNum];
strcpy(b1->name,b->name);
strcpy(b1->author,b->author);
b1->bookNum = b->bookNum;
strcpy(b1->year,b->year);
b1->page = b->page;
strcpy(b1->publisher,b->publisher);
b1->price = b->price;
b1->status = b->status;
m->borrowNum++;
printf("%s借书成功!",b->name);
getch();
}
else
{
printf("你已借满10本书.");
getch();
}
}
else
{
printf("没有你要借的书.");
getch();
}
}
void returnBook(Member *m) //归还图书函数
{
int num, i;
Book *b, *p;
printf("要还书的编号:");
scanf("%d",&num);
b = searchBook(num); /*调用查找图书结点函数*/
if(b != NULL)
{
b->status = 1;
for(i = 0; i < m->borrowNum; i++)
{
p = &m->book[i];
if(p->bookNum == num)
{
if(i != (m->borrowNum - 1))
{
m->book[i] = m->book[m->borrowNum - 1];
m->borrowNum--;
printf("%s已归还.",b->name);
}
else
{
m->borrowNum--;
printf("%s已归还.",b->name);
}
}
}
}
getch();
}
void rewritepassword2(Member *m) //会员修改密码函数
{
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,m->password) == 0) /*检验两次新密码的输入是否一致*/
{
if(strcmp(passw1,passw2) == 0)
{
flag = 1;break;
}
else
printf("\n两次输入的密码不一样.\n");
}
else
printf("\n密码错误.\n");
}
if(flag == 1)
{
strcpy(m->password,passw1);
printf("\n密码修改成功!");
}
getch();
}
void member() //会员操作函数
{
int n;
Member *mp;
mp = enterpassword2(); /*调用输入会员密码函数,并把返回值赋给mp*/
if( mp != NULL)
{
for(n = 1; n != 0; )
{
menu7(); /*调用显示会员目录函数*/
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
myInformation(mp);break; /*查询会员相关信息,调用对应函数*/
case 2:
consultBook();break; /*查找图书,调用对应函数*/
case 3:
borrowBook(mp);break; /*借阅图书,调用对应函数*/
case 4:
returnBook(mp);break; /*归还图书,调用对应函数*/
case 5:
rewritepassword2(mp);break; /*修改密码,调用对应函数*/
case 0:
break; /*返回上一层*/
default:
printf("输入有误,请重新输入.");break;
}
}
}
}
int textID(char ID[]) //检验会员ID是否存在函数
{
Member *p;
int i;
if(totalMember == 0)
return 0;
else
{
p = membershead;
for(i = 0; i < totalMember; i++)
{
if(strcmp(p->memberID,ID) == 0)
return 1;
else
p = p->nextM;
}
return 0;
}
return 0;
}
Member* writeM(Member *m) //填写会员信息函数
{
char ch[4], passw1[100], passw2[100];
int i = 0;
char name[51];
char memberID[20];
char ID[20];
int sex;
char phoneNum[20];
int borrowNum = 0;
char password[20] = {'0'};
Member *nextM = NULL;
printf("\t姓名:");
scanf("%s",name);
printf("\tID(即学号):");
scanf("%s",memberID);
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';
printf("\n\t性别(男或女):");
scanf("%s",ch);
if((strcmp(ch,"男") == 0))
sex = 1;
else
sex = 0;
printf("\t电话号码:");
scanf("%s",phoneNum);
for( ; textID(memberID) == 1; ) /*检验ID是否已存在*/
{
printf("ID已存在,请重新输入.\n");
printf("\tID(即学号):");
scanf("%s",ID);
strcpy(memberID,ID);
}
for( ; strcmp(passw1,passw2) != 0; )
{
printf("\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重新置零*/
}
for(i = 0; i < 10; i++)
{
strcpy(m->book[i].name,"0");
strcpy(m->book[i].author,"0");
m->book[i].bookNum = 0;
strcpy(m->book[i].year,"0");
m->book[i].page = 0;
strcpy(m->book[i].publisher,"0");
m->book[i].price = 0;
m->book[i].status = 0;
}
strcpy(m->name,name);
strcpy(m->memberID,memberID);
strcpy(m->phoneNum,phoneNum);
strcpy(m->password,passw1);
m->sex = sex;
m->borrowNum = borrowNum;
m->nextM = nextM;
return m;
}
void newMember() //申请新会员函数
{
Member *p, *p1;
int i;
p = (Member*)malloc(sizeof(Member));
p = writeM(p); /*调用填写会员信息函数*/
if(totalMember == 0)
{
membershead = p;
totalMember++;
printf("会员申请成功!\n");
getch();
}
else
{
p1 = membershead;
for(i = 1; i < totalMember; i++)
p1 = p1->nextM;
p1->nextM = p;
totalMember++;
printf("会员申请成功!");
getch();
}
}
void about() //本系统的简介
{
printf("^@^欢迎使用该图书馆管理系统\n\t");
printf("\b\b\b\b本系统是一个图书馆借还书管理系统,界面友好。应用本系统,\n");
printf("\t可以进行新图书的增加,馆内图书的查询,管理员对馆内事务的\n\t管理,");
printf("同时采用会员制借书,所以本系统有注册会员功能,\n");
printf("\t也有对应的删除会员和查询会员的功能,还包括有会员对自己借书\n");
printf("\t情况的查询,以了解自己的借书实况。\n\t\b\b系统创建于2008年5月,创建人为华南农业大学信息学院\n");
printf("\t07计算机科学与技术3班谢树德、郑佳曼、卢贺龙。最终解释权归\n\t创建人所有。\n\t\t谢谢,祝君好运!");
getch();
}
void saveBook() //把图书信息写出文件的函数
{
FILE *fp;
Book *p;
int i;
fp = fopen("books.txt", "w");
if (fp == NULL)
{
printf("Can't open books.txt");
return;
}
fprintf(fp, "%d\n", totalBook);
p = bookshead;
for(i = 0; i < totalBook; i++)
{
fprintf(fp,"%s\n%s\n%s\n%s\n%d\n%d\n%ld\n%f\n",p->name,p->author,p->year,p->publisher,p->page,p->status,p->bookNum,p->price);
p = p->nextB;
}
fclose(fp);
printf("书本保存成功!\n");
}
void saveMember() //把读者信息写出文件的函数
{
FILE *fp;
Member *p;
Book b;
int i, j;
fp = fopen("members.txt", "w");
if (fp == NULL)
{
printf("Can't open members.txt");
return;
}
fprintf(fp, "%d\n", totalMember);
p = membershead;
for(i = 0; i < totalMember; i++)
{
fprintf(fp, "%s\n%s\n%s\n%s\n%d\n%d\n",p->name,p->memberID,p->password,p->phoneNum,p->borrowNum,p->sex);
for(j = 0; j < p->borrowNum; j++)
{
b = p->book[j];
fprintf(fp,"%s\n%s\n%s\n%s\n%d\n%d\n%ld\n%f\n",b.name,b.author,b.year,b.publisher,b.page,b.status,b.bookNum,b.price);
}
p = p->nextM;
}
fclose(fp);
printf("读者保存成功!\n");
}
Manager* loadManager() //载入管理员信息的函数
{
FILE *fp;
int i;
Manager *p, *p1;
fp = fopen("managers.txt", "r");
if (fp == NULL)
{
printf("Can't open books.txt");
return NULL;
}
fscanf(fp,"%d%*c",&totalManager);
p = (Manager*)malloc(sizeof(Manager));
managershead = p;
if(totalManager != 0)
{
fscanf(fp, "%s%*c%s%*c",p->name,p->password); /* *c是为了除去回车键*/
}
for(i = 1; i < totalManager; i++)
{
p1 = p;
p = (Manager*)malloc(sizeof(Manager));
p1->next = p;
fscanf(fp, "%s%*c%s%*c",p->name,p->password); /* *c是为了除去回车键*/
}
fclose(fp);
printf("管理员载入成功!\n");
return managershead;
}
void saveManager() //把管理员信息写出文件函数
{
FILE *fp;
Manager *p;
int i;
fp = fopen("managers.txt", "w");
if (fp == NULL)
{
printf("Can't open members.txt");
return;
}
fprintf(fp, "%d\n", totalManager);
p = managershead;
for(i = 0; i < totalManager; i++)
{
fprintf(fp, "%s\n%s\n",p->name,p->password);
p = p->next;
}
fclose(fp);
printf("管理员保存成功!\n");
}
int main() //主函数
{
int select = 1;
bookshead = loadBook();
membershead = loadMember();
managershead = loadManager();
for( ; select != 0; )
{
menu1();
printf("请选择:");
scanf("%d",&select);
switch(select)
{
case 1:
manager(); break;
case 2:
member(); break;
case 3:
newMember(); break;
case 4:
about(); break;
case 0:
break;
default:
printf("输入有误,请重新输入.");getch();break;
}
}
saveBook();
saveMember();
saveManager();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -