2
203
Здравствуйте. У меня возникла небольшая проблема с одной программой на тему Файловые потоки. Программа не компилируется какие то 8 ошибок и я не могу разобраться какие. помогите пожалуйста заранее спасибо.
Вот условие
Написать программу, которая выводит меню следующего вида:
Ввод
Корректировка
Удаление
Вывод
Поиск
Выход
Для каждой машины укажите ее марку, год выпуска, пробег, расход на 100 км, стоимость. Предусмотреть поиск по марке машины.
Вот что получилось
Вот условие
Написать программу, которая выводит меню следующего вида:
Ввод
Корректировка
Удаление
Вывод
Поиск
Выход
Для каждой машины укажите ее марку, год выпуска, пробег, расход на 100 км, стоимость. Предусмотреть поиск по марке машины.
Вот что получилось
C++:
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
class avto
{
public:
char marka[12];
int data_vypuska[3];
char color[12];
int probeg[11];
int rashod[10];
};
// Ввод данных.
void input(char * filename)
{
int count;
cout << "Kol-vo: ";
cin >> count;
avto S;
fstream F;
F.open(filename, ios::out | ios::binary);
for (int i=0; i<count; ++i)
{
cout << endl;
cout << "Vvedite marku avto: "; cin >> S.marka;
cout << "Vvedite datu vypuska(dd mm gg) avto: "; cin >> S.data_vypuska[0] >> S.data_vypuska[1] >> S.data_vypuska[2];
cout << "Vvedite probeg: "; cin >> S.probeg;
cout << "Vvedite rashod 100: "; cin >> S.rashod;
F.write((char *)&S, sizeof(S));
}
F.close();
}
// доп. чек: Проверка количества записей.
int GetCount(char * filename)
{
avto S;
fstream F;
F.open(filename, ios::in | ios::binary);
int count = 0;
while (F.read((char *)&S, sizeof(S)))
++count;
return count;
}
// вывод всех записей
void outputAll(char* filename)
{
if (!GetCount(filename))
{
cout << "Error: Ne naydeno zapicey." << endl;
return;
}
cout << "<>Output All Avto<>" << endl;
avto S;
fstream F;
F.open(filename, ios::in | ios::binary);
int number = 0;
cout << "MARKA | " << "DATA VYPUSKA | " << "probeg | " << "rashod" << endl;
while (F.read((char *)&S, sizeof(S)))
{
cout << number << ") " << S.marka << " | " << S.data_vypuska[0] << ":" << S.data_vypuska[1] << ":" << S.data_vypuska[2] << " | " << S.probeg << " | " << S.rashod << endl;
++number;
}
cout << endl;
}
// загрузка в оперативу
void LoadInMemory(avto *S, char* filename)
{
fstream F;
F.open(filename, ios::in | ios::binary);
int number = 0;
while (F.read((char *)&S[number], sizeof(S[number])))
++number;
F.close();
}
// удаление по индексу
void DeleteIndexFromKey(int key, char* filename = NULL)
{
if (!GetCount(filename))
{
cout << "Error: Ne naydeno zapicey." << endl;
return;
}
avto* S = new avto[GetCount(filename)];
LoadInMemory(&S[0], filename);
fstream F;
F.open(filename, ios::out | ios::binary);
for (int i = 0; i <= GetCount(filename); ++i)
{
if (i != key)
F.write((char *)&S[i], sizeof(S[i]));
}
cout << "Complete remove: " << S[key].marka << endl;
delete [] S;
F.close();
}
// удаление
void usDelete(char* filename)
{
if (!GetCount(filename))
{
cout << "Error: Ne naydeno zapicey." << endl;
return;
}
cout << "Udalit' zapis'" << endl;
outputAll(filename);
int key;
cout << "Input key for delete: ";
cin >> key;
if (key > GetCount(filename))
{
cout << "Error: key no correction." << endl;
return;
}
DeleteIndexFromKey(key, filename);
cout << endl;
}
// корректировка
void Correction(char * filename)
{
if (!GetCount(filename))
{
cout << "Error: Ne naydeno zapicey." << endl;
return;
}
avto* S = new avto[GetCount(filename)];
outputAll(filename);
int index, key;
cout << "Input key for correction: ";
cin >> index;
cout << "Chto pravim?(1 - marka;; 2 - data vypuska; 3 - probeg; 4 - rashod): ";
cin >> key;
LoadInMemory(&S[0], filename);
switch (key)
{
case 1:
cout << "Vvedite new marku: ";
cin >> S[index].marka;
break;
break;
case 2:
cout << "Vvedite new data vypuska: ";
cin >> S[index].data_vypuska[0] >> S[index].data_vypuska[1] >> S[index].data_vypuska[2];
break;
case 3:
cout << "Vvedite new probega: ";
cin >> S[index].probeg;
break;
case 4:
cout << "Vvedite new family vladelca: ";
cin >> S[index].rashod;
break;
default:
cout << "Error: key." << endl;
return;
}
fstream F;
F.open(filename, ios::out | ios::binary);
for (int i = 0; i <= GetCount(filename) + (index == 0) ? 1 : 0; ++i)
F.write((char*)&S[i], sizeof(S[i]));
cout << "Complete correction." << endl;
cout << endl;
delete [] S;
}
bool chars(char* char1, char* char2)
{
int count = 0;
int sovpad = 0;
while (char1[count] != '\0')
{
if (char1[count] == char2[count])
++sovpad;
++count;
}
if (count == sovpad)
return true;
return false;
}
// поиск
void Search(char * filename)
{
if (!GetCount(filename))
{
cout << "Error: Ne naydeno zapicey." << endl;
return;
}
cout << endl;
cout << "<>Search<>" << endl;
avto* S = new avto[GetCount(filename)];
LoadInMemory(&S[0], filename);
char search_marka[20];
bool flag = false;
cout << "Vvedite family vladelca: ";
cin >> search_marka;
for (int i = 0; i < GetCount(filename); ++i)
{
if (chars(S[i].marka, search_marka))
{
if (!flag)
cout << "MARKA | " << "DATA VYPUSKA | " << "Probeg | " << "FAMILY" << endl;
cout << i << ") " << S[i].marka << " " << S[i].data_vypuska[0] << ":" << S[i].data_vypuska[1] << ":" << S[i].data_vypuska[2] << " | " << S[i].probeg << " | " << S[i].rashod << endl;
flag = true;
}
}
if (!flag)
cout << "Not found." << endl;
cout << endl;
}
int main()
{
bool active = true;
int n = 0;
char filename[20];
cout << "filename = ";
cin >> filename;
do
{
cout << "<>Vvod - 1" << endl;
cout << "<>Korrect - 2" << endl;
cout << "<>Udalenie - 3" << endl;
cout << "<>Vyvod - 4" << endl;
cout << "<>Poisk - 5" << endl;
cout << "<>Vyhod - 6" << endl;
cout << "Command -> ";
cin >> n;
switch (n)
{
case 1:
input(filename);
break;
case 2:
Correction(filename);
break;
case 3:
usDelete(filename);
break;
case 4:
outputAll(filename);
break;
case 5:
Search(filename);
break;
case 6:
active = false;
break;
default:
cout << "Error: Input key." << endl;
break;
}
} while (active);
system("pause");
return 0;
}