Вход/Регистрация
Интернет-журнал "Домашняя лаборатория", 2007 №6
вернуться

Журнал «Домашняя лаборатория»

Шрифт:

ПРОГРАММИРОВАНИЕ

Технологии компонентного программирования

Добрынин В.

Процедурное, объектно-ориентированное и компонентное программирование

Процедурное программирование

Цель данного раздела состоит в демонстрации некоторых недостатков технологии процедурного программирования.

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

// Книги и журналы (процедурное программирование)

#include <iostream.h>

#include <string.h>

#define MAX LENGTH 100 // максимальное число символов в имени

// автора или в названии издания

#define MAX ID 100 // максимальное число изданий

// Книга

typedef struct {

char szAuthor[MAX_LENGTH]; // автор

char szTitle[MAX_LENGTH]; // название

int nYear; // год издания

} Book;

// Журнал

typedef struct {

char szTitle[MAX LENGTH]; // название

int nYear; // год выпуска

int nNumber// номер;

} Journal;

// Массив изданий

typedef struct {

int nPubldx; // индекс издания (1 — книга, 2 — журнал)

void* pPub; // указатель на издание

} Pub;

Pub aPub[MAX ID];

int nNewID = 0; // индекс нового издания

// Прототипы глобальных функций

void DisplayBook(Book &book); // вывод описания книги

void DisplayJournal(Journal Sjournal); // вывод описания журнала

void NewBook; // ввод данных о новой книге

void NewJournal; // ввод данных о новом журнале

// Главная функция

void main {

Book *pBook;

Journal *pJournal;

int nMenu, flag = 1;

while(nNewID < MAX_ID && flag)

{

// Вывод пунктов меню

cout << "Новое издание. Введите: " << endl;

cout << "1 для книги,\n 2 для журнала\n 3 — выход" << endl;

// Выбор пункта меню

сin >> nMenu;

switch (nMenu)

{ case 1: NewBook; break;

case 2: NewJournal; break;

default: flag = 0; break;

}

}

// Вывод описаний изданий

for (int id = 0; id < nNewID; id++)

{

switch (aPub[id].nPubldx)

{ case 1: pBook = (Book*) aPub[id].pPub;

DisplayBook(*pBook);

delete pBook;

break;

case 2: pJournal = (Journal*) aPub[id].pPub;

DisplayJournal(*pJournal);

delete pJournal;

break;

}

}

}

// Реализация глобальных функций

void DisplayBook(Book &book) {

cout << "BOOK: " << endl;

cout << "Author: " << book.szAuthor << endl;

cout << "Title: " << book.szTitle << endl;

cout << "Year: " << book.nYear << endl;

}

void DisplayJournal(Journal Sjournal) {

cout «"JOURNAL: " << endl;

cout <<"Title: " << journal.szTitle << endl;

cout << "Year: " << journal.nYear << endl;

cout << "Number: " << journal.nNumber << endl;

}

void NewBook {

char szBuffer[MAX LENGTH];

int nY;

Book* pBook = new Book;

cout << "Author: ";

cin >> szBuffer;

strcpy(pBook —> szAuthor, szBuffer);

  • Читать дальше
  • 1
  • ...
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: