MH:HDD; //Вінчестер
end;
Department=record //Відділ
Name:String[255]; //Назва відділу
Director:String[255]; //Керівник відділу
CompsCount:Byte; //Кількість комп’ютерів в відділі
Comps:array[1..100] of Computer; //Масив до 100 комп’ютерів в одному відділі
end;
TForm1 = class(TForm)
SG: TStringGrid;
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Edit1: TEdit;
Label2: TLabel;
ComboBox2: TComboBox;
Label3: TLabel;
Button6: TButton;
Button10: TButton;
GroupBox2: TGroupBox;
Label4: TLabel;
Button3: TButton;
Button4: TButton;
Button5: TButton;
ComboBox3: TComboBox;
Button7: TButton;
Button8: TButton;
MainMenu1: TMainMenu;
N3: TMenuItem;
N4: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
N18: TMenuItem;
N2: TMenuItem;
N19: TMenuItem;
Button9: TButton;
N20: TMenuItem;
N21: TMenuItem;
PopupMenu1: TPopupMenu;
N22: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
N25: TMenuItem;
N26: TMenuItem;
N27: TMenuItem;
procedure Save;
procedure Load;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure ShowComp(DepIndex,Index,Row:Byte);
procedure ShowDepartament(Index:Byte);
procedure DelDep(Index:Byte);
function DelComp(DepIndex,Index:Byte):Boolean;
function MoveCompToDep(DepIndex,Index,NewDep:Byte):Boolean;
function MoveAllCompToDep(DepIndex,NewDep:Byte):Boolean;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ComboBox1Change(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure SGSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure SGDblClick(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure SGKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure RefreshDep;
procedure SortDepByName;
procedure SortDepByCount;
procedure ComboBox2Change(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure SortByNumber;
procedure SortByUserName;
procedure SortByMMB;
procedure SortByMP;
procedure SortByMR;
procedure SortByMVC;
procedure SortByMM;
procedure SortByMH;
procedure SortByFreqProc;
procedure SortByRAMCap;
procedure SortByHDDCap;
procedure SortByDiagonal;
procedure ComboBox3Change(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N18Click(Sender: TObject);
procedure N17Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N22Click(Sender: TObject);
procedure N23Click(Sender: TObject);
procedure N25Click(Sender: TObject);
procedure N24Click(Sender: TObject);
procedure N27Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N19Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
F:File of Department; //Файл запису
Dep:array[1..30] of Department; //Масив відділів
Count:Byte=0; //Кількість відділів
ADD:Boolean=True; //При додавані нового комп’ютера True, а при редагувані False
SR:Byte=0; //Select Row, номер по списку вибраного комп’ютера із таблиці
Editing:Boolean=False; //Ознака редагування
implementation
uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7;
{$R *.dfm}
procedure TForm1.Save; //Збереження в файл
var i:Byte;
FileName:String;
begin
FileName:=ExtractFilePath(Application.ExeName)+'Computers'; //Генерація ім’я файлу
AssignFile(F,FileName); ReWrite(F);
for i:=1 to Count do
Write(F,Dep[i]);
CloseFile(F);
end;
procedure TForm1.Load; //Завантаження з файлу
var FileName:String;
begin
FileName:=ExtractFilePath(Application.ExeName)+'Computers'; //Генерація ім’я файлу
if not FileExists(FileName) then Exit; //Перевірка на наявність файлу
AssignFile(F,FileName); Reset(F);
Count:=0;
while not eof(F) do begin
INC(Count);
Read(F,DEP[Count]);
ComboBox1.Items.Add(DEP[Count].Name); //Додаємо назву відділу в список
end;
ComboBox1.ItemIndex:=0;
ShowDepartament(1);
CloseFile(F);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
l: DWORD;
begin
l := GetWindowLong(Self.Handle, GWL_STYLE);
l := l and not (WS_MAXIMIZEBOX);
l := SetWindowLong(Self.Handle, GWL_STYLE, l);
SG.Cells[0,0]:='№';
SG.Cells[1,0]:='Працівник';
SG.Cells[2,0]:='Відео карта';
SG.Cells[3,0]:='Монітор';
SG.Cells[4,0]:='Процесор';
SG.Cells[5,0]:='Материнська карта';
SG.Cells[6,0]:='Оперативна пам’ять';
SG.Cells[7,0]:='Жорсткий диск';
Load;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form2.Caption:='Додати комп`ютер';
if ((DEP[ComboBox1.ItemIndex+1].CompsCount>=100)or
(ComboBox1.ItemIndex<0)) then Exit;
ADD:=True;
Form2.Show;
Form2.ClearEdit;
end;
procedure TForm1.ShowComp(DepIndex,Index,Row:Byte); //Показати комп’ютер в таблиці
begin
if ((Row<1)or(Index<1)or(Index>DEP[DepIndex].CompsCount)) then Exit;
if Row>=SG.RowCount then SG.RowCount:=Row+1;
SG.Rows[Row].Clear;
SG.Cells[0,Row]:=IntToStr(DEP[DepIndex].Comps[Index].Number);
SG.Cells[1,Row]:=DEP[DepIndex].Comps[Index].USER;
SG.Cells[2,Row]:=DEP[DepIndex].Comps[Index].MVC.Firma;
SG.Cells[3,Row]:=DEP[DepIndex].Comps[Index].MM.Firma;
SG.Cells[4,Row]:=DEP[DepIndex].Comps[Index].MP.Firma;
SG.Cells[5,Row]:=DEP[DepIndex].Comps[Index].MMB.Firma;
SG.Cells[6,Row]:=DEP[DepIndex].Comps[Index].MR.Firma;
SG.Cells[7,Row]:=DEP[DepIndex].Comps[Index].MH.Firma;
end;
procedure TForm1.ShowDepartament(Index:Byte); //Вивести всю інф про відділ на екран
var i:Word;
begin
if ((Index>Count)or(Index<1)) then begin
Edit1.Clear;
SG.RowCount:=2;
SG.Rows[1].Clear;
Exit;
end;
for i:=0 to Count-1 do
if ComboBox1.Items.Strings[i]=DEP[Index].Name then begin
ComboBox1.ItemIndex:=i; Break;
end;
if DEP[Index].CompsCount>0 then
SG.RowCount:=DEP[Index].CompsCount+1
else begin
SG.RowCount:=2;
SG.Rows[1].Clear;
end;
Edit1.Text:=DEP[Index].Director;
for i:=1 to DEP[Index].CompsCount do
ShowComp(Index,i,i);
end;
procedure TForm1.DelDep(Index:Byte); //Видалення відділу
var i:Byte;
begin
if ((Count<1)or(Index<1)) then Exit;
for i:=Index to Count-1 do
Dep[i]:=Dep[i+1];
DEC(Count);
ComboBox1.Items.Delete(Index-1);
ComboBox1.ItemIndex:=0;
ShowDepartament(1);
Editing:=True;
end;
function TForm1.DelComp(DepIndex,Index:Byte):Boolean; //Видалення комп’ютера
var i:Byte;
begin
Result:=False;
if ((DepIndex<1)or(DepIndex>Count)) then Exit;
if ((Index<1)or(Index>DEP[DepIndex].CompsCount)) then Exit;
for i:=Index to DEP[DepIndex].CompsCount-1 do
DEP[DepIndex].Comps[i]:=DEP[DepIndex].Comps[i+1];
DEC(DEP[DepIndex].CompsCount);
ShowDepartament(DepIndex);
Result:=True;
Editing:=True;
end;
//Перенесення одного комп’ютера з одного відділу в інший
function TForm1.MoveCompToDep(DepIndex,Index,NewDep:Byte):Boolean;
begin
Result:=False;
if DepIndex=NewDep then Exit;
if ((DepIndex<1)or(DepIndex>Count))or
((NewDep<1)or(NewDep>Count)) then Exit;
if ((Index<1)or(Index>DEP[DepIndex].CompsCount))or
(DEP[NewDep].CompsCount=100) then Exit;
INC(DEP[NewDep].CompsCount);
DEP[NewDep].Comps[DEP[NewDep].CompsCount]:=DEP[DepIndex].Comps[Index];
DelComp(DepIndex,Index);
Result:=True;
Editing:=True;
end;
//Перенесення всіх комп’ютерів з одного відділу в інший
function TForm1.MoveAllCompToDep(DepIndex,NewDep:Byte):Boolean;
var i,C:Byte;
begin
Result:=False;
if DepIndex=NewDep then Exit;
if ((DepIndex<1)or(DepIndex>Count))or
((NewDep<1)or(NewDep>Count)) then Exit;
if ((DEP[NewDep].CompsCount+DEP[DepIndex].CompsCount)>100) then Exit;
C:=DEP[DepIndex].CompsCount;
for i:=1 to C do begin
INC(DEP[NewDep].CompsCount);
DEP[NewDep].Comps[DEP[NewDep].CompsCount]:=DEP[DepIndex].Comps[i];
DelComp(DepIndex,1);
end;
Result:=True;
Editing:=True;
end;
procedure TForm1.Button1Click(Sender: TObject); //Додавання нового відділу
var i:Byte;
begin
if Count>29 then Exit;
for i:=0 to ComboBox1.Items.Count-1 do //Перевірка на наявність відділу
if ComboBox1.Text=ComboBox1.Items.Strings[i] then begin
ShowMessage('Такий відділ вже є!');
Exit;
end;
if ComboBox1.Text<>'' then begin
INC(Count);
Dep[Count].Name:=ComboBox1.Text;
Dep[Count].CompsCount:=0;
ComboBox1.Items.Add(ComboBox1.Text);
ComboBox1.ItemIndex:=ComboBox1.Items.Count-1;
ShowDepartament(ComboBox1.ItemIndex+1);
Editing:=True;
end;
end;
procedure TForm1.Button2Click(Sender: TObject); //Видалення відділу
begin
if ((ComboBox1.ItemIndex>=0)and(ComboBox1.Items.Count>0)) then
if MessageDlg('Видалити відділ'+#13#10+'із всіма його комп’ютерами',
mtConfirmation,[mbOk,mbCancel],0)=mrOk then
DelDep(ComboBox1.ItemIndex+1);
end;
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then Button1.OnClick(Button1); //Додавання відділу
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Editing then
if MessageDlg('Зберегти зміни?',mtConfirmation,[mbNo,mbYes],0)=mrYes then
Save;
end;
procedure TForm1.ComboBox1Change(Sender: TObject); //Вибір відділу
begin
if ComboBox1.ItemIndex>=0 then
ShowDepartament(ComboBox1.ItemIndex+1);
end;
procedure TForm1.Edit1Change(Sender: TObject); //Зміна директора відділу
begin
if ComboBox1.ItemIndex>=0 then
DEP[ComboBox1.ItemIndex+1].Director:=Edit1.Text;
end;
procedure TForm1.Button5Click(Sender: TObject); //Редагування інф про комп’ютер
begin
Form2.Caption:='Редагувати комп`ютер';
if ((ComboBox1.ItemIndex<0)or(SR<1)or
(SR>DEP[ComboBox1.ItemIndex+1].CompsCount)) then Exit;
ADD:=False;
Form2.Show;
Form2.ClearEdit;
Form2.RecToEdit;
end;
procedure TForm1.SGSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
SR:=ARow; //Робимо вибраний комп’ютер поточним
end;
procedure TForm1.SGDblClick(Sender: TObject);
begin
Button5.OnClick(Button5); //Редагування інф про комп’ютер
end;
procedure TForm1.Button4Click(Sender: TObject); //Видалення комп’ютера
var CurD:Byte;
begin
CurD:=ComboBox1.ItemIndex+1;
if ((ComboBox1.Items.Count<1)or(CurD<1)) then Exit;
if ((SR<1)or(SR>DEP[CurD].CompsCount)) then Exit;
if MessageDlg('Видалити комп’ютер',mtConfirmation,[mbOk,mbCancel],0)=mrOk then
DelComp(CurD,SR);
end;
procedure TForm1.SGKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=46 then //Видалення комп’ютера натиском клавіші Del
Button4.OnClick(Button4);
end;
procedure TForm1.RefreshDep; //Оновити список відділів
var i:Byte;
begin
ComboBox1.Clear;
for i:=1 to Count do
ComboBox1.Items.Add(DEP[i].Name);
if ComboBox1.Items.Count>0 then
ComboBox1.ItemIndex:=0;
ShowDepartament(1);
end;
procedure TForm1.SortDepByName; //Сортувати відділи за назвою
var i,j:Byte;
D:Department;
begin
for i:=1 to Count-1 do
for j:=i+1 to Count do
if DEP[i].Name<DEP[j].Name then begin
D:=DEP[i];
DEP[i]:=DEP[j];
DEP[j]:=D;
end;
RefreshDep;
end;
procedure TForm1.SortDepByCount; //Сортувати відділи за кількістю копм’ютерів
var i,j:Byte;
D:Department;
begin
for i:=1 to Count-1 do
for j:=i+1 to Count do
if DEP[i].CompsCount<DEP[j].CompsCount then begin
D:=DEP[i];
DEP[i]:=DEP[j];
DEP[j]:=D;
end;
RefreshDep;
end;
procedure TForm1.ComboBox2Change(Sender: TObject);
begin
//Сортування відділів за вибраним критерієм
if ComboBox1.Items.Count>0 then
case ComboBox2.ItemIndex of
0 : SortDepByName;
1 : SortDepByCount;
end;
end;
procedure TForm1.Button6Click(Sender: TObject); //Інвертувати список відділів
var i,L:Byte;
D:Department;
begin
if Count<=1 then Exit;
L:=Trunc(Count/2);
for i:=1 to L do begin
D:=DEP[i];
DEP[i]:=DEP[Count-i+1];
DEP[Count-i+1]:=D;
end;
RefreshDep;
end;
procedure TForm1.SortByNumber; //Сортування за номером
var i,j,C,Cur:Byte;
D:Computer;
begin
Cur:=ComboBox1.ItemIndex+1;
if ((Cur<1)or(Cur>Count)) then Exit;
C:=DEP[Cur].CompsCount;
for i:=1 to C-1 do
for j:=i+1 to C do
if DEP[Cur].Comps[i].Number>DEP[Cur].Comps[j].Number then begin
D:=DEP[Cur].Comps[i];
DEP[Cur].Comps[i]:=DEP[Cur].Comps[j];
DEP[Cur].Comps[j]:=D;
end;
ShowDepartament(Cur);
end;
procedure TForm1.SortByUserName; //Сортування за ім’ям працівника
var i,j,C,Cur:Byte;
D:Computer;
begin
Cur:=ComboBox1.ItemIndex+1;
if ((Cur<1)or(Cur>Count)) then Exit;
C:=DEP[Cur].CompsCount;
for i:=1 to C-1 do
for j:=i+1 to C do
if DEP[Cur].Comps[i].USER>DEP[Cur].Comps[j].USER then begin
D:=DEP[Cur].Comps[i];
DEP[Cur].Comps[i]:=DEP[Cur].Comps[j];
DEP[Cur].Comps[j]:=D;
end;
ShowDepartament(Cur);
end;
procedure TForm1.SortByMMB; //Сортування за виробником материнської плати
var i,j,C,Cur:Byte;
D:Computer;
begin
Cur:=ComboBox1.ItemIndex+1;
if ((Cur<1)or(Cur>Count)) then Exit;
C:=DEP[Cur].CompsCount;
for i:=1 to C-1 do
for j:=i+1 to C do