Разработка программы для оценки через систему тестирования знаний

Сферы применения методологии RAD. Особенности создания программного продукта, предназначенного для редактирования тестов. Рассмотрение моделей жизненного цикла: каскадная, спиральная. Этапы построения начальной контекстной диаграммы. Анализ DFD-диаграммы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 19.09.2012
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

// --- Уменьшить время на ответ на 1 секунду ---

Lbl_Last.Caption:=DecTime(PrTimeLast,Sender);

end;

procedure TForm1.MIOpenFileClick(Sender: TObject);

begin

FormCreate(Sender);

OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);

if OpenDialog1.Execute then

Memo_Temp.Lines.LoadFromFile(OpenDialog1.FileName);

end;

procedure TForm1.MIAboutClick(Sender: TObject);

begin

ShowMessage('Разработчик: Хаитов И;'+#13+#10+

' '+#13+#10+

'Благодарности'+#13+#10+

' '+#13+#10+

'* за разработку блока шифрования и интерфейса:'+#13+#10+

' Ikrom;'+#13+#10+

' '+#13+#10+

'* за помощь в разработке:'+#13+#10+

' }{ak,'+#13+#10+

' '+#13+#10+

'http://www.vkontakte.ru/khaitov'+#13+#10+

'e-mail: ikrom1989_80@mail.ru');

end;

// Заполение полей теста

procedure TForm1.PrFillFileds(Sender: TObject);

begin

// Очистка поля теста

MQuestion.Clear;

MV1.Clear;

MV2.Clear;

MV3.Clear;

MV4.Clear;

MQuestion.Lines[0]:=decrypt(Memo_Temp.Lines[2+6*(PrOrderQuestion[NomQuestion]-1)], 30000);

MV1.Lines[0]:=decrypt(Memo_Temp.Lines[3+6*(PrOrderQuestion[NomQuestion]-1)], 30000);

MV2.Lines[0]:=decrypt(Memo_Temp.Lines[4+6*(PrOrderQuestion[NomQuestion]-1)], 30000);

MV3.Lines[0]:=decrypt(Memo_Temp.Lines[5+6*(PrOrderQuestion[NomQuestion]-1)], 30000);

MV4.Lines[0]:=decrypt(Memo_Temp.Lines[6+6*(PrOrderQuestion[NomQuestion]-1)], 30000);

Lbl_NomQuestion.Caption:=decrypt(IntToStr(NomQuestion), 30000);

// Управление полосой прокрутки в полях теста

if MQuestion.Lines.Count>=3 then MQuestion.scrollbars:=ssVertical else MQuestion.scrollbars:=ssNone;

if MV1.Lines.Count>=3 then MV1.scrollbars:=ssVertical else MV1.scrollbars:=ssNone;

if MV2.Lines.Count>=3 then MV2.scrollbars:=ssVertical else MV2.scrollbars:=ssNone;

if MV3.Lines.Count>=3 then MV3.scrollbars:=ssVertical else MV3.scrollbars:=ssNone;

if MV4.Lines.Count>=3 then MV4.scrollbars:=ssVertical else MV4.scrollbars:=ssNone;

end;

// Пункт из меню "Начать тестирование"

procedure TForm1.MITBeginClick(Sender: TObject);

Var

tempNomQuestion, i, j: byte;

begin

// Проверка был ли открыт файл с тестом

if Memo_Temp.Lines.Count<4 then

begin

ShowMessage('Откройте файл теста');

Abort;

end;

// --- Узнаем данные о тесте (кол. вопросов и т.д.) ---

PrGetDataTest(Sender);

PrTimeLast:=PrTimeTestData;

PrTimeFull.Min:=PrKolQuestionTestData *PrTimeTestData.Min

+PrKolQuestionTestData *PrTimeTestData.Sec div 60;

PrTimeFull.Sec:=PrKolQuestionTestData *PrTimeTestData.Sec mod 60;

// --- Очистка произвольного порядка вопроса ---

for i:=1 to 255 do

PrOrderQuestion[i]:=0;

tempNomQuestion:=0;

// --- Выбор вопросов в случайном порядке ---

while tempNomQuestion<PrKolQuestionTestData do

begin

randomize;

