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

Tải bản đầy đủ (.docx) (52 trang)
  1. Trang chủ
  2. >>
  3. Cao đẳng - Đại học
  4. >>
  5. Công nghệ thông tin
BÁO CÁO THỰC HÀNH LẬP TRÌNH MẠNG DÙNG NGÔN NGỮ LẬP TRÌNH JAVA

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (731.11 KB, 52 trang )

ĐẠI HỌC ĐÀ NẴNGTRƯỜNG ĐẠI HỌC BÁCH KHOAKHOA CÔNG NGHỆ THÔNG TINTel. (84-511) 736 949, Fax. (84-511) 842 771Website: itf.ud.edu.vn, E-mail: BÁO CÁO THỰC HÀNHLẬP TRÌNH MẠNGGVHD:SINH VIÊN :LỚP :MSSV:NHÓM:ThS.NGUYỄN VĂN NGUYÊNBÙI TẤN VIỆT10T210215210116611BĐÀ NẴNG, 3/2014Mục LụcChương 1: CÁC BÀI TẬP THỰC HÀNH.......................................................................................................11.1 BÀI THỰC HÀNH BUỔI 1..................................................................................................................11.1.1 Bài tập 1..........................................................................................................................................11.1.2 Bài tập 2..........................................................................................................................................31.2 BÀI THỰC HÀNH BUỔI 2..................................................................................................................61.2.1 Đề bài:............................................................................................................................................61.2.2 Phần chương trình Client:...............................................................................................................61.2.3 Phần chương trình Server:..............................................................................................................71.2.4 Phần chương trình xử lý của Server:..............................................................................................71.2.5 Phần chương trình xử lý biểu thức:................................................................................................81.3 BÀI THỰC HÀNH BUỔI 3................................................................................................................141.3.1 Đề bài............................................................................................................................................141.3.2 Tạo các class tính toán ma trận.....................................................................................................141.3.3 Nhập ma trận:...............................................................................................................................141.3.4 Cộng, trừ ma trận..........................................................................................................................151.3.5 Nhân 2 ma trận.............................................................................................................................161.3.6 Chia 2 ma trận..............................................................................................................................171.3.7 Chương trình Client......................................................................................................................221.3.8 Chương trình Server:....................................................................................................................251.3.9 Demo............................................................................................................................................28Chương 2: BÀI TẬP LÀM THÊM................................................................................................................302.1 ĐỀ BÀI................................................................................................................................................302.2 CHƯƠNG TRÌNH THÊM, SỬA, XÓA DANH SÁCH ĐẦU VÀO...................................................302.2.1 Chuẩn bị........................................................................................................................................302.2.2 Tìm kiếm trong danh sách............................................................................................................302.2.3 Sửa dữ liệu....................................................................................................................................312.2.4 Xóa dữ liệu...................................................................................................................................332.2.5 Thêm dữ liệu.................................................................................................................................342.2.6 Kiểm tra dữ liệu............................................................................................................................362.3 TRUYỀN NHẬN dỮ LIỆU GIỮA CLIENT – SERVER...................................................................372.3.1 Bên Client.....................................................................................................................................37Page | 12.3.2 Bên Server....................................................................................................................................402.4 XỬ LÝ CỦA CLIENT.........................................................................................................................422.5 XỬ LÝ CỦA SERVER........................................................................................................................432.6 THUẬT TOÁN PHÂN CÔNG GIÁO VIÊN COI THI.......................................................................442.6.1 Lưu danh sách giáo viên và phòng thi..........................................................................................442.6.2 Sắp xếp giám thị...........................................................................................................................442.7 DEMO..................................................................................................................................................46Page | 2LỜI NÓI ĐẦULậ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 doanhnghiệ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ônngữ 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ừ khira đờ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ơnnhiều so với các ngôn ngữ khác.Page | 3CHƯƠNG 1: CÁCBÀI TẬP THỰC HÀNH1.1 BÀI THỰC HÀNH BUỔI 11.1.1 Bài tập 11.1.1.1 Đề bài:Dùng Java xây dựng chương trình lấy dữ liệu sinh viên từ Access và xuất ra bảng.1.1.1.2 Thuật toán:B1: Nạp trình điều khiển:Lớp DriverManager chịu trách nhiệm nạp driver và tạo kết nối đến csdl: Class.forName(String)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();String sql = "Select * from SinhVien";ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql);ResultSetMetaData rsmd = rs.getMetaData();B4: Lấy số cột của bảng và tên các cột lưu vào mảng Object header[];B5: Lấy số dòng trong bảng:B5.1: Biến rows = 0;B5.2: Di chuyển tới hàng tiếp theo trong bảng, mỗi lần di chuyển thì tăng rows lên 1. Lặp chođến khi hết dòng.B6: Tạo mảng dữ liệu 2 chiều có số hàng và số cột như trong bảng Access:Object[][] data = new Object[rows][numberOfColumns];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ị.1.1.1.3 Cài đặtimportimportimportimportimportimportimportimportimportjava.sql.Connection;java.sql.DriverManager;java.sql.ResultSet;java.sql.ResultSetMetaData;java.sql.SQLException;java.sql.Statement;javax.swing.JFrame;javax.swing.JScrollPane;javax.swing.JTable;Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 1Báo cáo thực hành lập trình mạng2014public class Database {public static void main(String arg[]) {Object header[];Object data[][];int rows, i, j;try {Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connection con = DriverManager.getConnection("jdbc:odbc:testDB");Statement stmt = (java.sql.Statement) con.createStatement();String sql = "Select * from SinhVien";ResultSet rs = ((java.sql.Statement) stmt).executeQuery(sql);ResultSetMetaData rsmd = rs.getMetaData();int numberOfColumns = rsmd.getColumnCount();header = new Object[numberOfColumns];for (j = 1; j = DoUuTien(s)) {resultList.add(stack.pop());}stack.push(s);} else if (s.equals("(")) { // '('stack.push(s);} else if (s.equals(")")) { // ')'// Lấy tất cả toán tử trong ngăn xếp cho đến khi gặp '('while (!stack.peek().equals("("))resultList.add(stack.pop());stack.pop();} else { // Toán hạngresultList.add(s);}}while (!stack.isEmpty()) {// Đưa các toán tử còn lại trong ngăn xếp vào kết quảresultList.add(stack.pop());}return resultList;}public int DoUuTien(String toanTu) {if (toanTu.equals("+") || toanTu.equals("-"))return 1;if (toanTu.equals("*") || toanTu.equals("/"))return 2;if (toanTu.equals("sin") || toanTu.equals("cos")|| toanTu.equals("tan") || toanTu.equals("cot"))return 3;return 0;}-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;B2: Nếu gặp toán tử:B2.1: Nếu là toán tử 1 ngôi thì pop 1 toán hạng ra khỏi ngăn xếp, push kết quả của toán hạngvới toán tử đó vào ngăn xếp.B2.2: Nếu là toán tử 2 ngôi thì pop 2 toán hạng ra khỏi ngăn xếp, push kết quả của 2 toán hạngvới toán tử đó vào ngăn xếp.B3: Quá trình tính kết thúc khi con số cuối cùng còn lại trong ngăn xếp chính là giá trị của biểu thứcđó.Ví dụ: Tính biểu thức: 3 4 sin 2 * +Page 10Phần tửThao tácStack3Push 334Push 434Tính sin(4), push hết quả3 [sin(4)]2Push 23 [sin(4)] 2*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]sin1.2.5.5 Cài đặt:public double TinhToan(String str) {ArrayList<String> hauTo = ChuyenDoi_HauTo(str);Stack<String> stack = new Stack<String>();for (String token : hauTo) {int priority = DoUuTien(token);if (priority == 3) { // toán tử: sin cos tan cotString o = stack.pop();stack.push(Double.toString(TinhLuongGiac(token, o)));} else if (priority == 1 || priority == 2) {String o2 = stack.pop();String o1 = stack.pop();stack.push(Double.toString(Tinh(token, o1, o2)));} else {stack.push(token);}}}return Double.parseDouble(stack.pop());public double TinhLuongGiac(String toanTu, String toanHang) {if (toanTu.equals("sin")) {return sin(Double.parseDouble(toanHang));}if (toanTu.equals("cos")) {return cos(Double.parseDouble(toanHang));}if (toanTu.equals("tan")) {return (sin(Double.parseDouble(toanHang)) / cos(Double.parseDouble(toanHang)));}if (toanTu.equals("cot")) {return (cos(Double.parseDouble(toanHang)) / sin(Double.parseDouble(toanHang)));}return 0;}public double Tinh(String toanTu, String toanHang1, String toanHang2) {if (toanTu.equals("+")) {return Double.parseDouble(toanHang1) +Double.parseDouble(toanHang2);}Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 11Báo cáo thực hành lập trình mạng2014if (toanTu.equals("-")) {return Double.parseDouble(toanHang1) Double.parseDouble(toanHang2);}if (toanTu.equals("*")) {return Double.parseDouble(toanHang1) *Double.parseDouble(toanHang2);}if (toanTu.equals("/")) {return Double.parseDouble(toanHang1) /Double.parseDouble(toanHang2);}return 0;}-Tính lượng giác sin(x):Thuật toán:Ta có công thức triển khai tính sin(x):Ta sử dụng 1 biến temp để tính giá trị từng phân tử, sau đó cộng vào kết quả chung, kết quả tínhđược của phần tử trước sẽ được sử dụng để tính tiếp phần tử phía sau, thuật toán được triển khai theocông thức: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:Cài đặt: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;}-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):Page 12Ta sử dụng 1 biến temp để tính giá trị từng phân tử, sau đó cộng vào kết quả chung, kết quả tínhđược của phần tử trước sẽ được sử dụng để tính tiếp phần tử phía sau, thuật toán được triển khai theocông thức: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:Cài đặt:public double cos(double x) {double ketQua = 0;double temp = 1, i = 0;do {ketQua += temp;temp = (-1) * temp * x * x / ((++i) * (++i));} while (temp > 10E-10 || temp < -10E-10);return ketQua;}-Tính lượng giác tan(x) và cot:Thuật toán:Tan(x) và cot(x) được suy ra từ sin(x) và cos(x) từ công thức:1.2.5.6 Demo:Chương trình Client:1.3 BÀI THỰC HÀNH BUỔI 31.3.1 Đề bàiGử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.Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 13Báo cáo thực hành lập trình mạng20141.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:class MaTran {double maTran[][];int n, m; // Số dòng, số cộtpublicpublicpublicpublicMaTran(int dong, int cot) {}MaTran(File file){}void Nhap_MaTran() {}void In_MaTran() {}}b) Lớp PhepToan_MaTran được định nghĩa như sau:public classpublicpublicpublicpublicpublicpublicpublicpublic}PhepToan_MaTran {MaTran Cong(MaTran A, MaTran B) {}MaTran Tru(MaTran A, MaTran B) {}MaTran Nhan(MaTran A, MaTran B) {}MaTran DoiDong(int i, int j, MaTran X) {}double DinhThuc(MaTran Ori) {}double PhanTu_MaTran_PhuHop(MaTran B, int i, int j) {}MaTran ChuyenVi(MaTran C) {}MaTran Chia(MaTran A, MaTran B) {}1.3.3 Nhập ma trận:Nhập bằng file: Trong file, các số ngăn cách nhau bởi kí tự tab - ‘\t’ - và mỗi hàng phân biệtnhau bởi enter.1.3.3.1 Thuật toán:B1: Lấy 1 file chỉ định.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;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):Page 14B6.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].B6.2.2: j++;B6.3: i++;1.3.3.2 Cài đặt:public void Nhap_MaTran(File file) {Reader in;BufferedReader br;String token[],temp;try {in = new InputStreamReader(new FileInputStream(file.getPath()), "UTF-8");br = new BufferedReader(in);temp = br.readLine();token = temp.split("\t");m = Integer.parseInt(token[0]);n = Integer.parseInt(token[1]);}}}}}}maTran = new double[m][n];for (int i = 0; i < m && (temp = br.readLine()) != null; i++) {token = temp.split("\t");for (int j = 0; j < token.length && j < n; j++)maTran[i][j] = Double.parseDouble(token[j]);}catch (NullPointerException e) {catch (FileNotFoundException e) {JOptionPane.showMessageDialog(null,"Không tìm thấy file", "Loi!",JOptionPane.ERROR_MESSAGE);catch (UnsupportedEncodingException e) {catch (NumberFormatException e) {catch (IOException e) {}1.3.4 Cộng, trừ ma trận1.3.4.1 Thuật toán:Giả sử có sẵn 2 ma trận A và B và ma trận C dùng để lưu kết quả. Phép toán cộng và trừ 2 matrận có thuật toán tương tự nhau, chỉ khác nhau dấu phép toán.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].B1.2: Cho i = 0. Lặp khi (i < số hàng):B1.2.1: Cho j = 0. Lặp khi (j < số cột):B1.2.1.1: C[i][j] = A[i][j] +/- B[i][j];B1.2.1.2: j++;Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 15Báo cáo thực hành lập trình mạng2014B1.2.2: i++;B2: Nếu không: 2 ma trận không thể thực hiện phép toán.1.3.4.2 Cài đặt:public MaTran Cong(MaTran A, MaTran B) {MaTran C = new MaTran(0, 0);if (A.n == B.n && A.m == B.m) {C = new MaTran(A.m, A.n);for (int i = 0; i < A.m; i++)for (int j = 0; j < A.n; j++)C.maTran[i][j] = A.maTran[i][j] + B.maTran[i][j];} else {System.out.println("Không thể thực hiện được phép cộng 2 ma trận vìkhác kích thước!");}return C;}public MaTran Tru(MaTran A, MaTran B) {MaTran C = new MaTran(0, 0);if (A.n == B.n && A.m == B.m) {C = new MaTran(A.m, A.n);for (int i = 0; i < A.m; i++)for (int j = 0; j < A.n; j++)C.maTran[i][j] = A.maTran[i][j] - B.maTran[i][j];} else {System.out.println("Không thể thực hiện được phép trừ 2 ma trận vìkhác kích thước!");}return C;}1.3.5 Nhân 2 ma trận1.3.5.1 Thuật toán:Giả sử có sẵn 2 ma trận A và B và ma trận C dùng để lưu kết quả. Phép toán nhân ma trận A vớima trận B.Phần tử C[i][k] của ma trận C được tính bằng công thức: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.B1: Nếu số cột ma trận A == số hàng ma trận B:B1.1: Tạo ma trận C[số hàng A][số cột B].B1.2: Cho i = 0. Lặp khi (i < số dòng A):B1.2.1: Cho k = 0. Lặp khi (k < số cột B):Page 16B1.2.1.1: C[i][k] = 0;B1.2.1.2: Cho j = 0. Lặp khi (j < số cột A):B1.2.1.2.1: C[i][k] += A[i][j] * B[j][k];B1.2.1.2.2: j++;B1.2.1.3: k++;B1.2.2: i++;B2: Nếu không: 2 ma trận không thể thực hiện phép nhân.1.3.5.2 Cài đặt:public MaTran Nhan(MaTran A, MaTran B) {MaTran C = new MaTran(0, 0);if (A.n == B.m) {C = new MaTran(A.m, B.n);for (int i = 0; i < A.m; i++)for (int k = 0; k < B.n; k++) {C.maTran[i][k] = 0;for (int j = 0; j < A.n; j++)C.maTran[i][k] += A.maTran[i][j] * B.maTran[j][k];}} else {System.out.println("Không thể thực hiện được phép trừ 2 ma trận vì sốcột ma trận A không bằng số hàng ma trận B!");}return C;}1.3.6 Chia 2 ma trậnTrong toán học, không có phép chia ma trận, nhưng ta có thể định nghĩa phép chia ma trậnthông qua phép nhân ma trận:Phép chia ma trận A cho ma trận B:1.3.6.1 Thuật toán:Giả sử có sẵn 2 ma trận A và B và ma trận C dùng để lưu kết quả. Phép toán chia ma trận A vớima trận B.Cách tìm ma trận khả nghịch thông qua ma trận :Trong đó:là định thức của ma trận B.là ma trận phụ hợp của B.Ma trận B phải là ma trận vuông cấp n.Ma trận B khả nghịch khi và chỉ khi định thức ma trận B != 0Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 17Báo cáo thực hành lập trình mạng2014Ma trận vuông B cấp n, phần tử . Ma trận phụ hợp của B kí hiệu là và được xác định.=Trong đó:là phần bù đại số của phần tử , nghĩa làMa trận là ma trận chuyển vị của ma trận Xlà ma trận cấp n - 1 có được từ ma trận B bằng cách bỏ hàng i và cột j của B.Ma trận chuyển vị bằng cách đổi hàng thành cột hoặc cột thành hàng của ma trận X.a) Tính định thức của 1 ma trận vuông:Ta chuyển ma trận vuông thành ma trận tam giác trên rồi tính tích đường chéo chính của ma trậntam giác đó.Giả sử với ma trận vuông A cấp n có phần tử aij.B1: Biến đổi ma trận vuông A thành ma trận tam giác trênB1.1: Lặp i = 1…n-:B1.1.1: Nếu aij == 0:public MaTranDoiDong(inti, intX) {B1.1.1.1:Tìm j sao choaij �j,0, MaTranj = i+1…nfor (int k = 0; k < X.n; k++) {X.maTran[i][k]+=hoánX.maTran[j][k];B1.1.1.2:Nếu j

Từ khóa » Nhân 2 Ma Trận Java