1. Trang chủ
  2. » Thể loại khác

BÁO cáo ASSIGNMENT SOF

19 1K 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 555,8 KB

Nội dung

Phần mềm thi trắc nghiệm này sẽ gồm 3 form chính là: Form đăng nhập, Form ghi và test câu hỏi và form làm bài.. Từ form đăng nhập chúng ta có thể truy nhập với tài khoản admin và user, v

Trang 1

BÁO CÁO ASSIGNMENT SOF 101

Sinh viên : Lê Xuân Anh Giảng viên hướng dẫn: Lê Thanh Hải

Trang 2

LỜI MỞ ĐẦU

Để hoàn phần mềm ghi câu hỏi và chấm thi trắc nghiệm cũng là bài Assignment này

Em xin được gửi lời cảm ơn đến thầy Lê Thanh Hải và trợ giảng Nguyễn Huy Toản là những người đã tận tình giúp đỡ em

từ những bước đầu cho đến khi phần mềm được hoàn thành.

Em xin chân thành cảm ơn!

Trang 3

Phần I : Giới thiệu về bài Assignment

Đề tài em đã chọn là phần mềm thi trắc nghiệm, với phần mềm này chúng ta có thể ghi thêm câu hỏi và làm bài trắc nghiệm

Phần mềm thi trắc nghiệm này sẽ gồm 3 form chính là: Form đăng nhập, Form ghi và test câu hỏi và form làm bài

Từ form đăng nhập chúng ta có thể truy nhập với tài khoản admin và user, với tài khoản admin thì sẽ được dẫn tới form Ghi và test câu hỏi

Trang 4

Còn tài khoản User sẽ được dẫn tới form làm bài:

Trang 5

Phần II: Phần Design của các form

Form 1: Về phần Design của form 1 sẽ có 3 phần chính:

- Textbox tên đăng nhập

- Textbox password

- Button Login

Ngoài ra còn có thêm 2 Label để chú thích cho Textbox đăng nhập và password

Form 2: Ghi và test câu hỏi, về phần Design gồm:

- Textbox ghi tên file

- Textbox ghi câu hỏi

- Textbox các câu trả lời ( 4 Textbox)

- 4 radiobutton tương ứng cho 4 câu trả lời, dùng để đánh dấu câu trả lời đúng

Trang 6

- Button Next có chức năng để lưu lại câu hỏi vừa tạo và chuẩn bị cho việc viết câu hỏi mới

- Button Test giúp cho người viết câu hỏi có thể kiểm tra lại các câu hỏi vừa tạo

- Button trở về form đăng nhập để đăng nhập với 1 tài khoản khác

- Button Exit để thoát tất cả chương trình đang chạy

- Và các Label để chú thích

Form 3: Phần dành cho người làm bài, phần design gồm có:

- Button browse để chọn file câu hỏi

- Label hiển thị tên file và đường dẫn tới file câu hỏi

- Button bắt đầu làm bài

- Label hiển thị số lượng câu hỏi

- Label hiển thị câu hỏi

- RadioButton để hiển thị đáp án và chọn đáp án

- Button quay lại câu hỏi liền trước

- Button câu hỏi tiếp theo

- Button kết thúc làm bài và xem kết quả

- Button Exit để thoát tất cả chương trình đang chạy

- Các Label chú thích

Phần 3: Code cho các thành phần của các form:

1 – Form đăng nhập

Private Sub btnLog_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnLog.Click

If txtUser.Text = "admin" And txtPass.Text = "admin" Then

Me Hide()

Form2 Show()

ElseIf txtUser.Text = "sinhvien" And txtPass.Text = "sinhvien" Then

Me Hide()

Form3 Show()

End If

txtUser.Focus()

End Sub

Về phần viết code cho form đăng nhập thì chúng ta chỉ cần viết code cho button Login,

Ý nghĩa của phần code đó sẽ là :

- Nếu phần text nhập vào trong txtUser.text và txtPass.text trùng với dữ liệu được lưu sẵn, khớp với tài khoản “admin” thì khi click vào button đăng nhập

sẽ được dẫn tới form 2, form này dùng để viết và kiểm tra các câu hỏi Và form đăng nhập sẽ vẫn chạy nhưng bị ẩn đi

Trang 7

- Nếu khớp với tài khoản “sinhvien” thì sẽ được dẫn tới form 3, form 3 dành cho việc làm bài Và form đăng nhập cũng sẽ bị ẩn đi

- Ngoài ra chúng ta sẽ chỉnh thuộc tính PasswordChar cho textbox password,

và dùng thuộc tính Focus để con trỏ mặc định trỏ vào txxUser.text

2- Form viết và kiểm tra câu hỏi ( dành cho tài khoản admin)

