Tải bản đầy đủ - 0 (trang)
Chương 1: CÁC BÀI TẬP THỰC HÀNH

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

Tải bản đầy đủ - 0trang

Báo cáo thực hành lập trình mạng



2014



public 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 <= numberOfColumns; j++) {

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

}

rows = 0;

while (rs.next())

rows++;

data = new Object[rows][numberOfColumns];

i = 0;

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

while (rs.next()) {

for (j = 1; j <= numberOfColumns; j++) {

data[i][j - 1] = rs.getObject(j);

i++;

}

rs.close();

stmt.close();

JFrame frame = new JFrame("Hiển thị cơ sở dữ liệu");

JTable tb = new JTable(data, header);

tb.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

JScrollPane jsp = new JScrollPane(tb);

frame.add(jsp);

frame.setVisible(true);

frame.setSize(300, 300);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}



Page 2



}



1.1.1.4 Demo

Dữ liệu trong Access



Dữ liệu xuất ra bảng:



1.1.2 Bài tập 2

1.1.2.1 Đề bài:

Dùng Java xây dựng giao diện của chương trình scan IP.



1.1.2.2 Cài đặt:

import java.awt.*;

import javax.swing.*;

public class ScanIP extends JFrame {

JTextField myIP, IP1_1, IP1_2, IP1_3, IP1_4, IP2_1, IP2_2, IP2_3, IP2_4;

JTextArea result;

JScrollPane jsp;

JButton scanbt, cancelbt, exitbt;

JRadioButton jrb1, jrb2, jrb3;

ButtonGroup bg;

JPanel pn, pn1, pn2, pn3, pn4, pn5;

public ScanIP(String a) {

super(a);

myIP = new JTextField("192.168.1.3");

myIP.setPreferredSize(new Dimension(200, 25));

myIP.setEditable(false);

pn1 = new JPanel(new FlowLayout(FlowLayout.CENTER));

pn1.setPreferredSize(new Dimension(550, 35));

pn1.add(new JLabel("Địa chỉ IP của máy: "));

pn1.add(myIP);

IP1_1 = new JTextField();

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

IP1_2 = new JTextField();

IP1_2.setPreferredSize(new Dimension(35, 25));



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 3



Báo cáo thực hành lập trình mạng



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));

pn2 = new JPanel(new FlowLayout(FlowLayout.CENTER));

pn2.setPreferredSize(new Dimension(550, 40));

pn2.add(new JLabel("Từ địa chỉ: "));

pn2.add(IP1_1);

pn2.add(new JLabel(":"));

pn2.add(IP1_2);

pn2.add(new JLabel(":"));

pn2.add(IP1_3);

pn2.add(new JLabel(":"));

pn2.add(IP1_4);

pn2.add(new JLabel(" Đến địa chỉ: "));

pn2.add(IP2_1);

pn2.add(new JLabel(":"));

pn2.add(IP2_2);

pn2.add(new JLabel(":"));

pn2.add(IP2_3);

pn2.add(new JLabel(":"));

pn2.add(IP2_4);

jrb1 = new JRadioButton("Sử dụng 16 thread", true);

jrb1.setPreferredSize(new Dimension(150, 35));

jrb2 = new JRadioButton("Sử dụng 32 thread");

jrb2.setPreferredSize(new Dimension(150, 35));

jrb3 = new JRadioButton("Sử dụng 64 thread");

jrb3.setPreferredSize(new Dimension(150, 35));

bg = new ButtonGroup();

bg.add(jrb1);

bg.add(jrb2);

bg.add(jrb3);

pn3 = new JPanel(new FlowLayout(FlowLayout.CENTER));

pn3.setPreferredSize(new Dimension(550, 35));

pn3.add(jrb1);

pn3.add(jrb2);

pn3.add(jrb3);

result = new JTextArea();

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

result.setEditable(false);

jsp = new JScrollPane(result,

JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,

JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

pn4 = new JPanel(new FlowLayout(FlowLayout.CENTER));

pn4.setPreferredSize(new Dimension(520, 170));

pn4.add(new JLabel("Trình hiển thị kết quả scan:"));

pn4.add(jsp);

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));



Page 4



2014



pn5 = new JPanel(new FlowLayout(FlowLayout.CENTER));

pn5.setPreferredSize(new Dimension(520, 170));

pn5.add(scanbt);

pn5.add(cancelbt);

pn5.add(exitbt);

pn = new JPanel(new FlowLayout(FlowLayout.CENTER));

pn.add(pn1);

pn.add(pn2);

pn.add(new JLabel("Lựa chọn số thread để thực hiện cơng việc"));

pn.add(pn3);

pn.add(pn4);

pn.add(pn5);

add(pn);

setTitle("Chương trình scan ip mạng lan");

setSize(550, 400);

setResizable(false);

setLocationRelativeTo(null);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setVisible(true);

}

public static void main(String arg[]) {

ScanIP tmp = new ScanIP("Scan ip");



}



}



1.1.2.3 Demo:



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 5



Báo cáo thực hành lập trình mạng



2014



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

1.2.1 Đề bài:

Sửa lại chương trình có sẵn để Client có thể gửi 1 biểu thức cho sẵn với các toán tử “+, -, *, /,

sin, cos, tan, cot” lên cho Server xử lý và Server trả về kết quả cho Client.



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

1.2.2.1 Thuật toán:

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ề.

B5: Hiển thị kết quả nhận về.



1.2.2.2 Cài đặt:

import

import

import

import



java.io.*;

java.net.*;

java.awt.*;

java.awt.event.*;



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 = "";

Socket socket;

DataOutputStream outputStream;

DataInputStream inputStream;

