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

Из файла необходимо прочитать записи, установить ключи, позиции и количество записей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить сумму цифр положительного числа http://www.cyberforum.ru/cpp-beginners/thread1152437.html
в школе дали задание на каникулы Дано положительное целое число. Требуется определить сумму его цифр. необходимо определить и использовать рекурсивную функцию Вход. данные Первая строка:...
C++ Путаница с циклом for. Рассчитать сумму банковского вклада Здравствуйте, помогите разобраться. Это задание из книги про ООП С++ Лафоре, программа запрашивает начальную сумму вклада, процентную ставку и ту сумму которую вы хотите получить, программа должна... http://www.cyberforum.ru/cpp-beginners/thread1152429.html
Можно ли разместить переменную в нужную ячейку памяти и реально ли хранить данные, разбросанными по памяти? C++
Добрый день. Не могу найти информацию по двум вопросам : 1) могу ли я разместить переменную в нужную ячейку памяти. Например: int a ; &a = ABF068; 2) И реально ли вообще хранить например тот...
C++ Готовая программа, но надо подгрузить через функция( открыв файл)
Добрый вечер!) Подскажите, есть программа с оператором case, вот при выборе case 1: выполняется определенное решение. Нужно изменить, чтобы при выборе case 1: подгружался файл через функцию....
C++ Unicode символы http://www.cyberforum.ru/cpp-beginners/thread1152398.html
Здравствуйте, подскажите, как перевести коды символов типа \u1040 в сами символы?
C++ Сортировка массива методом парных перестановок Здравствуйте,форумчане.Помогите пожалуйста решить проблему.Необходимо отсортировать отрицательные числа массива в порядке убывания методом парных перестановок.Я смог реализовать такой алгоритм только... подробнее

Показать сообщение отдельно
Lahden
1 / 1 / 0
Регистрация: 26.09.2013
Сообщений: 52
23.04.2014, 20:04  [ТС]
Класс файла (Ссылки на объекты авторского класса, класса карты файла, указатель на строку с именем файла и объект класса fstream)
Кликните здесь для просмотра всего текста
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
96
97
98
99
100
101
102
103
104
#include "MyFile.h"
#include <cstring>
CMyFile :: CMyFile ()
: m_name (new char [1])
, m_r (*(new CFruit))
, m_a (*(new CFileCard))
{
    *m_name = '\0';
}
CMyFile :: ~CMyFile()
{
    delete m_name;
    delete &m_r;
    delete &m_a;
}
bool CMyFile :: add (const char* name, const char* color, int weight)
{
    m_f.seekp(0, ios :: end);
    if (find (name) == 0)
        return false;
    m_r = *(new CFruit (name, color, weight));
    streampos pos = m_f.tellg();
    m_f << m_r;
    m_a.add(name, pos);
    return true;
}
bool CMyFile :: del (const char* name)
{
    int j (m_a.getIndex (name));
    if (j < 0)
        return false;
    m_a.del(j);
    save();
    return true;
}
bool CMyFile :: open (const char* name)
{
    m_f.open (name, ios_base :: in | ios_base :: out | ios_base :: binary);
    if (!m_f)
        return false;
    m_name = new char [strlen(name)+1];
    strcpy_s(m_name, strlen(name)+1, name);
    setA ();
    return true;
}
CFruit* CMyFile :: find (const char* name)
{
    int j = m_a.getIndex(name);
    if (j == -1)
        return 0;
    m_r = *(getRec(j));
    return &m_r;
}
int CMyFile :: getN () const
{
    return m_a.getN();
}
CFruit* CMyFile :: getRec (int index)
{
    long pos (m_a.getPos (index));
    m_f.seekg(pos, ios::beg);
    m_f >> m_r;
    return &m_r;
}
void CMyFile :: setA()
{
    long pos;
    pos = m_f.tellg();
    while (m_f >> m_r)
    {
        m_a.add(m_r.getName(), pos);
        pos = m_f.tellg();
    }
}
void CMyFile :: save()
{
    fstream f_save("tmp", ios_base :: binary | ios_base :: out | ios_base :: trunc);
    int n (m_a.getN());
    int i(0);
    while (i<n)
    {
        f_save << *(getRec(i));
    }
    m_f.close();
    f_save.close();
    _unlink(m_name);
    rename ("tmp", m_name);
}
double CMyFile :: averageWeight (const char* color)
{
    double sum (0.0);
    int amount (0);
    while (m_f >> m_r)
    {
        if (m_r == color)
        {
            sum += m_r.getWeight();
            amount++;
        }
    }
    if (amount == 0)
        return 0;
    return sum/amount;
}

Карта файла (ключи, позиции и количество записей)
Кликните здесь для просмотра всего текста
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
#include "FileCard.h"
#include <cstring>
#include <iostream>
using namespace std;
CFileCard :: CFileCard ()
: m_n (0)
{
}
CFileCard :: ~CFileCard ()
{
    for (int j(0); j < m_n; j++)
        delete m_key [j];
}
bool CFileCard :: add (const char* key, long position)
{
    if (getIndex(key) == -1)
    {
        m_key[m_n] = new char [strlen(key)+1];
        strcpy_s( m_key[m_n], strlen(key)+1, key);
        m_pos[m_n++] = position;
        return true;
    }
    else
        return false;
}
bool CFileCard :: del (int index)
{
    int j = index;
    if (j<0)
        return false;
    delete m_key [j];
    while (j < m_n - 1)
        m_key [j++] = m_key [j+1];
    j = index;
    while (j < m_n - 1)
        m_pos [j++] = m_pos [j+1];
    m_n--;
    return true;
}
int CFileCard :: getIndex (const char* key)
{
    for (int i(0); i< m_n; i++)
        if (!strcmp(key, m_key[i]))
            return i;
    return -1;
}
long CFileCard :: getPos (int index)
{
    return m_pos [index];
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru