#include
#include
#include
#include
struct book{
char number[100]
char tittle[100]
char writer[100]
char publisher[100]
char date[100]
char price[100]
char status[100]
char reader[100]
}
void search_book()
void borrow_book()
void return_book()
void add_book()
void delete_book()
void modify_book()
void scan_book()
int main()
{
int c1=0,c2,c3
int l,x,z
while(1)
{
system("color 2C")
printf("\t\t\t ^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n")
printf("\t\t\t| * - * - * -图书管理系统 * - * - * |\n")
printf("\t\t\t* [1] 用户登录 *\n")
printf("\t\t\t* [2] 管理员登录 *\n")
printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n")
printf("\n")
printf("请选择 *** 作 :")
scanf("%d",&c1)
system("cls")
break
}
if(c1==1)
{
while(1){
system("color 2C")
printf("\t\t\t ^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n")
printf("\t\t\t| * - * - * -图书管理系统 * - * - * |\n")
printf("\t\t\t* [1] 查询图书 *\n")
printf("\t\t\t| [2] 借阅图书 |\n")
printf("\t\t\t* [3] 借图书 *\n")
printf("\t\t\t* [4] 浏览图书信息 *\n")
printf("\t\t\t| [5] 退图书管理系统 |\n")
printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n")
printf("\n")
printf("请选择 *** 作 :")
scanf("%d",&c2)
getchar()
switch(c2)
{
case 1:search_book()break
case 2:borrow_book()break
case 3:return_book()break
case 4:scan_book()break
case 5:system("cls")return 0
}
}
}
if(c1==2)
{
while(1){
system("color 2C")
printf("\t\t\t ^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n")
printf("\t\t\t| * - * - * -图书管理系统 * - * - * |\n")
printf("\t\t\t| [1] 添加图书 |\n")
printf("\t\t\t* [2] 删减图书 *\n")
printf("\t\t\t| [3] 修改图书信息 |\n")
printf("\t\t\t* [4] 浏览图书信息 *\n")
printf("\t\t\t| [5] 退图书管理系统 |\n")
printf("\t\t\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^ \n")
printf("\n")
printf("请选择 *** 作 :")
scanf("%d",&c3)
getchar()
switch(c3)
{
case 1:add_book()break
case 2:delete_book()break
case 3:modify_book()break
case 4:scan_book()break
case 5:system("cls")return 0
}
}
}
}
/*查询图书*/
void search_book()
{
FILE*fp
struct book n
struct book nn
int l,r
char x,z
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb")
while(1)
{
l=0
system("cls")
printf("请输入图书名称:")
scanf("%s",n.tittle)
fflush(stdin)
rewind(fp)
while(1)
{
fread(&nn,sizeof(nn),1,fp)
if(feof(fp))
break
r=strcmp(n.tittle,nn.tittle )
if(r==0)
{
l=1
break
}
}
if(l==0)
{
printf("没要查询图书\n\n ")
}
else
{
printf("查询图书:")
printf("\n")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
printf("%s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader)
printf("\n\n\n")
}
printf("否继续查询图书 ? [(y)/否(n)] ? \n\n")
do
{
x=getche()
}while(x!='n'&&x!='y')
if(x=='n')
break
}
fclose(fp)
system("cls")
}
//添加
void add_book()
{
FILE *fp
struct book n
struct book nn
char x,z
int l,r
fp=fopen("F:\\课程设计\\图书管理系统.txt","ab+")
do
{
system("cls")
do
{
l=0
printf("\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
fflush(stdin)
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader)
system("cls")
rewind(fp)
while(!feof(fp))
{
fread(&nn,sizeof(nn),1,fp)
r=strcmp(n.tittle,nn.tittle)
if(r==0)
{
l=1
printf(" 该图书已存请输入新图书信息: \n\n")
break
}
}
}while(l)
fwrite(&n,sizeof(n),1,fp)
printf("\n")
printf("否继续输入新图书信息[y/n] \n\n")
do
{
x=getche()
}while(x!='n'&&x!='y')
}while(x=='y')
fclose(fp)
system("cls")
}
//删除图书
void delete_book()
{
FILE *fp,*fp1
char x,z
struct book n
struct book nn
int l,r
fp=fopen("F:\\课程设计\\图书管理系统.txt","ab+")
while(1)
{
l=0
system("cls")
printf("\n")
printf("请输入需要删除图书名: \n\n")
fflush(stdin)
scanf("%s",&n.tittle)
rewind(fp)
while(1)
{
fread(&nn,sizeof(nn),1,fp)
if(feof(fp))
break
r=strcmp(n.tittle,nn.tittle)
if(r==0)
{
l=1
break
}
}
if(l==0)
{
printf("\n")
printf("起未找该图书 \n")
}
else
{
printf("\n")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader)
printf("\n")
printf("确认删除图书信息 [(y)/否(n)]\n\n")
do
{
z=getche()
}while(z!='n'&&z!='y')
if(z=='n')
break
else
{
fp1=fopen("F:\\课程设计\\图书管理系统new.txt","wb")
rewind(fp)
while(1)
{
fread(&nn,sizeof(nn),1,fp)
if(feof(fp))
break
r=strcmp(n.tittle,nn.tittle)
if(r!=0)
fwrite(&nn,sizeof(nn),1,fp1)
}
fclose(fp)
fclose(fp1)
fp=fopen("F:\\课程设计\\图书管理系统.txt","wb")
fp1=fopen("F:\\课程设计\\图书管理系统new.txt","rb")
while(1)
{
fread(&nn,sizeof(nn),1,fp1)
if(feof(fp1))
break
fwrite(&nn,sizeof(nn),1,fp)
}
fclose(fp)
fclose(fp1)
}
}
printf("\n")
printf("否继续删除图书信息 [(y)/否(n)] \n")
do
{
x=getche()
}while(x!='n'&&x!='y')
if(x=='n')
break
}
fclose(fp)
system("cls")
}
//修改图书信息
void modify_book()
{
FILE *fp
struct book n
struct book nn
int l,r
char x,z
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+")
while(1)
{
l=0
printf("\n")
system("cls")
printf("请输入需要修改图书名: \n\n")
fflush(stdin)
scanf("%s",&n.tittle)
system("cls")
rewind(fp)
while(1)
{
fread(&nn,sizeof(nn),1,fp)
if(feof(fp))
break
r=strcmp(n.tittle,nn.tittle)
if(r==0)
{
l=1
break
}
}
if(l==0)
{
printf("\n")
printf("起未找该图书信息 \n\n")
}
else
{
printf("\n")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader)
printf("请依修改图书信息\n\n\n")
fflush(stdin)
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader)
fseek(fp,sizeof(nn),1)
fwrite(&n,sizeof(nn),1,fp)
}
printf("\n")
printf(" 否继续修改用户信息[y/n]? \n\n")
do
{
x=getch()
}while(x!='n'&&x!='y')
if(x=='n')
break
}
fclose(fp)
system("cls")
}
//借书
void borrow_book()
{
FILE*fp
struct book n
struct book nn
char x,z
int l,r
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+")
while(1)
{
l=0
system("cls")
printf("\n")
printf("请输入需要借阅图书名: \n")
fflush(stdin)
scanf("%s",&n.tittle)
rewind(fp)
while(1)
{
fread(&nn,sizeof(nn),1,fp)
if(feof(fp))
break
r=strcmp(n.tittle,nn.tittle)
if(r==0)
{
l=1
break
}
}
if(l==0)
{
printf("\n")
printf("起未找该图书 \n")
}
else
{ printf("\n")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader)
printf("\n")
fflush(stdin)
printf("请输入图书信息并修改库状态及借阅者信息")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader)
fseek(fp,sizeof(nn),1)
fwrite(&n,sizeof(nn),1,fp)
}
printf("\n")
printf(" 否继续借书 [(y)/否(n)] \n\n")
do
{
x=getch()
}while(x!='n'&&x!='y')
if(x=='n')
break
}
fclose(fp)
system("cls")
}
//书
void return_book()
{
FILE*fp
struct book n
struct book nn
char x,z
int l,r
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb+")
while(1)
{
l=0
system("cls")
printf("\n")
printf("请输入需要借图书名: \n")
fflush(stdin)
scanf("%s",&n.tittle)
rewind(fp)
while(1)
{
fread(&nn,sizeof(nn),1,fp)
if(feof(fp))
break
r=strcmp(n.tittle,nn.tittle)
if(r==0)
{
l=1
break
}
}
if(l==0)
{
printf("\n")
printf("起未找该图书 \n")
}
else
{
printf("\n")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
printf("%s %s %s %s %s %s %s %s",nn.number,nn.tittle,nn.writer,nn.publisher,nn.date,nn.price,nn.status,nn.reader)
printf("\n")
fflush(stdin)
printf("请输入图书信息并修改库状态 \n\n")
printf("****************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
scanf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader)
fseek(fp,-(int)sizeof(nn),1)
fwrite(&n,sizeof(nn),1,fp)
}
printf("\n")
printf("否继续书 [(y)/否(n)] \n")
do
{
x=getche()
}while(x!='n'&&x!='y')
if(x=='n')
break
}
fclose(fp)
system("cls")
}
//浏览
void scan_book()
{
FILE*fp
char x,z
struct book n
fp=fopen("F:\\课程设计\\图书管理系统.txt","rb")
rewind(fp)
system("cls")
while(1)
{
fread(&n,sizeof(n),1,fp)
if(feof(fp))
break
else
{
printf("********************************************\n")
printf("编号 书名 作者 版社 版间 价格 状态 借阅者\n")
printf("\n")
printf("%s %s %s %s %s %s %s %s",n.number,n.tittle,n.writer,n.publisher,n.date,n.price,n.status,n.reader)
printf("\n")
}
}
printf("\n")
printf("主菜单请按车")
do
{
x=getche()
}while(x!='\r')
if(x=='\r')
{
fclose(fp)
system("cls")
}
}
#include<stdio.h>#include<math.h>
#include<stdlib.h>
#include<string.h>
#define N 100 //书籍的最多本数
struct book
{ char title[30]
int number
char author[30]
float price
int store
char borrower_name[20]
char borrower_gender[5]
int borrower_number
}s[N]
int m=0
void input(structbook *p) //输入图书信息
void save(structbook *p) //保存图书信息
void read(structbook *p) //读取图书信息
void search(structbook *p) //查找图书信息
void del(structbook *p)//删除图书信息
void borrow(structbook *p) //借阅图书
void retur(structbook *p) //归还图书
void main()
{
int x
do
{
printf("**************************************菜单**************************************\n"
" ***********1.输入图书信息********** \n"
" ***********2.查找图书信息********** \n"
" ***********3.删除图书信息********** \n"
" ***********4.借阅图书********** \n"
" ***********5.归还图书********** \n"
" ***********0.退出********** \n")
printf("********************************************************************************\n")
printf("请在0-5中选择,以回车键结束\n")
scanf("%d",&x)
switch(x)
{ case 1: input(&s[0])break
case 2: search(&s[0])break
case 3: del(&s[0])break
case 4: borrow(&s[0])break
case 5: retur(&s[0])break
case 0: break
}
}while(x!=0)
}
void input(structbook *p)
{int y
for(p<(&s[0]+N)p++)
{ printf("请输入书名:")scanf("%s",p->title)
printf("请输入编号:")scanf("%d",&p->number)
printf("请输入作者:")scanf("%s",p->author)
printf("请输入图书价格:")scanf("%f",&p->price)
printf("请输入图书数量:")scanf("%d",&p->store)
m++
printf("第%d个信息已经输入完毕,是否继续?\n按任意键继续,按0键结束.",m)
scanf("%d",&y)//读取是否继续
if(y==0)
{ save(&s[0])
read(&s[0])//调用读取文件函数
break
}
}
}
void search(structbook *p)//查询模块
{ int n
char name1[20]
char name2[20]
char c[3]
do
{ p=&s[0]
printf("\t请选择查找方式:\n")//打印查询方式菜单
printf(" 1.按书名查找\n 2.按作者查找\n 0.返回\n")
printf("请在0-2中选择:\n\n")
scanf("%d",&n)//读取查找方式
if(n==0) break
switch(n)
{ case 1: printf("请输入书名:\n")scanf("%s",name1)break
case 2: printf("请输入作者:\n")scanf("%s",name2)break
}
for(p<&s[m]p++)
{ read(&s[0])//调用读取函数
if(strcmp(p->title,name1)==0||strcmp(p->author,name2)==0)
{ printf("\n查找图书信息成功!\n")
printf("书名 编号 作者 价格 数量\n")
printf("%-10s%-10d%-10s%-10.2f%-10d\n",p->title,p->number,p->author,p->price,p->store)//打印信息
break
}
}
printf("是否继续查找?\n“是”请键入“yes”, “否”请按任意键,返回菜单\n")
scanf("%s",c)
}while(strcmp(c,"yes")==0)//判断是否结束
}
void del(structbook *p)//删除模块
{ int i
struct book *p1,*p2
char name1[20]
char name2[20]
char c[3]
int n
do
{ p=&s[0]
printf("请选择删除以方式回车键结束:\n")//打印删除方式菜单
printf( " 1.按书名删除\n 2.按作者删除\n 0.返回\n")
printf("请在0-2中选择:\n\n")
scanf("%d",&n)//读取查找方//
if(n==0) break
switch(n)
{case 1:printf("请输入书名:\n")
scanf("%s",name1)break
case 2: printf("请输入作者:\n")
scanf("%s",name2)break
}
read(&s[0])//调用读取函数
for(i=0i<mi++,p++)
{
if(strcmp(p->title,name1)==0||strcmp(p->author,name2)==0)
{ p1=p
for(p2=p1+1p2<=&s[m]p1++,p2++)
{
strcpy(p1->title,p2->title)
strcpy(p1->author,p2->author)
p1->number=p2->number
p1->store=p2->store
p1->price=p2->price
m--
printf("删除成功!!\n")
}
}
else {printf("没有该书记录!!")
break}
}
printf("是否继续删除?“是”请键入“yes”, “否”请按任意键,返回菜单\n")
scanf("%s",c) //读取是否继续
save(&s[0])//调用保存函数
}while(strcmp(c,"yes")==0)//判断是否继续删除
}
void borrow(structbook *p)//借书模块
{ int z
char name3[20],name4[20]
char w[3]
do
{ p=&s[0]
printf("请先查找您要借阅的图书!")
printf("请选择查找方式:\n")//打印查询方式菜单
printf(" 1.按书名查找\n 2.按作者查找\n 0.返回\n")
printf("请在0-2中选择:\n")
scanf("%d",&z)//读取查找方式
if(z==0) break
switch(z)
{ case 1: printf("请输入书名:\n")scanf("%s",name3)break
case 2: printf("请输入作者:\n")scanf("%s",name4)break
}
read(&s[0])//调用读取函数
for(p<&s[m]p++)
{ if(strcmp(p->title,name3)==0||strcmp(p->author,name4)==0)
{
printf("\n查找图书信息成功!\n")
printf("书名 编号 作者 价格 数量\n")
printf("%-10s%-10d%-10s%-10.2fs%-10d\n",p->title,p->number,
p->author,p->price,p->store)//打印信息
printf("请输入您的姓名:")scanf("%s",p->borrower_name)
printf("请输入您的性别:")scanf("%s",p->borrower_gender)
printf("请输入您的学号:")scanf("%d",&p->borrower_number)
p->store--
printf("借书成功!\n")
printf("书名 编号 作者 价格 数量 借书人 性别 学号\n")
printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p->title,p->number,p->author,
p->price,p->store,p->borrower_name,p->borrower_gender,p->borrower_number)
break
}
}
printf("是否继续借书??")
printf("“是”请键入“yes”, “否”请按任意键,返回菜单\n")
scanf("%s",w) //读取是否继续
save(&s[0])//调用保存函数
}while(strcmp(w,"yes")==0)//判断是否继续借书
}
void retur(structbook *p)//还书模块
{int e,f
char name5[20]
char name6[20]
char t[3]
do
{ p=&s[0]
printf("请先查找您要还的图目!")
printf("请选择查找方式:\n") //打印查询方式菜单
printf(" 1.按书名查找\n 2.按作者查找\n 0.返回\n")
printf("请在0-2中选择:\n\n")
scanf("%d",&e) //读取查找方式
if(e==0) break
switch(e)
{ case 1: printf("请输入书名:\n")scanf("%s",name5)break
case 2: printf("请输入作者:\n")scanf("%s",name6)break
}
read(&s[0])//调用读取函数
for(p<&s[m]p++)
{ if(strcmp(p->title,name5)==0||strcmp(p->author,name6)==0)
{ printf("\n查找图书信息成功!\n")
printf("确认还书请按“1”!")//确认是否还书
scanf("%d",&f)
if(f==1)
{ strcpy(p->borrower_name,"0")
strcpy(p->borrower_gender,"0")
p->borrower_number=0
p->store++
printf("书名 编号 作者 价格 数量 借书人 性别 学号\n")
printf("%-10s%-10d%-10s%-10.2f%-10d%-10s%-10s%-10d\n",p->title,p->number,p->author,
p->price,p->store,p->borrower_name,p->borrower_gender,p->borrower_number)
//打印信息
}
break
}
else {printf("没有该书记录!!")
break}
}
printf("是否继续还书?\n")
printf("“是”请键入“yes”, “否”请按任意键,返回菜单\n")
scanf("%s",t) //读取是否继续
save(&s[0])//调用保存函数
}while(strcmp(t,"yes")==0)//判断是否继续还书
}
void save(structbook *p)//保存文件
{ FILE *fp,*fp1
int i
if((fp=fopen("tushu.txt","wb"))==NULL)//打开文件并判断是否出错
{ printf("创建文件失败!\n\n")//打印出错提示
getchar()return
}
if((fp1=fopen("book.txt","wb"))==NULL)//打开文件并判断是否出错
{ printf("创建文件失败!\n\n")//打印出错提示
getchar()return
}
for(i=0i<mi++,p++)
if(fwrite(p,sizeof(structbook),1,fp)==0)//向文件写入数据,并判断是否出错
printf("向文件输入数据失败!\n\n")
fprintf(fp1,"%d",m)
fclose(fp)//关闭文件
fclose(fp1)//关闭文件
}
void read(structbook *p)//从文件读取信息模块
{FILE *fp,*fp1
int i
if((fp=fopen("tushu.txt","rb"))==NULL)//打开文件,并判断是否出错
{ printf("出错,请检查文件是否存在,按任意键返回住菜单")//打印出错提示
getchar()
}
if((fp1=fopen("book.txt","rb"))==NULL)//打开文件并判断是否出错
{ printf("创建文件失败!\n\n")//打印出错提示
getchar()return
}
fscanf(fp1,"%d",&m)
fclose(fp1)//关闭文件
for(i=0i<mi++,p++)
{ fread(p,sizeof(struct book),1,fp)//从文件中读取信息
}
fclose(fp)//关闭文件
}
你把保存的文件地址自己修改一下就可以了。。希望能帮到你
#include#includeclassBook{//书籍基类protected:charTitle[40]//书名longCode//条码intType//0表示书,1表示杂志public:Book()Book(char*title,longcode)voidSetCode(longcode){Code=code}voidSetTitle(char*tl){strcpy(Title,tl)}voidSetType(booltype){Type=type}intGetType(){returnType}longGetCode(){returnCode}virtualvoidShow()//显示书的信息friendostream&operator>(istream&is,Book&)//重载提取运算符Book*Next//为创建每个读者所借书链表而定义指针}classItem:publicBook{//书的款目//charTitle[40]//书名charAuthor[20]//著者名charIndexCode[10]//分类号//longCode//条码public:Item()Item(char*author,char*title,char*index,intcode)Item(Item&)voidSetAuthor(char*)voidSetIndexCode(char*)virtualvoidShow()//显示书的信息friendostream&operator>(istream&is,Item&)//重载提取运算符public:}classMagazine:publicBook{//杂志类intVolumeenumLANG{CHINESE=1,ENGLISH}Lang//枚举变量,确定语言类别public:Magazine():Book(){Volume=0Lang=CHINESEType=1}Magazine(char*title,intvol,LANGlang,intcode)Magazine(Magazine&)voidSetVolume(intvol){Volume=vol}voidSetLang(intlang){Lang=(LANG)lang}virtualvoidShow()//显示杂志的信息friendostream&operator>(istream&is,Magazine&)//重载提取运算符}classReader{//读者信息类charName[20]//姓名charPosition[20]//职务intAge//年龄longCode//借书证号Book*items//所借书链表public:Reader()Reader(char*name,char*posi,intage,intcode)//Reader(Reader&)~Reader()longGetCode(){returnCode}voidSetName(char*)voidSetPosition(char*)voidSetAge(int)voidSetCode(long)voidAddBook(Item)//添加所借书voidAddBook(Magazine)//添加所借杂志voidDelBook(Bookit)//还书后减少所借书voidShowBooks()//显示所借书voidShow()//显示读者信息friendostream&operator>(istream&is,Reader&)//重载提取运算符public:intCounter//计数器,统计所借书数目}classManager{//管理员类charName[20]//姓名intAge//年龄intCode//工号friendclassLibrary//将图书馆类声明为友元public:Manager(){}Manager(char*,int,int)longGetCode(){returnCode}voidShow()friendostream&operator>(istream&is,Manager&)//重载提取运算符}classLoan{//借阅信息类intType//0表示书,1表示杂志Itemitem//借阅书Magazinemag//借阅杂志Readerreader//借阅者Managermanager//借书 *** 作员intCodefriendclassLibrary//将图书馆类声明为友元public:Loan(){}Loan(Loan&l)intGetCode(){returnCode}voidShow()friendostream&operator>(istream&is,Loan&)//重载提取运算符}、、、、、、、、、、、、、、、、、、、、、、、#include#includeclassReadertemplateclassDblListtemplateclassDblNode{public:TInfo//数据域DblNode*llink,*rlink//前驱(左链)、后继(右链)指针public:DblNode(Tdata)//一般结点DblNode()//头结点TGetInfo(){returnInfo}friendclassDblListfriendclassLibrary}templateclassDblList{DblNode*head,*currentpublic:DblList()~DblList()voidInsert(constT&data)DblNode*Remove(DblNode*p)voidPrint()intLength()//计算链表长度DblNode*Find(Tdata)//搜索数据与定值相同的结点DblNode*Find(intdata)//按某个关键字查找voidMakeEmpty()//清空链表voidShowList()//显示链表各结点friendistream&operator>>(istream&,DblList&)//重载输入流运算符friendostream&operator&dlist)//重载输出流运算符friendclassLibrary//其它 *** 作}templateDblNode::DblNode(){llink=rlink=NULL}templateDblNode::DblNode(Tdata){info=datallink=NULLrlink=NULL}templateDblList::DblList(){//建立表头结点head=newDblNode()head->rlink=head->llink=headcurrent=NULL}templateDblList::~DblList(){MakeEmpty()//清空链表deletehead}templatevoidDblList::MakeEmpty(){DblNode*tempPwhile(head->rlink!=head){tempP=head->rlinkhead->rlink=tempP->rlink//把头结点后的第一个节点从链中脱离tempP->rlink->llink=head//处理左指针deletetempP//删除(释放)脱离下来的结点}current=NULL//current指针恢复}templatevoidDblList::Insert(constT&data){//新节点在链尾current=newDblNodecurrent->Info=datacurrent->rlink=head//注意次序current->llink=head->llinkhead->llink->rlink=currenthead->llink=current//最后做}templateDblNode*DblList::Remove(DblNode*p){//删除结点current=head->rlinkwhile(current!=head&¤t!=p)current=current->rlinkif(current==head)current=NULLelse{//结点摘下p->llink->rlink=p->rlinkp->rlink->llink=p->llinkp->rlink=p->llink=NULL}returncurrent}templateDblNode*DblList::Find(Tdata){//按结点查找current=head->rlinkwhile(current!=head&¤t->Info!=data)current=current->rlinkif(current==head)current=NULLreturncurrent}templateDblNode*DblList::Find(intdata){//按数据值查找结点current=head->rlinkinttemp=current->Info.GetCode()while(current!=head&&temp!=data){current=current->rlinktemp=current->Info.GetCode()}if(current==head)current=NULLreturncurrent}templatevoidDblList::Print(){//输出链表current=head->rlinkwhile(current!=head){coutInforlink}coutintDblList::Length(){//取得链表长度intcount=0current=head->rlinkwhile(current!=head){count++current=current->rlink}returncount}templatevoidDblList::ShowList(){//输出链表各结点intcount=0current=head->rlinkwhile(current!=head){current->GetInfo().Show()current=current->rlink}return}templateistream&operator>>(istream&is,DblList&dlist){intlenTtt//定义局部变量读入一个结点is>>lenfor(inti=0i>ttdlist.Insert(tt)}returnis}templateostream&operator&dlist){DblNode*tempPintlen=dlist.Length()osrlinkwhile(tempP!=dlist.head){//循环输出链表各结点osInfotempP=tempP->rlink}returnos}#include"class.h"#include"dblist.h"#includeclassLibrary{//封装图书馆流通业务的类DblListitem//在馆图书链表DblListmag//在馆杂志链表DblListreader//读者链表DblListloan//借阅信息链表DblListmanager//管理员信息链表intitemNum//记录在馆图书数目intmagNum//记录在馆杂志数目intreaderNum//记录读者数目intloanNum//记录借阅信息数目intmanagerNum//记录管理员数目ofstreamitemFileOut//文件流对象,保存图书馆书籍数据ifstreamitemFileIn//文件流对象,读入图书馆书籍数据ofstreammagFileOut//文件流对象,保存图书馆杂志数据ifstreammagFileIn//文件流对象,读入图书馆杂志数据ofstreamreaderFileOut//文件流对象,保存图书馆读者数据ifstreamreaderFileIn//文件流对象,读入图书馆读者数据ofstreamloanFileOut//文件流对象,保存图书馆借阅信息数据ifstreamloanFileIn//文件流对象,读入图书馆借阅信息ofstreammanagerFileOut//文件流对象,保存图书馆管理员数据ifstreammanagerFileIn//文件流对象,读入图书馆管理员数据public:Library()//构造函数~Library()//析构函数voidRun()//图书馆类的运行函数voidCreateBibliotheca()//创建书目voidCreateReader()//创建读者库voidCreateManager()//创建管理员信息intShowMainMenu()//显示主菜单函数voidBorrow()//借书 *** 作voidReturn()//还书 *** 作voidRequire()//查询 *** 作voidSaveInfo()//保存图书馆信息voidOpenInfo()//读入图书馆信息}欢迎分享,转载请注明来源:内存溢出
评论列表(0条)