Tải bản đầy đủ (.pdf) (57 trang)

Nghiên cứu JM và xây dựng ứng dụng minh họa (Đặng Nguyễn Kim Anh vs Đào Anh Tuấn) - 4 docx

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.41 MB, 57 trang )


Java Mobile
name="number" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="type" type="s:string" />
<s:element minOccurs="1" maxOccurs="1"
name="balance" type="s:decimal" />
</s:sequence>
<s:attribute name="status" type="s:string" />
</s:complexType>

Dựa vào định nghĩa trên, một đối tượng thuộc lớp Acct có thể được thể hiện như
sau:
<?xml version="1.0" encoding="utf-8"?>
<account status="active">
<description>Adam's savings acct</description>
<number>1234-XX</number>
<type>SV</type>
<balance>10000</balance>
</account>

Sau đó chúng ta phải định nghĩa cấu trúc các thông điệp được trao đổi trong
quá trình gọi hàm và nhận kết quả. Ta tuân theo một quy tắc: cấu trúc gói tin request
(lời gọi hàm) sẽ có tên trùng với tên hàm, cấu trúc gói tin response sẽ có tên là tên
hàm cộng với Response ở cuối.

<s:element name="GetAccount">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="acctNumber" nillable="true"


166

Java Mobile
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetAccountResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1"
name="account" type="s0:Acct" />
</s:sequence>
</s:complexType>
</s:element>
Trên đây là toàn bộ nội dung phần types.
8.3.2.2. Phần tử message:
Bên cạnh việc định nghĩa các kiểu dữ liệu được truyền giữa client và server
ta cần phải định nghĩa các thông điệp được truyền đi và hồi đáp. Bởi và các thông
điệp không phụ thuộc vào các giao thức tầng dưới nên các thông điệp có thể được
định nghĩa dưới dạng HTTP-GET/POST, SOAP hay bất kỳ một protocol nào hỗ trợ
Web Service.
Chúng ta có thể đặt tên bất kỳ cho thông điệp vì web service không đưa ra
một ràng buộc cũng như quy tắc đặt tên nào cả. Các phần tử message có thể chứa
nhiều phần tử con "part" (cũng có khi không chứa phần tử con nào). Một phần tử
"part" tượng trưng cho một tham số được truyền trong hàm. Một phần tử part phải
có một tên và kiểu dữ liệu tương ứng đã được định nghĩa.
Đối với ví dụ trên thì phần tử message có dạng như sau:
<message name="GetAccountIn">
<part name="parameters" element="s0:GetAccount" />

</message>
167

Java Mobile

<message name="GetAccountOut">
<part name="parameters" element="s0:GetAccountResponse" />
</message>
Ở đây ta gập lại cấu trúc GetAccout và GetAccountResponse đã định nghĩa ở
phần types. Theo như định nghĩa trên, thông điệp đầu vào GetAccountIn nhận một
tham số có kiểu GetAccount và thông điệp đầu ra GetAccountOut trả về một kết
quả có kiểu GetAccountResponse; cả hai kiểu này đã được định nghĩa ở phần tử
types trước đó. Các message được định nghĩa này sẽ được dùng ở phần sau.
8.3.2.3. Phần tử portType:
Ta có thể nói một cách đơn giản như sau: phần tử “types” định nghĩa các
kiểu dữ liệu, phần tử “message” định nghĩa tất cả các thông điệp (hay cũng có thể
gọi là gói tin) vào/ra nhưng lại chưa thể hiện được “thông điệp nào là của phương
thức nào”, vai trò này do portType đảm nhận.


<portType name="BankService">
<operation name="GetAccount">
<input message="s0:GetAccountIn" />
<output message="s0:GetAccountOut" />
</operation>
</portType>

Chúng ta có thể nhận thấy, các từ khóa input và output được dùng để chỉ rõ gói
tin request và gói tin response.



Phần định nghĩa portType trên cũng khá đơn giản, đối với hàm GetAccount ( ) sẽ có
hai thông điệp:

Thông điệp input: Lời gọi hàm từ client gửi lên server, có tên
GetAccountIn. Nếu đọc ngược lên phần tử message, ta sẽ thấy thông điệp
168

Java Mobile
GetAccountIn sẽ có kiểu GetAccount, và kiểu dữ liệu GetAccount được định
nghĩa trong phần tử types.

Thông điệp output: Kết quả trả về được gửi từ server đến client, có tên
GetAccountOut. Tương tự, phần tử message đã cho chúng ta biết thông điệp
GetAccountOut sẽ có kiểu GetAccountResponse và kiểu này đã được định
nghĩa trong phần types.

8.3.2.4. Phần tử binding
Các phần tử chúng ta đã xem xét qua có trách nhiệm định nghĩa web service
một cách trừu tượng: chúng cho biết các phương thức được web service hỗ trợ, các
thông tin kèm theo như tham số truyền vào, kết quả trả về của mỗi phương thức.
Tuy nhiên, với những thông tin trên chúng ta chưa xác định được sẽ phải dùng công
cụ nào để truy xuất đến web service này: ta sẽ dùng SOAP kết hợp với HTTP hay
SOAP/HTTPS hay công cụ nào khác? Phần tử binding sẽ định nghĩa cách thức truy
cập web service thông qua các protocols bên dưới.
Mỗi phần tử binding sẽ mô tả cách thức liên kết một portType vào một
protocol nhất định. Nếu web service của chúng ta hỗ trợ nhiêu protocol thì phải tạo
cho mỗi protocol một phần tử binding.
<binding name="BankService" type="s0:BankService">
<soap:binding transport = "

style="document" />
<operation name="GetAccount">
<soap:operation soapAction =
“ style="document" />
<input>
<soap:body use="literal" />
</input>
169

Java Mobile
<output>
<soap:body use="literal" />
</output>
</operation>
</binding>

Đoạn ví dụ trên cho biết web service sử dụng SOAP là protocol trao đổi
thông tin và gói tin soap sẽ được vận chuyển bằng HTTP, chúng ta có thể sử dụng
nhiều công cụ khác để truy xuất đến các hàm của web service nhưng SOAP hiện
nay là thông dụng nhất. Đoạn định nghĩa trên còn chỉ rõ “document/encoding style”
được sử dụng là dạng document/literal (còn có một dạng khác khá phổ biến là
rpc/encoded; hiện tại j2me chỉ hỗ trợ web service dạng document/literal).

8.3.2.5. Phần tử service:
Phần cuối cùng của file WSDL chứa định nghĩa các thông số vật lý cụ thể
dùng để truy xuất đến web service.

<service name="BankService">
<port name="BankService" binding="s0:BankService">
<soap:address location =

"
</port>
</service>

Giá trị location trong phần tử port chỉ rõ vị trí đặt web service. Phần tử
“binding” cho biết cách thức ánh xạ các phương thức trong phần tử “portType”
thành các gói tin SOAP (hoặc gói tin của các protocols khác) nhưng không cho biết
làm thế nào để tạo được một đối tượng portType. Đấy là nhiệm vụ của phần tử port,
phần tử port sẽ ánh xạ một phần tử portType sang một địa chỉ URI cụ thể. Node
170

Java Mobile
service sẽ gom nhóm các port liên quan đến nhau. Nếu web service có thể được truy
xuất đến bởi nhiều protocol thì sẽ có nhiều phần tử port được định nghĩa.

Trên đây là toàn bộ nội dung của một file WSDL, có khá nhiều điểm phức
tạp. Tuy nhiên, với vai trò là người sử dụng web service cũng như người xây dựng
web service đơn thuần chúng ta không cần nắm rõ cấu trúc file này vì đã có các
công cụ hỗ trợ. Cả J2ME và Visual .NET đều hỗ trợ công cụ đọc file WSDL để phát
sinh các lớp tương ứng phục vụ cho việc truy xuất hàm từ xa, mọi công việc phức
tạp bên dưới đã được giấu đi với nhà phát triển ứng dụng.
171

Java Mobile
Chương 9: Ứng dụng đăng ký học phần
9.1 Đặc tả chương trình:
9.1.1 Tổng quan:
Chương trình hỗ trợ các chức năng đăng ký học phần, xem thời khoá biểu,
xem điểm thi… chạy trên môi trường điện thoại di động. Sau khi cài đặt chương
trình lên điện thoại và đăng ký dịch vụ truy cập Internet từ điện thoại, người dùng

có thể sử dụng hầu hết các tiện ích tương tự hệ thống SMS mà không cần có máy
tính kết nối Internet như hiện nay. Ngoài J2ME, chương trình còn sử dụng công
nghệ WebService trong kết nối mạng. Vấn đề bảo mật trong chương trình tương đối
không cần thiết, chỉ sử dụng trong quá trình gửi password khi đăng nhập nhằm
tránh việc đánh cắp password.
Chương trình được thực hiện với mục tiêu mô phỏng lập trình trên thiết bị di
động bằng J2ME nên chỉ sử dụng cơ sở dữ liệu tự xây dựng. Việc ứng dụng thực tế
trên cơ sở dữ liệu chính của hệ thống SMS là hướng mở rộng trong tương lai của
chương trình.
9.1.2
Các chức năng chính:
Khi người dùng khởi động ứng dụng client, chương trình yêu cầu người dùng
đăng nhập với account, password của hệ thống SMS.
Nếu đăng nhập không hợp lệ người dùng phải nhập lại account/password để
đăng nhập lại. Nếu đăng nhập hợp lệ, người dùng có thể truy cập hệ thống và sử
dụng các chức năng sau của chương trình.
9.1.2.1 Xem thời khoá biểu:
Người dùng nhập tên và số thứ tự lớp (vd:Lớp TH2001 STT:1) để xem
thời khoá biểu của học kỳ hiện tại của lớp tương ứng.

172

Java Mobile
9.1.2.2 Đăng ký học phần:
Trong thời gian được đăng ký, người dùng có thể đăng ký các học phần
lý thuyết cũng như học phần thực hành mà trường mở trong học kỳ này.

9.1.2.3 Xem phiếu đăng ký:
Xem lại các học phần lý thuyết và thực hành mà người dùng đã thực hiện
đăng ký.


9.1.2.4 Xem điểm thi:
Xem kết quả học tập của sinh viên .

9.1.2.5 Xem thông báo:
Xem thông báo của giáo vụ khoa.

173

Java Mobile
9.2 Kiến trúc chương trình:
9.2.1 Mô hình kết nối:

Store Procedures
GPRS
HTTP request/ response
Gateway
Web Server
.NET
Internet
Client
J2ME /
JSR172
DB Server
SQL Server

Hình 9.1 Kiến trúc chương trình ứng dụng

Ứng dụng MIDlet chạy trên điện thoại di động đóng vai trò 1 client. Client
này sau khi đăng ký sử dụng dịch vụ internet cho điện thoại sẽ có khả năng kết nối

đến server.
Client được viết bằng J2ME đóng gói thành DKHP.jar và DKHP.jad. Server
là chương trình viết bằng .NET chạy trên HTTP server, không có giao diện. Server
sẽ trao đổi thông tin với Database server thông qua các Store procedure. Cơ sở dữ
liệu xây dựng trên SQL Server.
Mô hình hoạt động:
174

