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

Обновлении записи в связанном списке - C++

Восстановить пароль Регистрация
 
Konkin
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 30
04.12.2011, 11:13     Обновлении записи в связанном списке #1
Здравствуйте. Пишу код для GUI приложения. По заданию я обязан сделать функцию, которая бы изменяла запись в базе данных, возвращалась позиция записи в соответствии с порядком сортировки. Так же любой перебор элементов обязан делать только итераторами. Обязан использовать контейнер QLinkedList. Аргументы функции указаны в коде с комментариями.

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
/** Изменить запись в базе данных
    \param [in] id -  идентификатор  редактируемой  записи
    \param [in] name - название редактируемого поля
    \param [in] value - новое значение редактируемого поля (в текстовом формате)
    \return - новая  позиция записи в соответствии с порядком сортировки
*/
int FootballDataBase::update(unsigned int id, const QString & name, const QString & value)
{
    class Football record; // Времянка
    bool isFind=false; // Флаг о нахождении нужной записи по id
 
    QLinkedList<Football>::iterator iter; // Созадние константного STL-итератора
    iter=recordsInBase.begin(); // Ставим его в начало
 
    // Пока есть следующая запись и не найдена нужная запись
    while(iter!=recordsInBase.end() && !isFind)
    {
        if((*iter).id==id) // Если id записи равен входному
        {
            record=(*iter); // Переписываем эту запись во времянку
            isFind=true; // Ставим флаг, что нашли
        }
        else
        {
            iter++;
        }
    }
    
    remove(id); // Удаляем входную запись по данному id
 
    if(name=="footballerFIO") // Если имя редатируемого поля footballerFIO
    {
        record.anketa.footballerFIO=value; // Обновляем эту ФИО
    }
    else if(name=="dateOfBirth") // Если имя редатируемого поля dateOfBirth
    {
        QDate modValue=QDate::fromString(value); // Переводим из строки в QDate
        record.anketa.dateOfBirth=modValue; // Обновляем дату
    }
    else if(name=="Nation") // Если имя редатируемого поля Nation
    {
        int IntValue=value.toInt(0,10); // Переводим в целое число
        switch (IntValue) // Выбираем нужный параметр из перечисления
        {
            case 0: record.anketa.Nation=record.anketa.Russia; break;
            case 1: record.anketa.Nation=record.anketa.Ukraine; break;
            case 2: record.anketa.Nation=record.anketa.Poland; break;
            case 3: record.anketa.Nation=record.anketa.Bulgaria; break;
            case 4: record.anketa.Nation=record.anketa.Brazil; break;
        }
    }
 
    int position=insertFootballer(record); // Вставим футболиста не нарушая порядок сортировки
    return position;
}
Структура класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Football
{
public:
    struct
    {
        QString footballerFIO; // ФИО футболиста
        QDate dateOfBirth;  // Дата рождения футболиста
        enum  // Национальность
        {
            Russia=0,
            Ukraine=1,
            Poland=2,
            Bulgaria=3,
            Brazil=4
        }Nation;
    }anketa;    
 
    int SummaContract; // Зарплата
 
    unsigned int id;    // Идентификатор
};
Код внутренних функций приводить не буду, не в них суть. Вкратце поясню код. Ищу запись в связанном списке по id, копирую её во времянку, саму запись удаляю, по названию редактируемого поля нахожу что нужно заменить при апдейте, сохраняю отредактированную запись в контейнер (это делается внутри функции insertFootballer).

Собственно вопрос. Можно ли как то обойтись без удаления и вставки записи заново в нужное место? Хотелось бы просто обновить нужное поле записи и переместить каким нибудь хитрым способ запись на нужную позицию в соответствии с сортировкой. Подскажите как это реализовать?

Заранее спасибо.

Добавлено через 1 час 20 минут
Никто не знает?

Добавлено через 9 часов 42 минуты
HELP
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2011, 11:13     Обновлении записи в связанном списке
Посмотрите здесь:

удаление/добавление записи по ключу в односвязном списке C++
Ошибка в списке C++
Конструктор и деструктор в связанном списке геометрических фигур C++
C++ Записи в линейном списке содержат ключевое поле типа int. Сформиро-вать двунаправленный список. Добавить в него элемент с заданным номером, удалить К
Написать функции для чтения/записи отдельных бит для любой записи из данного набора C++
C++ Записи в линейном списке содержат ключевое поле типа int. Сформировать двунаправленный список. Удалить из него
Удаление в списке C++
C++ Сигнал об обновлении данных

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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