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

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

Войти
Регистрация
Восстановить пароль
 
KatrinSH
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 6
#1

Линейный список (создать, удалить элемент, добавить элемент, вывести всё эементы) - C++

17.04.2013, 22:52. Просмотров 307. Ответов 0
Метки нет (Все метки)

в общем, передо мной стоит задача создать линейный список(в этом линейном списке у меня хранится фамилия человека, год, в котором он родился и его знак зодиака). в этом линейном списке нужно удалить элемент, добавить элемент, вывести всё эементы из исходного файла на экран. всё практически вышло, вот только когда вывожу все лементы моего списка на экран, то каждый раз после "имя дата знак зодиака" выводятся ещё какие-то цифры, не знаю как эти цифры убрать. если поможете, буду очень признательна


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
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
 
using namespace std;
 
const int d_name = 30;
            struct znak {
            char name [d_name];
            int birth_day;
            char zodiak[19];
            znak *next;
            };
 
            void get_name (char* name) // ------------------------------------------------------------------ запрос фамилии и знака зодиака
        {
            puts ("vveditee F.I.O\n"); gets(name);
        }
 
        void get_name2 (char* zodiak)
        {
            puts ("vvedite znak zodiaka\n");gets(zodiak);
        }
znak* add(znak *beg, const znak &Znak);
int edit (znak *beg);
znak* find (znak* beg, char *name, znak *& prev);
void find1 (znak* beg, int birth_day);
void find2 (znak * beg, char zodiak);
void find_Znak(znak *beg);
void get_name (char *name);
 int menu ();
 void print_dbase(znak *beg);
 znak* read_dbase(char* filename);
 znak read_znak();
 znak* remove(znak *beg);
 int write_dbase (char *filename, znak *beg );
 
 
    znak* find (znak* pv, char* name, znak *& prev) //----------------------------------------------------поиск человека по имени и фамилии
    {
        prev=0;
        while (pv)
        {
            if (strstr(pv->name,name))
            if (pv->name [strlen(name)]==' ')
            {
                printf ("%s%i%s\n",pv->name, pv->birth_day,pv->zodiak);
                return pv;
            }
                prev=pv;
                pv=pv->next;
        }
            puts ("takoo cheloveka net\n");
            return 0;
        }
znak* add( znak *beg, const znak &Znak )//------------------------------------------------------------------добавление сотрудника
{
    znak* pv = new znak;
    *pv=Znak;
    pv->next=0;
    if (beg)
    {
        znak* temp=beg;
        while( temp->next)
        temp=temp->next;
        temp->next=pv;
    }
    else beg=pv;
    return beg;
    }
void find_Znak(znak* beg)//---------------------------------------------------------------------------------------------поиск
{
    char* buf=new char[d_name];
    int option;
    znak *prev=0, *pv=0;
    do  {
        puts("1 - poisk proisvoditsya po familii \n 2 - otmena");
        gets(buf);
        }
        while (!(option=atoi(buf)));
        switch(option)
        {
         case 1: get_name(buf);
         pv=find(beg,buf,prev);break;
         case 2: return ;
         default: puts("nevernyi rezhim \n");
         }
        }
     int menu () // ------------------------------------------------------------------------------ вывод меню
        {
            char buf[10];
            int option;
            do
            {
                puts("=========================");
                puts(" 1 - dobavlenie cheloveka;\n 2 - udalenie cheloveka;");
                puts(" 3 - poisk cheloveka;\n 4 - vyvod na ekran;");
                puts(" 5 - vivod basy v fail;\n 6 - vyhod\n");
                gets(buf);
                option=atoi(buf);
            } while (!option);
            return option;
        }
         void print_dbase(znak* beg)//-------------------------------------------------------------------вывод базы на экран
         {
             znak* pv=beg;
             while(pv)
             {
                 printf ("%s%i%s\n",pv->name,pv->birth_day,pv->zodiak);
                 pv=pv->next;
             }
         }
       znak* read_dbase(char* filename) //---------------------------------------------------------------чтение базы из файла
        {
            FILE* fin;
            znak Znak,*beg=0;
            if((fin=fopen(filename,"r"))==0)
            {
                printf("net fayla %s \n",filename );
                return NULL;
            }
 
            while(!feof(fin))
            {
                fgets(Znak.name,d_name,fin);
                fscanf(fin,"%i%s\n",&Znak.birth_day,&Znak.zodiak);
                beg=add(beg,Znak);
            }
 
            fclose(fin);
            return beg;
 
        }
 
        znak read_Znak() //-----------------------------------------------------------------------------ввод информации о новом человеке
        {
            znak Znak; char buf [80];
            get_name(Znak.name);
            for (int i=strlen(Znak.name);i<d_name;i++)
            Znak.name[i]=' ';
            Znak.name[d_name-1]='\0';
 
            do
            {
                puts ("vvedi god");
                gets(buf);
            }
           while (!(Znak.birth_day=atoi(buf)));
 
           get_name2(Znak.zodiak);
          for (int i=strlen(Znak.zodiak);i<19;i++)
            Znak.zodiak[i]=' ';
            Znak.zodiak[18]='\0';
            return Znak;
        }
                znak* remove (znak* beg) //----------------------------------------------------------------------------удаление сотрудника
                {
                    char name[d_name];
                    get_name(name);
                    znak* prev;
                    znak* pv =find(beg,name,prev);
                    if (pv)
                    {
                        if(pv==beg) beg=beg->next;
                        else prev->next=pv->next;
                        delete pv;
                    }
                    return beg;
                    }
 
                    int write_dbase(char *filename,znak *pv)// -------------------------------------------------------- вывод базы в файл
                    {
                            FILE *fout;
                            if((fout=fopen(filename,"w"))==NULL)
                            {
                                puts("oshibka otkrytia faila \n"); return 1;
                            }
 
                            while(pv)
                            {
                                fprintf(fout,"%s%5i%19s\n",pv->name,pv->birth_day,pv->zodiak);
                                pv=pv->next;
                            }
                            fclose (fout);
   return 0; }
