Tải bản đầy đủ (.doc) (49 trang)

de tai chuong trinh trac nghiem

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.19 MB, 49 trang )

TRƯỜNG
THPT BA CHÚC

TÊN ĐỀ TÀI
PHẦN MỀM TRẮC NGHIỆM
CHO NHIỀU MÔN HỌC
TRÊN MÁY TÍNH CÁ NHÂN

TÁC GIẢ
LƯƠNG QUỐC VINH

Năm học 2015 - 2016
Đã đạt giải B cấp trường
Ai cần chương trình nguồn hoặc tệp exe thì liên hệ mình.

1


Lương Quốc Vinh 0984252871

MỤC LỤC
Mục

Tiêu đề

Trang

1

Tóm tắt


2

2

Giới thiệu

3

3

Phương pháp

6

4

Khách thể nghiên cứu

6

5

Thiết kế nghiên cứu

6

6

Quy trình nghiên cứu


6

7

Đo lường và thu thập dữ liệu

7

8

Phân tích dữ liệu và bàn luận kết quả

7

9

Kết luận và khuyến nghị

7

10

Tài liệu tham khảo

7

11

Phụ lục


8

2


Lương Quốc Vinh 0984252871

1. TÓM TẮT


Đây là một phần mềm hổ trợ:
o Giáo viên đánh giá kết quả dạy thông qua hình thức kiểm tra trắc nghiệm trên máy
tính cá nhân.
o Học sinh ôn tập kiến thức nhiều môn học bằng hình thức trắc nghiệm.



Phần mềm có thể lưu, mở lại bài trắc nghiệm để học sinh chủ động làm tiếp bài vào những
thời điểm phù hợp nhất đối với bản thân.



Phần mềm có thể in nội dung trắc nghiệm thành một bài kiểm tra chính thức (như lúc giáo
viên phát đề kiểm tra và học sinh trả lời trên giấy) ra tập tin (có nhiều định dạng: pdf, mdi,…
tùy thuộc vào máy đang dùng) hoặc ra giấy để nộp lưu trử lâu dài. (hình dạng có trong phụ
lục)



Phần mềm sẽ lấy ngẫu nhiên các câu trắc nghiệm, thay đổi ngẫu nhiên thứ tự lựa chọn của

câu đó trong bộ câu hỏi trắc nghiệm của môn học do học sinh chọn để làm theo yêu cầu của
giáo viên, do đó hai học sinh ngồi kế nhau sẽ có những câu hỏi đa số là khác nhau, thậm chí
khác nhau hoàn toàn, nếu số lượng câu hỏi sẽ làm và số lượng bộ câu hỏi có sự chênh lệch
nhiều.



Phần mềm có khả năng đếm số lượng câu trả lời đúng, cho hs xem đáp án đúng. Thuận lợi
cho học sinh khi tự học, hoặc học nhóm.



Đặc biệt phần mềm có đếm số lần xem đáp án của học sinh để khi giáo viên muốn biết học
sinh làm bài kiểm tra 15 phút, hay 1 tiết,… có trung thực không (số lần xem nếu có sẽ in
trong tệp/giấy lúc nộp bài, xem hình trong phụ lục).

3


Lương Quốc Vinh 0984252871

2. GIỚI THIỆU
2.1 Lý do chọn đề tài:
Thực tế ngày nay:
 Hình thức trắc nghiệm đã được sử dụng nhiều trong các kì kiểm tra, thi từ qui mô
nhỏ (15 phút, 1 tiết) đến qui mô lớn (thi học kì, thi tốt nghiệp). Mang lại hiệu quả
cao, khách quan trong việc đánh giá kết quả dạy-học.
 Máy vi tính (máy tính cá nhân) không còn xa lạ với mọi người, được sử dụng rất
rộng rãi, trong nhiều mục đích khác nhau: từ giải trí đến học tập, nghiên cứu,…
Điều này giúp cho việc triển khai ứng dụng sẽ nhanh và nhiều người dùng.

 Chương trình trắc nghiệm đã có nhiều, bên cạnh những ưu điểm của chúng thì đa
số đều có những hạn chế chung như sau:
 Chỉ phục vụ một hoặc vài môn học nào đó, không áp dụng chung cho hầu