Imports System.IO

Imports System

Public Class Form2

Đầu tiên chúng ta khai báo Namespace là System.IO có chức năng “đọc” và

“viết” files và các datastreams khác, classes điển hình của namespace này là

FileStream, Path, StreamReader, StreamWriter

Dim FW As StreamWriter

Khai báo 1 biến thuộc lớp StreamWriter dùng để ghi văn bản ra file, và bắt đầu việc định nghĩa cho sự kiện Button_Click Trong chế độ Design nhấn đúp vào Button cần định nghĩa ( ở đây là btnNext)

Private Sub btnNext_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnNext.Click

FW = New StreamWriter (txtLuu.Text, True )

Cho phép ghi

Nơi ghi tên file lưu

Trang 8

FW.Write(txtCH.Text & ControlChars Tab)

Ghi phần text của phần câu hỏi ra file, còn với các textbox chứa nội dung đáp án thì khai báo để có thể phục vụ cho việc dễ dàng tách các mảng, bản ghi và chấm điểm

If radDA1.Checked = True Then

FW.Write( "#" & txtDA1.Text & ControlChars Tab)

Else

FW.Write(txtDA1.Text & ControlChars Tab)

End If

If radDA2.Checked = True Then

FW.Write( "#" & txtDA2.Text & ControlChars Tab)

Else

FW.Write(txtDA2.Text & ControlChars Tab)

End If

If radDA3.Checked = True Then

FW.Write( "#" & txtDA3.Text & ControlChars Tab)

Else

FW.Write(txtDA3.Text & ControlChars Tab)

End If

If radDA4.Checked = True Then

FW.Write( "#" & txtDA4.Text & Chr(13))

Else

FW.Write(txtDA4.Text & Chr(13))

End If

FW.Close()

End Sub

Khi RadioButton trước textbox đáp án được đánh dấu ( Checked ) thì phần text đáp án được ghi vào file sẽ có thêm dấu “ # “ đường trước để đánh dấu đáp án đúng, ControlChars.Tab tương ứng với Tab trong Microsoft Word office và có chức năng tách các bản ghi

( Chú ý: FW.Close ( ) kết thúc việc ghi )

'Xoá dữ liệu cũ để nhập dữ liệu mới vào

txtCH.Clear()

txtDA1.Clear()

Trang 9

txtDA2.Clear()

txtDA3.Clear()

txtDA4.Clear()

FW.Close()

Thêm phần code này để sau khi click vào button để lưu thì dữ liệu cũ sẽ bị xóa

để ghi dữ liệu mới

Private Sub TextBox1_TextChanged( ByVal sender As System Object , ByVal e As

System EventArgs ) Handles txtCH.TextChanged, txtDA4.TextChanged, txtDA3.TextChanged, txtDA2.TextChanged, txtDA1.TextChanged

If txtLuu.Text = "" Or txtCH.Text = "" Or txtDA1.Text = "" Or txtDA2.Text = "" Or

txtDA3.Text = "" Or txtDA4.Text = "" Then

btnNext.Enabled = False

Else

btnNext.Enabled = True

End If

End Sub

Khi chưa nhập đủ dữ liệu vào các textbox thì ẩn button dùng để lưu và ngược lại khi đủ dữ liệu rồi button đó sẽ không bị ẩn nữa

Tiếp tục định nghĩa cho sự kiện Button_Click cho các button còn lại trong form 2,

Private Sub btnTest_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnTest.Click

Form3 Show()

End Sub

Vì hoàn thành được form test nên em sẽ tạm thời lấy form 3 (form dành cho user vào làm bài) cho sự kiện này Khi Click vào button “ Test” thì form3 sẽ được chạy

Private Sub btnTrove_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnTrove.Click

Trang 10

Me Close()

Form1 Show()

End Sub

Tạo cho form2 một button để quay trở lại với form đăng nhập, điều này rất cần thiết khi muốn đăng nhập lại bằng tài khoản khác Form2 sẽ được đóng lại để chạy form1 Lúc đầu khi cho hiện form2 em không đóng form1 bởi vì form2 chạy dựa trên form1, nếu form1 bị đóng lại thì form2 sẽ ko chạy được

Private Sub btnExit_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnExit.Click

Me Close()

Form1 Close()

Form3 Close()

End Sub

Với button Exit thì sẽ dùng để đóng tất cả các chương trình vừa được chạy

Và như vậy là Form2 để ghi câu hỏi đã hoàn thành, tiếp tục với form3 dùng để làm bài

3 – Form Làm bài

Imports System.IO

Giống như form2, đầu tiên sẽ là khai báo Namespace

Trang 11

Public Class Form3

Dim FR As StreamReader

