Смекни!
smekni.com

Облік компютерів та комплектуючих на підприємстві (стр. 4 из 7)

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