hết các môn học ở nhà trường, cũng như ở các cấp học khác nhau. Trong
khi, rất rất nhiều giáo viên ở các cấp đều có nhu cầu sử dụng phần mềm
trắc nghiệm.
 Không cho người dùng thay đổi, bổ sung, xóa những câu hỏi trắc nghiệm
trong bộ nguồn câu hỏi. Điều này làm cho giáo viên không thể chủ động
ứng dụng chương trình để kiểm tra những kiến thức, những bài học mà
giáo viên muốn kiểm tra.
 Không cho học sinh lưu/mở bài trắc nghiệm để có thể làm ở những thời
điểm khác nhau. Đặc biệt là khi học sinh cần làm bài đó ở những tiết học
khác nhau, nhiều học sinh khác lớp cùng dùng chung máy tính, hoặc làm
bài ở máy tính khác.
 Và quan trọng hơn là không thể in bài trắc nghiệm thành một bài kiểm tra
thực sự, in ra tập tin hoặc giấy để học sinh xem lại và rút kinh nghiệm làm
bài, giáo viên chấm điểm và nộp cho trường lưu trữ bài kiểm tra.
 Ngành GD đang phát động mạnh phong trào nghiên cứu, ứng dụng công nghệ
thông tin trong dạy và học của giáo viên cũng như của học sinh.
Từ những thực tế trên và nhu cầu của bản thân và của đồng nghiệp nên tôi đã cố gắn tạo ra
phần mềm trắc nghiệm này.

2.2 Giới thiệu về chương trình trắc nghiệm:
2.2.1 Lựa chọn ngôn ngữ lập trình để tạo phần mềm
Ngôn ngữ lập trình Delphi XE8 vì
 Đây là một ngôn ngữ lập trình hướng đối tượng, có cấu trúc tương tự ngôn
ngữ lập trình Pascal mà giáo viên đã làm quen từ trước.
 Cung cấp rất nhiều đối tượng đáp ứng được nhiều yêu cầu của người viết
chương trình, có khả năng chạy chương trình trên điện thoại dùng hệ điều
hành android, IOS,…

4


Lương Quốc Vinh 0984252871

 Giao diện trực quan.

2.2.2 Đối tượng sử dụng chương trình
 Tất cả giáo viên ở các trường THCS, THPT
 Tất cả học sinh ở các trường THCS, THPT

2.2.3 Lợi ích chính từ chương trình mang lại cho đối tượng sử dụng
Đối với giáo viên:
• Sử dụng vô số lần bộ câu hỏi đã soạn kỉ.










Không cần soạn đề kiểm tra trước, không cần in trước vì chương trình sẽ lấy ngẫu
nhiên các câu hỏi trong bộ câu hỏi, tự động tạo thành đề (vd: kt miệng với số
lượng câu là 5, kt 15 phút là 10 câu, kt 1tiết là 30/40/50 câu…), học sinh sẽ in bài
kiểm tra đã làm trên máy thành tập tin và nộp cho giáo viên (bản in mẫu có trong
phụ lục 1), tập tin này có thể tương đương với bài làm trên giấy, sẽ tiết kiệm được
thời gian và công sức, chi phí.

Có thể kiểm tra miệng/củng cố bài (hoặc các loại kiểm tra thường xuyên khác) với
số lượng hs nhiều hơn (cả lớp) trong thời gian ngắn, ngay trong tiết dạy, điều này
làm cho hs phải học bài nhiều hơn trước khi vào tiết học.
Chấm bài nhanh hơn, có hai lựa chọn là: xem trực tiếp số lượng câu đúng của hs
ngay trên máy để tính điểm; hoặc xem số lượng câu đúng trong tập tin do hs nộp.
Hạn chế sai sót so với trong mỗi lần soạn đề kiểm tra trắc nghiệm, vì giáo viên chỉ
cần tập trung một lần soạn hoàn chỉnh bộ câu hỏi trắc nghiệm thì có thể sử dụng
nó để kiểm tra rất nhiều lần.
Hạn chế hs trao đổi khi làm bài, vì hai hs gồi gần sẽ có đa số câu hỏi khác nhau,
tại một thời điểm chỉ hiển thị nội dung một câu trắc nghiệm.
Nâng cao kiến thức về tin học.

