Tài liệu học tập Lập trình mạng
A. MỤC TIÊU
Trang bị cho sinh viên kỹ năng lập trình cơ bản trong java: cấu trúc if, vòng lặp while do,
for., khai báo mảng, xử lý trên mảng.
B. NỘI DUNG
- Lệnh rẽ nhánh (if), lệnh lựa chọn (switch).
- Lệnh lặp, sử dụng mảng để thao tác trên các phần tử cùng kiểu.
C. YÊU CẦU PHẦN CỨNG, PHẦN MỀM
- Máy tính cài HĐH windows, RAM tối thiểu 256MB.
- Phần mềm NETBEAN IDE 8.0, JDK 1.8.
D. KẾT QUẢ SAU KHI HOÀN THÀNH
Sinh viên thành thạo các câu lệnh : rẽ nhánh, lựa chọn, lệnh lặp, thao tác trên mảng, áp
dụng giải các bài tập từ đơn giản đến phức tạp.
E. HƯỚNG DẪN CHI TIẾT
1. Cấu trúc rẽ nhánh if else
Bài 2. Giải phương trình bậc 2 ax2 + bx + c = 0
Hướng dẫn:
Sử dụng Scanner nhập 3 số nguyên.a, b, c. Tính delta=b*b-4*a*c.
Sử dụng if kiểm tra từng trường hợp của delta.
Bài 3. Viết chương trình java cho phép tạo và thực hiện theo menu sau:
1. Nhập vào một số nguyên dương n.
2. Tính tổng các số từ 1 đến n
3. Kiểm tra n có là số nguyên tố
4. Kiểm tra n có là số hoàn hảo.
5. Hiển thị số n thành tích các thừa số nguyên tố.
6. Thoát
if(delta<>
System.out.println("PT vo nghiem");
else if(delta==0){
float x = (float)-b/(2*a);
System.out.printf("PT co nghiem kep x1=x2=%.2f",x);
}else{
float x1 = (float) (-b-Math.sqrt(delta))/(2*a);
float x2 = (float) (-b+Math.sqrt(delta))/(2*a);
}13
(Hiển thị 1 số nguyên dương thành tích các thừa số nguyên tố: n = 24 in ra: n = 23 x3)
Hướng dẫn:
Phương thức nhập: Dùng Scanner
Phương thức kiểm tra hoàn hảo

Trang 1

Trang 2

Trang 3

Trang 4

Trang 5

Trang 6

Trang 7

Trang 8

Trang 9

Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Tài liệu học tập Lập trình mạng
RMILoginClientView hiển thị bằng phương thức showMessage()
7. Lớp RMILoginClientView hiển thị kết quả đăng nhập lên cho người dùng
Sinh viên vận dụng các kiến thức đã học về lập trình RMI và kết nối cơ sở dữ liệu tiến
hành viết các lớp tương ứng.
Bài 5. Tổng hợp. Kết hợp kiến thức về RMI, database. Xây dựng hệ thống giao dịch ngân
hàng phân tán.
Phía Server Bấm button Connect: Server kết nối với RMI.
Phía người dùng thực hiện những chức năng sau:
Bài toán phát triển hệ thống ngân hàng phân tán đặt ra như sau:
▪ Cơ sở dữ liệu được lưu trữ và quản lí trên Server, trong đó có 3 bảng:
Bảng Account lưu thông tin tài khoản gồm hai trường IDaccount va Balance
241
Bảng AccountCustomer lưu thông tin tài khoản khách hàng gồm 2 trường idAccount
và IdCustomer
Bảng Customer lưu thông tin như sau
▪ Chương trình phía Client hiện giao diện đồ họa, trong đó có ô text để nhập
CustomerID và AccountID, và một nút QueryDatabase.
▪ Khi nút QueryDatabase được click, chương trình Client sẽ gửi thông tin đăng nhập
trên form giao diện, và gửi sang Server
▪ Tại phía Server, mỗi khi nhận được thông tin gửi từ Client, sẽ tiến hành kiểm tra trong
cơ sở dữ liệu xem có tài khoản nào trùng với thông tin nhận được hay không.
▪ Phía Client, sau khi nhận được kết quả từ Server, sẽ hiển thị thông báo tương ứng
Sau đó người dùng thực hiện các chức năng gửi tiền và rút tiền từ xa.
Hướng dẫn:
Bước 1: Tạo Interface Account
public interface Account extends Remote
{
//Trả về ngân hàng quản lý tài khoản này
242
public BankManager getBankManager() throws RemoteException;
//Trả về Client của tài khoản này
public Client getClient() throws RemoteException;
//Lấy số dư tài khoản
public float getBalance() throws RemoteException;
//Chỉnh sửa số dư tài khoản
public void setBalance(float bal) throws RemoteException;
//phương thức rút tiền có kiểm tra số dư trước khi rút. Trả về amount
public long getCash (long amount) throws NoCashAvailableException,
RemoteException;
//gửi tiền
public void deposit(float amount) throws RemoteException;
//rút tiền
public void withdraw(float amount) throws RemoteException;
}
Bước 2: Tạo class AccountImpl thực hiện interface Account
public class AccountImpl implements Account, Serializable
{
private BankManager bankManager;
private Client Client;
private float balance;
private String accountNumber;
public AccountImpl (BankManager bankManager, Client Client, String
accountNumber, float bal)
{
this.bankManager = bankManager;
this.Client = Client;
this.balance = bal;
this.accountNumber = accountNumber;
}
public void deposit(float amount)
{
balance += amount;
}
243
public void withdraw(float amount)
{
balance -= amount;
}
public BankManager getBankManager() throws RemoteException
{
return bankManager;
}
public Client getClient() throws RemoteException
{
return Client;
}
public float getBalance() throws RemoteException
{
return balance;
}
public void setBalance(float bal) throws RemoteException
{
balance = bal;
}
public long getCash(long amount) throws NoCashAvailableException,
RemoteException
{
if (amount > balance)
{
throw new NoCashAvailableException();
}
balance = balance - amount;
return amount;
}
244
}
Bước 3: Tạo interface BankManager
public interface BankManager extends Remote
{
//Phương thức lấy tài khoản theo mã
public Account getAccount(String accountNumber) throws RemoteException;
//Phương thức lấy Client theo tên
public Client getClient(String ClientName) throws RemoteException;
//phương thức lấy mã khách hàng theo mã tài khoản
public int getCustomerId(int accountId) throws RemoteException;
//phương thức gửi tiền vào tài khoản
public void deposit(String idAccount, float Amount) throws
RemoteException;
//phương thức rút tiền
public void withdraw(String idAccount, float Amount) throws
RemoteException;
}
Bước 4: Tạo class BankManagerImpl thực hiện interface BankManager
public class BankManagerImpl extends UnicastRemoteObject implements
BankManager
{
private Hashtable accounts;
private Hashtable Clients;
private Connection conn;
private Statement s;
private int CustomerID;
public BankManagerImpl() throws RemoteException
{
super();
initialize();
}
public Account getAccount(String accountNumber) throws RemoteException
{
AccountImpl account = (AccountImpl)accounts.get(accountNumber);
return account;
}
public Client getClient(String ClientID) throws RemoteException
{
ClientImpl Client = (ClientImpl)Clients.get(ClientID);
245
return Client;
//Phương thức rút tiền
public void deposit(String idAccount, float amount)throws RemoteException
{
Account theAccount = (Account)accounts.get(idAccount);
theAccount.deposit(amount);
accounts.remove(idAccount);
accounts.put(idAccount,theAccount);
try
{
Statement s = conn.createStatement();
String sql = "Update account Set Balance ='" +
theAccount.getBalance() +"' where idAccount = '" + idAccount +"'";
s.executeUpdate(sql);
/// update in the dataabase now
}
catch(Exception e)
{
e.printStackTrace();;
}
}
public void withdraw(String idAccount, float amount)throws
RemoteException
{
Account theAccount = (Account)accounts.get(idAccount);
theAccount.withdraw(amount);
accounts.remove(idAccount);
accounts.put(idAccount,theAccount);
try
{
Statement s = conn.createStatement();
String sql = "Update account Set Balance ='" +
theAccount.getBalance() +"' where idAccount = '" + idAccount +"'";
s.executeUpdate(sql);
/// update in the dataabase now
}
catch(Exception e)
{
e.printStackTrace();
}
246
}
public void getClientsFromDatabase()
{
} public void initialize() throws java.rmi.RemoteException
{
// Create the hashtables
accounts = new Hashtable(20);
Clients = new Hashtable(10);
CreateConnection();
getCustomersFromDatabase();
getAccountsFromDatabase();
}
public boolean initializeConnection(String SERVER, String
DATABASE, String USER_ID, String PASSWORD) throws ClassNotFoundException,
SQLException
{
try
{
String connString = "jdbc:sqlServer://" + SERVER +
":1433;integratedSecurity=true;databaseName=" + DATABASE;
conn = DriverManager.getConnection(connString);
s = conn.createStatement();
return true;
}
catch (SQLException e)
{
return false;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
public void CreateConnection()
{
if(conn == null)
try
{
initializeConnection("localhost", "QLNH", "root", "");
247
}
catch(Exception e)
{
e.printStackTrace();
}
}
public int getCustomerId(int idAccount)
{ ArrayList ids = new ArrayList();
try
{
Statement s = conn.createStatement();
String sql = "Select IdCustomer from accountCustomer where
idAccount ='" + idAccount + "'";
ResultSet r = s.executeQuery(sql);
while(r.next())
{
ids.add(r.getInt("IdCustomer"));
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return ids.get(0).intValue();
}
public void getCustomersFromDatabase()
{
try
{
Statement s = conn.createStatement();
String sql = "Select * from customer";
ResultSet r = s.executeQuery(sql);
while(r.next())
{
int idCustomer = r.getInt("IdCustomer");
String name = r.getString("Name");
String surname = r.getString("Surname");
Client newClient = new ClientImpl(this, name + " " + surname);
Clients.put(String.valueOf(idCustomer), newClient);
}
248
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public void getAccountsFromDatabase()
{
System.out.println("------------------------------------");
System.out.println("Reading accounts from the database:");
try
{
int counter = 0;
Statement s = conn.createStatement();
Statement s1 = conn.createStatement();
String sql = "Select * from accountcustomer";
ResultSet r = s.executeQuery(sql);
while(r.next())
{
int idCustomer = r.getInt("IdCustomer");
int idAccount = r.getInt("idAccount");
Client theClient =(ClientImpl)Clients.get(String.valueOf(idCustomer));
Account newAccount = new
AccountImpl(this,theClient,String.valueOf(idAccount),0);
accounts.put(String.valueOf(idAccount), newAccount);
System.out.println("Customer:"+ newAccount.getClient().getName() + "
- Account:" + String.valueOf(idAccount));
counter++;
}
for(int i=1;i<=counter;i++)
{
if(accounts.containsKey(String.valueOf(i)))
{
sql = "Select Balance from account where idAccount = '" + i + "'";
ResultSet r1 = s1.executeQuery(sql);
r1.next();
float balance = r1.getFloat("Balance");
Account theAccount = (Account)accounts.get(String.valueOf(i));
theAccount.setBalance(balance);
accounts.remove(String.valueOf(i));
249
accounts.put(String.valueOf(i),theAccount);
}
}
s.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
Bước 5:Tạo Form BankSystem Server có giao diện như sau
Thực hiện code cho button Connect và Disconnect
Phương thức ConnectServer
private void ConnectServer(
{.....
m_bankManager = new BankManagerImpl();
if(m_Registry == null)
m_Registry = LocateRegistry.createRegistry(1234);
m_Registry.rebind("BankSystem", m_bankManager);
m_connected = true;
.....
}
Phương thức DisconnectServer()
private void DisconnectServer()
{
m_bankManager = null;
m_Registry.unbind("BankSystem");
m_connected = false;
}
Về phía người dùng tạo interface Client
250
public interface Client extends Remote
{
//Phương thức trả về ngân hàng quản lý Client này
public BankManager getBankManager() throws RemoteException;
//Phương thức trả về tên của Client
public String getName() throws RemoteException;
}
Tạo ClientImpl thực hiện interface Client
public class ClientImpl implements Client, Serializable
{
private BankManager bankManager;
private String ClientName;
public ClientImpl(BankManager bm, String name)
{
this.bankManager = bm;
this.ClientName = name;
}
public BankManager getBankManager() throws RemoteException
{
return bankManager;
}
public String getName() throws RemoteException
{
return ClientName;
}
}
Tạo Jframe BanhkUser có giao diện như yêu cầu đề bài:
public class BankUser extends javax.swing.JFrame {
public BankUser() {
initComponents();
}
// Code chức năng mở của sổ
private void formWindowOpened(java.awt.event.WindowEvent evt) {
try
{
m_Registry = LocateRegistry.getRegistry("localhost" ,1234);
m_bankManager = (BankManager) m_Registry.lookup("BankSystem");
}
catch (NotBoundException notBoundException)
251
{
System.out.println("Not Bound: " + notBoundException);
}
catch (RemoteException remoteException)
{
System.out.println("Remote Exception: " + remoteException);
}
Code cho button QueryDatabase
private void btnQrDatabaseActionPerformed(java.awt.event.ActionEvent evt)
{
try
{
if(txtCustomerID.getText().length() > 0)
{
System.out.println("opps: " + txtCustomerID.getText() + "000");
Client Client = m_bankManager.getClient(txtCustomerID.getText());
txtCustomerID.setText("");
System.out.println("Currently in the database there \n is this
customer with the requested ID: " + Client.getName());
txa_printArea.setText("Currently in the database there \n is this
customer with the requested ID: " + Client.getName());
}
else
{
if(txtAccountID.getText().length() > 0)
{
Account account = m_bankManager.getAccount(txtAccountID.getText());
txtAccountID.setText("");
System.out.println("Currently in the database there is \n this
account with the requested ID: " + account.getClient().getName());
txa_printArea.setText("Currently in the database there is \n this
account with the requested ID: " + account.getClient().getName() + "\n
Balance: " + account.getBalance());
}
}
}
catch (RemoteException remoteException)
{
}
}
252
Code cho button Deposit
private void btnDepositActionPerformed(java.awt.event.ActionEvent evt) {
try
{
if(txtAccIDtoDeposit.getText().length() > 0 &&
txtAmountToDeposit.getText().length() > 0)
{
m_bankManager.deposit(txtAccIDtoDeposit.getText(),
Float.parseFloat(txtAmountToDeposit.getText()));
Account account =
m_bankManager.getAccount(txtAccIDtoDeposit.getText());
txa_printArea.setText("The account was credited \n as follows:" +
account.getClient().getName() + "\nBalance: " + account.getBalance());
}
}
catch (RemoteException remoteException)
{
System.err.println(remoteException);
}
}
Code cho button WithDraw
private void btnWithDrawActionPerformed(java.awt.event.ActionEvent evt) {
try
{
if(txtAccIDtoWithDraw.getText().length() > 0 &&
txtAmountToWithDraw.getText().length() > 0)
{
m_bankManager.withdraw(txtAccIDtoWithDraw.getText(),
Float.parseFloat(txtAmountToWithDraw.getText()));
Account account = m_bankManager.getAccount(txtAccIDtoWithDraw.getText());
txa_printArea.setText("The account was credited \n as follows:" +
account.getClient().getName() + "\nBalance: " + account.getBalance());
}
}
catch (RemoteException remoteException)
{
System.err.println(remoteException);
}
}
253
TÀI LIỆU THAM KHẢO
[1]. Cay S. Horstmann. Core Java Volum I - Fundamentals, Tenth Edition. NewYork :
Prentice Hall. 2016.
[2]. Cay S. Horstmann. Core Java Volum II - Advanced Features, Tenth Edition. New
York : Prentice Hall. 2017
[3].Eng.haneen Ei-masry, Java database connection, Islamic University of Gaza
Faculty of Engineering Department of Computer Engineering ECOM 4113: DataBase
Lab, 2014.
[4]. Angelos Stavrou, Advanced Network Programming Lab using Java, Network
Security, ISA 656, Angelos Stavrou.
[5]. Marenglen Biba, Ph.D, manual for Lab practices, Remote Method Invocation
Three Tier Application with a Database Server, Department of Comsputer Science,
University of New York.
[6].Elliotte Rusty Harold. Java Network Programming, Fourth Edition. O'Reilly Media,
2013.
[7]. Đoàn Văn Ban. Lập trình hướng đối tượng với JAVA. Nhà xuất bản Khoa học và
Kỹ thuật, 2005.
[8]. ThS. Dương Thành Phết. Bài tập thực hành Chuyên đề 1 CNPM- Java. Khoa CNTT-
Trường ĐH Công nghệ TP.HCM.
[9].https://www.oracle.com/technetwork/java/socket-140484.html#
[10]. https://personales.unican.es/corcuerp/java/Labs/LAB_22.htm
[11].
[12].
[13]. https://www.academia.edu/35283541/Bài tập môn lập trình hướng đối tượng
254
File đính kèm:
tai_lieu_hoc_tap_lap_trinh_mang.pdf

