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

список - C++

Восстановить пароль Регистрация
 
mvji
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 17
20.05.2010, 21:46     список #1
1) Сформировать структуру
2)запись содержит:
id/наименование/цена/количество
3) Создать линейный односвязанный список, содержащий информацию о таких записях.
*Не используя классы

Все казалось бы просто, но лично у меня возникла проблема с представлением структуры в списке, как обработать обычный элемент списка есть готовый пример, а вот чтобы этот элемент был структурой я немного не понимаю, как реализовать =(
Поэтому прошу помощи, дайте мне ноги программы дальше сам разберусь, буду очень признателен если напишите функции добавления/удаления из списка ну и собственно его обьявление.
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2010, 21:46     список
Посмотрите здесь:

C++ Список массивов (заменить все элем. каждого массива ср. знач. и отсортировать список)
C++ std::sort. Как сортировать список? (список указателей на объект)
C++ Сформировать список из вещественных чисел. Упорядочить список по возрастанию.
C++ Список: Как добавлять элемент в список, не в начало и не в конец, а между 1 и 2 элементами списка?
Описать функцию, которая формирует список Common, включив в него элементы, ко-торые входят одновременно в список М1 и М2 C++
C++ Необходимо создать список, элемент которого может быть список
Создать список, после каждого отрицательного числа вставить в список 0 C++
Напечатать пронумерованный список список первых 10 наиболее популярных газет C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mvji
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 17
20.06.2010, 12:43  [ТС]     список #2
Текст готовой программы, не знаю возможно кому-нибудь пригодится, до меня эта тема долга доходила( В программе ряд не доработок(не значительных типа проверки ввода, малость в оформление ну или не немного не рациональных реализаций некоторых функций, того же добавления записи), но в целом она рабочая, по крайней мере для зачета хватило)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
//Запись содержит сведения о товарах в магазине:
//– код товара
//– наименование
//– цена
//– количество товара
//– стоимость товара (считается программой)
//Создать линейный односвязанный список, содержащий информацию о таких записях. Определить процедуры для поиска товара (по коду и наименованию), 
//для добавления, удаления и редактирования записей, очистки списка.
//при выходе записывать данные в какой-либо файл, а при запуске проверять наличие такового, если он есть то считывать данные из него
 
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
const int l_name = 20;
const char fname[11] = "spisok.typ";
 
struct Tovar {
    char name[l_name];
    int id;
    int price;
    int amount;
    int cost;
    Tovar* next;
};
 
Tovar *beg;
//int countP=0;
size_t sz=sizeof(Tovar)-(sizeof beg);
 
// Меню
int menu(){
    char buf[10];
    int option;
    do{
        printf("Add - 1\nDelete - 2\nEdit - 3\nSearch - 4\nPrint - 5\nClean - 6\nExit - 7\n");
        scanf("%d", &option);
        system("cls");
    }
    while(!option);
    return option;
}
//Вспомогательная функция добавления элемента
Tovar *add_beg(char *n, int i, int pr, int a, int c){
    Tovar *p;
    p = new Tovar;
 
    p->next = NULL;
    strcpy(p->name,n);
    p->id = i;
    p->price = pr;
    p->amount = a;
    p->cost = c;
    return p;
}
//Добавление элемента(Получение входных данных и определенние позиции элемената)
void add() {
    char n[l_name];
    int i, pr, a,c;
    //Получение входных данных
    printf("Enter name\n"); scanf("%s", &n);
    printf("Enter id\n");       scanf("%d", &i);
    printf("Enter price\n");    scanf("%d", &pr);
    printf("Enter amount\n");   scanf("%d", &a);
    c = pr * a;
    //Добавление элемента списка
    Tovar *p = beg;
    if (beg){
        while (p->next) p = p->next;
        p->next = add_beg(n, i, pr, a, c);
    }
    else beg = add_beg(n, i, pr, a, c);
}
 
 
 
//Добавление элемента при чтении из файла
void add_f(char n[l_name], int i, int pr, int a, int c ){
    //Добавление элемента списка, передача входных данных и определение позиции
    Tovar *p = beg;
    if (beg){
        while (p->next) p = p->next;
        p->next = add_beg(n, i, pr, a, c);
    }
    else beg = add_beg(n, i, pr, a, c);
}
//Работа с файлом
int work_dbase(char *fmode){    
    Tovar *p;
    FILE* fp=fopen(fname, fmode);
    if(!fp) return 0;
    if (fmode[0]=='w') {
        p = beg;
        while(p) {
            fwrite(p,sz,1,fp);
            p = p->next;
        }
    }
    else if  (fmode[0] == 'r')
        {
               p=new Tovar;
               while ( fread(p,sz,1,fp) )
                   add_f(p->name, p->id, p->price, p->amount, p->cost);
               delete p;
   }
    fclose(fp);
    return 1;
}
 
// Вывод на экран
void print(){
    Tovar* p = beg;
    int n = 0;
    puts("number    name    id  price   amount  cost");
    while(p){
        n++;
        printf("%d  %s  %d  %d  %d  %d\n", n,  p->name, p->id, p->price, p->amount, p->cost);
        p = p->next;
    }
}
//Удаление
void del(){
    Tovar *p;
    int c;
 
    printf("Which element you want to delete (1...)?\n");
    scanf("%d",&c);
    if(c < 1) return;
    p = beg;
    for(int i = 1;i < c && p; i++) p = p->next;
    if(!p) return;
    
    Tovar *del_elem = p;
 
    if (del_elem != beg) {
    p = beg;
    while (p->next != del_elem) p = p->next;
    p->next = del_elem->next;
    } 
    else beg = beg->next;
 
    delete del_elem;
}
//Вспомогательная функция поиска (по имени)
void find_name(){
    Tovar *p;
    p = beg;
    char s[l_name];
    int n = 0, m = 1;
    
    printf("Enter name\n"); scanf("%s", &s);
    system("cls");
    do{
        n++;
        if(p){
            if(strcmp(s, p->name) == 0){
                printf("Number of tovar - %d", &n);
                m = 0;
            }
            else p = p->next;
        }
        else{
            puts("Search failed");
            m = 0;
        }
    }while(m);
}
//Вспомогательная функция поиска (по id)
void find_id(){
    Tovar *p;
    p = beg;
    int n = 0, m = 1, i;
 
    printf("Enter id\n"); scanf("%d", &i);
    system("cls");
    do{
        n++;
        if(p){
            if(p->id == i){
            printf("Number of tovar - %d\n", n);
            m = 0;
            }
            else p = p->next;
        }
        else{
            puts("Search failed");
            m = 0;
        }
    }while(m);
_getch();
}
 
//Поиск
void find(){
    int o;
 
    printf("Search name - 1\nSearch id - 2\n");scanf("%d", &o);
    switch(o){
        case 1: find_name(); break;
        case 2: find_id();   break;
        default: puts("number from 1 to 2");
    }
}
 
//Редактирование записи
void edit(){
    Tovar *p;
    p = beg;
    int n = 0,
        e = 0,
        i = 0,
        o = 0,
        m;
    
    puts("Which element you want ot edit? (Enter number)");
    scanf("%d", &e);
    
    if(e < 1) return;
    for(int i = 1;i < c && p; i++) p = p->next;
    if(!p) return;
 
    system("cls");
    printf("Enter new information - 1\nCancel - 0\n"); scanf("%d", &o);
    if(o){
        system("cls");
        do{
            printf("What you want to edit?\nid - 1\nprice - 2\namount - 3\ncancel - 4\n"); scanf("%d", &o); 
            switch(o){
                case 1:{
                        printf("Enter new id\n"); scanf("%d", &e);
                        p->id = e;
                }break;
                case 2:{
                        printf("Enter new price\n"); scanf("%d", &e);
                        p->price = e;
                        p->cost = e * p->amount;
                }break;
                case 3:{
                        printf("Enter new amount\n"); scanf("%d", &e);
                        p->amount = e;
                        p->cost = e * p->price;
                }break;
                case 4:{
                    o = 0;
                }break;
            }
        }while(o);
        system("cls");
    }
}
 
//Очистка списка
void clean(){
    Tovar *p;
    while(beg){
        p = beg;
        beg = beg->next;
        delete p;
     }
}
//Главная функция
int main(){
    work_dbase("rb");
    while(true){
        switch(menu()) {
            case 1: {system("cls");add();}              break;
            case 2: {system("cls");del();}              break;
            case 3: {system("cls");edit();}             break;
            case 4: {system("cls");find();}             break;
            case 5: {system("cls");print();}            break;
            case 6: {system("cls");clean();}            break;
            case 7: {system("cls");work_dbase("wb"); clean(); return 0;}
            default: puts("Number from 1 to 7");            break;
            }
        }
    return 0;
}
Yandex
Объявления
20.06.2010, 12:43     список
Ответ Создать тему
Опции темы

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