Đối với học sinh:
• Câu hỏi, hình ảnh có màu sắc, định dạng rõ ràng theo đúng chủ ý của người ra đề.


Chủ động tự ôn tập khi sử dụng chương trình với bộ câu hỏi trắc nghiệm.



Nâng cao ý thức về trung thực khi làm bài kiểm tra vì tập tin nộp cho giáo viên có
cho biết số lần xem đáp án trong quá trình làm bài.
Có thể ôn ở trường hoặc ôn tại nhà, vì có sẵn đáp án.




Nâng cao khả năng làm việc nhóm trong khi trao đổi với nhau về cách tìm ra đáp
án đúng, vì các câu hỏi đã có sẵn.
Nếu không cần in ra giấy thì

Đối với môi trường:
• Vì có thể in thành tập tin để lưu trữ nên hạn chế được khí thải có hại từ máy in,
máy photo; giảm số lượng giấy cần sử dụng nên góp phần bảo vệ rừng, bảo vệ
môi trường.
Đối với nhà trường:

5


Lương Quốc Vinh 0984252871



Không cần tốn nhiều không gian, công sức để lưu trữ và bảo quản các bài kiểm tra
vì đã lưu trên thiết bị nhớ rất nhỏ gọn, có thể sao chép thành rất nhiều bản, rất dễ
mang đi nơi khác.

2.2.4 Các hạn chế của chương trình


Chữ trong tập tin in ra còn quá nhỏ, trình bày chưa đẹp.



Thao tác chuyển từ văn bản word thành hình còn phức tạp đối với nhiều giáo viên.



Chưa chèn được âm thanh vào câu hỏi


2.2.5 Công việc cần làm của các đối tượng
GV:
Cv1. Soạn câu hỏi trong tập tin .doc
Cv2. Chuyển câu hỏi dạng chữ thành hình ảnh trong tập tin .doc (nếu sử dụng
word 2010 sẽ nhanh hơn 2003)
- Phần chuẩn bị (chỉ thực hiện một lần chon lần đầu tiên dùng, sử dụng hoài luôn ):
là đặt phím tắt cho chức năng tùy chọn dán:
B1. Chọn menu file -> options

B2.trong cửa sổ mới chọn: customize
ribbon-> chọn nút lệnh customize…

B3. Kéo thanh cuộn dọc xuống gần cuối chọn all
commands (trong ô categories), và chọn
pasteAsPicture (trong ô commands). Rồi gõ tổ hợp
phím ctrl_q vào ô press new shortcut key, và nháy
nút assign

- Phần chuyển chữ thành hình:
B1. Bao khối phần chữ đó
B2. Bấm tổ hợp phím ctrl_x
B3. Bấm tổ hợp phím ctrl_q

6


Lương Quốc Vinh 0984252871

Lưu ý: ta cần sắp xếp nội dung của câu trắc nghiệm đúng thứ tự: phần dẫn,
đáp án đúng, ba đáp án còn lại.

Cv3. Chuyển hình ảnh trong tập tin .doc thành nhiều tập tin hình ảnh
B1. Chọn menu file->save as
B2. Gõ tên tập tin vào ôn file name, rồi chọn kiểu ‘webpage filtered’ trong ô
save as type, nháy nút save.

B4. Nháy nút yes.
Cv4. Kiểm tra lại các tập tin hình ảnh có đúng thứ tự và đủ số lượng nội dung
trong tập tin .doc không.
Nghĩa là ta mở thư mục (với tên trùng với tên tập tin mà ta đã gõ trong ô file
name) và so sánh nội dung các tệp hình đó với nội dung tệp .doc
Cv5. chép các tệp hình vào đúng thư mục môn của mình.
(nếu chuyển không được có thể gởi file word về địa chỉ
để chuyển dùm)

HS:
Cv1. Tìm thư mục ‘..trac nghiem\zchuong trinh’
Cv2. Nháy đôi vào tập tin ‘prjTracNghiem.exe’
Cv3. Nháy vào nút lệnh ‘chọn chủ đề’ để chọn môn, chủ đề cần kiểm tra, số lượng
câu hỏi sẽ làm.
Cv4. Gõ họ tên, lớp, tên bài làm và làm bài.
Cv5. Lưu, in, nộp bài.

