| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 679 人关注过本帖
标题:同学借了我的程序区抄,改掉了名字发现有些功能出错了,一直找不到原因,求 ...
只看楼主 加入收藏
q740940561
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2013-3-16
结帖率:85.71%
收藏
已结贴  问题点数:2 回复次数:7 
同学借了我的程序区抄,改掉了名字发现有些功能出错了,一直找不到原因,求大神看看,上边的是对的,下边的改过名字之后有错误,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;
    }
}
搜索更多相关主题的帖子: void display include public 
2013-04-28 17:21
showsadd
Rank: 1
来 自:武汉
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-3-18
收藏
得分:1 
你自己就是大神
2013-04-29 01:19
czzdcn123
Rank: 7Rank: 7Rank: 7
来 自:江西
等 级:黑侠
威 望:3
帖 子:258
专家分:510
注 册:2013-3-7
收藏
得分:1 
你一个区一个区找错吗   这么长的别人都不愿去看了
2013-04-29 01:22
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
收藏
得分:1 
C++啊。。这里貌似是C语言论坛。。
2013-04-29 08:32
没事学学
Rank: 2
等 级:论坛游民
帖 子:77
专家分:46
注 册:2013-3-28
收藏
得分:1 
太长
2013-04-29 23:01
q740940561
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2013-3-16
收藏
得分:0 
回复 3楼 czzdcn123
错误就在打开文件和储存文件那儿,我找了好几个算是比较好的人看了下,都找不出原因,理论上来说统一名字改掉应该不会有这种错误的,但是就是出现了这种错误了。。。
2013-05-04 13:04
kongyingbin
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2013-4-26
收藏
得分:1 
楼主走错区了吧?
2013-05-05 13:41
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:1 
你能写出来肯定能改出来

Maybe
2013-05-05 14:45
快速回复:同学借了我的程序区抄,改掉了名字发现有些功能出错了,一直找不到原因 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046168 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved