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

Возможность добавления элемента к базе данных - C++

Восстановить пароль Регистрация
 
mrKravchenko
0 / 0 / 0
Регистрация: 03.06.2014
Сообщений: 3
03.06.2014, 12:23     Возможность добавления элемента к базе данных #1
необходимо сделать возможность добавления нового элемента базы (функция addelement). Не знаю почему не работает.
Помогите исправить программу.
на данный момент все выглядит так:



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
105
106
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <clocale>
#include <string.h>
#include "conio.h"
#include "assert.h"
#define dlnnazv 100
using namespace std;
struct cen //структура для электронного ценника
{
    char tov[dlnnazv], sek[dlnnazv]; //товар и секция
    int pay; //цена
};
void result(cen *ce, int* n);//вывод результата
void input(cen *ce, int* n);//ввод данных
void clear(cen *ce, int* n);//очистка памяти и экрана
void add(cen *ce, int* n);//add element 
void input(cen *ce, int* n)
{
    int i = 0;
    for (i = 0; i<*n; i++) //цикл по всем элементам базы
    {
        cout << "\nТовар: \n";
        cin >> ce[i].tov;
        cout << "Цена: \n";
        cin >> ce[i].pay;
        cout << "Секция: \n";
        cin >> ce[i].sek;
    }
}
void result(cen *ce, int* n)
{
    //cout « "\nКоличество товаров в секциях: \t\t"<<*n<<"Суммарная цена товаров в секциях:\n";
    cout << "Введите название секции: ";
    char section[dlnnazv];
    cin >> section;
    int sum = 0;//переменная для суммы
    int col = 0;
    for (int i = 0; i<*n; i++)
    {
        if (strcmp(ce[i].sek, section) == 0)//если название секции совпадает, 
        {
            sum += ce[i].pay;//прибавляем к сумме
            col++;
        }
    }
    cout << "Количество товаров данной секции: " << col << endl;
    cout << "Сумма товаров данной секции: " << sum << endl;
}
void clear(cen *ce, int* n)
{
    delete ce;//чистим память
    system("cls");//чистим экран
}
void add(cen *ce, int* n)
{
    *n++;
    cen *ce1 = new cen[*n];
    for (int i = 0; i<*n - 1; i++)
        ce1[i] = ce[i];
    cout << "\nВведите дополнительный элемент: \n";
    cout << "\nТовар: \n";
    cin >> ce1[*n - 1].tov;
    cout << "Цена: \n";
    cin >> ce1[*n - 1].pay;
    cout << "Секция: \n";
    cin >> ce1[*n - 1].sek;
    ce = ce1;
 
}
int main()
{
    setlocale(LC_ALL, "Russian");
    system("color 2");
    cen* ce;
    int n;
    int d = 1;
    cout << "__________________________________________________________________________\n\n\tВлад Кравченко\n\n\tЗадание:Создать структуру для электронного ценника (товар, цена,\n\tсекция магазина). Ввести с клавиатуры данные о нескольких ценниках.\n\tПодсчитать общую сумму товаров одной секции.\n\n\n\n\n\n\n\tОбязательно должно быть динамическое выделение и освобождение памяти,\n\tсобственные функции, крайне желательно предусмотреть возможность\n\tдобавления элемента к вашей базе данных(с помощью перевыделения памяти).\t\n\n__________________________________________________________________________\n\n\n\n\n\n";
    system("pause");
    system("cls");
    while (d)//цикл повторных прогонов программы
    {
        cout << "__________________________________________________________________________\n\n\t";
        cout << "\nВведите колличество товаров:\n";
        cin >> n;
        cout << "\n";
        ce = new cen[n];//выделяем память
        input(ce, &n);
        result(ce, &n);
        cout << "__________________________________________________________________________\n\n\t";
        int dop;
        cout << "Добавить новый элемент?\nЕсли да - 1, нет - 0 =>";
        cin >> dop;
        if (dop == 1)
        {
            add(ce, &n);
        }
                system("pause");
        cout << "________________________________________________________________________________\nПовторить?:" << endl;
        cout << "\nЕсли да - 1, нет - 0" << endl;
        cin >> d;
        clear(ce, &n);
    }
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 12:23     Возможность добавления элемента к базе данных
Посмотрите здесь:

класс список, функция добавления элемента в конец C++
C++ Функция добавления и увеличения элемента из очереди с приоритетами
C++ Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив)
Списки: разработать функцию добавления элемента C++
Добавления элемента в бинарное дерево C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.06.2014, 13:20     Возможность добавления элемента к базе данных #2
C++
1
void add(cen *ce, int* n);//add element
Этот что ли?

видимо потому, что оператор

C++
1
ce = ce1;
Не имеет смысла - происходит присвоение переменной на стеке, значение которой теряется по выходу из функции, передавать нужно адрес указателя.

C++
1
delete ce;//чистим память
Синтаксис освобождения памяти массива выглядит:

C++
1
delete []ce;
mrKravchenko
0 / 0 / 0
Регистрация: 03.06.2014
Сообщений: 3
03.06.2014, 13:37  [ТС]     Возможность добавления элемента к базе данных #3
Освобождение памяти подправил, а вот с добавлением нового элемента разобраться не могу.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.06.2014, 13:48     Возможность добавления элемента к базе данных #4
C++
1
2
3
4
5
6
7
void add(cen **ce, int* n)
....
*ce = ce1
 
перед присвоением предварительно очистить память,ранее отведенную под ce, поскольку после этого присвоения она теряется.
 
вызывать - add(&ce, &n);
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
03.06.2014, 13:54     Возможность добавления элемента к базе данных #5
В скобочки оберните все обращения к n по указателю:
C++
1
2
3
void add(cen *ce, int* n)
{
    (*n)++;
и так далее.

А вообще лучше передавайте значение по ссылке. (хотя тут даже и так не требуется - копией было бы очень хорошо и подобных проблем не было бы)
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
03.06.2014, 14:03     Возможность добавления элемента к базе данных #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
В скобочки оберните все обращения к n по указателю:
А, это да, это я проспал
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 22:19     Возможность добавления элемента к базе данных
Еще ссылки по теме:

C++ Алгоритм добавления элемента в сортированный список
C++ Процедура добавления элемента в список по номеру
C++ Функция добавления элемента в кольцевой список

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

Или воспользуйтесь поиском по форуму:
mrKravchenko
0 / 0 / 0
Регистрация: 03.06.2014
Сообщений: 3
03.06.2014, 22:19  [ТС]     Возможность добавления элемента к базе данных #7
при попытке запуска

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
............................
void add(cen **ce, int* n)
{
    (*n)++;
    cen *ce1 = new cen[*n];
    for (int i = 0; i<(*n) - 1; i++)
        ce1[i] = *ce[i];
    cout << "\nВведите дополнительный элемент: \n";
    cout << "\nТовар: \n";
    cin >> ce1[(*n) - 1].tov;
    cout << "Цена: \n";
    cin >> ce1[(*n) - 1].pay;
    cout << "Секция: \n";
    cin >> ce1[(*n) - 1].sek;
    *ce = ce1;
 
}
.......................
 
add(&ce, &n);
.......................


выскакивает ошибка

Необработанное исключение по адресу 0x00A05B7F в var_5, 13, 21.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC.

Добавлено через 2 часа 39 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void add(cen **ce, int* n)
{   (*n)++;
    cen *ce1 = new cen[*n];
    for (int i = 0; i<(*n) - 1; i++)
        ce1[i] = (*ce)[i];
    cout << "\nВведите дополнительный элемент: \n";
    cout << "\nТовар: \n";
    cin >> ce1[(*n) - 1].tov;
    cout << "Цена: \n";
    cin >> ce1[(*n) - 1].pay;
    cout << "Секция: \n";
    cin >> ce1[(*n) - 1].sek;
    *ce = ce1;
 
}
исправил
Yandex
Объявления
03.06.2014, 22:19     Возможность добавления элемента к базе данных
Ответ Создать тему
Опции темы

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