首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

,图书管理系统。C++代码哪里出错了

2012-06-08 
求助,图书管理系统。C++代码哪里出错了[codeC/C++][/code]#include iostream#include iomanip#include

求助,图书管理系统。C++代码哪里出错了
[code=C/C++][/code]

#include <iostream>
#include <iomanip>
#include <cstring>
#include <fstream>//输入/输出文件流类
using namespace std;
const int Maxr=100;//最多的读者
const int Maxb=100;//最多的图书
const int Maxzf=5;//每位读者最多借五本书
//读者类,实现对读者的信息的描述

class Reader
{
  private:
 int tag; //删除标记 1:已删 0:未删
 int no; //读者编号
 char name[10]; //读者姓名
 int zfbook[Maxzf];//所借图书
  public:
  Reader() {}
  char *getname() {return name;} //获取姓名
  int gettag() {return tag;} //获取删除标记
  int getno() {return no;} //获取读者编号
  void setname(char na[]) //设置姓名
  {
  strcpy(name,na);

  }
 void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删
 void addreader(int n,char *na)//增加读者
 {
  tag=0;
  no=n;
  strcpy(name,na);
  for(int i=0;i<Maxzf;i++)
  zfbook[i]=0;
 }
 void zfrowbook(int bookid)//借书操作
 {
  for(int i=0;i<Maxzf;i++)
  {
  if (zfbook[i]==0)
  {
  zfbook[i]=bookid;
  return;

  }
  }

 }
 int retbook(int bookid)//还书操作
 {
  for(int i=0;i<Maxzf;i++)
  {
  if(zfbook[i]==bookid)
  {
  zfbook[i]=0;
  return 1;

  }
  }
  return 0;
 }
 void disp()//读出读者信息
 {
  cout << setw(5) << no <<setw(10) << name<<"借书编号:[";
  for(int i=0;i<Maxzf;i++)
  if(zfbook[i]!=0)
  cout << zfbook[i] << "|";
  cout << "]"<<endl;

 }
};

//读者类库,实现建立读者的个人资料
 class RDatabase
{
private:
  int top; //读者记录指针
  Reader read[Maxr];//读者记录
public:
 RDatabase() //构造函数,将reader.txt读到read[]中
 {
  Reader s;
  top=-1;
  fstream file("reader.txt",ios::in);//打开一个输入文件
  while (1)
  {
  file.read((char *)&s,sizeof(s));
  if (!file)break;
  top++;
  read[top]=s;
  }
  file.close(); //关闭 reader.txt
 }
  void clear()//删除所有读者信息
 {
  top=-1;
 }
 int addreader(int n,char *na)//添加读者时先查找是否存在
 {
  Reader *p=query(n);
  if (p==NULL)
  {
  top++;
  read[top].addreader(n,na);
  return 1;
  }
  return 0;
 }
 Reader *query(int readerid)//按编号查找
 {
  for (int i=0;i<=top;i++)
  if (read[i].getno()==readerid &&
  read[i].gettag()==0)
  {
  return &read[i];
  }
  return NULL;
 }
 void disp() //输出所有读者信息
 {
  for (int i=0;i<=top;i++)
  read[i].disp();
 }
 void readerdata();//读者库维护
 ~RDatabase() //析构函数,将read[]写到reader.txt文件中
 {
  fstream file("reader.txt",ios::out);
  for (int i=0;i<=top;i++)
  if (read[i].gettag()==0)
  file.write((char *)&read[i],sizeof(read[i]));
  file.close();
 }
};
void RDatabase::readerdata()
{
  char choice;
 char rname[20];
 int readerid;
 Reader *r;
 while (choice!='0')
 {
  cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;


  cin >> choice;
  switch (choice)
  {
  case '1':
  cout << "输入读者编号:";
  cin >> readerid;
  cout << "输入读者姓名:";
  cin >> rname;
  addreader (readerid,rname);
  break;
  case '2':
  cout << "输入读者编号:";
  cin >> readerid;
  r=query(readerid);
  if (r==NULL)
  {
  cout << " 该读者不存在 "<<endl;
  break;
  }
  cout << "输入新的姓名:";
  cin >> rname;
  r->setname(rname);
  break;
  case '3':
  cout << " 输入读者编号:";
  cin >> readerid;
  r=query(readerid);
  if (r==NULL)
  {
  cout <<" 该读者不存在" << endl;
  break;
  }
  r->delbook();
  break;
  case '4':
  cout << "读入读者编号:";
  cin >> readerid;
  r=query(readerid);
  if (r==NULL)
  {
  cout <<"该读者不存在"<< endl;
  break;
  }
  r->disp();
  break;
  case '5':
  disp();
  break;
  case '6':
  clear();
  break;
  default:cout<<"输入错误,请从新输入:";break;
  }
 }
}



