📄 图书借阅管理系统.cpp
字号:
return 1;
}
cout<<"输入性别:(男:m,女:f)"<<endl; //男m,女f
cin>>p->sex;
cout<<"输入会员类型:(1:本科生;2:研究生;3:教师;4:管理员;)"<<endl;
cin>>p->style;
if(p->style==1) max=MAX1;
else if(p->style==2) max=MAX2;
else if(p->style==3) max=MAX3;
else if(p->style==4) max=MAX4;
for(int i=0;i<=max;i++)
p->t[i].num=0;
p->max=0; //借阅数目,初始为0
p->yes=0; //0表示没有借书
p->next=NULL;
L->next=p;
q=p;
++k;
cout<<endl;
}
else
{
q=L;
while(q->next!=NULL)
q=q->next;
p->num=1;
p->next=NULL;
}
while(p->num!=0) //以会员学号作为判断链表是否结束
{
p=(Member *)malloc(sizeof(Member));
if(!p) exit(1);
cout<<"编号:"<<endl;
cin>>p->num;
if(p->num==0) //退出"增加会员"
{
cout<<" 共计"<<k<<"名会员入会!"<<endl;
break;
}
cout<<"输入姓名:"<<endl;
cin>>p->name;
for(s=L->next;s!=NULL;s=s->next)
if(s->num==p->num)
{
cout<<"同一会员不能重复注册!"<<endl;
return 1;
}
cout<<"输入性别:(男:m,女:f)"<<endl; //男m,女f
cin>>p->sex;
for(int i=0;i<MAX;i++)
p->t[i].num=0;
cout<<"输入会员类型:(1:本科生;2:研究生;3:教师;4:管理员;)"<<endl;
cin>>p->style;
if(p->style==1) max=MAX1;
else if(p->style==2) max=MAX2;
else if(p->style==3) max=MAX3;
else if(p->style==4) max=MAX4;
for(i=0;i<=max;i++)
p->t[i].num=0;
p->max=0; //借阅数目,初始为0
p->yes=0; //0表示没有借书
p->next=NULL;
q->next=p;
q=p;
++k;
cout<<endl;
}
return 1;
}
//查询会员
int Search_MemberName(MemberList &L) //按姓名查询
{
Member *p;
p=L->next;
char n[20];
int flag=0;
cout<<"输入要查询的会员姓名:";
cin>>n;
for(;p!=NULL;p=p->next)
{
if(strcmp(p->name,n)==0)
{
if(flag==0)
cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl;
cout<<p->name<<" "<<setw(11)<<p->num;
if(p->sex=='m')
cout<<setw(13)<<"男"<<" ";
else if(p->sex=='f')
cout<<setw(13)<<"女"<<" ";
if(p->style==1)
cout<<setw(10)<<"本科生"<<" ";
else if(p->style==2)
cout<<setw(10)<<"研究生"<<" ";
else if(p->style==3)
cout<<setw(10)<<"教师"<<" ";
else if(p->style==4)
cout<<setw(10)<<"管理员"<<" ";
if(p->yes==1)
cout<<setw(10)<<"是"<<endl;
else
cout<<setw(10)<<"否"<<endl;
flag=1;
continue;
}
}
if(p==NULL&&flag==0)
cout<<"没有相关信息!"<<endl;
return 1;
}
int Search_MemberNum(MemberList &L) //按编号查询
{
Member *p;
p=L->next;
long n;
int flag=0;
cout<<"输入要查询的会员编号:";
cin>>n;
for(;p!=NULL;p=p->next)
{
if(p->num==n)
{
if(flag==0)
cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl; cout<<p->name<<" "<<setw(11)<<p->num;
if(p->sex=='m')
cout<<setw(13)<<"男"<<" ";
else if(p->sex=='f')
cout<<setw(13)<<"女"<<" ";
if(p->style==1)
cout<<setw(10)<<"本科生"<<" ";
else if(p->style==2)
cout<<setw(10)<<"研究生"<<" ";
else if(p->style==3)
cout<<setw(10)<<"教师"<<" ";
else if(p->style==4)
cout<<setw(10)<<"管理员"<<" ";
if(p->yes==1)
cout<<setw(10)<<"是"<<endl;
else
cout<<setw(10)<<"否"<<endl;
flag=1;
continue;
}
}
if(p==NULL&&flag==0)
cout<<"没有相关信息!"<<endl;
return 1;
}
int Search_MemberSex(MemberList &L) //按性别查询
{
Member *p;
p=L->next;
int flag=0;
char n;
cout<<"输入要查询的会员性别:(男:m,女:f)";
cin>>n;
for(;p!=NULL;p=p->next)
{
if(p->sex==n)
{
if(flag==0)
cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl;
cout<<p->name<<" "<<setw(11)<<p->num;
if(p->sex=='m')
cout<<setw(13)<<"男"<<" ";
else if(p->sex=='f')
cout<<setw(13)<<"女"<<" ";
if(p->style==1)
cout<<setw(10)<<"本科生"<<" ";
else if(p->style==2)
cout<<setw(10)<<"研究生"<<" ";
else if(p->style==3)
cout<<setw(10)<<"教师"<<" ";
else if(p->style==4)
cout<<setw(10)<<"管理员"<<" ";
if(p->yes==1)
cout<<setw(10)<<"是"<<endl;
else
cout<<setw(10)<<"否"<<endl;
flag=1;
continue;
}
}
if(p==NULL&&flag==0)
cout<<"没有相关信息!"<<endl;
return 1;
}
int Search_AllM(MemberList &L) //查询所有会员信息
{
Member *p;
int i=0,flag=0;
p=L->next;
for(;p!=NULL;p=p->next)
{
if(flag==0)
cout<<endl<<"姓名 编号 性别 类型 是否借书"<<endl;
cout<<p->name<<" "<<setw(11)<<p->num;
if(p->sex=='m')
cout<<setw(13)<<"男"<<" ";
else if(p->sex=='f')
cout<<setw(13)<<"女"<<" ";
if(p->style==1)
cout<<setw(10)<<"本科生"<<" ";
else if(p->style==2)
cout<<setw(10)<<"研究生"<<" ";
else if(p->style==3)
cout<<setw(10)<<"教师"<<" ";
else if(p->style==4)
cout<<setw(10)<<"管理员"<<" ";
if(p->yes==1)
cout<<setw(10)<<"是"<<endl;
else
cout<<setw(10)<<"否"<<endl;
flag=1;
i++;
}
cout<<" 共计"<<i<<"个会员。"<<endl;
return 1;
}
int MemberSearch(MemberList &L)
{
int m;
while(m!=0)
{
cout<<endl<<" 会员查询"<<endl<<endl;
cout<<" ******************************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 1. 按姓名查询 2. 按编号查询 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 3. 按性别查询 0. 退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 4. 查询所有会员信息 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************************"<<endl;
cout<<" 请选择(0--4):";
cin>>m;
switch(m)
{
case 1:system("cls"); Search_MemberName(L); break; //按姓名查询
case 2:system("cls"); Search_MemberNum(L); break; //按编号查询
case 3:system("cls"); Search_MemberSex(L); break; //按性别查询
case 4:system("cls"); Search_AllM(L);break; //查询所有会员信息
case 0:system("cls"); break; //退出
}
}
return 1;
}
//删除会员
int MemberDel(MemberList &L) //以会员编号作为主键进行删除
{
Member *p;
long n;
int flag=0;
p=L;
cout<<"输入要删除的会员的编号:"<<endl;
cin>>n;
for(;p!=NULL;p=p->next)
{
if(p->next!=NULL&&p->next->num==n)
{
if(p->next->yes==1)
{
cout<<"当前会员借了书,不能删除!"<<endl;
return 1;
}
p->next=p->next->next; //删除语句
cout<<" 成功删除!"<<endl;
flag=1; //成功删除标记
break;
}
}
if(p==NULL&&flag==0)
cout<<" 删除不成功!"<<endl; //已经被删除或没有这个会员
return 1;
}
//借书信息
int BorrowInfo(MemberList &L)
{
Member *p;
int j,flag=0,max,k=0;
long n;
cout<<"当前会员名单:"<<endl;
Search_AllM(L);
cout<<"输入要查询的会员编号:"<<endl;
cin>>n;
for(p=L;p!=NULL;p=p->next)
{
if(p->num==n&&p->yes==1)
{
if(p->style==1) max=MAX1;
else if(p->style==2) max=MAX2;
else if(p->style==3) max=MAX3;
else if(p->style==4) max=MAX4;
cout<<" 借书详细情况"<<endl<<endl;
for(j=1;j<=max;j++)
{
if(p->t[j].num!=0)
{
k++;
if(flag==0)
cout<<"本数"<<setw(15)<<"编号"<<setw(15)<<"借书时间"<<setw(15)<<"到期时间"<<endl;
printf(" %d\t\t%d\t ",k,p->t[j].num);
printf("%d-%d-%d ",p->t[j].time.year,p->t[j].time.month,p->t[j].time.day);
printf("%d-%d-%d\n",p->t[j].borrowtime.year,p->t[j].borrowtime.month,p->t[j].borrowtime.day);
flag=1;
}
}
}
else if(p->num==n&&p->yes==0)
cout<<" 无借书记录!"<<endl;
}
return 1;
}
//到期书催还
int LimitTimeInfo(BookList &H,MemberList &L)
{
struct Time limittime;
Book *p;
Member *q;
int flag=0;
time_t timer=time(0);//调用time()函数获取当前时间
struct tm *ptrtime=localtime(&timer);//调用localtime()函数将获得的系统时间转化为指向struct tm的指针指向的结构体
limittime.year=1900+ptrtime->tm_year;
limittime.month=1+ptrtime->tm_mon;
limittime.day=ptrtime->tm_mday;
for(p=H->next;p!=NULL;p=p->next)
{
if(p->yes==0)
{
for(q=L->next;q!=NULL;q=q->next)
if(p->membernum==q->num) break;
for(int i=1;i<=q->max;i++)
if(q->t[i].num==p->num) break;
if(flag==0)
cout<<"书号 "<<setw(10)<<"借书人编号 "<<setw(10)<<"到期信息"<<endl;
flag=1;
if(limittime.year>q->t[i].borrowtime.year)
{
cout<<p->num<<" "<<p->membernum<<" ";
cout<<"已经超期,尽快还书!"<<endl;
}
else if(limittime.year==q->t[i].borrowtime.year)
{
if(limittime.month>q->t[i].borrowtime.month)
{
cout<<p->num<<" "<<p->membernum<<" ";
cout<<"已经超期,尽快还书!"<<endl;
}
else if(limittime.month==q->t[i].borrowtime.month)
{
if(limittime.day>q->t[i].borrowtime.day)
{
cout<<p->num<<" "<<p->membernum<<" ";
cout<<"已经超期,尽快还书!"<<endl;
}
}
}
}
}
return 1;
}
Book *H; //图书链表
Member *L; //会员链表
//主函数
void main()
{
FILE *fpb1,*fpb2,*fpm1,*fpm2; //文件指针
Book *p1,*p2,*s1;
Member *q1,*q2,*s2;
H=Init_B();
L=Init_M();
fpb1=fopen("book.txt","rb"); //读方式打开图书文件
if(fpb1!=NULL)
{
p1=(Book *)malloc(sizeof(Book));
if(!p1) exit(1);
p1->next=NULL;
while(fread(p1,sizeof(Book),1,fpb1)==1)
{
if(H->next==NULL)
{
H->next=p1;
s1=p1;
}
else
{
s1->next=p1;
s1=p1;
}
p1=(Book *)malloc(sizeof(Book));
if(!p1) exit(1);
p1->next=NULL;
}
}
fpm1=fopen("member.txt","rb"); //读方式打开会员文件
if(fpm1!=NULL)
{
q1=(Member *)malloc(sizeof(Member));
if(!q1) exit(1);
q1->next=NULL;
while(fread(q1,sizeof(Member),1,fpm1)==1)
{
if(L->next==NULL)
{
L->next=q1;
s2=q1;
}
else
{
s2->next=q1;
s2=q1;
}
q1=(Member *)malloc(sizeof(Member));
if(!q1) exit(1);
q1->next=NULL;
}
}
int m,n;
while(m!=0)
{
cout<<endl<<" 图书借阅管理系统"<<endl<<endl;
cout<<" ******************************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 1. 图书管理 2. 会员管理 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 0. 退出系统 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************************"<<endl;
cout<<" 请选择(0--2):";
cin>>m;
if(m==1)
{
system("cls"); //清屏
cout<<endl<<" 图书管理"<<endl<<endl;
cout<<" ******************************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 1. 增加图书 2. 查询图书 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 3. 删除图书 4. 图书借阅 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 5. 还书 0. 退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************************"<<endl;
cout<<" 请选择(0--5):";
cin>>n;
switch(n)
{
case 1:system("cls"); BookAdd(H); break; //增加图书
case 2:system("cls"); BookSearch(H); break; //查询图书
case 3:system("cls"); BookDel(H); break; //删除图书
case 4:system("cls"); BookBorrow(H,L); break; //图书借阅
case 5:system("cls"); BookReturn(H,L); break; //还书
case 0:system("cls"); break; //退出图书管理,返回上一层菜单
}
}
else if(m==2)
{
system("cls"); //清屏
cout<<endl<<" 会员管理"<<endl<<endl;
cout<<" ******************************************"<<endl;
cout<<" * *"<<endl;
cout<<" * 1. 增加会员 2. 查询会员 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 3. 删除会员 4. 借书信息 *"<<endl;
cout<<" * *"<<endl;
cout<<" * 5. 到期书催还 0. 退出 *"<<endl;
cout<<" * *"<<endl;
cout<<" ******************************************"<<endl;
cout<<" 请选择(0--5):";
cin>>n;
switch(n)
{
case 1:system("cls"); MemberAdd(L); break; //增加会员
case 2:system("cls"); MemberSearch(L); break; //查询会员
case 3:system("cls"); MemberDel(L); break; //删除会员
case 4:system("cls"); BorrowInfo(L); break; //借书信息
case 5:system("cls"); LimitTimeInfo(H,L); break; //到期书催还
case 0:system("cls"); break; //退出会员管理,返回上一层菜单
}
}
else if(m==0)
{
cout<<endl<<" 感谢您使用本系统,再见!"<<endl;
fpb2=fopen("book.txt","wb");
for(p2=H->next;p2!=NULL;p2=p2->next)
fwrite(p2,sizeof(Book),1,fpb2);
fclose(fpb2);
fpm2=fopen("member.txt","wb");
for(q2=L->next;q2!=NULL;q2=q2->next)
fwrite(q2,sizeof(Member),1,fpm2);
fclose(fpm2);
exit(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -