帮我看一段一个图书管理代码不知道错在哪里

snoopy99 2003-06-30 04:35:24
#include<iostream.h>
#include<stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#include<malloc.h>
typedef struct{
char name[10];
char info;
int count;
}Book;
typedef struct{
Book *elem;
int length;
int listsize;
}SqList;
int InitLIst_Sq(SqList &L)
{
L.elem=(Book*)malloc(LIST_INIT_SIZE*sizeof(Book));

L.length=0;
L.listsize=LIST_INIT_SIZE;

return 1;
}
int ListInsert_Sq(SqList &L,int i,Book e)//新书入库
{
Book *q;
q=L.elem+i-1;
*q=e;
L.length=0;
++L.length;


return 1;
}
void check(SqList &L)//书库查询
{
int i=1,j=0;
cout<<"书号:"<<L.length;
for(;i<=L.length;i++)
{
cout<<"书名:";
for(j=0;!((L.elem)->name[j]=='\0');j++)
cout<<L.elem->name[j];
cout<<" 是否借出:"<<L.elem->info<<endl;
}
}
void lendbook(SqList &L)//借阅查询
{
int i,j;
cout<<"已借出书籍:"<<endl;
for(i=0;i<=L.length;i++)
if((L.elem+i)->info=='Y'||'y')
{
for(j=0;!((L.elem)->name[j]=='\0');j++)
cout<<L.elem->name[j];
cout<<endl;
}
else
continue;
}

void lend(SqList &L,int c)//借书
{
int i,j;
cout<<L.length;
cout<<"未借出的书藉:"<<endl;
for(i=0;i<=L.length;i++)
{
if((L.elem+i)->info=='N'||'n')
{
cout<<L.elem->count<<".";
for(j=0;!((L.elem)->name[j]=='\0');j++)
cout<<L.elem->name[j];
cout<<endl;
}
else
continue;
}

(L.elem+c-1)->info='n';
cout<<"\n"<<"已成功借书。"<<endl;
}
void showmenu()
{
cout<<"欢迎进入图书管理系统"<<endl;
cout<<"1.新书入库。"<<endl;
cout<<"2.借阅查询。"<<endl;
cout<<"3.书库查询。"<<endl;
cout<<"4.借书。"<<endl;
cout<<"请选择:";
}


void main()
{
char ch,sel,name[10];
int i=0,x,d=0;
SqList test;
InitLIst_Sq(test);
Book newbook;
for(;ch=='y'||'Y';)
{
showmenu();
cin>>sel;
if(sel=='1')
{
cout<<"请输入图书名称:";
d++;

cout<<d;

for(i=0;i<10;i++)
cin>>newbook.name[i];
newbook.info='n';
newbook.count=1;


ListInsert_Sq(test,d,newbook);
}
if(sel=='2')
lendbook(test);
if(sel=='3')
check(test);
if(sel=='4')
{
cout<<"请输入要借书的书号";
cin>>x;
lend(test,x);

}
}
}


我用的是顺序表 我在输入第二本书时在书库查询中还是出现第一本的信息
...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rtdb 2003-07-01
  • 打赏
  • 举报
回复
if(((L.elem+i)->info)=='Y'||'y')
后一条件||'y'始终成立
应为:
if(((L.elem+i)->info)=='Y'||((L.elem+i)->info)=='y')

我习惯写为:
if(L.elem[i].info=='Y' || L.elem[i].info)=='y')
snoopy99 2003-06-30
  • 打赏
  • 举报
回复
void lendbook(SqList &L)//借阅查询
{
int i,j=0;

for(i=0;i<L.length;i++)
{
if(((L.elem+i)->info)=='Y'||'y')
{
cout<<"已借出的书藉:"<<(L.elem+i)->name<<endl;
j=1;
}
else
continue;
}
if(j==0)
cout<<"无借出书藉。";

}
为什么不管info的值是什么 它都输出书籍借出?
rtdb 2003-06-30
  • 打赏
  • 举报