3. Phương pháp
Thống kê, hỏi đáp với giáo viên các môn và học sinh để biết yêu cầu cụ thể về nội dung
thể hiện khi sử dụng, các chức năng cần có của chương trình.

4. Khách thể nghiên cứu
Hiệu quả của ứng dụng phần mềm trắc nghiệm trong kiểm tra đánh giá kết quả dạy-học.

5. Thiết kế nghiên cứu

Thiết kế giao diện (cửa sổ giao tiếp giữa phần mềm và học sinh).
Lựa chọn các kiểu dữ liệu phù hợp để thể hiện các dữ liệu.

6. Quy trình nghiên cứu
 Tìm hiểu các yêu cầu của giáo viên và học sinh về kiểm tra và đánh giá kết quả
kiểm tra bằng hình thức trắc nghiệm.
 Viết ra phần mềm.
 Kiểm tra tính đúng đắn thông qua kết quả phần mềm (bài kiểm tra, tệp do hs
nộp).
 Đưa vào sử dụng:
7


Lương Quốc Vinh 0984252871

- Sao chép cả thư mục ‘trac nghiem’ vào các máy trong phòng máy rồi sử dụng,
không cần cài đặt.
- Học sinh nháy đôi vào tệp .exe trong thư mục ‘..trac nghiem\zchuong trinh’ để
làm kiểm tra trắc nghiệm, in thành tệp và nộp bài cho giáo viên (GV có thể in ra
giấy nếu cần).
 Thống kê kết quả sử dụng:
- Mức độ dễ sử dụng của phần mềm
- Chất lượng hiển thị nội dung của phần mềm
- Tỉ lệ học sinh đạt điểm dưới trung bình (<5) qua các bài kiểm tra nộp tại phòng
máy.

7. Đo lường và thu thập dữ liệu
 Nhận và lưu trữ các tệp bài trắc nghiệm của học sinh nộp.
 Chấm điểm.
 Thống kê số lượng bài <5 điểm qua từng đợt, theo môn học.


8. Phân tích dữ liệu và bàn luận kết quả
 Những ý kiến của học sinh và giáo viên về phần mềm trắc nghiệm.
 Kết quả thống kê như thế nào?

9. Kết luận và khuyến nghị
 Lãnh đạo trường đã tạo điều kiện thuận lợi và giúp cơ sở vật chất, hướng dẫn thủ
tục hành chính cho giáo viên hoàn thành đề tài.
 Mặc dù đã có nhiều cố gắn để hoàn thiện chương trình trắc nghiệm, nhưng chắc
chắn vẫn còn những thiếu sót chưa phát hiện ra, rất mong nhận được những ý
kiến đóng góp về chương trình, xin hãy gởi về địa chỉ thư:

 Về mặt thủ tục hành chính còn nhiều nội dung tôi chưa rõ, cần sự hướng dẫn thật
cụ thể hơn nữa.

10. Tài liệu tham khảo
1. Văn bản qui định của ngành GD có liên quan đến đề tài: quyết định số: 950 /QĐSGDĐT An Giang.
2. Giáo trình lí thuyết và bài tập Borland Delphi, tác giả:LÊ PHƯƠNG LAN-HOÀNG
ĐỨC HẢI, NXB GD năm 2000.
3. Giáo trình lí thuyết lập trình căn bản B của ĐHCT-2010.
4. Phần help offline của ngôn ngữ lập trình Delphi XE8 (bằng tiếng Anh).
5. Phần mềm từ điển: LAC VIET mtd9 EVA

8


Lương Quốc Vinh 0984252871

11. Phụ lục
Phụ lục 1: Kết quả in bài kiểm tra trắc nghiệm từ chương trình.

Tập tin dạng pdf:

Tập tin dạng mdi:

9


Lương Quốc Vinh 0984252871

Phụ lục 2: Chương trình nguồn của phần mềm trắc nghiệm bằng ngôn ngữ lập trình Delphi
XE8.
Trong chế độ thiết kế:
Thư viện TracNghiem

Thư viện ChuDe

10


Lương Quốc Vinh 0984252871

Thư viện PhongTo

Chế độ viết lệnh:
unit untTracNghiem;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
System.IOUtils, FMX.Objects, FMX.Controls.Presentation, FMX.StdCtrls,

