Есть ли способ отобразить все сохраненные объекты в векторных классах? - PullRequest
0 голосов
/ 02 мая 2020

Я кодировал это для системы шин, но у меня возникли проблемы с отображением объектов, которые были сохранены в stud1 . Я пытался использовать readData, но не сработало. Целью кода является: 1. получить от пользователя ввод (ы) в виде информации о шине и сохранить ее и 2. вывести все входные данные шины в систему (измененный код, сохраненный в репозитории)

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
string busType, busMake, regNum;
char menu();
int id = 0;
//int staff[50];
int carObjNum, option0;
int temp = 0;
char objArray[5];
string busMake0, busType0, regNum0;

class bus
{
public:
int i;
string busType;
string busMake;
string regNum;
char input();
char transHistory();

bus(string id = "", string name = "", string phone = "") : busMake(id), busType(name), regNum(phone)
{}

bool operator==(const bus & obj)
{
    return (busMake == obj.busMake) && (busType == obj.busType) && (regNum == obj.regNum);
}

/*
 * Write the member variables to stream objects
 */
friend ostream & operator << (ostream &out, const bus & obj)
{
    out << obj.busMake << "\n" <<obj.busType<<"\n"<<obj.regNum<<endl;
    return out;
}
/*
 * Read data from stream object and fill it in member variables
 */
friend istream & operator >> (istream &in,  bus &obj)
{
    in >> obj.busMake;
    in >> obj.busType;
    in >> obj.regNum;
    return in;
}


};

char bus::input(){
cout<<"Enter bus make\n"<<endl;
cin>>busMake0;
cout<<"Enter bus Type\n"<<endl;
cin>>busType0;
cout<<"Enter registration number\n"<<endl;
cin>>regNum;

vector<bus> vec = {};
bus stud1(busMake,busType, regNum);
vec.push_back(stud1);
ofstream out("bus.txt");
out<<stud1;
out.close();
// Open the File
ifstream in("bus.txt");
bus bus1;
in>>bus1;
in.close();

for(bus n : vec) {
           std::cout << n << '\n';
       }
return 0;
}

char bus::transHistory(){
bus stud1;

//Open the file that you just saved.
ifstream out("bus.txt");
//need this function to be able to read what was saved in stud1 at bus::input()
//then after that have all info output to user upon request.
out.close();
return 0;
}

int x;

char menu(){
int option;
cout<<"Welcome to the GTUC repair system\n"<<endl;
cout<<"What would you like to do?\n"<<endl;
cout<<""<<endl;
cout<<"Enter '1' to enter a new repair\n"<<endl;
cout<<"Enter '2' to print total transaction history\n"<<endl;
cin>>option;
option0 = option;
return option;
}

int main()
{
bus decision;
menu();
switch (option0) {
    case 1:
        decision.input();
        menu();
    case 2:
        decision.transHistory();
    default:
        break;

}
return 0;
}

1 Ответ

1 голос
/ 02 мая 2020

Программа очень глючная, а также неправильный дизайн. У вас есть sted::vector, который всегда определяется локально и поэтому всегда будет содержать один элемент.

Здесь исправлены основные ошибки, из-за которых ваш код печатает что-то.

Вам необходимо определить конструктор по умолчанию для автобус. Ваше определение неверно.

В вашей функции ввода вы читаете переменные в "busMake0" и "busType0". Но тогда вы не используете эти переменные при создании шины.

Используя отладчик, вы обнаружите эту проблему за 1 минуту.

Вы используете тонны глобальных переменных. Не делай этого. Ваше заявление switch не в al oop и не имеет break.

Множество других ошибок проектирования.

Что вы должны сделать: Прежде чем начать писать какую-либо строку кода, подождите 1 полный день, подумайте, что нужно сделать, а затем как это должно быть сделано. Тогда начните кодировать. Начните с написания комментариев в ваших исходных файлах. Затем добавьте код. Делай обделение. Отформатируйте ваш код. Используйте значимые имена переменных. Никогда не используйте глобальные переменные. Не используйте using namespace std;

Пожалуйста, смотрите ваш код с минимальными исправлениями.

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

string busType, busMake, regNum;
char menu();
int id = 0;
int carObjNum, option0;
int temp = 0;
char objArray[5];
string busMake0, busType0, regNum0;

class bus {
public:
    int i;
    string busType;
    string busMake;
    string regNum;
    char input();
    char transHistory();
    bus() : busMake(""), busType(""), regNum("") {} 
    bus(string id, string name, string phone) : busMake(id), busType(name), regNum(phone) {}

    bool operator==(const bus& obj) {
        return (busMake == obj.busMake) && (busType == obj.busType) && (regNum == obj.regNum);
    }

    /*
     * Write the member variables to stream objects
     */
    friend ostream& operator << (ostream& out, const bus& obj)  {
        out << obj.busMake << "\n" << obj.busType << "\n" << obj.regNum << endl;
        return out;
    }
    /*
     * Read data from stream object and fill it in member variables
     */
    friend istream& operator >> (istream& in, bus& obj) {
        in >> obj.busMake;
        in >> obj.busType;
        in >> obj.regNum;
        return in;
    }
};

char bus::input() {
    cout << "Enter bus make\n" << endl;
    cin >> busMake0;
    cout << "Enter bus Type\n" << endl;
    cin >> busType0;
    cout << "Enter registration number\n" << endl;
    cin >> regNum;

    vector<bus> vec = {};
    bus stud1(busMake0, busType0, regNum);
    vec.push_back(stud1);
    ofstream out("bus.txt");
    out << stud1;
    out.close();

    // Open the File
    ifstream in("bus.txt");
    bus bus1;
    in >> bus1;
    in.close();

    for (bus n : vec) {
        std::cout << n << '\n';
    }
    return 0;
}

char bus::transHistory() {
    bus stud1;

    //Open the file that you just saved.
    ifstream out("bus.txt");
    //need this function to be able to read what was saved in stud1 at bus::input()
    //then after that have all info output to user upon request.
    out.close();
    return 0;
}

int x;

char menu() {
    int option;
    cout << "Welcome to the GTUC repair system\n" << endl;
    cout << "What would you like to do?\n" << endl;
    cout << "" << endl;
    cout << "Enter '1' to enter a new repair\n" << endl;
    cout << "Enter '2' to print total transaction history\n" << endl;
    cin >> option;
    option0 = option;
    return option;
}

int main()
{
    bus decision;
    menu();
    switch (option0) {
    case 1:
        decision.input();
        menu();
    case 2:
        decision.transHistory();
    default:
        break;
    }
    return 0;
}

Извините, но я не могу вам помочь. Я даже не понимаю задачу полностью.

...