Курсовая работа коммунальная компания. Комунальные услуги упр компании. Разработка объектной программы для задачи Учета оплаты коммунальных услуг в управляющей компании
Скачать 192.38 Kb.
|
function FindDom(Ylica : string; number : integer) : TDom; function GetCountDom() : integer; function GetAllData() : string; function GetAllPlata : integer; procedure SaveTo(namef : string); procedure LoadFrom(namef: string); end; implementation uses Unit1; constructor TYpravKomp.Create(newName:string); //Создание Управляющей компании begin name := newName; countDom := 0; end; procedure TYpravKomp.LoadFrom(namef: string); var i,flag : integer; f : text; str : string; str1 , str2 : array of string; begin flag := 0; assign(f, namef); reset(f); while (not EOF(f)) do begin readln(f, str); if (str = '{') then flag := 1; if (flag = 0) then begin str1 := str.Split('|'); AddDom(str1[0], strtoint(str1[1])); str := ''; end else begin if (str = '}') then flag := 0; if (str <> '{') and (flag = 1) then begin str2 := str.Split('|'); FindDom(str1[0],strtoint(str1[1])).AddKvartira(strtoint(str2[0]), strtoInt(str2[1])); str := ''; end else str := ''; end; end; close(f); GetAllData(); end; procedure TYpravKomp.SaveTo(namef : string); //получить всю информацию var Temp : TAgent; i : integer; f : text; begin assign(f, namef); rewrite(f); Temp := Agent; while (Temp <> nil) do begin writeln(f, Temp.GetDom().getYlica() + '|' + Temp.GetDom().GetNumber()); writeln(f, '{'); write(f, Temp.getDom().GetAllKvartira()); writeln(f, '}'); Temp := Temp.getNext(); end; close(f); end; function TYpravKomp.getFirstAg(): TAgent; //получение первого агента begin result:= Agent; end; function TYpravKomp.getlastAg(): TAgent; //получение последнего агента var Temp : TAgent; begin Temp := Agent; if (Temp <> nil) then begin while (Temp.getNext() <> Nil) do Temp := Temp.getNext(); result:= Temp; end else result:= nil; end; procedure TYpravKomp.AddDom(Ylica : string; number : integer); //Добавление дома var Temp: TAgent; begin Temp := Agent; if (getLastAg() = nil) then Agent := TAgent.Create(nil, TDom.Create(Ylica,number)) else begin Temp := getLastAg; Temp.SetNext(TAgent.Create(nil, TDom.Create(Ylica, number))); end; end; function TYpravKomp.DelDom() : boolean; //удаление дома begin result := false; if (Agent <> nil) then begin Agent:= Agent.getNext(); result := true; end; end; function TYpravKomp.FindDom(Ylica : string; number : integer) : TDom;//Найти дом по улице и номеру var Temp : TAgent; begin Temp := Agent; result:= nil; if (Temp <> nil) then begin while (Temp <> nil) and ((number <> strtoInt(Temp.getDom().getnumber())) or (Ylica <> Temp.getDom().getYlica)) do Temp := Temp.getNext(); if (Temp <> nil) then result:= Temp.getDom(); end; end; function TYpravKomp.GetCountDom() : integer;//получение кол-ва домов begin result:= CountDom; end; function TYpravKomp.GetAllPlata : integer;//получение платы всей управ компанией var Temp : TAgent; begin Temp := Agent; result := 0; if (Temp = nil) then result:= 0; while (Temp <> nil) do begin result:= result + Temp.GetDom().GetAllKvPlata(); Temp := Temp.getNext(); end; end; function TYpravKomp.GetAllData() : string; //получить всю информацию var Temp : TAgent; i : integer; begin Temp := Agent; i := 1; With Form1.DomG do begin RowCount := 2; while (Temp <> nil) do begin Cells[0, i] := Temp.GetDom().getYlica(); Cells[1, i] := Temp.GetDom().GetNumber(); Cells[2, i] := inttostr(Temp.GetDom().GetAllKvPlata()); inc(i); RowCount := RowCount + 1; Temp := Temp.getNext(); end; Cells[0,i] := 'Общая плата = ' + InttoStr(GetAllPlata); end; end; end. unit Agent; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dom; type TAgent = class private NextAgent : TAgent; Dom : TDom; public constructor Create(nextAg : TAgent; newDom : TDom); function getNext() : TAgent; function getDom() : TDom; procedure setNext(nextAg : TAgent); procedure setDom(newDom : TDom); end; implementation constructor TAgent.Create(nextAg : TAgent; newDom : TDom); begin NextAgent := nextAg; Dom := newDom; end; function TAgent.getNext() : TAgent; //получить следующего агента begin result := NextAgent; end; function TAgent.getDom() : TDom; //получить следующий сеанс begin result := Dom; end; procedure TAgent.setNext(nextAg : TAgent); //установить следующего агента begin NextAgent := nextAg; end; procedure TAgent.setDom(newDom : TDom); //установить сеанс у агента begin Dom := newDom; end; end. unit Dom; {$mode objfpc}{$H+} interface uses Classes, SysUtils, crt, Kvartira; type TDom = class 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(); end; implementation uses Unit1; constructor TDom.Create(newYlica : string; newnumber: integer); //создание дома begin Count := 0; Ylica := newYlica; number := newNumber; end; function TDom.AddKvartira(newCountnumber : integer; newCountPlata : integer) : boolean;//добавить квартиру var i : integer; j : integer; begin i:= 0; j:= Count; result := false; while ((i < Count) and (newCountnumber > StrToInt(Arr[i].getNumber()))) do i:=i + 1; if (i = Count) then begin Arr[Count] := TKvartira.Create(newCountnumber, newCountPlata); result:= true; end else begin while (j > i) do begin Arr[j] := Arr[j-1]; j:= j - 1; end; result := true; Arr[j] := TKvartira.Create(newCountnumber, newCountPlata); end; if (result = true) then Count:= Count + 1; end; function TDom.FindKv(numberfind : integer) : boolean; var i : integer; j : integer; begin result := false; i := 0; while (i < Count) do begin if (NumberFind = strtoint(Arr[i].getNumber())) then result := true; i := i + 1; end; end; function TDom.DeleteKvartira(NumberDelete : integer) : boolean; //Удалить квартиру c номером var i : integer; j : integer; begin i:=0; if (count = 0) then result:= false else begin while ((i < Count) and (NumberDelete <> strtoint(Arr[i].getNumber()))) do i := i + 1; if (NumberDelete = strtoint(Arr[i].getNumber())) then if (i = Count) then begin Arr[i]:= nil; result:= true; count:= count-1; end else begin while (i < Count) do begin Arr[i] := Arr[i+1]; i:= i + 1; end; //writeln(result, ' ' , i, ' ', count); result:= true; Arr[i]:= nil; count:= count-1; end; end; end; function TDom.getnumber() : string; //Получить номер дома begin result := IntTostr(number); end; function TDom.getYlica() : string; //Получить улицу дома begin result:= ylica; end; procedure TDom.setYlica(newYlica : string); //Поменять улицу дома begin ylica := newYlica; end; procedure TDom.setnumber(newnumber : integer);//Поменять номер дома begin number:= newnumber; end; function TDom.getAllKvartira(): string; //Получить информацию о квартирах var i: integer; begin i := 0; if (Count = 0) then else begin while (i < Count) do begin result:= result + Arr[i].getInfoKv() + chr(13) + chr(10); i:= i + 1; end; end; end; procedure TDom.KvToGrid();//получить плату по всем квартирам дома var i: integer; j : integer; begin i := 0; j := 1; if (Count <> 0) then begin with Form1.KvarGrid do begin RowCount := 2; while (i < Count) do begin RowCount := RowCount + 1; Cells[0,j] := Arr[i].getNumber(); Cells[1,j] := inttostr(Arr[i].getPlata()); inc(j); i:= i + 1; end; end; end; end; function TDom.getAllKvPlata() : integer;//получить плату по всем квартирам дома var i: integer; begin i := 0; result:= 0; if (Count = 0) then result:= 0 else begin while (i < Count) do begin result:= result + Arr[i].getPlata(); i:= i + 1; end; end; end; end. unit Kvartira; {$mode objfpc}{$H+} interface uses Classes, SysUtils, crt; type TKvartira = class private number : integer; //номер квартиры Plata : integer; //плата за услуги public constructor Create(thisnumber : integer; thisPlata : integer); function getNumber() : string; procedure setnumber(newNumber : integer); procedure setPlata(newPlata : integer); function getPlata() : integer; function getInfoKv() : string; end; implementation constructor TKvartira.Create(thisnumber : integer; thisPlata : integer); begin number := thisnumber; Plata := thisPlata; end; function TKvartira.getNumber() : string;//получить номер квартиры begin result := IntToStr(number); end; procedure TKvartira.setnumber(newNumber : integer); //установить номер квартиры begin number := newNumber; end; procedure TKvartira.setPlata(newPlata : integer);//установить плату begin Plata := newPlata; end; function TKvartira.getPlata() : integer; //вывести плату begin result:= Plata; end; function TKvartira.GetInfoKv() : string; begin result := IntToStr(number) + '|' + IntToStr(Plata); end; end. |