Khai báo 1 biến thuộc lớp StreamReader để đọc câu hỏi

Tiếp theo sẽ là định nghĩa cho button tìm file thì chúng ta sẽ định nghĩa như sau:

Dim CH, i As Integer

Dim mangCH() As String

Khai báo các biến cần thiết để quản lý số câu hỏi lấy ra, mảng câu hỏi, và vị trí các bản ghi

Private Sub btnBro_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnBro.Click

Using Mofile As New OpenFileDialog

If Mofile.ShowDialog = Windows.Forms DialogResult OK Then

CH = 0

i = 0

lblTT.Text = Mofile.FileName

btnBD.Enabled = True

btnTien.Enabled = True

Else

btnTien.Enabled = False

btnBD.Enabled = False

MsgBox( "Bạn cần chọn file để làm bài" )

End If

End Using

FR = New StreamReader (lblTT.Text)

Do While Not FR.EndOfStream

mangCH(i) = FR.ReadLine

i += 1

Loop

CH = i

FR.Close()

End Sub

Khi click vào button để tìm file câu hỏi thì sẽ có 1 cửa sổ được mở để tìm file câu hỏi, nếu click “ Ok” thì đường link dẫn tới file câu hỏi sẽ được ghi lại trên 1 Label, chúng

ta sẽ click vào button” Bắt đầu làm bài” để bắt đầu làm bài Ngược lại nếu không chọn file câu hỏi thì button “ Bắt đầu làm bài” sẽ bị ẩn đi, sẽ không thể bắt đầu làm bài

Hình bên dưới là khi chưa chọn file để làm bài

Trang 12

Và khi đã chọn:

Trang 13

Tiếp theo sẽ là định nghĩa cho sự kiện click vào button “Bắt đầu làm bài”

Private Sub btnBD_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnBD.Click

i = 0

Timer1.Start()

Dim record() As String = mangCH(i).Split(vbTab)

lblTongCH.Text = "Câu hỏi" & i + 1 & "/" & CH

lblCH.Text = XoaDauThang(record(0))

rad_A.Text = XoaDauThang(record(1))

rad_B.Text = XoaDauThang(record(2))

rad_C.Text = XoaDauThang(record(3))

rad_D.Text = XoaDauThang(record(4))

End Sub

Theo như phần ghi file của form2 thì mỗi một câu hỏi và các đáp án sẽ được ghi trên 1 dòng, cuối dòng sẽ là (Chr(13)), tương ứng như Enter trong Microsoft Word

Trang 14

office, câu hỏi và các đáp án sẽ được phân tách bằng (Controlchar.Tab) tương ứng với khi ta dùng “Tab” trong Microsoft Word office Từ cách ghi file thì chúng ta sẽ thực hiện những bước ngược lại để đọc file

Một dòng bất kỳ trong file text sẽ được lấy ra, sẽ được hiểu là gồm 1 câu hỏi và

4 đáp án Tất cả sẽ được gán cho 1 mảng, và mỗi lần “Tab” sẽ kết thúc 1 bản ghi, chúng ta sẽ có 5 bản ghi được đánh dấu lần lượt là 0, 1, 2, 3, 4

Bản ghi được đánh dấu là 0 sẽ là câu hỏi và được ghi lại trên Label câu hỏi, tương tự thì 4 bản ghi còn lại sẽ được ghi lại trên phần text của các radiobutton

Tiếp theo sẽ là phần định nghĩa cho các button dùng để làm bài:

- Đầu tiên là button dùng để di chuyển tới câu hỏi tiếp

Private Sub btnTien_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnTien.Click

If i >= CH - 1 Then

btnTien.Enabled = False

Else

i += 1

btnLui.Enabled = True

End If

Dim record() As String = mangCH(i).Split(vbTab)

lblTongCH.Text = "Câu hỏi" & i + 1 & "/" & CH

lblCH.Text = XoaDauThang(record(0))

rad_A.Text = XoaDauThang(record(1))

rad_B.Text = XoaDauThang(record(2))

rad_C.Text = XoaDauThang(record(3))

rad_D.Text = XoaDauThang(record(4))

End Sub

- Button để quay lại câu hỏi trước

Private Sub btnLui_Click( ByVal sender As System Object , ByVal e As

System EventArgs ) Handles btnLui.Click

If i <= 0 Then

btnLui.Enabled = False

Else

i -= 1

btnTien.Enabled = True

End If

Trang 15

Dim record() As String = mangCH(i).Split(vbTab)

lblTongCH.Text = "Câu hỏi" & i + 1 & "/" & CH

lblCH.Text = XoaDauThang(record(0))

rad_A.Text = XoaDauThang(record(1))

rad_B.Text = XoaDauThang(record(2))

