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

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

Войти
Регистрация
Восстановить пароль
 
KeyGen
383 / 290 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
#1

Прокомментируйте код. - C++

30.10.2011, 00:04. Просмотров 353. Ответов 3
Метки нет (Все метки)

Программа записывает количество учеников по классам. И самих учеников. Изменяет данные учеников.
И осуществляет доступ к информации о учениках.
Программа работает. Прокомментируйте код пожалуйста.
lib.h
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
using std::string;
 
#ifndef LIB_H_
#define LIB_H_
 
class Pupil
{
private:
        
        string Name;                //Имя
        string Patronymic_name;     //Отчество
        string Surname;             //Фамилия
        int School_class;           //Класс
        int Year_of_the_birth;      //Год рождения
        int Year_of_the_arrival;    //Год прибытия
        int Annual_estimations[10]; //Годовые оценки
        double Average;             //Средние
        
public:
       
       void Func_Install(const int mass[],
             const string Name2, 
             const string Patronymic_name2, 
             const string Surname2,
             const int Year_of_the_birth2, 
             const int Year_of_the_arrival2); //Установка значений
             
       ~Pupil();       
       
       void Show_Pupil(); //Показ ученика
       
       void Function_Average(); //Вычисление среднего, установка класса
       
       int Function_Comparison(string a); //Доступ к фамилии учеников
       
};
 
Pupil** Funk_class(int mass[]); // Установка размеров классов создание диномического массива классов
 
char Funk_menu_show(); //Вывод меню
 
void Funk_pupil(Pupil**); // ввод данных учеников
 
void Access_pupil(int mass[],Pupil **pp); //Отображение данных учеников, классов
 
void Funk_Mod(int mass[],Pupil **pp); //Изменение данных
 
#endif
file1
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
#include "lib.h"
 
extern int G_o_d;
 
extern const char *lessons[10];
 
Pupil::~Pupil(){}
 
void Pupil::Func_Install(const int mass[],
             const string Name2, 
             const string Patronymic_name2, 
             const string Surname2,
             const int Year_of_the_birth2, 
             const int Year_of_the_arrival2){
                   
                   Name=Name2;
                   Patronymic_name=Patronymic_name2;
                   Surname=Surname2;
                   Year_of_the_birth=Year_of_the_birth2;      
                   Year_of_the_arrival=Year_of_the_arrival2;
                   
                   for(int i=0; i<10; i++) Annual_estimations[i]=mass[i];
                   
                   Function_Average();
                   
                   }
 
void Pupil::Show_Pupil(){
     
     
     cout << "\nКласс: " << School_class
          << "\nИмя: " << Name 
          << "\nОтчество: " << Patronymic_name 
          << "\nФамилия: " << Surname 
          << "\nВозраст: " << G_o_d-Year_of_the_birth;
          cout << "\n\nОценки по предметам:\n\n";
          for(int i=0; i<10; i++)
          cout << "Оценка по " << lessons[i] << ": " << Annual_estimations[i] << endl;
          
          cout << "\nСредняя оценка: " << Average << endl;
          
     
     }
 
void Pupil::Function_Average(){
             double temp=0.0;
             for(int i=0; i<10; i++)
             temp+=Annual_estimations[i];
             Average=temp/10;
             
             School_class=G_o_d-Year_of_the_arrival;
             }
             
int Pupil::Function_Comparison(string a){
    
    if(a==Surname)
    return 1;
    else
    return 0;
}
file2
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
#include "lib.h"
 
int G_o_d=2011;
 
int j0=0,j1=0,j2=0,j3=0,j4=0,j5=0,j6=0,j7=0,j8=0,j9=0;
 
Pupil** Funk_class(int mass[]){
     
     cout << "Всего 10 классов.\n";
     for (int i=0; i<10; i++){
     cout << "Введите размер " << i+1 << " класса: ";
     cin >> mass[i];
     }
     
    Pupil **Dik=new Pupil*[10];
    for(int i=0; i<10; i++) Dik[i]=new Pupil[mass[i]];
     
     return Dik;
     }
     
char Funk_menu_show(){
     char menu_show;
     
     cout << "Меню (введите соответствующую букву):\n\n";
     cout <<    "\tВвод классов ------------------- A\
               \n\tВвод учеников ------------------ B\
               \n\tИзменения ---------------------- C\
               \n\tДоступ к информации о учиниках - D";
    
    for(int i=0;i<1;i++){
    cout << "\n\tВвод: ";
    cin >> menu_show;
    if(menu_show<'A'||menu_show<'a'&&menu_show>'D'||menu_show>'d')
    {cout << "Ввод неверен!"; i=0;}
    }
    
    return menu_show;
}
 
void Funk_pupil(Pupil**Pup){
     
     extern const char *lessons[10];
                               
     string pupl_name;
     string pupl_patronymic_name;
     string pupl_surname;
     int r,rp;
     int less[10];                     
                          cin.get();
                          cout << "Имя: ";
                          getline(cin,pupl_name);
                          cout << "Отчество: ";
                          getline(cin,pupl_patronymic_name);
                          cout << "Фамилия: ";
                          getline(cin,pupl_surname);
                          cout << "Год рождения: ";
                          cin >> r;
                          cout << "Год поступления: ";
                          cin >> rp;
                          cout << "\nГодовая аттестация\n";
                          for(int i=0; i<10; i++){
                          cout << "Оценка по " << lessons[i] << ": ";
                          cin >> less[i];
                          }
       
       int indef=G_o_d-rp;
       
       switch(indef){
                     case 1:
       Pup[0][j0].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j0++;
                     break;
                     case 2:
       Pup[1][j1].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j1++;
                     break;
                     case 3:
       Pup[2][j2].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j2++;
                     break;
                     case 4:
       Pup[3][j3].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j3++;
                     break;
                     case 5:
       Pup[4][j4].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j4++;
                     break;
                     case 6:
       Pup[5][j5].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j5++;
                     break;
                     case 7:
       Pup[6][j6].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j6++;
                     break;
                     case 8:
       Pup[7][j7].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j7++;
                     break;
                     case 9:
       Pup[8][j8].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j8++;
                     break;
                     case 10:
       Pup[9][j9].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
                     j9++;
                     break;
                     }
}
 
void Access_pupil(int mass[],Pupil **pp){
     
     for(;;){
     system("cls");
     cout << "По фамилии (A), по классу(B), выход(Q): ";
     char menu_access;
     cin>>menu_access;
     cin.get();
     
     if(menu_access=='Q'||menu_access=='q')
     break;
     
     if(menu_access=='A'||menu_access=='a'){
     cout << "Введите фамилию ученика: ";
     string familiy;
     getline(cin,familiy);
     
     for (int i=0; i<10; i++)
         for(int j=0; j<mass[i]; j++)
         if(pp[i][j].Function_Comparison(familiy))
         pp[i][j].Show_Pupil();
         }     
     
     if(menu_access=='B'||menu_access=='b'){
           cout << "Введите класс: ";
           int temp;
           cin >> temp;
           temp-=1;
           for(int i=0; i<mass[temp]; i++)
           pp[temp][i].Show_Pupil();
           }                                
                                            
         
         cout << endl << endl;
         system("pause");
         }
         
}
 
void Funk_Mod(int mass[],Pupil **pp){
     cin.get();
     cout << "Введите Фамилию: ";
     string familiy;
     getline(cin,familiy);
     
     
     int k=0;
     for (int i=0; i<10; i++){
         for(int j=0; j<mass[i]; j++)
         if(pp[i][j].Function_Comparison(familiy))
         {pp[i][j].Show_Pupil(); k=1; break;}
         if(k==1)
         break;
         }
         
     extern const char *lessons[10];
                     
     int i,j;          
     string pupl_name;
     string pupl_patronymic_name;
     string pupl_surname;
     int r,rp;
     int less[10];                     
                          cout << "Имя: ";
                          getline(cin,pupl_name);
                          cout << "Отчество: ";
                          getline(cin,pupl_patronymic_name);
                          cout << "Фамилия: ";
                          getline(cin,pupl_surname);
                          cout << "Год рождения: ";
                          cin >> r;
                          cout << "Год поступления: ";
                          cin >> rp;
                          cout << "\nГодовая аттестация\n";
                          for(int i=0; i<10; i++){
                          cout << "Оценка по " << lessons[i] << ": ";
                          cin >> less[i];
                          }
         
     pp[i][j].Func_Install(less,pupl_name,pupl_patronymic_name,pupl_surname,r,rp);
     
     }
main
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
#include "lib.h"
 
    const char *lessons[10] = {"алгебре",   "геометрии",   "Физике",
                               "химии",     "истории",      "праву",
                               "литературе",    "английскому языку", 
                               "русскому языку", "ураинскому языку"};
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    Pupil **p;
    char menu='y';
    int school_class[11];
    
    int k=0;
    for(;k==0;){
    switch(menu){
                 case 'A':
                 case 'a': system("CLS");
                           cout << "Выход в предыдущее меню(Y), закончить ввод(Q): ";
                           cin >> menu;
                           if(menu=='q'||menu=='Q')
                           break;
                           if(menu=='Y'||menu=='y')
                           break;
                           else
                           p=Funk_class(school_class);
                      break;
                 case 'B':
                 case 'b':system("CLS");
                           cout << "Выход в предыдущее меню(Y), закончить ввод(Q): ";
                           cin >> menu;
                           if(menu=='q'||menu=='Q')
                           break;
                           if(menu=='Y'||menu=='y')
                           break;
                           else
                           Funk_pupil(p);
                      break;
                 case 'C':
                 case 'c':system("CLS");
                          cout << "Выход в предыдущее меню(Y), закончить ввод(Q): ";
                           cin >> menu;
                           if(menu=='q'||menu=='Q')
                           break;
                           if(menu=='Y'||menu=='y')
                           break;
                           else
                           Funk_Mod(school_class,p);
                      break;
                 case 'D':
                 case 'd':system("CLS");
                           cout << "Выход в предыдущее меню(Y), закончить ввод(Q): ";
                           cin >> menu;
                           if(menu=='q'||menu=='Q')
                           break;
                           if(menu=='Y'||menu=='y')
                           break;
                           else
                           Access_pupil(school_class,p);
                      break;
                 case 'Y':
                 case 'y':system("CLS");
                      menu=Funk_menu_show();
                      continue;
                 case 'Q':
                 case 'q': k++;
                 break;
                 }
                 }
    
    cout << "\n\n\n";
    system("PAUSE");
    return 0;
}
Миниатюры
Прокомментируйте код.   Прокомментируйте код.  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 00:04     Прокомментируйте код.
Посмотрите здесь:

C++ Прокомментируйте код
Прокомментируйте код C++
C++ Прокомментируйте пожалуйста код
C++ Прокомментируйте код
C++ Прокомментируйте, пожалуйста, код программы.
Прокомментируйте код C++
C++ Прокомментируйте приведенный код
C++ Прокомментируйте код
C++ Прокомментируйте код
C++ Прокомментируйте код
Прокомментируйте код C++
C++ Прокомментируйте код пожалуйста

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zago-vlad
13 / 8 / 1
Регистрация: 12.01.2010
Сообщений: 106
30.10.2011, 00:09     Прокомментируйте код. #2
Цитата Сообщение от KeyGen Посмотреть сообщение
Прокомментируйте код
Это ты эту прогу писал? Если ты, то я думаю, тебе будет проще ее прокомментировать...
ViT(Vet@l)
27 / 26 / 2
Регистрация: 13.12.2010
Сообщений: 333
30.10.2011, 00:15     Прокомментируйте код. #3
zago-vlad, если человек просит что бы описали код, то явно он писал его не сам.
Ну, а если просит покритиковать, то это другое дело

Добавлено через 1 минуту
Да и к чему лишний треп?
Bers
Заблокирован
30.10.2011, 00:31     Прокомментируйте код. #4
KeyGen

1. Избегайте "суржика". Если вы пишите ОО-код, старайтесь максимально не использовать процедурный стиль. Избавляйтесь от глобальных функций и глобальных переменных настолько, насколько это возможно.

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

3. Взгляните на функцию Pupil** Funk_class(int mass[]);

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

Вместо этого, лучше предоставьте пользователю удобный класс-меню, через который он сделает все тоже самое, и даже подозревать не будит о кишках вашей библиотеки.

4. Обратите внимание на размер ваших функций по количеству строк.
Если функция слишком большая по количеству строчек - это намек, что задача возлагаемая на функцию достаточно сложна. И нужно разбить её на несколько задачек попроще.
Лично я, если у меня тело функции не влазиет на один экран - уже думаю как разбить её код на куски, и вместо одной большой сделать несколько маленьких. Так проще понять логику алгоритмов, меньше путаницы, меньше вероятность ошибок. Функции-члены классов, которые не должны быть видны снаружи надлежит делать приватными, или протектами.

Добавлено через 3 минуты
в догонку: если функция принимает слишком много параметров, есть смысл подумать о том, что она слишком универсальна и неудобна.

Возможно, вместо одного сеттера лучше сделать несколько более мелких.
Или же, для удобства пользователя - вместо кучи аргументов передавать одну структуру, имеющую все необходимые поля.
Yandex
Объявления
30.10.2011, 00:31     Прокомментируйте код.
Ответ Создать тему
Опции темы

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