Java Mobile
• Điện thoại sẽ chủ động kết nối và gửi gói tin đến web server. Gói
tin sẽ được gửi dưới dạng sóng GPRS đến trạm điện thoại, trách
nhiệm của nhà cung cấp điện thoại sẽ phải chuyển tín hiệu từ dạng
sóng GPRS sang dạng tín hiệu truyền trong đường truyền hữu
tuyến internet.
• Lúc này nhà cung cấp dịch vụ di động sẽ hoạt động như một
gateway, làm trung gian liên lạc cho thiết bị di động và web server.
• Gói tin được điện thoại di động gửi đến web server là những gói tin
HTTP request và ngược lại web server sẽ hồi đáp bằng những gói
tin HTTP response. Các gói tin HTTP request và HTTP response
này sẽ chứa bên trong các thông điệp SOAP request và SOAP
response tương ứng. Các gói tin SOAP chính là trung tâm của kỹ
thuật web service, các thông điệp SOAP này sẽ chứa các lời gọi
hàm, tham số truyền đi, các tham số trả về… tạo thành mô hình
truy xuất hàm từ xa RPC (Remote Procedure Call).
• Khi web server nhận được yêu cầu xử lý từ điện thoại (thể hiện qua
các lời gọi hàm) sẽ truy xuất và giao tiếp với SQL Server qua các
store procedure để thực hiện các xử lý nghiệp vụ của chương trình.
Thông tin sau khi được sử lý sẽ được gửi trả cho client thông qua
các HTTP response.
• Các gói tin HTTP response này sẽ đến nhà cung cấp dịch vụ di

động, chuyển thành dạng tín hiệu GPRS và về đến client.
Trên đây là mô hình khái quát hoạt động của ứng dụng trong bối cảnh mạng
điện thoại di động. Yêu cầu duy nhất của thiết bị phần cứng là điện thoại phải hỗ trợ
GPRS và thư viện JSR 172. Thư viện JSR 172 có chức năng tạo các thông điệp
SOAP và phân tích nội dung các thông điệp này, nếu không có thư viện này chúng
ta không thể tạo các lời gọi hàm cũng như lấy các kết quả trả về từ hồi đáp của
server.

175

Java Mobile
9.2.2 Mô hình bảo mật (mã hoá password):
Sử dụng thuật toán DES, dùng khoá đối xứng để mã hoá password trong chương
trình.
Same Private Key
Encrypted
Session
Key
Same
Session
Key
Same
Session
Key
Encrypted Data

Hình 9.2 Mô hình mã hoá password

176


Java Mobile
9.3 Phân tích - thiết kế:
9.3.1 Mô hình use case:
9.3.1.1 Lược đồ chính:

Hình 9.3 Lược đồ use case
9.3.1.2 Danh sách các use case:
STT Use case Ý nghĩa
1 Dang nhap Đăng nhập hệ thống
2 Dang ky ly thuyet Đăng ký các học phần lý thuyết
177

Java Mobile
3 Dang ky thuc hanh Đăng ký các học phần thực hành
4 Xem phieu dang ky Xem phiếu đăng ký học phần
5 Xem ket qua hoc tap Xem kết quả học tập của sinh viên
6 Xem thoi khoa bieu Xem thời khoá biểu của lớp học
7 Xem thong bao Xem thông báo của giáo vụ khoa
Bảng 9.1 Danh sách các Use Case
9.3.2
Đặc tả một số use case chính:
9.3.2.1 Đăng nhập:
Mô tả: Hỗ trợ người dùng đăng nhập vào hệ thống.
Tác nhân kích hoạt: người dùng.
Luồng sự kiện chính:
o Chương trình client yêu cầu người dùng nhập account (MSSV),
password.
o Người dùng nhập thông tin theo yêu cầu.
o Client gửi yêu cầu đến server.
o Server phát sinh một số ngẫu nhiên (8 bytes), sau đó mã hoá bằng mật

mã (khoá đối xứng mà server và client đã chọn từ trước) bằng thuật
toán DES thành session key và gửi về cho client.
o Client dùng khoá bí mật giải mã session key này để tạo lại số ngẫu
nhiên tương ứng mà server đã tạo. Sau đó, client dùng số ngẫu nhiên
vừa tìm được để mã hoá password gửi kèm account đến server.
o Server nhận hai giá trị này từ client, truy cập cơ sở dữ liệu để lấy
password của account tương ứng. Sau đó, dùng session key mã hoá
password trong cơ sở dữ liệu và so sánh kết quả với password đã được
mã hoá nhận từ client. Nếu hợp lệ, trả về client giá trị “true”, nếu
không, trả về “false”.
o Client nhận kết quả từ server.
Điều kiện sau: tuỳ theo kết quả trả về từ server,
178

Java Mobile
o nếu là “false”, thông báo đăng nhập không hợp lệ, người dùng phải
đăng nhập lại để sử dụng chương trình.
o nếu là “true”, người dùng đăng nhập hợp lệ, hiển thị menu chức năng
chương trình cho người dùng sử dụng.

9.3.2.2 Đăng ký lý thuyết:
Mô tả: Cho phép người dùng đăng ký các học phần lý thuyết có mở trong
học kỳ này.
Tác nhân kích hoạt: ngừơi dùng
Luồng sự kiện chính:
o Người dùng chọn chức năng đăng ký lý thuyết.
o Client gửi yêu cầu đến cho server.
o Server lấy danh sách tất cả các học phần có mở trong học kỳ này, có
đánh dấu các học phần người dùng đã đăng ký trước đó, trả về cho
client.

o Client hiển thị danh sách lên cho người dùng, người dùng chọn các
môn muốn đăng ký hoặc hiệu chỉnh lại đăng ký cũ.
o Người dùng nhấn nút đăng ký, client lấy danh sách các môn mới được
đăng ký và các môn vừa được người dùng gỡ bỏ gửi cho server.
o Server truy cập cơ sở dữ liệu, xoá các đăng ký thực hành đã đăng ký
trong học kỳ này. Sau đó xoá các đăng ký lý thuyết cũ đã được gỡ bỏ
và ghi các đăng ký lý thuyết mới.
Luồng sự kiện phụ: Sau khi hết use case đăng ký lý thuyết, use case xem
phiếu đăng ký lý thuyết sẽ được gọi.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.

179

Java Mobile
9.3.2.3 Đăng ký thực hành:
Mô tả: Cho phép người dùng đăng ký các học phần thực hành trong học kỳ
này
Tác nhân kích hoạt: Người dùng.
Luồng sự kiện chính:
o Người dùng chọn chức năng đăng ký thực hành.
o Client gửi yêu cầu lên server.
o Server lấy từ cơ sở dữ liệu tất cả các học phần thực hành có mở tương
ứng với các học phần lý thuyết mà người dùng đã đăng ký. Các học
phần thực hành đã được người dùng đăng ký trước được đánh dấu
riêng
o Client nhận thông tin từ server, hiển thị danh sách các học phần thực
hành để người dùng đăng ký.
o Sau khi người dùng nhấn nút đăng ký, client sẽ lấy danh sách các lớp
người dùng mới đăng ký và danh sách các lớp người dùng bỏ đăng ký
gửi lên server.

o Server truy cập cơ sở dữ liệu, thực hiện đăng ký và huỷ đăng ký theo
yêu cầu của client.
Luồng sự kiện phụ: Sau khi hết use case đăng ký lý thuyết, use case xem
phiếu đăng ký lý thuyết sẽ được gọi.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.

9.3.2.4 Xem phiếu đăng ký:
Mô tả: Cho phép người dùng xem lại danh sách các học phần lý thuyết hay
thực hành mà người dùng đã đăng ký trong học kỳ này.
Tác nhân kích hoạt: người dùng, hệ thống.
Luồng sự kiện chính:
180

Java Mobile
o Người dùng chọn một trong hai chức năng xem phiếu đăng ký học
phần lý thuyết hay phiếu đăng ký học phần thực hành.
o Client gửi yêu cầu lên server.
o Server truy cập cơ sở dữ liệu, lấy danh sách các học phần lý thuyết
hay thực hành theo yêu cầu client mà người dùng đã đăng ký thành
công, trả về cho client.
o Client hiển thị kết quả cho người dùng.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.

