Файловые Потоки (помогите Найти Ошибку) C++

Тема в разделе "C/C++/C#", создана пользователем 203, 2 июн 2012.

  1. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте. У меня возникла небольшая проблема с одной программой на тему Файловые потоки. Программа не компилируется какие то 8 ошибок и я не могу разобраться какие. помогите пожалуйста заранее спасибо.
    Вот условие

    Написать программу, которая выводит меню следующего вида:
    Ввод
    Корректировка
    Удаление
    Вывод
    Поиск
    Выход
    Для каждой машины укажите ее марку, год выпуска, пробег, расход на 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;
    }
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    во первых ,зачем подключаешь "stdafx.h",ты знаешь что это?что это даёт?
    во вторых у тебя поля int probeg[11];int rashod[10];-это массивы!!а не числа из стольки цифр
    поэтому cin >> S.probeg; неправильно надо или cin >> S.probeg;или убрать массив
     
  3. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Спасибо за ответ.
    Что такое stdafx.h вроде дефолт библиотека на visual C++
     
  4. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Подскажите почему у меня выводит место расхода и пробега какую то ерунду наверно адрес ячейки ил что хз.
     
  5. 203

    203 New Member

    Регистрация:
    21 фев 2012
    Сообщения:
    4
    Симпатии:
    0
    Починил всё, но теперь новая проблема. Я ввожу записи и если я хочу их откорректировать то потом творится какая то ерунда, если после корректировку нажать вывод то запись которую я корректировал она просто удаляется, а остальные выводятся как то криво. Помогите разорятся в проблеме.
     
Загрузка...
Похожие Темы - Файловые Потоки (помогите
  1. Mady
    Ответов:
    3
    Просмотров:
    1.475
  2. Senset
    Ответов:
    0
    Просмотров:
    2.331

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