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

C++, Помочь разобраться в готовом коде - C++

Восстановить пароль Регистрация
 
Sincendia
Сообщений: n/a
08.01.2010, 03:53     C++, Помочь разобраться в готовом коде #1
Здравствуйте, я заказала по интернету код программы для решения следующей задачи:
В задании курсового проекта необходимо создать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения включают:
• Номер УДК
• Фамилию и инициалы автора
• Название книги
• Год издания
• Количество экземпляров
Программа должна обеспечивать:
• Начальное формирование данных обо всех книгах в библиотеке в виде двоичного дерева
• Добавление данных о книгах, вновь поступающих в библиотеку
• Удаление данных о списанных книгах
• По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам
У меня уже есть готовый код, но некоторые вещи мне в нем непонятны (мне нужно делать структурные схемы алгоритмов). Пожалуйста, помогите перевести код с С++ на русский язык или хотя бы сделать его схему) Особенно интересно понять для чего нужны все функции, использованные в программе (incer, printT...) и как они работают. Вот собственно код:
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
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <alloc.h>
//using namespace std;
 
struct node{
    int udk;
    char fio[25];
    char naz[25];
    int god;
    int kol;
    node *l,*r;
};
 
node *first(int udk,char fio[25],char naz[25],int god,int kol);
void printT(node *root,int l);
void incer(node **root, int udk,char fio[25],char naz[25],int god,int kol);
void printT(node *root);
node *delet(node *root,int udk,char fio[25],char naz[25],int god,int kol);
void delall(node **root);
int main(){
    //a) Начальное формирование данных обо всех книгах в виде двоичного дерева
    node *root=first(123,"Petrov I. G","cxemotexnika",2000,55);
    char c;
    int udk;
    char fio[25];
    char naz[25];
    int god;
    int kol;
    incer(&root,123,"Petrov I. G.","cxemotexnika",2000,5);
    incer(&root,125,"Ivanov D. A.","CeTu komp",1999,20);
    incer(&root,127,"Sidorov A.L.","zashita inf",1998,33);
    incer(&root,56,"Ivanov D. A","matan vish",2003,56);
    incer(&root,57,"Ivanov T. H.","algebra i GAG",1998,7);
    incer(&root,128,"Kyzmeko E.P.","komp. grafika",2000,40);
    incer(&root,134,"Petrov I. G","cxemotexnika",2000,210);
llp:cout<<"vivod vvide dereva: "<<endl;
    cout<<endl;
    printT(root,0);
    cout<<endl;
    cout<<"vivod otsortirovannogo po godu: "<<endl;
    cout<<endl;
    cout<<"UDK"<<"\t"<<"FIO\t"<<"\t"<<"NAZVANIE"<<"\t"<<"GOD"<<"\t"<<"KOLICHESTVO"<<endl;
    printT(root);
    cout<<endl;
lop:cout<<"vvedi nomer punkta menu i nazhmi <ENTER>: "<<endl<<
        "\t1 - dobavit' knigu"<<endl<<
        "\t2 - cpisat'knigu"<<endl<<
        "\t3 - vivod knig,uporyadochennih po godam"<<endl<<
        "\t4 - y9aJIeHue 9epeBa"<<endl<<
        "\t5 - vihod iz programmi"<<endl;
    cin>>c;
    switch(c){
        case '1':
            //б) Добавление данных о книгах, вновь поступивших в библиотеку
            cout<<"UDK :";cin>>udk;cin.get();
            cout<<"FIO :";cin.getline(fio,255);
            cout<<"NAZVANIE :";cin.getline(naz,255);
            cout<<"GOD :";cin>>god;
            cout<<"KOLICHESTVO :";cin>>kol;
            incer(&root,udk,fio,naz,god,kol);
        goto lop;
        case '2':
            //в) Удаление данных о списанных книгах
            cout<<"UDK :";cin>>udk; cin.get();
            cout<<"FIO :";cin.getline(fio,255);
            cout<<"NAZVANIE :";cin.getline(naz,255);
            cout<<"GOD :";cin>>god;
            cout<<"KOLICHESTVO :";cin>>kol;
            delet(root,udk,fio,naz,god,kol);
        goto lop;
        case '3':
        //г) По запросу выдаются сведения о наличии книг в библиотеке, упорядоченные по годам
        goto llp;
        case '4':
            delall(&root);
        goto lop;
        case '5':
        break;
    }
    return 0;
}
node *first(int udk,char fio[25],char naz[25],int god,int kol){
    node *pv=new node;
    pv->udk=udk;
    strcpy(pv->fio,fio);
    strcpy(pv->naz,naz);
    pv->god=god;
    pv->kol=kol;
    pv->l=pv->r=0;
    return pv;
}
void printT(node *p,int level){
    if(p){
        printT(p->l,level+1);
        for(int i=0;i<level;i++)
            cout<<"\t";
        cout<<p->udk<<" - "<<p->fio<<" - "<<p->naz<<" - "<<p->god<<" - "<<p->kol<<endl;
        printT(p->r,level+1);
    }
}
void printT(node *p){
    if(p){
        printT(p->l);
        //cout<<p->udk<<"\t"<<p->fio<<"\t"<<p->naz<<"\t"<<p->god<<"\t"<<p->kol<<endl;
        printf("%3i\t", p->udk);
        printf("%8s\t", p->fio);
        printf("%8s\t", p->naz);
        printf("%4i\t", p->god);
        printf("%4i\t", p->kol);
        printf("\n");
        printT(p->r);
    }
}
void incer(node **pv, int udk,char fio[25],char naz[25],int god,int kol){
    if(!(*pv)){
        node *pnew=new node;
        pnew->udk=udk;
        strcpy(pnew->fio,fio);
        strcpy(pnew->naz,naz);
        pnew->god=god;
        pnew->kol=kol;
        pnew->l=pnew->r=0;
        (*pv)=pnew;
    }
    else if(udk==(*pv)->udk&&!strcmp(fio,(*pv)->fio)&&!strcmp((*pv)->naz,naz)&&god==(*pv)->god)
        (*pv)->kol+=kol;
    else if((*pv)->god > god)
        incer(&((*pv)->l),udk,fio,naz,god,kol);
    else
        incer(&((*pv)->r),udk,fio,naz,god,kol);
}
node *delet(node *root,int udk,char fio[25],char naz[25],int god,int kol){
    node *P=new node, *v=new node;
    if (!root) 
        cout << "net takou knigi" << endl;
    else if(udk==root->udk&&!strcmp(fio,root->fio)&&!strcmp(root->naz,naz)&&god==root->god){
        if(kol>=root->kol){
            if (!root->r) 
                root = root->l; 
            else 
                if (!root->l) root = root->r; 
                else{
                    v = root->l;
                    while (v->r->r) 
                        v=v->r; 
                    root->udk=v->r->udk;
                    strcpy(root->fio,v->r->fio);
                    strcpy(root->naz,v->r->naz);
                    root->god=v->r->god;
                    root->kol=v->r->kol;
                    P = v->r; v->r = v->r->l;
                }
            free(P);
        }
        else
            root->kol-=kol;
    }
    else if (god < root->god) root->l = delet(root->l,udk,fio,naz,god,kol);
    else if (god >= root->god) root->r = delet(root->r,udk,fio,naz,god,kol);
    return root;
}
void delall(node **p){
    if (!(*p)) return;
    delall(&((*p)->l));
    (*p)->l = NULL;
    delall(&((*p)->r));
    (*p)->r = NULL;
    (*p)=0;
}
Добавлено через 2 минуты
А тот мальчик, который мне это вс прислал не отвечает, я думала сама разберусь, но не смогла. Я плохо понимаю синтаксис языка и сам принцип построения структуры дерева
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2010, 03:53     C++, Помочь разобраться в готовом коде
Посмотрите здесь:

Помогите разобраться в готовом листинге... C++
Хотел бы попросить помочь разобраться в куске кода C++
пмг разобраться в коде C++
C++ Написать функцию вставки элемента в массив. Помочь разобраться
Помочь разобраться с программой. Написать функцию вставки элемента в массив C++
Разобраться в коде C++
Работа с файловыми потоками. Выполнить проверку в готовом коде на верхний регистр C++
Помогите разобраться в коде C++

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

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

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