FMX.Menus,FMX.Edit,FMX.Printer, FMX.Ani;
type
TfrmChinh = class(TForm)
pnlPhan3: TPanel;
pnlPhan4: TPanel;
btnLui: TButton;
btnToi: TButton;
btnSoLuongCauDung: TButton;
btnXemDapAn: TButton;
btnThoat: TButton;
ima0: TImage;
11


Lương Quốc Vinh 0984252871

ima4: TImage;
ima1: TImage;
ima2: TImage;
ima3: TImage;
GBXLuaChon: TGroupBox;
rbt1: TRadioButton;
rbt2: TRadioButton;
rbt3: TRadioButton;
rbt4: TRadioButton;
gbxDapAn: TGroupBox;
cbx1: TCheckBox;
cbx2: TCheckBox;
cbx3: TCheckBox;
cbx4: TCheckBox;

btnTroLaiLamBai: TButton;
mmnChinh: TMainMenu;
mniTep: TMenuItem;
mniGioiThieu: TMenuItem;
mniMo: TMenuItem;
mniLuu: TMenuItem;
mniIn: TMenuItem;
mniSoLanXemDA: TMenuItem;
thoat: TMenuItem;
edtHoTen: TEdit;
edtLop: TEdit;
Text1: TText;
txtCauDangLam: TText;
txtTongSoCau: TText;
PrintDialog1: TPrintDialog;
elpChonChuDe: TEllipse;
txtChonChuDe: TText;
edtTenBaiLam: TEdit;
mniXem: TMenuItem;
mniSoLuongCauDung: TMenuItem;
mnixemdapan: TMenuItem;
FloatAnimation1: TFloatAnimation;
FloatAnimation2: TFloatAnimation;
procedure FormCreate(Sender: TObject);
procedure thoatClick(Sender: TObject);
12


Lương Quốc Vinh 0984252871


procedure btnThoatClick(Sender: TObject);
procedure mniGioiThieuClick(Sender: TObject);
procedure mniSoLanXemDAClick(Sender: TObject);
procedure btnLuiClick(Sender: TObject);
procedure btnToiClick(Sender: TObject);
procedure btnXemDapAnClick(Sender: TObject);
procedure btnTroLaiLamBaiClick(Sender: TObject);
procedure mniLuuClick(Sender: TObject);
procedure edtLopTyping(Sender: TObject);
procedure edtHoTenTyping(Sender: TObject);
procedure mniMoClick(Sender: TObject);
procedure rbt1Change(Sender: TObject);
procedure rbt2Change(Sender: TObject);
procedure rbt3Change(Sender: TObject);
procedure rbt4Change(Sender: TObject);
procedure btnSoLuongCauDungClick(Sender: TObject);
procedure mniInClick(Sender: TObject);
procedure ima1Click(Sender: TObject);
procedure ima0Click(Sender: TObject);
procedure ima2Click(Sender: TObject);
procedure ima3Click(Sender: TObject);
procedure ima4Click(Sender: TObject);
procedure txtChonChuDeClick(Sender: TObject);
procedure edtTenBaiLamTyping(Sender: TObject);
procedure mniSoLuongCauDungClick(Sender: TObject);
procedure mnixemdapanClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }

end;
const max=1500;
type
tKieuChiMuc
bd : word;
daD : word;
daC : word;

=record

13


Lương Quốc Vinh 0984252871

ThuTu :array[0..3]of byte;
end;
tDSChiMuc = array[0..max]of tkieuchimuc;
tDShinh = array[0..max]of tbitmap;
var
frmChinh
:TfrmChinh;
HoTen
:wideString;
Lop
:wideString;
TenTepTThs
:wideString;
TenTepDShinh
:wideString;

TenBaiLam
:widestring;
TongSoCau
:word;
TongSoCauSeLam
:word;
TongSoCauDung
:word;
CauDangLam
:integer;
DuongDanHienTai
:wideString;
TongSoThuMucConMon :word;
DSTenThuMucConMon :TstringDynArray;
TongSoThuMucConChuDe:word;
DSTenThuMucConChuDe :TstringDynArray;
TenThuMucCanTim
:wideString;
TimThayThuMuc
:boolean;
DangXemDapAn
:boolean;
DSTenTepHinh
:TstringDynArray;
TongSoTepHinh
:word;
DShinh
:tDShinh;
ChiMucTruoc
:TdsChiMuc;

