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

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

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

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

20.05.2013, 12:31. Просмотров 735. Ответов 10
Метки нет (Все метки)

Когда создан список, нужно вывести список работников пенсионного возраста, но при нажатии клавиши 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2013, 12:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести список работников пенсионного возраста (Ошибка) (C++):

Вывести список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы - C++
Есть созданный файл, который содержит сведения о сотрудниках института. Структура записи: фамилия сотрудника, название отдела, год...

Вывести информацию о сотруднике, список сотрудников пенсионного возраста, средний оклад сотрудников отдела - C++
Дан файл, содержащий информацию о сотрудниках отдела учреждения. Структура записи файла: фамилия и инициалы сотрудника; год...

Определить сотрудников, которым в следующем году достигнут пенсионного возраста (выводится только 1 сотрудник) - C++
Определить сотрудников, которым в следующем году достигнут пенсионного возраста.. #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список - C++
спасайте Сформировать список из 10 работников, используя динамическую структуру данных двусвязный список. Информация о работнике...

Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента - C++
Написать программу, реализующую связный список с информацией о студентах и отображающую список в порядке убывания возраста студента

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

10
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 12:39 #2
Я конечно еще новичек в Си, но вот это что?
C++
1
delete(alfavit);
По идее должно быть так:
C++
1
 delete []alfavit;
0
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 12:48  [ТС] #3
Цитата Сообщение от Ilot Посмотреть сообщение
Я конечно еще новичек в Си, но вот это что?
C++
1
delete(alfavit);
По идее должно быть так:
C++
1
 delete []alfavit;
все равно ошибка
0
Ilot
Модератор
Эксперт С++
1823 / 1181 / 232
Регистрация: 16.05.2013
Сообщений: 3,118
Записей в блоге: 5
Завершенные тесты: 1
20.05.2013, 12:57 #4
C++
1
2
3
4
5
 int *alfavit; 
...
...
...
 alfavit=new int[size];
Это тебя не смущает?
0
henecs
17 / 17 / 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;
0
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 14:30  [ТС] #6
Цитата Сообщение от henecs Посмотреть сообщение
заупстил, работает
проверял с одним сотрудником

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

можешь полностью код выложить?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.05.2013, 16:21 #7
Освобождение памяти под alfavit не там сделано. Если j == 0, то память не освободится.
0
Hot
0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 6
20.05.2013, 16:27  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Освобождение памяти под alfavit не там сделано. Если j == 0, то память не освободится.
как исправить?
0
alsav22
5425 / 4820 / 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;
0
henecs
17 / 17 / 0
Регистрация: 19.05.2013
Сообщений: 135
20.05.2013, 16:40 #10
Цитата Сообщение от Hot Посмотреть сообщение
можешь полностью код выложить?
дык я больше ничего не менял
0
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
0
20.05.2013, 17:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 17:11
Привет! Вот еще темы с ответами:

Напечатать список студентов мужского пола с указанием их возраста - C++
здраствуйте. не получается с ответом задачи. вроде компилируется но не вычисляется. не могли бы вы исправить ошибку* буду благодарен. ...

Составить программу, которая выдает список работников и ведомости начисления зарплаты - C++
Створити файл, який містить відомості про місячну зарплату робітників заводу. Кожний запис містить такі поля: прізвище робітника, назва...

Вывести возрастную категорию в зависимости от возраста - C++
Доброго времени суток вам. Помогите пожалуйста с задачкой, которую нужно решить с помощью операторов цикла. Заранее спасибо всем...

Вывести строку - описание указанного цифрами возраста - C++
задание:Дано целое число в диапазоне 20-99, определяющее возраст (в годах). Вывести строку-описание указанного возраста, обеспечив...


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

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

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