загрузка из файла в структуру

Тема в разделе "Общие вопросы по С и С++", создана пользователем ArtemT, 29 май 2010.

  1. ArtemT

    ArtemT Гость

    Немогу загрузить записи из файла в структуру
    Помогите найти ошибку
    вот мой код:
    Код (Text):
    #include <iostream>
    #include <iterator>
    #include <conio.h>
    #include <fstream.h>
    #include <iomanip.h>
    #include <stdlib.h>
    #include <time.h>
    #include <algorithm>
    #include <vector>
    #include <numeric>

    using namespace std;



    struct Perech
    {int nomer;
    string outpunkt;
    string inpunkt;
    int h,min;
    int cost;
    int mest;
    };



    class vokzal
    {
    private:
    std::vector<Perech> v;
    Perech *px;
    int n;

    public:
    vokzal(){n=0;px=NULL;}
    ~vokzal(){n=0;if(px!=NULL)delete[]px;}
    void newBD();
    void output();
    void outputFile();
    void inputfile();

    };

    void vokzal::outputFile() //сохранение БД в файл
    {std::ofstream fout;
    char file[20]; //переменная для названия файла
    int i; //рабочая переменная для подсчёта
    if (v.size() == 0){cout<<"Massiv pust\n";getch();return;}
    cout<<"Vvedite fail dlya sohraneniya: ";cin>>file;
    fout.open(file,ios::out|ios::trunc);
    try{
    if(fout.fail()){cout<<file<<" Ne sozdan\n";getch();n=0;px=NULL;return;}
    //запись БД в файл
    for( size_t i=0;i< v.size();i++)
    {fout.setf(ios::left);
    fout<<setw(6)<<v[i].nomer<<setw(12)<<v[i].outpunkt<<setw(11)<<v[i].inpunkt
    <<setw(3)<<v[i].h<<setw(4)<<v[i].min<<setw(17)<<v[i].mest<<setw(8)<<v[i].cost<<endl;
    }
    cout<<"Baza dannuih sohranena\n";getch();
    }
    catch(...)

    {
    cout<<"Error";
    getch();
    }
    }

    void vokzal::newBD()
    {
    int i;
    clrscr();
    cout<<"Kolichestvo zapisey=";cin>>n;
    if(px!=NULL)delete[] px;
    px=new Perech[n];
    try{
    if(px==NULL){cout<<"Net pamyati\n";getch();n=0;return;}
    for(i=0;i<n;i++)
    {cout<<"Nomer avtobusa:";cin>>px[i].nomer;
    cout<<"Punkt otpravleniya: ";cin>>px[i].outpunkt;
    cout<<"Punkt naznacheniya: ";cin>>px[i].inpunkt;
    cout<<"Vremya otpravleniya: ";cin>>px[i].h>>px[i].min;
    cout<<"Stoimost bileta: ";cin>>px[i].cost;
    cout<<"Kolichestvo mest: ";cin>>px[i].mest;
    cout<<endl;
    v.push_back(px[i]);
    }

    cout<<"Baza dannuih sozdana"<<endl;getch();
    }
    catch(...)

    {
    cout<<"Error";
    getch();
    }

    }




    void vokzal::output(){
    if (v.size()==0){cout<<"    "<<"V baze dannuih net zapisey\n";getch();return;}
    clrscr();
    cout.setf(ios::left);
    cout<<endl<<"Baza dannuih 'Avtovokzal'\n"<<endl;
    cout<<"N"<<" "<<setw(6)<<"Nomer"<<setw(12)<<"Otpravlenie"<<setw(11)<<"Pribuitie"
    <<setw(7)<<"Vremya"<<setw(17)<<"kolichestvo mest"<<setw(8)<<"Stoimost"<<endl;
    for (size_t i = 0; i < v.size(); i++){
    {cout.setf(ios::left); i++;
    cout<<setw(3)<<i<<setw(6)<<v[i-1].nomer<<setw(12)<<v[i-1].outpunkt<<setw(11)<<v[i-1].inpunkt
    <<setw(1)<<v[i-1].h<<":"<<setw(3)<<v[i-1].min<<setw(17)<<v[i-1].mest<<setw(8)<<v[i-1].cost<<endl;
    i--; }

    }
    getch();
    }




    void vokzal::inputfile() //ввод БД из файла
    {
    int i;   //рабочая переменная для подсчёта
    Perech t; //рабочая переменная для подсчёта записей в файле
    char file[10]; //переменная для названия файла
    if(px!=NULL){delete[]px;n=0;px=NULL;} //очистка рабочей области(массива)
    cout<<"Imya vhodnogo faila: ";cin>>file;
    ifstream fin;
    fin.open(file,ios::in|ios::out);
    if(!fin.eof())
    do{fin>>t.nomer>>t.outpunkt>>t.inpunkt>>t.h>>t.min>>t.mest>>t.cost;
    n++;
    } while(fin.good()); //пока файл не закончился
    n--;
    px=new Perech[n]; //выделение динамической памти
    //ввод массива задолжников из файла
    for(i=0;i<n;i++)
    {fin>>px[i].nomer>>px[i].outpunkt>>px[i].inpunkt>>px[i].h>>px[i].min>>px[i].mest>>px[i].cost;
    v.push_back(px[i]);}
    fin.close();
    }





    int main(){
    vokzal a;
    char g;
    do{
    clrscr();
    cout<<"      "<<"Meny kassy avtovokzal\n";
    cout<<"     "<<"1 - New raspisanie avtobusov\n";
    cout<<"     "<<"2 - Save raspisanie v fail\n";
    cout<<"     "<<"3 - load raspisanie iz faila\n";
    cout<<"     "<<"4 - Prosmotr raspisaniy\n";
    cout<<"     "<<"E - Exit \n";
    cout<<"  "<<"Viberete punkt menu\n";
    cin>>g;
    switch(g){
    case '1':a.newBD();break;
    case '2':a.outputFile();break;
    case '3':a.inputfile();break;
    case '4':a.output();break;
    }
    }while(g!='E');
    return 0;
    }
     
Загрузка...

Поделиться этой страницей