Электронный учебник в Delphi

Автор: Пользователь скрыл имя, 05 Февраля 2013 в 20:13, курсовая работа

Краткое описание

Целью данной курсовой работы является создание программного продукта «электронного учебника». Эту программу я смог составить после того, как просмотрел несколько различных примеров создания программы-теста и изучил их основные принципы. Тест-программа как и электронный учебник предназначены для проверки знаний по различным темам, в зависимости от того какие вопросы будут находится в базе данных. Данная програма была разработана в среде программирование Delphi7. Имеющая довольно простой интерфейс, позволяющий свободно работать учащимся с лекционным материалом, и проходить соответствующие тесты для проверки полученных знаний.

Файлы: 1 файл

Курсовая работа(1).docx

— 634.84 Кб (Скачать)

    N2: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    N5: TMenuItem;

    N6: TMenuItem;

    N7: TMenuItem;

    vopros: TLabel;

    N8: TMenuItem;

    N9: TMenuItem;

    procedure chtenie_voprosov;

    procedure CancelClick(Sender: TObject);

    procedure nachaloClick(Sender: TObject);

    procedure vivod_voprosa;

    procedure vivod_poley_voprosa;

    procedure OtvetgotovClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    function resultat:integer;

    procedure zapis_v_data_base;

    function proverka:boolean;

    procedure n7click(sender:tobject);

    procedure otvetkeypress(sender:tobject;var key:char);

    procedure N8Click(Sender: TObject);

    procedure N9Click(Sender: TObject);

   

  private

  { Private declarations }

    vse_voprosy:array[1..max_voprosov]of tvse_voprosy;

    ispol_voprosy:array[1..voprosov_v_teste] of integer;

    schitano_voprosov:integer;

    tek_vopros,nomer:integer;

    file_s_voprosami:text;

    otvety_na_voprosy:array[1..voprosov_v_teste] of boolean;

 

 

  public

   student:tstudents;

   students:array[1..200] of tstudents;

  end;

var

  FormOsnova: TFormOsnova;

  s:tstrings;

implementation

 

uses Unit1, Unit7, Unit4, Unit3;

 

{$R *.dfm}

function tFormOsnova.proverka:boolean;

var file_db:textfile;

    n,vsego_proshli:integer;

    str:string;

begin

if not fileexists(put_k_data_base+rasshirenie_file_data_base)then

  begin

   proverka:=false;

   exit;

  end;

assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);

reset(file_db);

if ioresult=0 then

  begin {n 103}

    n:=0;

    while not(eof(file_db))do

    begin {n 101}

     n:=n+1;

     readln(file_db,students[n].name);

     delete(students[n].name,1,4);

     readln(file_db,students[n].familiya);

     delete(students[n].familiya,1,8);

     readln(file_db,str);

     readln(file_db,str);

     readln(file_db,str);

     readln(file_db,str);

    end;  {k 101}

    vsego_proshli:=n;

    for n:=1 to vsego_proshli do

     begin  {n 102}

      if (students[n].name=student.name) and

          (students[n].familiya=student.familiya) then

          begin

           messagedlg('Извините, вы уже проходили этот тест  отойдите пожалуйста от компьютера',mtinformation,[mbok],0);

           proverka:=true;

           exit;

          end;

     end;   {k 102}

  end    {k 103}

   else  proverka:=false;

   closefile(file_db);

 

end;

 

procedure tFormOsnova.otvetkeypress(sender:tobject;var key:char);

begin

  if  key=#13 then

   otvetgotov.Click;    

end;

 

procedure tFormOsnova.zapis_v_data_base;

var file_db:textfile;

begin

if fileexists(put_k_data_base+rasshirenie_file_data_base) then

  begin

   assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);

   append(file_db);

  end

  else

   begin

    assignfile(file_db,put_k_data_base+rasshirenie_file_data_base);

    rewrite(file_db);

   end;

 

 

writeln(file_db,'Имя: '+student.name);

writeln(file_db,'____________');

writeln(file_db,'Фамилия: '+student.familiya);

writeln(file_db,'____________');

writeln(file_db,'Группа: '+student.group);

writeln(file_db,'____________');

writeln(file_db,'Дата: '+datetostr(date));

writeln(file_db,'____________');

writeln(file_db,'Время: '+timetostr(time));

writeln(file_db,'____________');

writeln(file_db,'Результат: '+student.resultat);

writeln(file_db,'____________');

writeln(file_db,'        ');

 

{ flush(file_db);}

closefile(file_db);

end;

function tFormOsnova.resultat:integer;

var i,kol_vo_pravilnyh:integer;

begin

  kol_vo_pravilnyh:=0;

  for i:=1 to voprosov_v_teste do

   begin

     if formosnova.otvety_na_voprosy[i] then

       kol_vo_pravilnyh:=kol_vo_pravilnyh+1;

   end;

   resultat:=round(10*(kol_vo_pravilnyh/voprosov_v_teste));

end;

 

procedure tFormOsnova.chtenie_voprosov;

label 1,2;

var

    schyotchik,i,j:integer;

    str:string;

    b1,b2:boolean;

begin

str:=put_k_voprosam1;

b1:=FileExists(put_k_voprosam1);

b2:=FileExists(put_k_voprosam2);

if (b1) and (b2 )then

  begin

   str:=put_k_voprosam1;

  end;

if (b1) and (not (b2))then

  begin

   str:=put_k_voprosam1;

  end;

if (b2) and (not (b1)) then

  begin

   str:=put_k_voprosam2;

  end;

if (not (b1))and(not (b2)) then

  begin

   showmessage('Не найден файл  с вопросами');

   halt;

  end;

    try

schyotchik:=0;

assignfile(file_s_voprosami,str);

reset(file_s_voprosami);

while not(seekeof(file_s_voprosami)) do

   begin {n 001}

   schyotchik:=schyotchik+1;

   i:=0;

    repeat

    i:=i+1;

   readln(file_s_voprosami,vse_voprosy[schyotchik].vopros[i]);

 

    until  vse_voprosy[schyotchik].vopros[i]='end of question';

     vse_voprosy[schyotchik].vopros[i]:='';

           for i:=1 to max_otvetov-1 do

            begin  {n 003}

             readln(file_s_voprosami,vse_voprosy[schyotchik].otvety[i]);

             if vse_voprosy[schyotchik].otvety[i]='end' then

               begin  {n 004}

                 for j:=i to max_otvetov do

                 vse_voprosy[schyotchik].otvety[j]:=kluch;

                goto 1;

               end;   {k 004}

            end;    {k 003}

1:end;  {k 001} 2:

closefile(file_s_voprosami);

schitano_voprosov:=schyotchik;

if schitano_voprosov<voprosov_v_teste then

  begin

  MessageDlg('Количество вопросов  в тесте превышает количество  вопросов в базе данных пожалуйста  обновите Базу Данных',mterror,[mbok],0);

   exit;

  end;

   except

    MessageDlg('Неверен формат Базы Данных',mterror,[mbok],0);

   end;

end;

 

procedure tFormOsnova.vivod_poley_voprosa;

var sam_vopros:string;

    i:integer;

begin

 

   labelvopros.Visible:=true;

   vopros.Visible:=true;

   otvet.Visible:=true;

   labelotvet.Visible:=true;

   otvetgotov.Visible:=true;

   sam_vopros:='';

    for i:=1 to strok_v_voprose do

     sam_vopros:=sam_vopros+vse_voprosy[nomer].vopros[i];

   if length(sam_vopros)>7*109 then

     begin

      //vopros.ScrollBars:=ssVertical;

    vopros.Height:=100

     end

       else

        begin

         //vopros.ScrollBars:=ssnone;

         vopros.Height:=17*(trunc(length(sam_vopros)/72)+1);

        end;

end;

 

procedure tFormOsnova.vivod_voprosa;

label 1;

var i,j:integer;

begin

formosnova.vopros.Caption:='';

randomize;

labelvopros.Caption:='Вопрос №'+inttostr(tek_vopros);

1:nomer:=trunc(random(schitano_voprosov))+1;

if tek_vopros>=1 then

for i:=1 to tek_vopros do

  begin

   if (ispol_voprosy[i]=nomer) or (nomer>schitano_voprosov) then goto 1;

  end

   else nomer:=trunc(schitano_voprosov)+1;

ispol_voprosy[tek_vopros]:=nomer;

formosnova.vivod_poley_voprosa;

j:=1;

  for i:=1 to strok_v_voprose do

   begin // n 301

 

  for j:=1 to  Trunc(length(vse_voprosy[nomer].vopros[i])/bukv_stroke_voprosa)+1 do

   if not((i=1) and (j=1))  then

  vopros.Caption:=vopros.Caption+#13+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa+1,bukv_stroke_voprosa)

                            else

  vopros.Caption:=vopros.Caption+copy(vse_voprosy[nomer].vopros[i],(j-1)*bukv_stroke_voprosa-1,bukv_stroke_voprosa)

 

   end; // k 301

otvet.Text:='';

 

 

end;

 

procedure TFormOsnova.CancelClick(Sender: TObject);

begin

formosnova.close;

form1.show;

end;

 

procedure TFormOsnova.nachaloClick(Sender: TObject);

begin

  formosnova2.ShowModal;

if not(formosnova2.vvedenie_imeni) then exit

                              else

                               begin

         student.name:=formosnova2.name.Text;

         student.familiya:=formosnova2.Familiya.Text;

         student.group:=formosnova2.gruppa.Text;

         if formosnova.proverka then close;

 

                               end;

screen.Cursor:=crappstart;

formosnova.chtenie_voprosov;

screen.Cursor:=crdefault;

tek_vopros:=1;

formosnova.vivod_voprosa;

otvet.SetFocus;

N5.Enabled:=true;

end;

 

procedure TFormOsnova.OtvetgotovClick(Sender: TObject);

var i:integer;

begin

 

