Tải bản đầy đủ (.docx) (30 trang)

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

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.28 MB, 30 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP.HCM
Khoa 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
TP.HCM Ngày 18 tháng 11 năm 2012
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
MỤC LỤC
Trang 2
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
CHƯƠ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ặc
thi 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 3
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
CHƯƠNG 2 : PHÂN TÍCH CƠ SỞ DỮ
LIỆU
1. Sơ đồ dữ liệu
Cơ sở dữ liệu gồm 6 bảng :
- Bảng thí sinh : tbthisinh
- Bảng kết quả : tbketqua
- Bảng để thi : tbdethi
- Bảng câu hỏi : tbcauhoi
- Bảng đáp án : tbdapan
- Bảng người dùng : tbnguoidung
1.1.Bảng thí sinh
Chứa các thông tin về thí sinh gồm mã thí sinh, tên thí sinh, số điện thoại, ngày sinh, địa chỉ
và quê quán.
STT Tên cột Kiểu dữ liều Ghi chú
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ó
4 ngaysinh date Ngày tháng năm sinh của thí sinh
5 diachi nvarchar (100) Địa chỉ của thí sinh
Trang 4
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
6 quequan nvarchar (100) Quê quán của thí sinh

VD :
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
STT Tên cột Kiểu dữ liều Ghi chú
1 maketqua nchar (20) Là khóa chính để phân biệt các KQ khác
2 diem numeric Số điểm của thí sinh
3 ketqua nvarchar(10) Kết quả của thí sinh “Rớt” hoặc “Đậu”
4 mathisinh nchar(20) Mã của thí sinh
5 made nchar(20) Mã đề thi
VD :
1.3.Bảng đề thi
Chứa thông tin của đề thi gồm mã đề thi và nội dung đề thi
STT Tên cột Kiểu dữ liều Ghi chú
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.
Trang 5
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
STT Tên cột Kiểu dữ liều Ghi chú
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
VD :
1.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
STT Tên cột Kiểu dữ liều Ghi chú
1 madapan nchar (20) Là khóa chính để phân biệt các DA khác

2 noidungdapan ntext Nội dung của đáp án
3 dapandung bit Là đáp án đúng hoặc sai (1,0)
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
STT Tên cột Kiểu dữ liều Ghi chú
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
3 quyenadmin bit quyền admin
Trang 6
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
4 xemnguoidung bit quyền xem người dùng
5 them bit quyền thêm
6 xoa bit quyền xóa
7 sua bit quyền sửa
VD :
2. Các ràng buộc toàn vẹn
2.1.Bảng câu hỏi và bảng đáp án
Bảng tbcauhoi liên kết với bảng tbdapan theo macauhoi, macauhoi bên bảng tbdapan là
foreign key bên bảng câu hỏi là primary key, mối quan hệ 1 nhiều, một câu hỏi có thể có nhiều
đáp án
2.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
Trang 7
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
2.3.Bảng kết quả và bảng thí sinh
Bả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 8
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
CHƯƠNG 3 : CÀI ĐẶT CHƯƠNG
TRÌNH
1. Màn Hình Chính
- Màn hình chi phép người dùng chọn vào quyền admin, thi hoặc thi thử
2. Màn hình đăng nhập
Khi nhấn vào button Admin sẽ xuất hiện form đăng nhập để người dùng nhập tài khoản và
mật khẩu
Trang 9
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
Ngườ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)
{
if (txtTendangnhap.Text == "")
{
MessageBox.Show("Bạn Chưa Nhập Vào Tên Tài Khoản");
txtTendangnhap.Focus();
return;
}
DataTable tbNguoiDung =
objNguoiDung.LayBangNguoiDung_TheoID(txtTendangnhap.Text).Tables["tbnguoidung"];
//đểm số dòng bảng đã lấy được, nếu ==0 thì thông báo sai tài khoản

//nếu đúng thì ta bắt đầu kiểm tra mật khẩu của người dùng
int n = tbNguoiDung.Rows.Count;
if (n == 0)
{
txtTendangnhap.Focus();
MessageBox.Show("Sai tên tài khoản");
}
else
{
if (txtMatkhau.Text == "")
{
txtMatkhau.Focus();
MessageBox.Show("Bạn chưa nhập vào mật khẩu");
}
else if (txtMatkhau.Text != tbNguoiDung.Rows[0]["matkhau"].ToString())
{
txtMatkhau.Focus();
MessageBox.Show("Sai mật khẩu");
}
else
{
this.Visible = false;
frmAdmin frm_Admin = new frmAdmin(tbNguoiDung);
DialogResult result = frm_Admin.ShowDialog();
this.Close();

}
Trang 10
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
}

}
3. Màn hình nhập thông tin
Khi nhấn vào button thi và thi thử sẽ hiển thị form nhập thông tin và chọn đề thi để thi
Nế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
Trang 11
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
• 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
• Khi 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
Trang 12
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
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
 in danh sách các đề thi gồm câu hỏi và đáp án của đề thi
 Tìm kiếm theo mã câu hỏi
Trang 13

GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
• Mỗ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 14
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
Khi nhấn nút lưu :
private void btnluu_Click(object sender, EventArgs e)
{
if (kiemtra())
{
try
{
//cập nhật nội dung câu hỏ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 hỏi thêm hay xóa bớt hay ko
//số đáp án là số đáp án ban đầ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;
if (dongthem == 2)
{
//nếu có 2 dòng ta thêm đáp án D và C vào
Trang 15
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2

DataRow r_C = tbDapAn.NewRow();
DataRow r_D = tbDapAn.NewRow();
r_C["madapan"] = tbDapAn.Rows[0]
["madapan"].ToString().Replace("_A_", "_C_");
r_C["noidungdapan"] = txtdapanC.Text;
r_C["macauhoi"] = macauhoi;
r_D["madapan"] = tbDapAn.Rows[0]
["madapan"].ToString().Replace("_A_", "_D_");
r_D["noidungdapan"] = txtdapanD.Text;
r_D["macauhoi"] = macauhoi;
tbDapAn.Rows.Add(r_C);
tbDapAn.Rows.Add(r_D);
}
else if (dongthem == 1)
{
//nếu có 1 dòng thì ta kiểm tra xem đó là đáp C hay D, để thêm
vào cho đúng
if (txtdapanD.Enabled == true)
{
DataRow r_D = tbDapAn.NewRow();
r_D["madapan"] = tbDapAn.Rows[0]
["madapan"].ToString().Replace("_A_", "_D_");
r_D["noidungdapan"] = txtdapanD.Text;
r_D["macauhoi"] = macauhoi;
tbDapAn.Rows.Add(r_D);
}
if (txtdapanC.Enabled == true && txtdapanD.Enabled==false)
{
DataRow r_C = tbDapAn.NewRow();
r_C["madapan"] = tbDapAn.Rows[0]

["madapan"].ToString().Replace("_A_", "_C_");
r_C["noidungdapan"] = txtdapanC.Text;
r_C["macauhoi"] = macauhoi;
tbDapAn.Rows.Add(r_C);
}
}
//còn nhỏ hơn thì ta thực hiện xóa bớt
else if (dongthem == -2)
{
tbDapAn.Rows[3].Delete();
tbDapAn.Rows[2].Delete();
}
else if (dongthem == -1)
{
if (txtdapanD.Enabled == false&&txtdapanC.Enabled==true)
tbDapAn.Rows[3].Delete();
else
tbDapAn.Rows[2].Delete();
Trang 16
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2

}
//kiểm tra đáp án đúng
switch (dapandung)
{
case "A": dung[0] = true; break;
case "B": dung[1] = true; break;
case "C": dung[2]= true; break;
case "D": dung[3] = true; break;
}

for (int i = 0; i < dem; i++)
{
tbDapAn.Rows[i]["dapandung"] = dung[i];
}
//thực hiện update 2 bảng câu hỏi và đáp án
objDapAn.Update_DapAn(tbDapAn);
objCauHoi.Update_CauHoi(tbcauhoi);
MessageBox.Show("Lưu thành công");
}
catch (Exception)
{
MessageBox.Show("Lưu thất bại");
}
this.Close();
}
}
• 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)
{
tbDeThi.Rows[comboBox1.SelectedIndex].Delete();
objDeThi.Update_DeThi(tbDeThi);
Trang 17
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2

MessageBox.Show("Xóa thành công");
this.Close();
}
}
catch (Exception)
{
MessageBox.Show("Xóa thất bại");
this.Close();
}
}
• Khi nhấn vào button In DS sẽ hiển thị như sau : người dùng có thể xuất file này ra theo
định đạng pdf, xlc, doc …
Để 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();
obj.SetDataSource(tb);
crystalReportViewer1.ReportSource = obj;
crystalReportViewer1.Refresh();
Trang 18
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
6. Màn hình tạo đề thi
- Khi load lên giao diện sẽ xuất hiện như sau
- Form cho phép người dùng tạo đề thi mới với các câu hỏi và đáp án nhập vào
• Khi 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 19
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
Ngườ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 20
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
7. 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 21
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
• Form 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 22
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
code khi nhấn vào nút thêm
private void btnthem_Click(object sender, EventArgs e)
{
if(kiemtrarong())
{
try
{
tbThiSinh = objThiSinh.LayBangThiSinh_Rong().Tables["tbthisinh"];
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;
tbThiSinh.Rows.Add(r_new);
objThiSinh.Update_ThiSinh(tbThiSinh);
MessageBox.Show("Thêm thành công");
}
catch (Exception)
{
Trang 23
GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
MessageBox.Show("Thêm thất bại");
}

this.Close();
}
}
• Form khi nhấn vào button sửa
Code 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;
objThiSinh.Update_ThiSinh(tbThiSinh);
Trang 24

GV : Trần Thị Anh Thi Môn : Lập Trình Window 2
}
MessageBox.Show("Lưu thành công");
}
catch (Exception)
{
MessageBox.Show("Lưu thất bại");
}
this.Close();
• Form khi nhấn vào nút xem KQ
• Form 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 25

×