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

Задача на использование классов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
05.02.2012, 21:17     Задача на использование классов #1
Добрый вечер форумчане!
Мне задали написать программку, вот условие:

Поля дaнных клаccа должны быть зaкрытыми, а доступ к ним должен осущeствляться c помощью открытых методов. Кроме полей c дaнными в классe должны быть конcтрукторы, деструктор и другиe методы клаccа в cоответствии с заданием. Создать массив объектов.
Pаtient: Фамилия, Имя, Отчество, Адрeс, Номер медицинской карты, Диагноз. Вывести:
-список пациентов, имеющих данный диагноз;
-список пациентов, номер медицинской кaрты которых находится в задaнном интервале.
Ценой долгих усилий я смог написать это:
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
#include <conio.h>
#include <string>
#include <iostream>
using namespace std;
//======= class  =================
class Patient
{
char name[30];
char fam[30];
char otch[30]; //private
char adr[30], diagnoz[20];
int number;
public:
Patient();
char *getdiagnoz();
int getnumber();
void show();
};
Patient::Patient()
{
cout<<"vedite imya: "; cin>>name;
cout<<"vedite familie: "; cin>>fam;
cout<<"vedite otchestvo: "; cin>>otch;
cout<<"vedite adres: "; cin>>adr;
cout<<"vedite nomer medkarti: "; cin>>number;
cout<<"vedite diagnoz: "; cin>>diagnoz;
}
void Patient::show()
{
cout<<"imya: "<<name<<endl;
cout<<"familie: "<<fam<<endl;
cout<<"otchestvo: "<<otch<<endl;
cout<<"adres: "<<adr<<endl;
cout<<"nomer medkarti : "<<number<<endl;
cout<<"diagnoz: "<<diagnoz<<endl;
}
char *Patient::getdiagnoz() { return diagnoz; }
int Patient::getnumber() { return number; }
void spisdiagnoz(Patient spis[],int n)//Cпиcok пациeнтoв имeющих дaнный диагноз
{char diagnoz[20];
cout<<"Vvedite diagnoz: "; cin>>diagnoz;
for(int i=0;i<n;i++)
if(strcmp(spis[i].getdiagnoz(),diagnoz)==0)spis[i].show();
}
void spismedkart(Patient spis[],int n)
//номер медкaрты который находится в зaдaнном интервале
{int i,k1,k2;
char number[20];
cout<<"Vvedite interval:"; cin>>k1;cout<<"-";cin>>k2;
if(number>=k1&&number<=k2)
{                          
}
}
//========= main ================
int main()
{ 
Patient *spis;
int n;
cout<<"Vvedite kol-vo pacientov: "; cin>>n;
spis=new Patient [n];
for(int i=0;i<n;i++) {
cout<<"=============================="<<endl;
spis[i].show();
}
spisdiagnoz(spis,n);
spismedkart(spis,n);
delete [] spis;
cout<<"press any key!";
while(!kbhit());
}
помогите, пожaлуйста,вывести cпиcок пaциентов, номер медицинской кaрты которых находится в задaнном интервале.Т.е. доработай кто может)
C++
1
2
3
4
5
6
7
8
//Г*îìåð ìåäèöèГ*ñêîé ГЄГ*ðòû êîòîðûõ Г*Г*õîäèòñÿ Гў Г§Г*Г¤Г*Г*Г*îì ГЁГ*òåðâГ*ëå.
{int i,k1,k2;
char number[20];
cout<<"Vvedite interval:"; cin>>k1;cout<<"-";cin>>k2;
if(number>=k1&&number<=k2)
{                          
}
}
Добавлено через 1 час 38 минут
Помогите пожалуйста!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.02.2012, 21:17     Задача на использование классов
Посмотрите здесь:

