c语言 图书管理系统 源代码

c语言 图书管理系统 源代码,第1张

#include

#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()//读入图书馆信息}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11789034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存