i:=1+random(PrSymKolQuestionTestData);

for j:=tempNomQuestion+1 downto 1 do

if PrOrderQuestion[j]=i then

begin

i:=0;

break;

end;

if not (i=0) then

begin

PrOrderQuestion[tempNomQuestion+1]:=i;

inc(tempNomQuestion);

end;

end;

PrFillFileds(Sender);

// Заполнение полей формы

LblNameTest.Caption:=(Memo_Temp.Lines[0]);

Lbl_FQuestion.Caption:=PrFormatConvert(PrTimeFull);

Lbl_Last.Caption:=PrFormatConvert(PrTimeLast);

NomQuestion:=1;

MITBegin.Enabled:=False;

MITEnd.Enabled:=True;

GBox.Visible:=True;

PanelButton.Visible:=True;

Timer1.Enabled:=True;

// --- ---

MI_OptionInfoAnsver.Enabled:=True;

end;

// Нажатие кнопки с вариантом ответа

procedure TForm1.PrClickButton(Sender: TObject);

begin

// --- Проверка на правильный ответ на ворос ---

if StrToInt(decrypt(Memo_Temp.Lines[7+6*(PrOrderQuestion[NomQuestion]-1)],30000))=(Sender as TButton).Tag Then

begin

if MI_OptionInfoAnsver.Checked then ShowMessage('Правильно');

inc(PrVAnsverOK);

end

else if MI_OptionInfoAnsver.Checked then ShowMessage('Неправильно');

PrTimeOut(Sender);

end;

procedure TForm1.MIExitClick(Sender: TObject);

begin

Close;

end;

procedure TForm1.MI_OptionInfoAnsverClick(Sender: TObject);

var

Password: string;

begin

if PrPasswordTestData<>'' then begin

PasswordDlg.ShowModal;

if PasswordDlg.Password.text=PrPasswordTestData then begin

MI_OptionInfoAnsver.Checked:= not MI_OptionInfoAnsver.Checked;

PasswordDlg.Password.text:='';

end;

end;

PasswordDlg.Password.text:=''

end;

// --- процедура возращает данные из теста ---

procedure TForm1.PrGetDataTest(Sender: TObject);

var

Temp_String: string;

EndFor: boolean;

Password: string;

b1, b2:boolean;

i, j : byte;

begin

Temp_String:=decrypt(Memo_Temp.Lines[1], 30000);

///ShowMessage(Temp_String);

// --- Пароль ---

for i:=1 to length(Temp_String) do

begin

if ((Temp_String[i]=' ')and not EndFor) then

for j:=i+1 to length(Temp_String) do

if ((Temp_String[j]=' ')and not EndFor) then

begin

if i+1=j then

PrPasswordTestData:=''

else

PrPasswordTestData:=copy(Temp_String,i+1,j-i-1);

EndFor:=true;

end;

end;

// --- Время на 1-н вопрос (мин) ---

i:=pos(':',Temp_String);

while Temp_String[i]<>' ' do

begin

dec(i);

end;

PrTimeTestData.Min:=StrToInt(copy(Temp_String,i+1,pos(':',Temp_String)-i-1));

// --- Время на 1-н вопрос (сек) ---

PrTimeTestData.Sec:=StrToInt(copy(Temp_String,pos(':',Temp_String)+1,length(Temp_String)-pos(':',Temp_String)));

// --- Кол-во тестируемых вопросов ---

PrKolQuestionTestData:=StrToInt(copy(Temp_String, pos('|',Temp_String)+1,

pos(' ',Temp_String)-pos('|',Temp_String) -1));

// --- Суммарное количество вопросов ---

PrSymKolQuestionTestData:=StrToInt(copy(Temp_String, 1,pos('|',Temp_String) -1));;

//Добавил, возможно потом количество попыток можно довести до 3

// пока сразу закрытие

// срабатывает onClose, а там еще один пароль - и все, сразу

// зовет преподавателя, а тот делает правильные выводы

{ if PrPasswordTestData<>'' then

b1:=(Inputquery('Введите пароль', 'Пароль', Password));

if ((b1=false)and (Password<>PrPasswordTestData)) or

((b1=true)and (Password<>PrPasswordTestData)) or

((b1=true)and (Password=PrPasswordTestData))

then

form1.close; }

