Курсовая работа коммунальная компания. Комунальные услуги упр компании. Разработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании
Скачать 192.38 Kb.
|
Формальное описание класса «Управляющей компании» unit YpravKomp; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dom, Agent; type TYpravKomp = class private name : string; //название компании countDom: integer; Agent: TAgent;//Агент для реализации алрессной очереди firsAgent: TAgent; lastAgent: TAgent; public constructor Create(newName:string); //Создание управляющей компании function getFirstAg(): TAgent; //получение первого агента function getlastAg(): TAgent; //получение последнего агента procedure AddDom(Ylica : string; number : integer); //добавление дома function DelDom() : boolean; //удаление дома function FindDom(Ylica : string; number : integer) : TDom; //Найти дома по улице и номеру function GetCountDom() : integer; //получение кол-ва домов function GetAllData() : string; //получить всю информацию function GetAllPlata : integer; //получение платы всей управляющей компании procedure SaveTo(namef : string); //сохранение procedure LoadFrom(namef: string); //загрузка Формальное описание класса «Дом» private Ylica: string; //Улица и номер дома number: integer; Count: integer; //кол-во квартир Arr: Array [0..2] of TKvartira; //набор квартир public constructor Create(newYlica : string; newnumber: integer); //создание дома function AddKvartira(newCountnumber : integer; newCountPlata : integer) : boolean; //добавить квартиру function DeleteKvartira(NumberDelete : integer) : boolean; //удалить квартиру с номером function getnumber() : string; //получить номер дома function FindKv(numberfind : integer) : boolean; //найти квартиру function getYlica() : string; //Получить улицу дома procedure setnumber(newnumber : integer); //Поменять номер дома procedure setYlica(newYlica : string); //Поменять улицу дома function getAllKvartira(): string; //Получить информацию о квартирах function getAllKvPlata() : integer; //Получить плату по всем квартирам дома procedure KvToGrid(); //Получить запись в таблицу Формальное описание класса «Квартира» public constructor Create(thisnumber : integer; thisPlata : integer);//создать квартиру function getNumber() : string; //получить номер квартиры procedure setnumber(newNumber : integer); //установить номер квартиры procedure setPlata(newPlata : integer); //установить плату function getPlata() : integer; //вывести плату function getInfoKv() : string; //получить информацию по квартире Описание демонстрационного модуля Для поставленной задачи была разработана следующая форма: -Форма содержит основные параметры для работы с программой Рис. 8. Форма 1 Компонент «Label» на форме предназначен для отображения текста, который не будет меняться в течение работы программы. Это текст «Информация о доме» находящийся над таблицей отображающей риелторов, текст «Информация о квартирах» находящийся над таблицей отображающей клиентов. Ещё один компонент «Label» на форме предназначен для отображения текста, который будет меняться в течение работы программы. Это текст «Общая плата». Компонент «TextField» на Форме предназначен для ввода улицы, номера дома, номера квартиры. Ввод осуществляется через строку. Вводимые данные в программе представляются типом String. В программе присутствует контроль ввода, который не позволяет вводить определенные символы. Ещё один компонент «Edit» на Форме предназначен для ввода цены сделки с клиентом. Ввод осуществляется через строку. Вводимые данные в программе представляются типом String. В программе присутствует контроль ввода, который не позволяет вводить определенные символы. Компонент «Button» реализует стандартную кнопку Windows. Основное событие кнопки - onClick, действие кнопки, которое вызывается всякий раз, когда кнопка нажимается.. На Форме компонент «Button» используется для инициирования таких событий как: -Добавление квартир в упорядоченный список - Добавление дома -Добавление квартиры - Удаление выбранного дома - Удаление выбранной квартиры - Сохранение в файл - Загрузка из файла Компонент «StringGrid» отображает данные о домах и квартирах в табличной форме. Ячейки компонента содержат данные, имеющие тип String. Компонент «MainMenu» добавляет к программе главное меню, без которого не обходятся многие приложения. Меню программы включает следующие опции: -Сохранение; -Загрузка; Компонент «SaveDialog» используется для выбора пользователем имени файла, предназначенного для сохранения информации о домах и квартирах. Компонент «OpenDialog» используется для выбора пользователем имени файла, предназначенного для открытия информации о домах и квартирах. Список реализованных обработчиков: procedure AddDomClick(Sender: TObject); //Кнопка добавления дома procedure AddKvClick(Sender: TObject); //Кнопка добавления квартиры procedure DelDomClick(Sender: TObject); //Кнопка удаления дома procedure DelKvClick(Sender: TObject); //Кнопка удаления кваритры procedure DomGMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //Вывод информации о доме при клике на него procedure FormCreate(Sender: TObject); //Метод вызывающийся procedure KvarGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); //Выбор квартиры procedure KvEditKeyPress(Sender: TObject; var Key: char); //запрет лишних символов procedure MenuItem1Click(Sender: TObject); //Сохранение procedure MenuItem2Click(Sender: TObject); //Загрузка procedure NumEditKeyPress(Sender: TObject; var Key: char); //запрет лишних символов procedure PlataEditKeyPress(Sender: TObject; var Key: char); //запрет лишних символов procedure YlicaEditKeyPress(Sender: TObject; var Key: char); //запрет лишних символов Структура проекта Lazarus - это специальная программа с интегрированной (свободной) средой для разработки на основе компилятора Free Pascal. Lazarus — программа с полностью открытым исходным кодом, которая направлена на обеспечение библиотек класса Free Pascal. Подходит для всех разработчиков и особенно для тех, кто намерен создавать программы с нуля. Интерфейс программы очень прост, как для новичков, так и для тех кто уже занимается программированием на профессиональном уровне. Любая программа в Lazarus состоит из каталогов и файлов проекта. Каждый из каталогов и файлов выполняет свою задачу. В моём случае список каталогов проекта имеет вид: Все файлы с кодом хранятся в корне директории Папка lib, которая нужна для компиляции После сборки проекта из всех файлов проекта создаётся единый исполняемый файл с расширением .exe. Рис. 9. Список каталогов Список литературы Блох, Дж. Pascal. Эффективное программирование / Дж. Блох ; перевод В. Стрельцов ; под редакцией Р. Усманов. — 2-е изд. — Саратов : Профобразование, 2019. — 310 c. Вирт, Никлаус Алгоритмы и структуры данных / Никлаус Вирт ; перевод Ф. В. Ткачева. — 2-е изд. — Саратов : Профобразование, 2019. — 272 c. Козин, А.Н. Объектно-ориентированное программирование. Учебно-методическое пособие / А.Н. Козин, Е.А. Якунина. – Казань : УВО "Университет управления "ТИСБИ", 2020. – 252 с. Козин, А.Н. Структуры и алгоритмы обработки данных. Часть 1. Базовые структуры: стеки, очереди, списки. Учебно-методическое пособие / А.Н. Козин, Л.Б. Таренко. – Казань : УВО "Университет управления "ТИСБИ", 2017. – 108 с. Козин, А.Н. Структуры и алгоритмы обработки данных. Часть 2. Усложненные структуры данных. Теория и методика обучения. Учебно-методическое пособие / А.Н. Козин, Л.Б. Таренко. – Казань : УВО "Университет управления "ТИСБИ", 2018. – 148 с. Козин, А.Н. Структуры и алгоритмы обработки данных. Часть 3. Поиск и сортировка данных. Теория и методика обучения. Учебно-методическое пособие / А.Н. Козин, Л.Б. Таренко. – Казань : УВО "Университет управления "ТИСБИ", 2020. – 98 с. Лебедева, Т. Н. Теория и практика объектно-ориентированного программирования : учебное пособие / Т. Н. Лебедева. — 2-е изд. — Челябинск, Саратов : Южно-Уральский институт управления и экономики, Ай Пи Эр Медиа, 2019. — 221 c. Мейер, Б. Объектно-ориентированное программирование и программная инженерия / Б. Мейер. — 3-е изд. — Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Эр Медиа, 2019. — 285 c. Мейер, Б. Инструменты, алгоритмы и структуры данных : учебное пособие / Б. Мейер. — 3-е изд. — Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2021. — 540 c. Сорокин, А. А. Объектно-ориентированное программирование. LAZARUS (Free Pascal) : лабораторный практикум / А. А. Сорокин. — Ставрополь : Северо-Кавказский федеральный университет, 2014. — 216 c. Полный листинг программы unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, Grids, StdCtrls, MaskEdit, Menus, ypravkomp, kvartira, dom, agent; type { TForm1 } TForm1 = class(TForm) AddDom: TButton; AddKv: TButton; DelKv: TButton; DelDom: TButton; NumEdit: TEdit; KvEdit: TEdit; MainMenu1: TMainMenu; MenuItem1: TMenuItem; MenuItem2: TMenuItem; OpenDialog1: TOpenDialog; PlataEdit: TEdit; KvText: TLabel; PlataText: TLabel; SaveDialog1: TSaveDialog; YlicaEdit: TEdit; Label1: TLabel; Label2: TLabel; DomG: TStringGrid; KvarGrid: TStringGrid; YlicaText: TLabel; YlicaText1: TLabel; procedure AddDomClick(Sender: TObject); procedure AddKvClick(Sender: TObject); procedure DelDomClick(Sender: TObject); procedure DelKvClick(Sender: TObject); procedure DomGMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); procedure KvarGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure KvEditKeyPress(Sender: TObject; var Key: char); procedure MenuItem1Click(Sender: TObject); procedure MenuItem2Click(Sender: TObject); procedure NumEditKeyPress(Sender: TObject; var Key: char); procedure PlataEditKeyPress(Sender: TObject; var Key: char); procedure YlicaEditKeyPress(Sender: TObject; var Key: char); procedure YlicaText1Click(Sender: TObject); private public end; var Form1: TForm1; Komp : TYpravKomp; kvar : TDom; kv : string; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin Komp := TYpravKomp.Create('Jil-stroy'); Komp.getAllData(); end; procedure TForm1.AddDomClick(Sender: TObject); begin if (YlicaEdit.Text <> '') and (NumEdit.Text <> '') then Komp.AddDom(YlicaEdit.Text, strtoInt(NumEdit.Text)); Komp.getAllData(); end; procedure TForm1.DelDomClick(Sender: TObject); var i,j : integer; begin with KvarGrid do begin for i:=1 to RowCount-1 do for j:=0 to ColCount-1 do Cells[j,i] := ''; end; with DomG do begin for i:=1 to RowCount-1 do for j:=0 to ColCount-1 do Cells[j,i] := ''; end; If (Komp.DelDom() = true) then showMessage('Успешно удалено из очереди') else showMessage('Ошибка удаления'); Komp.getAllData(); end; procedure TForm1.AddKvClick(Sender: TObject); begin if (Kvar <> nil) then begin if (Kvar.FindKv(strtoint(KvEdit.Text)) = false) then begin if (Kvar.addKvartira(strtoint(kvEdit.Text), strtoint(PlataEdit.Text)) = true) then ShowMessage('Успешно добавлено') else ShowMessage('Ошибочка'); Kvar.KvToGrid(); end else showMessage('Такая квартира уже есть'); end else ShowMessage('Не выбран дом'); Komp.getAllData(); end; procedure TForm1.DelKvClick(Sender: TObject); var i,j : integer; begin with KvarGrid do begin for i:=1 to RowCount-1 do for j:=0 to ColCount-1 do Cells[j,i] := ''; end; if (kv <> '') then begin if (kvar.DeleteKvartira(strtoint(kv)) = true) then ShowMessage('Квартира удалена') else showMessage('Ошибка удаления'); Komp.getAllData(); kvar.KvToGrid(); end; end; procedure TForm1.MenuItem1Click(Sender: TObject); begin if (SaveDialog1.Execute) then Komp.SaveTo(SaveDialog1.Filename); end; procedure TForm1.MenuItem2Click(Sender: TObject); begin if (OpenDialog1.Execute) then begin Komp := TYpravKomp.Create('Jil-stroy'); Komp.LoadFrom(OpenDialog1.Filename); end; end; procedure TForm1.NumEditKeyPress(Sender: TObject; var Key: char); begin if not (key in [ #48..#57,#8]) then key := #0; if (key in [ #48..#57]) then if (strtoInt(NumEdit.Text + key) > 300) then begin ShowMessage('Слишком большое число'); key := #0; end; end; procedure TForm1.PlataEditKeyPress(Sender: TObject; var Key: char); begin if not (key in [ #48..#57,#8]) then key := #0; if (key in [ #48..#57]) then if (strtoInt(PlataEdit.Text + key) > 30000) then begin ShowMessage('Слишком большое число'); key := #0; end; end; procedure TForm1.YlicaEditKeyPress(Sender: TObject; var Key: char); begin if not (key in [#8, ' ', #63]) then key := #0; end; procedure TForm1.YlicaText1Click(Sender: TObject); begin end; procedure TForm1.DomGMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow,i,j: Integer; begin DomG.MouseToCell(X, Y, ACol, ARow); DomG.Col:=ACol; DomG.Row:=ARow; if (Acol <> 0) then Acol := 0; with DomG do if (ARow > 0) then begin if (Cells[ACol+1, ARow] <> '') then if (Komp.FindDom(Cells[ACol, ARow], strtoInt(Cells[ACol+1, ARow])) <> nil) then begin with KvarGrid do begin for i:=1 to RowCount-1 do for j:=0 to ColCount-1 do Cells[j,i] := ''; end; kvar := Komp.FindDom(Cells[ACol, ARow], StrtoInt(Cells[ACol+1, ARow])); Kvar.KvToGrid(); kv := ''; end else ShowMessage('Ошибочка'); end; end; procedure TForm1.KvarGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin KvarGrid.MouseToCell(X, Y, ACol, ARow); KvarGrid.Col:=ACol; KvarGrid.Row:=ARow; if (Acol <> 0) then Acol := 0; with KvarGrid do if (ARow > 0) and (Kvar <> nil) then begin if (Kvar.FindKv(strtoint(Cells[ACol, ARow])) = true) then begin kv := Cells[ACol, ARow]; end else ShowMessage('Ошибочка'); end; end; procedure TForm1.KvEditKeyPress(Sender: TObject; var Key: char); begin if not (key in [ #48..#57,#8]) then key := #0; if (key in [ #48..#57]) then if (strtoInt(KvEdit.Text + key) > 300) then begin ShowMessage('Слишком большое число'); key := #0; end; end; end. unit YpravKomp; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dom, Agent; type TYpravKomp = class private name : string; //название компании countDom: integer; Agent: TAgent;//Агент для реализации алрессной очереди firsAgent: TAgent; lastAgent: TAgent; public constructor Create(newName:string); function getFirstAg(): TAgent; function getlastAg(): TAgent; procedure AddDom(Ylica : string; number : integer); function DelDom() : boolean; |