C++ 关于类的继承问题。。下面是我写的图书馆小程序。 借书的函数有点问题。。大侠帮忙看看

时间:2021-12-17 17:46:31
#include <iostream>
using namespace std;
char values[100]="maikeerjiekexun";
char  mima[100]="123456";
char na[20]={},au[20]={};
int n=0;
class object{
protected:
char name[20];
int no;
public:
object(){
memset(name,0,sizeof(name));
no=0;
}
object(char na[],int n){
memcpy(name,na,sizeof(name));
no=n;
}
void show(){
cout<<name<<"\t("<<no<<")"<<endl;
}
};
class reader;
class book:public object{
protected:
char author[10];
int flag;
public:
book(){
memset(author,0,sizeof(author));
flag=0;//0表示此书已经借出 1表示此书还在图书馆
}
friend class reader;
book(char na[],int n,char auth[],int m):object(na,n){
memcpy(author,auth,sizeof(author));
flag=m;
}
void showbook(){
cout<<name<<"\t("<<no<<")"<<endl;
}
};
class reader:public object{
protected:
book rent[5];
const int MAX;
 int top;
public:
reader(char na[],int n ):object(na,n),MAX(5){
}
void cunshu();
void rentbook();
void showreader();
};
void reader::cunshu(){
for(int i=0;i<5;i++){
cout<<"名字"<<endl;
cin>>rent[i].name;
cout<<"编号"<<endl;
cin>>rent[i].no;
cout<<"作者"<<endl;
cin>>rent[i].author;
rent[i].flag=1;
}
}
void reader::rentbook(){
cout<<"$$$$1:借书\t2:还书\t0:退出系统$$$$"<<endl;
int leng=0;
while(cin>>leng){
switch(leng){
case 0:cout<<"欢迎您的使用!谢谢再见!"<<endl;exit(0);
case 1:while(leng){
if(top=0||MAX==top){
break;
}
cout<<"请输入图书书名"<<endl;
cin>>na;
cout<<"请输入图书编号"<<endl;
cin>>n;
cout<<"请输入图书作者"<<endl;
cin>>au;
for(int i=0;i<5;i++){
if(rent[i].name==na&&rent[i].no==n&&rent[i].author==au&&rent[i].flag==1){
cout<<"借书成功"<<endl;
rent[i].flag=0;
top++;
}
else if(rent[i].name==na&&rent[i].no==n&&rent[i].author==au&&rent[i].flag==0){
cout<<"您要的图书已经借出"<<endl;
}
else{
cout<<"图书馆没有您要的图书"<<endl;
break;
}
}
}
case 2:if(top==0){
cout<<"没有书籍可还"<<endl;
}
else{
cout<<"请输入所还书名"<<endl;
cin>>na;
for(int i=0;i<5;i++){
if(rent[i].name==na){
rent[i].flag=1;
cout<<"还书成功"<<endl;
break;
}
}
}
default:cout<<"please input the right number!!";break;
}
cout<<"$$$$1:借书\t2:还书\t0:退出系统$$$$"<<endl;
}
}

void reader::showreader(){
cout<<"姓名"<<*values<<endl;
cout<<"您所借书如下:"<<endl;
cout<<"书名"<<"\t"<<"编号"<<"\t"<<"作者"<<endl;
for(int i=0;i<MAX;i++){
if(rent[i].flag!=1){
cout<<rent[i].name<<"\t"<<rent[i].no<<"\t"<<rent[i].author<<endl;
}
}
}

int main(){
char sample[20]={};
char base[20]={};
reader read("没有图书",5);
cout<<"请存入图书"<<endl;
read.cunshu();
cout<<"下面开始进入借书"<<endl<<endl;
while(1){
cout<<"请输入您的姓名"<<endl;
cin>>sample;
cout<<"请输入您的密码"<<endl;
scanf("%s",base);
if((strcmp(base,mima)==0)&&strcmp(sample,values)==0){
break;
}
}
read.rentbook();
read.showreader();
return 0;
}
 reader 类和book类 都公有继承于object类, reader类我声明为了book类的友元类了。
存书 函数可以存。。 就是那个借书 借不到。。 请大侠帮忙看看。。 希望您没有觉得头大。。程序我写得很正规了的。

3 个解决方案

#1


C++ 关于类的继承问题。。下面是我写的图书馆小程序。 借书的函数有点问题。。大侠帮忙看看各位我写着写着就140多行了。。 希望您们不要看着头大。。

#2


1,book类里面的构造函数
memcpy(author,auth,sizeof(author));改为strcpy(author,auth);
一定得使最后一位为'\0';
其它类似的地方可参考这个
2,rentbook函数里的几条比较语句改成下面的
比较字符串记得用strcmp哦
		for(int i=0;i<5;i++)
{
if( 0 == strcmp(rent[i].name,na) && rent[i].no==n 
&& 0 == strcmp(rent[i].author,au) && rent[i].flag==1){
cout<<"借书成功"<<endl;
rent[i].flag=0;
top++;
}
else if(0 == strcmp(rent[i].name,na)&&rent[i].no==n
&&0 == strcmp(rent[i].author,au)&&rent[i].flag==0){
cout<<"您要的图书已经借出"<<endl;
}
else{
cout<<"图书馆没有您要的图书"<<endl;
break;
}
}
   }

3,另外这个程序还有点小的逻辑问题,LZ细心改下。控制一下字符长度,不要输入很长的字符时挂掉了

#3


very sorry
reply the late

#1


C++ 关于类的继承问题。。下面是我写的图书馆小程序。 借书的函数有点问题。。大侠帮忙看看各位我写着写着就140多行了。。 希望您们不要看着头大。。

#2


1,book类里面的构造函数
memcpy(author,auth,sizeof(author));改为strcpy(author,auth);
一定得使最后一位为'\0';
其它类似的地方可参考这个
2,rentbook函数里的几条比较语句改成下面的
比较字符串记得用strcmp哦
		for(int i=0;i<5;i++)
{
if( 0 == strcmp(rent[i].name,na) && rent[i].no==n 
&& 0 == strcmp(rent[i].author,au) && rent[i].flag==1){
cout<<"借书成功"<<endl;
rent[i].flag=0;
top++;
}
else if(0 == strcmp(rent[i].name,na)&&rent[i].no==n
&&0 == strcmp(rent[i].author,au)&&rent[i].flag==0){
cout<<"您要的图书已经借出"<<endl;
}
else{
cout<<"图书馆没有您要的图书"<<endl;
break;
}
}
   }

3,另外这个程序还有点小的逻辑问题,LZ细心改下。控制一下字符长度,不要输入很长的字符时挂掉了

#3


very sorry
reply the late