BÁO CÁO TIỂU LUẬN MÔN LẬP TRÌNH C# 2 ĐỀ TÀI : Chương trình trắc nghiệm Thi giấy phép lái xe 2 bánh
Trang 1Khoa Công Nghệ Thông Tin
BÁO CÁO TIỂU LUẬN MÔN LẬP TRÌNH C# 2
ĐỀ TÀI : Chương trình trắc nghiệm
Thi giấy phép lái xe 2 bánh
GVHD : Trần Thị Anh Thi SVTH : Phan Thế Tuấn – 10147611
Trang 2MỤC LỤC
CHƯƠNG 1 : GIỚI THIỆU SƠ LƯỢC ĐỀ TÀI 5
1 Mục đích đề tài 5
2 Yêu cầu đặt ra 5
CHƯƠNG 2 : PHÂN TÍCH CƠ SỞ DỮ LIỆU 6
1 Sơ đồ dữ liệu 6
1.1 Bảng thí sinh 6
1.2 Bảng kết quả 7
1.3 Bảng đề thi 7
1.4 Bảng câu hỏi 7
1.5 Bảng đáp án 8
1.6 Bảng người dùng 8
2 Các ràng buộc toàn vẹn 9
2.1 Bảng câu hỏi và bảng đáp án 9
2.2 Bảng đề thi và bảng câu hỏi 9
2.3 Bảng kết quả và bảng thí sinh 10
2.4 Bảng đề thi và bảng kết quả 10
CHƯƠNG 3 : CÀI ĐẶT CHƯƠNG TRÌNH 11
1 Màn Hình Chính 11
2 Màn hình đăng nhập 11
3 Màn hình nhập thông tin 12
4 Màn hình Admin 13
5 Form Xem và sửa đề thi 14
6 Màn hình tạo đề thi 19
7 Form thí sinh 22
8 From user 27
9 Form Thi và thi thử 29
CHƯƠNG 4 : KẾT LUẬN 31
1 Nhận xét 31
Trang 33 Các chức năng chưa làm được 31
4 Hướng phát triển 31
Trang 4CHƯƠNG 1 : GIỚI THIỆU SƠ LƯỢC
ĐỀ TÀI
1 Mục đích đề tài
Tạo phần mềm thi trắc nghiệm thi giấy phép lái xe 2 bánh, giúp người dùng tạo đề thi, nhập câu hỏi, quản lý các tài khoản và phân quyền cho tài khoản, tùy theo quyền hạn mà tài khoản sẽ được hạn chế các thao tác mình thực hiện trong phần mềm như là thêm, xóa, sửa Phần mềm còn thực hiện các thao tác in ấn và xuất ra các tập tin của dữ liệu của các câu hỏi, đáp án, danh sách người dùng hoặc thí sinh ở dạng file Excel, PDF, Word … Phần mềm còn giúp cho người dùng đánh trắc nghiệm trên máy, mỗi câu hỏi có thể có 2 đến 4 đáp án, người dùng có thể thi thật hoặcthi thử, nếu thi thật thì người dùng đó phải có mã thí sinh mới vào thi được, khi thi xong điểm sẽ được lưu vào database, nếu là thi lần 2 thì điểm của thí sinh đó sẽ được update lại Thi thử thì thí sinh nhập 1 mã số tùy ý và đc thi thử nhưng dữ liệu không lưu vào databse, thi xong thì thí sinh
sẽ đc biết kết quả
2 Yêu cầu đặt ra
Tạo đề thi, xóa đề thi
Thêm, xóa, sửa người dùng, thay đổi mật khẩu
Thêm, xóa, sửa thí sinh
Xem danh sách các câu hỏi theo đề thi, sửa câu hỏi và đáp án
In danh sách câu hỏi và đáp án
In danh sách thí sinh, người dùng, danh sách kết quả
Tạo chức năng thi và thi thử
Cho phép chọn câu khi thi để người dùng có thể di chuyển nhanh đến câu chưa làmĐáp án và câu hỏi load lên form theo 1 cách không có thứ tự
Trang 5CHƯƠNG 2 : PHÂN TÍCH CƠ SỞ DỮ LIỆU
1 mathisinh nchar (20) Là khóa chính để phân biệt các thí sinh
2 tenthisinh nvarchar (50) Họ tên của thí sinh
3 sodienthoai nchar (20) Số điện thoại của thí sinh nếu có
Trang 6VD :
1.2 Bảng kết quả
Chứa các thông tin kết quả thi của thí sinh gồm mã kết quả, điểm, kết quả, mã thí sinh, mã
đề Mã thí sinh và mã đề là khóa phụ tham chiếu tới bảng tbthisinh và bảng tbdethi
1 maketqua nchar (20) Là khóa chính để phân biệt các KQ khác
3 ketqua nvarchar(10) Kết quả của thí sinh “Rớt” hoặc “Đậu”
VD :
1.3.Bảng đề thi
Chứa thông tin của đề thi gồm mã đề thi và nội dung đề thi
1 madethi nchar (20) Là khóa chính để phân biệt các DT khác
2 noidungdethi ntext Nội dung của đề thi
VD :
1.4.Bảng câu hỏi
Chứa thông tin của câu hỏi gồm mã câu hỏi, nội dung câu hỏi, mã đề thi
1 macauhoi nchar (20) Là khóa chính để phân biệt các CH khác
2 noidungcauhoi ntext Nội dung của câu hỏi
3 madethi nchar (20) Mã đề thi tham chiếu đến tbdethi
Trang 71.5.Bảng đáp án
Chứa các thông tin của các đáp án gồm mã đáp án, nội dung đáp án, đáp án đúng, mã câu hỏi
1 madapan nchar (20) Là khóa chính để phân biệt các DA khác
4 macauhoi nchar (20) Mã câu hỏi tham chiếu đển bảng tbcauhoi
VD :
1.6.Bảng người dùng
Chứa các thông tin của người dùng gồm id, mật khẩu và các quyền hạn của người dùng
1 tennguoidung varchar (50) Là khóa chính để phân biệt các người dùng
2 password varchar (50) Password của người dùng
VD :
Trang 82.2.Bảng đề thi và bảng câu hỏi
Bảng tbdethi liên kết với bảng tbcauhoi theo madethi, madethi bên bảng tbcauhoi là foreign key bên bảng tbdethi là primary key mối quan hệ 1 nhiều, một đề thi có thể có nhiều
câu hỏi
2.3.Bảng kết quả và bảng thí sinh
Trang 9Bảng tbthisinh liên kết với bảng tbketqua theo mathisinh, mathisinh bên bảng tbketqua là foreign key bên bảng tbthisinh là primary key mối quan hệ này là 1-1, một thí sinh chỉ có một
kết quả, hoặc là rớt hoặc là đậu
2.4.Bảng đề thi và bảng kết quả
Bảng tbdethi liên kết với bảng tbketqua theo madethi, made bên bảng tbketqua là foreign key madethi bên bảng tbdethi là primary key mối quan hệ 1 nhiều, một đề thi có thể có nhiều
đáp án
Trang 10CHƯƠNG 3 : CÀI ĐẶT CHƯƠNG
Trang 11Người dùng phải nhập đúng mật khẩu mới cho truy xuất vào bên trong, nếu sai tài khoản thì form sẽ báo sai tài khoản, nếu sai mật khẩu thì form sẽ báo sai mật khẩu
private void btnDangnhap_Click( object sender, EventArgs e)
//nê= u đúng thì ta bắ= t đấG u kiê/ m tra mật khấ/ u cu /a người dùng
this Visible = false ;
frmAdmin frm_Admin = new frmAdmin (tbNguoiDung);
DialogResult result = frm_Admin.ShowDialog();
Trang 12Nếu là thi thì form sẽ kiểm tra xem có thí sinh này trong danh sách hay không, nếu thì thư thử thì người dùng có thể nhập tùy ý 1 mã số nào đó
4 Màn hình Admin
Màn hình có 6 chức năng chính là:
xem thông tin người dùng hiện tại
thay đổi mật khẩu khẩu
tạo đề thi
vào form thí sinh
vào form user
vào form xem và sửa đề thi
Khi nhấn vào linklabel Xin chào :…thì sẽ xuất hiện thông tin của người dùng, form này chỉ cho người dùng xem chứ không chỉnh sửa gì về quyền của người dùng
Trang 13Khi người dùng nhần vào linklabel thay đổi mật khẩu : cho phép nhập vào mật khẩu mới
và cập nhật mật khẩu
5 Form Xem và sửa đề thi
Có 6 chức năng chính là :
xem tất cả các câu hỏi của tất cả các đề thi
xem theo đề thi
sửa câu hỏi
xóa đề thi
Trang 14Mỗi user sẽ có các quyền khách nhau, nếu ko có quền thêm thì nút thêm sẽ ko cho thực hiện
Ngoài ra form còn có các contextmenu cho việc sửa câu hỏi
Để sửa câu hỏi người dùng phải chọn câu hỏi trước khi sửa, sau khi nhấn vào sửa sẽ xuất hiện form : Để loại bỏ đáp án chỉ cần bỏ check vào đáp án và chỉ được loại bỏ 2 đáp án cuối cùng
Trang 15//cập nhật nội dung cấu ho /i và đáp án A,B
tbcauhoi.Rows[0][ "noidungcauhoi" ] = txtnoidungcauhoi.Text; tbDapAn.Rows[0][ "noidungdapan" ] = txtdapanA.Text;
tbDapAn.Rows[1][ "noidungdapan" ] = txtdapanB.Text;
//kiê/ m tra xem có cấu ho /i thêm hay xóa bớt hay ko
//số= đáp án là số= đáp án ban đấG u khi ta load lên, đê= m là số= đáp án hiện tại
//nê= u có >0 số= đáp án thì thêm vào
int dongthem = dem - sodapan;
Trang 17case "A" : dung[0] = true ; break ;
case "B" : dung[1] = true ; break ;
case "C" : dung[2]= true ; break ;
case "D" : dung[3] = true ; break ;
Khi nhần vào button xóa thì sẽ xuất hiện danh sách các đề thi để người dùng xóa
Code khi nhấn vào nút xóa :
private void btnXoa_Click( object sender, EventArgs e)
{
DialogResult result= MessageBox Show( "Bạn có muố= n xóa hay
khống" , "Thống báo" , MessageBoxButtons OKCancel, MessageBoxIcon Question);
try
{
if (result == DialogResult OK)
Trang 18Để load được dữ liệu ta phải có các đoạn code sau
DataTable tb = objCauHoi.LayBangCauHoi_TheoDapAn().Tables[ "tbcauhoi" ];
crtCauHoi obj = new crtCauHoi ();
Trang 19Khi nhấn vào nút tạo mới form sẽ tự động xuất hiện các control động,
Sau khi nhập vào đề thi xong thì nhấn vào tạo đề thi
Trang 20Người dùng ko cần nhập vào mã câu hỏi, mà nó sẽ tự phát sinh theo mã đề và thứ tự câu hỏi, khi người dùng nhập xong và quay lại thì vẫn giữ nội dung câu hỏi và đáp án cho người dùng, sau khi quay lại nếu người dùng bỏ check vào đáp án thì đáp án đó sẽ được xóa và ko cập nhật vào CSDL
Trang 217 Form thí sinh
Form có 8 chức năng :
Thêm, xóa, sửa thí sinh
Xem kết quả của thí sinh
Nạp lại danh sách
In danh sách thí sinh
In danh sách kết quả của các thí sinh
Tìm kiếm
Trang 22Form còn có các menucontext cho việc xóa, sửa và xem kết quả thí sinh
Form khi nhấn vào button thêm
Trang 23code khi nhấn vào nút thêm
private void btnthem_Click( object sender, EventArgs e)
DataRow r_new = tbThiSinh.NewRow();
r_new[ "mathisinh" ] = txtmathisinh.Text;
r_new[ "tenthisinh" ] = txttenthisinh.Text;
r_new[ "sodienthoai" ] = txtsodienthoai.Text;
r_new[ "ngaysinh" ] =
Convert ToDateTime(dateTimePicker1.Value).ToShortDateString();
r_new[ "diachi" ] = txtdiachi.Text;
r_new[ "quequan" ] = txtquequan.Text;
Trang 24Code khi nhấn vào nút lưu :
try
{
if (kiemtrarong())
{
tbThiSinh.Rows[0][ "tenthisinh" ] = txttenthisinh.Text;
tbThiSinh.Rows[0][ "sodienthoai" ] = txtsodienthoai.Text;
tbThiSinh.Rows[0][ "quequan" ] = txtquequan.Text;
tbThiSinh.Rows[0][ "diachi" ] = txtdiachi.Text;
tbThiSinh.Rows[0][ "ngaysinh" ] = dateTimePicker1.Value;
Trang 25Form In danh sách thí sinh khi nhấn vào nút In DS
Form In danh sách các kết quả khi nhấn vào nút In KQ
Trang 26Ngoài ra form còn có contextmenu cho việc xóa và sửa người dùng
Nếu user không có quyền xem người dùng thì chỉ được xem tài khoản của mình, không được xem các tài khoản khác
Form xuất hiện khi nhấn vào nút thêm
Trang 27Form xuất hiện khi nhấn vào nút sửa
Form khi nhấn vào nút In DS
Trang 289 Form Thi và thi thử
Khi load lên một form emty có background màu đen sẽ xuất hiện trước và gọi form thi lên theo kiểu dialog, độ trong xuốt của form emty là 80%, được maximum và ko có nút đóng form
Thời gian mặc định cho thí sinh thi là 10 phút, và số điểm để thí sinh đậu là 10 điểm
Khi nhấn vào chọn câu thì sẽ xuất hiện form chọn câu, form cho phép người dùng chọn vào câu bất kì để di chuyển tới câu đó, form còn cho người dùng biết câu làm chưa làm và đã làm
Trang 29Code để dịch chuyển tới vị trí câu được check
private void rad1_CheckedChanged( object sender, EventArgs e)
{
RadioButton rad=( RadioButton )sender;
//lấ= y tên cu /a rad nhưng chỉ / lấ= y số= ví dụ rad12 thì ta lấ= y 12
string vitri = rad.Name.Replace( "rad" , "" );
//chuyê/ n vêG thành số= -1
dem = Convert ToInt32(vitri)-1;
//nê= u là form thi gán gán cho form thi ngược lại gán cho form thi thư/
Trang 30Tạo đề thi, xóa đề thi
Thêm, xóa, sửa người dùng, thay đổi mật khẩu
Thêm, xóa, sửa thí sinh
Xem danh sách các câu hỏi theo đề thi, sửa câu hỏi và đáp án
In danh sách câu hỏi và đáp án
In danh sách thí sinh, người dùng, danh sách kết quả
Tạo chức năng thi và thi thử
Cho phép chọn câu khi thi
Đáp án và câu hỏi load lên form theo 1 cách không có thứ tự
3 Các chức năng chưa làm được
- Đã hoàn thành các chức năng đưa ra ban đầu
4 Hướng phát triển
- Rút ngắn code của chương trình và dung lượng của chương trình
- Xây dựng giao diện của phần mềm đẹp hơn
- Xây dựng thêm các chức năng chọn số câu để thi và chỉnh sửa thời gian thi của phần mềm
- Thêm cơ sở dữ liệu hình vào chương trình để có để load lên các tính huống giao thông hoặc biển báo trong hình