//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
  int tag;//删除标记 1:已删 0:未删
 int no;//图书编号
 char name[20];//书名
  char author[20];//作者
  char cbs[20];//出版社
  double price;//价格
 int onshelf;//是否再架 1:再架 2:已借
public:
 Book(){}
 char *getname() { return name; }//获取姓名
 char *getauthor() { return author; }//获取作者
 char *getcbs() { return cbs; }//获取出版社
 int getno(){ return no; }//获取图书编号
 double getprice(){ return price; }//获取图书价格
 int gettag(){ return tag; }//获取删除标记
 void setname(char na[])//设置书名
 {
  strcpy(name,na);
 }
 void setauthor(char au[])//设置作者
 {
  strcpy(author,au);
 }
 void setcbs(char cbs[])//设置出版社
 {

 }
 void setprice(double price){}//设置价格


 void delbook(){ tag=1;}//删除图书
  void addbook(int n,char *na,char *au,char *cbs,double price)//增加图书
 {
  tag=0;
  no=n;
  strcpy(name,na);
  strcpy(author,au);
  double p;
  price=p;
  onshelf=1;
  return;
 }

 int zfrowbook()//借书操作
 {
  if (onshelf==1)
  {
  onshelf=0;
  return 1;
  }
  return 0;
 }
 void retbook()//还书操作
 {
  onshelf=1;
 }
 void disp()//输出图书
 {
  cout << setw(6) << no << setw(18) << name << setw(18) << author<< setw(18) <<cbs<< setw(18)<< price<< setw(10)
  <<(onshelf==1? "在架":"已借") <<endl;
 }
};



//图书库类,实现对图书的维护,查找,删除等
class BDatabase
{
private:
  int top; //图书记录指针
 Book book[Maxb]; //图书记录
public:
 BDatabase()//构造函数,将book.txt读到book[]中
 {
  Book b;
  top=-1;
  fstream file("book.txt",ios::in);
  while (1)


  {
  file.read((char *)&b,sizeof(b));
  if (!file) break;
  top++;
  }
  book[top]=b;
  file.close();
 }
  void clear()//全删
 {
  top=-1;
 }
  int addbook(int n,char *na,char *au,char *cbs,double price)//增加图书
 {Book *query(int bookid);
  Book *p=query(n);
  if (NULL==p)
  {
  top++;
  book[top].addbook(n,na,au,cbs,price);
  return 1;
  }
  return 0;
 }
};
 Book *query(int bookid)//查找图书
 {
  for (int i=0;i<=top;i++)
if (Book::getname()==bookid &&Book::gettag()==0)
  {
  return book[i];
  }
  return NULL;
 }
 void bookdata();//图书库维护
 void disp()
 {
  for (int i=0;i<=top;i++)
  if (book[i].gettag()==0)
  book[i].disp();
 }
 ~BDatabase()//析构函数,将book[]写到book.txt文件中
 {
  fstream file("book.txt",ios::out);
  for (int i=0;i<=top;i++);
  if (book[i].gettag()==0)
  file.write((char *)book[i],sizeof(book[i]));
  file.close();
return;
};
void BDatabase::bookdata()
{
  char choice;
 char bname[40];
  char bauthor[40];
  char bcbs[40];
 int bookid;
 double bprice;
 Book *b;
 while (choice)
 {
  cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;
  cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;
  cin >> choice;
  switch (choice)
  {
  case '1':
  cout << "输入图书编号:"<<endl;
  cin >> bookid;
  cout << "输入图书书名:"<<endl;
  cin >> bname;
cout << "输入作者:"<<endl;
  cin >> bauthor;
cout << "输入出版社:"<<endl;
  cin >> bcbs;
cout << "输入图书价格:"<<endl;
  cin >> bprice;
  addbook(n,na,au,cbs,price);
  break;
  case '2':
  cout << "输入图书编号:"<<endl;
  cin >> bookid;
  b=*query(bookid);
  if (b==NULL)
  {
  cout << " 该图书不存在 "<<endl;
  break;
  }
  cout << "输入新的书名:"<<endl;
  cin >> bname;
  b->setname(bname);

cout << "输入新的作者:"<<endl;
  cin >> bauthor;
  b->setauthor(bauthor);
cout << "输入新的出版社:"<<endl;
  cin >> bcbs;
  b->setcbs(bcbs);
cout << "输入新的价格:"<<endl;
  cin >> bprice;
  b->setprice(bprice);
  break;
  case '3':
  cout <<" 读入图书编号:"<<endl;
  cin >> bookid;
  b=*query(bookid);
  if (b==NULL)
  {
  cout <<" 该图书不存在" << endl;
  break;
  }
  b->delbook();
  break;
  case '4':
  cout << " 输入书名:"<<endl;
char bna[40];
  cin >> bna;
int k;
 for ( k=0;k<100;k++)
 {if(strcmp(book[k].getname(),bna)==0)


  if(book[k].gettag()==0)
  {return ;
  }
  }



  {
  cout <<" 该图书不存在"<< endl;
  break;
  }
  b->disp();
  break;
  case '5':
  disp();
  break;
  case '6':
  clear();
  break;
  default:cout<<"输入错误,请从新输入:";
  }
 }
}

