c语言图书管理系统Word文档下载推荐.docx
《c语言图书管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c语言图书管理系统Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。
}reader;
reader*elem;
}readerlist;
inti=0,r=0;
statusinitbooklist(booklist&
st){//初始化表
st.elem=(book*)malloc(list_init_size*sizeof(book));
if(!
st.elem)exit(overflow);
st.length=0;
st.listsize=list_init_size;
returnok;
}
statusinitlist_reader(readerlist&
rd,booklist&
st){//初始化读者表
rd.elem=(reader*)malloc(list_init_size*sizeof(reader));
rd.elem)exit(overflow);
rd.length=0;
rd.listsize=list_init_size;
statussearchbook1(booklistst,charnam[20],int&
n){//按书名查找,书名相同的第一个记录号
for(intj=1;
j<
=st.length;
j++){
if(EQ(st.elem[j].nam,nam)){
n=j;
returntrue;
}
}
returnfalse;
}
statussearchbook2(booklistst,charnum[7],int&
n){//按书号查找的函数
if(EQ(st.elem[j].num,num)){
statussearchbook3(booklistst,charnam[20]){//返回同一书名书的数目
intm=0;
if(EQ(st.elem[j].nam,nam))m++;
returnm;
statussearchbook4(booklistst,charnam[20]){//返回可借书的数目
if(EQ(st.elem[j].nam,nam)&
&
st.elem[j].truefalse==1)m++;
voidchange(booklist&
st,charc[20],intm,intn){//改变库存量和现存量的,将书名想通的记录改为相同的库存量和现存量
for(intj=1;
j<
=st.length+1;
if(EQ(st.elem[j].nam,c)){
st.elem[j].nownum=m;
st.elem[j].sumnum=n;
voidaddbook(booklist&
st){//实现添加记录功能的函数
intm=0,n=0;
//m表示本次输入的书的次序,n用作返回记录号
booka,*newbase;
printf("
------------------------------------追加记录-----------------------------------\n"
);
charp='
1'
;
do{
if(st.length>
=st.listsize){//如果空间不够,分配空间
newbase=(book*)realloc(st.elem,(st.listsize+listincrement)*sizeof(book));
if(!
newbase)exit(overflow);
st.elem=newbase;
st.listsize+=listincrement;
请你输入本次第%d本书的序号\n"
m+1);
scanf("
%s"
a.num);
if(searchbook2(st,a.num,n)==1){
printf("
书本序号已存在,请重新输入!
\n"
continue;
请你输入书名\n"
a.nam);
请你输入书的作者\n"
a.author);
i++;
st.elem[i]=a;
st.elem[i].truefalse=1;
if(searchbook1(st,a.nam,n)==1){//判断书名是否存在,若存在,追加记录,改变库存量和现存量
st.elem[n].nownum++;
st.elem[n].sumnum++;
change(st,st.elem[n].nam,st.elem[n].nownum,st.elem[n].sumnum);
else{//书名不存在,追加记录,库存量和现存量均置一
st.elem[i].nownum=1;
st.elem[i].sumnum=1;
m++;
st.length++;
printf("
\t\t\t请选择:
1.继续输入2.返回\n"
scanf("
&
p);
if(p!
='
&
p!
2'
)printf("
\t\t\t\t输入错误,请重新输入!
}while(p!
}while(p!
voidsearchbook(booklistst){//实现按书号,书名,著作者关键字中的任意一个查找
intk;
s='
------------------------------------查找记录-----------------------------------\n"
booka;
k=0;
//k标示是否找到
if(st.length<
1){
记录表为空,无法查找,请先添加记录.\n"
break;
请选择进行查找的关键字:
1.书号2.书名3.著作者\n"
scanf("
s);
if(s=='
)//按书号查找
{
请输入书号:
"
a.num);
for(intj=1;
j<
=st.length;
j++)
{
if(EQ(st.elem[j].num,a.num)){
printf("
\t\t\t\t书号:
%s\n"
st.elem[j].num);
\t\t\t\t书名:
st.elem[j].nam);
\t\t\t\t著作者:
st.elem[j].author);
\t\t\t\t现存量:
%d\n"
st.elem[j].nownum);
\t\t\t\t库存量:
st.elem[j].sumnum);
k=1;
if(st.elem[j].truefalse==0)printf("
\t\t\t\t该书已借出\n"
}
}
elseif(s=='
)//按书名查找
请输入书名:
a.nam);
j++){
if(EQ(st.elem[j].nam,a.nam))
{
3'
){//按作者查找
请输入著作者:
a.author);
if(EQ(st.elem[j].author,a.author))
else{
\t\t\t\t输入错误,请重新输入:
continue;
if(k==0)printf("
要查找的记录不存在\n"
do{
\t\t\t\t请选择:
1.继续查找2.返回\n"
if(p!
}while(p!
voiddeletebook(booklist&
st){//按查找关键字删除记录
chars='
chart='
booka;
intl=st.length;
book*m;
------------------------------------删除记录-----------------------------------\n"
intk=0;
//k为是否找到的标示
请查找你需要删除的记录\n"
)//按书号删除;
if(st.length<
1)printf("
\t\t记录表为空,无法查找,请先添加记录.\n"
if(st.length<
break;
if(st.elem[j].truefalse==0){
printf("
书已经借出,无法删除!
continue;
}
书号:
书名:
著作者:
现存量:
库存量:
%d\n\n"
do{
\t\t确定要删除吗?
1.删除2.取消\n"
scanf("
t);
if(t=='
)
{
m=&
(st.elem[j]);
for(m;
m<
=st.elem+l-1;
m++)*(m)=*(m+1);
--st.length;
st.elem[j].nownum--;
st.elem[j].sumnum--;
change(st,st.elem[j].nam,st.elem[j].nownum,st.elem[j].sumnum);
printf("
\t\t\t\t记录已删除\n"
j--;
}
elseif(t=='
\t\t\t\t删除已取消\n"
else
\t\t\t输入错误,请重新输入\n"
}while(t!
t!
){//按书名删除
if(EQ(st.elem[j].nam,a.nam)){
){//按著作者删除
if(EQ(st.elem[j].author,a.author)){
do{
\t\t\t\t输入错误,请重新输入\n"
\t\t\t要查找的记录不存在\n"
1.继续删除2.返回\n"
if(s!
s!
}while(s!
}while(s!
voidlendbook(booklist&
st,readerlist&
rd){//实现借书的函数
readera,*newbase;
------------------------------------借阅图书-----------------------------------\n"
intn=0;
intk=0;
if(rd.length>
=rd.listsize){
newbase=(reader*)realloc(rd.elem,(rd.listsize+listincrement)*sizeof(reader));
if(!
rd.elem=newbase;
rd.listsize+=listincrement;
}
请输入书证号:
a.readernum);
请输入书名:
请输入书号:
请输入归还日期:
a.backtime);
if(sea