public class GiaoDich { private int maGD ; private String ngayGD ; private String thoiGianGD ; private LoaiGD loaiGD ; private TaiKhoan tk ; private double soTien ;. public G[r]
Trang 1+maGD: int +ngayGD: String +thoiGianGD: String +loaiGD: LoaiGD +tk: TaiKhoan +soTien: double
<<create>>+GiaoDich(maGD: int, ngayGD: String, thoiGianGD: String, loaiGD: LoaiGD, tk: TaiKhoan, soTien: double) +show()
KhachHang
+maKH: long
+tenKH: String
+diaChi: String
+maPin: String
+soThe: String
<<create>>+KhachHang(maso: long, ten: String, dc: String, pin: String, sothe: String)
+kiemTraMatKhau(pin: String): boolean
+setMaKH(maso: long)
+getMaKH(): long
LoaiGD
+maLoaiGD: int
+tenLoaiGD: String
<<create>>+LoaiGD(maLoaiGD: int, tenLoaiGD: String)
TaiKhoan
+soTaiKhoan: String +loaiTaiKhoan: String +kh: KhachHang +soDu: double
<<create>>+TaiKhoan(soTaiKhoan: String, loaiTaiKhoan: String, kh: KhachHang, soDu: double) +rutTien(soTienRut: double)
+guiTien(tk: TaiKhoan, soTienGui: double): boolean +kiemTraSoTK(soTK: String): boolean
+xemTaiKhoan()
1 1
0 *
1
1 *
1
Phân tích thiết kế hướng đối tượng
GV: Nguyễn Hữu Thể
Cài đặt Rút tiền ATM
Use case (trong bài học)
State Diagram (trong bài học)
Class Diagram
Yêu cầu:
1 Chuyển từ Class Diagram sang Physical Data Model
2 Từ Physical Data Model sang SQL query
3 SQL query sang MySQL
4 Class Java truy vấn từ MySQL
5 Viết các xử lý Rút tiền, gửi tiền, xem số dư tài khoản với dữ liệu lưu trữ trong database
Sinh viên từ cài đặt lại trong trường hợp KhachHang và TaiKhoan có mối quan hệ theo soTK (theo tài liệu lý thuyết)
Trang 2KhachHang.java
public class KhachHang {
private long maKH;
private String tenKH;
private String diaChi;
private String maPin;
private String soThe;
public KhachHang(long maso, String ten, String dc, String pin, String
sothe){
maKH = maso;
tenKH = ten;
diaChi = dc;
maPin = pin;
soThe = sothe;
}
public boolean kiemTraMatKhau(String pin) {
if(maPin == pin)
return true;
else
return false;
}
public void setMaKH(long maso) {
//
}
public long getMaKH() {
return maKH; }
public String getTenKH() {
return tenKH; }
}
TaiKhoan.java
public class TaiKhoan {
private String soTaiKhoan;
private String loaiTaiKhoan;
private KhachHang kh;
private double soDu;
public TaiKhoan(String soTaiKhoan, String loaiTaiKhoan, KhachHang kh, double soDu){
this.soTaiKhoan = soTaiKhoan;
this.loaiTaiKhoan = loaiTaiKhoan;
this.kh = kh;
this.soDu = soDu;
Trang 3}
public double getSoDu() {
return soDu; }
public String getTenKH(){
return kh.getTenKH();
}
//public boolean rutTien(double soTienRut) {
public double rutTien(double soTienRut) {
if(soDu > soTienRut){
soDu = soDu - soTienRut;
return soTienRut;
}
else{
return -1; //Không thành công
} }
public double guiTien(TaiKhoan tk, double soTienGui) {
if(kiemTraSoTK(tk.soTaiKhoan)){
if(soDu > soTienGui){
soDu -= soTienGui;
tk.soDu += soTienGui;
return soTienGui;
}
else
return -2; //trả về nếu không đủ tiền để gửi
}
else
return -1; //nếu nhập sai tài khoản nhận
}
public boolean kiemTraSoTK(String soTK){
if(soTK != null)
return true;
else
return false;
}
public void xemTaiKhoan() {
System.out.println("Khách hàng: " + kh.getTenKH());
System.out.println("Số tài khoản: " + soTaiKhoan);
System.out.println("Số dư: " + soDu);
}
}
Trang 4LoaiGD.java
public class LoaiGD {
private int maLoaiGD;
private String tenLoaiGD;
public LoaiGD(int maLoaiGD, String tenLoaiGD){
this.maLoaiGD = maLoaiGD;
this.tenLoaiGD = tenLoaiGD;
}
public String getTenLoaiGD(){
return tenLoaiGD; }
}
GiaoDich.java
public class GiaoDich {
private int maGD;
private String ngayGD;
private String thoiGianGD;
private LoaiGD loaiGD;
private TaiKhoan tk;
private double soTien;
public GiaoDich(int maGD, String ngayGD, String thoiGianGD, LoaiGD loaiGD,
TaiKhoan tk, double soTien){
this.maGD = maGD;
this.ngayGD = ngayGD;
this.thoiGianGD = thoiGianGD;
this.loaiGD = loaiGD;
this.tk = tk;
this.soTien = soTien;
}
public void show(){
System.out.println("Mã GD: "+maGD);
System.out.println("Ngày GD: "+ngayGD);
System.out.println("Thời gian GD: "+thoiGianGD);
System.out.println("Loại GD: "+loaiGD.getTenLoaiGD());
System.out.println("Tên khách hàng: "+tk.getTenKH());
System.out.println("Số tiền GD: "+soTien);
System.out.println(" -");
}
}
Trang 5Database.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Database {
private Connection con = null;
private Statement stmt = null;
private ResultSet result = null;
public Connection getConnectDB() {
try {
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/ATM?useUnicode=true&characterEncoding=UTF-8",
"root", "");
return con; } catch (Exception e) {
System.out.println("Error: " + e);
return null;
} }
public void closeConnect() {
try {
if (result != null) {
result.close();
}
if (stmt != null) {
stmt.close();
}
if (con != null) {
con.close();
} } catch (Exception e) {
System.out.println(e);
} }
public void loadData(){
try {
getConnectDB();
Statement st = con.createStatement();
String sql = "Select * from lophoc"; ResultSet rs = st.executeQuery(sql);
Trang 6while (rs.next()) {
System.out.println(rs.getString("tenlop"));
}
con.close();
} catch (Exception e) {
System.out.println(e);
} }
public void loadKhachHang(){
try {
getConnectDB();
Statement st = con.createStatement();
String sql = "Select * from KhachHang"; ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
System.out.println(rs.getString(1) + "\t" + rs.getString(2) + "\t"+rs.getString(3) + "\t" +
rs.getString(4));
}
con.close();
} catch (Exception e) {
System.out.println(e);
} }
public ResultSet loadKhachHang(int makh){
try {
getConnectDB();
Statement st = con.createStatement();
String sql = "Select * from KhachHang where makh = "+makh; ResultSet rs = st.executeQuery(sql);
if (rs != null)
return rs;
else
return null;
} catch (Exception e) {
System.out.println(e);
return null;
} }
public ResultSet loadTaiKhoan(int makh){
try {
getConnectDB();
Statement st = con.createStatement();
Trang 7String sql = "Select soTaiKhoan, loaiTaiKhoan, soDu, TaiKhoan.makh from TaiKhoan, KhachHang where TaiKhoan.makh = KhachHang.makh and KhachHang.makh = "+makh;
ResultSet rs = st.executeQuery(sql);
if(rs != null)
return rs;
else
return null;
} catch (Exception e) {
System.out.println(e);
return null;
} }
public void infoConnectDB(){
if (getConnectDB() != null)
System.out.println("Kết nối database thành công");
else
System.out.println("Kết nối database không thành công");
}
public static void main(String[] args) {
Database db = new Database();
db.infoConnectDB(); //Xem thông tin kết nối db.loadData(); //Gọi phương thức hiển thị dữ liệu db.closeConnect();
}
}
ATMDemo2.java
import java.sql.ResultSet;
import java.sql.SQLException;
public class ATMDemo2 {
public static void main(String[] args) throws SQLException {
KhachHang kh1 = null;
TaiKhoan tk1 = null;
Database db = new Database();
System.out.println("Khách hàng thứ nhất thực hiện giao dịch ");
int makh1 = 1; //giả sử khách hàng thứ nhất nhập mã pin và giao dịch
ResultSet rs1 = db.loadKhachHang(makh1);
if(rs1.next())
kh1 = new KhachHang(rs1.getInt(1), rs1.getString(2),
Trang 8rs1.getString(3), rs1.getString(4), rs1.getString(5));
ResultSet rs2 = db.loadTaiKhoan(makh1);
if(rs2.next())
tk1 = new TaiKhoan(rs2.getString(1), rs2.getString(2), kh1, rs2.getFloat(3));
tk1.xemTaiKhoan(); //Giao dịch xem số dư tài khoản }
}
Kết quả: ứng dụng console có dạng
Khách hàng thứ nhất thực hiện giao dịch
Khách hàng: Nguyễn Văn A
Database có dạng
KhachHang
TaiKhoan
Trang 9 Sinh viên bổ sung
- Nhập số thẻ từ bàn phím, nhập số pin từ bàn phím, kiểm tra số pin
- Hiển thị chọn loại giao dịch (switch…case)