//main() 函数的实现,程序的主界面的引导
int main()
{
 char choice;
 int bookid,readerid;
 RDatabase ReaderDB;
 Reader *r;
 BDatabase BookDB;
 Book *b;
 while(choice!='0')
 {
  cout <<endl<<endl<<"\t\t\t河 北 联 合 大 学 图 书 管 理 系 统\n\n\n";

  cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;
  cin >> choice;
  switch (choice)
  {
  case '1':
  cout <<" 借书 读者编号:";
  cin >>readerid;
  cout <<" 图书编号: ";
  cin >>bookid;
  r=ReaderDB.query(readerid);//按编号查找
  if (NULL==r)
  {
  cout <<" 不存在该读者,不能借书"<< endl;
  break;
  }
  b=BookDB.query(bookid);
  if (b==NULL)
  {
  cout <<" 不存在该图书,不能借书"<< endl;
  break;
  }
  if (b->zfrowbook()==0)
  {
  cout << " 该图书已借出,不能借书"<< endl;
  break;
  }
  r->zfrowbook(b->getno());
  break;
  case '2':
  cout<<"还书\n 读者编号:";
  cin >>readerid;
  cout << " 图书编号:";
  cin >>bookid;
  r=ReaderDB.query(readerid);
  if (r==NULL)
  {
  cout <<" 不存在该读者,不能还书" << endl;
  break;
  }
  b=BookDB.query(bookid);
  if (b==NULL)
  {
  cout <<" 不存在该图书,不能还书" <<endl;
  break;
  }
  b->retbook();
  r->retbook(b->getno());
  break;
  case '3':
  BookDB.bookdata();
  break;
  case '4':
  ReaderDB.readerdata();
  break;
  default:cout<<"输入错误,请从新输入:";
  }
 }
}


[解决办法]
单步调试吧,这么长的代码啊。
[解决办法]
把你的错误全改掉了,但我没有运行, 感觉你写的逻辑挺乱的, 也不熟练。
剩下的你调试吧。Good luck.

