You are on page 1of 23

BÀI TẬP THỰC HÀNH TUẦN 4

CÂU 2 - PHẦN THỰC HÀNH TRÊN LỚP


QUẢN LÝ KHÁM BỆNH

1. Tạo Database QLKB


CREATE DATABASE QLKB;
USE QLKB;

CREATE TABLE BACSI (


MABS char(4) PRIMARY KEY,
TENBS varchar(20)CHARACTER SET utf8 COLLATE utf8_unicode_ci
);
CREATE TABLE BENHNHAN (
MABN char(4) PRIMARY KEY,
TENBN varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
NGSINH date,
DCHI varchar(50)CHARACTER SET utf8 COLLATE utf8_unicode_ci,
DTHOAI varchar(10),
GIOITINH boolean
);
CREATE TABLE KHAMBENH(
MAKB char(6) PRIMARY KEY,
MABN char(4),
MABS char(4),
NGAYKHAM date,
YEUCAUKHAM varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
KETLUAN varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
THANHTOAN boolean
);
CREATE TABLE DICHVU (
MADV char(6) PRIMARY KEY,
TENDV varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci,
DONGIA bigint
);
CREATE TABLE THUPHI (
MAKB char(6),
MADV char(6),
SOLUONG int,
THANHTIEN bigint,
PRIMARY KEY (MAKB, MADV)
);

1
INSERT INTO BACSI VALUES('BS01', N'BS Nguyễn Văn A');
INSERT INTO BACSI VALUES('BS02', N'BS Nguyễn Văn B');
INSERT INTO BACSI VALUES('BS03', N'BS Nguyễn Thị C');

