1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG DÙNG NGÔN NGỮ LẬP TRÌNH JAVA

52 352 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 52
Dung lượng 558,52 KB

Nội dung

BÁO CÁO THỰC HÀNH,LẬP TRÌNH MẠNG,NGÔN NGỮ LẬP TRÌNH JAVA

Trang 1

ĐẠI HỌC ĐÀ NẴNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA

KHOA CÔNG NGHỆ THÔNG TIN

Tel (84-511) 736 949, Fax (84-511) 842 771

Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn

BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG

SINH VIÊN : BÙI TẤN VIỆT

ĐÀ NẴNG, 3/2014

Trang 2

Chương 1: CÁC BÀI TẬP THỰC HÀNH 1

1.1 BÀI THỰC HÀNH BUỔI 1 1

1.1.1 Bài tập 1 1

1.1.2 Bài tập 2 3

1.2 BÀI THỰC HÀNH BUỔI 2 6

1.2.1 Đề bài: 6

1.2.2 Phần chương trình Client: 6

1.2.3 Phần chương trình Server: 7

1.2.4 Phần chương trình xử lý của Server: 7

1.2.5 Phần chương trình xử lý biểu thức: 8

1.3 BÀI THỰC HÀNH BUỔI 3 14

1.3.1 Đề bài 14

1.3.2 Tạo các class tính toán ma trận 14

1.3.3 Nhập ma trận: 14

1.3.4 Cộng, trừ ma trận 15

1.3.5 Nhân 2 ma trận 16

1.3.6 Chia 2 ma trận 17

1.3.7 Chương trình Client 22

1.3.8 Chương trình Server: 25

1.3.9 Demo 28

Chương 2: BÀI TẬP LÀM THÊM 30

2.1 ĐỀ BÀI 30

2.2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO 30

2.2.1 Chuẩn bị 30

2.2.2 Tìm kiếm trong danh sách 30

2.2.3 Sửa dữ liệu 31

2.2.4 Xóa dữ liệu 33

2.2.5 Thêm dữ liệu 34

2.2.6 Kiểm tra dữ liệu 36

2.3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER 37

2.3.1 Bên Client 37

Trang 3

2.3.2 Bên Server 40

2.4 XỬ LÝ CỦA CLIENT 42

2.5 XỬ LÝ CỦA SERVER 43

2.6 THUẬT TOÁN PHÂN CÔNG GIÁO VIÊN COI THI 44

2.6.1 Lưu danh sách giáo viên và phòng thi 44

2.6.2 Sắp xếp giám thị 44

2.7 DEMO 46

Trang 4

Lập trình mạng là một trong những nhiệm vụ quan trong trong việc phát triển các ứng dụng doanh nghiệp Một chương trình mạng được viết ra để các chương trình trên các máy tính khác nhau có thể truyềntin với nhau một cách hiệu quả và an toàn cho dù chúng được cài đặt trên mạng LAN, WAN hay mạng toàncầu Internet, đây là điều căn bản đối với sự thành công của nhiều hệ thông.

Java là ngôn ngữ lập trình hướng đối tượng thuần thúy với nhiều đặc trưng ưu việt so với các ngôn ngữ lập trình hướng đối tượng khác như tính độc lập với nền, tính bảo mật,… Java là ngôn ngữ ngay từ khi

ra đời đã hướng đến lập trình mạng nên việc viết một chương trình lập trình mạng bằng Java dễ dàng hơn nhiều so với các ngôn ngữ khác

Trang 5

Với String là "sun.jdbc.odbc.JdbcOdbcDriver"

B2: Tạo thông tin kết nối và đối tượng Connection:

Với Access: Connection con = DriverManager.getConnection("jdbc:odbc:testDB" );

B3: Tạo đối tượng Statement để thực thi các lệnh sql

Statement stmt = (java.sql.Statement) con.createStatement();

ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql);

B6: Tạo mảng dữ liệu 2 chiều có số hàng và số cột như trong bảng Access:

B7: Di chuyển trên từng dòng bảng của Access, đọc dữ liệu của các trường và gán dữ liệu vào vị trítương ứng trên mảng data Lặp cho đến khi hết dòng

B8: Tạo đối tượng JTable để hiển thị dữ liệu trong data, có nội dung header chứa trong header[], cóthanh trượt JScrollBar và gắn vào 1 đối tượng JFrame để hiển thị

Trang 6

public class Database {

public static void main(String arg[]) {

Statement stmt = (java.sql.Statement) con.createStatement();

ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData();

header[j - 1] = rsmd.getColumnLabel(j);

} rows = 0;

stmt.close();

}