int main()
{
    znak *beg=read_dbase("f.txt");
    if (!beg) return 1;
    while (true)
    {
        switch (menu())
        {
            case 1: add(beg, read_Znak()); break;
            case 2: beg = remove (beg); break;
            case 3: find_Znak(beg); break;
            case 4:  print_dbase(beg); break;
            case 5:write_dbase("f.txt",beg); break;
            case 6: return 0;
            default: puts("Nado vstavit' chislo ot 1 do 6"); break;
                    }
    }}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 22:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Линейный список (создать, удалить элемент, добавить элемент, вывести всё эементы) (C++):

Двусвязный список - Добавить элемент после заданного, удалить заданный элемент - C++
Реализуйте списочную структуру в виде класса. работа состоит из двух частей: из класса (структуры, алгоритма) и из тестирующего кода. ...

Динамический двусвязный список (операции: добавить элемент после данного, удалить данный элемент …) - C++
реализовать Динамический двусвязный список (операции: добавить элемент после данного, удалить данный элемент …). используя: class List...

Сформировать двунаправленный список. Удалить из него элемент с заданным ключом, добавить элемент с указанным номером - C++
Записи в линейном списке содержат ключевое поле типа *char(строка символов). Сформировать двунаправленный список. Удалить из него элемент с...

Список: создать два списка, заполнить вручную с клавиатуры, удалить и добавить элемент - C++
Нужно создать оба списка, заполнить вручную с клавиатуры, удалить и добавить элемент, поменять любые два элемента с помощью функции swap....

Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство - C++
Помогите. Есть одна написанная. Условия: Очередь. Операции: “+” добавить элемент ; “-“ удалить элемент ; bool() проверка «Пуста...

Создать список, ввести элемент и добавить этот элемент в начало списка - C++
создать список,ввести элемент и добавить этот элемент в начало списка

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 22:52
Привет! Вот еще темы с ответами:

Работа с бинарным деревом: добавить элемент, удалить элемент, вывести в виде "дерева" - C++
Создать программу для работы с бинарным деревом, реализующую функции: добавить элемент, удалить элемент, вывести в виде «дерева». В C++ ...

Односвязный список добавить и удалить элемент - C++
Удаление элемента происходит правильно а вот с добавлением чтото не то.....вроде вставляет в конец списка но не то...... и как сделать так...

Создать очередь. Добавить элемент в очередь. Удалить элемент из очереди - C++
Нужно создать очередь. Добавить элемент в очередь. Удалить элемент из очереди. Вот моё &quot;творение&quot;. int main() { int...

Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент - C++
Структура &quot;Информация&quot;: - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить...


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

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

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