Разработка программы задачи методом объектно-ориентированного программирования

Страницы работы

Содержание работы

Вариант №6

Задание курсовой работы:

Имеются данные о поставщиках: наименование поставщика, обозначение изделия, мощность поставщика (в шт.). Имеется справочник потребности: обозначение изделия, наименование , потребность потребителя ( а штуках). Определить изделия по задаваемому по запросу поставщику, по которым потребности превышают мощности.

Организационная структура программы

Существует несколько этапов разработки программы задачи методом объектно-ориентированного программирования:

1.  Главное меню должно содержать опции, соответствующие названиям документов:

·  Справочник поставщиков,

·  Справочник потребности,

·  Расчет.

2.  Пользователь программы предлагает выполнять с помощью подменю следующие операции над исходными документами («Справочник поставщиков», «Справочник потребности»):

·  Ввод данных,

·  Поиск данных в документах,

·  Замена содержимого документов,

·  Удаление данных в документах.

3.  Для вывода «Расчета» используются опции главного меню.

4.  На экран должны выводится документы с наименованиями и значениями реквизитов, а также с наименованием выполняемой операции.

Структура программы состоит из двух видов файлов: файл интерфейса (файл заголовков) и файл реализации (файл кодов).

Для этой программы: для класса ind – файлы index.hpp и index.cpp, для класса post – post.hpp и post.cpp, для класса potr – potr.hpp и potr.cpp, для класса itog – itog.hpp и itog.cpp. Файл управления upr.cpp содержит внешние функции: main, menu, podmenu, необходимые для управления программой.

В программе используются следующие классы: post, potr, itog, ind. Класс itog является производным от классов post и potr. Эти классы содержат реквизиты документа:

класс post – char izd[5], char naim[30], float mosh;

класс potr – char izd[5], char nizd[30];float potreb;

класс itog - char izd [5], char naim[30], char nizd[30], float mosh, float potreb, float itog.

Класс ind является базовым для этой программы и определяет специфику базы данных, в нем содержаться общие части классов post и potr, относящиеся к индексному массиву.

Структура программы  (иерархия классов) будет выглядеть следующим образом:

                            index

                             /     \

                         post    potr

                             \     /

                              itog

                                |

                файл управления(upr)

Рассмотрим базовый класс index (файл управления):

index.hpp

#ifndef index_hpp

#define index_hpp

#include <conio.h> // подключение библиотеки видео функций

#include <iostream.h> //подключение библиотеки функций ввода/вывода

#include <string.h> // подключение библиотеки функций обработки строк

const int max_mass=100;

const int max_pole=10;

class ind   //определение базового класса

{

private:        //закрытые элементы класса

struct tip_index           //индексный массив

{

char kluch[max_pole];     //ключ записи

int nomer;            //номер записи в файле данных

}

index [max_mass];

int kol;   // количество элементов индексного массива

public:   // защищенные элементы класса

char*imf;        // имя файла данных

ind(char*im):imf(im)             // конструктор базового класса

{

kol=0;

}

void init_ind(int,char*); // инициализация элемента индексного массива, принимает номер

//записи и значение ключа

void init_kol(int); ); // инициализация количества элементов

int dob_ind(char*); *); // добавление нового элемента, принимает

//значение ключа записи, возвращает номер записи файла

int poisk_ind(char*,int,int&); // поиск элемента массива, принимает значение

//ключа записи, индекс элемента начала поиска, возвращает

// номер записи файла и соответствующий индекс элемента

void cor_ind(int,char*); // корректировка массива, принимает индекс элемента

//и значение ключа записи

};

#endif

index.cpp

#include "index.hpp"   // подключение файла заголовков index.hpp

void ind::init_ind(int i, char*kl)   // функция создания i –го элемента массива

{                            // i – номер записи файла, kl – значение ключа записи

strcpy(index[i].kluch,kl);  // копирование kl в поле kluch

index[i].nomer=i;   // копирование i в поле nomer

}

void ind::init_kol(int k)   // функция инициализации количества

элементов массива

{kol=k;}

int ind::dob_ind(char*kl)   // функция поиска добавляемой записи в массиве

{                // kl – значение ключа записи

int nom;

for (int i=0; i<kol; i++)  // поиск номера добавляемой записи

if (index[i].kluch[0]=='\0')   // добавление на место пустой записи

{                 // корректировка элемента массива

strcpy(index[i].kluch,kl);

return(index[i].nomer);    // возврат номера добавляемой записи

}

strcpy(index[kol].kluch,kl);   // добавление в конец файла

index[kol].nomer=kol;  // корректировка элемента массива

nom=kol;

kol++;    // корректировка количества элементов

return(nom);  //возврат номера добавляемой записи

}

int ind::poisk_ind(char*kl,int i,int&nomer)   // функция поиска номера записи

{                       // kl – значение ключа, i – индекс элемента начала поиска

while (i<kol)    // int& nomer – возврат номера записи

{if (index[i].kluch[0]!='\0')

{if (!strcmp(kl,index[i].kluch))

{nomer=index[i].nomer;

return(i);  // возврат индекса элемента массива

}

}

i++;

}

return(-1);  // возврат -1, если запись не найдена

}

void ind::cor_ind(int i,char*kl)   // функция корректировки элемента индексного массива

{           // функция корректировки элемента индексного массива

strcpy(index[i].kluch,kl);        // копирование kl в поле kluch

}

Рассмотрим производные классы post и potr:

Так для обработки «Справочника поставщиков», который имеет вид:

СПРАВОЧНИК ПОСТАВЩИКОВ       Поиск

Наим. поставщика :       ############

Код изделия :                 ##########

Мощность поставщика :###########

post.hpp   -   файл интерфейса производного класса

#ifndef post_hpp

#define post_hpp

#include <fstream.h>

#include <stdlib.h>  // подключение библиотеки преобразования символов и

//строк в числа и обратно  

#include <dos.h>

#include "index.hpp"  // подключение файла заголовков index.hpp

class post:public ind  // определение производного класса post

{                            //простое наследование с атрибутом public

protected:  // защищенные элементы класса

char naim[30];  //наименование поставщика

char izd[5];   //код изделия

float mosh;  //мощность поставщика

public:  // открытые элементы класса

post(char*im):ind(im)  // конструктор производного класса akt

 {                                     // вызывает конструктор базового класса

izd[0]='\0';                       // и инициализирует собственные элементы

naim[0]='\0';

mosh=0;

}                   // прототипы элементов-функций класса:

void init();   //инициализация индексного массива

void sozdanie();    // ввод новых документов и запись в файл

void prosmotr();  //просмотр данных в документе

void correct(int);  // корректировка документов (замена, удаление

protected:   // защищенные элементы-функции класса

void zapis_zap(int);    // запись записи в файл

void chtenie_zap(int);  //чтение записи из файла

private:   // закрытые элементы-функции класса

void formecran(char*podmenu);    // вывод формы документа

void vvod();        // ввод содержимого документа

void vyvod();     // вывод содержимого документа

};

#endif

post.cpp

#include "post.hpp"

Похожие материалы

Информация о работе