INSERT INTO BENHNHAN VALUES('BN01', N'BN Trần Văn D','1999-12-01', N'Phường


Linh Trung TP Thủ Đức TPHCM', '0987654321', 1);
INSERT INTO BENHNHAN VALUES('BN02', N'BN Trần Thị E','2000-01-12', N'Phường
Bến Nghé Quận 1 TPHCM', '0321321321', 0);
INSERT INTO BENHNHAN VALUES('BN03', N'BN Đào Thị N','1998-05-25', N'Phường
Tân Thới Hiệp Quận 12 TPHCM', '0321389000', 0);

INSERT INTO DICHVU VALUES('DV0001', N'Dịch vụ a',100000);


INSERT INTO DICHVU VALUES('DV0002', N'Dịch vụ b',120000);
INSERT INTO DICHVU VALUES('DV0003', N'Dịch vụ c',150000);
INSERT INTO DICHVU VALUES('DV0004', N'Dịch vụ d',250000);

2. Tạo project và import 2 file jar thư viện JDBC


3. Tạo Class ConnectDB.java để cấu hình phần connect Database
- Import thư viện:

- Khai báo class:


● Thuộc tính: Connection conn
● Constructor ConnectDB()
● Phương thức Connection createCon()

2
4. Cài đặt Form Thêm thông tin bệnh nhân (ThemBNFrm.java)

Yêu cầu:
- Điền thông tin vào trong giao diện thêm bệnh nhân
- Nhấn “Thêm” để thêm thông tin bệnh nhân vào bảng BENHNHAN
- Nếu thêm thành công xuất hiện thông báo xác nhận “Thêm bệnh nhân thành công”; ngược lại
“Thêm bệnh nhân không thành công”.

TextField Mã bệnh nhân txtMaBN

TextField Tên bệnh nhân txtTenBN

JDateChooser Ngày sinh datNgSinh

TextField Địa chỉ txtDiaChi

TextField Điện thoại txtSoDT

Combobox Giới tính cbbGioiTinh

Button Thêm btnThem

4.1. Import thư viện

3
4.2. Hàm khởi tạo form ThemBNFrm()

4.3. Sự kiện click btnThem ActionPerformed btnThem

4
5. Cài đặt Form Đặt lịch khám của bệnh nhân (ThemPKBFrm.java)

Yêu cầu:
- Khi nhập mã bệnh nhân và nhấn phím enter thì sẽ hiển thị tên bệnh nhân vào textfield “Tên bệnh
nhân” (không chỉnh sửa được). Nếu không tìm thấy mã bệnh nhân sẽ xuất hiện thông báo “Bệnh
nhân chưa đăng ký”.
- Tên bác sĩ khám sẽ được load từ CSDL vào combobox “Tên bác sĩ”.
- Chọn ngày khám bệnh (ngày khám phải lớn hơn hoặc bằng ngày hiện tại).
- Nhập yêu cầu khám.
- Chọn bác sĩ khám trong combobox.
- Nhấn “Đặt lịch khám” toàn bộ thông tin trên sẽ lưu xuống bảng KHAMBENH.
- Nếu đặt lịch thành công xuất hiện thông báo xác nhận “Đặt lịch khám thành công”; ngược lại
“Đặt lịch khám không thành công”.

TextField Mã bệnh nhân txtMaBN

TextField Tên bệnh nhân txtTenBN

JDateChooser Ngày khám datNgKham

TextField Yêu cầu khám txtYeuCauKham

Combobox Bác sĩ khám cbbTenBS

Button Đặt lịch khám btnDatLichKham

5.1. Import thư viện

5
5.2. Hàm khởi tạo form ThemPKBFrm()

5.3. Hàm Load dữ liệu đổ vào Combobox cbbTenBS LoadCbbTenBS()


- Khai báo 2 biến toàn cục để lưu danh sách Mã BS và Tên BS

Sử dụng ListTenBS để đổ dữ liệu vào Combobox. Nhưng khi lấy thông tin của BS để lưu
vào bảng KHAMBENH thì phải lấy MaBS nên cần khai báo thêm ListMaBS

- Hàm LoadCbbTenBS

- Gọi hàm LoadCbbTenBS() trong hàm khởi tạo ThemPKBFrm()

6
5.4. Xử lý sự kiện Enter sau khi nhập mã bệnh nhân ActionPerformed txtMaBN

5.5. Xử lý sự kiện click btnDatLichKham ActionPerformed btnDatLichKham


Khi đặt lịch khám sẽ lưu thông tin vào table KHAMBENH bao gồm các thuộc tính MaKB, MaBN, MaBS,
NgayKham, YeuCauKham, KetLuan, ThanhToan. Trong đó:
- MaBN: lấy từ cbbTenBN
- MaBS: lấy từ cbbTenBS
- NgayKham: lấy từ txtNgKham
- YeuCauKham: lấy từ txtYeuCauKham
- KetLuan: null
- ThanhToan: 0 (false)
- MaKB: sẽ lấy từ đâu ??? => Xây dựng hàm để Lấy MaKB 1 cách tự động

5.5.1. Cài đặt hàm LayMaKB()

7
8
5.5.2. Cài đặt sự kiện ActionPerformed btnDatLichKham

9
6. Cài đặt Form Thêm chi tiết khám bệnh (ThemCTKBFrm.java)

Yêu cầu:
- Tên bác sĩ được load từ CSDL vào combobox.
- Danh sách dịch vụ được load từ CSDL vào JTable “Danh sách dịch vụ”.
- Chọn bác sĩ trong combobox, nhập ngày tháng và nhấn enter => danh sách bệnh nhân đặt lịch
hẹn với bác sĩ sẽ hiển thị ở combobox “Tên bệnh nhân”. Lưu ý: chỉ load bệnh nhân chưa thanh
toán cho ngày khám đã được chọn.
- Chọn tên bệnh nhân sẽ hiển thị yêu cầu khám ở textfield “Yêu cầu khám” (không được chỉnh
sửa yêu cầu khám).
- Nhập kết luận ở textfield “Kết luận”.
- Chọn các dịch vụ, mỗi lần chọn dịch vụ bên “Danh sách dịch vụ” thì dịch vụ đó sẽ được hiển thị
bên JTable “Danh sách dịch vụ bác sĩ chọn” và bên “Danh sách dịch vụ sẽ không còn hiển thị
dịch vụ đó nữa. Thêm số lượng cho từng dịch vụ.
- Nhấn “Thêm” để thêm toàn bộ thông tin vào các bảng tương ứng trong CSDL.

Combobox Tên Bác sĩ cbbTenBS

Combobox Tên bệnh nhân cbbTenBN

JDateChooser Ngày khám datNgKham

TextField Yêu cầu khám txtYeuCauKham

TextField Kết luận txtKetLuan

Table Danh sách dịch vụ tblDV

Table Danh sách dịch vụ bác tblDVBSChon


sĩ chọn

Button Thêm btnThem

10
6.1. Import Thư viện

6.2. Hàm khởi tạo form ThemCTKBFrm()

6.3. Hàm Load dữ liệu đổ vào combobox cbbTenBS LoadCbbTenBS()


- Khai báo 2 biến toàn cục để lưu danh sách Mã BS và Tên BS

Sử dụng ListTenBS để đổ dữ liệu vào Combobox. Nhưng khi lấy thông tin của BS để lưu
vào bảng KHAMBENH thì phải lấy MaBS nên cần khai báo thêm ListMaBS

- Hàm LoadCbbTenBS

11
- Gọi hàm LoadCbbTenBS() trong hàm khởi tạo ThemCTKBFrm()

6.4. Hàm Load dữ liệu đổ vào tblDV LoadTableDV()


- Khai báo biến toàn cục định nghĩa tablemodel tblModelDV

- Hàm LoadTableDV

- Gọi hàm LoadTableDV() trong hàm khởi tạo ThemCTKBFrm()

12
6.5. Hàm Load định nghĩa tiêu đề tblDVBSChon LoadTableDVBSChon()
- Khai báo biến toàn cục định nghĩa tablemodel tblModelDVBSChon

- Hàm LoadTableDVBSChon()

- Gọi hàm LoadTableDVBSChon() trong hàm khởi tạo ThemCTKBFrm()

6.6. Xử lý sự kiện chọn cbbTenBS và chọn Ngày Khám sẽ đổ dữ liệu các Bệnh
nhân có lịch khám bệnh của BS và Ngày khám đó vào cbbTenBN
- Do datNgKham được set mặc định là ngày hiện tại, do đó khi chọn cbbTenBS thì sẽ đổ dữ liệu
vào cbbTenBN
- Khi chọn ngày Khám, nếu đã chọn cbbTenBS thì sẽ đổ dữ liệu vào cbbTenBN
- 2 Sự kiện trên cùng 1 cách giải quyết nên sẽ tạo hàm LoadCbbTenBN()

6.6.1. Cài đặt hàm Hàm LoadCbbTenBN()


- Khai báo 2 biến toàn cục để lưu danh sách Mã BN và Tên BN

Sử dụng ListTenBN để đổ dữ liệu vào Combobox. Nhưng khi lấy thông tin của BN để lưu
vào bảng KHAMBENH thì phải lấy MaBN nên cần khai báo thêm ListMaBN

- Hàm LoadCbbTenBS

13
- Gọi hàm LoadCbbTenBN() trong hàm khởi tạo ThemCTKBFrm()

6.6.2. Xử lý sự kiện chọn cbbTenBS cbbTenBSActionPerformed()

14
6.6.3. Xử lý sự kiện chọn datNgKham datNgKhamPropertyChange()

6.7. Xử lý sự kiện click chọn tblDV mouseClicked tblDV

6.8. Xử lý sự kiện chọn cbbTenBN cbbTenBNActionPerformed

15
6.9. Xử lý sự kiện click btnThem ActionPerformed btnThem
Khi click Thêm Chi tiết khám bệnh:
- Thêm các dịch vụ có trong tblDSBSChon vào table THUPHI bao gồm các thuộc tính: MaKB,
MaDV, SoLuong, ThanhTien. Trong đó:
● MaKB: sẽ lấy từ đâu ???
● MaDV: lấy từ tblDSBSChon
● SoLuong: lấy từ tblDSBSChon
● ThanhTien: SoLuong * DonGia (lấy từ tblDSBSChon)
- Cập nhật Kết luận trong table KHAMBENH cho MaKB đang được chọn. Trong đó:
● KetLuan: lấy từ txtKetLuan
● MaKB: sẽ lấy từ đâu ???
- Vậy MaKB: sẽ lấy từ đâu ??? => Xác định MaKB trong sự kiện chọn cbbTenBN

6.9.1. Xác định giá trị của biến MaKB


- Khai báo biến toàn cục MaKB để chứa giá trị MaKB đang được chọn

- Gán giá trị cho MaKB trong sự kiện chọn cbbTenBN cbbTenBNActionPerformed
Trong sự kiện chọn cbbTenBN, bằng câu lệnh select “Lấy các khám bệnh của MaBN, của BS, có ngày
khám và chưa thanh toán” có thể lấy ra được MaKB đang được chọn.
Bổ sung dòng MaKB = rs.getString("MaKB")

- Gán lại giá trị cho MaKB trong sự kiện chọn CbbTenBS
Chọn lại CbbTenBS gán MaKB = null. Bổ sung dòng MaKB= null;

16
- Gán lại giá trị cho MaKB trong sự kiện chọn datNgKham
Chọn lại datNgKham gán MaKB = null. Bổ sung dòng MaKB= null;

6.9.2. Cài đặt Xử lý sự kiện click btnThem btnThemActionPerformed

17
7. Cài đặt Form Thanh toán tiền khám bệnh (ThanhToanFrm.java)

Yêu cầu:
- Khi nhập mã bệnh nhân và nhấn phím enter thì sẽ hiển thị tên bệnh nhân vào textfield “Tên bệnh
nhân” (không chỉnh sửa được).

18
- Chọn ngày khám => hiển thị thông tin khám bệnh của bệnh nhân trong ngày đã chọn (tất cả đều
không chỉnh sửa được) bao gồm: Yêu cầu khám, Kết luận, Danh sách dịch vụ đã khám (Tên
dịch vụ, số lượng, thành tiền), Tổng tiền.
- Checkbox “Đã thanh toán” nếu được chọn thì nút “Thanh toán” sẽ bị mờ (Không hoạt động
được); ngược lại, thì nút “Thanh toán” sẽ hiển thị, và khi chọn “Thanh toán” trạng thái “Thanh
toán” trong CSDL sẽ được chuyển thành “True” để xác định bệnh nhân đã thanh toán cho đơn
khám bệnh của mình.

TextField Mã bệnh nhân cbbMaBN

TextField Tên bệnh nhân cbbTenBN

JDateChooser Ngày khám datNgKham

TextField Yêu cầu khám txtYeuCauKham

TextField Kết luận txtKetLuan

TextField Tổng tiền txtTongTien

Table Danh sách dịch vụ đã tblDV


khám

Checkbox Đã thanh toán ckbThanhToan

Button ThanhToan btnThanhToan

7.1. Import thư viện

19
7.2. Hàm khởi tạo form ThanhToanFrm()

7.3. Hàm Load định nghĩa tiêu đề tblDV LoadTableDV()


- Khai báo biến toàn cục định nghĩa tablemodel tblModelDV

- Hàm LoadTableDV()

- Gọi hàm LoadTableDV() trong hàm khởi tạo ThanhToanFrm()

7.4. Xử lý sự kiện enter khi nhập MaBN hoặc chọn Ngày Khám sẽ lấy dữ liệu
khám bệnh của BN khám trong ngày được chọn
- Do datNgKham được set mặc định là ngày hiện tại, do đó khi nhập MaBN và enter thì sẽ tìm
kiếm dữ liệu và đổ vào các trường thông tin
- Khi chọn ngày Khám, nếu đã nhập MaBN thì sẽ tìm kiếm dữ liệu và đổ vào các trường thông tin
- 2 Sự kiện trên cùng 1 cách giải quyết nên sẽ tạo hàm LoadData()

7.4.1. Cài đặt hàm Hàm LoadData()


- Khi cung cấp MaBN và Ngày Khám, sẽ tìm kiếm thông tin KHÁM BỆNH của BN đó.
- Lấy thông tin KHÁM BỆNH đổ vào các txt, ckbThanhToan

20
- Lấy thông tin các dịch vụ trong table THUPHI của MaKB đổ vào tblDV, tính tổng tiền. MaKB
được xác định ở bước tìm kiếm thông tin KHÁM BỆNH

- Khai báo biến toàn cục MaKB để gán giá trị MaKB đang được chọn

- Hàm LoadData()

21
7.4.2. Xử lý sự kiện enter sau khi nhập MaBN txtMaBNActionPerformed()

22
7.4.3. Xử lý sự kiện chọn Ngày khám datNgKhamPropertyChange()

7.5. Xử lý sự kiện click buttonThanhToan btnThanhToanActionPerformed()

23

You might also like