Trang 7

public class ScanIP extends JFrame {

IP1_1 = new JTextField();

IP1_1 setPreferredSize(new Dimension(35, 25));

IP1_2 = new JTextField();

Trang 8

IP1_3 = new JTextField();

IP1_3 setPreferredSize(new Dimension(35, 25));

IP1_4 = new JTextField();

IP1_4 setPreferredSize(new Dimension(35, 25));

IP2_1 = new JTextField();

IP2_1 setPreferredSize(new Dimension(35, 25));

IP2_2 = new JTextField();

IP2_2 setPreferredSize(new Dimension(35, 25));

IP2_3 = new JTextField();

IP2_3 setPreferredSize(new Dimension(35, 25));

IP2_4 = new JTextField();

IP2_4 setPreferredSize(new Dimension(35, 25));

result = new JTextArea();

result setPreferredSize(new Dimension(500, 120));

result setEditable(false);

JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

scanbt = new JButton( "Scan" );

scanbt setPreferredSize(new Dimension(100, 30));

cancelbt = new JButton( "Cancel" );

cancelbt setPreferredSize(new Dimension(100, 30));

exitbt = new JButton( "Exit" );

exitbt setPreferredSize(new Dimension(100, 30));

Trang 9

1.1.2.3 Demo:

public static void main(String arg[]) {

}

}

Trang 10

B1: Tạo giao diện GUI và socket để kết nối đến Server có địa chỉ IP và cổng cho trước.

B2: Tạo dòng vào ra dữ liệu vào ra gắn vào socket

B3: Lấy chuỗi biểu thức nhập vào

B4: Gửi cả chuỗi biểu thức qua Server và chờ kết quả nhận về

public class client implements ActionListener {

public static Panel pn1, pn2, pn3, pn;

public static TextField tfnhap = new TextField(5);

public static TextField tfkq = new TextField();

public static Label lbnhap = new Label();

public static Label lbkq = new Label();

public static Button bt1, bt2;

public static String s = "" ;

public client() throws UnknownHostException, IOException {

fr.setSize(400, 200);

lbnhap.setText("Nhap vao chuoi can tinh toan" );

lbkq.setText("Ket qua" );

pn = new Panel(new GridLayout(5, 1));

pn1 = new Panel(new GridBagLayout());

bt1 = new Button( "send" );

bt2 = new Button( "Exit" );

socket = new Socket( "127.0.0.1" , 7777);

outputStream = new DataOutputStream( socket getOutputStream());

inputStream = new DataInputStream( socket getInputStream());

}

Trang 11

1.2.3 Phần chương trình Server:

1.2.3.1 Thuật toán:

B1: Tạo ServerSocket kết nối với cổng cho sẵn

B2: Server lắng nghe liên tục để chờ các client kết nối tới

B2.1: Khi có Client kết nối tới thì Server sẽ tạo socket để giao tiếp, đồng thời tạo 1 đối tượng sửdụng thread để xử lý yêu cầu

1.2.3.2 Cài đặt:

1.2.4 Phần chương trình xử lý của Server:

1.2.4.1 Thuật toán:

B1: Tạo dòng vào ra kết nối với socket

B2: Chờ liên tục để nhận dữ liệu từ Client:

B2.1: Khi nhận được dữ liệu từ Client thì sẽ tiến hành xử lý tính toán lấy kết quả

B2.2: Truyền kết quả cho Client

public class server {

public static void main(String[] args) throws Exception {

while (true) {

Socket socket = serverSocket.accept();

t.start();

} }

}

Trang 12

1.2.5 Phần chương trình xử lý biểu thức:

1.2.5.1 Thuật toán:

Để tính biểu thức nhập vào ta ứng dụng “kí pháp nghịch đảo Ba Lan”

B1: Ta chuyển biểu thức dạng trung tố nhập vào thành dạng hậu tố

B2: Tính toán biểu thức hậu tố theo kí pháp nghịch đảo Ba Lan

- Chuyển từ biểu thức trung tố sang biểu thức hậu tố:

1.2.5.2 Thuật toán:

Thuật toán chuyển đổi này được phát minh bởi Edsger Dijkstra Thuật toán dựa theo cơ chếngăn xếp Ý tưởng chung của thuật toán là duyệt biểu thức từ trái sang phải

B1: Nếu gặp một toán hạng (con số hoặc biến) thì nó ghi vào chuỗi kết quả

B2: Nếu gặp dấu mở ngoặc, đưa nó vào ngăn xếp

B3: Nếu gặp một toán tử O1, thực hiện theo 2 bước:

import java.io.*;

class server_Process extends Thread {

public server_Process(Socket socket) {

this socket = socket;

} catch (IOException ex) {

} }

} catch (IOException ex) {

} }

}

Trang 13

B3.1: Chừng nào còn có một toán tử O2 ở đỉnh ngăn xếp và độ ưu tiên của O1 ≤ độ ưu tiên củaO2 thì lấy O2 ra khỏi ngăn xếp và ghi vào kết quả.

B3.2: Push O1 vào ngăn xếp

B4: Nếu gặp dấu “)” thì cứ lấy các toán tử trong ngăn xếp ra và ghi vào chuỗi kết quả cho đến khilấy được dấu “(“ ra khỏi ngăn xếp

B5: Khi đã duyệt hết biểu thức trung tố, lần lượt lấy tất cả toán hạng (nếu có) từ ngăn xếp ra và ghivào chuỗi kết quả

Ví dụ: Chuyển đổi biểu thức: 3 + sin(4) * 2

* Pop sin ghi vào kết quảvà push * + * 3 4 sin

1.2.5.3 Cài đặt:

public ArrayList<String> ChuyenDoi_HauTo(String str) {

String[] toanTu = { "+" , "-" , "*" , "/" , "sin" , "cos" , "tan" ,

// Lấy danh sách các toán tử

List<String> operatorList = Arrays.asList(toanTu);

// Tạo ngăn xếp

// Tạo mảng kết quả

// Lấy các phần tử cắt ra đưa vào danh sách

while (tk.hasMoreTokens()) {

tkList.add(tk.nextToken());

}

Trang 14

- Tính toán biểu thức hậu tố:

1.2.5.4 Thuật toán:

Quá trình tính toán biểu thức hậu tố là đọc biểu thức từ trái sang phải:

B1: Nếu gặp một toán hạng (số hoặc là biến) thì push toán hạng đó vào ngăn xếp;

while (!stack.isEmpty() && DoUuTien(stack.peek()) > 0

&& DoUuTien(stack.peek()) >= DoUuTien(s)) { resultList.add(stack.pop());

} stack.push(s);

return 3;

return 0;

}

Trang 15

* Tính sin(4)*2, push kết quả 3 [sin(4)*2]

+ Tính sin(4)*2 + 3, push kết quả [sin(4)*2+3]

1.2.5.5 Cài đặt:

public double TinhToan(String str) {

ArrayList<String> hauTo = ChuyenDoi_HauTo(str);

}

Trang 16

- Tính lượng giác sin(x):

ketQua+¿temp ;Vớiban đầu : ketQua=0, temp=x

temp+¿ (−1)∗x2

(++i )∗(++i) Vớiban đầu :i=1

Việc tìm kết quả bằng cách trên sẽ lặp liên tục và kết thúc khi: −10−5≤ temp ≤10−5

Cài đặt:

- Tính lượng giác cos(x):

Thuật toán:

Ta có công thức triển khai tính cos(x):

public double sin(double x) {

double ketQua = 0;

double temp = x, i = 1;

do {

ketQua += temp;

temp = (-1) * temp * x * x / ((++i) * (++i));

} while (temp > 10E-10 || temp < -10E-10);

return ketQua;

}

return Double.parseDouble(toanHang1) - Double.parseDouble(toanHang2);

}

return Double.parseDouble(toanHang1) * Double.parseDouble(toanHang2);

}

return Double.parseDouble(toanHang1) / Double.parseDouble(toanHang2);

}

return 0;

}

Trang 17

ketQua+¿temp ;Vớiban đầu : ketQua=0, temp=1

temp+¿ (−1)∗x2

(++i )∗(++i) Vớiban đầu :i=0

Việc tìm kết quả bằng cách trên sẽ lặp liên tục và kết thúc khi: −10−5

≤ temp ≤10−5Cài đặt:

- Tính lượng giác tan(x) và cot:

temp = (-1) * temp * x * x / ((++i) * (++i));

} while (temp > 10E-10 || temp < -10E-10);

return ketQua;

}

Trang 18

1.3 BÀI THỰC HÀNH BUỔI 3

1.3.1 Đề bài

Gửi 2 ma trận từ Client qua Server Server tính toán +, -, *, / 2 ma trận rồi gửi kết quả về choClient

1.3.2 Tạo các class tính toán ma trận

Để tiện cho việc thực hiện bài toán, ta sẽ định nghĩa 2 lớp là MaTran và PhepToan_MaTran:

