Автор работы: Пользователь скрыл имя, 30 Марта 2014 в 22:04, курсовая работа
Цель. Разработка тестовой программы в системе программирования Delphi 6.0.
Задачей данной работы являлось создание специализированного тестового программного обеспечения, рассчитанного на управление заранее определённой структурой информации и решение вполне определённого и ограниченного круга задач для сотрудников организации, которое одновременно позволяло бы не отвлекаться будущим пользователям на изучение вопросов, связанных с их деятельностью и средствами управления ими.
ВВЕДЕНИЕ 6
1 КОМПЬЮТЕРИЗАЦИЯ ДЕЯТЕЛЬНОСТИ НА ПРЕДПРИЯТИИ 8
1.1 Информационное обеспечение управления предприятием на современном этапе 8
1.2 Содержание и требования, предъявляемые к информации 9
2 СРЕДА DELPHI 6.0 КАК СРЕДСТВО ДЛЯ РАЗРАБОТКИ ПО 11
2.1 Визуальное программирование 11
2.2 Интегрированная среда разработки 12
2.3 Библиотека визуальных компонент 15
2.4 Формы, модули и методы разработки "Two-Way Tools" 19
2.5 Средства программирования на Pascal 20
2.5.1 Краткие сведения о структуре программы 20
2.5.2 Система типов 24 2.5.3 Стандартные процедуры и функции 28
2.5.4 Стандартные функции 31
3 ЭКОНОМИЧЕСКАЯ ЧАСТЬ 33
3.1 Оценка затрат на разработку ПО 33
3.2 Расчёт технических показателей и эффективности проекта 41
3.3 Безопасность жизнедеятельности 42
3.3.1 Характеристика санитарно-гигиенических условий труда 42
3.3.2 Основные требования к искусственному освещению в производственном помещении 46
3.4 Инженерно-технические мероприятия по созданию благоприятных условий труда 46
ЗАКЛЮЧЕНИЕ 52
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 53
ПРИЛОЖЕНИЯ 55
3. Описание логики
3.1 Описание структуры программы и её основных частей
Программа Test состоит из 4 основных модулей:
- модуль Unit1.pas;
- модуль Unit2.pas;
- модуль Unit3.pas;
- модуль Unit4.pas;
- модуль Unit5.pas.
3.2 Описание функций, составных частей и связей между ними
3.2.1 Программа Test:
1. Модуль Unit1.pas - содержит главное окно программы, на котором находится главное меню программы.
2. Модуль Unit2.pas – содержит диалоговое окно с подтверждением о правильности введённых данных: ФИО тестируемого и предмет тестирования.
3. Модуль Unit3.pas – окно, позволяющее просматривать и отвечать на вопросы в процессе тестирования.
4. Модуль Unit4.pas – форма, отвечающая за отображение результатов.
5. Модуль Unit5.pas – для создания и заполнения нового тестового задания.
3.3 Сведения о языке программирования
Программа написана и скомпилирована в среде Borland Delphi 6.0 и для хранения данных использует базы данных Paradox 7.
3.4 Описание входных и выходных данных для каждой из составных частей
3.4.1 Программа Test
3.4.1.1 Входные данные программы
В окне модуля Unit2.pas входными данными являются инициалы тестируемого и выбранный предмет.
3.4.1.2 Выходные данные программы
Отображение текста текущего вопроса и номера вопроса предмета тестирования в окне «Тестирование» модуля Unit3.pas. Отображение оставшегося до конца тестирования времени, отображаемого в верхней панели окна.
Информационное окно о завершении времени, данного на тестирование.
Вывод результата тестирования в окне «Результаты» модуля Unit4.pas с указанными инициалами тестируемого и предмета тестирования и с набранным количеством баллов.
3.5 Описание логики составных частей
3.5.1 Программа Test
После запуска программы необходимо в появившемся окне ввести инициалы студента или сотрудника и выбрать из списка предмет:
Рисунок 3 – Главное окно программы
Если количество предметов более 10, можно воспользоваться фильтрацией поля Список тестов. Нажмите на кнопку Далее.
Рисунок 4 – Окно тестирования
В появившемся окне будут отображаться вопросы. Для навигации по вопросам нужно воспользоваться кнопками вперед - и назад - ,
а предполагаемые правильные ответы выделять с помощью
панели выбора:
Рисунок 5 – Панель выбора
После того как все вопросы были отмечены, необходимо нажать на кнопку - и в окне результатов найти свои инициалы:
Рисунок 6 – Окно результатов тестирования
Для заполнения нового тестового задания нажмите на кнопку Редактор тестов. В появившемся окне введите название предмета, количество вопросов и количество минут для проведения теста, и щёлкните по кнопке Создать. Появится диалоговое окно выбора файла с тестовыми вопросами. После открытия файла тесты автоматически заполнятся в новый предмет.
Рисунок 7 – Окно редактора тестов
ПРИЛОЖЕНИЕ 2
ЛИСТИНГ ПРОГРАММЫ
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ToolWin, ComCtrls, Menus, DB, DBTables, ExtCtrls, StdCtrls;
type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
ToolBar1: TToolBar;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
Table1: TTable;
Table2: TTable;
Table3: TTable;
Table1Nam_Pred: TStringField;
Table1Ind: TAutoIncField;
Table1Count: TIntegerField;
Table1Name_Teach: TStringField;
Table1Time: TIntegerField;
Table1Count_Quest: TIntegerField;
Table1Type_zap: TStringField;
Table3Quest_M: TBlobField;
Table3Quest_B: TBlobField;
Table3Answer: TIntegerField;
Table4: TTable;
Table4Quest_M: TBlobField;
Table4Quest_B: TBlobField;
Table4Answer: TIntegerField;
Table2FIO: TStringField;
Table2Name_Sub: TStringField;
Table2Ball: TIntegerField;
Table2Date: TDateField;
Timer1: TTimer;
N10: TMenuItem;
Label1: TLabel;
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure N10Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Fio, predm, ind : string;
count, x, z, res_i : integer;
ms, mOtv : array [1..30] of integer;
implementation
uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7;
{$R *.dfm}
procedure TForm1.N5Click(Sender: TObject);
var
Dat : TForm2;
begin
Dat := TForm2.Create(Application);
Dat.Show;
end;
procedure TForm1.N6Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.N2Click(Sender: TObject);
label m1;
var
Test : TForm3;
j, i, y : integer;
begin
Table4.Active := True;
if ((predm ='') or (fio = '')) then
begin
ShowMessage('Введите данные!')
exit;
end;
Test := TForm3.Create(Application);
Test.Label1.Caption := predm;
Test.Show;
Test.WindowState := wsMaximized;
Table3.DatabaseName := ExtractFilePath(Application.
Table3.TableName := 'File'+ind+'.db';
Table3.Active := true;
for j := 0 to Table4.RecordCount-1 do
Table4.Delete;
for j := 1 to 30 do
ms[j] := 0;
Randomize;
for i := 1 to 30 do
begin
m1:
x := Random(count);
for j:= 1 to 30 do
if ((x = ms[j]) or (x = 0)) then
goto m1;
ms[i] := x;
end;
for y := 1 to 30 do
begin
Table3.RecNo := ms[y];
Table4.Append;
Table4Quest_M.Value := Table3Quest_M.Value;
Table4Answer.AsInteger := Table3Answer.AsInteger;
Table4.Post;
end;
for i := 1 to 30 do
mOtv[i] := 0;
Table4.First;
Test.RichEdit1.Text := Table4Quest_M.Value;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
predm := '';
fio := '';
ind := '';
z := 1;
res_i := 0;
end;
procedure TForm1.N3Click(Sender: TObject);
var
Rest : TForm4;
begin
Rest := TForm4.Create(Application);
Rest.Show;
Rest.WindowState := wsMaximized;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
N3Click(Form1);
Timer1.Enabled := false;
end;
procedure TForm1.N10Click(Sender: TObject);
begin
Form5.ShowModal;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, Grids, DBGrids, DB;
type
TForm2 = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
StatusBar1: TStatusBar;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
DataSource1: TDataSource;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button2Click(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure UpdateFilter(DataSet: TDataSet);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
s, ss : String;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm2.UpdateFilter(DataSet: TDataSet);
var
FR: TFilterRecordEvent;
begin
with DataSet do
begin
FR := OnFilterRecord;
if Assigned(FR) and Active then
begin
DisableControls;
try
OnFilterRecord := nil;
OnFilterRecord := FR;
finally
EnableControls;
end;
end;
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.Edit2Change(Sender: TObject);
begin
s:=Edit2.Text;
ss:='Nam_Pred';
if length(Edit2.Text) > 0 then
begin
Form1.Table1.FilterOptions:=[
Form1.Table1.Filtered := TRUE;
Form1.Table1.Filter:=ss + ' = ''' + s + '*''';
UpdateFilter(Form1.Table1);
end
else
Form1.Table1.Filtered := FALSE;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
if Edit1.Text = '' then
begin
ShowMessage('Введите инициалы!
exit;
end;
if Form1.Table1.RecordCount <> 0 then
begin
fio := Edit1.Text;
predm := Form1.Table1Nam_Pred.Value;
ind := Form1.Table1Ind.AsString;
count := Form1.Table1Count.AsInteger;
Close;
end
else
ShowMessage('Отсутствует БД!')
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons;
type
TForm3 = class(TForm)
StatusBar1: TStatusBar;
Panel1: TPanel;
RichEdit1: TRichEdit;
Panel2: TPanel;
Label1: TLabel;
RadioGroup1: TRadioGroup;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
SpeedButton3: TSpeedButton;
Timer1: TTimer;
Label5: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
min : integer;
implementation
uses Unit1, DB;
{$R *.dfm}
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm3.SpeedButton2Click(
begin
inc(z);
Form1.Table4.Next;
Label2.Caption := IntToStr(z);
RichEdit1.Text := Form1.Table4Quest_M.Value;
// Запомнить RadioGroup
if RadioGroup1.ItemIndex = 0 then mOtv[z-1] := 1;
if RadioGroup1.ItemIndex = 1 then mOtv[z-1] := 2;
if RadioGroup1.ItemIndex = 2 then mOtv[z-1] := 3;
if RadioGroup1.ItemIndex = 3 then mOtv[z-1] := 4;
if RadioGroup1.ItemIndex = 4 then mOtv[z-1] := 5;
RadioGroup1.ItemIndex := -1;
if mOtv[z] <> 0 then // Вывод RadioGroup
Begin
RadioGroup1.ItemIndex := mOtv[z]-1;
end;
if z = 30 then
SpeedButton2.Enabled := false;
SpeedButton1.Enabled := true;
end;
procedure TForm3.SpeedButton1Click(
begin
dec(z);
Form1.Table4.Prior;
Label2.Caption := IntToStr(z);
RichEdit1.Text := Form1.Table4Quest_M.Value;
// Запомнить RadioGroup
if RadioGroup1.ItemIndex = 0 then mOtv[z+1] := 1;
if RadioGroup1.ItemIndex = 1 then mOtv[z+1] := 2;
if RadioGroup1.ItemIndex = 2 then mOtv[z+1] := 3;
if RadioGroup1.ItemIndex = 3 then mOtv[z+1] := 4;
if RadioGroup1.ItemIndex = 4 then mOtv[z+1] := 5;
RadioGroup1.ItemIndex := -1;
if mOtv[z] <> 0 then // Вывод RadioGroup
Begin
RadioGroup1.ItemIndex := mOtv[z]-1;
end;
if z = 1 then
SpeedButton1.Enabled := false;
SpeedButton2.Enabled := true;
end;
procedure TForm3.SpeedButton3Click(
var
i : integer;
begin
Form1.Table4.First;
for i := 1 to 30 do
begin
if Form1.Table4Answer.AsInteger = mOtv[i] then
inc(res_i);
Form1.Table4.Next;
end;
Form1.Table2.Append;
Form1.Table2FIO.AsString := Fio;
Form1.Table2Name_Sub.AsString := predm;
Form1.Table2Ball.AsInteger := res_i;
Form1.Table2Date.AsDateTime := Date;
Form1.Table2.Post;
Form1.Timer1.Enabled := true;
Close;
end;
procedure TForm3.FormShow(Sender: TObject);
begin
Timer1.Enabled := true;
min := 1800;
z := 1;
res_i := 0;
end;
procedure TForm3.Timer1Timer(Sender: TObject);
begin
dec(min);
Label5.Caption := '';
if (min mod 60)<10 then
Label5.Caption := IntToStr(min div 60) +'.0'+ IntToStr(min mod 60)
else
Label5.Caption := IntToStr(min div 60) +'.'+ IntToStr(min mod 60);
if min = 0 then
begin
ShowMessage('Ваше время вышло!');
SpeedButton3Click(Form3);
end;
end;
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, DB, Grids, DBGrids, StdCtrls;
type
TForm4 = class(TForm)
StatusBar1: TStatusBar;
Panel1: TPanel;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Edit1: TEdit;
Label1: TLabel;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure UpdateFilter(DataSet: TDataSet);
procedure Edit1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
s, ss : String;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm4.UpdateFilter(DataSet: TDataSet);
var
FR: TFilterRecordEvent;
begin
with DataSet do
begin
FR := OnFilterRecord;
if Assigned(FR) and Active then
begin
DisableControls;
try
OnFilterRecord := nil;
OnFilterRecord := FR;
finally
EnableControls;
end;
end;
end;
end;
procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TForm4.Edit1Change(Sender: TObject);
begin
s:=Edit1.Text;
ss:='FIO';
if length(Edit1.Text) > 0 then
begin
Form1.Table2.FilterOptions:=[
Form1.Table2.Filtered := TRUE;
Form1.Table2.Filter:=ss + ' = ''' + s + '*''';
UpdateFilter(Form1.Table2);
end
else
Form1.Table2.Filtered := FALSE;
end;
end.
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Gauges, ToolWin, Grids, DBGrids, StdCtrls, ExtCtrls,
DB, DBTables, ComObj;
type
TForm5 = class(TForm)
Panel2: TPanel;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
Label6: TLabel;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button2: TButton;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
DBGrid1: TDBGrid;
ToolBar1: TToolBar;
Panel3: TPanel;
Label7: TLabel;
Gauge1: TGauge;
StatusBar1: TStatusBar;
DataSource1: TDataSource;
OpenDialog1: TOpenDialog;
Table2: TTable;
Table2Quest_M: TBlobField;
Table2Quest_B: TBlobField;
Table2Answer: TIntegerField;
Table1: TTable;
Table1Nam_Pred: TStringField;
Table1Ind: TAutoIncField;
Table1Count: TIntegerField;
Table1Name_Teach: TStringField;
Table1Time: TIntegerField;
Table1Count_Quest: TIntegerField;
Table1Type_zap: TStringField;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
MSWord, Table: OLEVariant;
CellText : string;
iRec, i : integer;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm5.Button2Click(Sender: TObject);
begin
if Table1.RecordCount<>0 then
begin
DeleteFile(ExtractFilePath(
Table1.Delete;
end;
procedure TForm5.Button1Click(Sender: TObject);
begin
if Edit2.Text = '' then
begin
ShowMessage('Необходимо ввести название теста!');
exit;
end;
if OpenDialog1.Execute then
begin
MSWord := CreateOleObject('Word.
MSWord.Documents.Open(
Table := MSWord.ActiveDocument.Tables.
begin
if Table.Columns.Count <> 2 then
begin
ShowMessage('Неправильное сохранение!');
MSWord.Quit;
exit;
else
begin
Table1.Append;
Table1Nam_Pred.Value := Edit2.Text;
Table1Count.AsInteger := Table.Rows.Count;
Table1Name_Teach.Value := Edit3.Text;
Table1Time.AsString := Edit5.Text;
Table1Count_Quest.AsString := Edit4.Text;
Table1.Post;
with TTable.create(self) do
begin
Информация о работе Компьютеризация деятельности на предприятии