Witam,
W pliku *.txt znajduje się lista dostępnych towarów. Użytkownik wybiera z listy jeden towar po czym jest on usuwany z pliku. Całość zrobiłem przy użyciu dynamicznej tablicy obiektów.
Po otwarciu pliku zliczam linie, po czym tworzę tablicę dynamiczną. Próbowałem zrobić to w następujący sposób:
const int UP = 72, DOWN = 80, LEFT = 75, RIGHT = 77;
unsigned int count = 0, num_of_lines = 0;
system("cls");
string buffer;
fstream kartoteka;
kartoteka.open("kartoteka.txt", ios::in);
if (kartoteka.good()) {
while (!kartoteka.eof()) {
getline(kartoteka, buffer);
++num_of_lines;
}
}
kartoteka.seekg(0);
Item *item = new Item[num_of_lines];
string ItemName;
unsigned int ItemQuantity;
double ItemPrice;
while (!kartoteka.eof()) {
kartoteka >> ItemName >> ItemQuantity >> ItemPrice;
item[count].SetItem(ItemName, ItemQuantity, ItemPrice);
++count;
}
kartoteka.seekg(0);
kartoteka.close();
count = 0;
char c;
do {
system("cls");
for (unsigned int i = 0; i < num_of_lines; ++i) {
if (i == count) { SetYellowColour(); cout << "\t" << (i + 1) << ". "; item[count].ShowItem(); SetWhiteColour(); continue; }
else cout << "\t" << (i + 1) << ". "; item[i].ShowItem();
}
c = _getch();
if (c == DOWN) { if (count < num_of_lines) ++count; }
if (c == UP) { if (count > 0) --count; }
} while (c != 27 && c != 13);
system("cls");
ofstream new_kartoteka;
new_kartoteka.open("kartoteka.txt", ios::trunc);
if (new_kartoteka.good()) {
for (unsigned int i = 0; i < num_of_lines; ++i) {
if (i != count) { new_kartoteka << item[i].ReturnName() << "\t\t" << item[i].ReturnQuantity() << "\t\t" << item[i].ReturnPrice() << endl; }
}
}
else cout << "Brak lacznosci z serwerem!" << endl;
new_kartoteka.close();
To ostatnia "wersja" tego co udało mi się wymyślić.. Wcześniej tablicę tworzyłem przed zamknięciem pliku, jednak później nie miałem do niej dostępu. Próbowałem także, w ogóle nie zamykać pliku, wtedy faktycznie usuwało wybraną linię, jednak ostatnia linia w pliku się powielała (i to w dziwny sposób, była jakaś poucinana).
Powyższy kod TEORETYCZNIE działa jak należy, mianowicie w pliku faktycznie wybrana linia znika, jednak całość jest w pętli i ponowne otwarcie pliku wysypuje program...
Proszę o pomoc!
Dziękuję pozdrawiam :)