rad_C.Text = XoaDauThang(record(3))

rad_D.Text = XoaDauThang(record(4))

End Sub

Mỗi lần click vào 2 button này thì đều phải định nghĩa lại việc ghi câu hỏi, chi khác nhau là ghi lại câu hỏi liền trước hay liền sau

- Xong việc đọc câu hỏi và ghi các câu hỏi thì đây sẽ là phần quan trọng nhất, phần chấm điểm cho bài vừa làm

Khai báo 1 thủ tục để chấm điểm cho bài thi:

Public Function Chambai( ByVal str As String ) As Boolean

If Microsoft.VisualBasic.Left(Trim(str), 1) = "#" Then

Return True

Else

Return False

End If

End Function

Việc khai báo thủ tục này có thể làm trên phần code của form hoặc chúng ta có thể tạo 1 Moduel riêng để tiện cho việc quản lý Từ phần ghi bài thì mỗi đáp án đúng đều đã được đánh dấu bằng cách ghi vào đầu dòng đáp án đúng đó 1 ký tự “ # ” nhờ việc đã đánh dấu nên thủ tục chấm bài của chúng ta sẽ áp dụng ngược lại Đáp án nào

có ký tự “ # ” ở đầu sẽ là đáp án đúng

Nhưng từ đây lại phải xử lý tiếp vấn đề ký tự “ # ” có ở đầu dòng, chúng ta sẽ tạo một thủ tục nữa để xóa ký tự “ # ”

Public Function XoaDauThang( ByVal str As String ) As String

If Microsoft.VisualBasic.Left(Trim(str), 1) = "#" Then

Return Microsoft.VisualBasic.Right(Trim(str), str.Length - 1)

Else

Return str

End If

End Function

End Module

Thủ tục này sẽ chọn các chuỗi ký tự có ký tự “ # “ ở đầu và thực hiện việc lấy tất

cả các ký tự bên phải của chuỗi trừ đi ký tự đầu tiên chính là ký tự “ # ”

Thực hiện việc chấm điểm trên form 3 như sau:

Trang 16

Dim diem As Double

Khai báo một biến để lưu lại số điểm

Private Sub rad_A_CheckedChanged( ByVal sender As System Object , ByVal e As

System EventArgs ) Handles rad_A.CheckedChanged

If Chambai(rad_A.Text) Then

diem += 1

End If

End Sub

Private Sub rad_B_CheckedChanged( ByVal sender As System Object , ByVal e As

System EventArgs ) Handles rad_B.CheckedChanged

If Chambai(rad_B.Text) Then

diem += 1

End If

End Sub

Private Sub rad_C_CheckedChanged( ByVal sender As System Object , ByVal e As

System EventArgs ) Handles rad_C.CheckedChanged

If Chambai(rad_C.Text) Then

diem += 1

End If

End Sub

Private Sub rad_D_CheckedChanged( ByVal sender As System Object , ByVal e As

System EventArgs ) Handles rad_D.CheckedChanged

If Chambai(rad_D.Text) Then

diem += 1

End If

End Sub

Nếu radiobutton được người dùng đánh dấu có phần text mà ký tự “ # ” ở đầu sẽ được tính là một câu trả lời đúng, biến ghi điểm sẽ được cộng thêm 1, việc này sẽ được định nghĩa trên thuộc tính radiobutton.checked

Như thế này là việc chấm điểm cho bài thi đã được hoàn thành, chúng ta có thể làm thêm phần quản lý thời gian làm bài của người dùng bằng cách thêm một Timer vào form3 như sau:

- Tại phần Design của form 3 chúng ta tìm Toolbox, trong đó có Timer ( có thể kéo hoặc đúp chuột để đưa Timer ra form3

Trang 17

- Thêm ProGressBar vào một góc thích hợp trên form3 để hiện thời gian làm bài

- Quản lý thời gian chạy của Timer ngay ở phần Design của form :

Trang 18

Private Sub btnBD_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnBD.Click

i = 0

Timer1.Start()

Khi click vào Button “ Bắt đầu kiểm tra” thì timer bắt đầu tính thời gian, và khi click vào button kết thúc thì Timer sẽ dừng tính thời gian

Private Sub btnKet_Click( ByVal sender As System Object , ByVal e As System EventArgs )

Handles btnKet.Click

Timer1.Stop()

Private Sub Timer1_Tick( ByVal sender As System Object , ByVal e As System EventArgs )

Handles Timer1.Tick

ProgressBar1.Increment(1)

If ProgressBar1.Value = 100 Then

Timer1.Stop()

btnLui.Enabled = False

btnTien.Enabled = False

End If

End Sub

Ngày đăng: 17/08/2014, 11:26

TỪ KHÓA LIÊN QUAN

w