1.3.2.1 Cài đặt:

a) Lớp MaTran được định nghĩa như sau:

b) Lớp PhepToan_MaTran được định nghĩa như sau:

B2: Tạo 1 luồng đọc vào của file được chọn

B3: Tạo 1 bộ đệm để lưu dữ liệu cho luồng đọc vào đó

// Tiếp theo, đọc từng dòng trong bộ đệm để lấy dữ liệu dưới dạng chuỗi:

B4: Đọc dòng đầu tiên trong bộ đệm để lấy giá trị hàng và cột

B4.1: Cắt chuỗi đọc vào dựa theo kí tự tab ‘\t’ để tách số, lưu vào mảng String token;

class MaTran {

double maTran [][];

int , m ; // Số dòng, số cột

public MaTran(int dong, int cot) {}

public MaTran(File file){}

public void Nhap_MaTran() {}

public void In_MaTran() {}

}

public class PhepToan_MaTran {

public MaTran Cong(MaTran A, MaTran B) {}

public MaTran Tru(MaTran A, MaTran B) {}

public MaTran Nhan(MaTran A, MaTran B) {}

public MaTran DoiDong(int i, int j, MaTran X) {}

public double DinhThuc(MaTran Ori) {}

public double PhanTu_MaTran_PhuHop(MaTran B, int i, int j) {}

public MaTran ChuyenVi(MaTran C) {}

public MaTran Chia(MaTran A, MaTran B) {}

}

Trang 19

B4.2: Đổi các phần tử trong mảng token thành kiểu số thích hợp rồi gán vào số hàng, số cột.B5: Tạo ma trận có số hàng và số cột đó.

B6: Cho i = 0 Đọc 1 dòng trong bộ đệm cho mỗi lần lặp

Lặp khi đọc chưa tới dòng cuối cùng trong bộ đệm và (i < số hàng):

B6.1: Cắt chuỗi đọc vào dựa theo kí tự tab ‘\t’ để tách số, lưu vào token;

B6.2: Cho j = 0 Lặp khi (j < số cột) và (j < độ dài mảng của token):

B6.2.1: Đổi kiểu số cho phần tử token[j] và gán vào phần tử maTran[i][j]

B1: Kiểm tra số hàng và số cột của A và B có bằng nhau, nếu có:

B1.1: Tạo ma trận C[số hàng A][số cột A]

public void Nhap_MaTran(File file) {

maTran = new double[ ][ n ];

maTran[i][j] = Double.parseDouble(token[j]);

} } catch (NullPointerException e) {

Trang 20

public MaTran Cong(MaTran A, MaTran B) {

public MaTran Tru(MaTran A, MaTran B) {

Trang 21

Khi đó để đảm bảo 2 ma trận A và B có thể nhân với nhau thì số cột A = số hàng B và ma trận Cđược tạo ra sẽ có số hàng = số hàng A và số cột = số cột B.

public MaTran Nhan(MaTran A, MaTran B) {

Trang 22

Giả sử với ma trận vuông A cấp n có phần tử a ij.

B1: Biến đổi ma trận vuông A thành ma trận tam giác trên

B1.1: Lặp i = 1…n-:

B1.1.1: Nếu a ij == 0:

B1.1.1.1: Tìm j sao cho a ij  0, j = i+1…n

B1.1.1.2: Nếu j<= n thì hoán đổi dòng i và dòng j cho nhauB1.1.1.3: Ngược lại kết thúc vì dữ liệu không hợp lệ

X maTran [i][k] += X maTran [j][k];

X maTran [j][k] = X maTran [i][k] - X maTran [j][k];

X maTran [i][k] -= X maTran [j][k];

Trang 24

B3.3: ++x

B4: Nếu i + j lẻ trả về kết quả DinhThuc(temp);

B5: Nếu không, trả về kết quả - DinhThuc(temp);

public double PhanTu_MaTran_PhuHop(MaTran B, int i, int j) {

public MaTran ChuyenVi(MaTran C) {

} }

return temp;

}

Trang 25

trận B không không phải ma trận vuông!" );

}

return C;

}

Trang 26

1.3.7 Chương trình Client

1.3.7.1 Xử lý khi yêu cầu tính toán ma trận:

Thuật toán:

B1: Kiểm tra đã có dữ liệu để xử lý chưa

B2: Kiểm tra phép toán nhập vào có đúng đắn

B3: Tạo socket kết nối đến server có địa chỉ IP và cổng cho trước

B4: Tạo đối tượng dạng thread để xử lý kết nối với server

Cài đặt:

1.3.7.2 Gửi ma trận lên Server:

operator = jtfOperator getText().trim();

if ( operator charAt(0) == '+' || operator charAt(0) == '-'

|| operator charAt(0) == '*'

|| operator charAt(0) == '/' ) {

} catch (NumberFormatException e) { } catch (ConnectException e) {

} catch (IOException e) { }

Trang 27

B5: Duyệt tất cả phần tử ma trận từ trái qua phải, từ trên xuống dưới:

B5.1: Gửi phần tử ma trận

B5.2: Chờ phản hồi

Cài đặt:

1.3.7.3 Thực hiện phép toán và nhận kết quả

public void GuiMaTran(MaTran X) throws IOException {

} }

}

