📄 liabrary.c
字号:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "memory.h"
#include "conio.h"
#define Member struct MEMBER
#define Book struct BOOK
#define Manager struct MANAGER
struct BOOK //图书结构体
{
char name[51];
char author[51];
int long bookNum;
char year[20];
int page;
char publisher[51];
float price;
int status;
struct BOOK *nextB;
};
struct MEMBER //会员结构体
{
char name[51];
char memberID[20];
int sex;
char phoneNum[20];
int borrowNum;
char password[20];
Book book[10];
struct MEMBER *nextM;
};
struct MANAGER //管理员结构体
{
char name[21];
char password[20];
struct MANAGER *next;
};
Book* bookshead = NULL;
Member* membershead = NULL;
Manager* managershead = NULL;
int long totalBook = 0;
int long totalMember = 0;
int totalManager = 0;
Manager* enterpassword1() //检验管理员输入的密码函数
{
int flag = 1, i = 0, t;
char name[51], passw[100];
Manager *mp;
mp = managershead;
printf("\n\t\t1)登陆.\n\t\t2)退出登陆.\n请选择:");
scanf("%d",&t);
for( ; t != 2; )
{
printf("\t用户名:");
scanf("%s",name);
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("*");
}
}
}
}
passw[i]='\0';
for(i = 0; i < totalManager; i++)
{
if(strcmp(mp->name,name) == 0) //若找到该管理员,则进入密码验证
{
flag = 0;
if(strcmp(mp->password,passw) == 0)
return mp;
else
{
printf("\n密码错误,请重新输入.\n");break; //跳出第二个for循环
}
}
else
mp = mp->next;
}
if(flag == 1)
printf("\n管理员不存在.");
printf("\n\t\t1)登陆.\n\t\t2)退出登陆.\n请选择:");
scanf("%d",&t);
}
getch();
return NULL;
}
void menu2() //显示管理员系统目录函数
{
system("cls");
printf("--------------欢迎进入管理员系统---------------");
printf("\n\t注册管理员:%d",totalManager);
printf("\n\t\t1)增加图书.\t");
printf("6)查看所有书目.\n");
printf("\t\t2)删除图书.\t");
printf("7)查看所有读者.\n");
printf("\t\t3)查询图书.\t");
printf("8)修改密码.\n");
printf("\t\t4)查询会员.\t");
printf("9)创建新管理员.\n");
printf("\t\t5)删除会员.\t");
printf("0)返回.\n");
}
Book *writeB(Book* b) //建立某本书的一个指针,以待使用的函数
{
char name[51];
char author[51];
int long bookNum;
char year[20];
int page;
char publisher[51];
float price;
int status = 1;
printf("\t书名:");
scanf("%s",name);
printf("\t作者:");
scanf("%s",author);
printf("\t出版日期(如2008.4.1):");
scanf("%s",year);
printf("\t出版社:");
scanf("%s",publisher);
printf("\t总页数:");
scanf("%d",&page);
printf("\t价格:");
scanf("%f",&price);
printf("\t编码:");
scanf("%ld",&bookNum);
strcpy(b->name,name);
strcpy(b->author,author);
strcpy(b->year,year);
strcpy(b->publisher,publisher);
b->page = page;
b->price = price;
b->bookNum = bookNum;
b->status = status;
b->nextB = NULL;
return b;
}
void addBook() //新增图书函数
{
Book *p, *p1;
int i;
p = (Book*)malloc(sizeof(Book));
p = writeB(p);
if( totalBook == 0)
{
bookshead = p;
totalBook++;
}
else
{
p1 = bookshead; //已追加表尾方式插入新书指针
for( i = 1; i < totalBook; i++)
p1 = p1->nextB;
p1->nextB = p;
totalBook++;
}
printf("\n新书%s,已经增加!\n",p->name);
getch();
}
void printB(Book *b) //打印图书信息函数
{
printf("\n\t书名:%s\t",b->name);
if(b->status == 1)
printf("在馆\n");
else
printf("借出\n");
printf("\t作者:%s\n",b->author);
printf("\t编码:%ld\n",b->bookNum);
printf("\t出版社:%s\n",b->publisher);
printf("\t出版日期:%s\n",b->year);
printf("\t总页数:%d\n",b->page);
printf("\t价格:%.2f\n",b->price);
}
void menu3() //目录选择删除图书的方式的函数
{
printf("\t\t1)按书名查找并删除图书.\n");
printf("\t\t2)按书编号查找并删除图书.\n");
printf("\t\t0)返回.\n");
}
void delByName() //按书名删除图书函数
{
char n[51];
int i, t, flag = 1, total = totalBook;
Book *p, *p1, *p2, *p3;
if(totalBook == 0)
printf("\t图书库没有书.\n\n");
else
{
printf("输入要删除的书的书名:");
scanf("%s",n);
p = bookshead;
p1 = p;
p2 = p->nextB;
for(i = 0; i < total; i++) //查找要删除的图书
{
if(strstr(p->name,n) != NULL)
{
flag = 0;
printB(p); //调用打印图书信息函数
printf("\n确定要删除这本书吗?\n是输入1,否输入2.\n\n请选择:");
scanf("%d",&t);
if(t == 1) //删除图书
{
if(p == bookshead)
{
p3 = p;
bookshead = p2;
p = bookshead;
p1 = p;
if(p2 != NULL)
p2 = p2->nextB;
totalBook--;
printf("\t%s删除成功.\n",p3->name);
}
else
{
p3 = p;
p1->nextB = p->nextB;
p = p->nextB;
if(p2 != NULL)
p2 = p2->nextB;
totalBook--;
printf("\t%s删除成功.\n",p3->name);
}
}
else
{
p1 = p;
p = p->nextB;
if(p2 != NULL)
p2 = p2->nextB;
}
}
else
{
p1 = p;
p = p->nextB;
if(p2 != NULL)
p2 = p2->nextB;
}
}
}
if((flag == 1) && (totalBook != 0))
printf("\t没有找到该书的记录.\n");
}
void delByNum() //按书编号删除图书函数
{
int num, i, t, flag = 1, total = totalBook;
Book *p, *p1, *p2, *p3;
if(totalBook == 0)
printf("\t图书库没有书.\n\n");
else
{
printf("输入要删除的书的编码:");
scanf("%d",&num);
p = bookshead;
p1 = p;
p2 = p->nextB;
for(i = 0; i < total; i++)
{
if(p->bookNum == num)
{
flag = 0;
printB(p); //调用打印图书信息函数
printf("\n确定要删除这本书吗?\n是输入1,否输入2.\n\n请选择:");
scanf("%d",&t);
if(t == 1)
{
if(p == bookshead)
{
p3 = p;
bookshead = p2;
totalBook--;
printf("\t%s删除成功.\n",p3->name);
break;
}
else
{
p3 = p;
p1->nextB = p->nextB;
totalBook--;
printf("\t%s删除成功.\n",p3->name);
break;
}
}
else
break;
}
else
{
p1 = p;
p = p->nextB;
if(p2 != NULL)
p2 = p2->nextB;
}
}
}
if((flag == 1) && (totalBook != 0))
printf("\t没有找到该书的记录.\n");
}
void delBook() //删除图书函数
{
int n;
for(n = 1; n != 0; )
{
menu3(); //调用显示删除图书目录函数
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
delByName();break; /*按书名查找并删除*/
case 2:
delByNum();break; /*按书编号查找并删除*/
case 0:
break; /*返回上一层*/
default:
printf("输入有误,请重新输入.");break;
}
}
}
void menu4() //显示查询图书目录函数
{
system("cls");
printf("\n\t\t1)按书名查询.\n");
printf("\t\t2)按编码查询.\n");
printf("\t\t3)按作者查询.\n");
printf("\t\t0)返回.\n");
}
void queryByName() //按书名查找图书函数
{
char n[51];
Book *p;
int flag = 1, i;
if(totalBook == 0)
{
printf("\t图书库没有书.\n");
getch();
}
else
{
printf("请输入你要查的书名:");
scanf("%s",n);
p = bookshead;
for(i = 0; i < totalBook; i++)
{
if(strstr(p->name,n) != NULL)
{
flag = 0;
printB(p);
p = p->nextB;
}
else
p = p->nextB;
}
getch();
}
if((flag == 1) && (totalBook != 0))
{
printf("\t没有这本书的记录.");
getch();
}
}
void queryByNum() //按书编号查找图书函数
{
int num, flag = 1, i;
Book *p;
if(totalBook == 0)
{
printf("\t图书库没有书.\n");
getch();
}
else
{
printf("请输入你要查的书号:");
scanf("%d",&num);
p =bookshead;
for(i = 0; i < totalBook; i++)
{
if(num == p->bookNum)
{
flag = 0;
printB(p); /*调用打印图书信息函数*/
break; /*编码是唯一的,找到一本满足立即跳出*/
}
else
p = p->nextB;
}
getch();
}
if((flag == 1) && (totalBook != 0))
{
printf("\t没有这本书的记录.");
getch();
}
}
void queryByAuthor() //按作者名查找图书函数
{
char auth[51];
int flag = 1, i;
Book *p;
if(totalBook == 0)
{
printf("\t图书库没有书.\n");
getch();
}
else
{
printf("输入作者名:");
scanf("%s",auth);
p = bookshead;
for(i = 0; i < totalBook; i++)
{
if(strcmp(p->author,auth) == 0)
{
flag = 0;
printB(p); /*调用打印图书信息函数*/
p = p->nextB;
}
else
p = p->nextB;
}
getch();
}
if((flag == 1) && (totalBook != 0))
{
printf("\t没有这名作者的书.");
getch();
}
}
void consultBook() //查找图书函数
{
int n;
for(n = 1; n != 0; )
{
menu4(); /*调用显示查询图书目录函数*/
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
queryByName();break; /*按书名查询,调用对应函数*/
case 2:
queryByNum();break; /*按编码查询,调用对应函数*/
case 3:
queryByAuthor();break; /*按作者查询,调用对应函数*/
case 0:
break; /*返回上一层*/
default:
printf("输入有误,请重新输入.");break;
}
}
}
void menu5() //显示查询会员目录函数
{
printf("\n\t\t1)按会员名查询.\n");
printf("\t\t2)按会员ID查询.\n");
printf("\t\t0)返回.\n");
}
void printM(Member *m) //打印会员信息函数
{
int i;
Book p;
printf("\n\t姓名:%s\n",m->name);
printf("\t帐号:%s\n",m->memberID);
printf("\t性别:");
if(m->sex == 1)
printf("男\n");
else
printf("女\n");
printf("\t密码:%s\n",m->password);
printf("\t已借:%d\t",m->borrowNum);
printf("\t还可借:%d\n",(10 - m->borrowNum));
printf("\t电话:%s\n",m->phoneNum);
for(i = 0; i < m->borrowNum; i++)
{
p = m->book[i];
printf("\n\t书名:%s\t",p.name);
printf("书号:%ld\n",p.bookNum);
printf("\t作者:%s\t",p.author);
printf("出版社:%s\n",p.publisher);
printf("\t页数:%d\t\n",p.page);
}
printf("\n\t------------------------------");
}
void queryByMName() //按会员名字查找会员函数
{
char n[51];
int flag = 1, i;
Member *p;
if(totalMember == 0)
printf("\t没有注册会员.\n");
else
{
printf("输入要查询的会员名:");
scanf("%s",n);
p = membershead;
for(i = 0; i < totalMember; i++)
{
if(strstr(p->name,n) != NULL)
{
flag = 0;
printM(p);
p = p->nextM;
}
else
p = p->nextM;
}
}
if((flag == 1) && (totalMember != 0))
printf("\t会员不存在.");
}
void queryByMID() //按会员ID查找会员函数
{
char ID[20];
int flag, i;
Member *p;
if(totalMember == 0)
printf("\t没有注册会员.\n");
else
{
printf("请输入要查询的ID:");
scanf("%s",ID);
p = membershead;
for(i = 0; i < totalMember; i++)
{
if(strcmp(p->memberID,ID) == 0)
{
flag = 0;
printM(p);
break; //ID是唯一的,找到满足的立即跳出
}
else
p = p->nextM;
}
}
if((flag == 1) && (totalMember != 0))
printf("\tID不存在.");
}
void consultMember() //查找会员函数
{
int n;
for(n = 1; n != 0; )
{
menu5();
printf("请选择:");
scanf("%d",&n);
switch(n)
{
case 1:
queryByMName();break; //按名字查询会员
case 2:
queryByMID();break; //按帐号查询会员
case 0:
break; //返回上一层
default:
printf("输入有误,请重新输入.");break;
}
}
}
void menu6() //显示删除会员目录函数
{
printf("\n\t\t1)按会员名查找并删除.\n");
printf("\t\t2)按会员ID查找并删除.\n");
printf("\t\t0)返回.\n");
}
void delByMName() //按会员名删除会员函数
{
char n[51];
int i, t, flag = 1, total = totalMember;
Member *p, *p1, *p2, *p3;
if(totalMember == 0)
printf("\t没有注册会员.\n\n");
else
{
printf("输入要删除的会员的名:");
scanf("%s",n);
p = membershead;
p1 = p;
p2 = p->nextM;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -