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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
#1

Присвоение индекса при записи фрагмента в документ - C++

26.05.2010, 21:50. Просмотров 417. Ответов 6
Метки нет (Все метки)

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
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
 
struct TUser {char name[30]; int clas; double vid;} ;
 
fstream f;
const int n=3;
void ievadit(TUser User)
{  int k;
if (sizeof(f)==0) f.open("u4eniki.dat", ios::out);
else f.open("u4eniki.dat",ios::app);
cout<<"Imja ucenika"<<" ";
gets(User.name);
cout<<"Srednija ocenka"<<" ";
cin>>User.vid;
cout<<"Nomer klasa ucenika"<<" ";
cin>>User.clas;
f.write((char*)&User,sizeof(TUser));
f.close();
};
void list(int nr,TUser User)
{
int n=0,k;
f.open("u4eniki.dat",ios::in);
cout<<"\n       Imja    Klass  Srednija ocenka";
f.seekg(0);
while(n<nr)
{     
        if(f.read((char*)&User, sizeof(TUser)));{ n++;
cout<<"\n  "<<User.name<<"   "<<User.clas<<"  "<<User.vid;
} }
f.close();
 
getch();
}
 
 
int SizeofFile()
{int nr=0;
f.open("u4eniki.dat",ios::ate);
nr=f.tellp()/sizeof(TUser);
f.close();
return nr;
}
 
 
void viens(int nr,TUser User)
{}
 
void main()
{
int i,k,nr; struct TUser User;
do
{
clrscr();
 nr=SizeofFile();
 if (nr==0)      cout << "\n Menu"<<"                    "<<"Number of Records: " << "Zapisej net";
else cout << "\n Menu"<<"                    "<<"Number of Records: " << nr;
cout<<"\n 1 - vvod";
cout<<"\n 2 - poisk";
cout<<"\n 3 - pokazatj vseh";
cout<<"\n 4 - Exit";
cout<<"\n\n Vibirite dejstvie: ";
cin>>i;
if(i==1) ievadit(User);
if(i==3)
{  list(nr,User);
getch();if(sizeof(f)==0)
                f.open("u4eniki.dat", ios::out);
}
 
if(i==2)
{  viens(nr,User);
getch();}
 
}
while (i!=4);
}
Вопрос, вот программа записи информации в файл, как, не используя масивов, можно осуществить поиск используя индекс. Тоесть, запускаю компилятор, ввожу н-тое количество записей, что сохраняется в документ, по выборы могу закрыть,продолжить, посмотреть существующую работу, но не могу к примеру посмотреть 2-ую совершённую запись, как этого можно добится?

Добавлено через 2 часа 3 минуты
Помогите дописать...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2010, 21:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Присвоение индекса при записи фрагмента в документ (C++):

Присвоение при наследовании - C++
Всем доброго дня ! Подскажите пожалуйста как сделать так , что-бы при выполнении операции a = c; вызывались операторы = обеих ...

В данном линейном целочисленном массиве каждый элемент с четным индексом увеличить на значение индекса, с нечетным — уменьшить на значение индекса - C++
В данном линейном целочисленном массиве каждый элемент с четным индексом увеличить на значение индекса, с нечетным — уменьшить на значение...

Массивы. Движение при сравнении значений индекса - C++
Задание: Написать программу, которая находит в массиве значения, повторяющиеся два и более раз, и показывает их на экран. Поиском находил...

Присвоение строке значение при объявлении - C++
Необходимо создать что-то наподобие базы данных строк char. Но то присвоение. которое я предлагаю, не подходит, в чём проблема? Выдает...

Увеличение индекса в цикле при каждом заходе в функцию - C++
Добрый день столкнулся с маленькой проблемкой код ниже немогу чёта понять почему у меня не увеличивается итератор при каждом заходе в...

