Файл: Курсовой проект (Пояснительная записка) Учебная дисциплина Основы алгоритмизации и программирования Тема Разработка приложения для учета программного обеспечения Выполнил(а) учся гр. По21 Корзун А. И.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 80

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.




Рисунок 3.1 - Структура программного средства

Модуль главного окна программы дает возможность использовать основной функционал программы: просматривать записи, выбирать нужные. Также позволяет сортировать записи в таблице по нужному типу.

Модуль работы с БД дает пользователю возможность использовать модули для управления данными в таблице приложения. Подмодули добавление, редактирование, удаление позволяют выполнять основные функции для управления данными в таблице. Пользователь может, как добавить, так и изменить существующую запись, а также удалить.

В разделе поиска, пользователь может искать нужные записи. Подмодуль отчетность предоставляет пользователю предварительно посмотреть отчет в Excel и распечатать его в случае необходимости.

3.3 Разработка схемы алгоритма


На рисунке 3.2 представлена обобщенная схема алгоритма добавления записей в базу данных.

После открытия новой формы добавления ПО, пользователю предлагается ввести нужные данные в DBEdit.

Далее данные поступают в data set, после чего идет проверка введенных данных. Если данные не верны, пользователю отобразится ошибка, и данные не будут записаны.

Если же все данные верны, они передаются в базу данных, и записываются в таблицу.



Рисунок 3.2 - Блок-схема алгоритма

3.4 Разработка интерфейса приложения и программного кода


Компоненты, которые будут использованы для реализации приложения, представлены ниже:

Главный модуль программы для работы с БД представлен на рисунке 3.3



Рисунок 3.3 – Главное окно программы

На Form1 были использованы следующие компоненты:

  • MainMenu1 – осуществляет главное меню программы, без которого не обходится ни одна программа (рисунок 3.4)



Рисунок 3.4 - Элементы компонента MainMenu

Рассмотрим фрагменты кода каждого элемента MainMenu:

Добавить:

void __fastcall TForm1::N4Click(TObject *Sender)

{

fDM->ADOQuery1->Append();

fDM->VN->Append();

fDM->Post->Append();

Form2->ShowModal();

}


Редактировать:

void __fastcall TForm1::N5Click(TObject *Sender)

{

Form2->ShowModal();

}

Удалить:

void __fastcall TForm1::N6Click(TObject *Sender)

{

fDM->ADOQuery1->Delete();

}

Выход:

void __fastcall TForm1::N8Click(TObject *Sender)

{

Form1->Close();

}

Отчетность:

void __fastcall TForm1::Excel1Click(TObject *Sender)

