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

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

Восстановить пароль Регистрация
 
KatrinSH
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 6
17.04.2013, 22:52     Линейный список (создать, удалить элемент, добавить элемент, вывести всё эементы) #1
в общем, передо мной стоит задача создать линейный список(в этом линейном списке у меня хранится фамилия человека, год, в котором он родился и его знак зодиака). в этом линейном списке нужно удалить элемент, добавить элемент, вывести всё эементы из исходного файла на экран. всё практически вышло, вот только когда вывожу все лементы моего списка на экран, то каждый раз после "имя дата знак зодиака" выводятся ещё какие-то цифры, не знаю как эти цифры убрать. если поможете, буду очень признательна


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++ программа для работы с бинарным деревом, реализующую функции: добавить элемент, удалить элемент, вывести в виде «дерева».В C++
C++ Однонаправленный список. Операции: удалить элемент из заданной позиции, добавить элемент в заданную позицию,проверка на неравенство
Структура "Информация": - носитель; - объем; - название; - автор. Удалить первый элемент с заданным объемом информации, добавить элемент перед элемент C++
C++ Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
Сформировать двунаправленный список. Удалить из него элемент с заданным ключом, добавить элемент с указанным номером C++

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

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

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