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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 80, средняя оценка - 4.93
Хакер
6 / 6 / 0
Регистрация: 15.03.2009
Сообщений: 83
#1

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

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

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

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

Динамический массив структур - C++
Помогите пожалуйста с заданием Создать динамический массив структур (не менее 10 записей) со следующими полями: -шифр поезда -пункт...

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

Динамический массив структур - C++
Нужно сделать динамический массив структур. Задание составить перечень стран и количество автомобилей выпущенных этими странами. ...

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

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

12
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.10.2009, 22:52 #2
Хакер, если готова, то код в студию
1
Хакер
6 / 6 / 0
Регистрация: 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
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 00:10 #4
не кидай ссылки на файлобменники, а прикрепляй к посту или пости весь код

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

Добавлено через 1 минуту
Можно поконкретнее что такое АТД...я еще нуб в с++
0
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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 / 0
Регистрация: 15.03.2009
Сообщений: 83
08.10.2009, 00:35  [ТС] #7
Можно чуть подробнее? я не догоняю немного
0
Sich_Taras
14 / 14 / 1
Регистрация: 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
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.10.2009, 04:43 #9
M128K145,

Цитата Сообщение от M128K145 Посмотреть сообщение
Для удаления смещай начиная с index + 1 вправо на один элемент и уменьшай счетчик ввода на 1.
Может правильно так?:
Для удаления смещай начиная с index + 1 влево на один элемент и уменьшай счетчик ввода на 1.
2
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
08.10.2009, 10:00 #10
valeriikozlov, да, перепутал маленько))) со мной бывает такое - стороны путаю, спасибо
0
Uwiii
Сообщений: n/a
04.03.2010, 05:15 #11
Подскажите пожалуйста как правильно освободить память после
bolnie* b = new bolnie[col];
Как я понимаю можно написать так
Код
delete []b;
или надо освобождать поэлементно ?
Yurii_74
paladin
279 / 179 / 3
Регистрация: 25.02.2009
Сообщений: 592
04.03.2010, 08:10 #12
Цитата Сообщение от Uwiii Посмотреть сообщение
delete []b;
Можно и так. Просто деструктор должен быть правильный у bolnie... Хотя там нет ничего динамического внутри. Так что можно.
0
kuroiryuu
316 / 300 / 23
Регистрация: 05.11.2009
Сообщений: 712
Завершенные тесты: 2
04.03.2010, 12:17 #13
я бы предложил посмотреть в сторону list<bolnie> или vector<bolnie>, но vector немного хуже, хотя если привычно работать с оператором [], то vector с вами.

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

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

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

Динамический массив структур - C++
Создаю структуру, выделяю память под указатель на массив таких структур, размер задается при вводе. #include &lt;iostream&gt; #include...

Динамический массив структур - C++
Структура «Сотрудник» хранит имя, должность и возраст сотрудника. Структура «Компания» хранит название и массив сотрудников. Программа...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
04.03.2010, 12:17
Ответ Создать тему
Опции темы

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