C/C++ code
#include <iostream>#include <iomanip>#include <cstring>#include <fstream>//输入/输出文件流类using namespace std;const int Maxr=100;//最多的读者const int Maxb=100;//最多的图书const int Maxzf=5;//每位读者最多借五本书//读者类,实现对读者的信息的描述class Reader{  private: int tag; //删除标记 1:已删 0:未删 int no; //读者编号 char name[10]; //读者姓名 int zfbook[Maxzf];//所借图书  public:  Reader() {}  char *getname() {return name;} //获取姓名  int gettag() {return tag;} //获取删除标记  int getno() {return no;} //获取读者编号  void setname(char na[]) //设置姓名  {  strcpy(name,na);  } void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删 void addreader(int n,char *na)//增加读者 {  tag=0;  no=n;  strcpy(name,na);  for(int i=0;i<Maxzf;i++)  zfbook[i]=0; } void zfrowbook(int bookid)//借书操作 {  for(int i=0;i<Maxzf;i++)  {  if (zfbook[i]==0)  {  zfbook[i]=bookid;  return;  }  } } int retbook(int bookid)//还书操作 {  for(int i=0;i<Maxzf;i++)  {  if(zfbook[i]==bookid)  {  zfbook[i]=0;  return 1;  }  }  return 0; } void disp()//读出读者信息 {  cout << setw(5) << no <<setw(10) << name<<"借书编号:[";  for(int i=0;i<Maxzf;i++)  if(zfbook[i]!=0)  cout << zfbook[i] << "|";  cout << "]"<<endl; }};//读者类库,实现建立读者的个人资料 class RDatabase{private:  int top; //读者记录指针  Reader read[Maxr];//读者记录public: RDatabase() //构造函数,将reader.txt读到read[]中 {  Reader s;  top=-1;  fstream file("reader.txt",ios::in);//打开一个输入文件  while (1)  {  file.read((char *)&s,sizeof(s));  if (!file)break;  top++;  read[top]=s;  }  file.close(); //关闭 reader.txt }  void clear()//删除所有读者信息 {  top=-1; } int addreader(int n,char *na)//添加读者时先查找是否存在 {  Reader *p=query(n);  if (p==NULL)  {  top++;  read[top].addreader(n,na);  return 1;  }  return 0; } Reader *query(int readerid)//按编号查找 {  for (int i=0;i<=top;i++)  if (read[i].getno()==readerid &&  read[i].gettag()==0)  {  return &read[i];  }  return NULL; } void disp() //输出所有读者信息 {  for (int i=0;i<=top;i++)  read[i].disp(); } void readerdata();//读者库维护 ~RDatabase() //析构函数,将read[]写到reader.txt文件中 {  fstream file("reader.txt",ios::out);  for (int i=0;i<=top;i++)  if (read[i].gettag()==0)  file.write((char *)&read[i],sizeof(read[i]));  file.close(); }};void RDatabase::readerdata(){  char choice; char rname[20]; int readerid; Reader *r; while (choice!='0') {  cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;  cin >> choice;  switch (choice)  {  case '1':  cout << "输入读者编号:";  cin >> readerid;  cout << "输入读者姓名:";  cin >> rname;  addreader (readerid,rname);  break;  case '2':  cout << "输入读者编号:";  cin >> readerid;  r=query(readerid);  if (r==NULL)  {  cout << " 该读者不存在 "<<endl;  break;  }  cout << "输入新的姓名:";  cin >> rname;  r->setname(rname);  break;  case '3':  cout << " 输入读者编号:";  cin >> readerid;  r=query(readerid);  if (r==NULL)  {  cout <<" 该读者不存在" << endl;  break;  }  r->delbook();  break;  case '4':  cout << "读入读者编号:";  cin >> readerid;  r=query(readerid);  if (r==NULL)  {  cout <<"该读者不存在"<< endl;  break;  }  r->disp();  break;  case '5':  disp();  break;  case '6':  clear();  break;  default:cout<<"输入错误,请从新输入:";break;  } }}//图书类,实现对图书的描述,图书的编号,书名,借出,还入等class Book{private:  int tag;//删除标记 1:已删 0:未删 int no;//图书编号 char name[20];//书名  char author[20];//作者  char cbs[20];//出版社  double price;//价格 int onshelf;//是否再架 1:再架 2:已借public: Book(){} char *getname() { return name; }//获取姓名 char *getauthor() { return author; }//获取作者 char *getcbs() { return cbs; }//获取出版社 int getno(){ return no; }//获取图书编号 double getprice(){ return price; }//获取图书价格 int gettag(){ return tag; }//获取删除标记 void setname(char na[])//设置书名 {  strcpy(name,na); } void setauthor(char au[])//设置作者 {  strcpy(author,au); } void setcbs(char cbs[])//设置出版社 { } void setprice(double price){}//设置价格 void delbook(){ tag=1;}//删除图书  void addbook(int n,char *na,char *au,char *cbs,double price)//增加图书 {  tag=0;  no=n;  strcpy(name,na);  strcpy(author,au);  double p;  price=p;  onshelf=1;  return; } int zfrowbook()//借书操作 {  if (onshelf==1)  {  onshelf=0;  return 1;  }  return 0; } void retbook()//还书操作 {  onshelf=1; } void disp()//输出图书 {  cout << setw(6) << no << setw(18) << name << setw(18) << author<< setw(18) <<cbs<< setw(18)<< price<< setw(10)  <<(onshelf==1? "在架":"已借") <<endl; }};//图书库类,实现对图书的维护,查找,删除等class BDatabase{private:  int top; //图书记录指针 Book book[Maxb]; //图书记录public: BDatabase()//构造函数,将book.txt读到book[]中 {  Book b;  top=-1;  fstream file("book.txt",ios::in);  while (1)  {  file.read((char *)&b,sizeof(b));  if (!file) break;  top++;  }  book[top]=b;  file.close(); }  void clear()//全删 {  top=-1; }  int addbook(int n,char *na,char *au,char *cbs,double price)//增加图书 {Book *query(int bookid);  Book *p=query(n);  if (NULL==p)  {  top++;  book[top].addbook(n,na,au,cbs,price);  return 1;  }  return 0; } Book *query(int bookid)//查找图书 {  for (int i=0;i<=top;i++)if (book[i].getno()==bookid &&book[i].gettag()==0)  {  return &book[i];  }  return NULL; } void bookdata();//图书库维护 void disp() {  for (int i=0;i<=top;i++)  if (book[i].gettag()==0)  book[i].disp(); } ~BDatabase()//析构函数,将book[]写到book.txt文件中 {  fstream file("book.txt",ios::out);  for (int i=0;i<=top;i++)  if (book[i].gettag()==0)      file.write(book[i].getname(),sizeof(book[i]));  file.close();return;}};void BDatabase::bookdata(){  char choice; char bname[40];  char bauthor[40];  char bcbs[40]; int bookid; double bprice; Book *b; while (choice) {  cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;  cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;  cin >> choice;  switch (choice)  {  case '1':  cout << "输入图书编号:"<<endl;  cin >> bookid;  cout << "输入图书书名:"<<endl;  cin >> bname;cout << "输入作者:"<<endl;  cin >> bauthor;cout << "输入出版社:"<<endl;  cin >> bcbs;cout << "输入图书价格:"<<endl;  cin >> bprice;  //addbook(n,na,au,cbs,price);  addbook(bookid, bname, bauthor, bcbs, bprice);  break;  case '2':  cout << "输入图书编号:"<<endl;  cin >> bookid;  b=query(bookid);  if (b==NULL)  {  cout << " 该图书不存在 "<<endl;  break;  }  cout << "输入新的书名:"<<endl;  cin >> bname;  b->setname(bname);cout << "输入新的作者:"<<endl;  cin >> bauthor;  b->setauthor(bauthor);cout << "输入新的出版社:"<<endl;  cin >> bcbs;  b->setcbs(bcbs);cout << "输入新的价格:"<<endl;  cin >> bprice;  b->setprice(bprice);  break;  case '3':  cout <<" 读入图书编号:"<<endl;  cin >> bookid;  b=query(bookid);  if (b==NULL)  {  cout <<" 该图书不存在" << endl;  break;  }  b->delbook();  break;  case '4':  cout << " 输入书名:"<<endl;char bna[40];  cin >> bna;int k; for ( k=0;k<100;k++) {if(strcmp(book[k].getname(),bna)==0)  if(book[k].gettag()==0)  {return ;  }  }  {  cout <<" 该图书不存在"<< endl;  break;  }  b->disp();  break;  case '5':  disp();  break;  case '6':  clear();  break;  default:cout<<"输入错误,请从新输入:";  } }}//main() 函数的实现,程序的主界面的引导int main(){ char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') {  cout <<endl<<endl<<"\t\t\t河 北 联 合 大 学 图 书 管 理 系 统\n\n\n";  cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;  cin >> choice;  switch (choice)  {  case '1':  cout <<" 借书 读者编号:";  cin >>readerid;  cout <<" 图书编号: ";  cin >>bookid;  r=ReaderDB.query(readerid);//按编号查找  if (NULL==r)  {  cout <<" 不存在该读者,不能借书"<< endl;  break;  }  b=BookDB.query(bookid);  if (b==NULL)  {  cout <<" 不存在该图书,不能借书"<< endl;  break;  }  if (b->zfrowbook()==0)  {  cout << " 该图书已借出,不能借书"<< endl;  break;  }  r->zfrowbook(b->getno());  break;  case '2':  cout<<"还书\n 读者编号:";  cin >>readerid;  cout << " 图书编号:";  cin >>bookid;  r=ReaderDB.query(readerid);  if (r==NULL)  {  cout <<" 不存在该读者,不能还书" << endl;  break;  }  b=BookDB.query(bookid);  if (b==NULL)  {  cout <<" 不存在该图书,不能还书" <<endl;  break;  }  b->retbook();  r->retbook(b->getno());  break;  case '3':  BookDB.bookdata();  break;  case '4':  ReaderDB.readerdata();  break;  default:cout<<"输入错误,请从新输入:";  } }} 

热点排行