Класс «человек» должен содержать информацию об имени и фамилии (текст), адрес (текст), возраст (целое число). Класс будет выглядеть:
class Man{
public:
char Name[8];
char Address[10];
int Age;
};
Класс «клиент» должен обладать информацией о коде клиента в архиве страховой фирмы (предположим, что это постое целое число). Основную информацию наследуем от класса Man:
class Client : public Man{
public:
int ClientCode;
};
Класс «страховая фирма» должен обладать информацией о названии фирмы (текст), юридический адрес (текст), номер лицензии (целое число). Тогда:
class Firm{
public:
char FirmName[8];
char FirmAddress[10];
int LicNumber;
};
Класс «страховой полис» помимо информации о человеке и страховой фирме, наследуемой от классов Man и Firm, должен обладать информацией о сумме страховки (предположим целое число), о страховом агенте, выдавшем данный страховой полис (текст). Тогда:
class Document : public Client, public Firm{
public:
int Summa;
char Agent[8];
}
Определим теперь какие методы будут иметь используемые классы. Классы Man, Client и Firm введены как образующие информационную структуру класса Document, поэтому нет необходимости для введения в них каких-либо методов. В классе Document вводим два метода InputDocument и PrintLineFromTable, соответственно для поэлементного ввода и построчного формирования выводимой таблицы. Для управления массивом объектов класса Document вводится класс ListDocument. В нем создается массив Records, содержащие объекты класса Document. Количество определенных объектов (с которыми можно работать) находится в переменной countRecord.
Класс ListDocument содержит следующие методы:
· LoadFromFile – считывает сохраненные ранее данные;
· PrintTable – распечатывает на экране таблицу;
· AddDocument – добавляет в массив новый страховой полис;
· EditDocument – редактирует в массиве выбранный страховой полис;
· DeleteDocument - удаляет из массива выбранный страховой полис;
· SavetoFile – сохраняет данные для последующего использовоания.
Метод LoadFromFile вызывается из конструктора, а метод SavetoFile из деструктора, поэтому происходит запоминание результатов предыдущей работы.
Меню должно быть реализовано в теле основной программы.
Следующая программа иллюстрирует один из способов формирования массива объектов и работу с файлами на диске.
В качестве базового класса объявлен класс В с элементом-данным строкового типа «ФИО». Производный класс D добавляет к сотрудникам числовое поле «Надбавка к окладам» и переопределяет виртуальный метод печати базового класса.
#include <iostream.h> // пример записи/считывания массива с объектами
#include <stdio.h> // поржденными классом в файл (используем наследование)
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
class B // Базовый класс
{
public:
char name[50]; // ФИО
B(){}; //конструктор без параметров, необходим при иерархии классов
B(char *t) //конструктор с параметрами
{
strcpy(name,t);
}
};
class D: public B // производный класс
{
public:
int y; // надбавка в процентах
D() //конструктор без параметров, необходим при иерархии классов
{};
D(int r, char* s ): B(s) //конструктор с параметрами
{ y=r;
cout<<"Отработал конструктор с пароаметрами!!! Press any key..."<<endl;
}
void print(void) // метод печати
{
cout <<"name="<<name<<" надбавка="<<y<< endl;
}
};
class List
{
public:
D s[5]; // создали массив для объектов такого типа
void createFile();
void printList();
};
void List::createFile()
{
int n; // объявили переменную для реального размера списка
char fname[10]; // строка для ввода имени файла
FILE *f; // объявляем указатель на файл
cout<<"\n Формирование файла!!! Введи имя файла";
cin>>fname;
f=fopen(fname,"w");
if(f==NULL) // блок контроля за открытием файла
{
cout<<"нельзя открыть файл!, "<<endl;
getch();
return;
}
/************************************/
//Формирование списка
cout<<endl<<"введите размер списка: ";
cin>>n;
cout<<"\n";
for (int i=0;i<n;i++)
{
cout<<"\n введите имя:"<<endl;
fflush(stdin);
cin>>s[i].name;
cout<<"\n надбавка: ";
cin>>s[i].y;
fwrite(&s[i],sizeof(s[i]),1,f);
};
cout<<"\n ФАЙЛ СФОРМИРОВАН записано"<< n <<" компонент. Press any key...";
1. Касаткин А.И., Вальвачев А.Н. Профессиональное программирование на языке Си. От Turbo C к Borland C++: Справочное пособие. Мн.: Выш. школа, 1992, 320с.
2. Касаткин А.И. Профессиональное программирование на языке Си. Управление ресурсами: Справочное пособие. Мн.: Выш. школа, 1992, 432с.
3. Касаткин А.И. Профессиональное программирование на языке Си. Системное программирование. Мн.: Выш. школа, 1992, 432с.
4.Цимбал А.А., Майоров А.Г., Козодаев М.А. Turbo C++: язык и его применение. ‑М.: "‑жен Ай Лтд.", 1993.
5. Страуструп Б. Язык программирования С++.я‑М.:Радио и связь, 1991.
6. Вайнер Р., Пинсон Л. С++ изнутри. ‑Киев: ‑Софт, 1993.
7. Бабэ Б. Просто и ясно о Borland C++. ‑М.: Бином, 1995.
8. Скляров В.А. Язык С++ и объектно-ориентированное программирование. Минск, Вышэйшая школа, 1997
9. Герберт Шилдт Программирование на Borland C++. –Мн., ПОПУРРИ, 1998.
9.Джефф Элджер «С++» Бибилиотека программиста, Ст. петербург, «ПИТЕР», 2000.
10. Крячков А.В. и др. Программирование на С и С++ (практикум). М.: Горячая линия-Телеком, 2000
11. Карпов Б. Баранова Т. С++ - специальный справочник. ПИТЕР, 2001
13. Динман М. С++. Освой на примерах. Санкт-Петербург «БХВ Петербург», 2006.
14. Либерти Д. Джонс Б. Освой самостоятельно С== за 21 день. М. «Вильямс», 2006.
15. Шилдт Г. Справочник программиста. М. «Вильямс», 2006.
Методические пособия
1. Бусько В.Л., Корбит А.Г., Коренская И.Н., Кривоносова Т.М., Убийконь В.И. Лабораторный практикум Основы программирования на алгоритмическом языке С. Мн.:Ротапринт БГУИР.2003
2. Бусько В.Л., Корбит А.Г., Кривоносова Т.М. Основы алгоритмизации программирования. Конспект лекций для студентов всех специальностей и форм обучения БГУИР. Мн. БГУИР, 2004
3. Корбит А.Г., Кривоносова Т.М. Лабораторный практикум по программированию. Основы объектно-ориентированного программирования. Мн.: БГУИР, ИИТ (электронный вариант) 2004.