同学借了我的程序区抄,改掉了名字发现有些功能出错了,一直找不到原因,求大神看看,上边的是对的,下边的改过名字之后有错误,open之后无法输出正确的书本信息了。
#include<iostream>#include<iomanip>
#include<string>
#include<fstream>
using namespace std;
class Book
{
public:
void setall(int c,string n,string au,string pub,float p,string is);//对类中的私有数据进行设置
void setcode(int t){code=t+1;}
void setname(){cin>>bookname;}
void setau(){cin>>author;}
void setpub(){cin>>publish;}
void setprice(){cin>>price;}
void setis(){cin>>ISBN;}
void display();
int getcode(){return code;}
string getname(){return bookname;}
string getau(){return author;}
string getpub(){return publish;}
float getprice(){return price;}
string getis(){return ISBN;}
private:
string bookname;
string author;
string publish;
float price;
string ISBN;
int code;
};
void Book::setall(int c,string n,string au,string pub,float p,string is)
{
code=c;
bookname=n;
author=au;
publish=pub;
price=p;
ISBN=is;
}
void Book::display()
{
cout<<setw(2)<<code<<setw(13)<<bookname<<setw(10)<<author<<setw(20)<<publish<<setw(10)<<price<<setw(20)<<ISBN<<endl;
}
Book b[1000];
int i=0,temp=0;
int m=0;
void enter()//增加图书的函数
{
cout<<"--------------------------------------------------------------------------------"<<endl;
cout<<" 书名 作者 出版社 售价 ISBN编号"<<endl;
cout<<"请依次输入"<<"<"<<i+1<<">"<<"号书:";
b[i].setcode(i);
b[i].setname();
b[i].setau();
b[i].setpub();
b[i].setprice();
b[i].setis();
temp=1;//查看退出前是否保存的中间变量
for(int j=0;j<i;j++)
if(b[i].getname()==b[j].getname())
{
cout<<"--------------------------------抱歉,此书已存在!--------------------------------"<<endl;
i=i-1;
temp=0;
break;
}
if(temp==1)
{
cout<<"--------------------------------添加已完成-------------------------------------"<<endl;
}
}
void modify()//修改信息的函数
{
string bn,s1,s2,s3,s4;
int middle=0,flag=0;
float p;
cout<<"请输入要修改的书名或编号:";
cin>>bn;
for(int j=0;j<i;j++)
if(bn==b[j].getname()||atoi(bn.c_str())==b[j].getcode())
{
middle=1;//查看有无图书的中间变量
s1=b[j].getname();
s2=b[j].getau();
s3=b[j].getpub();
p=b[j].getprice();
s4=b[j].getis();
cout<<"________________________________________________________________________________\n";
cout<<"编号 书名 作者 出版社 售价 ISBN编号"<<endl;
b[j].display();
cout<<"_____________________请依次从书名进行修改(编号不可修改)_________________________"<<endl;
cout<<"请修改: ";
b[j].setname();
b[j].setau();
b[j].setpub();
b[j].setprice();
b[j].setis();
for(int c=0;c<i;c++)//循环判断是否修改图书重名
if(b[c].getname()==b[j].getname())flag++;
if(flag==1)
{
cout<<"--------------------------------修改成功!---------------------------------------"<<endl;
temp=1;
}
else if(flag==2)
{
b[j].setall(b[j].getcode(),s1,s2,s3,p,s4);
cout<<"------------------------------已存在此书,修改失败-------------------------------"<<endl;
}
break;
}
if(middle==0){cout<<"--------------------------------无此图书!---------------------------------------"<<endl;}
}
void dele()//删除函数
{
string bn;
int middle=0;
cout<<"请输入要删除的书名或编号:";
cin>>bn;
for(int j=0;j<i;j++)
if(bn==b[j].getname()||atoi(bn.c_str())==b[j].getcode())//判断编号和书名是否存在
{ int choice;
cout<<"----------------------------此书已找到,确定要删除?------------------------------"<<endl<<"1:确定"<<"2:取消"<<endl;
cin>>choice;
if(choice==1)
{
for(int k=j;k<i;k++){b[k]=b[k+1];b[k].setcode((b[k].getcode()-2));}
cout<<"*********************************此书已删除*************************************"<<endl;
i=i-1;
middle=1;
temp=1;
break;
}
else if(choice==2)middle=1;
}
if(middle==0){cout<<"--------------------------------无此图书!---------------------------------------"<<endl;}
}
void save()//保存到文件的函数
{
char fname[20];
cout<<"请输入您想要存储的文件名称(不带扩展名):";
cin>>fname;
ofstream outfile(fname,ios::out);
outfile<<"编号 书名 作者 出版社 售价 ISBN编号"<<endl;
for(int j=0;j<i;j++)
outfile<<setw(2)<<b[j].getcode()<<setw(13)<<b[j].getname()<<setw(10)<<b[j].getau()<<setw(20)<<b[j].getpub()<<setw(10)<<b[j].getprice()<<setw(20)<<b[j].getis()<<endl;
cout<<"----------------------------------文件已保存------------------------------------\n";
outfile.close();
temp=0;
}
void open()//从文本读取的函数
{
string s1,s2,s3,s4,s5,s6;
int c=1000,a=1000;
float p;
char fname[20];
cout<<"请输入您想要打开的文件名称(不带扩展名,默认文件名为file):";
cin>>fname;
ifstream infile(fname,ios::in);
if(!infile)
{
cout<<"-------------------------------不存在此文件!------------------------------------"<<endl;
}
else if(infile)
{
infile>>s1>>s2>>s3>>s4>>s5>>s6;
for(int j=0;j<1000;j++)
{
infile>>c>>s1>>s2>>s3>>p>>s4;
if(c==a){i=j;break;}//读取完成后给i一个值,以便后面操作
b[j].setall(c,s1,s2,s3,p,s4);
a=c;//判断是否读取完成
}
cout<<"-----------------------------文件已读取,请操作----------------------------------\n";
infile.close();
}
}
void out()//查询显示函数
{
int middle=0;
string bn;
int choice;
if(i!=0)//有书存在
{
cout<<"----------------------1:对单个图书进行查询2:查询全部图书-----------------------"<<endl;
cout<<"请选择:";
cin>>choice;
if(choice==1)
{
cout<<"请输入要查询的书名或编号:";
cin>>bn;
for(int j=0;j<i;j++)
if(bn==b[j].getname()||atoi(bn.c_str())==b[j].getcode())//判断编号和书名是否存在,调用函数
{
middle=1;
cout<<"________________________________________________________________________________\n";
cout<<"编号 书名 作者 出版社 售价 ISBN编号"<<endl;
b[j].display();
cout<<"________________________________________________________________________________\n";
break;
}
if(middle==0){cout<<"--------------------------------无此图书!---------------------------------------"<<endl;}
}
else if(choice==2)
{
cout<<"------------------------------------------------------------------------------\n";
cout<<"编号 书名 作者 出版社 售价 ISBN编号"<<endl;
for(int j=0;j<i;j++)
b[j].display();
cout<<"------------------------------------------------------------------------------\n";
}
}
else{cout<<"--------------------------------暂无图书!---------------------------------------";}
}
void mohu()
{
int m=0;
string bookname;
int a;
if(i!=0)//有书存在
{
cout<<"1:对单个图书进行查询2:查询全部图书"<<endl;
cout<<"请选择:";
cin>>a;
if(a==1)
{
cout<<"请输入要查询的书名中的关键字:";
cin>>bookname;
cin.get();
for(int j=0;j<i;j++)
if(b[j].getname().find(bookname)<3)//判断书名是否存在输入的几个字。
{
m=1;
cout<<"________________________________________________________________________________\n";
cout<<"编号 书名 作者 出版社 售价 编号"<<endl;
b[j].display();
cout<<"________________________________________________________________________________\n";
}
else
{
cout<<"--------------------------------暂无图书!---------------------------------------";
}
}
}
}
void main()
{
int c;
string ch;
bool sign=false;
string choice;//原因是因为害怕用户使用时误入其他的字符,导致程序崩溃
cout<<"*******************************欢迎进入图书管理系统*****************************"<<endl;
while(1)
{
cout<<"\t1:导入图书文件"<<endl;
cout<<"\t2:--增添图书--"<<endl;
cout<<"\t3:修改图书信息"<<endl;
cout<<"\t4:--删除图书--"<<endl;
cout<<"\t5:保存到文本文件"<<endl;
cout<<"\t6:--查询图书--"<<endl;
cout<<"\t7:记不住图书名?使用模糊查询法"<<endl;
cout<<"\t8:退出"<<endl;
cout<<"请选择:";
cin>>c;
if(c==1)open();//写一段读取的程序
else if(c==2)
{
enter();
i++;
}//写一段增加的程序
else if(c==3)modify();//写一段修改的程序
else if(c==4)dele();//写一段删除的程序
else if(c==5)save();//保存到文本文件的程序
else if(c==6)out();//查询程序
else if(c==7)mohu();//模糊输入法
else if(c==8)//退出
{
int choice;
if(temp==0)//判断是否用户在退出前对文件做了其他的操作,如操作则可选择其他两功能
{
cout<<"*********************************谢谢使用本系统*********************************";
break;
}
else
{
cout<<"--------您还没有保存刚才的图书信息,您可选择--------1:退出并且保存2:直接退出"<<endl;
cin>>choice;
if(choice==1)
{save();cout<<"*********************************谢谢使用本系统*********************************"<<endl;break;}
else if(choice==2)
{cout<<"*********************************谢谢使用本系统*********************************"<<endl;break;}
}
}
else cout<<"-------------------------!Warning! please input again:--------------------------"<<endl;
}
}
/*任务概述:设计一个简单的图书管理程序,
能新增、查询、显示、修改和删除图书信息。 程序要求:
图书数据用文件来存储,按书名排序存放。
查询显示时每屏不超过20个记录,超过时分屏显示。
记录修改:能选择修改图书的书名、作者和出版社
,书号不可修改。在修改或删除之前需要用户进一步确认,
确认无误后再进行操作。
支持模糊查询方式,在查询时只需输入书名的一部分,
所有符合这一条件的图书都可显示出来。*/
#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
class Book
{
public:
void setall(int code,string bookname,string author,string publish,float price,string nomber);
void setcode(int t){code=t+1;}
void setbookname(){cin>>bookname;}
void setauthor(){cin>>author;}
void setpublish(){cin>>publish;}
void setprice(){cin>>price;}
void setnomber(){cin>>nomber;}
void setout();
int getcode(){return code;}
string getbookname(){return bookname;}
string getauthor(){return author;}
string getpublish(){return publish;}
float getprice(){return price;}
string getnomber(){return nomber;}
private:
int code;
string bookname;
string author;
string publish;
float price;
string nomber;
};
void Book::setall(int code,string bookname,string author,string publish,float price,string nomber)
{
code=code;
bookname=bookname;
author=author;
publish=publish;
price=price;
nomber=nomber;
}
void Book::setout()
{
cout<<setw(2)<<code<<setw(13)<<bookname<<setw(10)<<author<<setw(20)<<publish<<setw(10)<<price<<setw(20)<<nomber<<endl;
}
Book b[1000];
int i=0,t=0;
int m=0;
void open()//打开文件并读取
{
string s1,s2,s3,s4,s5,s6;
int c=1000,a=1000;
float p;
char fname[20];
cout<<"请输入您想要打开的文件名称(不带扩展名,默认文件名为file):";
cin>>fname;
ifstream infile(fname,ios::in);
if(!infile)
{
cout<<"-------------------------------不存在此文件!------------------------------------"<<endl;
}
else if(infile)
{
infile>>s1>>s2>>s3>>s4>>s5>>s6;
for(int j=0;j<1000;j++)
{
infile>>c>>s1>>s2>>s3>>p>>s4;
if(c==a){i=j;break;}//读取完成后给i一个值,以便后面操作
b[j].setall(c,s1,s2,s3,p,s4);
a=c;//判断是否读取完成
}
cout<<"-----------------------------文件已读取,请操作----------------------------------\n";
infile.close();
}
}
void enter()//增加图书的函数
{
cout<<"--------------------------------------------------------------------------------"<<endl;
cout<<" 书名 作者 出版社 售价 编号"<<endl;
cout<<"请依次输入"<<"<"<<i+1<<">"<<"号书:";
b[i].setcode(i);
b[i].setbookname();
b[i].setauthor();
b[i].setpublish();
b[i].setprice();
b[i].setnomber();
t=1;//查看退出前是否保存的中间变量
for(int j=0;j<i;j++)
if(b[i].getbookname()==b[j].getbookname())
{
cout<<"--------------------------------抱歉,此书已存在!--------------------------------"<<endl;
i=i-1;
t=0;
break;
}
if(t==1)
{
cout<<"--------------------------------添加已完成-------------------------------------"<<endl;
}
}
void modify()//修改信息的函数
{
string bookname,s1,s2,s3,s4;
int m=0,f=0;
float p;
cout<<"请输入要修改的书名或编号:";
cin>>bookname;
for(int j=0;j<i;j++)
if(bookname==b[j].getbookname()||atoi(bookname.c_str())==b[j].getcode())
{
m=1;//查看有无图书的中间变量
s1=b[j].getbookname();
s2=b[j].getauthor();
s3=b[j].getpublish();
p=b[j].getprice();
s4=b[j].getnomber();
cout<<"________________________________________________________________________________\n";
cout<<"编号 书名 作者 出版社 售价 编号"<<endl;
b[j].setout();
cout<<"_____________________请依次从书名进行修改(编号不可修改)_________________________"<<endl;
cout<<"请修改: ";
b[j].setbookname();
b[j].setauthor();
b[j].setpublish();
b[j].setprice();
b[j].setnomber();
for(int c=0;c<i;c++)//循环判断是否修改图书重名
if(b[c].getbookname()==b[j].getbookname())f++;
if(f==1)
{
cout<<"--------------------------------修改成功!---------------------------------------"<<endl;
t=1;
}
else if(f==2)
{
b[j].setall(b[j].getcode(),s1,s2,s3,p,s4);
cout<<"------------------------------已存在此书,修改失败-------------------------------"<<endl;
}
break;
}
if(m==0)
{
cout<<"--------------------------------无此图书!---------------------------------------"<<endl;
}
}
void dele()//删除函数
{
string bookname;
int m=0;
cout<<"请输入要删除的书名或编号:";
cin>>bookname;
for(int j=0;j<i;j++)
if(bookname==b[j].getbookname()||atoi(bookname.c_str())==b[j].getcode())//判断编号和书名是否存在
{
int choice;
cout<<"----------------------------此书已找到,确定要删除?------------------------------"<<endl<<"1:确定"<<"2:取消"<<endl;
cin>>choice;
if(choice==1)
{
for(int k=j;k<i;k++)
{
b[k]=b[k+1];b[k].setcode((b[k].getcode()-2));
}
cout<<"*********************************此书已删除*************************************"<<endl;
i=i-1;
m=1;
t=1;
break;
}
else if(choice==2)m=1;
}
if(m==0)
{
cout<<"--------------------------------无此图书!---------------------------------------"<<endl;
}
}
void save()//保存到文件的函数
{
char fname[20];
cout<<"请输入您想要存储的文件名称(不带扩展名):";
cin>>fname;
ofstream outfile(fname,ios::out);
outfile<<"编号 书名 作者 出版社 售价 编号"<<endl;
for(int j=0;j<i;j++)
outfile<<setw(2)<<b[j].getcode()<<setw(13)<<b[j].getbookname()<<setw(10)<<b[j].getauthor()<<setw(20)<<b[j].getpublish()<<setw(10)<<b[j].getprice()<<setw(20)<<b[j].getnomber()<<endl;
cout<<"----------------------------------文件已保存------------------------------------\n";
outfile.close();
t=0;
}
void out()//查询显示函数
{
int m=0;
string bookname;
int a;
if(i!=0)//有书存在
{
cout<<"1:对单个图书进行查询2:查询全部图书"<<endl;
cout<<"请选择:";
cin>>a;
if(a==1)
{
cout<<"请输入要查询的书名或编号:";
cin>>bookname;
for(int j=0;j<i;j++)
if(bookname==b[j].getbookname()||atoi(bookname.c_str())==b[j].getcode())//判断编号和书名是否存在,调用函数
{
m=1;
cout<<"________________________________________________________________________________\n";
cout<<"编号 书名 作者 出版社 售价 编号"<<endl;
b[j].setout();
cout<<"________________________________________________________________________________\n";
break;
}
if(m==0)
{
cout<<"--------------------------------无此图书!---------------------------------------"<<endl;
}
}
else if(a==2)
{
cout<<"------------------------------------------------------------------------------\n";
cout<<"编号 书名 作者 出版社 售价 编号"<<endl;
for(int j=0;j<i;j++)
b[j].setout();
cout<<"------------------------------------------------------------------------------\n";
}
}
else
{
cout<<"--------------------------------暂无图书!---------------------------------------";
}
}
void mohu()
{
int m=0;
string bookname;
int a;
if(i!=0)//有书存在
{
cout<<"1:对单个图书进行查询2:查询全部图书"<<endl;
cout<<"请选择:";
cin>>a;
if(a==1)
{
cout<<"请输入要查询的书名中的关键字:";
cin>>bookname;
cin.get();
for(int j=0;j<i;j++)
if(b[j].getbookname().find(bookname)<3)//判断书名是否存在输入的几个字。
{
m=1;
cout<<"________________________________________________________________________________\n";
cout<<"编号 书名 作者 出版社 售价 编号"<<endl;
b[j].setout();
cout<<"________________________________________________________________________________\n";
}
else
{
cout<<"--------------------------------暂无图书!---------------------------------------";
}
}
}
}
void main()
{
int c;
while(1)
{
cout<<"\t1:导入图书文件"<<endl;
cout<<"\t2:--增添图书--"<<endl;
cout<<"\t3:修改图书信息"<<endl;
cout<<"\t4:--删除图书--"<<endl;
cout<<"\t5:保存到文本文件"<<endl;
cout<<"\t6:--查询图书--"<<endl;
cout<<"\t7:记不住图书名?使用模糊查询法"<<endl;
cout<<"\t8:退出"<<endl;
cout<<"请选择:";
cin>>c;
if(c==1)open();//写一段读取的程序
else if(c==2)
{
enter();
i++;
}//写一段增加的程序
else if(c==3)modify();//写一段修改的程序
else if(c==4)dele();//写一段删除的程序
else if(c==5)save();//保存到文本文件的程序
else if(c==6)out();//查询程序
else if(c==7)mohu();//模糊输入法
else if(c==8)//退出
{
int choice;
if(t==0)//判断是否用户在退出前对文件做了其他的操作,如操作则可选择其他两功能
{
cout<<"*********************************谢谢使用本系统*********************************";
break;
}
else
{
cout<<"--------您还没有保存刚才的图书信息,您可选择--------1:退出并且保存2:直接退出"<<endl;
cin>>choice;
if(choice==1)
{
save();
cout<<"*********************************谢谢使用本系统*********************************"<<endl;
break;
}
else if(choice==2)
{
cout<<"*********************************谢谢使用本系统*********************************"<<endl;
break;
}
}
}
else cout<<"-------------------------!Warning! please input again:--------------------------"<<endl;
}
}