![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с txt
Алеша © (2011-05-17 18:31:00)Доброго времени суток друзья, я новичок в делфи, и по этому наверное бывалый для Вас, но интересный для меня вопрос.
Так вот.
Я написал тест, в нем было всего 4 вопроса и я выполнил его так:
procedure TForm3.Button1Click(Sender: TObject);
begin
if RadioButton1.Checked=true then
ball:= ball+1
else
ball:= ball;
Label1.Caption:='Выбирите, какое значение означает, что все необходимые для обслуживания интерфейса события генерируются программой?';
RadioButton1.Caption:= 'DragCursor';
RadioButton2.Caption:= 'dmManual';
RadioButton3.Caption:= 'dmAutomatic';
RadioButton4.Caption:= 'TDragMode';
Button1.Visible:= false;
Button2.Top:= Button1.Top;
Button2.Left:= Button1.Left;
Button2.Visible:= true;
num:= num+1;
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
RadioButton1.Checked:= false;
RadioButton2.Checked:= false;
RadioButton3.Checked:= false;
RadioButton4.Checked:= false;
end;
procedure TForm3.Button2Click(Sender: TObject);
begin
if RadioButton2.Checked=true then
ball:= ball+1
else
ball:= ball;
Label1.Caption:='Выбирите, какое значение означает, что события инициируются свойствами и методами компонентов?';
RadioButton1.Caption:= 'TDragMode';
RadioButton2.Caption:= 'dmManual';
RadioButton3.Caption:= 'dmAutomatic';
RadioButton4.Caption:= 'DragCursor';
Button2.Visible:= false;
Button3.Top:= Button1.Top;
Button3.Left:= Button1.Left;
Button3.Visible:= true;
num:= num+1;
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
RadioButton1.Checked:= false;
RadioButton2.Checked:= false;
RadioButton3.Checked:= false;
RadioButton4.Checked:= false;
end;
procedure TForm3.Button3Click(Sender: TObject);
begin
if RadioButton3.Checked=true then
ball:= ball+1
else
ball:= ball;
Label1.Caption:='Выбирите, какой компонент определяет вид указателя мыши в момент, когда над компонентом “протаскиваются данные”?';
RadioButton1.Caption:= 'dmManual';
RadioButton2.Caption:= 'TDragMode';
RadioButton3.Caption:= 'dmAutomatic';
RadioButton4.Caption:= 'DragCursor';
Button3.Visible:= false;
Button4.Top:= Button1.Top;
Button4.Left:= Button1.Left;
Button4.Visible:= true;
num:= num+1;
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
RadioButton1.Checked:= false;
RadioButton2.Checked:= false;
RadioButton3.Checked:= false;
RadioButton4.Checked:= false;
end;
procedure TForm3.Button4Click(Sender: TObject);
begin
if RadioButton4.Checked=true then
ball:= ball+1
else
ball:= ball;
Label1.Caption:='Выбирите, какое свойство компонента TDragState определяет что объект только что покинул компонент или была отпущена кнопка мыши?';
RadioButton1.Caption:= 'dsDragLeave';
RadioButton2.Caption:= 'dsManual';
RadioButton3.Caption:= 'dsDragMove';
RadioButton4.Caption:= 'dsDragEnter';
Button4.Visible:= false;
Button5.Top:= Button1.Top;
Button5.Left:= Button1.Left;
Button5.Visible:= true;
num:= num+1;
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
RadioButton1.Checked:= false;
RadioButton2.Checked:= false;
RadioButton3.Checked:= false;
RadioButton4.Checked:= false;
end;
procedure TForm3.Button5Click(Sender: TObject);
begin
if RadioButton1.Checked= true then
ball:= ball+1
else
ball:= ball;
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
if (ball <= 5) and (ball>= 4)
then ocen:= 3;
if ball < 4
then ocen:= 2;
Label4.Caption:= IntToStr(ocen);
Form6.Visible:= true;
Form3.Hide;
end;
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form1.Close;
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
end;
procedure TForm3.FormShow(Sender: TObject);
begin
ball:= 0;
num:=1;
Label2.Caption:= '';
Label4.Caption:= '';
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
Button1.Visible:= true;
Timer1.Enabled:=True;
TimeVal := Time + 1 / (24 * 60);
end;
procedure TForm3.Timer1Timer(Sender: TObject);
var
Temp : TTime;
begin
Temp := TimeVal - Time;
Label7.Caption := TimeToStr(Temp);
if Frac(Temp) <= 0 then begin
ball:= ball;
Label2.Caption:= IntToStr(ball);
Label5.Caption:= 'Вопрос номер: ' + IntToStr(num);
if (ball <= 5) and (ball>= 4)
then ocen:= 3;
if ball < 4
then ocen:= 2;
Label4.Caption:= IntToStr(ocen);
Form6.Visible:= true;
Form3.Hide;
end;
end;
end.
Чтобы Вам не читать зря кратко:
Создал столько кнопок сколько и вопросов и после ответа на вопрос этой же кнопкой скрываются одни поля открываются другие поля с другими вопросами и так далее, короче все примитивно потому что первый раз я все буквально и прямолинейно понял.
Теперь сам вопрос.
У меня теперь задача сделать тест с 70 вопросами, так как делал я это ад - сколько писанины. Вот я и подумал а что если выбирать данные по вопросам вариантам ответов и правильных ключей из txt-файла. Но как это сделать не знаю, Если кто не совсем равнодушный к ночевкам помогите пожалуйста, желательно на примерах, чтоб до меня дошло быстрей и я Вас уважаемые знатоки не дергал по пустякам. Спасибо за внимание. Заранее благодарен всем!!!
P.S. Там в низу нет моего делфи и ОС. У меня Win 7 и Delphi 2007.
Алеша (2011-05-19 07:59:00) [21]Спасибо Всем, очень помогли, приму к сведению предложения)
Anatoly Podgoretsky (2011-05-18 21:45:00) [22]Я разве про хранение? пусть хранит где угодно.
Плохиш (2011-05-18 20:21:00) [23]
> Anatoly Podgoretsky © (17.05.11 18:52) [1]
>
> > Алеша (17.05.2011 18:31:00) [0]
>
> Используй БД
>
Да ты совсем садист. Нафига тут бд, 20 строк хранить?
Текстовый файл за глаза. А аффтару надо просто нанять программиста.
Dennis I. Komarov (2011-05-18 11:41:00) [24]
> Создал столько кнопок сколько и вопросов и после ответа
> на вопрос этой же кнопкой скрываются одни поля открываются
> другие поля с другими вопросами и так далее, короче все
> примитивно потому что первый раз я все буквально и прямолинейно
> понял.
Мдя, наверное лучше их как-то создавать непосредствено перед тем как они нужны и удалять за ненадобностью...
> У меня теперь задача сделать тест с 70 вопросами, так как
> делал я это ад - сколько писанины. Вот я и подумал а что
> если выбирать данные по вопросам вариантам ответов и правильных
> ключей из txt-файла.
И не важно где все эти вопросы-ответы хранить, важно уметь пользоваться этой информацией...
> Если кто не совсем равнодушный к ночевкам помогите пожалуйста,
> желательно на примерах
"И ключ от квартиры..." (С)
Jeer (2011-05-17 20:54:00) [25]
> Если кто не совсем равнодушный к ночевкам
Я не равнодушен к ночевкам на природе в среде прекрасных дам.
Еще вопросы ?
СУБД бывают разные (сложные, простые, дорогие, Lite), но основное достоинство, в отличии от всяких иных костылей - они основаны на реляционной алгебре, что позволяет стандартным образом извлекать подмножества данных, в соответствии с заданными критериями.
Gu (2011-05-17 20:27:00) [26]еще вариант - работа с листом excel как с БД. в экселе создаем таблицу с вопросами и ответами, в проге ее читаем, задаем вопросы, сравниваем ответы, ставим оценку. Но проще будет через файлы для начала. Можете не типом записи вести, скажем а все переменные в разных файлах и читать из каждого по строчке. цель я так понимаю - обучение?
Gu (2011-05-17 20:20:00) [27]С БД думаю будет сложновато для начала.
Можете попробовать использовать типизированные файлы. Например одна программа будет формировать такой файл, а вторая брать из него данные и производить опрос.
Пример простой:
// заполняем
Сonst x1=69; // кол-во вопросов
Type TMyType=Record
Zagolovok:string;
VoprosNom:Integer;
VoprosTxt:string;
OtvetTxt:string;
... // и так далее
End;
Var Ocenka:integer=0; MyFile:TMyType;
...
Procedure BtnClick1(..);
var x:integer;vopros:TMytype;
begin
assignfile(myfile,'c:\voprosy.my');
Rewrite(myfile);
for x:=0 to x1 do begin
form2.showmodal; // окно формирования вопроса
vopros.zagolovok:=form2.edit1.text;
vopros.voprosnom:=x;
vopros.voprostxt:=form2.edit2.text;
vopros.otvettxt:=form2.edit3.text;
writeln(myfile,vopros);
end;
Closefile(myfile);
end;
// читаем
Procedure BtnClick1(..);
var x:integer;vopros:TMytype;
begin
assignfile(myfile,'c:\voprosy.my');
Reset(myfile);
for x:=0 to x1 do begin
readln(myfile,vopros);
form3.edit1.text:=vopros.zagolovok;
x:=vopros.voprosnom;
form3.caption:='Вопрос номер: '+inttostr(x);
form3.edit2.text:=vopros.voprostxt;
form3.showmodal; // окно показа вопроса
if form3.edit3.text=vopros.otvettxt then inc(ocenka);
end;
Closefile(myfile);
end;
пишу по памяти, мож гдето ошибся, смысл передать общую идею
или можете использовать для этих целей ini-файлы, там все оч. просто и файл можно руками поправить если что, а в варианте выше нет (ну или еще процедуру редакции вопроса писать, тоже не сложно - запрос номера редактирования, читаем пока номер не совпадет, редактируем, сохраняем).
var ini:tinifile;s:string;
..
begin
ini:=tinifile.create('c:\my.ini');
ini.writestring('1','2','моя строка');
..
ini.readstring('1','2',s);
...
ini.free;
Алеша (2011-05-17 19:54:00) [28]Каким образом, дай пример если есть.
Anatoly Podgoretsky (2011-05-17 18:52:00) [29]> Алеша (17.05.2011 18:31:00) [0]
Используй БД