public client() throws UnknownHostException, IOException {

JFrame fr = new JFrame("Client");

fr.setSize(400, 200);

fr.setLayout(new GridLayout());

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");

pn.add(lbnhap);

pn.add(tfnhap);

pn.add(lbkq);

pn.add(tfkq);

pn1.add(bt1);

pn1.add(bt2);

pn.add(pn1);

fr.add(pn);

bt1.addActionListener(this);

bt2.addActionListener(this);

fr.show();



}



Page 6



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

outputStream = new DataOutputStream(socket.getOutputStream());

inputStream = new DataInputStream(socket.getInputStream());



@Override

public void actionPerformed(ActionEvent e) {

double nhan;

if (e.getSource() == bt1) {

try {

String s = tfnhap.getText();

outputStream.writeUTF(s);

nhan = inputStream.readDouble();

tfkq.setText("" + nhan);

} catch (UnknownHostException e1) {

} catch (IOException e1) {}

}

if (e.getSource() == bt2)

System.exit(0);

}



}



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

1.2.3.1 Thuật tố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:

import java.net.*;

public class server {

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

ServerSocket serverSocket = new ServerSocket(7777);

while (true) {

Socket socket = serverSocket.accept();

server_Process t = new server_Process(socket);

t.start();

}

}

}



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

1.2.4.1 Thuật tố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 tốn lấy kết quả.

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



1.2.4.2 Cài đặt:



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 7



Báo cáo thực hành lập trình mạng



2014



import java.io.*;

class server_Process extends Thread {

Socket socket;

public server_Process(Socket socket) {

this.socket = socket;

}

@Override

public void run() {

DataInputStream inputStream;

DataOutputStream outputStream;

double kq;

try {



inputStream = new DataInputStream(socket.getInputStream());

outputStream = new DataOutputStream(socket.getOutputStream());

while (true) {

String snhan;

try {

snhan = inputStream.readUTF();

TinhBieuThuc t = new TinhBieuThuc();

kq = t.TinhToan(snhan);

outputStream.writeDouble(kq);

} catch (IOException ex) {

Logger.getLogger(server_Process.class.getName()).log(

Level.SEVERE, null, ex);

}

}

} catch (IOException ex) {

Logger.getLogger(server_Process.class.getName()).log(Level.SEVERE,

null, ex);

}

}

}



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

1.2.5.1 Thuật tố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 tố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:



Page 8



B3.1: Chừng nào còn có một tốn tử O2 ở đỉnh ngăn xếp và độ ưu tiên của O1 ≤ độ ưu tiên của

O2 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 khi

lấ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ả tốn hạng (nếu có) từ ngăn xếp ra và ghi

vào chuỗi kết quả.

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

Phần tử



Thao tác



Stack



Chuỗi hậu tố



3



Ghi 3 vào kết quả



3



+



Push +



+



3



sin



Push sin



+ sin



3



(



Push (



+ sin (



3



4



Ghi 4 vào kết quả



+ sin (



34



)



Pop cho đến khi lấy

được ( ra khỏi ngăn

+ sin

xếp. Kết quả pop rag hi

vào kết quả



34



*



Pop sin ghi vào kết quả

+*

và push *



3 4 sin



2



Ghi 2 vào kết quả



3 4 sin 2



+*



Pop tất cả toán tử



3 4 sin 2 * +



1.2.5.3 Cài đặt:

public ArrayList ChuyenDoi_HauTo(String str) {

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

"cot" };

// Loại bỏ tất cả dấu cách

str = str.replaceAll("\\s", "");

// Tách biểu thức thành các phần tử

StringTokenizer tk = new StringTokenizer(str, "()+-*/", true);

// Danh sách lưu các phần tử

ArrayList tkList = new ArrayList();

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

List operatorList = Arrays.asList(toanTu);

// Tạo ngăn xếp

Stack stack = new Stack();

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

ArrayList resultList = new ArrayList();

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

while (tk.hasMoreTokens()) {

tkList.add(tk.nextToken());

}



Họ và tên: Bùi Tấn Việt – Lớp: 10T2 – Nhóm 11BPage 9



Báo cáo thực hành lập trình mạng



2014



// Chuyển đổi

for (String s : tkList) { // Lấy lần lượt các phần tử

if (operatorList.contains(s)) { // Toán tử

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

&& DoUuTien(stack.peek()) >= 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 { // Tốn hạng

resultList.add(s);

}

}

while (!stack.isEmpty()) {

// Đưa các tố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 tốn biểu thức hậu tố:



1.2.5.4 Thuật tốn:

Q trình tính tố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 tốn hạng (số hoặc là biến) thì push tốn hạng đó vào ngăn xếp;

B2: Nếu gặp tốn tử:

B2.1: Nếu là tốn tử 1 ngơi thì pop 1 tốn hạng ra khỏi ngăn xếp, push kết quả của toán hạng

với tốn tử đó vào ngăn xếp.

B2.2: Nếu là tốn tử 2 ngơi thì pop 2 tốn hạng ra khỏi ngăn xếp, push kết quả của 2 toán hạng

với toán tử đó vào ngăn xếp.

B3: Q 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 10



Phần tử



Thao tác



Stack



3



Push 3



3



4



Push 4



34



Tính sin(4), push hết quả



3 [sin(4)]



2



Push 2



3 [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]



sin



1.2.5.5 Cài đặt:

public double TinhToan(String str) {

ArrayList hauTo = ChuyenDoi_HauTo(str);

Stack stack = new Stack();

for (String token : hauTo) {

int priority = DoUuTien(token);

if (priority == 3) { // toán tử: sin cos tan cot

String 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 11



Báo cáo thực hành lập trình mạng



2014



if (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 tố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 tốn được triển khai theo

cơ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 tốn:

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



Page 12



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

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

Tải bản đầy đủ ngay(0 tr)

×