1. Лафоре Р. Объектно-ориентированное программирование в С++ / Р. Лафоре – 4-е изд. – Питер.: 2004. – 654 с.
2. Давыдов В.Г. Технологии программирования. С++ / В. Г. Давыдов – Санкт-Петербург: БХВ-Петербург, 2005. – 432 с.
3. Касюк С.Т. Конспект лекций по дисциплине «Информатика» / С. Т. Касюк – Челябинск: ЮУрГУ, 2005. – 212 с.
ПРИЛОЖЕНИЕ
Листинг программы на С++
#ifndef Class_File
#define Class_File
class TPersona
{
public:
static int kolp;
int sta;
int tip;
char name [20];// Имя персоны
char fam[20]; // Фамилия персоны
int voz; // Возраст персоны
float rost; // Рост персоны
void PrintPer();
TPersona(int j);
~TPersona();
};
class TDriver: public TPersona
{
public:
int stage; //Стаж работы в годах
char nac[20]; // Национальность водителя
static int kolt;
void PrintPer();
TDriver(int j);
~TDriver();
};
class TPas:public TPersona
{
public:
static int kolf;
char prof[20]; // специальность\профессия
char sempol[20]; // cемейное положение
void PrintPer();
TPas(int j);
~TPas();
};
class TCar
{
public:
int kolch;
TPersona *chel[5];
static int kolm;
int tip;
char marka [20]; // Марка транспортного средства
char chvet[20]; // Цвет транспорнтного средства
float coast; // Цена транспортного средства
int god;// Возраст транспортного средства
void PrintPas();
virtual void PrintDCar()=0;
TCar(int c);
~TCar();
};
class TTrain: public TCar
{
public:
static int kols;
char datae[20]; // Дата введения в эксплуатацию
char strana[20]; // Страна производитель
void PrintDCar();
TTrain(int c);
~TTrain();
};
class TAuto: public TCar
{
public:
static int kolo;
int probeg; // Пробег автомобиля
char strana1[20]; // Страна производитель
void PrintDCar();
TAuto(int c);
~TAuto();
};
#endif
#include "stdafx.h"
#include "Osnova.h"
#include "stdio.h"
#include "string"
#include "conio.h"
TPersona::TPersona(int j)
{
tip=j;
printf(" Vvod dannih po persone \n");
printf("1-Vvedite imya personi \n");
scanf ("%s",&name);
printf("2-Vvedite familiu personi \n");
scanf("%s",fam);
printf("3-Vvedite vozrast personi \n");
scanf ("%d",&voz);
printf("4-Vvedite rost personi \n");
scanf("%f",&rost);
printf("5-Vvedite stag raboti \n
");
scanf("%d",&sta);
kolp=kolp+1;
getchar();
}
TPersona::~TPersona()
{
printf("Dannie udaleni");
getchar();
kolp=kolp-1;
}
TDriver::TDriver(int j):TPersona(j)
{
system("cls");
printf(" Vvod dannih po voditelu \n");
printf("1-Vvedite stage raboti \n");
scanf("%d",&stage);
printf("2-Vvedite nacional'nost \n");
scanf("%s",nac);
kolt=kolt+1;
getchar();
}
TDriver::~TDriver()
{
printf("Dannie udaleni \n");
kolt=kolt-1;
getchar();
}
TPas::TPas(int j):TPersona(j)
{
printf("Vvedite professiu \n");
scanf("%s",prof);
printf("Vvedite semeinoe polozhenie \n ");
scanf("%s",sempol);
kolf=kolf+1;
getchar();
}
TPas::~TPas()
{
printf("Dannie udaleni \n");
kolf=kolf-1;
getchar();
}
TCar::TCar(int c)
{
kolch=0;
tip=c;
printf("1-Vvedite marku avto \n");
scanf("%s",marka);
printf("2-Vvedite chvet avto \n");
scanf("%s",chvet);
printf("3-Vvedite god expluatacii \n");
scanf("%d",&god);
printf("4-Vvedite chenu na avto \n");
scanf("%f",&coast);
kolm=kolm+1;
getchar();
}
TCar::~TCar()
{
printf("\n Dannie po dannomu avto udaleni \n");
kolm=kolm-1;
getchar();
}
TTrain::TTrain(int c):TCar(c)
{
printf("1-Vvedite datu vvedenia v expluatachiu v vide DD.MM.GG \n");
scanf("%s",datae);
printf("2-Vvedite stranu proizvoditel' \n");
scanf("%s",strana);
kols=kols+1;
getchar();
}
TTrain::~TTrain()
{
printf("\n Dannie udaleni \n");
kols=kols-1;
getchar();
}
TAuto::TAuto(int c):TCar(c)
{
printf("1-Vvedite stranu proizvoditelya \n");
scanf("%s",strana1);
printf("2-Vvedite probeg avto \n");
scanf("%d",&probeg);
kolo=kolo+1;
getchar();
}
TAuto::~TAuto()
{
printf("Dannie udaleni \n");
kolo=kolo-1;
getchar();
}
void TPersona::PrintPer()
{
printf("\n Imya personi: %s ",name);
printf("\n Familii personi: %s ",fam);
printf("\n Vozrast personi: %d ",voz);
printf("\n Rost personi: %f ",rost);
getchar();
}
void TCar::PrintPas()
{
int i;
if (kolch==0)
{
printf("\n Net person \n");
return;
}
for(i=0;i<kolch;i++)
chel[i]->PrintPer();
}
void TCar::PrintDCar()
{
printf("\n Dannie po transportu \n");
printf("\n Marka: %s \n",marka);
printf("\n Chvet transporta: %s\n",chvet);
printf("\n Chena transporta: %f\n",coast);
printf("\n God vipuska: %d\n",god);
getchar();
}
void TTrain::PrintDCar()
{
printf(" GOD \n",god);
printf(" Tip-Poezd \n");
printf(" Marka transporta %s \n",marka);
printf(" Data vvedeniya v expluataciu %s \n",datae);
printf(" Strana proizvoditel' %s \n",strana);
getchar();
}
void TAuto::PrintDCar()
{
printf(" GOD \n",god);
printf(" Tip-Avtomobi \n");
printf(" Marka transporta %s \n",marka);
printf(" Probeg avto %d \n",probeg);
printf(" Strana proizvoditel' %s \n",strana1);
getchar();
}
// Kursac.cpp: Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Osnova.h"
#include "stdio.h"
#include "string"
#include "conio.h"
int TPersona::kolp=0;
int TDriver::kolt=0;
int TPas::kolf=0;
int TCar::kolm=0;
int TTrain::kols=0;
int TAuto::kolo=0;
TCar *a[5]={0};
// Добавление записей по людишкам
void DobPer()
{
system("cls");
int i,j;
if(TCar::kolm==0)
{
printf("\n Dannie ne vvedeni =(");
getchar();
return;
}
printf(" Vvedite nomer avto \n");
scanf("%d",&i);
getchar();
if ((i>TCar::kolm)||(i<0))
{
printf("\n Dannie vvedeni neverno");
return;
}
do
{
system("cls");
printf(" Viberete, kogo vi dobavite \n");
printf(" 1-Voditel' \n");
printf(" 2-Passagir \n");
printf(" 0-Vihod\n");
scanf("%d",&j);
getchar();
switch(j)
{
case 1:
{
a[i-1]->chel[a[i-1]->kolch]=new TDriver(j);
a[i-1]->kolch++;
break;
}
case 2:
{
a[i-1]->chel[a[i-1]->kolch]=new TPas(j);
a[i-1]->kolch++;
break;
}
case 0: return;
default: break;
}
}
while (j!=0);
}
// Добавление транспорта
void DobTra()
{
system("cls");
int c;
printf("\n Viberete, kakoi transport budet dobavlen");
printf("\n 1-Poezd");
printf("\n 2-Automobille");
scanf("%d",&c);
getchar();
switch(c)
{
case 1:
{
a[TCar::kolm-1] = new TTrain(c);
break;
}
case 2:
{
a[TCar::kolm-1] = new TAuto(c);
break;
}
default:
{
printf("\n Dannie vvedeni neverno \n");
getchar();
break;
}
}
}
// Удаление транспорта
void DelTra()
{
system("cls");
int i,j;
if (TCar::kolm==0)
{
printf("\n Net avtomobilei ");
return;
}
printf(" Vvedite nomer avto \n");
scanf("%d",&i);
getchar();
if ((i>TCar::kolm)||(i<0))
{
printf("\n Dannie vvedeni neverno");
return;
}
if(a[i-1]->kolch!=0)
{
for(j=0;j<a[i-1]->kolch+1;j++)
{
delete a[i-1]->chel[j];
a[i-1]->kolch--;
}
}
delete a[i-1];
a[i-1]=0;
for(j=i-1;j<TCar::kolm;j++)
{
a[j]=a[j+1];
a[j+1]=0;
}
printf("\n Dannie po zadannomu nomeru udaleni");
getchar();
}
// Вывод списка пассажиров в указанном транспорте
int SpisPas()
{
int j,i;
if (TCar::kolm==0)
{
printf("\n Net transporta, sostavit' spisok nelza\n");
return 0;
}
if (TPersona::kolp==0)
{
printf("\n Net Person, sostavit' spisok nelza \n");
return 0;
}
printf("\n Viberete nomer transortnogo sredsrva \n");
scanf("%d",&i);
getchar();
printf("\n Marka transportnogo sredstva: %s",a[i-1]->marka);
a[i-1]->PrintPas();
getchar();
return i;
}
void DelPer()
{
system("cls");
int i,j,c;
char famud[20];
i=SpisPas();
if (i!=0)
{
printf("\n Vvedite familiu udalaemoi personi \n");
scanf("%s",famud);
for(j=0; j<a[i-1]->kolch; j++)
{
if (strcmp(a[i-1]->chel[j]->fam,famud)==0)
{
delete a[i-1]->chel[j];
a[i-1]->kolch--;
for(c=j;c<a[i-1]->kolch;c++)
{
a[i-1]->chel[j]=a[i-1]->chel[j+1];
a[i-1]->chel[j+1]=0;
}
}
else
{
printf("\n Takaia persona otsutstvuet ");
getchar();
}
}
}
else
{
printf("\n Dannih net ");
getchar();
}
printf("\n Dannie udaleni ");
getchar();
}
void Inform()
{
system("cls");
char famil[20];
int j,k;
if (TCar::kolm==0)
{
printf("\n Net transporta, sostavit' spisok nelza\n");
getchar();
return;
}
if (TPersona::kolp==0)
{
printf("\n Net Person, sostavit' spisok nelza \n");
getchar();
return;
}
if (TDriver::kolt==0)
{
printf("\n Net voditelei v spiske person \n");
getchar();
return;
}
printf("\n Vvedite imya voditelya, po kotorim vivodyatsa dannie ");
scanf("%s",famil);
k=TPersona::kolp;
for(j=0;j<k; j++)
if (strcmp(a[j]->chel[j]->fam,famil)==0)
a[j]->PrintDCar();
else
{
printf("\n Takogo voditelya net ");
getchar();
}
getchar();
}
void SpisGod()
{
system("cls");
int i,j,s,c;
if (TCar::kolm==0)
{
printf("\n Net transporta, sostavit' spisok nelza\n");
getchar();
return;
}
if (TPersona::kolp==0)
{
printf("\n Net Person, sostavit' spisok nelza \n");
getchar();
return;
}
printf("\n Vvedite god,po kotoromu budem vivodit spisok ");
scanf("%d",&i);
getchar();
printf("\n Viberete, kakoi transport ");
printf("\n 1-Poezd");
printf("\n 2-Automobille");
scanf("%d",&c);
getchar();
for (j=0; j<TCar::kolm-1; j++)
if ((a[j]->god>i)&&(a[j]->tip==c))
a[j]->PrintDCar();
getchar();
}
void SpisStag()
{
int i,j,s,c;
system("cls");
if (TCar::kolm==0)
{
printf("\n Net transporta, sostavit' spisok nelza\n");
getchar();
return;
}
if (TPersona::kolp==0)
{
printf("\n Net Person, sostavit' spisok nelza \n");
getchar();
return;
}
printf("\n Vvedite stage,po kotoromu budem vivodit spisok ");
scanf("%d",&i);
getchar();
getchar();
for (j=0; j<TCar::kolm-1; j++)
if ((a[j]->chel[j]->sta>i)&&(a[j]->tip==c)&&(a[j]->chel[j]->tip==1))
a[j]->PrintDCar();
getchar();
}
int PrintMenu()
{
int i;
do
{
system("cls");
printf(" Menu \n");
printf("\n 1)-Dobavlenie person \n");
printf("\n 2)-Dobavlenie transporta \n");
printf("\n 3)-Udalenie person \n ");
printf("\n 4)-Udalenie transporta \n ");
printf("\n 5)-Vivod perechnya passagirov v ukazanom transporte \n ");
printf("\n 6)-Vivesti informaciu ob avto po familii voditelya \n");
printf("\n 7)-Vivod perechna transportnih sredstv, kotorimi upravlaut voditeli \n so stagem raboti bolee ukazannogo \n");
printf("\n 8)-Vivod perechna transportnih sredstv, ukazannogo vida proizvedenih\n posle ukazannogo goda \n");
printf("\n 0)-Vihod \n");
scanf("%d",&i);
getchar();
switch(i)
{
case 1:{DobPer();break;}
case 2:{DobTra();break;}
case 3:{DelPer();break;}
case 4:{DelTra();break;}
case 5:{SpisPas();break;}
case 6:{Inform();break;}
case 7:{SpisStag();break;}
case 8:{SpisGod();break;}
case 0:{break;}
default:
{
printf("Neverno vveden punkt menu ");
getchar();
break;
}
}
}
while (i!=0);
return(i);
}
int _tmain(int argc, _TCHAR* argv[])
{
system("cls");
PrintMenu();
return 0;
}