if PrPasswordTestData<>'' then begin

PasswordDlg.Caption:='Получение доступа к тесту';

PasswordDlg.ShowModal;

if PasswordDlg.Password.text<>PrPasswordTestData then begin

PasswordDlg.Password.text:='';

PriznakExit:=true;

form1.close;

end;

PasswordDlg.Password.text:=''

end;

end;

//

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var

Password: string;

begin

{ if PrPasswordTestData<>'' then

if InputQuery('Введите пароль', 'Пароль', Password)=true and (Password=PrPasswordTestData)

then

///MI_OptionInfoAnsver.Checked:= not MI_OptionInfoAnsver.Checked;

Action := caFree

else Action := caNone; }

if (PriznakExit=true) then begin

ShowMessage('Неверно задан пароль на доступ к тесту ! Программа завершает работу !');

Action := caFree;

end;

if (PrPasswordTestData<>'') and (PriznakExit=false) then begin

PasswordDlg.Caption:='Закрытие программы тестирования';

PasswordDlg.ShowModal;

if PasswordDlg.Password.text=PrPasswordTestData then begin

PasswordDlg.Password.text:='';

Action := caFree end

else begin Action := caNone; PasswordDlg.Password.text:='';

end;

end;

PasswordDlg.Password.text:='';

end;

//

procedure TForm1.MITEndClick(Sender: TObject);

begin

if PrPasswordTestData<>'' then begin

PasswordDlg.ShowModal;

if PasswordDlg.Password.text=PrPasswordTestData then begin

FormCreate(Sender);

PasswordDlg.Password.text:='';

end;

end;

PasswordDlg.Password.text:=''

end;

end.

unit Unit3;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons;

type

TPasswordDlg = class(TForm)

Label1: TLabel;

Password: TEdit;

OKBtn: TButton;

CancelBtn: TButton;

private

{ Private declarations }

public

{ Public declarations }

end;

var

PasswordDlg: TPasswordDlg;

implementation

uses Unit1;

{$R *.dfm}

end.

unit uEncrypt;

interface

function Decrypt(const S: AnsiString; Key: Word): AnsiString; stdcall; ///расшифровать

function Encrypt(const S: AnsiString; Key: Word): AnsiString; stdcall; ///зашифровать

implementation

const

C1 = 52845;

C2 = 22719;

function Decode(const S: AnsiString): AnsiString;

const

Map: array[Char] of Byte = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 63, 52, 53,

54, 55, 56, 57, 58, 59, 60, 61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2,

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,

20, 21, 22, 23, 24, 25, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30,

31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,

46, 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

0);

var

I: LongInt;

begin

case Length(S) of

2:

begin

I := Map[S[1]] + (Map[S[2]] shl 6);

SetLength(Result, 1);

Move(I, Result[1], Length(Result))

end;

3:

begin

I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12);

SetLength(Result, 2);

Move(I, Result[1], Length(Result))

end;

4:

begin

I := Map[S[1]] + (Map[S[2]] shl 6) + (Map[S[3]] shl 12) +

(Map[S[4]] shl 18);

SetLength(Result, 3);

Move(I, Result[1], Length(Result))

end

end

end;

function PreProcess(const S: AnsiString): AnsiString;

var

SS: AnsiString;

begin

SS := S;

Result := '';

while SS <> '' do

begin

Result := Result + Decode(Copy(SS, 1, 4));

Delete(SS, 1, 4)

end

end;

function InternalDecrypt(const S: AnsiString; Key: Word): AnsiString;

var

I: Word;

Seed: Word;

begin

Result := S;

Seed := Key;

for I := 1 to Length(Result) do

begin

Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));

Seed := (Byte(S[I]) + Seed) * Word(C1) + Word(C2)

end

end;

function Decrypt(const S: AnsiString; Key: Word): AnsiString;

begin

Result := InternalDecrypt(PreProcess(S), Key)

end;

function Encode(const S: AnsiString): AnsiString;

const

Map: array[0..63] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +

'abcdefghijklmnopqrstuvwxyz0123456789+/';

var

I: LongInt;

begin

I := 0;

