Структура, C++

Тема в разделе "C/C++/C#", создана пользователем nreginka832, 17 ноя 2014.

Статус темы:
Закрыта.
  1. nreginka832

    nreginka832 New Member

    Регистрация:
    17 ноя 2014
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте. Нужно описать структуру "фильм".
    -название
    -режиссер
    -год выпуска
    -стоимость
    Удалить все элементы, у которых стоимость превышает заданную
    Добавить k элементов в начало файла.

    Запись , чтение из файла сделала.
    Вот не могу понять, как удалить именно те элементы, у которых стоимость нужно учитывать.
    И добавление у меня по другому. тоже не понимаю как сделать так, чтобы добавление шло с начала.


    Код (C++):
    #include "stdafx.h"
    #include <iostream>
    #include <locale>  
    #include <conio.h>  
    #include <iomanip>  
    #include <windows.h>
    #include <fstream>  
    #include <string.h>
    using namespace std;

    const int L = 20,
    N = 50;

    struct film // структура фильм
    {
    char name[L], // Название
    director[L], // режиссер
    year[L]; // год выпуска
    char cost[9]; // стоимость
    };


    film x[N];
    int n;

    void inputFile();  
    void outputScreen();   
    void outputScreenFile();
    void addFilm();
    void deleteFilm(); 

    void main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_CTYPE, "Russian");
    int j; //пункт меню
    while (1)//бесконечный цикл
    {
    system("CLS");
    cout << "\n Структура фильм\n";
    cout << "\n Структура фильм\n";
    cout << "-----------------------------------\n";
    cout << "1 Ввод из текстового файла\n";
    cout << "2 Просмотр \n";
    cout << "3 Сохранение в текстовом файле\n";
    cout << "4 Добавление записи\n";
    cout << "5 Удаление записи\n";
    cout << "-----------------------------------\n";
    cout << "0 Завершение работы. Выход из программы\n";
    cout << endl;
    cout << "Ваш выбор (0-6): ";
    cin >> j;
    switch (j)
    {
    case 1: inputFile(); _getch(); break;
    case 2: outputScreen(); _getch(); break;
    case 3: outputScreenFile(); _getch(); break;

    case 4: addFilm(); _getch(); break;
    case 5: deleteFilm(); _getch(); break;
    case 0: cout << "Завершение работы. Нажмите Enter\n";
    _getch(); return;
    default: cout << "Ошибка: Введённый пункт отсутствует!\n";
    _getch(); break;
    }
    }

    }


    void inputFile() // ввод из файла
    {
    char file[L];
    ifstream fin;
    cout << "Имя входного файла: "; cin >> file;
    fin.open(file);
    if (fin.fail()) { cout << file << " - не открыт\n"; _getch(); exit(1); }

    n = 0;
    do
    {
    fin >> x[n].name >> x[n].director>>x[n].year >> x[n].cost;
    n++;
    } while (fin.good());

    fin.close();
    cout << endl << "Количество записей n= " << n;
    cout << "\nФайл введён. Полученный массив: \n";
    outputScreen();
    }

    void outputScreen() //вывод на экран
    {
    cout << " Структура фильм\n";
    cout << "____________________________________________________\n";
    cout << " |№ | Название | Режиссер | ГодВыпуска | Стоимость | " << endl;
    cout << " |--|----------|----------|------------|-----------|\n";
    int i;
    for (i = 0; i<n; i++)
    cout << left << " |" << setw(2) << i + 1 << "|" << setw(10) << x[i].name << "|" << "|" << setw(10) << x[i].director << "|" << setw(11) << x[i].year << "|" << setw(11) << x[i].cost << "|" << endl;

    cout << "____________________________________________________\n";
    }
    void outputScreenFile() //вывод в файл
    {
    char file[L];
    ofstream fout;
    int i;
    cout << "Имя выходного файла: "; cin >> file;
    fout.open(file);
    if (fout.fail()) { cout << file << " - не создан\n"; _getch(); exit(1); }
    for (i = 0; i<n; i++)
    {
    fout << setw(10) << x[i].name << " " << setw(10) << x[i].director << " " << setw(11) << x[i].year << " " << setw(11) << x[i].cost;
    if (i != n - 1) fout << endl;   if (fout.fail()) break;
    }
    fout.close();
    cout << "Файл создан.\n";
    }


    void addFilm() // добавление записи
    {
    film t;
    outputScreen();

    int ans1,
    ans2;
    cout << "Сколько строк желаете добавить? "; cin >> ans1;
    cout << "После какой строки? "; cin >> ans2;

    int i, j;

    for (j = 0; j<ans1; j++)
    {
    n++;
    for (i = n - 1; i>ans2 + j; i--) x[i] = x[i - 1];
    cout << "\nВведите данные фильма:\n";// Ввод данных для записи
    cout << "Название: "; cin >> t.name;
    cout << "Режиссер: "; cin >> t.director;
    cout << "Год выпуска: "; cin >> t.year;
    cout << "Стоимость: "; cin >> t.cost;
    x[ans2 + j] = t;
    }

    cout << "Запись добавлена\n\nПолученный массив:\n";
    outputScreen();
    }


    void deleteFilm() //удаление записи
    {
    int j, i;
    outputScreen();
    cout << "Введите стоимость фильма: ";
    cin >> j;

    if (j>n)
    { cout << "Нет такой стоимости\n";
    _getch();
    return;
    }
    j--;

    cout << "Фильмы:";
    cout << left << setw(11) << x[j].cost << right << " " << endl;

    n--;
    cout << "Запись удалена\n\nПолученный массив: \n";
    outputScreen();
    }
     
  2. Astyxys

    Astyxys New Member

    Регистрация:
    13 июл 2010
    Сообщения:
    4
    Симпатии:
    0
    Есть, где-нибудь условие, что файл данных должен быть именно текстовым? Или можно бинарный?
     
  3. Astyxys

    Astyxys New Member

    Регистрация:
    13 июл 2010
    Сообщения:
    4
    Симпатии:
    0
    С бинарным файлом было бы намного проще.

    1) Определить структуру файла(достаточно первые 2-4 байта для количества записей)
    2) Считать количество записей
    3) Выделить память для буфера
    Код (C++):
     film* buff = new film[recNum];
    4) Считать в массив буфер
    5) С помощью List организовать список фильмов
    6) Выкинуть из списка фильмы по условию
    7) Посчитать количество оставшихся фильмов в списке
    8) Выгрузить полученные данные(количество записей и список фильмов) в файл
     
Загрузка...
Похожие Темы - Структура C++
  1. nreginka832
    Ответов:
    5
    Просмотров:
    1.221
  2. Виталий
    Ответов:
    14
    Просмотров:
    1.416
  3. KsuKsuKsunia
    Ответов:
    0
    Просмотров:
    1.371
  4. mikhailkarmanov
    Ответов:
    1
    Просмотров:
    978
  5. Homka
    Ответов:
    0
    Просмотров:
    1.353
Статус темы:
Закрыта.

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