ChiMucSau
:TdsChiMuc;
MangChiMucKhongTrung:array [0..max]of word;
MangThuTuKhongTrung :array [0..3] of byte;
TBloi
:widestring='Lỗi trong phần: ';
SoLanXemDA
:word;

procedure LayDSTenTep(var dsten:tstringdynarray; n:word; s:widestring);
14


Lương Quốc Vinh 0984252871

function DemSoLuongThuMucCon(s:widestring):word;
procedure LayDSTenThuMucCon(var dsTen:tstringdynarray; n:word; s:widestring);
procedure LayDSHinh(var dshinh:tdshinh; dsten:tstringdynarray;sl:word);
procedure KhoiTaoChiMucTruoc;
procedure KhoiTaoChiMucSau;
procedure VeHinhCauDangLam;
function DemSoLuongTepHinh(s:widestring):word;
implementation
uses untphongto,untchude;
{$R *.fmx}
function DemSoLuongThuMucCon(s:widestring):word;
var sl:word;
begin
tbloi:=' DemSoLuongThuMucCon';
try

sl:=0;
if trim(s)<>'' then
sl:=high(System.IOUtils.TDirectory.GetDirectories(s))+1
else
showmessage(tbloi+' đường dẫn sai.');
demsoluongthumuccon:=sl;
except
showmessage(tbloi);
end;
end;
function LayDuongDanHienTai:widestring;
var s:widestring;
begin
tbloi:='LayDuongDanHienTai';
try
s
:='';
s:=System.IOUtils.TDirectory.GetCurrentDirectory;
layduongdanhientai:=s;
except
showmessage(tbloi);
end;
end;
15


Lương Quốc Vinh 0984252871

function TimKiTuTuBenPhai(ch:char; s:widestring):word;
var vt:word;

I: Integer;
begin
tbloi:='TimKiTuTuBenPhai';
try
vt:=0;
for I := length(s) downto 1 do
if s[i]=ch then
begin
vt:=i;
break;
end;
timkitutubenphai:=vt;
except
showmessage(tbloi);
end;
end;
procedure LayDSTenThuMucCon(var dsTen:tstringdynarray; n:word; s:widestring);
begin
tbloi:='LayDSTenThuMucCon: ';
try
setlength(dsten,0);
if (trim(s)<>'')and (n>0) then
begin
setlength(dsten,n);
dsten:=System.IOUtils.TDirectory.GetDirectories(s) ;
end
else
if n=0 then
showmessage(tbloi+s+': không có thư mục con.')
else

showmessage(tbloi+s+': đường dẫn này có vấn đề.');
except
showmessage(tbloi);
end;
16


Lương Quốc Vinh 0984252871

end;
function DemSoLuongTepHinh(s:widestring):word;
var sl:word;
begin
tbloi:='DemSoLuongTepHinh';
try
sl:=0;
if trim(s)<>'' then
sl:=high(System.IOUtils.TDirectory.GetFiles(s))+1
else
showmessage(tbloi+' đường dẫn sai');
demsoluongtephinh:=sl;
except
showmessage(tbloi);
end;
end;
procedure LayDSTenTep(var dsten:tstringdynarray; n:word; s:widestring);
begin
tbloi:='LayDSTenTep';
try
setlength(dsten,0);

if (trim(s)<>'')and(n>0) then
begin
setlength(dsten,n);
dsten:=System.IOUtils.TDirectory.GetFiles(s);
end
else
showmessage(tbloi+' đường dẫn sai hoặc số lượng là 0');
except
showmessage(tbloi);
setlength(dsten,0);
end;
end;
procedure LayDSHinh(var dshinh:tdshinh; dsten:tstringdynarray;sl:word);
var
I: Integer;
17


Lương Quốc Vinh 0984252871

begin
tbloi:=' layDSHinh';
try
if (sl>0)and(high(dsten)>0) then
begin
for I := 0 to sl-1 do
if trim(dsten[i])<>'' then
begin
dshinh[i]:=tbitmap.Create;
dshinh[i].LoadFromFile(dsten[i]);