Move(S[1], I, Length(S));

case Length(S) of

1:

Result := Map[I mod 64] + Map[(I shr 6) mod 64];

2:

Result := Map[I mod 64] + Map[(I shr 6) mod 64] +

Map[(I shr 12) mod 64];

3:

Result := Map[I mod 64] + Map[(I shr 6) mod 64] +

Map[(I shr 12) mod 64] + Map[(I shr 18) mod 64]

end

end;

function PostProcess(const S: AnsiString): AnsiString;

var

SS: AnsiString;

begin

SS := S;

Result := '';

while SS <> '' do

begin

Result := Result + Encode(Copy(SS, 1, 3));

Delete(SS, 1, 3)

end

end;

function InternalEncrypt(const S: AnsiString; Key: Word): AnsiString;

var

I: Word;

Seed: Word;

begin

Result := S;

Seed := Key;

for I := 1 to Length(Result) do

begin

Result[I] := Char(Byte(Result[I]) xor (Seed shr 8));

Seed := (Byte(Result[I]) + Seed) * Word(C1) + Word(C2)

end

end;

function Encrypt(const S: AnsiString; Key: Word): AnsiString;

begin

Result := PostProcess(InternalEncrypt(S, Key))

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Общая характеристика основных моделей жизненного цикла: каскадная, инкрементная, спиральная. Стадия как часть процесса создания программного обеспечения, ограниченная определенными временными рамками и заканчивающаяся выпуском конкретного продукта.

    презентация [159,1 K], добавлен 27.12.2013

  • Понятие и этапы жизненного цикла программного обеспечения как некоторых событий, которые происходят с системой компьютера в процессе ее создания, внедрения и сопровождения. Модели данного процесса: каскадная, спиральная, их отличительные особенности.

    доклад [33,5 K], добавлен 06.04.2015

  • Проектирование программного обеспечения. Построение начальной контекстной диаграммы и концептуальной моделей данных. Диаграммы потоков данных и системных процессов нулевого уровня и последовательности экранных форм. Описание накопителей данных.

    курсовая работа [1,4 M], добавлен 07.03.2013

  • Требования к технологии проектирования программного обеспечения (ПО). Состав и описание стадий полного жизненного цикла ПО. Классификация моделей жизненного цикла ПО, их особенности. Методологии разработки ПО, приёмы экстремальный программирование.

    презентация [874,4 K], добавлен 19.09.2016

  • Характеристика программных средств, использованных при разработке сайта. Параметры аппаратных средств для демонстрации ПП. Особенности архитектуры программного обеспечения. Анализ модели жизненного цикла программного продукта. Построение Gant-диаграммы.

    курсовая работа [886,9 K], добавлен 30.05.2015

  • Понятие технологии разработки программы. Основа проектирования программного обеспечения. Модели жизненного цикла, возникшие исторически в ходе развития теории проектирования программного обеспечения. Спиральная (spiral), каскадная и итерационная модели.

    презентация [1,0 M], добавлен 11.05.2015

  • Стадии жизненного цикла ИС и его стандарты. Методологии, поддерживающие спиральную модель. Каскадная и инкрементная модели, их достоинства и недостатки. Основные, вспомогательные и организационные процессы жизненного цикла. Сравнительный анализ моделей.

    курсовая работа [186,4 K], добавлен 21.05.2015

  • Жизненный цикл автоматизированных информационных систем. Основы методологии проектирования автоматизированных систем на основе CASE-технологий. Фаза анализа и планирования, построения и внедрения автоматизированной системы. Каскадная и спиральная модель.

    курсовая работа [1,1 M], добавлен 20.11.2010

  • Справочная система как программный продукт, позволяющий пользователю получить точную информацию по теме. Основные особенности построения модели AS-IS. Анализ контекстной диаграммы модели TO-BE. Сущность диаграммы компонентов серверной части проекта.

    курсовая работа [914,5 K], добавлен 26.01.2013

  • Особенности основных, вспомогательных и организационных процессов жизненного цикла автоматизированных информационных систем. Основные методологии проектирования АИС на основе CASE-технологий. Определение модели жизненного цикла программного продукта.

    курсовая работа [1,8 M], добавлен 20.11.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.