for i:=1 to max_otvetov-1 do

  begin    //n 200

   if otvet.Text=vse_voprosy[nomer].otvety[i] then

     begin    //n 201

      messagedlg('Ответ правильный',mtconfirmation,[mbok],0);

      otvety_na_voprosy[tek_vopros]:=true;

      tek_vopros:=tek_vopros+1;

 

      otvet.SetFocus;

      if tek_vopros=voprosov_v_teste+1 then

  begin  //n 202

   messagedlg('Вы закончили тест и получили (из 10 возможных баллов) - '+inttostr(formosnova.resultat),mtconfirmation,[mbok],0);

   student.resultat:=inttostr(formosnova.resultat);

   formosnova.zapis_v_data_base;

   form4.Show;

   formosnova.Close;

   form4.Font.Color:=clred;

  end;  //k 202

  formosnova.vivod_voprosa;

      exit;

     end;   // k 201

  end;    // k 200

if not(otvety_na_voprosy[tek_vopros]) then

  begin   //n 203

   messagedlg('Ответ неправильный',mtconfirmation,[mbok],0);

   otvety_na_voprosy[tek_vopros]:=false;

   tek_vopros:=tek_vopros+1;

 

   if tek_vopros=voprosov_v_teste+1 then

  begin    //n 204

   messagedlg('Вы закончили тест и получили (из 10 возможных баллов) - '+inttostr(formosnova.resultat),mtconfirmation,[mbok],0);

    student.resultat:=inttostr(formosnova.resultat);

    formosnova.zapis_v_data_base;

    form4.Font.Color:=clred;

    form4.BitBtn1.Hint:='Покинуть программу';

    form4.Show;

    formosnova.Close;

 

   end;     // k 204

  formosnova.vivod_voprosa;

  end;     // k 203

 

{otvet.SetFocus;}

end;

 

procedure TFormOsnova.FormCreate(Sender: TObject);

var i,j:integer;

 

begin

        for j:=1 to max_voprosov do

  for i:=1 to strok_v_voprose do

   begin

   vse_voprosy[j].vopros[i]:='';

   end;

for i:=1 to voprosov_v_teste do

begin

   otvety_na_voprosy[i]:=false;

   ispol_voprosy[i]:=0;

end;

if fileexists(put_k_parolu) then

   begin

 

   end;

 

end;

procedure tFormOsnova.n7click(sender:tobject);

begin

form7.ShowModal;

 

end;

 

procedure TFormOsnova.N8Click(Sender: TObject);

begin

form4.show;

end;

 

procedure TFormOsnova.N9Click(Sender: TObject);

begin

formosnova.Hide;

form3.show;

end;

 

end.

 

 

unit NameEntr;

 

interface

 

uses

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

  Dialogs, StdCtrls, ExtCtrls;

 

type

  TFormOsnova2 = class(TForm)

    name: TEdit;

    Familiya: TEdit;

    gruppa: TEdit;

    Escape: TButton;

    Dalee: TButton;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Button1: TButton;

    Image1: TImage;

    procedure DaleeClick(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure EscapeClick(Sender: TObject);

    procedure nameKeyPress(Sender: TObject; var Key: Char);

    procedure FamiliyaKeyPress(Sender: TObject; var Key: Char);

    procedure FormShow(Sender: TObject);

    procedure gruppaKeyPress(Sender: TObject; var Key: Char);

    procedure Button1Click(Sender: TObject);

    procedure Image1Click(Sender: TObject);

  private

    { Private declarations }

  public

    vvedenie_imeni:boolean;

    { Public declarations }

  end;

 

var

  FormOsnova2: TFormOsnova2;

 

implementation

 

uses Unit4, Unit1;

 

{$R *.dfm}

 

procedure TFormOsnova2.DaleeClick(Sender: TObject);

begin

if not((name.Text='') or

    (familiya.Text='') or

    (gruppa.Text='')) then

                      begin

                        vvedenie_imeni:=true;

                        Close;

                        exit;

                      end

                      else

              if messagedlg('Вы не ввели свои данные',mterror,[mbretry,mbcancel],0)=mrcancel then

                          begin

                            vvedenie_imeni:=false;

                            Close;

                          end

                      else

                      begin

                      // vvedenie_imeni:=true;

                      // Close;

                     //  exit;

                     end;

 

  //Close;

end;

 

procedure TFormOsnova2.FormCreate(Sender: TObject);

begin

gruppa.Text:='';

name.Text:='';

familiya.Text:='';

 

end;

 

procedure TFormOsnova2.EscapeClick(Sender: TObject);

begin

vvedenie_imeni:=false;

formosnova2.Close;

form1.show;

end;

 

procedure TFormOsnova2.nameKeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then

  familiya.SetFocus;

end;

 

procedure TFormOsnova2.FamiliyaKeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then

  gruppa.SetFocus;

end;

 

procedure TFormOsnova2.FormShow(Sender: TObject);

begin

name.SetFocus;

end;

 

procedure TFormOsnova2.gruppaKeyPress(Sender: TObject; var Key: Char);

begin

if key=#13 then

  dalee.Click;

end;

 

procedure TFormOsnova2.Button1Click(Sender: TObject);

begin

form4.show;

end;

 

procedure TFormOsnova2.Image1Click(Sender: TObject);

begin

 

end;

 

end.

 

 



Информация о работе Электронный учебник в Delphi