9.3.2.5 Xem kết quả học tập:
Mô tả: Cho phép người dùng xem kết quả các học phần người dùng có học
và đã có điểm trong một học kỳ cụ thể.
Tác nhân kích hoạt: Người dùng.
Luồng sự kiện chính:
o Người dùng chọn chức năng xem kết quả học tập.
o Client yêu cầu người dùng chọn học kỳ, năm học muốn xem điểm thi.

o Người dùng nhập thông tin yêu cầu, nhấn nút xem điểm. Client gửi
yêu cầu đến server.
o Server truy cập cơ sở dữ liệu, lấy danh sách điểm thi các môn học
thoả yêu cầu (các học phần trong học kỳ yêu cầu và đã có điểm thi)
gửi cho client.
o Client hiển thị kết quả cho người dùng.
Điều kiện trước: Người dùng phải đăng nhập thành công vào hệ thống.

9.3.2.6 Xem thời khoá biểu:
Mô tả: Cho phép người dùng xem thời khoá biểu các học phần của lớp trong
học kỳ hiện tại.
Tác nhân kích hoạt: Người dùng.
181

Java Mobile
Luồng sự kiện chính:
o Người dùng chọn chức năng xem thời khoá biểu.
o Client yêu cầu người dùng nhập thông tin lớp học muốn xem thời
khoá biểu (tên lớp, số thứ tự lớp).
o Người dùng nhập thông tin theo yêu cầu và nhấn nút xem thời khoá
biểu lý thuyết hoặc thời khoá biểu thực hành.
o Client gửi yêu cầu lên server.
o Server truy cập cơ sở dữ liệu, lấy danh sách thông tin các học phần lý
thuyết hoặc học phần thực hành có mở trong học kỳ này theo yêu cầu,
gửi trả về cho client.
o Client hiển thị kết quả trả về cho người dùng.

9.3.2.7 Xem thông báo:
Mô tả: Hỗ trợ người dùng xem các thông báo của giáo vụ khoa.
Tác nhân kích hoạt: Người dùng.

Luồng sự kiện chính:
o Người dùng chọn chức năng xem thông báo.
o Client gửi yêu cầu lên server.
o Server truy cập cơ sở dữ liệu, lấy tiêu đề của 10 thông báo gần đây
nhất, sắp xếp theo thời gian giảm dần, gửi về cho client.
o Client hiển thị các tiêu đề thông báo này cho người dùng.
Luồng sự kiện phụ:
o Nếu người dùng chọn một trong các tiêu đề và nhấn nút xem thông
báo. Client sẽ gửi yêu cầu đến server.
o Server truy cập cơ sở dữ liệu để lấy nội dung thông báo, trả về cho
client. Client hiển thị nội dung này lên màn hình cho người dùng.

182

Java Mobile
9.4 Thiết kế mô hình dữ liệu:
9.4.1 Mô hình thực thể kết hợp:


Hình 9.4 Mô hình thực thể kết hợp ER
9.4.2 Các bảng dữ liệu:
ChuyenNganh:
MaChuyenNganh, TenChuyenNganh
SV:
MaSV, TenSV, NgaySinh, DiaChi, ChuyenNganh, password
MonHoc:
MaMH, TenMonHoc, SoTCLT, SoTCTH
183

Java Mobile

GV: MaGV, TenGV, DiaChi
Lop:
MaLop, TenLop, STT
Lop_MonLT: MaLopLT, MaLop, STT, MaMH, HK, NamHoc, SiSo, SiSoMax,
MaGV, Phong, Thu, Tiet
Lop_MonTH: MaLopTH, MaLopLT, STT, SiSo, SiSoMax, Phong, Thu, Tiet
PhanCongTH: MaGV, MaLopTH
DangKyLT: MaSV, MaLopLT, DiemLT, DiemTH, DiemTC
DangKyTH: MaSV, MaLopTH
ThongBao:
MaThongBao, NgayTB, TieuDe, NoiDung

