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

Статус
Закрыто для дальнейших ответов.

nreginka832

New Member
17.11.2014
4
0
#1
Здравствуйте. Нужно описать структуру "фильм".
-название
-режиссер
-год выпуска
-стоимость
Удалить все элементы, у которых стоимость превышает заданную
Добавить 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();
}
 

Astyxys

New Member
13.07.2010
4
0
#2
Есть, где-нибудь условие, что файл данных должен быть именно текстовым? Или можно бинарный?
 

Astyxys

New Member
13.07.2010
4
0
#3
С бинарным файлом было бы намного проще.

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