
Галахова Наталья Романовна ИУ6-21
Практикум по программированию Вариант 4E
Тема: Turbo Delphi. Создание программной системы
В сведениях о компьютерах представлены следующие характеристики: тип микропроцессора, объем памяти, объем винчестера, цена. Программа должна в интерактивном режиме воспринимать каждый из перечисленных запросов и давать на него ответ.
1. Определить характеристики компьютеров, цена которых не превышает данную.
2. Определить типы микропроцессоров и цены всех компьютеров с памятью не менее заданного объема.
3. Определить цены всех компьютеров с данным типом микропроцессора, обладающих одновременно памятью и винчестерами не менее заданных объемов.
4. Построить график зависимости стоимости компьютера от объема памяти.
Иерархии используемых классов
Диаграммы состояний пользовательского интерфейса
Форма frmMain
Форма frmEdit
Формы frmDiagram и frmPlot (аналогичны)
Объектная декомпозиция
Текст программы
unit THardwareDef;
interface
type
THardware = class
private
h_CPU: string;
h_memory, h_hdd: integer;
h_price: real;
procedure SetCPU(const nCPU: string);
procedure SetMemory(const nmem: integer);
procedure SetHDD(const nhdd: integer);
procedure SetPrice(const nprice: real);
function GetCPU: string;
function GetMemory: integer;
function GetHDD: integer;
function GetPrice: real;
public
constructor Create; overload;
constructor Create (nCPU:string;nmem,nhdd:integer;nprice:real); overload;
constructor Create (obj: THardware); overload;
destructor Destroy (var error: boolean);
property CPU: string read GetCPU write SetCPU;
property Memory: integer read GetMemory write SetMemory;
property HDD: integer read GetHDD write SetHDD;
property Price: real read GetPrice write SetPrice;
end;
implementation
procedure THardware.SetCPU(const nCPU: string);
begin
h_CPU := nCPU;
end;
procedure THardware.SetMemory(const nmem: integer);
begin
h_memory := nmem;
end;
procedure THardware.SetHDD(const nhdd: integer);
begin
h_hdd := nhdd;
end;
procedure THardware.SetPrice(const nprice: real);
begin
h_price := nprice;
end;
function THardware.GetCPU: string;
begin
result := h_CPU;
end;
function THardware.GetMemory: integer;
begin
result := h_memory;
end;
function THardware.GetHDD: integer;
begin
result := h_hdd;
end;
function THardware.GetPrice: real;
begin
result := h_price;
end;
constructor THardware.Create;
begin
inherited Create;
h_CPU := '';
h_memory := 0;
h_hdd := 0;
h_price := 0;
end;
constructor THardware.Create(nCPU:string;nmem,nhdd:integer;nprice:real);
begin
inherited Create;
h_CPU := nCPU;
h_memory := nmem;
h_hdd := nhdd;
h_price := nprice;
end;
constructor THardware.Create(obj: THardware);
begin
inherited Create;
h_CPU := obj.h_CPU;
h_memory := obj.h_memory;
h_hdd := obj.h_hdd;
h_price := obj.h_price;
end;
destructor THardware.Destroy(var error: boolean);
begin
try
inherited Destroy;
error := False;
except
error := True;
end;
end;
end.
unit TStoreDef;
Interface
uses
THardwareDef;
type
TStock = array of THardware;
TStore = class
private
stock: TStock;
public
constructor Create;
destructor Destroy(var error: boolean);
function GetElement(index: integer): THardware;
function GetMaxIndex: integer;
function GetMaxMemory: integer;
function GetMaxPrice: real;
procedure Add(nCPU:string;nmem,nhdd:integer;nprice:real); overload;
procedure Add(obj: THardware); overload;
procedure Delete(index: integer);
procedure Edit(index:integer; nCPU:string;nmem,nhdd:integer;nprice:real);
overload;
procedure Edit(index: integer; obj: THardware); overload;
end;
implementation
constructor TStore.Create;
begin
inherited Create;
SetLength(stock, 1);
end;
destructor TStore.Destroy(var error: boolean);
begin
try
inherited Destroy;
error := False;
except
error := True;
end;
end;
function TStore.GetElement(index: integer): THardware;
begin
result := stock[index];
end;
function TStore.GetMaxIndex: integer;
begin
result := High(stock);
end;
function TStore.GetMaxMemory: integer;
var
i: integer;
begin
result := stock[0].Memory;
for i := 1 to High(stock) do
if stock[i].Memory > result then result := stock[i].Memory;
end;
function TStore.GetMaxPrice: real;
var
i: integer;
begin
result := stock[0].Price;
for i := 1 to High(stock) do
if stock[i].Price > result then result := stock[i].Price;
end;
procedure TStore.Add(nCPU:string;nmem,nhdd:integer;nprice:real);
var
i, j: integer;
begin
i := 0;
if not (stock[0] = nil) then
begin
SetLength(stock, length(stock)+1);
while (i<High(stock))and
(stock[i].Memory<=nmem)and(stock[i].Memory<=nprice) do
inc(i);
for j := High(stock) downto i+1 do
stock[j] := stock[j-1];
end;
if not(stock[i] = nil) then stock[i] := nil;
stock[i] := THardware.Create(nCPU,nmem,nhdd,nprice);
end;
procedure TStore.Add(obj: THardware);
var
i, j: integer;
begin
i := 0;
if not(stock[0] = nil) then
begin
SetLength(stock, length(stock)+1);
while (i<High(stock))and
(stock[i].Memory<=obj.Memory)and(stock[i].Price<=obj.Price) do
inc(i);
for j := High(stock) downto i+1 do
stock[j] := stock[j-1];
end;
if not(stock[i] = nil) then stock[i] := nil;
stock[i] := THardware.Create(obj);
end;
procedure TStore.Delete(index: integer);
var
i: integer;
err: boolean;
begin
for i := index to High(stock)-1 do
stock[i]:=stock[i+1];
SetLength(stock, length(stock)-1);
end;
procedure TStore.Edit(index:integer; nCPU:string;nmem,nhdd:integer;nprice:real);
var
err: boolean;
begin
stock[index].Destroy(err);
stock[index] := THardware.Create(nCPU,nmem,nhdd,nprice);
end;
procedure TStore.Edit(index: integer; obj: THardware);
var
err: boolean;
begin
stock[index].Destroy(err);
stock[index] := THardware.Create(obj);
end;
end.
unit Globals;