Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/65: Рейтинг темы: голосов - 65, средняя оценка - 4.75
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
#1

Динамический массив структур

07.10.2009, 22:33. Просмотров 11716. Ответов 12

Реализовать программу для хранения информации о пациентах больницы. Предусмотреть следующие поля: ФИО, диагноз,
Для пациентов, стационарно находящихся в больнице указать номер палаты, последнюю измеренную температуру, назначенные лекарства.
Для пациентов, находящихся на домашнем лечении указать домашний адрес, дату последнего посещения.
Предусмотреть отображение всех пациентов, добавление и удаление элемента из списка.
Прога почти готова интересует как сделать вот это добавление и удаление элемента из списка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2009, 22:33
Ответы с готовыми решениями:

Как объявить динамический массив структур, и как выглядит обращение к полям структур по указателю?
Ребята подскажите как объявить динамический массив структур, и как выглядит...

Динамический массив структур
Помогите пожалуйста с заданием Создать динамический массив структур (не менее...

Динамический массив структур
Создаю структуру, выделяю память под указатель на массив таких структур, размер...

Динамический массив структур
Добрый день. Недавно начал изучать С++. В книге попалась задача в которой...

Динамический массив структур
Необходимо создать структуру, и сделать динамический массив структур....

12
M128K145
Эксперт JavaЭксперт С++
8322 / 3542 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
07.10.2009, 22:52 #2
Хакер, если готова, то код в студию
1
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
07.10.2009, 22:58  [ТС] #3
тут
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
204
205
206
207
208
209
210
211
212
213
#include <iostream.h>
#include <conio.h> // getch()
#include <string.h> 
#include<windows.h>  // Для перевода в русский.
#include <locale.h> /* Для русского языка */ 
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
//-----------------------------------------------------------------------------------------------------
// Функция перевода консольного языка в русский.
 
void rus(char* text)
 
 {
   char t[100];
   CharToOem(text,t);
   cout<<t;
 }
//-----------------------------------------------------------------------------------------------------
// Функция отображения меню. 
 
void show_menu() 
 {
      
 }
//-----------------------------------------------------------------------------------------------------
// Функция отображения раздела авторов:
         
void show_avt()
 {
     
 }
//-----------------------------------------------------------------------------------------------------
   const int col=2; //количество больных
   int i;
   struct{
       char Imya[30], Familiya[30], Otchestvo[30], Diagnoz[30], Vid[30], Lekarstva[100], Palata[30], Temp[30], Adress[50], Data[35];
       int flag;
   } bolnie[col]; 
 
 
//-----------------------------------------------------------------------------------------------------
//Функция ввода:
 
void enter()
{
/*создали структуру и тут же объявили массив, каждый 
элемент которого представляет собою описанную выше структуру*/
   cout << "\n\t\t\t\t";rus("Вводим данные:");cout << "\n\n"; /*сообщаем пользователю, что 
    он должен ввести данные */
 
   for (i=0; i < col; i++)
   {  //производим ввод данных
      
      cout << "\n\t";rus("Фамилия:");cout << "";
      cin>> bolnie[i].Familiya;
 
      cout << "\t";rus("Имя:");cout << "";
      cin >> bolnie[i].Imya;
 
      cout << "\t";rus("Отчество:");cout << "";
      cin >> bolnie[i].Otchestvo;
 
      cout << "\t";rus("Заключение медиков:");cout << "";
      cin >> bolnie[i].Diagnoz;
 
      cout << "\t";rus("1-Стационар. 2-Дом. :");cout << "";
     cin >> bolnie[i].flag;
     if (bolnie[i].flag == 1)
           {
      cout << "\t";rus("Палата:");cout << "";
      cin >> bolnie[i].Palata;
 
      cout << "\t";rus("Температура:");cout << "";
      cin >> bolnie[i].Temp;
      
      cout << "\t";rus("Лекарства:");cout << "";
      cin >> bolnie[i].Lekarstva;
           };
     if (bolnie[i].flag == 2)
           {
      cout << "\t";rus("Адрес:");cout << "";
      cin >> bolnie[i].Adress;
 
      cout << "\t";rus("Дата последнего визита:");cout << "";
      cin >> bolnie[i].Data;
     };
   }
}
//-----------------------------------------------------------------------------------------------------
//Функция изменения:
 
 void rewrite()
  {
   cout << "\n\t";rus("Изменить какого пациента по списку?");cout << "";
   cout << "\n\t";rus("Введите номер :");cout << "";
   int n;
   cin >> n;
   n=n - 1; 
   //-----------------------------------
   cout << "\n\t";rus("Информация о пациентах:");cout << "";
     cout << "\n\t " << n << ")";rus("пациент:");
 
      cout << "\n\t";rus("Фамилия:");cout << "";
      cin>> bolnie[n].Familiya;
 
      cout << "\t";rus("Имя:");cout << "";
      cin >> bolnie[n].Imya;
 
      cout << "\t";rus("Отчество:");cout << "";
      cin >> bolnie[n].Otchestvo;
 
      cout << "\t";rus("Заключение медиков:");cout << "";
      cin >> bolnie[n].Diagnoz;
 
      cout << "\t";rus("1-Стационар. 2-Дом. :");cout << "";
     cin >> bolnie[n].flag;
     if (bolnie[n].flag == 1)
           {
      cout << "\t";rus("Палата:");cout << "";
      cin >> bolnie[n].Palata;
 
      cout << "\t";rus("Температура:");cout << "";
      cin >> bolnie[n].Temp;
      
      cout << "\t";rus("Лекарства:");cout << "";
      cin >> bolnie[n].Lekarstva;
           };
     if (bolnie[n].flag == 2)
           {
      cout << "\t";rus("Адрес:");cout << "";
      cin >> bolnie[n].Adress;
 
      cout << "\t";rus("Дата последнего визита:");cout << "";
      cin >> bolnie[n].Data;
           };
 
    cout << "\n\t";rus("Информация о пациенте изменена:");cout << "";
    getch();
  }
 
//-----------------------------------------------------------------------------------------------------
//Функция вывода:
void vivod()
{
cout << "\n==========";rus("==========     Список больных     ====================");cout << "\n";
   //были найдены следующие записи
   for (i=0; i < col; i++)
   {
              if(bolnie[i].flag ==1)
              {
      cout << "\t";rus("Фио:");cout <<"\t"<<bolnie[i].Familiya<<"   "<<bolnie[i].Imya<<"   "<<bolnie[i].Otchestvo<<"\n";
      
      cout << "\t";rus("Палата:");cout <<bolnie[i].Palata<<"\n";
 
      cout << "\t";rus("Температура:");cout <<bolnie[i].Temp<<"\n";
 
      cout << "\t";rus("Лекарства:");cout <<bolnie[i].Lekarstva<<"\n";
      
      cout << "\t";rus("Вид лечения:");cout <<"";rus("Стационар");cout<<"\n";
 
      cout << "\t";rus("Заключение медиков:");cout <<bolnie[i].Diagnoz<<"\n";
 
      cout << endl;
              };
              if(bolnie[i].flag ==2)
              {
      cout << "\t";rus("Фио:");cout <<"\t"<<bolnie[i].Familiya<<"   "<<bolnie[i].Imya<<"   "<<bolnie[i].Otchestvo<<"\n";
      
      cout << "\t";rus("Адрес:");cout <<bolnie[i].Adress<<"\n";
 
      cout << "\t";rus("Дата последнего визита:");cout <<bolnie[i].Data<<"\n";
 
      cout << "\t";rus("Вид лечения:");cout <<"";rus("Домашнее");cout<<"\n";
 
      cout << "\t";rus("Заключение медиков:");cout <<bolnie[i].Diagnoz<<"\n";
 
      cout << endl;
              };
    }
}
//-----------------------------------------------------------------------------------------------------
//Функция выбора:
void vibor()
{
char cV;
  cout << "\n\t";rus("Делаем выбор:");cout<<"\n";
  cout << "\t";rus("1.Ввод 2.Вывод 3.Переписать:");cout<<"\n\t";
  cin>>cV;
  switch (cV) {
    case '1':
      enter();
      vibor();
      break;
    case '2':
      vivod();
      vibor();
      break;
    case '3':
      rewrite();
      vibor();
      break;
    default:
      cout<<"Goodbye\n";
  }
}
 
//-----------------------------------------------------------------------------------------------------
// Тело программы: 
void main()
{
show_menu();
show_avt();
vibor();
}
0
M128K145
Эксперт JavaЭксперт С++
8322 / 3542 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
08.10.2009, 00:10 #4
не кидай ссылки на файлобменники, а прикрепляй к посту или пости весь код

Добавлено через 7 минут
Это меня зрение подводит или остальные тоже не наблюдают здесь АТД список, а только обычный статический массив?
2
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
08.10.2009, 00:11  [ТС] #5
Знаете как реализовать?По идее надо поработать с динам.структурой.

Добавлено через 1 минуту
Можно поконкретнее что такое АТД...я еще нуб в с++
0
M128K145
Эксперт JavaЭксперт С++
8322 / 3542 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
08.10.2009, 00:23 #6
АТД список - Абстрактный Тип Данных список. Я понял, что тебе он не нужен.
C++
1
2
3
4
5
6
   int col = 100; //количество больных
   int i;
   struct bolnie {
           char Imya[30], Familiya[30], Otchestvo[30], Diagnoz[30], Vid[30], Lekarstva[100], Palata[30], Temp[30], Adress[50], Data[35];
           int flag;
   };
потом в мейне пишешь
C++
1
bolnie* b = new bolnie[col];
Для добавления просто новому b[i] присваиваешь некоторые данные в соответствующие поля и счетчик ввода увеличиваешь на 1. Для удаления смещай начиная с index + 1 вправо на один элемент и уменьшай счетчик ввода на 1. Выводить все элементы начиная от 0 и заканчивая значением счетчика ввода.
2
Хакер
6 / 6 / 1
Регистрация: 15.03.2009
Сообщений: 83
08.10.2009, 00:35  [ТС] #7
Можно чуть подробнее? я не догоняю немного
0
Sich_Taras
14 / 14 / 4
Регистрация: 08.10.2009
Сообщений: 114
08.10.2009, 04:01 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const int MAXN = 512;
const int MAXD = 512;
class pacient {
char* Name;
char* Diahnoz;
//.....
public:
pacient()
{
Name = new char [MAXN];
Diahnoz = new char[MAXD];
}
//and methods ....
 
};
Добавлено через 1 минуту
C++
1
2
3
4
5
6
int main()
{
  Pacient* array = new Pacient [MAXP];
  //...
  return 0;
}
0
valeriikozlov
Эксперт С++
4683 / 2509 / 751
Регистрация: 18.08.2009
Сообщений: 4,550
08.10.2009, 04:43 #9
M128K145,

Цитата Сообщение от M128K145 Посмотреть сообщение
Для удаления смещай начиная с index + 1 вправо на один элемент и уменьшай счетчик ввода на 1.
Может правильно так?:
Для удаления смещай начиная с index + 1 влево на один элемент и уменьшай счетчик ввода на 1.
2
M128K145
Эксперт JavaЭксперт С++
8322 / 3542 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
08.10.2009, 10:00 #10
valeriikozlov, да, перепутал маленько))) со мной бывает такое - стороны путаю, спасибо
1
Uwiii
0 / 0 / 0
Регистрация: 27.02.2010
Сообщений: 2
04.03.2010, 05:15 #11
Подскажите пожалуйста как правильно освободить память после
bolnie* b = new bolnie[col];
Как я понимаю можно написать так
Код
delete []b;
или надо освобождать поэлементно ?
0
Yurii_74
paladin
283 / 183 / 7
Регистрация: 25.02.2009
Сообщений: 592
04.03.2010, 08:10 #12
Цитата Сообщение от Uwiii Посмотреть сообщение
delete []b;
Можно и так. Просто деструктор должен быть правильный у bolnie... Хотя там нет ничего динамического внутри. Так что можно.
0
kuroiryuu
320 / 304 / 68
Регистрация: 05.11.2009
Сообщений: 712
Завершенные тесты: 2
04.03.2010, 12:17 #13
я бы предложил посмотреть в сторону list<bolnie> или vector<bolnie>, но vector немного хуже, хотя если привычно работать с оператором [], то vector с вами.

Хотя если нужно без использования std писать программу то добавление и удаление элемента из списка, весёлое получается...
для добавления необходимо раздвигать массив (знаменитая фунция realloc из С), а затем добавлять элемент.
0
04.03.2010, 12:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2010, 12:17

Динамический массив структур ...
Как создать дин. массив структур....пользователь должен ввести число этих...

Динамический массив структур
Структура «Сотрудник» хранит имя, должность и возраст сотрудника. Структура...

Динамический массив структур С++
Мне нужно сделать добавление экземпляра структуры в массив. Для этого нужно...


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

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

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