Вариант №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"
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.