Разработка информационно-поисковой системы
Информационные потребности пользователя, модульная декомпозиция информационно-поисковой системы. Выбор средств разработки, проектирование базы данных, описание входных и выходных данных. Алгоритмы работы программы и модулей, пользовательский интерфейс.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 03.10.2017 |
Размер файла | 742,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
procedure pmCloseCategoryClick(Sender: TObject);
procedure pmTableViewPopup(Sender: TObject);
procedure sbFirstClick(Sender: TObject);
procedure sbLeftClick(Sender: TObject);
procedure sbRightClick(Sender: TObject);
procedure sbLastClick(Sender: TObject);
procedure tsPagesClick(Sender: TObject);
procedure ClosePanelResize(Sender: TObject);
procedure dbgTableDblClick(Sender: TObject);
procedure mmAvailableClick(Sender: TObject);
procedure mmNotAvailableClick(Sender: TObject);
procedure mmAllClick(Sender: TObject);
procedure mmOrderClick(Sender: TObject);
procedure mmIncomingClick(Sender: TObject);
procedure mmOutgoingClick(Sender: TObject);
procedure mmDocListClick(Sender: TObject);
procedure mmOrderListClick(Sender: TObject);
procedure mmLogClick(Sender: TObject);
procedure tbStorePlacesClick(Sender: TObject);
procedure mmTransferClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmStoreView: TfmStoreView;
implementation
{$R *.dfm}
uses DataModule, DataModuleRM, OpenCategoryStore, ElementStoreView, StoreSearch, StorePlaceView, OrderContent, OrderList, StoreLog, DocList, DocContent, StoreImport;
//**************************//
// Создание формы //
//**************************//
procedure TfmStoreView.FormCreate(Sender: TObject);
var
i : integer;
IniFile : TIniFile;
StringList : TStringList;
begin
StatusBar.Panels[1].Text := '1:1';
IniFile := TIniFile.Create('IniFiles\Category.ini');
StringList := TStringList.Create;
IniFile.ReadSection('CATEGORY_STORE', StringList);
if StringList.Count = 0 then
begin
StringList.Free;
IniFile.Free;
Exit;
end;
tsPages.Tabs.Clear;
sbCloseCategory.Enabled := true;
for i := 0 to StringList.Count - 1 do
tsPages.Tabs.Add(IniFile.ReadString('CATEGORY_STORE', StringList[i], ''));
StringList.Free;
IniFile.Free;
end;
//**********************//
// Показ формы //
//**********************//
procedure TfmStoreView.FormShow(Sender: TObject);
begin
if DM.nRole <> 3
then
begin
tbIncoming.Enabled := false;
tbOutgoing.Enabled := false;
tbStorePlaces.Enabled := false;
tbDocList.Enabled := false;
tbLog.Enabled := false;
tbTrasfer.Enabled := false;
mmIncoming.Enabled := false;
mmOutgoing.Enabled := false;
mmDocList.Enabled := false;
mmLog.Enabled := false;
mmTransfer.Enabled := false;
mmImportData.Enabled := false;
end
else
begin
tbIncoming.Enabled := true;
tbOutgoing.Enabled := true;
tbStorePlaces.Enabled := true;
tbDocList.Enabled := true;
tbLog.Enabled := true;
tbTrasfer.Enabled := true;
mmIncoming.Enabled := true;
mmOutgoing.Enabled := true;
mmDocList.Enabled := true;
mmLog.Enabled := true;
mmTransfer.Enabled := true;
mmImportData.Enabled := true;
end;
tsPages.TabIndex := 0;
mmAll.Checked := true;
tsPagesClick(Sender);
end;
//*********************************************//
// Обработчик меню: Открыть категорию //
//*********************************************//
procedure TfmStoreView.mmOpenCategoryClick(Sender: TObject);
begin
with fmOpenCategoryStore do
begin
CallForm := cfStoreView;
ShowModal;
end;
end;
//*********************************************//
// Обработчик меню: Закрыть категорию //
//*********************************************//
procedure TfmStoreView.mmCloseCategoryClick(Sender: TObject);
begin
pmCloseCategoryClick(nil);
end;
//******************************************//
// Обработчик меню: Импорт данных //
//******************************************//
procedure TfmStoreView.mmImportDataClick(Sender: TObject);
begin
fmStoreImport.ShowModal;
tsPagesClick(Sender);
end;
//**********************************//
// Обработчик меню: Выход //
//**********************************//
procedure TfmStoreView.mmExitClick(Sender: TObject);
begin
fmStoreView.Close;
fmStorePlaceView.Close;
end;
//**********************************//
// Обработчик меню: Поиск //
//**********************************//
procedure TfmStoreView.mmFindClick(Sender: TObject);
begin
fmStoreSearch.CallForm := cStoreView;
if mmAvailable.Checked
then
fmStoreSearch.bAvailable := true
else
fmStoreSearch.bAvailable := false;
if mmNotAvailable.Checked
then
fmStoreSearch.bNotAvailable := true
else
fmStoreSearch.bNotAvailable := false;
fmStoreSearch.ShowModal;
end;
//****************************//
// Показ Popup-меню //
//****************************//
procedure TfmStoreView.pmTableViewPopup(Sender: TObject);
begin
if tsPages.Tabs[0] = 'Пусто'
then
pmCloseCategory.Enabled := false
else
pmCloseCategory.Enabled := true;
end;
//**********************************************//
// Обработчик меню: Закрыть категорию //
//**********************************************//
procedure TfmStoreView.pmCloseCategoryClick(Sender: TObject);
begin
if MessageDlg('Закрыть категорию "' + tsPages.Tabs[tsPages.TabIndex] + '"', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
tsPages.Tabs.Delete(tsPages.TabIndex);
if tsPages.Tabs.Count = 0 then
begin
tsPages.Tabs.Add('Пусто');
tsPages.TabIndex := 0;
sbCloseCategory.Enabled := false;
end;
end;
end;
//******************************************//
// Обработчик меню: Доступные ЭРИ //
//******************************************//
procedure TfmStoreView.mmAvailableClick(Sender: TObject);
begin
mmAll.Checked := false;
mmNotAvailable.Checked := false;
mmAvailable.Checked := true;
tbAll.Down := false;
tbAvailable.Down := true;
tbNotAvailable.Down := false;
StatusBar.Panels.Items[3].Text := ' ' + mmAvailable.Caption;
tsPagesClick(Sender);
end;
//******************************************//
// Обработчик меню: Дефицитные ЭРИ //
//******************************************//
procedure TfmStoreView.mmNotAvailableClick(Sender: TObject);
begin
mmAll.Checked := false;
mmAvailable.Checked := false;
mmNotAvailable.Checked := true;
tbAll.Down := false;
tbAvailable.Down := false;
tbNotAvailable.Down := true;
StatusBar.Panels.Items[3].Text := ' ' + mmNotAvailable.Caption;
tsPagesClick(Sender);
end;
//***********************************//
// Обработчик меню: Все ЭРИ //
//***********************************//
procedure TfmStoreView.mmAllClick(Sender: TObject);
begin
mmAll.Checked := true;
mmAvailable.Checked := false;
mmNotAvailable.Checked := false;
tbAll.Down := true;
tbAvailable.Down := false;
tbNotAvailable.Down := false;
StatusBar.Panels.Items[3].Text := ' ' + mmAll.Caption;
tsPagesClick(Sender);
end;
//****************************************//
// Обработчик меню: Новая заявка //
//****************************************//
procedure TfmStoreView.mmOrderClick(Sender: TObject);
begin
fmOrderContent.ShowingType := otNew;
fmOrderContent.ShowModal;
tsPagesClick(Sender);
end;
//**********************************************//
// Обработчик меню: Приходная ведомость //
//**********************************************//
procedure TfmStoreView.mmIncomingClick(Sender: TObject);
begin
fmDocContent.DocType := vtNew;
fmDocContent.nDocType := 3;
fmDocContent.lblOrder.Caption := 'Приходная ведомость № ';
fmDocContent.ShowModal;
tsPagesClick(Sender);
end;
//**********************************************//
// Обработчик меню: Расходная ведомость //
//**********************************************//
procedure TfmStoreView.mmOutgoingClick(Sender: TObject);
begin
fmDocContent.DocType := vtNew;
fmDocContent.nDocType := 2;
fmDocContent.lblOrder.Caption := 'Расходная ведомость № ';
fmDocContent.ShowModal;
tsPagesClick(Sender);
end;
//************************************************//
// Обработчик меню: Перемещение по складу //
//************************************************//
procedure TfmStoreView.mmTransferClick(Sender: TObject);
begin
fmDocContent.DocType := vtNew;
fmDocContent.nDocType := 4;
fmDocContent.lblOrder.Caption := 'Перемещение по складу № ';
fmDocContent.ShowModal;
tsPagesClick(Sender);
end;
//********************************************//
// Обработчик меню: Журнал документов //
//********************************************//
procedure TfmStoreView.mmDocListClick(Sender: TObject);
begin
fmDocList.ShowModal;
tsPagesClick(Sender);
end;
//****************************************//
// Обработчик меню: Журнал заявок //
//****************************************//
procedure TfmStoreView.mmOrderListClick(Sender: TObject);
begin
fmOrderList.ShowModal;
tsPagesClick(Sender);
end;
//******************************************//
// Обработчик меню: Журнал операций //
//******************************************//
procedure TfmStoreView.mmLogClick(Sender: TObject);
begin
fmStoreLog.ShowModal;
tsPagesClick(Sender);
end;
//**************************//
// Смена закладок //
//**************************//
procedure TfmStoreView.tsPagesClick(Sender: TObject);
var
Left, Top, Bottom : integer;
begin
Top := Round(StatusBar.Height / 4);
Left := StatusBar.Panels[0].Width + StatusBar.Panels[1].Width + 5;
Bottom := 3 * Top;
StatusBar.Canvas.Pen.Color := clNavy;
StatusBar.Canvas.Brush.Color := clNavy;
StatusBar.Panels[1].Text := IntToStr(tsPages.TabIndex + 1) + ' : ' + IntToStr(tsPages.Tabs.Count);
rmDM.qrElements.Transaction.CommitRetaining;
if (tsPages.TabIndex = -1) or (tsPages.Tabs[tsPages.TabIndex] = 'Пусто') then
begin
rmDM.qrElements.Close;
Exit;
end;
StatusBar.Canvas.Rectangle(Left, Top, Left + 100, Bottom);
with rmDM.qrElements do
begin
Close;
SQL.Clear;
SQL.Add('select * from V_ELEMENTS ');
SQL.Add('where NAMENE = ''' + tsPages.Tabs[tsPages.TabIndex]+ '''');
if mmAvailable.Checked
then SQL.Add(' and ACTUAL > 0');
if mmNotAvailable.Checked
then SQL.Add(' and ACTUAL <= 0');
Open;
FieldByName('IDE').Visible := false;
FieldByName('NAMENE').Visible := false;
FieldByName('PRICE').Visible := false;
FieldByName('VENDOR').Visible := false;
FieldByName('REPLACEMENT').Visible := false;
FieldByName('TYPEE').DisplayLabel := 'Тип ЭРИ';
FieldByName('TYPEE').DisplayWidth := 30;
FieldByName('PRODUCER').DisplayLabel := 'Фирма-изготовитель';
FieldByName('PRODUCER').DisplayWidth := 20;
FieldByName('PERFORMANCE').DisplayLabel := 'Вид исполнения';
FieldByName('PERFORMANCE').DisplayWidth := 30;
FieldByName('EXIST').DisplayLabel := 'Имеется';
FieldByName('EXIST').DisplayWidth := 12;
FieldByName('RESERVED').DisplayLabel := 'Заказано';
FieldByName('RESERVED').DisplayWidth := 12;
FieldByName('ACTUAL').DisplayLabel := 'Доступно';
FieldByName('ACTUAL').DisplayWidth := 12;
FieldByName('COMMENT').DisplayLabel := 'Примечание';
FieldByName('COMMENT').DisplayWidth := 40;
end;
rmDM.qrElements.Transaction.CommitRetaining;
if mmAll.Checked
then StatusBar.Panels.Items[3].Text := ' ' + mmAll.Caption;
StatusBar.Canvas.Pen.Color := clBtnFace;
StatusBar.Canvas.Brush.Color := clBtnFace;
StatusBar.Canvas.Rectangle(Left, Top, Left + 100, Bottom);
end;
//**************************************//
// Переход на первую закладку //
//**************************************//
procedure TfmStoreView.sbFirstClick(Sender: TObject);
begin
tsPages.TabIndex := -1;
tsPages.TabIndex := 0;
end;
//******************************************//
// Переход на предыдущую закладку //
//******************************************//
procedure TfmStoreView.sbLeftClick(Sender: TObject);
begin
if(tsPages.TabIndex <> 0) then
tsPages.SelectNext(false);
end;
//****************************************//
// Переход на следующую закладку //
//****************************************//
procedure TfmStoreView.sbRightClick(Sender: TObject);
begin
if(tsPages.TabIndex <> tsPages.Tabs.Count - 1) then
tsPages.SelectNext(true);
end;
//****************************************//
// Переход на последнюю закладку //
//****************************************//
procedure TfmStoreView.sbLastClick(Sender: TObject);
begin
tsPages.TabIndex := -1;
tsPages.TabIndex := tsPages.Tabs.Count - 1;
end;
//****************************************************************//
// Изменение размеров панели с кнопкой закрытия страниц //
//****************************************************************//
procedure TfmStoreView.ClosePanelResize(Sender: TObject);
begin
sbCloseCategory.Left := ClosePanel.Width - 15;
end;
//**************************************************//
// Вызов карточки элемента двойным щелчком //
//**************************************************//
procedure TfmStoreView.dbgTableDblClick(Sender: TObject);
begin
if rmDM.qrElements.IsEmpty then
Exit;
fmElementStoreView.ElementView := true;
fmElementStoreView.ShowModal;
end;
//****************************//
// Разрушение формы //
//****************************//
procedure TfmStoreView.FormDestroy(Sender: TObject);
var
i : integer;
IniFile : TIniFile;
begin
IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'IniFiles/Category.ini');
IniFile.EraseSection('CATEGORY_STORE');
if tsPages.Tabs[0] <> 'Пусто' then
for i := 0 to tsPages.Tabs.Count - 1 do
IniFile.WriteString('CATEGORY_STORE', 'CAT' + IntToStr(i+1), tsPages.Tabs[i]);
IniFile.Free;
end;
//***************************************************//
// Переход в режим просмотра мест хранения //
//***************************************************//
procedure TfmStoreView.tbStorePlacesClick(Sender: TObject);
begin
fmStorePlaceView.ShowModal;
tsPagesClick(Sender);
end;
end.
//Модуль авторегистрации
unit Reg;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, IB, IniFiles;
type
TfmReg = class(TForm)
paBack: TPanel;
Label1: TLabel;
pbReg: TProgressBar;
Label2: TLabel;
timReg: TTimer;
procedure FormCreate(Sender: TObject);
procedure timRegTimer(Sender: TObject);
private
{ Private declarations }
public
end;
var
fmReg: TfmReg;
implementation
{$R *.dfm}
uses DataModule, IBStoredProc, Greet, Math, StrUtils, WinSock;
//************************//
// Получение логина //
//************************//
function GetCurrentUserName: string;
const
cnMaxUserNameLen = 254;
var
sUserName: string;
dwUserNameLen: DWORD;
begin
dwUserNameLen := cnMaxUserNameLen - 1;
SetLength(sUserName, cnMaxUserNameLen);
GetUserName(PChar(sUserName), dwUserNameLen); //вызов API-функции
SetLength(sUserName, dwUserNameLen);
Result := sUserName; //возвращаем имя пользователя
end;
//***************************//
// Получение IP-адреса //
//***************************//
function GetIPAddress(name: string): string;
var
WSAData: TWSAData;
p: PHostEnt;
begin
try
WSAStartup($0101, WSAData);
p := GetHostByName(PChar(name));
Result := inet_ntoa(PInAddr(p.h_addr_list^)^);
except
Result := '127.0.0.1';
end;
WSACleanup;
end;
//***********************//
// Создание формы //
//***********************//
procedure TfmReg.FormCreate(Sender: TObject);
begin
timReg.Enabled := true;
end;
//***************//
// Таймер //
//***************//
procedure TfmReg.timRegTimer(Sender: TObject);
var
MyIni : TIniFile; //берем путь к базе из ini-файла
KeyFile : TextFile; //файл с RSA-ключом
sPassword : string;
Num : integer;
WinDir: PChar;
List : TStringList;
bExist : boolean;
FileName : string;
HostName : string;
DBPath : string;
begin
timReg.Destroy;
Randomize;
pbReg.StepIt;
fmReg.Refresh;
if not FileExists(ExtractFilePath(Application.ExeName) + 'IniFiles\DB.INI')
then
begin
Application.MessageBox('Не найден ini-файл','Ошибка!',MB_ICONERROR);
Application.Terminate;
Exit;
end;
MyIni := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'IniFiles\DB.INI'); //обращаемся к нужному ini-файлу
HostName := MyIni.ReadString('OPTIONS','DBHOST','-1');
DBPath := MyIni.ReadString('OPTIONS','DBPATH','-1');
if HostName = '-1' then
begin
Application.MessageBox('Ошибка подключения к базе данных',
'Ошибка!',MB_ICONERROR); //если не вышло - ошибка!
Application.Terminate;
Exit;
end;
DM.dbRimbase.DatabaseName := GetIPAddress(HostName) + ':' + DBPath;
DM.ShowRemindDialog := MyIni.ReadBool('OPTIONS','ShowRemind',true);
MyIni.Free;
fmReg.pbReg.StepIt; //двигаем указатель прогресса выполнения
DM.dbRimbase.Connected := false; //на всякий случай отключаемся от базы
try //пытаюсь подключиться к базе
DM.dbRimbase.Open;
except
GetMem(WinDir, 144);
GetWindowsDirectory(WinDir, 144);
StrCat(WinDir, '\system32\drivers\etc\services');
FileName := StrPas(WinDir);
FreeMem(WinDir, 144);
List:= TStringList.Create;
List.LoadFromFile(FileName);
bExist := false;
for Num :=0 to List.Count - 1 do
if Pos('gds_db', List[Num]) <> 0 then
begin
bExist := true;
break;
end;
if not bExist then
begin
List.Add('gds_db 3050/tcp #interbase mlya =)');
List.SaveToFile(FileName);
end;
List.Free;
try
DM.dbRimBase.Open;
except
Application.MessageBox('Ошибка подключения к базе данных',
'Ошибка!',MB_ICONERROR); //если не вышло - ошибка!
Application.Terminate;
Exit;
end;
end;
fmReg.pbReg.StepIt;
DM.sLogin := Trim(GetCurrentUserName); //определили кто за компом
//генерация пароля
if not FileExists(ExtractFilePath(Application.ExeName) + 'IniFiles\key.txt')
then
begin
Application.MessageBox('Не найден ключ-файл','Ошибка!',MB_ICONERROR);
Application.Terminate;
Exit;
end;
AssignFile(KeyFile,ExtractFilePath(Application.ExeName) + 'IniFiles\key.txt'); //подключаем файл с ключом
Reset(KeyFile);
for Num := 1 to (1 + Random(24)) do
Readln(KeyFile,sPassword);
Num := 1 + Random(47);
sPassword := AnsiMidStr(sPassword,Num,15);
fmReg.pbReg.StepIt;
with DM.spAutoReg do //вызываем процедуру регистрации
begin
ParamByName('VC_LOGIN').Value := DM.sLogin;
ParamByName('VC_PASS').Value := sPassword;
ParamByName('REFRESH_CALL').Value := 0;
Prepare;
ExecProc;
DM.sName := ParamByName('VC_NAME').AsString; //запомнили ФИО
DM.sLogin := ParamByName('VC_REAL_LOGIN').AsString; //и логин
DM.nRole := ParamByName('N_ROLE').AsInteger; //и роль
DM.nLevel := ParamByName('N_ACL').AsInteger; //и ACL
Close;
end;
fmReg.pbReg.StepIt;
DM.trRimBase.CommitRetaining; //сохраняем изменения в базе
fmGreet.Show; //играемся с формами
fmGreet.GreetTimer.Enabled := true;
fmGreet.BringToFront;
fmReg.Hide;
end;
end.
//Модуль импорта сведений о пользователях локальной сети
unit ImportUsers;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls, ShellAPI, Buttons;
type
TfmImportUsers = class(TForm)
ListView: TListView;
BottomPanel: TPanel;
buGetData: TButton;
buImportData: TButton;
buExit: TButton;
StatusBar: TStatusBar;
RadioGroup: TRadioGroup;
procedure buExitClick(Sender: TObject);
procedure buGetDataClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListViewClick(Sender: TObject);
procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
procedure buImportDataClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ListViewCompare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
private
{ Private declarations }
public
UserList : TStringList;
CheckAll : boolean;
ColumnToSort : integer;
NumOfClicks : integer;
procedure GenerateList(var s : string);
procedure GetUserInfo(sLogin : string);
end;
var
fmImportUsers: TfmImportUsers;
implementation
uses StrUtils, DataModule;
{$R *.dfm}
//***********************************//
// Перехват вывода из консоли //
//***********************************//
function GetDosOutput(const CommandLine: string;
const WorkDir: string;
var text: String): Boolean;
var
SA: TSecurityAttributes;
SI: TStartupInfo;
PI: TProcessInformation;
StdOutPipeRead, StdOutPipeWrite: THandle;
WasOK: Boolean;
Buffer: array[0..255] of Char;
BytesRead: Cardinal;
Line: String;
begin
Application.ProcessMessages;
with SA do
begin
nLength := SizeOf(SA);
bInheritHandle := True;
lpSecurityDescriptor := nil;
end;
// create pipe for standard output redirection
CreatePipe(StdOutPipeRead, // read handle
StdOutPipeWrite, // write handle
@SA, // security attributes
0 // number of bytes reserved for pipe - 0 default
);
try
// Make child process use StdOutPipeWrite as standard out,
// and make sure it does not show on screen.
with SI do
begin
FillChar(SI, SizeOf(SI), 0);
cb := SizeOf(SI);
dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
wShowWindow := SW_HIDE;
hStdInput := GetStdHandle(STD_INPUT_HANDLE);
hStdOutput := StdOutPipeWrite;
hStdError := StdOutPipeWrite;
end;
// launch the command line compiler
//WorkDir := 'C:\';
result := CreateProcess(
nil,
PChar(CommandLine),
nil,
nil,
True,
0,
nil,
PChar(WorkDir),
SI,
PI);
CloseHandle(StdOutPipeWrite);
// if process could be created then handle its output
if result then
try
// get all output until dos app finishes
Line := '';
repeat
// read block of characters (might contain carriage returns and line feeds)
WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);
// has anything been read?
if BytesRead > 0 then
begin
// finish buffer to PChar
Buffer[BytesRead] := #0;
// combine the buffer with the rest of the last run
Line := Line + Buffer;
end;
until not WasOK or (BytesRead = 0);
// wait for console app to finish (should be already at this point)
WaitForSingleObject(PI.hProcess, INFINITE);
finally
// Close all remaining handles
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
finally
text := Line;
CloseHandle(StdOutPipeRead);
end;
end;
//*************************//
// Перевод кодировки //
//*************************//
procedure DosToWinConvert(var s: string); //перекодировка
var
Old, New : PChar;
begin
Old := PChar(s);
New := Old;
OemToChar(Old, New);
s := string(New);
end;
//***********************//
// Создание формы //
//***********************//
procedure TfmImportUsers.FormCreate(Sender: TObject);
begin
UserList := TStringList.Create;
end;
//********************//
// Показ формы //
//********************//
procedure TfmImportUsers.FormShow(Sender: TObject);
begin
RadioGroup.ItemIndex := 0;
ListView.Items.Clear;
StatusBar.Panels.Items[0].Text := ' Всего: 0';
StatusBar.Panels.Items[3].Text := ' Отмечено: 0';
ColumnToSort := 1;
NumOfClicks := 1;
CheckAll := false;
buImportData.Enabled := false;
end;
//**************************//
// Обработчик: Выход //
//**************************//
procedure TfmImportUsers.buExitClick(Sender: TObject);
begin
fmImportUsers.Close;
end;
//**************************************//
// Обработчик: Получить сведения //
//**************************************//
procedure TfmImportUsers.buGetDataClick(Sender: TObject);
var
s : string;
i, Left, Top, Bottom : integer;
Step : double;
begin
Top := Round(StatusBar.Height / 4);
Left := StatusBar.Panels[0].Width + StatusBar.Panels[1].Width + 5;
Bottom := 3 * Top;
StatusBar.Canvas.Pen.Color := clNavy;
StatusBar.Canvas.Brush.Color := clNavy;
StatusBar.Canvas.Rectangle(Left, Top, Left + 8, Bottom);
StatusBar.Panels.Items[1].Text := ' Идет получение сведений...';
StatusBar.Panels.Items[0].Text := ' Пусто';
StatusBar.Panels.Items[3].Text := '';
buExit.Enabled := false;
buGetData.Enabled := false;
buImportData.Enabled := false;
if RadioGroup.ItemIndex = 0
then GetDosOutput('net user','c:\',s)
else GetDosOutput('net user /domain','c:\',s);
DosToWinConvert(s);
GenerateList(s);
ListView.Items.BeginUpdate; //блокируем отрисовку ListView
ListView.Items.Clear;
if UserList.Count > 0
then Step := 130 / UserList.Count;
for i := 0 to UserList.Count - 1 do
begin
GetUserInfo(UserList.Strings[i]); //получаем информацию по каждому пользователю
StatusBar.Canvas.Rectangle(Left, Top, Left + 8 + Round(Step*(i+1)), Bottom);
end;
StatusBar.Panels.Items[1].Text := '';
ListView.Items.EndUpdate; //разрешаем отрисовку ListView
if UserList.Count > 0 then
with StatusBar.Panels do
begin
Items[0].Text := ' Всего: ' + IntToStr(UserList.Count);
Items[1].Text := '';
Items[3].Text := ' Отмечено: 0';
buImportData.Enabled := true;
end;
buExit.Enabled := true;
buGetData.Enabled := true;
StatusBar.Canvas.Pen.Color := clBtnFace;
StatusBar.Canvas.Brush.Color := clBtnFace;
StatusBar.Canvas.Rectangle(Left, Top, Left + 140, Bottom);
end;
//**********************************//
// Обработчик: Импортировать //
//**********************************//
procedure TfmImportUsers.buImportDataClick(Sender: TObject);
var
i, nUpdated, nNew, nType : integer;
s : string;
begin
DM.spUser.StoredProcName := 'IMPORT_USER_INFO';
nUpdated := 0;
nNew := 0;
StatusBar.Panels.Items[1].Text := ' Идет импорт сведений...';
for i := 0 to ListView.Items.Count - 1 do
if ListView.Items.Item[i].Checked
then
with ListView.Items.Item[i].SubItems do
begin
DM.spUser.Close;
DM.spUser.ParamByName('VC_LOGIN').Value := Strings[0];
DM.spUser.ParamByName('VC_NAME').Value := Strings[1];
DM.spUser.ParamByName('VC_DEP').Value := Strings[2];
DM.spUser.Prepare;
DM.spUser.ExecProc;
nType := DM.spUser.ParamByName('N_TYPE').AsInteger;
if (nType = 1) then nNew := nNew + 1;
if (nType = 0) then nUpdated := nUpdated + 1;
end;
s := 'Добавлено записей: ' + IntToStr(nNew) + #13#10 + 'Обновлено записей: ' + IntToStr(nUpdated);
ShowMessage(s);
StatusBar.Panels.Items[1].Text := '';
end;
//**************************************//
// Создание списка пользователей //
//**************************************//
procedure TfmImportUsers.GenerateList(var s : string);
var
tmp, line : string;
i, j : integer;
begin
UserList.Clear;
i := AnsiPos('--',s);
if i = 0
then
begin
Application.MessageBox('Импорт сведений из данного источника невозможен','Ошибка!',MB_ICONERROR);
Exit;
end;
Delete(s,1,i);
Delete(s,1,80);
i := Pos(#10,s);
line := Copy(s,1,i);
tmp := AnsiLeftStr(s,8);
Delete(s,1,i);
while (tmp <> 'The com') and (tmp <> 'Команда') do
begin
for j := 1 to 3 do
begin
if (j < 3) and (line <> '')
then
begin
i := AnsiPos(' ',line);
tmp := Copy(line,1,i-1);
Delete(line,1,i);
line := TrimLeft(line);
end
else tmp := line;
tmp := trim(tmp);
if (tmp <> '') and (tmp <> 'Administrator') and (tmp <> 'Guest')
and (tmp <> 'Администратор') and (tmp <> 'Гость') then UserList.Add(tmp);
end;
i := Pos(#10,s);
line := Copy(s,1,i);
tmp := AnsiLeftStr(s,7);
Delete(s,1,i);
end;
end;
//******************************************//
// Получение сведений о пользователе //
//******************************************//
procedure TfmImportUsers.GetUserInfo(sLogin : string);
var
i,j : integer;
s,tmp : string;
NewItem : TListItem;
begin
if RadioGroup.ItemIndex = 0
then GetDosOutput('net user ' + sLogin,'c:\',s)
else
begin
GetDosOutput('net user ' + sLogin + ' /domain','c:\',s);
for j := 1 to 2 do
begin
i := Pos(#10,s);
Delete(s,1,i);
end;
end;
DosToWinConvert(s);
NewItem := ListView.Items.Add;
for j := 0 to 2 do
begin
i := Pos(#10,s);
tmp := Copy(s,1,i);
Delete(s,1,i);
i := Pos(' ',tmp);
Delete(tmp,1,i-1);
tmp := Trim(tmp);
if Length(tmp) > 50 then SetLength(tmp,50);
NewItem.SubItems.Add(tmp);
end;
end;
//***********************//
// Щелчок по гриду //
//***********************//
procedure TfmImportUsers.ListViewClick(Sender: TObject);
var
i : integer;
chkCount : integer;
begin
chkCount := 0;
for i := 0 to ListView.Items.Count - 1 do
if ListView.Items.Item[i].Checked
then chkCount := chkCount + 1;
StatusBar.Panels.Items[3].Text := ' Отмечено: ' + IntToStr(chkCount);
end;
//********************************//
// Щелчок по столбцу грида //
//********************************//
procedure TfmImportUsers.ListViewColumnClick(Sender: TObject;
Column: TListColumn);
var
i : integer;
begin
if ListView.Items.Count = 0 then Exit;
if Column.Index = 0
then
begin
CheckAll := not CheckAll;
if CheckAll
then
for i := 0 to ListView.Items.Count - 1 do
ListView.Items.Item[i].Checked := true
else
for i := 0 to ListView.Items.Count - 1 do
ListView.Items.Item[i].Checked := false;
if CheckAll
then StatusBar.Panels.Items[3].Text := ' Отмечено: ' + IntToStr(ListView.Items.Count)
else StatusBar.Panels.Items[3].Text := ' Отмечено: 0';
end
else
begin
ListView.Items.BeginUpdate;
ListView.Columns.Items[1].Caption := 'Логин';
ListView.Columns.Items[2].Caption := 'Полное имя';
ListView.Columns.Items[3].Caption := 'Подразделение (примечание)';
if (ColumnToSort = Column.Index) and (NumOfClicks = 1)
then NumOfClicks := 2 else NumOfClicks := 1;
ColumnToSort := Column.Index;
if NumOfClicks = 1
then Column.Caption := Column.Caption + ' (+)'
else Column.Caption := Column.Caption + ' (-)';
(Sender as TCustomListView).AlphaSort;
ListView.Items.EndUpdate;
end;
end;
//************************//
// Сортировка грида //
//************************//
procedure TfmImportUsers.ListViewCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
Index : integer;
begin
Index := ColumnToSort - 1;
Compare := AnsiCompareText(Item1.SubItems[Index],Item2.SubItems[Index]);
if NumOfClicks = 2 then Compare := (-1) * Compare;
end;
end.
Руководство оператора
1. НАЗНАЧЕНИЕ ПРОГРАММЫ
Программное обеспечение информационно-поисковой системы «Разработка и макетирование» (ПО ИПС РиМ) обеспечивает:
- автоматическую регистрацию и аутентификацию пользователей при входе в ИПС;
- управление учетными записями пользователей ИПС, а также учетными сведениями о них;
- автоматическое формирование перечней элементов и ведомостей покупных изделий, используемых в электрических схемах проектируемых узлов и блоков электронной аппаратуры;
- автоматизацию учета имеющихся на складе ЭРИ, предназначенных для создания макетов и других технических изделий.
2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ
ПО ИПС РиМ предназначено для работы на персональных компьютерах с процессором не ниже i486 под управлением операционных систем Windows NT/2000/XP. На компьютере должны быть установлены MS Excel 2000/XP/2003 и MS Word 2000/XP/2003. SQL Server FireBird 1.5 должен быть установлен и запущен на любом компьютере локальной сети.
Минимальные требования: процессор с тактовой частотой не менее 300 МГц, ОЗУ не менее 128 МБ, 500 МБ свободного дискового пространства, манипулятор «мышь».
ПО ИПС РиМ, содержащее программу в файле RimBase.exe, динамическую библиотеку gds32.dll, папку IniFiles с файлами инициализации Category.ini, DB.ini и key.txt, должно находиться на жестком диске компьютера в одной папке с любым именем. Папка с БД может находиться на любом компьютере локальной сети и иметь любое имя.
3. ВЫПОЛНЕНИЕ ПРОГРАММЫ
3.1. Запуск ПО ИПС РиМ
Для начала работы следует запустить файл RimBase.exe, после чего появляется окно-заставка подключения к базе данных, затем окно-приветствие и главное окно с выбором категорий, реализующее пользовательский интерфейс.
В верхней части главного окна (рис.1) находится меню, выбор команд которого задает выполнение необходимых действий. Под главным меню располагается список элементов, отсортированный по категориям.
Главное меню состоит из следующих команд:
- Файл |
- выполнение всех операций с элементами и категориями элементов; |
|
- Поиск |
- поиск элементов по заданному критерию; |
|
- Правка |
- редактирование информации об узлах и блоках электронной аппаратуры; |
|
- Вид |
- выбор режима отображения информации; |
|
- Администрирование |
- выполнение операций со списком пользователей РиМ и накопленной информацией об использовании ресурсов ИПС; |
|
- Склад |
- выполнение операций по ведению складского учета. |
Главное окно ПО ИПС РиМ
Рисунок 1
Меню «Администрирование» содержит команды:
- Управление пользователями |
- доступ к учетным записям пользователей РиМ; |
|
- Управление сессиями |
- доступ к настройкам модуля мониторинга использования ресурсов ИПС РиМ; |
|
- Анализ данных |
- анализ использования ресурсов ИПС РиМ. |
3.2 Завершение работы с ПО ИПС РиМ
Для завершения работы следует выбрать команду главного меню "Файл->Выход" или нажать на кнопку закрытия главного окна.
3.3. Работа с главным меню ПО ИПС РиМ
Выбор команд из главного и дополнительных меню задается щелчком мыши по пунктам меню. Для отмены выбора команды следует нажать клавишу Esc или перевести курсор мыши на другой пункт меню.
3.3.1. Команда «Администрирование»
Команда предназначена для управления пользователями и настройками ПО ИПС РиМ.
3.3.1.1. Команда «Управление пользователями»
Команда предназначена для управления учетными записями пользователей ПО ИПС РиМ. После выбора команды активизируется окно «Управление пользователями» подсистемы администрирования (рис. 2).
Окно для управления пользователями
Рисунок 2
В верхней части окна находится меню, выбор команд которого задает выполнение необходимых действий. Под главным меню находится список всех пользователей, отсортированный по признакам «Все» и «Новые».
Главное меню этого окна состоит из следующих команд:
- Файл |
- выполнение всех операций с учетными записями пользователей; |
|
- Поиск |
- поиск пользователей по заданному критерию; |
|
- Правка |
- редактирование сведений о пользователях; |
|
- Вид |
- выбор режима отображения информации; |
Меню «Файл» содержит команды:
- Добавить… |
- добавление нового пользователя; |
|
- Удалить… |
- удаление выбранного пользователя; |
|
- Импорт данных |
- импорт сведений из домена локальной сети или с данного компьютера; |
|
- Системные словари |
- управление системными словарями; |
|
- Выход |
- завершение работы с подсистемой администрирования. |
Меню «Поиск» содержит команды:
- Найти |
- поиск пользователей по одному или нескольким критериям. |
Меню «Правка» содержит команды:
- Редактировать |
- изменение сведений о пользователе |
Меню «Вид» содержит команды:
- Таблица |
- отображение информации о пользователях в табличном виде |
|
- Форма |
- отображение информации о пользователях в виде формы. |
Работа с главным меню подсистемы администрирования
Выбор команд из главного меню задается щелчком мыши по пунктам меню. Для отмена выбора команды следует нажать клавишу Esc или перевести курсор мыши на другой пункт меню.
Команда «Файл»
Команда предназначена для работы с учетными сведениями пользователей.
Команда «Добавить…»
Команда предназначена для добавления нового пользователя. После выбора команды активизируется окно «Добавление пользователя», в котором можно ввести всю необходимую информацию (рис.3).
Окно для добавления пользователя
Рисунок 3
Для подтверждения введенных данных необходимо нажать кнопку СОХРАНИТЬ. Для отказа - нажать кнопку ОТМЕНА или кнопку закрытия окна.
Команда «Удалить…»
Команда предназначена для удаления выбранного пользователя. После выбора команды активизируется диалоговое окно с запросом «Удалить пользователя … ?». Нажатие кнопки ДА приводит к удалению этого пользователя, а нажатие кнопки НЕТ позволяет оператору отказаться от удаления.
Команда «Импорт сведений»
Команда предназначена для импорта сведений о пользователях локальной сети. После выбора команды активизируется диалоговое окно «Импорт сведений о пользователях» (рис. 4).
Окно импорта сведений
Рисунок 4
Чтобы получить имеющиеся сведения, необходимо сначала выбрать источник этих сведений, а потом нажать на кнопку ПОЛУЧИТЬ СВЕДЕНИЯ. После обработки запроса в списке будут отображены все найденные пользователи. Далее необходимо отметить тех пользователей, сведения о которых нужно импортировать и нажать на кнопку ИМПОРТИРОВАТЬ. Сведения будут занесены в базу данных. Чтобы отказаться от импорта надо нажать на кнопку ВЫХОД или на кнопку закрытия окна.
Команда «Системные словари»
Команда предназначена для управления системными словарями «Роли пользователей» и «Коды доступа к документам». После выбора команды активизируется диалоговое окно «Управление словарями» (рис. 5).
Окно управления словарями
Рисунок 5
Чтобы добавить элемент в словарь, необходимо нажать кнопку ДОБАВИТЬ и в открывшемся окне добавления элемента словаря ввести требуемое наименование (рис. 6), после чего нажать кнопку СОХРАНИТЬ. Отменить добавление можно нажатием кнопки ОТМЕНА или кнопки закрытия окна. Для удаления элемента из словаря предназначена кнопка УДАЛИТЬ, для изменения наименования - кнопка РЕДАКТИРОВАТЬ. Переключение между словарями осуществляется щелчком мыши на соответствующей закладке. Чтобы выйти из режима управления словарями, необходимо нажать кнопку ВЫХОД или кнопку закрытия окна.
Окно добавления элемента в словарь
Рисунок 6
Команда «Поиск»
Команда предназначена для поиска сведений об учетных записях пользователей по одному или нескольким критериям.
Команда «Найти»
Команда предназначена для поиска сведений об учетных записях пользователей по одному или нескольким критериям. После выбора команды активизируется диалоговое окно «Поиск пользователей» (рис. 7).
Окно поиска сведений о пользователе
Рисунок 7
Каждый из предусмотренных критериев поиска выбирается или отменяется щелчком мыши по индикатору, расположенном слева от названия критерия, после чего появляется или исчезает «галочка». Выбранный критерий поиска отмечается «галочкой» в соответствующем индикаторе. После выбора конкретного критерия напротив него активизируется поле для ввода значения или поле выбора значений из списка.
Нажатие на кнопку НАЙТИ запускает процесс поиска информации, удовлетворяющей значениям выбранных критериев. Результат поиска отображается на закладке «Результат поиска» окна «Управление пользователями» (рис.8).
Для закрытия окна необходимо нажать кнопку ОТМЕНА или нажать на кнопку закрытия окна.
Окно с результатом поиска
Рисунок 8
Команда «Правка»
Команда предназначена для изменения сведений о пользователях.
Команда «Редактировать»
Команда предназначена для редактирования сведений о пользователях. После выбора команды активизируется диалоговое окно «Редактирование пользователя» (рис. 9).
Окно для редактирования сведений о пользователе
Рисунок 9
После внесения всех необходимых изменений необходимо нажать кнопку СОХРАНИТЬ. После этого активизируется диалоговое окно с запросом «Изменить сведения о пользователе…?». Нажатие кнопки ДА приводит к сохранению введенной информации, а нажатие кнопки НЕТ позволяет оператору отказаться от сохранения
Команда «Вид»
Команда предназначена для переключения режима отображения информации (Таблица/Форма).
Команда «Таблица»
Команда предназначена для отображения информации о пользователях в виде таблицы. Отображение сведений в табличном виде представлено на рисунке 2.
Команда «Форма»
Команда предназначена для отображения информации об элементах в виде формы. Отображение сведений в виде формы представлено на рисунке 10.
Отображение информации в виде формы
Рисунок 10
Навигация по учетным записям осуществляется с помощью кнопок, расположенных в левом нижнем углу формы.
Действие «Назначить новые права доступа отмеченным пользователям». Команда предназначена для назначения новых прав доступа пользователям, учетные записи которых были отмечены в окне «Управление пользователей» «галочкой» (в режиме таблицы). В режиме формы команда будет применена к текущей учетной записи. После выбора команды активизируется диалоговое окно «Назначение прав доступа» (рис. 11).
Окно назначения прав доступа пользователям
Рисунок 11
В открывшемся окне необходимо отметить «галочкой» категорию прав доступа, которую требуется изменить, после чего выбрать новое значение из выпадающего списка. Для сохранения изменений нужно нажать на кнопку НАЗНАЧИТЬ, для отмены команды - на кнопку ОТМЕНА или кнопку закрытия окна.
Действие «Поиск по логину»
Команда выполняет инкрементальный поиск пользователей по их логину путем установки фильтра отображения на таблицу значений. Модификация фильтра производится путем изменения введенного значения в поле ввода «Поиск по логину».
Работа с панелью инструментов окна «Управление пользователями»
Кнопки на панели инструментов дублируют основные команды главного меню и предназначены для их быстрого вызова.
Команда «Добавить пользователя» |
||
Дублирует команду главного меню «Файл->Добавить…». |
||
Команда «Удалить пользователя» |
||
Дублирует команду главного меню «Файл->Удалить…». |
||
Команда «Поиск» |
||
Дублирует команду главного меню «Поиск->Найти». |
||
Команда «Редактировать» |
||
Дублирует команду главного меню «Правка->Редактировать». |
||
Команда «Таблица» |
||
Дублирует команду главного меню «Вид->Таблица». |
||
Команда «Форма» |
||
Дублирует команду главного меню «Вид->Форма». |
||
Команда «Показать уведомление о новых пользователях» |
||
Предназначена для показа окна-уведомления о новых пользователях (рис. 12). В этом окне выводится информация о наличии в системе новых зарегистрированных пользователей. Чтобы данное окно показывалось при входе в подсистему администрирования, необходимо отметить «галочкой» соответствующую настройку. При нажатии кнопки ДА будет осуществлен переход на закладку «Новые». При нажатии кнопки НЕТ будет закрыто окно уведомления. |
||
Команда «Импорт сведений о пользователях» |
||
Дублирует команду главного меню «Файл->Импорт сведений». |
||
Команда «Управление словарями» |
||
Дублирует команду главного меню «Файл->Управление словарями». |
Протокол тестирования
№ теста |
Описание теста |
Дата |
Результат тестирования |
Описание ошибки или примечание |
Исправление ошибки |
|
1.1 |
Запуск программы обычным зарегистриро-ванным пользователем |
16.04.05 |
Выводятся информационное сообщение о подключении к базе данных, приветствие пользователя, главное окно «Элементы» и окно выбора категории. |
В приветствии “Пожалуйста, подожДите” пропущена буква Д. |
Исправлено. Внесены изменения в форму-приветствие. |
|
1.2 |
Использование команды Файл | Добавить, соответствующей кнопки на панели инструментов и горячих клавиш Ctrl-N |
17.04.05 |
Активизируется диалоговое окно “Добавление пользователя” |
|||
1.3 |
Использование команды Файл | Удалить, соответствующей кнопки на панели инструментов и горячих клавиш Ctrl-Del |
29.04.05 |
Если строка в списке пользователей выделена цветом (выбрана), то выводится диалоговое окно “Confirm (заголовок окна) Удалить пользователя “…” ”. После нажатия кнопки НЕТ (NO) происходит вывод списка пользователей. После нажатия кнопки ДА (YES) происходит обновление списка пользователей. |
1. Если строка в списке пользователей не выделена цветом (не выбрана), то выводится диалоговое окно “Информационно-поисковая система (заголовок окна) Access violation at address … in module `RegModule.exe'. Read of address 00000008”. 2. Обновление и вывод списка пользователей на закладке ВСЕ происходит построчным стиранием и повторным выводом. Это неудачный способ отображения списка. |
Исправлено. 1. Сделана проверка на условие отметки пользователя, в противном случае выводится предупреждение. 2. Заменен механизм обновления и отображения информации в таблице. |
|
1.4 |
Использование команды Файл | Импорт данных, соответствующей кнопки на панели инструментов и горячих клавиш Ctrl-I |
29.04.05 |
Активизируется диалоговое окно “Импорт сведений о пользователях” |
|||
1.5 |
Использование команды Поиск| Найти …, соответствующей кнопки на панели инструментов и горячих клавиш Ctrl-F |
29.04.05 |
Активизируется диалоговое окно “Поиск пользователей”. |
|||
1.6 |
Работа с диалоговым окном “Поиск пользователей ” |
29.04.05 |
Результаты поиска помещаются на новую закладку “Результаты поиска”. Если все критерии не отмечены или значения для всех критериев не заданы, то результаты поиска включают в себя всех зарегистрированных пользователей. Для строковых значений различаются строчные и прописные буквы, поиск проводится по начальным символам строк. 1. По логину ищет правильно. 2. По ФИО ищет правильно. 3. По должности ищет правильно. 4. По подразделению ищет правильно. 5. По роли ищет правильно. 6. По сочетанию этих критериев ищет правильно. |
1. По коду доступа поиск приводит к ошибке Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 35 and. 2. По дате регистрации поиск приводит к ошибке conversion error from string “0” |
Исправлено. Внесены изменения в процедуру формирования запроса к базе данных. |
|
1.7 |
Использование команды Правка | Редактировать, соответствую-щей кнопки на панели инструментов и горячих клавиш Ctrl-E |
29.04.05 |
Активизируется диалоговое окно “Редактирование пользователя”. |
Независимо от того, выделена строка в списке пользователей или нет, диалоговое окно “Редактирование пользователя” всегда содержит сведения о пользователе, которые находятся в последней строке списка пользователей в главном окне. |
Исправлено. Добавлено слежение за выделенной строкой главного окна, если выделения нет - тогда выводится предупреждение. |
|
1.8 |
Переход в режим редактирования сведений о пользователе двойным щелчком по списку пользователей |
29.04.05 |
Активизируется диалоговое окно “Редактирование пользователя” со сведениями об указанном мышью пользователе. |
Если сделать двойной щелчок за последней строкой списка, то выводится диалоговое окно “Информационно-поисковая система (заголовок окна) Access violation at address … in module `RegModule.exe'. Read of address 00000008”. |
Исправлено. Добавлено перманентное выделение - теперь по двойному щелчку осуществляется переход в окно редактирования отмеченного пользователя |
|
1.9 |
Запуск модуля пользователем с ролью администратора |
17.04.05 |
Выводятся информационное сообщение о подключении к базе данных, приветствие пользователя и уведомление о количестве зарегистрированных новых пользователей, если задан режим уведомления при входе в систему. |
|||
1.10 |
Работа с окном “Внимание!” |
17.04.05 |
Нажатие кнопки “OK” обычным пользователем активизирует диалоговое окно с сообщением “Вы не являетесь администратором системы”; администратор после ввода логина и пароля входит в систему. Нажатие кнопки “Отмена” активизирует диалоговое окно с надписью “Выход”. После кнопки ОК происходит завершение работы модуля. |
Это окно должно появляться при выборе пункта Администрирование в модуле Rimbase. |
Исправлено при объединении модулей |
|
1.11 |
Работа с диалоговым окном “Добавление пользователя” |
20.04.05 29.04.05 |
1. Если не указан Логин, то при нажатии на кнопку Сохранить выводится диалоговое окно с сообщением “Ошибка! (заголовок окна) Не указан логин”. После нажатия кнопки OK происходит возврат в окно “Добавление пользователя”. 2. Значение атрибута “Уровень доступа” не контролируется на допустимость (можно ввести любое целое число <0, =0, >0). 3. Незаданное значение атрибута “Уровень доступа” по умолчанию устанавливается равным нулю. Остальные атрибуты с незаданными значениями устанавливается пустыми. 4. Если заполнено хотя бы поле логина, то при нажатии на кнопку Сохранить выводится диалоговое окно с запросом “Information (заголовок окна) Добавить пользователя “…”?”. После нажатия кнопки ДА (YES) выводится диалоговое окно с сообщением “Информационно-поисковая с… (заголовок окна) Пользователь успешно добавлен”. Нажатие кнопки ОК в этом окне приводит к закрытию диалогового окна “Добавление пользователя”. После нажатия кнопки НЕТ (NO) происходит возврат в окно “Добавление пользователя”. 5. При попытке добавить пользователя с логином, который уже имеется в БД, выводится сообщение об ошибке “Ошибка! (заголовок окна) Такой пользователь уже существует”. 6. При нажатии на кнопку ОТМЕНА диалоговое окно “Добавление пользователя” закрывается. |
1. Откуда появился атрибут “Уровень доступа”? В БД есть “Код доступа к документам”. 2. После закрытия диалогового окна “Добавление пользователя” происходит обновление списка пользователей на закладке ВСЕ построчным стиранием и повторным выводом. Это неудачный способ обновления списка |
1. Исправлено. Внесены изменения в соответствующие формы. 2. Исправлено. |
|
1.12 |
Работа с диалоговым окном “Импорт сведений о пользователях” |
29.04.04 |
1. После выбора источника сведений (локальный компьютер или домен) и нажатия кнопки ПОЛУЧИТЬ СВЕДЕНИЯ формируется список пользователей сведений (локального компьютера или домена). В среднем поле строки состояния выводится сообщение “Идет получение информации …”. После получения сведений в левом поле строки состояния выводится сообщение, что получены сведения о “Всего: k” пользователях. 2. Щелчок по заголовку первой колонки позволяет отметить (или снять отметки) все строки списка пользователей. В правом поле строки состояния выводится сообщение “Отмечено: i”. Это сообщение оперативно информирует о количестве отмеченных строк сразу после установки или снятия отметок. 3. Если строки не отмечены, то при нажатии на кнопку ИМПОРТИРОВАТЬ выводится диалоговое окно “Информационно-п… (заголовок окна) Добавлено записей: 0 Обновлено записей: 0 ” (в среднем поле строки состояния выводится сообщение “Идет импорт данных …”). Нажатие кнопки ОК в этом окне приводит к возврату в диалоговое окно “Импорт сведений о пользователях”. 4. Если какие-то строки отмечены, то при нажатии на кнопку ИМПОРТИРОВАТЬ выводится диалоговое окно “Информационно-п… (заголовок окна) Добавлено записей: n Обновлено записей: m ”. Нажатие кнопки ОК в этом окне приводит к возврату в диалоговое окно “Импорт сведений о пользователях”. 5. При нажатии на кнопку ВЫХОД диалоговое окно “Импорт сведений о пользователях” закрывается. |
1. Если окно активизируется повторно после того, как производилось получение сведений, то в левом поле строки состояния вместо сообщения “Пусто” выводится старое сообщение “Всего: k”. 2. После возврата в главное окно импортированные сведения о пользователях появляются в списке на закладке ВСЕ только при щелчке по заголовку любого столбца (кроме 1-го) или при переключении на закладку НОВЫЕ и возврата на закладку ВСЕ. |
1. Исправлено. Внесены изменения в форму. 2. Исправлено. Изменен механизм работы с транзакциями. |
|
1.13 |
Использование команды Файл | Выход |
29.04.05 |
Завершается работа подсистемы. |
|||
1.14 |
Работа с диалоговым окном “Редактирование пользователя” |
30.04.05 |
Все измененные атрибуты пользователя (кроме недоступного для корректировки логина) запоминаются после нажатия кнопки СОХРАНИТЬ и нажатия кнопки ДА (YES) в диалоговом окне “Information (заголовок окна) Изменить сведения о пользователе “…”?” (после этого окно “Редактирование пользователя”закрывается). Нажатие кнопки НЕТ (NO) приводит к возврату в окно “Редактирование пользователя”. При нажатии на кнопку ОТМЕНА сделанные изменения не сохраняются, и окно закрывается. |
Заголовок окна Information следует заменить на Подтвердите. |
Исправлено |
|
1.15 |
Использование команды Вид | Таблица, соответствующей кнопки на панели инструментов и горячих клавиш F11 |
30.04.05 |
Список пользователей на активной закладке отображается в виде таблицы. |
|||
1.16 |
Использование команды Вид | Форма, соответствующей кнопки на панели инструментов и горячих клавиш F11 |
30.04.05 |
Сведения об отмеченном в списке пользователе на активной закладке отображается в виде формы. С помощью кнопок навигатора можно переходить к сведениям “соседних” пользователей. |
|||
1.17 |
Использование кнопки ПОКАЗАТЬ УВЕДОМЛЕ-НИЕ О НОВЫХ ПОЛЬЗОВАТЕ-ЛЯХ на инструменталь-ной панели |
30.04.05 |
Активизируется диалоговое окно “Уведомление (заголовок окна) Внимание! В системе зарегистрированы новые пользователи …” |
|||
1.18 |
Работа с диалоговым окном “Уведомление (заголовок окна) Внимание! В системе зарегистрированы новые пользователи Количество новых пользователей: n Желаете ввести о них учетную информацию? Показывать при входе в систему” |
30.04.05 |
Если окно активизировано на закладке “Все” или “Новые”, то при нажатии кнопки ДА выполняется переход на закладку “Новые”. Если снять отметку индикатора, то при входе в систему администратора диалоговое окно не показывается. Обнаружены ошибки 1-3. |
1. При нажатии кнопки НЕТ выполняется переход на закладку “Новые”. 2.Если окно активизировано на закладке “Результаты поиска”, то при нажатии кнопки ДА переход на закладку “Новые” не выполняется. 3. При наличии текста в поле ввода “Поиск по логину” работа с диалоговым окном сопровождается ошибкой Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 39 where. 4. Дополнить сообщение словом “…Показывать уведомление при входе в систему”. |
Ошибки исправлены |
|
1.19 |
Работа с закладками в главном окне модуля |
30.04.05 |
Переход на закладку происходит при щелчке по ярлыку или с помощью кнопок навигации в левом нижнем углу окна. В строке состояния указывается номер активной закладки и число строк со сведениями о пользователях на ней. Щелчок по заголовку левого столбца приводит к отметке всех строк, щелчки по другим заголовкам - к сортировке по соответствующему атрибуту. |
Подобные документы
Общее описание информационно–справочной системы, предназначенной для контролирования работы промоутеров. Описание входных и выходных данных. Проектирование интерфейса пользователя. Выбор стратегии разработки тестов. Поиск информации, просмотр отчётов.
курсовая работа [3,6 M], добавлен 27.07.2014Выбор состава технических и программных средств разработки системы. Описание входных и выходных данных. Выбор модели базы данных. Разработка подсистемы наполнения базы данных, формирования отчетов. Разработка интерфейса пользователя, тестирование системы.
курсовая работа [3,7 M], добавлен 04.12.2014Возможности программы DBDesigner. Проектирование и реализация информационно-поисковой системы с помощью CASE-средства DBDesigner в среде Intranet. Этапы проектирования базы данных, установление соединения с базой данных на сервере, синхронизация.
лабораторная работа [1,5 M], добавлен 18.08.2009Совместимость и преобразование типов данных. Создание информационно-поисковой системы на языке программирования Паскаль. Описание интерфейса, каждого блока программы "Картотека больных". Рассмотрение результатов работы программы, сортирования данных.
курсовая работа [368,9 K], добавлен 18.05.2015Автоматизация и визуализация рабочего места методиста факультета, работающего с личными делами студентов. Создание базы данных и ограничений. Интерфейс пользователя и порядок работы с программным обеспечением. Разработка справки и контекстной помощи.
курсовая работа [867,3 K], добавлен 22.02.2016Разработка web-приложения для оперирования данными с помощью базы данных и web-браузера в качестве клиента пользователя. Основные преимущества языка программирования Java. Осуществление редактирования, добавления информации и поиска по архивам данных.
дипломная работа [2,1 M], добавлен 30.09.2016Анализ существующих поисковых систем и используемых ими алгоритмов поиска документов. Разработка информационно-поисковой системы словарного типа, способной осуществлять релевантный поиск документов, особенности ее структуры и информационно-поисковой базы.
дипломная работа [942,1 K], добавлен 19.05.2011Разработка программы для автоматизации расчетов на телефонной станции. Описание входной и выходной информации, комплекс технических средств. Интерфейс конечного пользователя. Проектирование программных модулей представления входных и выходных данных.
курсовая работа [460,1 K], добавлен 26.06.2015Разработка информационной системы на языке программирования С++ в среде С++Builder. Схема базы данных. Характеристика энергосберегающих режимов операционной системы. Интерфейс программы, ее установка на компьютер, выполнение, средства и порядок испытания.
отчет по практике [986,2 K], добавлен 06.02.2016Анализ информационно-поисковых систем автоматизации производства. Построение инфологической и логической модели базы данных технологического оборудования для сборочно-монтажных работ. Выбор языка программирования приложения БД. Алгоритм работы программы.
дипломная работа [2,5 M], добавлен 18.12.2013