{

Variant App,Books,Book,Sheets,Sheet,Cells,Cell;//Переменные для работы с OLE

int ind,kd;

int ob;
App=CreateOleObject("Excel.Application");//Создаем объект Excel

Books=App.OlePropertyGet("Workbooks");//Создаем объект книга

Books.OleProcedure("Add");//добавляем книгу

Book=Books.OlePropertyGet("Item",1);//задаем количество книг

Sheets=Book.OlePropertyGet("Worksheets");//создаем объект лист

Sheet=Sheets.OlePropertyGet("Item",1);//указываем количество листов

Sheet.OlePropertySet("Name",WideString("Отчет1"));//называем лист «Отчет1»

Cell=Sheet.OlePropertyGet("Cells");//создаем объект строка

Cell.OlePropertyGet("Font").OlePropertySet("Size",10);//задаем размер шрифта
Cell.OlePropertyGet("Item",1,1).OlePropertySet("Value",WideString("Лицензионное ПО"));

Cell.OlePropertyGet("Item",1,1).OlePropertyGet("Font").OlePropertySet("Italic",true);

Cell.OlePropertyGet("Item",1,1).OlePropertyGet("Font").OlePropertySet("Size",12);
Cell=Sheet.OlePropertyGet("Range",WideString("A2:H2"));

Cell.OlePropertyGet("Borders").OlePropertySet("Weight",2);

Cell.OlePropertyGet("Font").OlePropertySet("Bold",true);

//Задаем длину столбцов

Cell.OlePropertyGet("Item",1,1).OlePropertySet("ColumnWidth",5);

Cell.OlePropertyGet("Item",1,2).OlePropertySet("ColumnWidth",40);

Cell.OlePropertyGet("Item",1,3).OlePropertySet("ColumnWidth",20);

Cell.OlePropertyGet("Item",1,4).OlePropertySet("ColumnWidth",30);

Cell.OlePropertyGet("Item",1,5).OlePropertySet("ColumnWidth",30);

Cell.OlePropertyGet("Item",1,6).OlePropertySet("ColumnWidth",10);

//Задаем название столбцам

Cell.OlePropertyGet("Item",1,1).OlePropertySet("Value",WideString("Инвентарный номер"));

Cell.OlePropertyGet("Item",1,2).OlePropertySet("Value",WideString("Название"));

Cell.OlePropertyGet("Item",1,3).OlePropertySet("Value",WideString("Краткое название"));

Cell.OlePropertyGet("Item",1,4).OlePropertySet("Value",WideString("Тип"));

Cell.OlePropertyGet("Item",1,5).OlePropertySet("Value",WideString("Производитель"));

Cell.OlePropertyGet("Item",1,6).OlePropertySet("Value",WideString("Цена ПО"));
fDM->ADOQuery1->First();
ind=2;

while (!fDM->ADOQuery1->Eof)

{
Cell.OlePropertyGet("Item",ind,1).OlePropertySet("Value",((WideString)fDM->ADOQuery1Инвентарныйномер->Text));

Cell.OlePropertyGet("Item",ind,1).OlePropertyGet("Font").OlePropertySet("Size",12);

Cell.OlePropertyGet("Item",ind,1).OlePropertyGet("Font").OlePropertySet("Bold",true);

Cell.OlePropertyGet("Item",ind,2).OlePropertySet("Value",((WideString)fDM->ADOQuery1Название->Text));

Cell.OlePropertyGet("Item",ind,2).OlePropertyGet("Font").OlePropertySet("Size",12);

Cell.OlePropertyGet("Item",ind,2).OlePropertyGet("Font").OlePropertySet("Bold",true);

Cell.OlePropertyGet("Item",ind,3).OlePropertySet("Value",((WideString)fDM->ADOQuery1Краткоеназвание->Text));

Cell.OlePropertyGet("Item",ind,3).OlePropertyGet("Font").OlePropertySet("Size",12);

Cell.OlePropertyGet("Item",ind,4).OlePropertySet("Value",((WideString)fDM->ADOQuery1Тип->Text));

Cell.OlePropertyGet("Item",ind,4).OlePropertyGet("Font").OlePropertySet("Size",12);

Cell.OlePropertyGet("Item",ind,5).OlePropertySet("Value",((WideString)fDM->ADOQuery1Производитель->Text));

Cell.OlePropertyGet("Item",ind,5).OlePropertyGet("Font").OlePropertySet("Size",12);

Cell.OlePropertyGet("Item",ind,6).OlePropertySet("Value",((WideString)fDM->ADOQuery1Цена ПО->Text));

Cell.OlePropertyGet("Item",ind,6).OlePropertyGet("Font").OlePropertySet("Size",12);
fDM->ADOQuery1->Next();

ind=ind+1;

}

App.OlePropertySet("Visible",true);

}


Выход:

void __fastcall TForm1::N3Click(TObject *Sender)

{

Form1->Close();}

Так же для удобства работы приложения будут использоваться компоненты:

  • Panel1, Panel2, Panel3 – панель, на которой расположены компоненты программы

  • Bevel1, Bevel2 – Создание обособленной рамки для удобства интерфейса.

  • Button1 (Редактировать) – осуществляет открытие специальной формы, которая отвечает за редактирование данных. Фрагмент кода:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form2->ShowModal();

}



Рисунок 3.5 – Кнопка редактирования

  • Button2 (Добавить) - осуществляет открытие специальной формы, которая отвечает за добавление данных. Фрагмент кода:

void __fastcall TForm1::RadioButton4Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY [Цена ПО] Asc");

fDM->ADOQuery1->Open();

}



Рисунок 3.6 – Кнопка добавления

  • Button3 (Удалить) – осуществляет удаление данных из DBGrid. Фрагмент кода:

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY [Цена ПО] Desc");

fDM->ADOQuery1->Open

}



Рисунок 3.7 - Кнопка удаления

  • Button4 (Поиск) – осуществляет открытие формы поиска, которая работает по выбору категории. Фрагмент кода:

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Form3->Show();

}



Рисунок 3.8 – Кнопка поиска

  • Button5 (Обновить таблицу) – осуществляет обновление таблицы. Фрагмент кода:

void __fastcall TForm1::Button5Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("Select * FROM [Лицензионное ПО]");

fDM->ADOQuery1->Open();

}




Рисунок 3.9 – Кнопка обновления таблицы

Компоненты RadioButton представлены на рисунке 3.10:



Рисунок 3.10 – Компоненты сортировки

  • RadioButton1 – осуществляет отображение категории данных «Поставщик» в компоненте DBGrid2

  • RadioButton2 – осуществляет отображение категории данных «Внедрение» в компоненте DBGrid2



Рисунок 3.11 – Кнопки «Поставщик» и «Внедрение»

  • RadioButton3 (По высокой цене) – осуществляет сортировку данных по высокой цене в DBGrid1

  • RadioButton4 (По низкой цене) – осуществляет сортировку по низкой цене в компоненте DBGrid1

  • RadioButton5 (От а до я) – осуществляет сортировку в алфавитном порядке в компоненте DBGrid1

  • RadioButton6 (От я до а) – осуществляет сортировку в обратном алфавитном порядке в компоненте DBGrid1

  • RadioButton7 (По номеру сверху) – осуществляет сортировку по номеру сверху в компоненте DBGrid1

  • RadioButton8 (По номеру снизу) – осуществляет сортировку по номеру снизу в компоненте DBGrid1

Фрагмент кода RadioButton

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

if (RadioButton1->Checked) {

DBGrid2->DataSource=fDM->Post1;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton2Click(TObject *Sender)

{

if (RadioButton2->Checked) {

DBGrid2->DataSource=fDM->VN1;

}

}

void __fastcall TForm1::Button3Click(TObject *Sender)

{

fDM->ADOQuery1->Delete();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton3Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY [Цена ПО] Desc");

fDM->ADOQuery1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton4Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY [Цена ПО] Asc");

fDM->ADOQuery1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton7Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY [Инвентарный номер] Asc");

fDM->ADOQuery1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton8Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY [Инвентарный номер] Desc");

fDM->ADOQuery1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton5Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY Название Asc");

fDM->ADOQuery1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioButton6Click(TObject *Sender)

{

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add("SELECT * FROM [Лицензионное ПО] ORDER BY Название Desc");

fDM->ADOQuery1->Open();

}


На Form2 были использованы следующие компоненты:

  • DBGrid1, DBGrid2 – компонент визуализации данных

  • Splitter1 – разделяет компоненты DBGrid1 и DBGrid2

  • Bevel1, Bevel2, Bevel3 – Создание обособленной рамки для удобства интерфейса

Модуль добавления и редактирования данных (рисунок 3.12):



Рисунок 3.12 – Модуль добавления и редактирования данных

  • Button1 (Сохранить и выйти) – осуществляет сохранение данных и выход из формы при редактировании. Фрагмент кода:

    void __fastcall TForm2::Button1Click(TObject *Sender)

    {

    if (fDM->ADOQuery1->Modified) {

    fDM->ADOQuery1->Post();

    }

    if (fDM->VN->Modified) {

    fDM->VN->Post();

    }

    if (fDM->Post->Modified) {

    fDM->Post->Post();

    }

    Form2->Close();

    }

  • Button2 (Добавить ещё ПО) – осуществляет ввод данных в DBGrid1 при их добавлении. Фрагмент кода:

void __fastcall TForm2::Button2Click(TObject *Sender)

{

fDM->ADOQuery1->Append(); // Открытие объектов данных

fDM->VN->Append(); // Открытие объектов из таблицы «Внедрение»

fDM->Post->Append(); // Открытие объектов из таблицы «Поставщик»

DBEdit1->SetFocus(); // осуществление фокуса компонента

}

  • GroupBox1, GroupBox2, GroupBox3– объединение интерфейсных элементов

  • DBNavigator1 – осуществляет перемещение по записям БД

  • Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label8, Label9, Label10– текстовые метки, содержащие информацию для ввода данных

  • DBEdit1, DBEdit2, DBEdit3, DBEdit4, DBEdit5, DBEdit6, DBEdit7, DBEdit8, DBEdit9, DBEdit10, DBEdit11– поля редактирования, относящиеся к компоненту DBCtrls, необходимые для ввода данных и вывод их в основной модуль программы.

Модуль осуществления поиска данных (рисунок 3.13):



Рисунок 3.13 – Поиск данных

На Form3 были использованы следующие компоненты:

  • Button1 (Поиск) – кнопка осуществления поиска. Фрагмент кода:

void __fastcall TForm3::Button1Click(TObject *Sender)

{

AnsiString query;

switch(ComboBox1->ItemIndex)

{

case 0: query="SELECT * FROM [Лицензионное ПО] WHERE Название LIKE '%"+Edit1->Text+"%'"; break;

case 1: query="SELECT * FROM [Лицензионное ПО] WHERE Тип LIKE '%"+Edit1->Text+"%'"; break;

case 2: query="SELECT * FROM [Лицензионное ПО] WHERE Производитель LIKE '%"+Edit1->Text+"%'"; break;

case 3: query="SELECT * FROM [Лицензионное ПО] WHERE [Цена ПО] LIKE '%"+Edit1->Text+"%'"; break;

}

fDM->ADOQuery1->Close();

fDM->ADOQuery1->SQL->Clear();

fDM->ADOQuery1->SQL->Add(query);

fDM->ADOQuery1->Open();

Form3->Edit1->Clear();

}