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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.74
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
#1

Двусвязный список структур - C++

04.06.2009, 17:12. Просмотров 3011. Ответов 21
Метки нет (Все метки)

Написал программу,а она не запускается. И ошибок не выдает. Подскажите пожайлуста что не так сделал.

Разработать программу для создания и работы с двусвязным списком, состоящим из структур. Для работы со списком создать меню со следующими пунктами:

1. Создание списка.
2. Просмотр списка.
3. Добавление в конец списка новой структуры.
4. удаление записи.
5. Выход.
Структура содержит название, цену, количество товара. Удалить из списка заданный товар.


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<string.h>
#include<conio.h>
#include<io.h>
struct tov{
   char nazvanie[10];
   float cena;
   int kol;
   tov * nextElement;
   tov * lastElement;
};
//=======================================
    tov * firstElement,   //первый
         * endElement,     //последний
         * currentElement, //текущий
         * nextElement,    //следующий
         * lastElement,    //предыдущий
         * tempElement;
    int allElement=0;
    FILE *save; 
//=======================================
    void Menu(void);
    void sozdanie_SP(void);
    void prosmotr_SP();
    void dobavlenie_SP();
    void udalenie_EL();
 
int main(){
    firstElement=0;
    endElement=0;
    Menu();
    getche();
    return 0;
 } 
 //===================  для ввода данных ===================
void enterElement(tov * element){ 
    printf(" vvedite nazvanie tovara  : ");
    scanf("%s",&element->nazvanie);
    printf(" vvedite cenu tovara  : ");
    scanf("%f",&element->cena);
    printf(" vvedite kolichestvo tovara  : ");
    scanf("%d",&element->kol);
    }
void sozdanie_SP(void){
    tov * newElement;     //новый
    do{
        allElement++;
        newElement = new tov;
        enterElement(newElement);
        if (firstElement!=0){
                newElement->nextElement=firstElement;
                firstElement->lastElement=newElement;
                firstElement=newElement;
            } else firstElement=endElement=newElement;
    }while(getche()!=27);
    newElement->lastElement=endElement;
    endElement->nextElement=newElement;
    Menu();
 }  
 //============================== Удаление одной записи ===================================
void udalenie_EL(tov * delRec){
    delRec->lastElement->nextElement=delRec->nextElement;
    delRec->nextElement->lastElement=delRec->lastElement;
    delete delRec;
}
 //============================== Добавление записи ===================================