回复
比较明显的错误:
1. for(j=0;!((L.elem)->name[j]=='\0');j++)
cout<<L.elem->name[j];
for(i=0;i<10;i++)
cin>>newbook.name[i];
cin, cout可以直接处理字符串, 你加循环就错了。

2. int ListInsert_Sq(SqList &L,int i,Book e)//新书入库
{
Book *q;
q=L.elem+i-1;
*q=e;
L.length=0;
++L.length;
順序表不能指定插入位置, 所以 int i是多余的。 L.length=0;这句也不应有,
否则你下句执行完了, length永远是1, 查不到其它的书的。


liao2001 2003-06-30
  • 打赏
  • 举报
回复
你找到灯塔的同时你触礁了,呵呵
我看到代码就头疼,怎么办呀~~~
snoopy99 2003-06-30
  • 打赏
  • 举报
回复
大哥我找到灯塔了 教 教我啊
snoopy99 2003-06-30
  • 打赏
  • 举报
回复
感谢大哥了 能为我讲解一下我的错误吗 谢谢 还有我在这方面还要注意点什么?谢谢
rtdb 2003-06-30
  • 打赏
  • 举报
回复

#include<iostream.h>
#include<stdio.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#include<malloc.h>
typedef struct{
char name[10];
char info;
int count;
}Book;
typedef struct{
Book *elem;
int length;
int listsize;
}SqList;
int InitLIst_Sq(SqList &L)
{
L.elem=(Book*)malloc(LIST_INIT_SIZE*sizeof(Book));

L.length=0;
L.listsize=LIST_INIT_SIZE;

return 1;
}
int ListInsert_Sq(SqList &L, Book e)//新书入库
{
Book *q;
q=L.elem+L.length;
*q=e;
// L.length=0;
++L.length;
return 1;
}
void check(SqList &L)//书库查询
{
int i;
cout<<"书号:"<<L.length<<endl ;
for(i=0;i<L.length;i++)
{
cout<<"书名:";
cout<<L.elem[i].name;
cout<<" 是否借出:"<<L.elem[i].info<<endl;
}
}
void lendbook(SqList &L)//借阅查询
{
int i,j;
cout<<"已借出书籍:"<<endl;
for(i=0;i<L.length;i++)
if((L.elem+i)->info=='Y'||'y')
{
for(j=0;!((L.elem)->name[j]=='\0');j++)
cout<<L.elem->name[j];
cout<<endl;
}
else
continue;
}

void lend(SqList &L,int c)//借书
{
int i,j;
cout<<L.length;
cout<<"未借出的书藉:"<<endl;
for(i=0;i<=L.length;i++)
{
if((L.elem+i)->info=='N'||'n')
{
cout<<L.elem->count<<".";
for(j=0;!((L.elem)->name[j]=='\0');j++)
cout<<L.elem->name[j];
cout<<endl;
}
else
continue;
}

(L.elem+c-1)->info='n';
cout<<"\n"<<"已成功借书。"<<endl;
}
void showmenu()
{
cout<<"欢迎进入图书管理系统"<<endl;
cout<<"1.新书入库。"<<endl;
cout<<"2.借阅查询。"<<endl;
cout<<"3.书库查询。"<<endl;
cout<<"4.借书。"<<endl;
cout<<"请选择:";
}


void main()
{
char ch,sel,name[10];
int i=0,x,d=0;
SqList test;
InitLIst_Sq(test);
Book newbook;
for(;ch=='y'||'Y';)
{
showmenu();
cin>>sel;
if(sel=='1')
{
cout<<"请输入图书名称:";
d++;

cout<<d;

// for(i=0;i<10;i++)
cin>>newbook.name;
newbook.info='n';
newbook.count=1;


ListInsert_Sq(test,newbook);
}
if(sel=='2')
lendbook(test);
if(sel=='3')
check(test);
if(sel=='4')
{
cout<<"请输入要借书的书号";
cin>>x;
lend(test,x);

}
}
}

我帮你把功能1和3调好了。
新手吧, 程序写的较差, 还要努力。

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