图书馆管理系统Word文件下载.docx
《图书馆管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《图书馆管理系统Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
输出出错信息
else
{while(输入没有结束)
{让用户输入一条记录;
写入文件中;
设置输入状态;
}
return(数据文件名)
}
2)数据文件按关键字进行排序
使用冒泡法,算法同教材,描述如下:
voidBkSort(Books*Bk)
/*code待排序记录的关键字即书籍编号,sum待排序记录的个数即书目总数*/
{inti,j,n;
Books*temp;
i=1;
n=Bk->
sum;
for(i=0;
i<
n-1;
i++)
{for(j=n-1;
j>
i;
j--)
if(strcmp(Bk->
books[j].code,Bk->
books[j-1].code)<
0)
{用字符串复制函数strcpy()以及临时中介temp,
把Bk->
books[j]和Bk->
books[j-1]的内容进行交换
}/*共进行sum次冒泡,如果没有发生交换则结束*/
3)用到的函数
BkPrint(BooksBk,intn)/*输出书目信息表格*/
MbPrint(MembersMb,intn)/*输出会员信息表格*/
voidInit(BooksBk,MembersMb)/*记录初始化*/
BkSort(BooksBk)/*用冒泡法,系统自动给书籍按编号排序*/
MbSort(MembersMb)/*用冒泡法,系统自动对会员按学号排序*/
BSeqSearch(BooksBk,charname[])/*按书名,对书籍进行顺序查找*/
MSeqSearch(MembersMb,charname[])/*按姓名,对会员进行顺序查找*/
intBkSearch(BooksBk,charcode[])/*按编号,对书籍进行二分查找*/
intMbSearch(MembersMb,charno[])/*按学号,对会员进行二分查找*/
voidBkAdd(BooksBk)/*添加书目信息*/
voidMbAdd(MembersMb)/*添加会员信息*/
voidBkDelete(BooksBk)/*删除书籍*/
voidMbDelete(BooksBk)/*删除会员*/
Borrow(BooksBk,MembersMb)/*借书*/
Return(BooksBk,MembersMb)/*还书*/
4)查询功能
图书查询
a.按编号查询
b.按书名查询
会员查询
a.按学号查询
b.按姓名查询
3数据结构的设计
图书信息(编号,书名,作者,借阅状态)
typedefstruct{
charcode[10];
/*编号*/
charname[20];
/*名字*/
charwriter[10];
/*作者*/
intflag;
/*借阅状态,flag=0则为可借状态,flag=1则为借出状态*/
}Book_info;
会员信息(学号,姓名,借书信息)
charno[10];
/*学号*/
/*姓名*/
Book_infobbk[5];
/*所借书籍的编号,每个会员最多可借5本书*/
intcount;
/*借书数目,0<
=count<
=5*/
}Member_info;
数据定义类型为:
#defineMAXSIZE100
structBook_infobooks[MAX];
intsum;
}Books;
typedefBooksBk;
structMember_infomembers[MAX];
}Members;
typedefMembersMb;
4具体程序的实现
{printf(p1);
printf(p2);
printf(p3);
if(Bk.books[n].flag==0)
printf(p4,Bk.books[n].code,Bk.books[n].name,Bk.books[n].writer);
if(Bk.books[n].flag==1)
printf(p5,Bk.books[n].code,Bk.books[n].name,Bk.books[n].writer);
{inti;
printf(p6);
printf(p7);
printf(p8);
Mb.members[n].count;
{printf(p9,Mb.members[n].no,Mb.members[n].name,Mb.members[n].bbk[i]);
printf(p8);
printf("
已借%d/5本书\n"
i);
{Bk.sum=0;
Mb.sum=0;
strcpy(Mb.members[0].no,"
0000000000"
);
strcpy(Mb.members[0].name,"
membername"
Mb.members[0].count=0;
strcpy(Bk.books[0].code,"
strcpy(Bk.books[0].name,"
bookname"
strcpy(Bk.books[0].writer,"
writername"
Bk.books[0].flag=1;
{intj;
chart='
y'
;
ints=Bk.sum;
charcode[10],name[20],writer[10];
书目信息录入\n"
while(t=='
||t=='
Y'
{printf("
编号:
\n"
scanf("
%s"
code);
if(BkSearch(Bk,code)!
=0)
printf("
该编号已存在!
else{strcpy(Bk.books[s++].code,code);
书名:
name);
strcpy(Bk.books[s++].name,name);
作者:
writer);
strcpy(Bk.books[s++].writer,writer);
Bk.books[s].flag=0;
Bk.sum++;
是否继续添加(y/n):
t=getch();
BkSort(Bk);
ints=Mb.sum;
charno[10],name[20];
会员信息录入\n"
学号:
no);
if(MbSearch(Mb,no)!
该学号已存在!
else{strcpy(Mb.members[s++].no,no);
姓名:
strcpy(Mb.members[s++].name,name);
Mb.sum++;
MbSort(Mb);
请输入要删除的书籍的编号:
j=BkSearch(Bk,code);
if(j==0)
该编号不存在!
elseif(Bk.books[j].flag==1)
对不起,该书已借出,不能操作!
elsefor(;
j<
s;
j++)
{strcpy(Bk.books[j].code,Bk.books[j+1].code);
strcpy(Bk.books[j].name,Bk.books[j+1].name);
strcpy(Bk.books[j].writer,Bk.books[j+1].writer);
Bk.books[j].flag=1;
Bk.sum--;
是否继续删除(y/n):
voidMbDelete(MembersMb)/*删除会员*/
{inti,j,k;
请输入要删除的会员的学号:
j=MbSearch(Mb,no);
该学号不存在!
elseif(Mb.members[j].count!
该会员已借阅%d本图书,不能进行操作!
Mb.members[j].count);
else{k=Mb.members[j+1].count;
Mb.members[j].count=Mb.members[j+1].count;
for(;
for(i=0;
k;
{strcpy(Mb.members[j].no,Mb.members[j+1].no);
strcpy(Mb.members[j].name,Mb.members[j+1].name);
strcpy(Mb.members[j].bbk[i],Mb.members[j+1].bbk[i]);
Mb.sum--;
/*************************************************************************/
Borrow(BooksBk,MembersMb)/*借书*/
请输入要借阅的图书编号:
scanf("
i=BkSearch(Bk,code);
if(i==0)
查无此书!
elseif(Bk.books[i].flag==0)
请输入学号:
k=Mb.members[j].count;
对不起,您还不是会员!
elseif(k==5)
对不起,您的借阅额度已满!
else{Bk.books[j].flag=1;
strcpy(Mb.members[j].bbk[k+1],code);
Mb.members[j].count++;
借阅成功,您有30天的借阅期限!
Return(BooksBk,MembersMb)/*还书*/
{inti,j,t;
i=MbSearch(Mb,no);
查无此人!
else{printf("
请输入要归还的图书编号:
t=BkSearch(Bk,code);
if(t==0)
else{Bk.books[t].flag=0;
for(j=0;
Mb.members[i].count;
{if(strcmp(Mb.members[i].bbk[j],code)==0)
strcpy(Mb.members[i].bbk[j],Mb.members[i].bbk[j+1]);
Mb.members[i].count--;
操作成功!
Bookstemp;
n=Bk.sum;
if(strcmp(Bk.books[j].code,Bk.books[j-1].code)<
{strcpy(temp.books[0].code,Bk.books[j-1].code);
strcpy(temp.books[0].name,Bk.books[j-1].name);
strcpy(temp.books[0].writer,Bk.books[j-1].writer);
temp.books[0].flag=Bk.books[j-1].flag;
strcpy(Bk.books[j-1].code,Bk.books[j].code);
strcpy(Bk.books[j-1].name,Bk.books[j].name);
strcpy(Bk.books[j-1].writer,Bk.books[j].writer);
Bk.books[j-1].flag=Bk.books[j].flag;
strcpy(Bk.books[j].code,temp.books[0].code);
strcpy(Bk.books[j].name,temp.books[0].name);
strcpy(Bk.books[j].writer,temp.books[0].writer);
Bk.books[j].flag=temp.books[0].flag;
{inti,j,k,n;
Memberstemp;
n=Mb.sum;
for(k=0;
k<
5;
k++)
if(strcmp(Mb.members[j].no,Mb.members[j-1].no)<
{strcpy(temp.members[0].no,Mb.members[j-1].no);
strcpy(temp.members[0].name,Mb.members[j-1].name);
strcpy(temp.members[0].bbk[k],Mb.members[j-1].bbk[k]);
strcpy(Mb.members[j-1].no,Mb.members[j].no);
strcpy(Mb.members[j-1].name,Mb.members[j].name);
strcpy(Mb.members[j-1].bbk[k],Mb.members[j-1].bbk[k]);
strcpy(Mb.members[j].no,temp.members[0].no);
strcpy(Mb.members[j].name,temp.members[0].name);
strcpy(Mb.members[j].bbk[k],temp.members[0].bbk[k]);
BooksBSeqSearch(BooksBk,charname[])/*按书名,对书籍进行顺序查找*/
{Bookstemp;
intj;
j=Bk.sum;
while(j>
{if(strcmp(Bk.books[j].name,name)==0)
BkPrint(Bk,j);
j--;
查无此人\n"
voidMSeqSearch(MembersMb,charname[])/*按姓名,对会员进行顺序查找*/
j=Mb.sum;
{if(strcmp(Mb.members[j].name,name)==0)
MbPrint(Mb,j);
{intlow,high,mid;
low=1;
high=Bk.sum;
while(low<
=high)
{mid=(low+high)/2;
if(strcmp(Bk.books[mid].code,code)==0)
returnmid;
if(strcmp(Bk.books[mid].code,code)>
high=mid-1;
else
low=mid+1;
return0;
high=Mb.sum;
if(strcmp(Mb.members[mid].no,no)==0)
if(strcmp(Mb.members[mid].no,no)>
5界面设计
1.图书管理系统
1.1增加图书
1.2查询图书
1.2.1按书名查询
1.2.2按编号查询
1.3删除图书
1.4图书借阅
1.5还书
1.6返回主菜单
2.会员管理系统
2.1增加会员
2.2查询会员
2.2.1按名字查询
2.2.2按学号查询
2.3删除会员
2.4借书信息
2.5返回主菜单
3.退出
相关源程序:
voidmain()
{BooksBk;
MembersMb;
FILE*fp;
intselect;
intcount1=1;
intcount2=1;
/*保存文件中的记录条数*/
Init(Bk,Mb);
fp=fopen("
D:
\\图书管理"
"
/*以追加方式打开文本文件D:
\\图书管理,可读可写,若此文件不存在,会创建此文件*/
\n打开文件失败!
exit(0);
while(!
feof(fp))
{if(fread(&
Bk.books[count1],sizeof(Book_info),1,fp)==1)
count1++;
if(fread(&
Mb.members[count2],sizeof(Member_info),1,fp)==1)
count2++;
fclose(fp);
\n打开文件成功,书目记录数为:
%d,会员记录数为:
%d\n"
count1,count2);
while
(1)
\n主菜单\n\n"
1.图书管理系统\n\n"
2.会员管理系统\n\n"
0.退出\n\n"
输入选项(0-2):
%d"
&
select);
switch(select)
{case1:
Book_Ctr();
break;
case2:
Member_Ctr();
case0:
exit(0);
default:
输入有误,请重新输入:
getch();
Book_Ctr()/*二级目录图书管理系统*/
intselect1,temp;
charselect2;
charcode[10],name[20];
\n图书管理系统\n\n"
p