Форум программистов, компьютерный форум CyberForum.ru

Структура "Государство". Блочный ввод-вывод - C++

Восстановить пароль Регистрация
 
MargaritaS
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 31
18.05.2014, 19:28     Структура "Государство". Блочный ввод-вывод #1
Структура "Государство":
- название;
- столица;
- численность населения;
- занимаемая площадь.
Удалить все элементы, у которых численность меньше заданной, добавить элемент после элемента с указанным номером.
Описала структуру,сделала удаление.Не знаю как сделать добавление помогите пожалуйста.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std ; 
struct Gosydarstvo //объявление структуры
{char nam[20];
char stl[20];
int ch;
int pl;
};
char filename[]="data.dat"; //имя файла
char data1[]="data1.dat";
FILE *f;
FILE *f1;
void vvod() //функция дописывает в файл запись 
{ Gosydarstvo ex;
f=fopen(filename,"ab");
cout « "\nNazvaniye:";
cin » ex.nam;
cout » "\nStoliza:";
cin » ex.stl;
cout « "\nChislennost naseleniya:";
cin » ex.Ch;
cout « "\nPloshad:";
cin » ex.pl;
fwrite(&ex,sizeof(Gosydarstvo),1,f);
fclose(f);
}
void vyvod()//функция отображает все записи из файла
{
Gosydarstvo ex;
f=fopen(filename,"rb");
while(!feof(f))
{
if(fread(&ex,sizeof(Gosydarstvo),1,f)==1)//если прочитано
{
cout « "\nNazvanie: " « ex.nam;
cout « "\tStoliza: "« ex.stl;
cout « "\tChislennost naseleniya: "« ex.ch«'\n';
cout « "\tPloshad: "« ex.pl«'\n';
}
}
fclose(f);
}
void obrabotka() // Удалить все элементы, у которых численность меньше заданной
{ Gosydarstvo ex;
int ich;
cout«"Zadayte chislennost: ";
cin»ich;;
f1=fopen("data1.dat","a+");
f=fopen(filename,"rb");
while(!feof(f))
{
if(fread(&ex,sizeof(Gosydarstvo),1,f)==)
{
if(ex.ch < ich)
}
fwrite(&ex,sizeof(Gosydarstvo),1,f1);
}
}
}
fclose(f);
fclose(f1);
remove(filename);
rename("data1.dat",filename);
vvod();
vvod();
vvod();
}
vvod();
}
void main()
{ char otv;
if((f=fopen(filename,"rb"))==NULL)//если файла нет,
f=fopen(filename,"wb"); // то создадим его
fclose(f);
do 
{// «меню»
cout«"Vyberi dejstvie:\n";
cout«"\t1-Vvod dannyh\n";
cout«"\t2-Vyvod dannyh\n";
cout«"\t3-Obrabotka dannyh\n";
cout«"\t4-Vyhod\n";
cin » otv;
switch(otv)
{//выбор действия
case '1': vvod();break;
case '2': vyvod();break;
case '3': obrabotka();break;
}
}
while (otv!='4');
}//main
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
18.05.2014, 19:34     Структура "Государство". Блочный ввод-вывод #2
Цитата Сообщение от MargaritaS Посмотреть сообщение
f=fopen(filename,"wb");
это открытие пустого файла (все, что было, сотрется).
Для добавления записей откройте так:
C++
1
f=fopen(filename,"ab");
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
18.05.2014, 19:37     Структура "Государство". Блочный ввод-вывод #3
У тебя же есть функция vvod() для добавления.
MargaritaS
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 31
18.05.2014, 19:40  [ТС]     Структура "Государство". Блочный ввод-вывод #4
Цитата Сообщение от nmcf Посмотреть сообщение
У тебя же есть функция vvod() для добавления.
Да только я не знаю как сделать чтобы оно добавило элемент с заданным номером.Помогите если не сложно.
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
18.05.2014, 19:41     Структура "Государство". Блочный ввод-вывод #5
Не вижу в твоей структуре никакого номера.
MargaritaS
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 31
18.05.2014, 19:43  [ТС]     Структура "Государство". Блочный ввод-вывод #6
Цитата Сообщение от nmcf Посмотреть сообщение
Не вижу в твоей структуре никакого номера.
у меня задание добавить элемент после элемента с указанным номером.А как это сделать?
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
18.05.2014, 19:49     Структура "Государство". Блочный ввод-вывод #7
Придётся весь файл переписывать. Считывай всё, что есть в массив структур, потом выводи часть до нового элемента, сам новый элемент и часть после него.
MargaritaS
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 31
18.05.2014, 20:13  [ТС]     Структура "Государство". Блочный ввод-вывод #8
Цитата Сообщение от nmcf Посмотреть сообщение
Придётся весь файл переписывать. Считывай всё, что есть в массив структур, потом выводи часть до нового элемента, сам новый элемент и часть после него.
Я не знаю как это сделать,можете показать пример программы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 20:23     Структура "Государство". Блочный ввод-вывод
Еще ссылки по теме:

Элементарный ввод/вывод - ошибка "Cout undeclared" C++
C++ Структура "Телефонная книга", файловый ввод/вывод
C++ Класс "Матрица": ввод/вывод, умножение, сложение/вычитание, транспонирование, сдвиг

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nmcf
4306 / 3727 / 1256
Регистрация: 14.04.2014
Сообщений: 14,599
18.05.2014, 20:23     Структура "Государство". Блочный ввод-вывод #9
Вот так прочитать всё в массив:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
f=fopen(filename,"rb");
f.seekg (0, f.end);
int length = f.tellg();
f.seekg (0, f.beg);
 
int count = length / sizeof Gosydarstvo; // количество записей
 
Gosydarstvo *m = new Gosydarstvo[count];
 
for(int i = 0; i < count; i++)
{
  f.read((char *)&m[i], sizeof Gosydarstvo);
}
f.close();
}
Yandex
Объявления
18.05.2014, 20:23     Структура "Государство". Блочный ввод-вывод
Ответ Создать тему
Опции темы

Текущее время: 05:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru