Главная страница
Навигация по странице:

  • Формальное описание класса «Дом»

  • Формальное описание класса «Квартира»

  • Описание демонстрационного модуля

  • Рис. 8. Форма 1

  • Структура проекта

  • Рис. 9. Список каталогов Список литературы

  • Полный листинг программы

  • Курсовая работа коммунальная компания. Комунальные услуги упр компании. Разработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании


    Скачать 192.38 Kb.
    НазваниеРазработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании
    АнкорКурсовая работа коммунальная компания
    Дата15.04.2022
    Размер192.38 Kb.
    Формат файлаdocx
    Имя файлаКомунальные услуги упр компании.docx
    ТипКурсовая
    #476802
    страница2 из 3
    1   2   3

    Формальное описание класса «Управляющей компании»

    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. Список каталогов

    Список литературы

    1. Блох, Дж. Pascal. Эффективное программирование / Дж. Блох ; перевод В. Стрельцов ; под редакцией Р. Усманов. — 2-е изд. — Саратов : Профобразование, 2019. — 310 c.

    2. Вирт, Никлаус Алгоритмы и структуры данных / Никлаус Вирт ; перевод Ф. В. Ткачева. — 2-е изд. — Саратов : Профобразование, 2019. — 272 c.

    3. Козин, А.Н. Объектно-ориентированное программирование. Учебно-методическое пособие / А.Н. Козин, Е.А. Якунина. – Казань : УВО "Университет управления "ТИСБИ", 2020. – 252 с.

    1. Козин, А.Н. Структуры и алгоритмы обработки данных. Часть 1. Базовые структуры: стеки, очереди, списки. Учебно-методическое пособие / А.Н. Козин, Л.Б. Таренко. – Казань : УВО "Университет управления "ТИСБИ", 2017. – 108 с.

    1. Козин, А.Н. Структуры и алгоритмы обработки данных. Часть 2. Усложненные структуры данных. Теория и методика обучения. Учебно-методическое пособие / А.Н. Козин, Л.Б. Таренко. – Казань : УВО "Университет управления "ТИСБИ", 2018. – 148 с.

    2. Козин, А.Н. Структуры и алгоритмы обработки данных. Часть 3. Поиск и сортировка данных. Теория и методика обучения. Учебно-методическое пособие / А.Н. Козин, Л.Б. Таренко. – Казань : УВО "Университет управления "ТИСБИ", 2020. – 98 с.

    3. Лебедева, Т. Н. Теория и практика объектно-ориентированного программирования : учебное пособие / Т. Н. Лебедева. — 2-е изд. — Челябинск, Саратов : Южно-Уральский институт управления и экономики, Ай Пи Эр Медиа, 2019. — 221 c.

    4. Мейер, Б. Объектно-ориентированное программирование и программная инженерия / Б. Мейер. — 3-е изд. — Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Эр Медиа, 2019. — 285 c.



    1. Мейер, Б. Инструменты, алгоритмы и структуры данных : учебное пособие / Б. Мейер. — 3-е изд. — Москва : Интернет-Университет Информационных Технологий (ИНТУИТ), Ай Пи Ар Медиа, 2021. — 540 c.

    2. Сорокин, А. А. Объектно-ориентированное программирование. 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;
    1   2   3


    написать администратору сайта