9.4.3 Chi tiết các bảng dữ liệu:
9.4.3.1 ChuyenNganh:
Các chuyên ngành của khoa
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaChuyenNganh nvarchar(4) Mã chuyên ngành Khóa chính
TenChuyenNganh nvarchar(100) Tên chuyên ngành
Bảng 9.2 Table ChuyenNganh
9.4.3.2 SV:
Lưu trữ thông tin của sinh viên
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaSV nvarchar(10) Mã số sinh viên Khóa chính
TenSV nvarchar(60) Tên sinh viên
NgaySinh datetime Ngày sinh của sinh viên
DiaChi nvarchar(100) Địa chỉ của sinh viên
ChuyenNganh nvarchar(4) Mã chuyên ngành Khoá ngoại
password nvarchar(25) Mật mã account của sinh viên
Bảng 9.3 Table SV
184


Java Mobile
9.4.3.3 MonHoc:
Lưu trữ thông tin môn học
Tên field Kiểu dữ liệu Ý nghĩa
Ghi chú
MaMH nvarchar(5) Mã môn học Khoá chính
TenMH nvarchar(30) Tên môn học
SoTCLT int Số tín chỉ lý thuyết
SoTCTH int Số tín chỉ thực hành
Bảng 9.4 Table MonHoc
9.4.3.4 GV:
Lưu trữ thông tin giáo viên
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaGV int Mã giáo viên Khoá chính
TenGV nvarchar(60) Tên giáo viên
DiaChi nvarchar(100) Địa chỉ liên lạc của giáo viên
Bảng 9.5 Table GV
9.4.3.5 Lop:
Lưu thông tin lớp
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaLop nvarchar(12) Mã lớp Khoá chính
TenLop nvarchar(10) Tên lớp (niên khoá tương ứng)
STT int Số thứ tự lớp (cùng niên khoá)
Bảng 9.6 Table Lop
9.4.3.6 Lop_MonLT:
Lưu thông tin các học phần lý thuyết được mở trong mỗi học kỳ
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaLopLT int Mã học phần Khoá chính
185


Java Mobile
MaLop nvarchar(12) Mã lớp tương ứng Khoá ngoại
STT int STT lớp (nếu mở nhiều lớp nhỏ
như các lớp Anh văn)

MaMH nvarchar(5) Mã môn học Khoá ngoại
HK int Học kỳ (1 hay 2)
NamHoc nvarchar(9) Năm học (vd: 2004-2005)
SiSo int Sĩ số đăng ký hiện tại
SiSoMax int Sĩ số dự kiến
MaGV int Mã giáo viên phụ trách Khoá ngoại
Phong nvarchar(10) Phòng học
Thu nvarchar(5) Lịch học vào các ngày trong
tuần

Tiết nvarchar(5) Tiết học trong ngày
Bảng 9.7 Table Lop_MonLT
9.4.3.7 Lop_MonTH:
Lưu thông tin các lớp thực hành tương ứng của các lớp lý thuyết
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaLopTH int Mã lớp thực hành Khoá chính
MaLopLT int Mã lớp lý thuyết tương ứng Khoá ngoại
STT int Số thứ tự lớp thực hành(một lớp
lý thuyết có thể có nhiều lớp
thực hành)

SiSo int Sĩ số đăng ký hiện tại
SiSoMax int Sĩ số dự kiến
MaGV int Mã giáo viên hướng dẫn thực

hành
Khoá ngoại
Phong nvarchar(10) Phòng học
Thu nvarchar(5) Lịch học vào các ngày trong
186

