скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Разработка вспомогательной системной программы в системе программирования Delphi с использованием средств WinApi


4. Эксплуатационные документы

 

4.1 Руководство программиста

4.1.1 Общие сведения о программе

Программа предназначена для обмена сообщениями между копиями этой программы с помощью файла, проецируемого в память. А также для анализа рабочей области системного диска, т.е анализ и расшифровку блока параметров Bios и анализ и расшифровку таблицы разделов носителя.

4.1.2 Структура программы

После запуска приложения появляется форма «Авторизация» для присвоения пользователя специального псевдонима для обмена информацией. Форма содержит две кнопки: «Войти» и «Закрыть». По нажатию кнопки «закрыть» происходит выход из приложения. По нажатию кнопки «войти» происходит переход на основную форму программы, данная форма содержит поле вывода сообщений – «поле истории переписки», также поле ввода сообщений, кнопку «ОТПРАВИТЬ» для отправки сообщений, а также кнопки отсоединиться, закрыть и соединится, которая будет появится на форме только после нажатия на кнопку «отсоединиться». Также на форме присутствует панель инструментов с кнопками :

1.  Сохранить историю переписки,

2.  Загрузить историю переписки.

3.  Получить данные о носителях.

4.  Справка.

При нажатии на первую кнопку появляется диалоговое окно, в котором необходимо выбрать файл, содержащий историю переписки, если такой имеется, и вывод содержимого этого файла в поле истории переписки.

При нажатии на вторую кнопку происходит открытие диалогового окна, в котором предлагается назначить сохраняемому файлу имя и каталог, в котором данный файл будет сохранён. Содержимым данного файла будет являться история последней переписки.

При нажатию на четвёртую кнопку происходит запуск файла справочной системы, содержащей всю необходимую информацию о программе.

При нажатии на третью кнопку происходит открытие дополнительного окна программы.

Дополнительное окно программы имеет заголовок «Служебная информация о носителях». Это окно содержит поле вывод информации о всех носителях присутствующих в системе . Поле вывода краткой информации о носителе, поле вывода расшифрованной информации о блоке параметров Bios, поле вывода расшифрованной информации о таблице разделов носителя, а также две таблицы, содержащие 16ричные значения первого сектора логического диска- блок параметров Bios и 16ричные значения первого сектора носителя, к которому относится выбранный логический диск (в этом секторе находится таблица разделов логического диска – Partition Table). Также на форме находятся 4 кнопки:

1.  Начать работу с диском

2.  Считать BPB(блок параметров Bios)

3.  Считать Partition Table.

4.  Закрыть.

При нажатии на первую кнопку происходит вывод краткой информации о носителе. При нажатии на кнопку «Считать BPB» происходит считывание блока BPB и заполнение значениями таблицы содержащей расшифрованные данные из BPB и таблицы, содержащей 16ричные значения считанные из BPB, выбранного логического диска.

При нажатии на кнопку – «Считать Partition Table» происходит считывание первого сектора носителя информации и заполнение данными таблицы, содержащей расшифрованные данные о таблице разделов диска и таблицы содержащей 16ричные значения считанные из первого сектора носителя.

4.1.3 Проверка программы

Входные данные : строка сообщения «сообщение №1»; логический диск «H».

Выходные данные : «сообщение№1»;

Краткая информация о носителе:

«Вы просматриваете логический диск: h

Количество цилиндров: 247

Тип носителя: съёмный носитель

Дорожек на цилиндре: 255

Секторов на дорожке: 63

Байт в секторе: 512»

Информация о таблице разделов диска:

Первый элемент таблицы разделов системного диска:

Признак загрузки: 80

Начало раздела диска{Головка: 1 Сектор: 1 Цилиндр: 0 }

Тип раздела {Ос: 7 }

Конец раздела диска{Головка: 254 Сектор: 255 Цилиндр: 255 }

Номер Сектора {: 63 }

Размер раздела {: 61432497 }

Второй элемент таблицы разделов системного диска:

Признак загрузки: 00

Начало раздела диска{Головка: 255 Сектор: 255 Цилиндр: 15 }

Тип раздела {Ос: 254 }

Конец раздела диска{Головка: 255 Сектор: 255 Цилиндр: 240 }

Номер Сектора {: 61432560 }

Размер раздела {: 318782480 }


4.1.4 Дополнительные возможности

Программа имеет справочную систему, для её запуска необходимо нажать кнопку  , или F1 на клавиатуре. Также программа определяет носители доступные в системе, это происходит автоматически при переходе на третью форму программы.

4.1.5 Сообщения системному программисту

1) При подключении, если не удалось создать проекцию файла при запуске программы, появляется сообщение:

Рисунок 5.1 –Содержание сообщения

2)Если не удалось создать объект типа Mutex для обмена сообщениями с другими программами, появляется сообщение:

Рисунок 5.2 – Содержание сообщения.

3)  Если не удалось наладить приём сообщений от других копий программ, появляется сообщение:


Рисунок 5.3 – Текст сообщения.

4)  Если не удалось создать объект типа события для оповещения потока о том, что данные записаны в проецируемый файл, появляется сообщение:

Рисунок 5.4 –Текст сообщения.

5)  Если не удалось передать данные (записать данные в проецируемый файл) , появляется сообщение:

Рисунок 5.6 – Текст сообщения.

4.2 Руководство пользователя

4.2.1 Назначение и условия выполнения программы

Данная программа предназначена для обмена сообщениями между копиями данной программы, а также для получения системной информации о носителях. Для выполнения программы необходим IBM-совместимый персональный компьютер, оснащенный процессором Intel или аналогичным и операционной системой семейства Windows.

4.2.2 Обращение к программе для запуска:

Для запуска программы необходимо запустить приложение с Redactor.exe . Это делается с помощью ярлыка , который появляется на рабочем столе после установки, с именем OffClient.

4.2.3 Входные и выходные данные:

Входными и выходными данными при обмене сообщениями являются сами сообщения. При получении служебных данных о носителях входными данными являются имена этих носителей, а выходными – данные о них, такие как:

Количество цилиндров, тип носителя, дорожек на цилиндре, секторов на дорожке, байт в секторе и т.д.

4.2.4 Сообщения оператору:

1) Если не введён псевдоним при регистрации то появится сообщение:

Рисунок 5.7 - Текст сообщения.

2) Если не удалось передать сообщение:


Рисунок 5.8 – Текст сообщения.


Приложение

1) Текст основного модуля программы

program Redactor;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

ThrdRcvr in 'ThrdRcvr.pas',

Unit2 in 'Unit2.pas' {Form2},

Unit3 in 'Unit3.pas' {Form3},

HDDInfo in 'HDDInfo.pas';

{$R *.res}

begin

Application.Initialize;

Application.HelpFile:='СПРАВКА.HLP';

Application.CreateForm(TForm1, Form1);

Application.ShowMainForm:=false;

Application.CreateForm(TForm2, Form2);

Application.Run;

end.

2) Текст модуля Unit1:

unit Unit1; //Основной модуль

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ThrdRcvr,

StdCtrls, Buttons, Menus,ToolWin, ComCtrls, ActnMan, ActnColorMaps,

ImgList, ExtCtrls,Unit3;

const

MMFName:PChar = 'MMFProectFile';

MutxName:PChar = 'UniqMutexName';

EvntName:Pchar = 'ChatEventName';

SHARED_MEMORY_SIZE = 65536;

type

TForm1 = class(TForm)

Memo1: TMemo;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

MainMenu1: TMainMenu;

N1: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

BitBtn2: TBitBtn;

BitBtn3: TBitBtn;

Edit1: TEdit;

Button1: TButton;

Button2: TButton;

ToolBar1: TToolBar;

OpenToolButton: TToolButton;

SaveAsToolButton: TToolButton;

ToolButton3: TToolButton;

ImageList1: TImageList;

StatusBar1: TStatusBar;

Timer1: TTimer;

ToolButton1: TToolButton;

N2: TMenuItem;

N8: TMenuItem;

procedure Button1Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure CloseHandles;

procedure CreateHandles;

procedure Button2Click(Sender: TObject);

procedure WriteDataInMMF(s:string);

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

procedure N5Click(Sender: TObject);

procedure Timer1Timer(Sender: TObject);

procedure ToolButton3Click(Sender: TObject);

procedure ToolButton1Click(Sender: TObject);

procedure N8Click(Sender: TObject);

procedure N2Click(Sender: TObject);

private

procedure AppHint(Sender: TObject);

public

HMutex:THandle;

ThreadRec:TThreadReceiver;

HEvent:THandle;

HFileSender:Thandle;

NicName:string;

end;

var

Form1: TForm1;

TxtFile:TextFile;// пременная файла

St:PansiChar;

lincInt:Boolean;

TxtContaningStr:String;

userName:string;

implementation

{$R *.dfm}

//процедура для показа кртких справок

procedure TForm1.AppHint(Sender: TObject);

begin

StatusBar1.SimpleText:=Application.Hint; //для отображения ииформации в панели соостояния

end;

//закрытие всех хендлов в этой копии программы

procedure TForm1.CloseHandles();

begin

CloseHandle(HFileSender);

CloseHandle(HMutex);

CloseHandle(HEvent);

end;

// создание всех необходимых объектов

procedure TForm1.CreateHandles;

begin

// проекция файла

HFileSender:=CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SHARED_MEMORY_SIZE,MMFName);

lincInt:=(GetLastError() <> ERROR_ALREADY_EXISTS);

if HFileSender = 0 then

begin

st:='не удалось создать проекцию файла';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

// мьютекс

HMutex:=CreateMutex(nil,false,MutxName);

if HMutex = 0 then

begin

CloseHandle(HFileSender);

st:='не удалось синхронизировать приложение';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

// событие

HEvent:=CreateEvent(nil,true,false,EvntName);

if HEvent = 0 then

begin

CloseHandle(HFileSender);

CloseHandle(HMutex);

st:='не удалось осуществить обмен сообщениями';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

end;

// отсоединиться

procedure TForm1.Button1Click(Sender: TObject);

begin

ThreadRec.Terminate;

WriteDataInMMF('Пользователь '+NicName+' отключился');

ThreadRec.WaitFor;

ThreadRec.Free;// правильно уничтожаем поток

CloseHandles();

button2.Visible:=true;

button1.Visible:=false;

bitbtn2.Visible:=false;

end;

// загрузить историю переписки

procedure TForm1.N4Click(Sender: TObject);

begin

if OpenDialog1.Execute then

begin

AssignFile(TxtFile,OpenDialog1.FileName);

Reset(TxtFile);

Memo1.Text:=Memo1.Text +'{-----------Загруженная переписка ниже-------------}' + #13#10;

while not eof(TxtFile) do

begin

readln(TxtFile,TxtContaningStr);

Memo1.Text:=Memo1.Text + TxtContaningStr + #13#10;

end;

Memo1.Text:=Memo1.Text +'{-----------Загруженная переписка выше -------------}' + #13#10;

CloseFile(TxtFile);

end;

end;

//процедура записи данных в MMF

procedure TForm1.WriteDataInMMF(s:string);

var

PBaseAdress:Pointer;

begin

WaitForSingleObject(HMutex, INFINITE);

PBaseAdress:=MapViewOfFile(HFileSender,FILE_MAP_WRITE,0,0,Length(s)+4);

if(PBaseAdress = nil) then

begin

CloseHandle(HFileSender);

st:='не удалось передать данные';

Application.MessageBox(st,'Сообщение...',MB_OK);

exit;

end;

begin

integer(PBaseAdress^):=length(s);

CopyMemory(Pointer(Integer(PBaseAdress)+4),PChar(s),length(s));

UnmapViewOfFile(PBaseAdress);

SetEvent(HEvent);

ReleaseMutex(HMutex);

end;

end;

// процедура записи данных в PBaseAdress

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

if Edit1.Text <> '' then

begin

WriteDataInMMF(Nicname+' написал:'+#13#10+string(Edit1.Text));

Edit1.Text:='';

end

else

exit;

end;

// Закрытия формы

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

close;

end;

//создаём хендлы и потоки

procedure TForm1.FormCreate(Sender: TObject);

begin

Memo1.Clear;

// создание потока принимающего данные из файла

ThreadRec:=TThreadReceiver.Create(false);

ThreadRec.Priority:=tpLowest;

CreateHandles();// создаем хендлы

end;

// соединение

procedure TForm1.Button2Click(Sender: TObject);

begin

CreateHandles();

ThreadRec:=TThreadReceiver.Create(false);

button2.Visible:=false;

button1.Visible:=true;

bitbtn2.Visible:=true;

WriteDataInMMF(NicName+' Cоединился!');

end;

// Запрос подтверждения при закрытии формы

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

case messageBox(Handle,'Действительно выйти?','Внимание!', MB_YESNO) of

IDYES:

begin

if Button1.Visible = true then

begin

ThreadRec.Terminate;

WriteDataInMMF('Пользователь '+NicName+' отключился');

ThreadRec.WaitFor;

ThreadRec.Free;

CanClose:=true;

end

else

CanClose:=true;

end;

IDNO: CanClose:=false;

end;

end;

//Сохранить историю переписки

procedure TForm1.N5Click(Sender: TObject);

begin

If SaveDialog1.Execute then

begin

AssignFile(TxtFile,SaveDialog1.FileName);

rewrite(TxtFile);

TxtContaningStr:= Memo1.Text;

Write(TxtFile,TxtContaningStr);

CloseFile(TxtFile);

St:='Файл сохранён';

Application.MessageBox(St,'Сообщение...',MB_OK);

exit;

end

else

begin

St:='файл не сохранён';

Application.MessageBox(St,'Сообщение...',MB_OK);

end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

if Form1.Visible = true then

begin

Application.OnHint:=AppHint;

Timer1.Enabled:=false;

Timer1.Destroy;

end;

end;

procedure TForm1.ToolButton3Click(Sender: TObject);

begin

Application.CreateForm(TForm3, Form3);

Application.ShowMainForm:=false;

Form3.Visible:=true;

end;

procedure TForm1.ToolButton1Click(Sender: TObject);

begin

//вызов справки (основная форма программы)

Application.HelpContext(2);

end;

procedure TForm1.N8Click(Sender: TObject);

begin

Application.HelpCommand(HELP_FINDER,0);

end;

procedure TForm1.N2Click(Sender: TObject);

begin

ShowMessage('Программу подготовил студент группы 742:'+#13#10+'Шипилов Д.А.');

end;

end.

3) Текст модуля Unit2 (Модуль формы «Авторизация»):

Страницы: 1, 2, 3, 4, 5, 6, 7


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.