end
else
showmessage('tệp hình thứ:'+inttostr(i)+' không có');
end
else
showmessage('trong LayDSHinh: không có hình để lấy.');
except
showmessage(tbloi);
end;
end;
procedure VeHinh(hinh:tbitmap; vt:byte);
begin
tbloi:=' VeHinh';
try
if tongsotephinh<1 then
showmessage('procedure veHinh-thông báo: tổng số tệp hình <1')
else
case vt of
0:begin
frmchinh.ima0.Bitmap:=hinh;
end;
1:begin
frmchinh.ima1.Bitmap:=hinh;
end;
2:begin
frmchinh.ima2.Bitmap:=hinh;
end;
18



Lương Quốc Vinh 0984252871

3:begin
frmchinh.ima3.Bitmap:=hinh;
end;
4:begin
frmchinh.ima4.Bitmap:=hinh;
end;
else
showmessage(tbloi+' vị trí này không có để vẽ ');
end;
except
showmessage(tbloi);
end;
end;
function LayDuongDanThuMucTracNghiem(duongdan:widestring):widestring;
var
ten:widestring;
s:widestring;
vt:word;
begin
tbloi:='LayDuongDanThuMucTracNghiem';
try
s:='';
vt:=timkitutubenphai('\',duongdan);
while (length(duongdan)>1)and(vt>0) do
begin
ten:=copy(duongdan,vt+1,length(duongdan)-vt);
if trim(ten)=trim(tenthumuccantim) then
begin

timthaythumuc:=true;
break;
end;
delete(duongdan,vt,length(duongdan)-vt+1);
vt:=timkitutubenphai('\',duongdan);
end;
s:=duongdan;
layduongdanthumuctracnghiem:=s;
except
19


Lương Quốc Vinh 0984252871

showmessage(tbloi);
end;
end;
procedure DatGioiHanTongSoCau;
begin
if tongsotephinh<5 then
tongsocau:=0
else
tongsocau:=tongsotephinh div 5;
end;
procedure DatGioiHanTongSoCauSeLam;
begin
if tongsocau>0 then
begin
if tongsocauselam<1 then
tongsocauselam:=1;

if tongsocauselam>tongsocau then
tongsocauselam:=tongsocau;
end
else
begin
showmessage('DatGioiHanTongSoCauSeLam: tổng số câu <0');
tongsocau:=0;
tongsocauselam:=0;
end;
end;
procedure DatGioiHanCauDangLam;
begin
datgioihantongsocauselam;
if tongsocauselam>0 then
begin
if caudanglam<0 then
caudanglam:=0;
if caudanglam>tongsocauselam-1 then
caudanglam:=tongsocauselam-1;
end
20


Lương Quốc Vinh 0984252871

else
begin
showmessage('DatGioiHanCauDangLam: tổng số câu sẽ làm <0');
tongsocauselam:=0;
caudanglam:=0;

end;
end;
procedure DatGioiHanChiSoHinh(var ChiSo:word; SoLuong:word);
begin
if soluong>0 then
begin
if chiso<0 then
chiso:=0;
if chiso>soluong-1 then
chiso:=soluong-1;
end
else
begin
showmessage('DatGioiHanChiSoHinh: không có hình để vẽ');
chiso:=0;
end;
end;
procedure VeHinhCauDangLam;
var
I,vt,vttt: word;
begin
tbloi:=' VeHinhCauDangLam có sai. ';
try
datgioihancaudanglam;
frmchinh.txtcaudanglam.text:=inttostr(caudanglam+1);
vt:=chimucsau[caudanglam].bd;
datgioihanchisohinh(vt,tongsotephinh);
vehinh(dshinh[vt],0);
for I := 1 to 4 do
begin

vttt:=chimucsau[caudanglam].thutu[i-1];
21


Lương Quốc Vinh 0984252871

vehinh(dshinh[vt+vttt],i);
end;
except
showmessage(tbloi);
end;
end;
procedure KhoiTaoChiMucTruoc;
var
I,sl: Integer;
j: Integer;
begin
tbloi:= ' KhoiTaoChiMucTruoc: có sai';
try
for I := 0 to tongsocau-1 do
begin
chimuctruoc[i].bd :=0+i*5;
chimuctruoc[i].daD :=1;
chimuctruoc[i].dac :=0;
for j := 0 to 3 do
chimuctruoc[i].ThuTu[j]:=j+1;
end;
except
showmessage(tbloi);
end;

end;
procedure TaoMangChiMucKhongTrung;
var
kt:array[0..max]of boolean;
I,tam: Integer;
begin
for I := 0 to max do
kt[i]:=false;
randomize;
for I := 0 to tongsocau-1 do
begin
repeat
tam:=random(tongsocau);
22


Lương Quốc Vinh 0984252871

until kt[tam]=false;
if kt[tam]=false then
begin
mangchimuckhongtrung[i]:=tam;
kt[tam]:=true;
end;
end;
end;
procedure TaoMangThuTuKhongTrung;
var
I,tam: Integer;
kt:array[0..3]of boolean;

begin
randomize;
for I := 0 to 3 do
kt[i]:=false;
for I := 0 to 3 do
begin
repeat
tam:=random(4);
until kt[tam]=false;
if kt[tam]=false then
begin
mangthutukhongtrung[i]:=tam;
kt[tam]:=true;
end;
end;
end;
procedure KhoiTaoChiMucSau;
var
I,j,k: Integer;
begin
taomangchimuckhongtrung;
//for I := 0 to tongsocau-1 do
//showmessage('mang chi muc khong trung, phan tử thứ:'+inttostr(i)+':
'+inttostr(mangchimuckhongtrung[i]));
23


Lương Quốc Vinh 0984252871

for I := 0 to tongsocauselam-1 do

begin
chimucsau[i]:=chimuctruoc[mangchimuckhongtrung[i]];
taomangthutukhongtrung;
//for k := 0 to 3 do
//showmessage('mang thu tu khong trung, phan tử thứ:'+inttostr(k)+':
'+inttostr(mangthutukhongtrung[k]));
for j := 0 to 3 do
chimucsau[i].ThuTu[j]:=mangthutukhongtrung[j]+1;
//tìm đáp án đúng ở vị trí nào
for j := 0 to 3 do
if chimucsau[i].ThuTu[j]=1 then
chimucsau[i].daD:=j+1;
//gán giá trị cho đáp án hs chọn là 0
chimucsau[i].dac:=0;
end;
end;
procedure KhoiTaoChiMucSauKhongNgauNhien;
begin
chimucsau:=chimuctruoc;
end;
procedure XemDSChiMuc(chimuc:tdschimuc; sl:word);
var
i,k:integer;
s:widestring;
begin
for i := 0 to sl-1 do
with chimuc[i] do
begin
s:=': '+inttostr(bd)+' ';
s:=s +inttostr(dac)+' ';

s:=s +inttostr(dad)+' ';
for k := 0 to 3 do
s:=s +inttostr(thutu[k])+' ';
showmessage('câu thứ: '+inttostr(i)+ s);
24


Lương Quốc Vinh 0984252871

end;
end;
//................... ...............................
procedure TfrmChinh.FormCreate(Sender: TObject);
var
i: Integer;
//var
// I: Integer;
// j: Integer;
begin
TBloi
:=' TfrmChinh.FormCreate có sai';
try
btnxemdapan.enabled :=false;
btnsoluongcaudung.Enabled:=false;
solanxemda
:=0;
gbxdapan.Visible :=false;
TenThuMucCanTim
:='trac nghiem';
DuongDanHienTai

:=layduongdanhientai;
duongdanhientai
:=layduongdanthumuctracnghiem(duongdanhientai);
if timthaythumuc=true then
begin
HoTen
:='họ tên là gì?' ;
Lop
:='học lớp nào?' ;
TenTepTThs
:='ttHS'
;
TenTepDShinh
:='DShinh' ;
TenBaiLam
:='';
TongSoCau
:=0;
TongSoCauSeLam
:=0;
TongSoCauDung
:=0;
CauDangLam
:=0;
TongSoThuMucConMon
:=demsoluongthumuccon(duongdanhientai);
laydstenthumuccon(dstenthumucconMon,tongsothumucconMon,duongdanhientai);
// for I := 0 to tongsothumucconMon-1 do
// showmessage('thư mục '+inttostr(i)+' có tên là: '+dstenthumucconMon[i]);
if tongsothumucconmon>0 then

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×