Совместное использование классов C++
C++ Использование классов
Использование классов C++
Использование функциональных классов C++
Использование классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
05.02.2012, 23:04     Задача на использование классов #2
C++
1
2
3
4
5
for(int i=0;i<n;i++) {
cout<<"=============================="<<endl;
if (number>=k1&&number<=k2)
spis[i].show();
}
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
07.02.2012, 04:57  [ТС]     Задача на использование классов #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
#include <conio.h>
#include <string>
#include <iostream>
using namespace std;
//======= class  =================
class Patient
{
char name[30];
char fam[30];
char otch[30]; //private
char adr[30], diagnoz[20];
int number;
public:
Patient();
char *getdiagnoz();
int getnumber();
void show();
};
Patient::Patient()
{
cout<<"vedite imya: "; cin>>name;
cout<<"vedite familie: "; cin>>fam;
cout<<"vedite otchestvo: "; cin>>otch;
cout<<"vedite adres: "; cin>>adr;
cout<<"vedite nomer medkarti: "; cin>>number;
cout<<"vedite diagnoz: "; cin>>diagnoz;
}
void Patient::show()
{
cout<<"imya: "<<name<<endl;
cout<<"familie: "<<fam<<endl;
cout<<"otchestvo: "<<otch<<endl;
cout<<"adres: "<<adr<<endl;
cout<<"nomer medkarti : "<<number<<endl;
cout<<"diagnoz: "<<diagnoz<<endl;
}
char *Patient::getdiagnoz() { return diagnoz; }
int Patient::getnumber() { return number; }
void spisdiagnoz(Patient spis[],int n)//ñïèñîê ГЇГ*öèåГ*òîâ èìåþùèé Г¤Г*Г*Г*ûé äèГ*ГЈГ*îç
{char diagnoz[20];
cout<<"Vvedite diagnoz: "; cin>>diagnoz;
for(int i=0;i<n;i++)
if(strcmp(spis[i].getdiagnoz(),diagnoz)==0)spis[i].show();
}
int spismedkart(Patient spis[],int n)
//Г*îìåð ìåäèöèГ*ñêîé ГЄГ*ðòû êîòîðûõ Г*Г*õîäèòñÿ Гў Г§Г*Г¤Г*Г*Г*îì ГЁГ*òåðâГ*ëå.
{
int i,k1,k2;
char number[20];
cout<<"Vvedite interval:"; cin>>k1;cout<<"-";cin>>k2;
for(int i=0;i<n;i++) 
 {
 cout<<"=============================="<<endl;
 if (number>=k1&&number<=k2)
  {
   spis[i].show();
  }                         
 }
}
//========= main ================
int main()
{ 
Patient *spis;
int n;
cout<<"Vvedite kol-vo pacientov: "; cin>>n;
spis=new Patient [n];
for(int i=0;i<n;i++) {
cout<<"=============================="<<endl;
spis[i].show();
}
spisdiagnoz(spis,n);
spismedkart(spis,n);
delete [] spis;
cout<<"press any key!";
while(!kbhit());
}
Добавлено через 5 минут
А вот текст ошибок:
In function `int spismedkart(Patient*, int)':
ISO C++ forbids comparison between pointer and integer
ISO C++ forbids comparison between pointer and integer
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
07.02.2012, 09:18     Задача на использование классов #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
#include <iostream>
#include <string>
#include <iterator>
#include <set>
#include <algorithm>
 
class Patient {
 public:
  Patient(const std::string &surname, const std::string &name,
    const std::string &secondName, const std::string &address,
    size_t cardId, const std::string &diagnosis)
    : surname_(surname), name_(name), secondName_(secondName),
    address_(address), cardId_(cardId), diagnosis_(diagnosis) {}
  Patient(const std::string &surname, const std::string &name,
    const std::string &secondName, const std::string &address,
    size_t cardId)
    : surname_(surname), name_(name), secondName_(secondName),
    address_(address), cardId_(cardId), diagnosis_() {}
  const std::string &getSurname() const { return surname_; }
  const std::string &getName() const { return name_; }
  const std::string &getSecondName() const { return secondName_; }
  const std::string &getAddress() const { return address_; }
  size_t getCardId() const { return cardId_; }
  const std::string &getDiagnosis() const { return diagnosis_; }
  void setDiagnosis(const std::string &diagnosis) { diagnosis_ = diagnosis_; }
 private:
  std::string surname_, name_, secondName_, address_;
  size_t cardId_;
  std::string diagnosis_;
};
 
bool operator<(const Patient &a, const Patient &b) {
  if (a.getSurname() == b.getSurname())
    if (a.getName() == b.getName())
      return a.getSecondName() < b.getSecondName();
    else
      return a.getName() < b.getName();
  else
    return a.getSurname() < b.getSurname();
}
 
std::ostream &operator<<(std::ostream &stream, const Patient &patient) {
  return stream << patient.getName() << " " << patient.getSecondName() <<
    " " << patient.getSurname() << ", card: " << patient.getCardId() <<
    ", diagnosis: " << patient.getDiagnosis();
}
 
struct SearchPatientsByDiagnosis {
  SearchPatientsByDiagnosis(const std::string &diagnosis_)
    : diagnosis(diagnosis_) {}
  bool operator()(const Patient &patient) {
    return patient.getDiagnosis() == diagnosis;
  }
  std::string diagnosis;
};
 
struct SearchPatientsByCardIdRange {
  SearchPatientsByCardIdRange(size_t begin_, size_t end_)
    : begin(begin_), end(end_) {}
  bool operator()(const Patient &patient) {
    return patient.getCardId() >= begin && patient.getCardId() <= end;
  }
  size_t begin, end;
};
 
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator copy_if(InputIterator first, InputIterator last,
  OutputIterator result, Predicate pred) {
  for (; first!=last; ++result, ++first)
    if (pred(*first)) *result = *first;
  return result;
}
 
 
int main(int argc, char *argv[]) {
  std::set<Patient> patients;
  patients.insert(Patient("Ivanov", "Ivan", "Ivanovich", "Sadovaya 12, 33", 1223, "flu"));
  patients.insert(Patient("Kuznetsov", "Nikolay", "Stepanovich", "Ogorodnaya 5, 2", 1233, "flu"));
  patients.insert(Patient("Petrov", "Petr", "Petrovich", "Lenina 3, 43", 1227, "ARD"));
  patients.insert(Patient("Semenov", "Semen", "Semenovich", "Zagorodniy 7, 22", 1213, "ARD"));
  patients.insert(Patient("Vasilyev", "Vasiliy", "Vasilyevich", "Zapadnaya 13, 6", 1243, "flu"));
  std::copy(patients.begin(), patients.end(), std::ostream_iterator<Patient>(std::cout, "\n"));
 
  std::cout << "Only ARD:" << std::endl;
  copy_if(patients.begin(), patients.end(), std::ostream_iterator<Patient>(std::cout, "\n"),
    SearchPatientsByDiagnosis("ARD"));
 
  std::cout << "Cards in range 1220-1235:" << std::endl;
  copy_if(patients.begin(), patients.end(), std::ostream_iterator<Patient>(std::cout, "\n"),
    SearchPatientsByCardIdRange(1220, 1235));
 
  return 0;
}
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
07.02.2012, 22:17  [ТС]     Задача на использование классов #5
Спасибо, конечно, огромное за проделанный вами труд!Но дело в том что мы не изучали такие сложные методы программирования. Такие библиотеки как
#include <iterator>
#include <set>
#include <algorithm>
я вообще встречаю впервые. Вы не могли бы лучше подкорректировать мою программку?) Если это не так сложно?

Добавлено через 6 часов 28 минут
Исправил немного. И заработало...но по диапозону не сортирует(((
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
#include <conio.h>
#include <string>
#include <iostream>
using namespace std;
//======= class  =================
class Patient
{
//====== private =================
private:
char fam[30];
char name[30];
char otch[30];
char adr[30];
char diagnoz[20];
int number;
//====== public =================
public:
Patient();
char *getdiagnoz();
int getnumber();
void show();
};
//конструктор по умолчанию
Patient::Patient()
  {
  cout<<"vedite familie: "; cin>>fam;
  cout<<"vedite imya: "; cin>>name;
  cout<<"vedite otchestvo: "; cin>>otch;
  cout<<"vedite adres: "; cin>>adr;
  cout<<"vedite nomer medkarti: "; cin>>number;
  cout<<"vedite diagnoz: "; cin>>diagnoz;
  }
void Patient::show()
 {
  cout<<"familie: "<<fam<<endl;
  cout<<"imya: "<<name<<endl;
  cout<<"otchestvo: "<<otch<<endl;
  cout<<"adres: "<<adr<<endl;
  cout<<"nomer medkarti : "<<number<<endl;
  cout<<"diagnoz: "<<diagnoz<<endl;
 }
char *Patient::getdiagnoz() { return diagnoz;}
int   Patient::getnumber()  { return number; }
//список пациентов имеющий данный диагноз.
void spisdiagnoz(Patient spis[],int n)
 {
  char diagnoz[20];
  cout<<endl<<"=============================="<<endl;
  cout<<"Vvedite diagnoz: "; cin>>diagnoz;
  for(int i=0;i<n;i++){
   if(strcmp(spis[i].getdiagnoz(),diagnoz)==0)
   {
    spis[i].show();
   }
  }
 }
void spismedkart(Patient spis[],int n)
//номер медицинской карты которых находится в заданном интервале.
 {
  int k1,k2;
  int number;
  cout<<"Vvedite interval:";cin>>k1;cout<<"-";cin>>k2;
  for(int i=0;i<n;i++) 
  {
  cout<<"=============================="<<endl;
   if (number>=k1 && number<=k2)
   {
    spis[i].show();
   }                         
  }
 }
//========= main ================
int main()
{ 
Patient *spis;
int n;
cout<<"Vvedite kol-vo pacientov: "; cin>>n;
spis=new Patient [n];
for(int i=0;i<n;i++) 
{
cout<<"=============================="<<endl;
spis[i].show();
}
spisdiagnoz(spis,n);
spismedkart(spis,n);
delete [] spis;
cout<<"press any key!";
while(!kbhit());
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.02.2012, 02:44     Задача на использование классов #6
В spismedkart наверное не number, а getnumber()
C++
1
2
3
4
if (spis[i].getnumber>=k1 && spis[i].getnumber<=k2)
{
    spis[i].show();
}
Yandex
Объявления
08.02.2012, 02:44     Задача на использование классов
Ответ Создать тему
Опции темы

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