Trong thời đại ngày nay, thời đại mà ngôn ngữ java là ngôn ngữ lập trình mạnh và được sử dụng đông đảo trong phát triển phần mềm, các trang web, game hay ứng dụng trên các thiết bị di độ
Trang 1Đồng thời em xin chân thành cảm ơn bạn bè đã động viên khích lệ em rất nhiều trong quá trình em làm đồ án tốt nghiệp này
Mặc dù đã cố gắng hết sức, nhưng do chưa có kinh nghiệm nên đồ án của em không thể tránh khỏi những thiếu sót nhất định Em rất mong nhận được những ý kiến đóng góp quý báu của các thầy cô giáo và bạn bè để em có thể hoàn thiện đề tài này
Em xin chân thành cảm ơn!
Thái Nguyên, tháng 06 năm 2016
Sinh viên
Nguyễn Thị Thảo
Trang 2LỜI CAM ĐOAN
Để hoàn thành đồ án tốt nghiệp đúng thời gian quy định và đáp ứng được yêu cầu đề ra, em đã cố gắng tìm hiểu, học hỏi, tích lũy kiến thức từ trường học cũng như từ quá trình tìm đọc tài liệu khi làm đồ án tốt nghiệp Em có tham khảo một số
tài liệu đã nêu trong phần “Tài liệu tham khảo” không sao chép nội dung từ bất kỳ
đồ án nào khác Toàn bộ đồ án do bản thân nghiên cứu, xây dựng dưới sự hướng
dẫn của cô Ths Ngô Thị Vinh
Em xin cam đoan những lời khai trên là đúng, mọi thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước Hội đồng
Sinh viên
Nguyễn Thị Thảo
Trang 3MỤC LỤC
LỜI CẢM ƠN i
LỜI CAM ĐOAN ii
MỤC LỤC iii
DANH MỤC HÌNH ẢNH iv
LỜI NÓI ĐẦU 1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 2
1.1 Cơ sở dữ liệu MySQL 2
1.1.1 Giới thiệu cơ sở dữ liệu MySQL 2
1.1.2 Mục đích sử dụng cơ sở dữ liệu 3
1.1.3 Các kiểu dữ liệu trong cơ sở dữ liệu MySQL 4
1.1.4 Các thao tác cập nhật dữ liệu 7
1.1.5 Các hàm thông dụng trong MySQL 7
1.2 Tổng quan công nghệ Hibernate framework 8
1.2.1 Giới thiệu về Hibernate framework 8
1.2.2 Kiến trúc Hibernate 10
1.3 Tổng quan về ngôn ngữ lập trình Java 12
1.3.1 Lịch sử phát triển của ngôn ngữ lập trình Java 12
1.3.2 Một số đặc điểm nổi bật của ngôn ngữ lập trình Java 12
1.3.3 Hướng đối tượng trong Java 14
CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ BÀI TOÁN 20
2.1 Bài toán quản lý lịch của giảng viên 20
2.2 Phân tích bài toán 20
2.2.1 Biểu đồ dữ liệu mức khung cảnh 20
2.2.2 Biểu đồ dữ liệu mức đỉnh 21
2.2.3 Thiết kế cơ sở dữ liệu 22
2.3 Thiết kế module chương trình 23
CHƯƠNG 3: KẾT QUẢ THỰC NGHIỆM 40
KẾT LUẬN 54
TÀI LIỆU THAM KHẢO 55
Trang 4DANH MỤC HÌNH ẢNH
Hình 1.1: Mô hình ORM/Hibernate 9
Hình 1.2: Kiến trúc tổng quát của Hibernate 10
Hình 1.3: Kiến trúc của Hibernate 11
Hình 2.1: Biểu đồ dữ liệu mức khung cảnh 20
Hình 2.2: Biểu đồ dữ liệu mức đỉnh 21
Hình 2.3: Sơ đồ lớp dữ liệu 22
Hình 2.4: Default package 23
Hình 2.5: Module data 23
Hình 2.6: Module db 28
Hình 2.7: Module main 31
Hình 2.8: Module model 35
Hình 3.1 Bảng kết quả 1 40
Bảng 3.2: Bảng kết quả 2 40
Bảng 3.3: Bảng kết quả 3 41
Bảng 3.4: Bảng kết quả 4 41
Bảng 3.5: Bảng kết quả 5 42
Bảng 3.6: Bảng kết quả 6 42
Bảng 3.7: Bảng kết quả 7 43
Bảng 3.8: Bảng kết quả 8 43
Bảng 3.9: Bảng kết quả 9 44
Bảng 3.10: Bảng kết quả 10 44
Bảng 3.11: Bảng kết quả 11 45
Bảng 3.12: Bảng kết quả 12 45
Bảng 3.13: Bảng kết quả 13 46
Bảng 3.14: Bảng kết quả 14 46
Bảng 3.15: Bảng kết quả 15 47
Bảng 3.16: Bảng kết quả 16 47
Bảng 3.17: Bảng kết quả 17 48
Bảng 3.18: Bảng kết quả 18 48
Bảng 3.19: Bảng kết quả 19 49
Trang 5Bảng 3.20: Bảng kết quả 20 49
Bảng 3.21: Bảng kết quả 21 50
Bảng 3.22: Bảng kết quả 22 50
Bảng 3.23: Bảng kết quả 23 51
Bảng 3.24: Bảng kết quả 24 51
Bảng 3.25: Bảng kết quả 25 52
Bảng 3.26: Bảng kết quả 26 52
Bảng 3.27: Bảng kết quả 27 53
Bảng 3.28: Bảng kết quả 28 53
Trang 6LỜI NÓI ĐẦU
Với sự phát triển nhảy vọt của công nghệ thông tin hiện nay, Internet ngày càng giữ vai trò quan trọng trong các lĩnh vực khoa học kĩ thuật và đời sống Internet, nói một cách đơn giản, Internet là một tập hợp máy tính nối kết với nhau,
là một mạng máy tính toàn cầu mà bất kì ai cũng có thể kết nối bằng máy PC của
họ Với mạng Internet, tin học thật sự tạo nên một cuộc cách mạng trao đổi thông tin trong mọi lĩnh vực văn hóa, xã hội, chính trị, kinh tế
Trong thời đại ngày nay, thời đại mà ngôn ngữ java là ngôn ngữ lập trình mạnh và được sử dụng đông đảo trong phát triển phần mềm, các trang web, game hay ứng dụng trên các thiết bị di động thì việc có một chương trình để quản lý lịch của giảng viên sử dụng ngôn ngữ lập trình java không còn khó khăn nữa Thông qua chương trình có thể dễ dàng quản lý lịch của giảng viên một cách nhanh chóng và hiệu quả
Với công nghệ Mysql để lưu cơ sở dữ liệu, công nghệ Hibernate framework giúp cho java kết nối với Mysql, sẽ giúp xem lịch của giảng viên một cách dễ dàng nhờ các công cụ hỗ trợ và ngôn ngữ lập trình java Sự ra đời của các ngôn ngữ lập trình cho phép xây dựng được chương trình đáp ứng được các yêu cầu của người sử dụng
Với lí do đó, được sự hướng dẫn và giúp đỡ của cô Th.S Ngô Thị Vinh, em
đã chọn đề tài “Xây dựng ứng dụng hỗ trợ quản lý lịch của giảng viên cho cán
bộ phụ trách bộ môn Khoa CN ĐT&TT” làm đề tài cho đồ án tốt nghiệp của
mình
Trong quá trình thực hiện đồ án này em đã nhận được sự giúp đỡ chỉ bảo tận
tình của các thầy, cô giáo, Em xin chân thành cảm ơn cô Th.S Ngô Thị Vinh đã
hướng dẫn trong quá trình làm đồ án
Trang 7CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Cơ sở dữ liệu MySQL
1.1.1 Giới thiệu cơ sở dữ liệu MySQL
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng
MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet
MySQL miễn phí hoàn toàn cho nên có thể tải về MySQL từ trang chủ Nó
có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, SGI Irix, Novell NetWare, Solaris, SunOS,
MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ liệu quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL)
MySQL được sử dụng cho việc bổ trợ PHP, Perl, và nhiều ngôn ngữ khác, nó làm nơi lưu trữ những thông tin trên các trang web viết bằng PHP hay Perl,
Đặc điểm của MySQL:
MySQL là một phần mềm quản trị CSDL dạng server-based
MySQL quản lý dữ liệu thông qua các CSDL, mỗi CSDL có thể có nhiều bảng quan hệ chứa dữ liệu
MySQL có cơ chế phân quyền người sử dụng riêng, mỗi người dùng có thể được quản lý một hoặc nhiều CSDL khác nhau, mỗi người dùng có một tên truy cập (user name) và mật khẩu tương ứng để truy xuất đến CSDL
MySQL được sử dụng cho các ứng dụng web
Người dùng có thể sử dụng giao diện đồ họa hay dùng dòng lệnh để thực hiện các thao tác trên CSDL
Khi truy vấn tới CSDL MySQL phỉ cung cấp tên truy cập và mật khẩu của tài khoản có quyền sử dụng CSDL đó Nếu không sẽ không làm gì được cả giống như quyền chứng thực người dùng trong SQL Server vậy
Trang 8Lưu trữ trên đĩa và có thể chuyển đổi dữ liệu từ cơ sở dữ liệu này sang cơ sở
dữ liệu khác, nếu bạn sử dụng cho quy mô nhỏ, bạn có thể chọn cơ sở dữ liệu nhỏ như: Microsoft Exel, Microsoft Access, MySQL, Microsoft Visual FoxPro… Nếu ứng dụng có quy mô lớn, bạn có thể chọn cơ sở dữ liệu có quy mô lớn như: Oracle, SQL Server…
Chức năng truy cập:
Truy cập dữ liệu phụ thuộc vào mục đích và yêu cầu của người sử dụng, ở mức độ mang tính cục bộ, truy cập cơ sở dữ liệu ngay trong cơ sở dữ liệu với nhau, nhằm trao đổi hay xử lí dữ liệu ngay bên trong chính nó, nhưng do mục đích và yêu cầu người dùng vượt ra ngoài cơ sở dữ liệu, nên cần có các phương thức truy cập dữ liệu giữa các cơ sở dữ liệu với nhau như: Microsoft Access với SQL Server, hay SQL Server và cơ sở dữ liệu Oracle
Chức năng tổ chức:
Tổ chức cơ sở dữ liệu phụ thuộc vào mô hình cơ sở dữ liệu, phân tích và thiết kế cơ sở dữ liệu tức là tổ chức cơ sở dữ liệu phụ thuộc vào đặc điểm riêng của từng ứng dụng Tuy nhiên khi tổ chức cơ sở dữ liệu cần phải tuân theo một số tiêu chuẩn của hệ thống cơ sở dữ liệu nhằm tăng tính tối ưu khi truy cập và xử lí
Trang 91.1.3 Các kiểu dữ liệu trong cơ sở dữ liệu MySQL
1.1.3.1 Loại dữ liệu numeric
Kiểu dữ liệu số nguyên
Float phụ thuộc số thập phân 4 Số thập phân dạng
Single hay Double Float(M, D)
Trang 101.1.3.2 Loại dữ liệu kiểu Date and Time
Kiểu dữ liệu Date and Time cho phép bạn nhập dữ liệu dưới dạng chuỗi ngày tháng hay dạng số
Dữ liệu kiểu số nguyên
Kiểu dữ liệu Miền giá trị Mô tả
Date và Time trình bày dưới dạng yyyy-mm-dd hh:mm:ss
Trang 111.1.3.3 Loại dữ liệu String
Kiểu dữ liệu String chia làm 3 loại: loại thứ nhất như char (chiều dài cố định)
và varchar (chiều dài biến thiên); loại thứ hai là Text hay Blob, Text cho phép lưu
chuỗi rất lớn, Blob cho phép lưu đối tượng nhị phân; loại thứ ba là Enum và Set
Kiểu dữ liệu String
Chiều dài của chuỗi lớn nhất 255 ký tự
Tinyblob 28-1 Khai báo cho Field chứa kiểu đối tượng nhị phân cỡ
255 characters Tinytext 28-1 Khai báo cho Field chứa kiểu chuỗi cỡ 255 characters
Blob 216-1 Khai báo cho Field chứa kiểu blob cỡ 65, 535
khoảng 16, 777, 215 characters
Longblob 232-1 Khai báo cho Field chứa kiểu blob lớn khoảng 4, 294,
967, 295 characters
Longtext 232-1 Khai báo cho Field chứa kiểu chuỗi dạng văn bản lớn
khoảng 4, 294, 967, 295 characters
Trang 12[WHERE<các điều kiện ràng buộc>]
[GROUP BY<tên cột/biểu thức trong SELECT>]
[HAVING<điều kiện bắt buộc của GROUP BY>]
[ORDER BY<danh sách các cột>]
[LIMIT FromNumber |ToNumber]
INSERT(Thêm mẫu tin):
Cú pháp: INSERT INTO Tên_bảng VALUES(Bộ_giá_trị)
UPDATE(Cập nhật dữ liệu):
Cú pháp: UPDATE TABLE Tên_bảng
SET Tên_cột=Biểu_thức,
[WHERE Điều_kiện]
DELETE(Xóa mẫu tin):
Cú pháp: DELETE FROM Tên_bảng
[WHERE Điều_kiện]
1.1.5 Các hàm thông dụng trong MySQL
1.1.5.1 Các hàm trong phát biểu GROUP BY
Hàm AVG: Hàm trả về giá trị bình quân của cột hay trường trong câu truy
vấn
Hàm MIN: Hàm trả về giá trị nhỏ nhất của cột hay trường trong câu truy vấn Hàm MAX: Hàm trả về giá trị lớn nhất của cột hay trường trong câu truy vấn
Hàm Count: Hàm trả về số lượng mẩu tin trong câu truy vấn
Hàm Sum: Hàm trả về tổng các giá trị của trường, cột trong câu truy vấn 1.1.5.2 Các hàm xử lí chuỗi:
Hàm ASCII: Hàm trả về giá trị mã ASCII của kí tự bên trái của chuỗi
Trang 13Hàm Char: Hàm này chuyển đổi kkiểu mã ASCII từ số nguyên sang dạng chuỗi
Hàm UPPER: Hàm này chuyển đổi chuỗi sang kiểu chữ hoa
Hàm LOWER: Hàm này chuyển đổi chuỗi sang kiểu chữ thường
Hàm Len: Hàm này trả về chiều dài của chuỗi
Thủ tục LTRIM: Thủ tục loại bỏ khoảng trắng bên trái của chuỗi
Thủ tục RTRIM: Thủ tục loại bỏ khỏang trắng bên phải của chuỗi
Hàm Left(str, n): Hàm trả về chuỗi bên trái tính từ đầu cho đến vị trí n
Hàm Right(str, n): Hàm trả về chuỗi bên phải tính từ đầu cho đến vị trí n Hàm Instrt: Hàm trả về chuỗi vị trí bắt đầu của chuỗi con trong chuỗi xét
1.1.5.3 Các hàm xử lí về thời gian
Hàm CurDate(): Hàm trả về ngày, tháng và năm hiện hành của hệ thống Hàm CurTime(): Hàm trả về giờ, phút và giây hiện hành của hệ thống Hàm Period_Diff: Hàm trả về số ngày trong khoảng thời gian giữa 2 ngày Hàm dayofmonth: Hàm trả về ngày thứ mấy trong tháng
1.1.5.4 Các hàm về toán học
Hàm sqrt: Hàm trả về là căn bậc hai của một biểu thức
Hàm CurDate(): Hàm trả về ngày, tháng và năm hiện hành của hệ thống
1.2 Tổng quan công nghệ Hibernate framework
1.2.1 Giới thiệu về Hibernate framework
Framework trong phát triển phần mềm là một khái niệm dùng để chỉ những
"cấu trúc hỗ trợ được định nghĩa" mà trong đó những dự án phần mềm khác có thể được sắp xếp vào đó và phát triển Thông thường, một framework bao gồm những program hỗ trợ, code libs và một ngôn ngữ scripting nằm giữa các chương trình phần mềm khác để giúp phát triển và gắn những thành phần khác nhau trong dự án phần mềm lại với nhau
ORM (Object Relational Mapping) framework là một cơ chế cho phép người lập trình thao tác với database một cách hoàn toàn tự nhiên thông qua các đối tượng Lập trình viên hoàn toàn không quan tâm đến loại database sử dụng, SQL…
Peristence layer: Một ứng dụng có thể chia làm 3 phần như sau: phần giao diện người dùng (UI layer), phần xử lý nghiệp vụ (business layer) và phần chứa dữ
Trang 14liệu (data layer) Cụ thể ra, business layer sẽ có thể chia nhỏ thành 2 layer con là business logic layer (chỉ quan tâm đến ý nghĩa của các nghiệp vụ, các tính toán mang nhằm thoả mãn yêu cầu của người dùng) và persitence layer Persistence layer chịu trách nhiệm giao tiếp với data layer (thường là một hệ quản trị cơ sở dữ liệu quan hệ – Relational DBMS) Persistence layer sẽ đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu trữ dữ liệu vào các Relational DBMS
Hibernate là một giải pháp ORM cho Java , một dự án open source chuyên nghiệp, một framework cho pesistence layer, và là một thành phần cốt tuỷ của bộ sản phẩm JBoss Enterprise Middleware System (JEMS) JBoss, như chúng ta đã biết là một đơn vị của Red Hat, chuyên cung cấp các dịch vụ 24/7 về hỗ trợ chuyên nghiệp, tư vấn và huấn luyện sẵn sàng hỗ trợ bạn trong việc dùng Hibernate…
Hibernate ánh xạ các lớp Java với các bảng trong cơ sở dữ liệu và ánh xạ giữa các kiểu dữ liệu trong Java với các kiểu dữ liệu SQL Hibernate giúp giảm thiểu các công việc liên quan đến nhiệm vụ xử lý dữ liệu thông thường trong phát triển ứng dụng
Hibernate nằm giữa các đối tượng Java truyền thống và cơ sở dữ liệu để giải quyết tất cả các công việc trong lớp persistence dựa trên mô hình kỹ thuật ORM
Hình 1.1: Mô hình ORM/Hibernate
Ưu điểm của Hibernate:
Hibernate chịu trách nhiệm ánh xạ giữa các lớp Java đến các bảng trong CSDL dùng các file XML mà không cần phải viết bất kỳ dòng mã lệnh nào
Trang 15Hibernate cung cấp các API đơn giản để lưu trữ, truy xuất trực tiếp các đối tượng Java và CSDL Nếu có bất kỳ thay đổi nào trong CSDL thì chỉ cần thay đổi file XML Ngoài ra, công nghệ này còn cung cấp đầy đủ các tiện ích, tính năng truy vấn dữ liệu đơn giản, hiệu quả Thao tác, xử lý được các quan hệ phức tạp của các đối tượng trong CSDL Hibernate giảm thiểu sự truy cập đến CSDL đến mức thấp nhất nhờ có chiến lược tìm, nạp thông minh
Hibernate hỗ trợ hầu hết các RDBMS quan trọng như: HSQL Database Engine, DB2/NT, MySQL, PostgreSQL, Oracle, Microsoft SQL Server Database,…
Hibernate hỗ trợ một số công nghệ sau: XDoclet Spring, J2EE, Eclipse ins, Maven
Trang 16Hình dưới cho thấy chi tiết hơn kiến trúc của hibernate
Hình 1.3: Kiến trúc của Hibernate
Hibernate dùng rất nhiều loại Java API có sẵn như JDBC, Java Transaction API (JTA) và Java Naming and Directory Interface (JNDI) JDBC cung cấp các chức năng làm việc với CSDL quan hệ ở mức thô sơ, trừu tượng, cho phép bất kỳ một CSDL nào dùng JDBC driver đều được hỗ trợ bởi Hibernate JNDI và JTA cho phép hibernate được tích hợp với các server ứng dụng J2EE
Các thành phần của Hibernate project (các thành phần thư viện Hibernate)
Hibernate Core: Cung cấp các chức năng cơ bản của persistent layer cho các ứng dụng java với các APIs và hỗ trợ XML Mapping metadata
Hibernate Annotations: các map class với JDK 5.0 Anootations, bao gồm Hibernate Validator
Hibernate EntityManager : sử dụng EJB 3.0 API trong JSE hoặc với bất kỳ JEE nào
Hibernate Tools: các tool tích hợp với Eclipse và Ant giúp tạo ra các persistent object từ 1 schema có sẵn trong database (reverse-engineering) và từ các file hbm sinh ra các class java thực hiện các persistent object rồi Hibernate tự tạo tác object trong database (forward-engineering)
Trang 17 NHibernate: Hibernate cho NET Framework
Jboss Seam: Một Java EE 5.0 framework cho phát triển các ứng dụng JSF, Ajax và EJB 3.0 với sự hỗ trợ của Hibernate Seam hiện rất mới và tỏ ra rất mạnh
để phát triển các ứng dụng Web 2.0 Nó tích hợp đầy đủ tất cả các công nghệ "hot" nhất hiện nay
1.3 Tổng quan về ngôn ngữ lập trình Java
1.3.1 Lịch sử phát triển của ngôn ngữ lập trình Java
Java là ngôn ngữ lập trình hướng đối tượng (tựa C++) do Sun Microsystem đưa ra vào giữa thập niên 90
Chương trình viết bằng ngôn ngữ lập trình java có thể chạy trên bất kỳ hệ thống nào có cài máy ảo java (Java Virtual Machine)
Ngôn ngữ lập trình Java do James Gosling và các công sự của Công ty Sun Microsystem phát triển
Đầu thập niên 90, Sun Microsystem tập hợp các nhà nghiên cứu thành lập nên nhóm đặt tên là Green Team Nhóm Green Team có trách nhiệm xây dựng công nghệ mới cho ngành điện tử tiêu dùng Để giải quyết vấn đề này nhóm nghiên cứu phát triển đã xây dựng một ngôn ngữ lập trình mới đặt tên là Oak tương tự như C++ nhưng loại bỏ một số tính năng nguy hiểm của C++ và có khả năng chạy trên nhiều nền phần cứng khác nhau Cùng lúc đó world wide web bắt đầu phát triển và Sun đã thấy được tiềm năng của ngôn ngữ Oak nên đã đầu tư cải tiến và phát triển Sau
đó không lâu ngôn ngữ mới với tên gọi là Java ra đời và được giới thiệu năm 1995
Java là tên gọi của một hòn đảo ở Indonexia, Đây là nơi nhóm nghiên cứu phát triển đã chọn để đặt tên cho ngôn ngữ lập trình Java trong một chuyến đi tham quan và làm việc trên hòn đảo này Hòn đảo Java này là nơi rất nổi tiếng với nhiều khu vườn trồng cafe, đó chính là lý do thường thấy biểu tượng ly cafe trong nhiều sản phẩm phần mềm, công cụ lập trình Java của Sun cũng như một số hãng phần mềm khác đưa ra
1.3.2 Một số đặc điểm nổi bật của ngôn ngữ lập trình Java
1.3.2.1 Máy ảo Java (JVM - Java Virtual Machine)
Tất cả các chương trình muốn thực thi được thì phải được biên dịch ra mã máy Mã máy của từng kiến trúc CPU của mỗi máy tính là khác nhau (tập lệnh mã
Trang 18máy của CPU Intel, CPU Solarix, CPU Macintosh … là khác nhau), vì vậy trước đây một chương trình sau khi được biên dịch xong chỉ có thể chạy được trên một kiến trúc CPU cụ thể nào đó Đối với CPU Intel chúng ta có thể chạy các hệ điều hành như Microsoft Windows, Unix, Linux, OS/2, … Chương trình thực thi được trên Windows được biên dịch dưới dạng file có đuôi EXE còn trên Linux thì được biên dịch dưới dạng file có đuôi ELF, vì vậy trước đây một chương trình chạy được trên Windows muốn chạy được trên hệ điều hành khác như Linux chẳng hạn thì phải chỉnh sửa và biên dịch lại Ngôn ngữ lập trình Java ra đời, nhờ vào máy ảo Java mà khó khăn nêu trên đã được khắc phục Một chương trình viết bằng ngôn ngữ lập trình Java sẽ được biên dịch ra mã của máy ảo java (mã java bytecode) Sau đó máy
ảo Java chịu trách nhiệm chuyển mã java bytecode thành mã máy tương ứng Sun Microsystem chịu trách nhiệm phát triển các máy ảo Java chạy trên các hệ điều hành trên các kiến trúc CPU khác nhau
1.3.2.2 Thông dịch
Java là một ngôn ngữ lập trình vừa biên dịch vừa thông dịch Chương trình nguồn viết bằng ngôn ngữ lập trình Java có đuôi *.java đầu tiên được biên dịch thành tập tin có đuôi *.class và sau đó sẽ được trình thông dịch thông dịch thành mã máy
1.3.2.3 Độc lập nền
Một chương trình viết bằng ngôn ngữ Java có thể chạy trên nhiều máy tính có
hệ điều hành khác nhau (Windows, Unix, Linux, …) miễn sao ở đó có cài đặt máy ảo java (Java Virtual Machine) Viết một lần chạy mọi nơi (write once run anywhere)
1.3.2.4 Hướng đối tượng
Hướng đối tượng trong Java tương tự như C++ nhưng Java là một ngôn ngữ lập trình hướng đối tượng hoàn toàn Tất cả mọi thứ đề cập đến trong Java đều liên quan đến các đối tượng được định nghĩa trước, thậm chí hàm chính của một chương trình viết bằng Java (đó là hàm main) cũng phải đặt bên trong một lớp Hướng đối tượng trong Java không có tính đa kế thừa (multi inheritance) như trong C++ mà thay vào đó Java đưa ra khái niệm interface để hỗ trợ tính đa kế thừa Vấn đề này sẽ được bàn chi tiết trong chương 3
Trang 191.3.2.5 Đa nhiệm - đa luồng (MultiTasking - Multithreading)
Java hỗ trợ lập trình đa nhiệm, đa luồng cho phép nhiều tiến trình, tiểu trình
có thể chạy song song cùng một thời điểm và tương tác với nhau
1.3.2.6 Khả chuyển (portable)
Chương trình ứng dụng viết bằng ngôn ngữ Java chỉ cần chạy được trên máy
ảo Java là có thể chạy được trên bất kỳ máy tính, hệ điều hành nào có máy ảo Java
“Viết một lần, chạy mọi nơi” (Write Once, Run Anywhere)
1.3.2.7 Hỗ trợ mạnh cho việc phát triển ứng dụng
Công nghệ Java phát triển mạnh mẽ nhờ vào “đại gia Sun Microsystem” cung cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại hình ứng dụng khác nhau cụ thể như: J2SE (Java 2 Standard Edition) hỗ trợ phát triển những ứng dụng đơn, ứng dụng client-server; J2EE (Java 2 Enterprise Edition)
hỗ trợ phát triển các ứng dụng thương mại, J2ME (Java 2 Micro Edition) hỗ trợ phát triển các ứng dụng trên các thiết bị di động, không dây, …
1.3.3 Hướng đối tượng trong Java
OOP là một trong những tiếp cận mạnh mẽ, và rất hiệu quả để xây dựng nên những chương trình ứng dụng trên máy tính Từ khi ra đời cho đến nay lập trình OOP đã chứng tỏ được sức mạnh, vai trò của nó trong các đề án tin học
1.3.3.1 Lớp (Class)
Khái niệm
Có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object) Trong
đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức (methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp
Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance)
Khai báo định nghĩa lớp
class <ClassName>
{
<kiểu dữ liệu> <field_1>;
<kiểu dữ liệu> <field_2>; constructor
method_1 method_2
Trang 20}
class: là từ khóa của java
ClassName: là tên đặt cho lớp
field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp constructor: là sự xây dựng, khởi tạo đối tượng lớp
method_1, method_2: là các phương thức/hàm thể hiện các thao tác xử lý, tác động lên các thành phần dữ liệu của lớp
Tạo đối tượng của lớp
ClassName objectName = new ClassName();
Thuộc tính của lớp
Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp
được khai báo bên trong lớp như sau:
class <ClassName>
{
// khai báo những thuộc tính của lớp
<tiền tố> <kiểu dữ liệu> field1;
// …
}
Để xác định quyền truy xuất của các đối tượng khác đối với vùng dữ liệu của lớp người ta thường dùng 3 tiền tố sau:
public: có thể truy xuất từ tất cả các đối tượng khác
private: một lớp không thể truy xuất vùng private của 1 lớp khác
protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đó và những lớp dẫn xuất từ lớp đó truy cập đến
Lưu ý: Thông thường để an toàn cho vùng dữ liệu của các đối tượng tránh dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng dữ liệu của một lớp từ các phương thức bên ngoài lớp đó
Hàm – Phương thức lớp (Method)
Hàm hay phương thức (method) trong Java là khối lệnh thực hiện các chức năng, các hành vi xử lý của lớp lên vùng dữ liệu
Trang 21Khai báo phương thức:
<Tiền tố> <kiểu trả về> <Tên phương thức> (<danh sách đối số>)
public: phương thức có thể truy cập được từ bên ngoài lớp khai báo
protected: có thể truy cập được từ lớp khai báo và những lớp dẫn xuất từ nó private: chỉ được truy cập bên trong bản thân lớp khai báo
static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa là phương thức đó có thể được thực hiện kể cả khi không có đối tượng của lớp chứa phương thức đó
final: phương thức có tiền tố này không được khai báo chồng ớ các lớp dẫn xuất
abstract: phương thức không cần cài đặt (không có phần source code), sẽ được hiện thực trong các lớp dẫn xuất từ lớp này
synchoronized: dùng để ngăn các tác động của các đối tượng khác lên đối tượng đang xét trong khi đang đồng bộ hóa Dùng trong lập trình miltithreads
<kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp
<Tên phương thức>: đặt theo qui ước giống tên biến
<danh sách thông số>: có thể rỗng
Lưu ý:
Thông thường trong một lớp các phương thức nên được khai báo dùng từ khóa public, khác với vùng dữ liệu thường là dùng tiền tố private vì mục đích an toàn
Những biến nằm trong một phương thức của lớp là các biến cục bộ (local) và nên được khởi tạo sau khi khai báo
Khởi tạo một đối tượng (Constructor)
Contructor thật ra là một loại phương thức đặc biệt của lớp Constructor dùng gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng để khởi gán những giá trị
Trang 22măc định Các constructor không có giá trị trả về, và có thể có tham số hoặc không
có tham số
Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor mặc định (default constructor) Những thuộc tính, biến của lớp sẽ được khởi tạo bởi các giá trị mặc định (số: thường là giá trị 0, kiểu luận lý là giá trị false, kiểu đối tượng giá trị null, …)
Lưu ý: Thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương trình nên khai báo một constructor cho lớp
Biến this
Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ java Một class trong Java luôn tồn tại một biến this, biến this được sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó
Khai báo chồng phương thức (overloading method)
Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method)
1.3.3.2 Đặc điểm hướng đối tượng trong java
Hỗ trợ những nguyên tắc cơ bản của lập trình hướng đối tượng, tất cả các ngôn ngữ lập trình kể cả java đều có ba đặc điểm chung: tính đóng gói (encapsulation), tính đa hình (polymorphism), và tính kế thừa (inheritance)
Tính đóng gói (encapsulation)
Cơ chế đóng gói trong lập trình hướng đối tượng giúp cho các đối tượng dấu
đi một phần các chi tiết cài đặt, cũng như phần dữ liệu cục bộ của nó, và chỉ công bố
ra ngoài những gì cần công bố để trao đổi với các đối tượng khác Hay chúng ta có thể nói đối tượng là một thành tố hỗ trợ tính đóng gói
Đơn vị đóng gói cơ bản của ngôn ngữ java là class Một class định nghĩa hình thức của một đối tượng Một class định rõ những thành phần dữ liệu và các đoạn mã cài đặt các thao tác xử lý trên các đối tượng dữ liệu đó Java dùng class để xây dựng những đối tượng Những đối tượng là những thể hiện (instances) của một class
Trang 23Một lớp bao gồm thành phần dữ liệu và thành phần xử lý Thành phần dữ liệu của một lớp thường bao gồm các biến thành viên và các biến thể hiện của lớp Thành phần xử lý là các thao tác trên các thành phần dữ liệu, thường trong java người gọi là phương thức Phương thức là một thuật ngữ hướng đối tượng trong java, trong C/C++ thường dùng thuật ngữ là hàm
Dùng từ khóa extends để chỉ lớp dẫn xuất
Để khai báo một lớp thuộc một gói nào đấy ta phải dùng từ khóa package Dòng khai báo gói phải là dòng đầu tiên trong tập tin khai báo lớp
Các tập tin khai báo lớp trong cùng một gói phải được lưu trong cùng một thư mục
Lưu ý: Việc khai báo import tất cả các lớp trong gói sẽ làm tốn bộ nhớ Thông thường chỉ nên import những lớp cần dùng trong chương trình
Trang 241.3.3.4 Giao diện (interface)
Khái niệm interface
Như đã biết một lớp trong java chỉ có một siêu lớp trực tiếp hay một cha duy nhất (đơn thừa kế) Để tránh đi tính phức tạp của đa thừa kế (multi - inheritance) trong lập trình hướng đối tượng, Java thay thế bằng giao tiếp (interface) Một lớp có thể có nhiều giao tiếp (interface) với các lớp khác để thừa hưởng thêm vùng dữ liệu
và phương thức của các giao tiếp này
Khai báo interface
Interface được khai báo như một lớp Nhưng các thuộc tính của interface là các hằng (khai báo dùng từ khóa final) và các phương thức của giao tiếp là trừu tượng (mặc dù không có từ khóa abstract) Trong các lớp có cài đặt các interface phải tiến hành cài đặt cụ thể các phương thức này
Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một giao diện cha trực tiếp mà có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có nhiều giao diện cha) Khi đó nó sẽ kế thừa tất cả các giá trị hằng và các phương thức của các giao diện cha Các giao diện cha được liệt kê thành chuỗi và cách nhau bởi dấu phẩy “,” Khai báo như sau:
public interface InterfaceName extends interface1, interface2, interface3 {
// …
}
Trang 25CHƯƠNG 2: PHÂN TÍCH, THIẾT KẾ BÀI TOÁN 2.1 Bài toán quản lý lịch của giảng viên
Chương trình quản lý lịch cho cán bộ phụ trách khoa Công nghệ Điện tử và truyền thông để cho người phụ trách dễ dàng trong tra cứu lịch của các giảng viên
để tiện cho việc quản lý và phân công công việc cho giảng viên khi cần thiết
Trước khi bắt đầu học kỳ thì các giảng viên đều được phòng Đào tạo cung cấp thời khóa biểu giảng dạy trong học kỳ đó
Khi có đợt mở lớp mới trong học kỳ đó mà giảng viên có lịch dạy thì phòng Đào tạo sẽ cung cấp cho giảng viên đó lịch giảng dạy đã được cập nhật gửi bằng file excel Trong chương trình sẽ sử dụng lịch giảng dạy đó là cơ sở dữ liệu để người phụ trách quản lý
Ngoài ra trong quá trình giảng dạy giảng viên còn nhận được nhiều lịch khác như đi họp, coi thi, chấm thi… thì chương trình sẽ cho phép cập nhật vào danh sách lịch của giảng viên để cán bộ quản lý dễ theo dõi
2.2 Phân tích bài toán
2.2.1 Biểu đồ dữ liệu mức khung cảnh
Hình 2.1: Biểu đồ dữ liệu mức khung cảnh
Trang 26Trên biểu đồ dữ liệu mức khung cảnh có một tác nhân liên quan tới hệ thống
đó là người phụ trách bộ môn, người này có thể cập nhật TKB, chỉnh sửa thời khóa biểu, bổ sung các công việc cho các giảng viên vào hệ thống Người quản lý sẽ dễ dàng quản lý và xem được thời khóa biểu sau khi đã được cập nhật và xem chi tiết được lịch biểu theo từng tuần của các giảng viên cần quản lý
Trang 27ngoài lịch giảng dạy của giảng viên vào bảng phân công công việc theo tuần để quản lý lịch dễ dàng và chi tiết nhất
2.2.3 Thiết kế cơ sở dữ liệu
class Data Mo
BoMon: Tên bộ môn của giảng viên
DienThoai: Số điện thoại giảng viên
Email: Địa chỉ email của giảng viên
MaGV: Mã số của giảng viên
TenGV: Tên của giảng viên
SoTinChi: Số tín chỉ của môn học
TenMonHoc: Tên môn học
Trang 282.3 Thiết kế module chương trình
2.3.1 Module Default package
Trang 29TKB của giảng viên (file xls) sử dụng trong chương trình:
Bảng 2.1: Lịch giảng dạy của giảng viên Đoàn Thị Thanh Thảo
Trang 30Bảng 2.2: Lịch giảng dạy của giảng viên Hoàng Quang Trung