public void PhepToan() {

try {

/* Nhan ket qua */

ketQua = new MaTran(m, n);

Trang 28

1.3.7.4 Lớp Thread xử lý việc truyền ma trận và nhận kết quả:

class Process extends Thread {

/* Nhan ket qua */

ketQua = new MaTran(m, n);

} catch (IOException e) {}

}

public void GuiMaTran(MaTran X) throws IOException {

Trang 29

1.3.8 Chương trình Server:

1.3.8.1 Xử lý yêu cầu của Client kết nối đến:

Thuật toán:

B1: Dùng ServerSocket lắng nghe tại cổng cho sẵn

B2: Lặp liên tục để chờ yêu cầu kết nối từ Client:

B2.1: Nhận yêu cầu kết nối từ 1 Client:

B2.2: Tạo luồng vào ra nối với socket kết nối với Client

// Các thay đổi về giao diện }

}

}

public Server() {

Trang 30

1.3.8.2 Nhận ma trận Client gửi đến:

B5: Tạo ma trận với số hàng, số cột vừa nhận

B6: Lần lượt nhận các phần tử của ma trận từ trái qua phải, từ trên xuống dưới Mỗi lần nhận thànhcông gửi phản hồi

Trang 31

1.3.8.3 Gửi kết quả cho Client: Thuật toán:

// Gui ma tran

} }

} } catch (IOException e) {}

}

Trang 32

1.3.9 Demo

Trang 34

CHƯƠNG 2: BÀI TẬP LÀM THÊM

2.1 ĐỀ BÀI

Client gửi cho Server vào danh sách n phòng và m giám thị, và k giám thị sẽ coi thi Sao cho sốgiám thị sẽ coi thi phải lớn hơn 2 lần số phòng và bé hơn hoặc bằng m giám thị Server chia ngẫu nhiên2n giám thị vào n phòng, số giám thị còn lại là giám thị hành lang

Điều kiện chia sao cho không có giám thị nào coi 1 phòng 2 lần và không giám thị nào coi cùngvới nhau hơn 1 lần

Client có thể thêm, sửa xóa vào danh sách giám thị

Dữ liệu đầu vào và đầu ra là file Excel

2.2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO

2.2.1 Chuẩn bị

File excel có 2 sheet, sheet đầu tiên là danh sách phòng, sheet thứ 2 là danh sách giám thị:

- Trong danh sách phòng có trường: “Phòng”

- Trong danh sách giám thị có các trường: “MGV”, “Họ tên”, “Ngày sinh”, “Đơn vị công tác”

Dữ liệu đọc vào được Client lưu trữ trong các mảng và danh sách:

2.2.2 Tìm kiếm trong danh sách

Để thuận tiện, ta sử dụng 1 danh sách số Integer để lưu vị trí của các bộ dữ liệu đúng với kết quảtìm kiếm Khi truy xuất, chỉ cần truy cập vào danh sách số Integer này để ánh xạ vào danh sách củagiáo viên hoặc phòng để lấy dữ liệu

Thuật toán:

B1: Lấy từ khóa tìm kiếm

B3: Loại bỏ các khoảng trắng trước và sau từ khóa và chuyển từ khóa thành chuỗi thường

B2: Nếu chọn danh sách phòng để tìm kiếm:

B2.1: Duyệt danh sách từ trên xuống dưới:

B2.2.1: Chuyển tên phòng thành chuỗi thường và kiểm tra với từ khóa

B2.2.2: Nếu đúng, lưu vị trí của bộ dữ liệu vào kq

B2.2: Hiển thị dữ liệu ra bảng

B3: Nếu chọn danh sách giáo viên:

B2.1: Duyệt danh sách từ trên xuống dưới:

List<Integer> kq ;

Ngày đăng: 28/09/2019, 11:41

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w