Что будет выведено на экран при выполнении следующего фрагмента программы - C++
Пожалуйста помогите с экзаменационными заданиями((((( В программе выполнены следующие описания: class A { protected: int a; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
26.05.2010, 22:12 #2
1) Если ты используешь функции read/write для записи структуры, содержащей числовые переменные int, double и т.д., то файл следует открывать в бинарном режиме. В противном случае возможен неприятный эффект.
2) При использовании тех же функций read/write становится очень просто считывать произвольную запись из файла при помощи функции seekg
C++
1
2
f.seekg(sizeof(TUser)*(n-1), ios_base::beg);// n - номер записи
f.read((char*)&User, sizeof(TUser));
0
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
26.05.2010, 22:29  [ТС] #3
Цитата Сообщение от kazak Посмотреть сообщение
1) Если ты используешь функции read/write для записи структуры, содержащей числовые переменные int, double и т.д., то файл следует открывать в бинарном режиме. В противном случае возможен неприятный эффект.
2) При использовании тех же функций read/write становится очень просто считывать произвольную запись из файла при помощи функции seekg
C++
1
2
f.seekg(sizeof(TUser)*(n-1), ios_base::beg);// n - номер записи
f.read((char*)&User, sizeof(TUser));
не совсем понел, у меня идёт подсчёт записей, как сделать так, что бы введя индекс записи, я бы увидел нужную запись, тоесть у первой записи индекс 1 у второй 2 и тдп. Но дело в том что я ввожу 3 строчки. 1-Имя 2-средняя оценка 3-класс. Где симболы и int и char и double
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
26.05.2010, 22:49 #4
Да вроде правильно понял
C++
1
2
3
4
5
cin >> n;//Ввел номер записи
f.open(...);//Открыл файл с записями
f.seekg(sizeof(TUser)*(n-1), ios_base::beg);//Переместил указатель на начало нужной записи
f.read((char*)&User, sizeof(TUser));// Считал нужную запись
//Дальше делай с этой записью что хочешь
Добавлено через 5 минут
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
int SizeofFile()
{int nr=0;
f.open("u4eniki.dat",ios::ate);
nr=f.tellp()/sizeof(TUser);
f.close();
return nr;
}
=>
C++
1
2
3
4
5
6
7
8
9
int SizeofFile()
{
   int nr=0;
   f.open("u4eniki.dat",ios::in | ios::out | ios::binary | ios::app);
   f.seekp(0, ios::end);
   nr=f.tellp()/sizeof(TUser);
   f.close();
   return nr;
}
Цитата Сообщение от Apmyp /7 Посмотреть сообщение
if (sizeof(f)==0) f.open("u4eniki.dat", ios::out);
else f.open("u4eniki.dat",ios::app);
бред
C++
1
f.open("u4eniki.dat",ios::in | ios::out | ios::binary | ios::app);
1
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
26.05.2010, 23:09  [ТС] #5
вписал в код, всё что вы мне вписали, но запись которую хочу вызвать так и так не появляется...


ОТРОМНОЕ СПАСИБО ВАМ! ВСЁ СДЕЛАЛ! ПРЯТНО, ЧТО ЕСТЬ ЛЮДИ КОТОРЫЕ ГОТОВЫ ПОМОЧ!!!
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
26.05.2010, 23:10 #6
А файл содержит нужную запись, он случаем не пустой?
0
Apmyp /7
3 / 3 / 0
Регистрация: 14.10.2009
Сообщений: 76
26.05.2010, 23:16  [ТС] #7
Всё работает как нужно! Провер, ещё раз спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2010, 23:16
Привет! Вот еще темы с ответами:

Что будет выведено на экран при выполнении следующего фрагмента программы - C++
Помогите с заданием пожалуйстааа В программе выполнены следующие описания: class A { protected: int a; public: A(int ax){ a =...

Какая из этих переменных становится указателем при выполнении следующего фрагмента кода - C++
Какая из этих переменных становится указателем при выполнении следующего фрагмента кода: a=&amp;b;?

При выполнении фрагмента кода, в построчном дебаге студия крашится и перезагружается: найти и исправить ошибку - C++
Добрый день, не могу разобраться в чем дело. Есть следующий фрагмент кода: ListTables *searchTable =...

Присвоение индекса элементу - jQuery
Подскажите как присвоить индекс элементу в DOM? Например: &lt;div class=&quot;wrap&quot;&gt; &lt;div class=&quot;bar&quot;&gt;bar&lt;/div&gt; &lt;div...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.05.2010, 23:16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru