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

Вывести список работников пенсионного возраста (Ошибка) - C++

Восстановить пароль Регистрация
 
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 12:31     Вывести список работников пенсионного возраста (Ошибка) #1
Когда создан список, нужно вывести список работников пенсионного возраста, но при нажатии клавиши 4 вылетает ошибка. не знаю в чем проблема.


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
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <windows.h>
#include <string.h>
#include <conio.h>
#define MAX 512
#define ESC 27
using namespace std;
struct dd_mm
{
   int dd;
   int mm;
   int yy;
};
struct work
{
   char familiya[30], name[30], otchestvo[30];
   struct dd_mm data;
   char post[30], name_state[30];
   struct dd_mm work;
   float price;   
}*note;
void sortABC(work note[], int size, int alfavit[ ]) //Сортировка прямым выбором
{
 int i, j; //Сортировка
 int temp, minI;  
 for(i=0; i<size-1; i++)
    {
            minI=i;
    for (j=i+1; j<size; j++)
        if (strcmp(note[alfavit[j]].familiya, note[alfavit[minI]].familiya)<0) minI=j;
    temp=alfavit[minI]; 
    alfavit[minI]=alfavit[i];
    alfavit[i]=temp;
    }    
}
void show(work note[], int i)
{
 cout<<setw(10)<<note[i].familiya<<" | "<<setw(10)<<note[i].name<<" | "<<setw(10)<<note[i].otchestvo<<" | "<<setw(4)<<note[i].data.dd<<"."<<note[i].data.mm<<"."<<note[i].data.yy<<" |"<<setw(8)<<(2013-note[i].work.yy)<<" |"<<endl;
}
int main()
{
 setlocale(LC_ALL,"Russian");
 int i=0, j, change=0, size=0, kol=0;
 int *alfavit; 
 float summa;
 while(change!=ESC)
      {
        system("cls");
      cout<<"Главное меню:\n1. Вывести список сотрудников\n2. Редактировать список\n3. Поиск\n4. Вывод сотрудников пенсионного возраста\n5. Вывести сотрудников определенного отдела\n. ESC-Выход\n\n";
      change=getch();
      switch(change)
      { 
      case '1': if(size!=0) 
                {
                    for(i=0; i<size; i++)
                        show(note, i);
                }
                else {cout<<"В данный момент БД пуста!"<<endl;
  system("pause"); 
  system("cls");}
                getch();
                break;
      case '2': while(change!='3')
                   {
                   cout<<"Редактировать список\n1. Ввод данных в БД\n2. Очистить БД\n3. Назад\n\n";
                   change=getch(); 
                   switch(change)
                   {
                   case '1': if (size==0) note=new work[MAX];  
                           i=size;
                           while(change!='0')
                                {
                                cout<<"Введите фамилию:"<<endl;
                                cin>>note[i].familiya;
                                cout<<"Введите имя:"<<endl;
                                cin>>note[i].name;
                                cout<<"Введите отчество:"<<endl;
                                cin>>note[i].otchestvo;
                                do{
                                  cout<<"Введите дату рождения (dd mm yy):"<<endl;
                                  cin>>note[i].data.dd>>note[i].data.mm>>note[i].data.yy;
                                  } while(note[i].data.dd<0 || note[i].data.dd>32 || note[i].data.mm<0 || note[i].data.mm>13 || note[i].data.yy<1920 || note[i].data.yy>2000);
                                cout<<"Введите название отдела:"<<endl;
                                cin.ignore();
                                cin.getline(note[i].name_state, 30);
                                cout<<"Введите должность:"<<endl;
                                cin.ignore();
                                cin.getline(note[i].post, 30);
                                
                                do{
                                  cout<<"Введите дату устройства на работу (dd mm yy):"<<endl;
                                  cin>>note[i].work.dd>>note[i].work.mm>>note[i].work.yy;
                                  } while(note[i].work.dd<0 || note[i].work.dd>32 || note[i].work.mm<0 || note[i].work.mm>13 || note[i].work.yy<1920 || note[i].work.yy>2012);
                                cout<<"Введите оклад:"<<endl;
                                cin>>note[i].price;
                                cout<<"Вводить ещё? 1 - ДА, 0 - НЕТ"<<endl;
                                change=getch();
                                i++;
                                }
                           size=i;
                           system("cls");
                           break;
                   case '2': delete[]note; 
                           size=0;
                           cout<<"Список очищен!"<<endl;
                           system("pause"); 
                           system("cls");
                           break;
                   case '3': system("cls");
                           break;
                   default: cout<<"Неверный номер! "; 
system("pause");                 
                   } 
                   }
              break; 
      case '3': if (size!=0) {cout<<"Поиск (Введите данные или введите нуль, если сомневаетесь): "<<endl;
                            cout<<"Введите фамилию:"<<endl;
                            cin>>note[size+1].familiya;
                            cout<<"Введите имя:"<<endl;
                            cin>>note[size+1].name;
                            cout<<"Введите должность:"<<endl;
                            cin>>note[size+1].post;
                            kol=0;
                            for(i=0; i<size; i++)
                               {
                               j=0;
                               if (strcmp(note[size+1].familiya, note[i].familiya)==0) j++;
                               if (strcmp(note[size+1].name, note[i].name)==0) j++;
                               if (strcmp(note[size+1].post, note[i].post)==0) j++;
                               if (j>0) {show(note, i); kol++;}
                               }   
                           if (kol>0) cout<<"Найдено совпадений: "<<kol<<endl;
                              else cout<<"Совпадений нет!"<<endl;
                           }
                  else cout<<"БД пуста!"<<endl;  
              system("pause");
              system("cls");          
              break;
      case '4': if (size!=0) {
                           j=0;
                           alfavit=new int[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=i; j++;}
                           if (j!=0) {
                                     sortABC(note, size, alfavit);
                                     cout<<setw(12)<<"Фамилия |"<<setw(13)<<"Имя |"<<setw(13)<<"Отчество|"<<setw(14)<<"Д.Р. |"<<setw(12)<<" Стаж |\n\n";
                                     for(i=0; i<j; i++)
                                        show(note, alfavit[i]);
                                     delete(alfavit);
                                     }
                              else cout<<"Совпадений нет!";
                           }
                 else {cout<<"В данный момент БД пуста!"<<endl; 
 system("pause");
 system("cls");}
                getch();
              break;
      case '5': if (size!=0) {
                           summa=0;
                           j=0;
                           cout<<"Введите название отдела:"<<endl;
                           cin.ignore();
                           cin.getline(note[size+1].name_state, 30);
                           for(i=0; i<size; i++)
                              if (strcmp(note[i].name_state, note[size+1].name_state)==0) {summa+=note[i].price; j++;}
                           if (j!=0) {
                                     cout<<"Средний заработок в отделе "<<note[size+1].name_state<<" составляет: "<<summa/j;
                                     }
                              else cout<<"Такого отдела нет!";
                           }
                 else {cout<<"В данный момент БД пуста!"<<endl;
  system("pause");
  system("cls");}
              break;
        case ESC: break;
      default: cout<<"Неверный номер! "; 
system("pause");
      }
      }
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2013, 12:31     Вывести список работников пенсионного возраста (Ошибка)
Посмотрите здесь:

Напечатать список студентов мужского пола с указанием их возраста C++
C++ Отсортировать список работающих по убыванию возраста
C++ Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента
C++ Вывести список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы
Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 12:39     Вывести список работников пенсионного возраста (Ошибка) #2
Я конечно еще новичек в Си, но вот это что?
C++
1
delete(alfavit);
По идее должно быть так:
C++
1
 delete []alfavit;
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 12:48  [ТС]     Вывести список работников пенсионного возраста (Ошибка) #3
Цитата Сообщение от Ilot Посмотреть сообщение
Я конечно еще новичек в Си, но вот это что?
C++
1
delete(alfavit);
По идее должно быть так:
C++
1
 delete []alfavit;
все равно ошибка
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 12:57     Вывести список работников пенсионного возраста (Ошибка) #4
C++
1
2
3
4
5
 int *alfavit; 
...
...
...
 alfavit=new int[size];
Это тебя не смущает?
henecs
 Аватар для henecs
16 / 16 / 0
Регистрация: 19.05.2013
Сообщений: 135
20.05.2013, 13:41     Вывести список работников пенсионного возраста (Ошибка) #5
заупстил, работает
проверял с одним сотрудником

Добавлено через 24 минуты
немного переделал сортировку
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void sortABC(work note[], int size) //сортировка бульбашкой
{
 int i, j;
 work temp;
 for(i=0; i<size; i++)
    for (j=i+1; j<size-1; j++)
      {
         if (strcmp(note[j].familiya, note[j+1].familiya)<0) ;
         temp=note[j+1];
         note[j+1]=note[j];
         note[j]=temp;
      }
}
и переделал 4ю клавишу ты создавал массив индексов, я же создаю массив структуры и пишу туда эелементы которых выполняеться условие и потом сортирую его
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 //----------------------------    
                 case '4': if (size!=0) {
                           j=0;
                           alfavit=new work[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=note[i]; j++;}
                           if (j!=0) {
                                     sortABC(alfavit,j);
                                     cout<<setw(12)<<"last name |"<<setw(13)<<"name |"<<setw(13)<<"foname|"<<setw(14)<<"birtday |"<<setw(12)<<" stz |\n\n";
                                     for(i=0; i<j; i++)
                                        show(alfavit,i);
                                     delete [] alfavit;
                                     }
                              else cout<<"saerch rerutn null!";
                           }
                 else {cout<<"bd null!"<<endl;
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 14:30  [ТС]     Вывести список работников пенсионного возраста (Ошибка) #6
Цитата Сообщение от henecs Посмотреть сообщение
заупстил, работает
проверял с одним сотрудником

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

можешь полностью код выложить?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 16:21     Вывести список работников пенсионного возраста (Ошибка) #7
Освобождение памяти под alfavit не там сделано. Если j == 0, то память не освободится.
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 16:27  [ТС]     Вывести список работников пенсионного возраста (Ошибка) #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Освобождение памяти под alfavit не там сделано. Если j == 0, то память не освободится.
как исправить?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 16:38     Вывести список работников пенсионного возраста (Ошибка) #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case '4': if (size!=0) {
                           j=0;
                           alfavit=new work[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=note[i]; j++;}
                           if (j!=0) {
                                     sortABC(alfavit,j);
                                     cout<<setw(12)<<"last name |"<<setw(13)<<"name |"<<setw(13)<<"foname|"<<setw(14)<<"birtday |"<<setw(12)<<" stz |\n\n";
                                     for(i=0; i<j; i++)
                                        show(alfavit,i);
                                     
                                     }
                              else cout<<"saerch rerutn null!";
 
                              delete [] alfavit;
                           }
                 else {cout<<"bd null!"<<endl;
henecs
 Аватар для henecs
16 / 16 / 0
Регистрация: 19.05.2013
Сообщений: 135
20.05.2013, 16:40     Вывести список работников пенсионного возраста (Ошибка) #10
Цитата Сообщение от Hot Посмотреть сообщение
можешь полностью код выложить?
дык я больше ничего не менял
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 17:11     Вывести список работников пенсионного возраста (Ошибка)
Еще ссылки по теме:

C++ Определить сотрудников, которым в следующем году достигнут пенсионного возраста (выводится только 1 сотрудник)
C++ Вывести в словесном виде описание указанного возраста
Составить программу, которая выдает список работников и ведомости начисления зарплаты C++

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

Или воспользуйтесь поиском по форуму:
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 17:11  [ТС]     Вывести список работников пенсионного возраста (Ошибка) #11
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
case '4': if (size!=0) {
                           j=0;
                           alfavit=new work[size];
                           for(i=0; i<size; i++)
                              if ((2013-note[i].data.yy)>55) {alfavit[j]=note[i]; j++;}
                           if (j!=0) {
                                     sortABC(alfavit,j);
                                     cout<<setw(12)<<"last name |"<<setw(13)<<"name |"<<setw(13)<<"foname|"<<setw(14)<<"birtday |"<<setw(12)<<" stz |\n\n";
                                     for(i=0; i<j; i++)
                                        show(alfavit,i);
                                     
                                     }
                              else cout<<"saerch rerutn null!";
 
                              delete [] alfavit;
                           }
                 else {cout<<"bd null!"<<endl;
ошибка http://imgs.su/tmp/2013-05-20/1369054496-513.jpg

Добавлено через 17 минут
Цитата Сообщение от Hot Посмотреть сообщение
http://imgs.su/tmp/2013-05-20/1369055476-513.jpg
Yandex
Объявления
20.05.2013, 17:11     Вывести список работников пенсионного возраста (Ошибка)
Ответ Создать тему
Опции темы

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