是弥生啊 2021-06-21 11:48 采纳率: 100%
浏览 43
已采纳

c++的文件读写问题!!!!!

#include<iostream>
#include<string>
#include<vector>
#include<fstream>
#include<iomanip>
using namespace std;
int  sno = 1000;
class Book
{
private:
	int bno;//编号
	char bookname[10];//书名
	char authorname[10];//作者名
	int classnum;//分类号
	char publishadd[10];//出版单位
	double price;//价格
	bool state;//状态
	//////////////出版时间为定义
public:
	Book() {}
	void getdata()
	{
		cout<<"书名:"<<"      "<<"作者名:"<<"       "<<"分类号:"
			<<"       "<<"出版单位:"<<"       "<<"价格:"<<"      "<<endl;//状态不需要输入,出版时间未输入
		cin>>bookname>>authorname>>classnum>>publishadd>>price;
	}
	int getbno()
	{
		return bno;
	}
	string getbookname()
	{
		return bookname;
	}
	string getauthorname()
	{
		return authorname;
	}
	int getclassnum()
	{
		return classnum;
	}
	string getpublishadd()
	{
		return publishadd;
	}
	double getprice()
	{
		return price;
	}
	void setbno(int s)
	{
		bno=s;
	}
	void setbookname(char s[])
	{
		strcpy(bookname,s);
	}
	void setauthorname(char s[])
	{
		strcpy(authorname,s);
	}
	void setclassnum(int a)
	{
		classnum=a;
	}
	void setpublishadd(char a[])
	{
		strcpy(publishadd,a);
	}
	void setprice(int a)
	{
		price=a;
	}
	void printbook()
	{
		cout<<"编号:    书名:      作者名:      分类号:     出版单位:     价格:      "<<endl;
		cout<<bno<<setw(10)<<bookname<<setw(10)<<authorname<<setw(10)<<classnum
			<<setw(10)<<publishadd<<setw(10)<<price<<endl;
	}
};
/**/class bookManager
{
private:
	vector<Book> a;
public:
	void loadfile();//加载文件
	void writefile();//保存文件
	void addbook();//增加图书信息
	void update();//修改图书信息
	void deletebook();//删除图书信息
	void searchbybookname();//按图书名查询
	void searchbyauthorname();//按作者名查询
	void display();//查询图书所有信息
};
void bookManager::loadfile()//加载文件
{
	ifstream input("book.txt");
    if (!input)
	{
		cout<<"文件打开失败!!!"<<endl;
		return ;
    }
	Book s;
	int classnum;
	char bookname[10],authorname[10],publishadd[10];
	double price;
	/*input>>bookname>>authorname>>classnum>>publishadd>>price;//输入书名作者名等属性
	s.setbno(++sno);
	s.setbookname(bookname);
	s.setauthorname(authorname);
	s.setclassnum(classnum);
	s.setpublishadd(publishadd);
	s.setprice(price);*/
	while(input)
	{
		 a.push_back(s);
		 input>>bookname>>authorname>>classnum>>publishadd>>price;//输入书名作者名等属性
		 s.setbno(++sno);
		 s.setbookname(bookname);
		 s.setauthorname(authorname);
		 s.setclassnum(classnum);
		 s.setpublishadd(publishadd);
		 s.setprice(price);
	};
	input.close( );
}
void bookManager::writefile()//保存文件
{
	int i;
	ofstream file("book.txt");
	for(i=0;i<a.size();i++)
		file<<a[i].getbno()<<"\t"<<a[i].getbookname()<<"\t"<<a[i].getauthorname()<<"\t"<<a[i].getclassnum()
		<<"\t"<<a[i].getpublishadd()<<"\t"<<a[i].getprice()<<endl;
	file.close();
}
void bookManager::addbook()//添加图书信息
{
	Book book;
	book.setbno(++sno);
	book.getdata();
	a.push_back(book);
}
void bookManager::update()//修改图书信息
{                         //根据图书的编号修改 
	char bookname[10],authorname[10],publishadd[10];
	int classnum,num,choice;
	double price;
	cout<<"请输入你需要修改的图书编号\n";
	cin>>num;
	for(int i=0;i<a.size();i++)
	{
		if(a[i].getbno()==num)
		{
			cout<<"请输入你的选择\n";
			cout<<"1.修改图书的书名2.修改图书的作者名3.修改图书的分类号"<<endl;
			cout<<"4.修改图书的出版单位5.修改图书价格"<<endl;
			cin>>choice;
			switch(choice)
			{
			case 1:cin>>bookname;
			a[i].setbookname(bookname);
			break;
			case 2:cin>>authorname;
			a[i].setauthorname(authorname);
			break;
			case 3:cin>>classnum;
			a[i].setclassnum(classnum);
			break;
			case 4:cin>>publishadd;
			a[i].setpublishadd(publishadd);
			break;
			case 5:cin>>price;
			a[i].setprice(price);
			default : break;
			}
		}
	}
}
void bookManager::deletebook()//删除图书信息
{
	int i,bno;
	cout<<"请输入需要删除的图书编号:\n";
	cin>>bno;
	for(i=0;i<a.size();i++)
	{
		if(a[i].getbno()==bno)
			a.erase(a.begin()+i);
	}
}
void bookManager::display()//打印图书信息
{
	int i;
	cout<<"编号:       书名:        作者名:       分类号:        出版单位:       价格:   "<<endl;
	for(i=0;i<a.size();i++)
	{
		cout<<a[i].getbno()<<setw(10)<<a[i].getbookname()<<setw(10)<<a[i].getauthorname()<<setw(10)
			<<a[i].getclassnum()<<setw(10)<<a[i].getpublishadd()<<setw(10)<<a[i].getprice()<<endl;
	}
}
void bookManager::searchbybookname()//根据书名查询
{
	char bookname[10];
	cout<<"请输入要查询的图书名\n";
	cin>>bookname;
	for(int i=0;i<a.size();i++)
	{
		if(a[i].getbookname()==bookname)
		{
			a[i].printbook();
		//display();
		}
	}

}
void bookManager::searchbyauthorname()//根据作者名查询
{
	char authorname[10];
	cout<<"请输入要查询的作者名\n";
	cin>>authorname;
	for(int i=0;i<a.size();i++)
	{
		if(a[i].getauthorname()==authorname)
		{
			a[i].printbook();
		//display();
		}
	}
}
void menu1()
{
	cout<<"\n";
	cout<<"\t******************************************************************\t"<<endl;
	cout<<"\t*****************************图书管理*****************************\t"<<endl;
	cout<<"\t1.加载图书信息           2.保存图书信息             3.添加图书信息\t"<<endl;
	cout<<"\t4.修改图书信息           5.删除图书信息             6.书名查询信息\t"<<endl;
	cout<<"\t7.作者名查询信息         8.查询图书信息                     0.退出\t"<<endl;
	cout<<"\t******************************************************************\t"<<endl;
	cout<<"\t******************************************************************\t"<<endl;
}
void main()
{
	bookManager bm;
	int c;
	while(1){
	menu1();
	cout<<"请输入你的选择\n";
	cin>>c;
	switch(c)
	{
	case 1:bm.loadfile();
		break;
	case 2:bm.writefile();
		break;
	case 3:bm.addbook();
		break;
	case 4:bm.update();
		break;
	case 5:bm.deletebook();
		break;
	case 6:bm.searchbybookname();
		break;
	case 7:bm.searchbyauthorname();
		break;
	case 8:bm.display();
		break;
	case 0:exit(1);
	}
	}
}

有没有大佬救救孩子,为啥我加载数据之后,不能成功的查询,查询的结果没有?????

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-06-21 11:52
    关注

    if(a[i].getauthorname()==authorname)

    这样比较不对,这是比较地址,地址当然不同,你要比较的是字符串内容

    要用strcmp

    if(strcmp(a[i].getauthorname(),authorname) == 0)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog