користувальницький інтерфейс повинний базуватися на термінології і поняттях, знайомих користувачу;
користувальницький інтерфейс повинний бути однаковим;
користувальницький інтерфейс повинний дозволяти користувачу виправляти власні помилки;
користувальницький інтерфейс повинний дозволяти одержання користувачем довідкової інформації: як по його запитам, так і генеруємим ПЗ.
В даний час широко поширені командні і графічні користувальницькі інтерфейси.
Командний користувальницький інтерфейс надає користувачу можливість звертатися до ПЗ із деяким завданням (запитом), що представляється деяким текстом (командою) на спеціальній командній мові (мові завдань). Достоїнствами такого інтерфейсу є можливість його реалізації на дешевих алфавітно-цифрових терміналах і можливість мінімізації необхідного від користувача введення з клавіатури. Недоліками такого інтерфейсу є необхідність вивчення командної мови і досить велика імовірність помилки користувача при завданні команди. У зв'язку з цим командний користувальницький інтерфейс звичайно вибирають тільки досвідчені користувачі. Такий інтерфейс дозволяє їм здійснювати швидку взаємодію з комп'ютером і надає можливість поєднувати команди з процедурами і програмами (наприклад, мова Shell операційної системи Unix).
Графічний користувальницький інтерфейс надає користувачу можливості:
звертатися до ПЗ шляхом вибору на екрані придатного графічного чи текстового об'єкта,
одержувати від ПЗ інформацію на екрані у виді графічних і текстових об'єктів,
здійснювати прямі маніпуляції з графічними і текстовими об'єктами, представленими на екрані.
Графічний користувальницький інтерфейс дозволяє
розміщати на екрані безліч різних вікон, у які можна виводити інформацію незалежно;
використовувати графічні об'єкти (піктограмами чи іконки), для позначення різних інформаційних об'єктів чи процесів;
використовувати курсор для вибору об'єктів (чи їхніх елементів), розміщених на екрані, який переміщається за допомогою клавіатури чи миші.
Достоїнством графічного користувальницького інтерфейсу є можливість створення зручної і зрозумілої користувачу моделі взаємодії з ПЗ (панель керування, робочий стіл і т.п.) без необхідності вивчення якої-небудь спеціальної мови. Однак його розробка вимагає великих витрат часу, порівнянних із витратами по створення самого ПЗ. Крім того, виникає серйозна проблема по перенесенню ПЗ на інші операційні системи, тому що графічний інтерфейс істотно залежить від можливостей (графічної користувальницької платформи), наданих операційною системою для його створення.
З використанням засобів візуального програмування розробити програму для автоматичного розрахунку значень складної функції:
Приклад файлу форми Delphi6 для табулювання функції:
unit Func_tab;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, Menus;
type
TForm1 = class (TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
Label4: TLabel;
ListBox1: TListBox;
Memo1: TMemo;
BitBtn2: TBitBtn;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N3: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
BitBtn3: TBitBtn;
procedure BitBtn1Click (Sender: TObject);
procedure Edit1KeyPress (Sender: TObject; var Key: Char);
procedure Edit2KeyPress (Sender: TObject; var Key: Char);
procedure Edit3KeyPress (Sender: TObject; var Key: Char);
procedure Edit1Exit (Sender: TObject);
procedure Edit2Exit (Sender: TObject);
procedure Edit3Exit (Sender: TObject);
procedure BitBtn2Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure FormActivate (Sender: TObject);
procedure BitBtn3Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N8Click (Sender: TObject);
procedure N9Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
X,Xn,Xk,H: real; // Параметри табулювання
fname: String [25] ; //
f: textfile;
implementation
{$R *. dfm}
// Повідомлення про помилку у завданні інтервалів табулювання
procedure P1;
begin
MessageDlg ('"Xп" не може бути більшим ніж "Хк". ' +#13
+'Введіть значення правильно. ', mtWarning, [mbCancel], 0);
Form1. Edit1. Text: ='';
Form1. Edit2. Text: ='';
end;
// Повідомлення про помилку у значенні кроку табулювання по відношенню до
// меж табулювання
procedure P2;
begin
MessageDlg ('Крок табулювання "H" не може приймати таких значень. ' +#13
+'Введіть значення правильно. ', mtWarning, [mbCancel], 0);
Form1. Edit3. Text: ='';
end;
// Повідомлення про помилку перевищення допустимої розмірності даних
procedure P3;
begin
MessageDlg ('Введене значення знаходться за межами допустимого. ' +#13
+'Введіть значення правильно. ', mtWarning, [mbCancel], 0);
end;
procedure P4;
begin
MessageDlg ('Треба ввести всі дані. ', mtWarning, [mbCancel], 0);
end;
// Процедура очищення даних у формі
procedure P5;
begin
Form1. Edit1. Text: ='';
Form1. Edit2. Text: ='';
Form1. Edit3. Text: ='';
Form1. Edit1. SetFocus;
Form1. Height: =167;
Form1. Position: =poScreenCenter;
Form1. Label4. Visible: =False;
Form1. Label5. Visible: =False;
Form1. Label6. Visible: =False;
Form1. Label7. Visible: =False;
Form1. StringGrid1. Visible: =False;
Form1. ListBox1. Items. Clear;
Form1. Memo1. Lines. Clear;
Form1. ListBox1. Visible: =False;
Form1. Memo1. Visible: =False;
end;
// Контроль введення даних у поля фории
procedure TForm1. Edit1KeyPress (Sender: TObject; var Key: Char);
begin
case Key of
'0'. '9',Chr (8):;
'-': if (pos ('-',Edit1. Text) = 0) and (length (Edit1. Text) = 0)
Then Key: = '-'
else Key: = Chr (0);
',': if pos (',',Edit1. Text) <>0
THen Key: = Chr (0);
else Key: = Chr (0);
end;
end;
procedure TForm1. Edit2KeyPress (Sender: TObject; var Key: Char);
begin
case Key of
'0'. '9',Chr (8):;
'-': if (pos ('-',Edit2. Text) = 0) and (length (Edit2. Text) = 0)
Then Key: = '-'
else Key: = Chr (0);
',': if pos (',',Edit2. Text) <>0
THen Key: = Chr (0);
else Key: = Chr (0);
end;
end;
procedure TForm1. Edit3KeyPress (Sender: TObject; var Key: Char);
begin
case Key of
'0'. '9',Chr (8):;
',': if pos (',',Edit3. Text) <>0
THen Key: = Chr (0);
else Key: = Chr (0);
end;
end;
procedure TForm1. Edit1Exit (Sender: TObject);
begin
If Edit1. Text='' Then Exit;
If (Abs (StrToFloat (Edit1. Text)) >100000) Then
begin
P3;
Edit1. Text: ='';
Edit1. SetFocus;
end;
end;
procedure TForm1. Edit2Exit (Sender: TObject);
begin
If Edit2. Text='' Then Exit;
If (Abs (StrToFloat (Edit2. Text)) >100000) Then
begin
P3;
Edit2. Text: ='';
Edit2. SetFocus;
end;
end;
procedure TForm1. Edit3Exit (Sender: TObject);
begin
If Edit3. Text='' Then Exit;
If (StrToFloat (Edit3. Text) >10000) Then
begin
P3;
Edit3. Text: ='';
Edit3. SetFocus;
end;
end;
// Основна процедура програми
Procedure TForm1. BitBtn1Click (Sender: TObject);
var
I,K: integer;
Y: array [0. .1000] of Real;
label L1;
begin
// Перевірка наявності правильних значень в полях введення і їх взаємної
// коректності, з виведенням відповдних повідомлень і формуванням переходів
IF (Edit1. Text = '') or (Edit2. Text = '') or (Edit3. Text = '') then
begin
P4;
Exit;
end;
IF Edit3. Text = '0' then
begin
MessageDlg ('Треба задати крок табулювання,'
+ #13 +' який має ненульове значення', mtWarning, [mbCancel], 0);
Edit3. Text: = '';
Edit3. SetFocus;
goto l1;
end;
Xn: =StrToFloat (Edit1. Text);
Xk: =StrToFloat (Edit2. Text);
H: =StrToFloat (Edit3. Text);
If Xk<Xn Then
begin
P1;
goto L1;
end;
If (H<=0) Or (H>=Abs (Xk-Xn)) Then
begin
P2;
goto L1;
end;
X: =Xn-H;
K: = Round ( (Abs ( (Xk-Xn)) /H));
If K>1000 Then
begin
MessageDlg ('Переповнення масиву даних. '
+#13 +'Треба зменшити інтервал або'
+#13 +' збільшити крок табулювання', mtWarning, [mbCancel], 0);
Edit1. Text: = '';
Edit2. Text: = '';
Edit3. Text: = '';
goto l1;
end;
// Фомування компонентів для виведення результатів
StringGrid1. RowCount: = K+2;
Form1. Height: =430;
Form1. Position: =poScreenCenter;
Label4. Visible: =True;
Label5. Visible: =True;
Label6. Visible: =True;
Label7. Visible: =True;
StringGrid1. Visible: =True;
Label7. Caption: ='у полі memo';
ListBox1. Items. Clear;
Memo1. Lines. Clear;
ListBox1. Visible: =True;
Memo1. Visible: =True;
StringGrid1. Cells [0,0]: ='X';
StringGrid1. Cells [1,0]: ='Y';
// Розрахунок і виведення результатів
For I: =0 to K do
begin
Y [I]: = (1+ln (2-Xn+H*I)) / (1-Xn+H*I+0.1);
// Наступний рядок забезпечує виведення результату
// з точністю до тисячних
Y [I]: = Round (Y [I] *1000) /1000;
StringGrid1. Cells [0, I+1]: =FloatToStr (Xn+H*I); // Виведення у таблицю
StringGrid1. Cells [1, I+1]: =FloatToStr (Y [I]);
ListBox1. Items. Add (FloatToStr (Xn+H*I) +' '+FloatToStr (Y [i])); // Виведення у список
Memo1. Lines. Add (FloatToStr (Xn+H*I) +' '+FloatToStr (Y [i])); // Виведення у поле Мемо
end;
l1:;
end;
// Запис результатів у файл
procedure TForm1. BitBtn2Click (Sender: TObject);
begin
ListBox1. Items. SaveToFile ('result. txt');
end;
// Збереження у файлі
procedure TForm1. N4Click (Sender: TObject);
begin
ListBox1. Items. SaveToFile (fname);
end;
// Зчитати з файла і вивести у поле Мемо із скриттям зайвих компонентів
procedure TForm1. N3Click (Sender: TObject);
begin
If FileExists ('result. txt') = False Then
Begin
MessageDlg ('Файла не існує', mtWarning, [mbCancel], 0);
Exit;
end;
Label7. Visible: =True;
Label7. Caption: = 'Результати зчитування з файлу';
Memo1. Lines. LoadFromFile ('result. txt');
Memo1. Visible: =True;
Label4. Visible: =False;
Label5. Visible: =False;
Label6. Visible: =False;
ListBox1. Visible: =False;
StringGrid1. Visible: =False;
Form1. Height: =430;
Memo1. SetFocus;
Form1. Position: =poScreenCenter;
end;
// Створення файлу з перевіркою його існування
procedure TForm1. FormActivate (Sender: TObject);
begin
fname: ='result. txt';
AssignFile (f, fname);
If FileExists ('result. txt') = False Then
begin
rewrite (f);
CloseFile (f);
end;
end;
// Очищення полів введення
procedure TForm1. BitBtn3Click (Sender: TObject);
begin
P5;
end;
procedure TForm1. N5Click (Sender: TObject);
begin
P5;
end;
// Вихід з програми
procedure TForm1. N7Click (Sender: TObject);
begin
Close;
end;
// Виведення довідки
procedure TForm1. N8Click (Sender: TObject);
begin
ShowMessage ('Томашов О.В. ' + #13 + ' студент групи ПЗС-504');
end;
procedure TForm1. N9Click (Sender: TObject);
begin
ShowMessage ('Навчальна програма табулювання функції. ' + #13 +
' Версія 1.0');
end;
end.
1. "Требования и спецификации в разработке программ." М. Мир, 1984.
2. В. Турский. "Методология программирования".
3. Б. Іванов “Дискретная математика. Алгоритмы и программы".
4. Конспект лекцій з предмету.
5. Інтернет.