Java Mobile
tuần
Tiết nvarchar(5) Tiết học trong ngày
Bảng 9.8 Table Lop_MonTH
9.4.3.8 PhanCongTH:
Phân công giáo viên hướng dẫn thực hành cho từng lớp
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaGV int Mã giáo viên hướng dẫn
MaLopTH int Mã lớp thực hành
Khoá chính
Bảng 9.9 Table PhanCongTH
9.4.3.9 DangKyLT:
Thông tin đăng ký học phần lý thuyết
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaSV nvarchar(10) Mã số sinh viên
Khoá chính
MaLopLT int Mã lớp lý thuyết đăng ký
DiemLT float Điểm thi lý thuyết
DiemTH float Điểm thi thực hành
DiemTC float Điểm tổng cộng
Bảng 9.10 Table DangKyLT
9.4.3.10 DangKyTH:
Thông tin đăng ký học phần thực hành
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú

MaSV nvarchar(10) Mã số sinh viên
Khoá chính
MaLopTH int Mã lớp thực hành đăng ký
Bảng 9.11 Table DangKyTH
9.4.3.11 ThongBao:
Các thông báo của văn phòng khoa
187

Java Mobile
Tên field Kiểu dữ liệu Ý nghĩa Ghi chú
MaThongBao int Mã thông báo (tự động) Khoá chính
NgayTB datetime Ngày ra thông báo
TieuDe nvarchar(100) Tiêu đề của thông báo
NoiDung nvarchar(2000) Nội dung thông báo
Bảng 9.12 Table ThongBao
9.4.4
Ràng buộc dữ liệu:
9.4.4.1 Ràng buộc miền giá trị:
Điểm lý thuyết, điểm thực hành, điểm tổng cộng trong khoảng 0 đến 10.
Ngày sinh của sinh viên phải nhỏ hơn ngày hiện tại.
Năm học có dạng xxxx-yyyy với yyyy=xxxx+1 . Vd: 2004-2005.
Mã môn học có dạng xxyyy với xx là dạng ký tự, yyy là các ký số.
Học kỳ có giá trị 1 hoặc 2.
Sĩ số các lớp lý thuyết, thực hành là số không âm.
Sĩ số tối đa các lớp lý thuyết, thực hành là số dương.

9.4.4.2 Ràng buộc liên thuộc tính:
Điểm thực hành không lớn hơn điểm tổng cộng.
Điểm lý thuyết không lớn hơn điểm tổng cộng.
Các lớp lý thuyết, lớp thực hành có sĩ số không lớn hơn sĩ số max.

Trong cùng một học kỳ, một năm học, các học phần lý thuyết của cùng một môn
học phải có số thứ tự liên tục từ 1.
Trong cùng một lớp lý thuyết, các lớp thực hành phải có số thứ tự liên tục từ 1.

9.4.4.3 Ràng buộc liên quan hệ, liên bộ:
Sĩ số hiện tại của các lớp lý thuyết, lớp thực hành bằng tổng số sinh viên đã đăng ký
học lớp đó.
188

Java Mobile

9.4.4.4 Ràng buộc chu trình:
Sinh viên chỉ được phép đăng ký các học phần thực hành của các học phần lý thuyết
đã đăng ký.

Lop_MonLT
DangKyLT
DangKyTH
MaSV
MaLopLT
MaLopTH
: Các học phần thực hành có mở ứng với các học phần lý
thuyết SV đã đăng ký
: Các học phần thực hành SV đã đăng ký

Hình 9.5 Ràng buộc chu trình
189

Java Mobile
9.4.5 Mô hình dữ liệu:


Hình 9.6 Mô hình cơ sở dữ liệu
9.4.6
Các chức năng store procedures:
• sp_XEM_DIEM: Lấy điểm thi của sinh viên trong một học kỳ cho
trước hay tất cả các học kỳ.
• sp_XEM_TKB_LT: Lấy thông tin thời khoá biểu lý thuyết của một
lớp khi biết tên lớp và số thứ tự lớp.
• sp_XEM_TKB_TH: Lấy thông tin thời khoá biểu thực hành của một
lớp khi biết tên lớp và số thứ tự lớp.
190

×