void dobavlenie_SP(tov * lastRec, tov * nextRec){
    tov *tempLast=lastRec;
    tov *tempNext=nextRec;
    do{
        
        allElement++;
        tov * newElement;
        newElement = new tov;
        enterElement(newElement);
        newElement->lastElement=lastRec;
        newElement->nextElement=nextRec;
        lastRec->nextElement=newElement;
        nextRec->lastElement=newElement;
        lastRec=newElement;
    }while(getche()!=27);
 
} 
//============================== Создание меню ===================================
void Menu(void) {
 
    
    printf(" MENU \n");
 
    printf(" F1 - VVEDITE NAZVANIE TOVARA                \n");
    printf(" F2 - PROSMOTR                               \n");
    printf(" F3 - DOBAVLENIE                             \n");
    printf(" Del - UDALENIE                              \n");
    printf(" Esc - VYHOD                                 \n");
    switch (getch()){
        case 59: sozdanie_SP();break;
        case 60: prosmotr_SP();break;
        case 61: prosmotr_SP();break;
        case 62: dobavlenie_SP();break;
        case 63: udalenie_EL();break;
        case 27: break;
        default: Menu();
        
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2009, 17:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Двусвязный список структур (C++):

Двусвязный список из структур - C++
Ребят, помогите, а то не могу пример откопилировать... typedef struct tag_lib { //задается таблица с данными в...

Переделать двусвязный список в двусвязный кольцевой - C++
Здравствуйте, у меня єсть двусвязный список однако он не кольцевой! как это запрограммировать? и второй вопрос как обеспечить вставку...

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

Двусвязный список (в конец двусвязного списка добавить другой список) - C++
здравствуйте, подскажите пожалуйста, как в конец двусвязного списка добавить другой список?

Составить двусвязный список на основе класса, объекты которого будут формировать этот список - C++
Составить двусвязный список на основе класса, объекты которого будут формировать этот список. В описание класса должны входить данные для...

Создать двусвязный список групп факультета, где каждая группа представляет собой односвязный список студентов - C++
Задание: создайте двусвязный список групп факультета. Каждая группа представляет собой односвязный список студентов. Помогите пожалуйста,...

21
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
04.06.2009, 17:36 #2
Почти вске функции принимают параметры... а вызываешь их без параметров:
C++
1
2
3
4
5
6
7
8
9
10
switch (getch()){
                case 59: sozdanie_SP();break;
                case 60: prosmotr_SP();break;
                case 61: prosmotr_SP();break;
                case 62: dobavlenie_SP();break;
                case 63: udalenie_EL();break;
                case 27: break;
                default: Menu();
                
        }
1
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 12:24  [ТС] #3
Выбираю ввод списка,ввожу данные,а просмотр показывает,что ничего не ввел.
Может ввод списка не работает? Подскажите.

Код
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <alloc.h>

struct Item
{
    char itsName[10];
    int itsPrice;
    int itsCount;
    Item* itsNext;
    Item* itsPrev;
};

struct List
{
    Item* itsFirst;
  Item* itsLast;
};

void menu();
void AddItem(List&);
void DeleteItem(List&);
void PrintList(List&);
void CreateList (List*&);
List* theList = 0;

int main()

{
List* itsFirst=0;
List* itsLast=0;
   menu();
   getche();
   return 0;
}

void menu()
{
    bool quit = false;
    while (true)
    {
    int choice;
    printf("\n ******* MENU *********** \n" );
    printf("(1) vvedite spisok \n" );
    printf( "(2) prosmotr \n");
    printf("(3) dobavlenie \n");
    printf("(4) udalenie \n");
    printf("(5) vyhod \n" );
    
    scanf("%d",&choice);
  
    switch (choice)
    {
    case(1):
        if (!theList)
        {
             CreateList (theList);
            theList->itsFirst = 0;
            theList->itsLast = 0;
            printf(" the List has been created succesfully... \n");
        }
        else
            printf(" the List is already created...\n" );
        break;
    case(2):
        if (theList)
            PrintList(*theList);
        else
            printf(" the List is not created...\n");
        break;
    case(3):
        if (theList)
            AddItem(*theList);
        else
            printf(" the List is not created...\n");
        break;
    case 4:
        if (theList)
            DeleteItem(*theList);
        else
            printf(" the List is not created... \n");
        break;
    case(5):
        quit = true;
    }
    if (quit == true)
        break;
    }
}


void AddItem(List& theList)
{
    printf("\n *** dobavit' novuy tovar *** \n");
    printf(" vvedite nazvanie: ");
    Item* newItem = new Item;
    scanf("%s",&newItem->itsName);
    printf(" vvedite cenu: ");
    scanf("%f",&newItem->itsPrice);
    printf(" vvedite kolichestvo: ");
    scanf("%d",&newItem->itsCount);
    if (theList.itsLast)
    {
        theList.itsLast->itsNext = newItem;
        newItem->itsPrev = theList.itsLast;
    }
    else
    {
        theList.itsFirst = newItem;
        newItem->itsPrev = 0;
    }
    theList.itsLast = newItem;
    newItem->itsNext = 0;
    printf("*** item was added successfully *** \n");
}
void CreateList (List*&)
{ Item* pList,* p;
Item* itsFirst;
Item* itsLast;
    pList = NULL;
    do {p=(Item*)malloc(sizeof(Item));
  printf( "*** vvedite tovar *** \n");
  printf(" vvedite nazvanie: ");
    Item* newItem = new Item;
   scanf("%s", newItem->itsName);
  printf( " vvedite cenu: " );
  scanf("%f", &newItem->itsPrice);
  printf(" vvedite kolichestvo: ");
    scanf( "%d",&newItem->itsCount);
    p->itsPrev=pList;
    if (pList != NULL)
    pList->itsNext=p;
    else
    itsFirst=p;
    pList=p;
    puts(" Zakonchit' - <esc>");
    }
 while (getch()!=27);
    itsLast=p;
    itsLast->itsNext=NULL;
    }
void PrintList(List& theList)
{
    printf("\n *** prosmotr spiska *** \n");
    Item* curItem = theList.itsFirst;
    while (curItem)
    {
        printf("%s\n",curItem->itsName);
        printf("%f\n",&curItem->itsPrice);
        printf("%d\n",&curItem->itsCount);
        curItem = curItem->itsNext;
    }
    printf("\n *** end *** \n" );
}

void DeleteItem(List& theList)
{
    Item* curItem = theList.itsFirst;
    int Pos;
    printf( " Enter the position of deleted item: \n");
    scanf("%d",Pos);
    printf("%d",Pos);
    for (int i=0; i<Pos ; i++) 
    {
        if (curItem)
            curItem = curItem->itsNext;
    }
    if (curItem && (Pos >= 0))
    {
        if (curItem->itsPrev)
        {
            curItem->itsPrev->itsNext = curItem->itsNext;
        }
        else
        {
            theList.itsFirst = curItem->itsNext;
        }
        if (curItem->itsNext)
        {
            curItem->itsNext->itsPrev = curItem->itsPrev;
        }
        else
        {
            theList.itsLast = curItem->itsPrev;
        }
        delete curItem;
        printf("Item № ", Pos ," has been deleted successfully..." ); 
    }
    else
        printf("Item № ", Pos , " not found..." );

}
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
06.06.2009, 13:42 #4
C++
1
void CreateList (List*&)
что это? как в функцию передается параметр????? и зачем это:
C++
1
CreateList (theList);
если с theList ничего не делается?
1
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 13:58  [ТС] #5
Он мне ошибку выдает тогда // #include "backward_warning.h"
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
06.06.2009, 14:19 #6
А что это за файл backward_warning.h ? Подключаешь его где то?
0
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 14:26  [ТС] #7
Я не знаю что это за файл.Как его подключить.Он пишет...
46 C:\Dev-Cpp\Dev-Cpp\include\c++\backward\alloc.h
In file included from C:/Dev-Cpp/Dev-Cpp/include/c++/backward/alloc.h
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
06.06.2009, 14:30 #8
C++
1
#include <alloc.h>
поменяй на
C++
1
#include <malloc.h>
1
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 14:37  [ТС] #9
Пасибо,теперь ему это ненравиться Item* pList,* p;
это после void CreateList (List*&)
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
06.06.2009, 15:01 #10
А ошибки какие говорит?
0
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 15:02  [ТС] #11
118 C:\Dev-Cpp\Dev-Cpp\KP4.cpp
variable or field `CreateList' declared void
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
06.06.2009, 15:13 #12
C++
1
CreateList (List*&)
переменную не передаешь?
0
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 15:16  [ТС] #13
118 C:\Dev-Cpp\Dev-Cpp\KP4.cpp
variable or field `CreateList' declared void
0
FunDuck
688 / 379 / 4
Регистрация: 22.01.2009
Сообщений: 1,135
06.06.2009, 15:17 #14
C++
1
CreateList (List*& theList)
может все таки так лучше?
0
AI\EKCAH^P
105 / 102 / 20
Регистрация: 18.05.2009
Сообщений: 201
06.06.2009, 15:19  [ТС] #15
Спасибо друг! Информация вводится. Только теперь просмотрр и добавление не работает.(
0
06.06.2009, 15:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2009, 15:19
Привет! Вот еще темы с ответами:

Двусвязный список - C++
Здравствуйте, никак не могу разобраться с двусвязным списком, нашел код для разбора в интернете, но не могу понять, что необходимо писать...

Двусвязный список - C++
Подскажите в чем ошибка, почему не выводит элементы списка в обратном порядке (выводит только один элемент) #include &lt;fstream&gt; ...

Двусвязный список - C++
Привет, народ. Помогите плиз найти ошибку. #include &quot;iostream&quot; #include &quot;cmath&quot; using namespace std; struct elem { int...

Двусвязный список - C++
Вот решил написать двусвязный список. Написаны только две функции решил попробовать работает или нет, оказалось, что нет. Компилятор...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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