Tải bản đầy đủ (.doc) (22 trang)

Bài tập 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 (97.09 KB, 22 trang )

Thực hành Java
Phần I Java applet
1. Bài tập mẫu để hiểu các thành phần cơ bản của một Java-applet.
Mục đích: Học viên nắm đợc các thành phần cơ bản của một Applet đơn giản. Sau đó
dựa vào applet này phát triển các applet tơng tự.
Nội dung: Một applet có nhiệm vụ vẽ một hình chữ thập qua tâm applet.
Mã ch ơng trình mẫu :
import java.applet.*;
import java.awt.*;
public class MyApplet1 extends Applet
{
String text;
public void paint(Graphics g)
{
Dimension d = getSize();
g.setColor(Color.blue);
g.drawLine(0, d.height / 2, d.width -1, d.height /2);
g.drawLine(d.width / 2, 0, d.width / 2, d.height -1);
}
}
2. Dựa vào bài tập mẫu 1, viết một applet hiển thị đồ thị một hàm số.
Mục đích: Hiểu kỹ hơn applet ở bài tập 1 và làm quen với cách thể hiện chơng trình
trong Java.
Hàm số cần thể hiện đồ thị:
cos(x/5) + sin(x/7) + 2) * H / 4
với H là chiều cao của applet
Lời giải:
import java.applet.*;
import java.awt.*;
public class MyApplet1 extends Applet
{


double f(double x)
{
return (Math.cos(x/5) + Math.sin(x/7) + 2) * getSize().height / 4;
}
public void paint(Graphics g)
{
g.setColor(Color.blue);
for (int x = 0 ; x < getSize().width ; x++)
{
g.drawLine(x, (int)f(x), x + 1, (int)f(x + 1));
}
}
}
3. Bài tập mẫu sử dụng khả năng vẽ các chuỗi ký tự trên applet và khả năng truy
cập tham số truyền từ trang web cho applet.
Mục đích: Học viên có thể viết các applet hiển thị các chuỗi ký tự với kích cỡ font chữ
kiểu font chũ tuỳ chọn,và đọc các tham số từ trang Web truyền cho applet.
Nội dung: Applet hiển thị nội dung văn bản truyền qua tham số Text truyền cho applet
qua trang web. Nếu không có tham số này, chọn chuỗi hiển thị mặc định là VITTI.
Dòng chữ cần hiển thị đợc căn vào giữa applet.
Mã ch ơng trình mẫu :
import java.applet.*;
import java.awt.*;
public class MyApplet3 extends Applet
{
String text;
public void init()
{
text = getParameter("Text");
if (text==null) text="VITTI";

}
public void paint(Graphics g)
{
Font f = new Font("Helvetica", Font.BOLD, 20);
g.setFont(f);
FontMetrics fm = g.getFontMetrics(f);
g.setColor(Color.red);
g.drawString(text,
(getSize().width - fm.stringWidth(text))/2,
(getSize().height - fm.getHeight())/2);
}
}
4. Dựa vào bài mẫu 3, viết một applet hiển thị một đoạn văn bản truyền cho
applet qua trang Web, và chuỗi ký tự đợc hiển thị trên đờng chéo.
Mục đích: Hiểu kỹ hơn applet ở bài tập 3 và làm quen với cách thể hiện chơng trình
trong Java.
Hàm số của đờng chéo hiển thị chuỗi ký tự
y = 300 - x
Lời giải:
import java.awt.*;
public class MyApplet4 extends Applet
{
String text;
int f(int x)
{
return 300-x;
}
public void init()
{
text = getParameter("Text");

if (text==null) text="VITTI";
}
public void paint(Graphics g)
{
Font f = new Font("Helvetica", Font.BOLD, 20);
g.setFont(f);
FontMetrics fm = g.getFontMetrics(f);
g.setColor(Color.red);
int a=100;
for (int i=0;i<text.length();i++)
{
Character ch=new Character(text.charAt(i));
g.drawString(ch.toString(), a, f(a));
a+=fm.charWidth(text.charAt(i));
}
}
}
5. Bài tập mẫu thẻ hiện khả năng tơng tác với ngời sử dụng của một applet
Mục đích: Học viên biết cách xây dựng một applet có khả năng tơng tác với NSD qua
các đối tợng nh nút bấm (button), hộp văn bản (textbox), Hiểu đợc cách lập trình cho
các đối tợng tơng tác này.
Nội dung: Applet có các hộp thoại cho phép NSD nhập hai toạ độ x và y và nhập một
chuỗi văn bản tuỳ ý qua 3 hộp thoại trong applet. Khi NSD ấn nút SetText, applet sẽ
hiển thị chuỗi văn bản đã nhập trên applet tại toạ độ (x,y)
Mã ch ơng trình mẫu :
import java.applet.*;
import java.awt.*;
public class MyApplet5 extends Applet
{
public void init()

{
Panel p = new Panel();
p.setLayout(new FlowLayout());
putText = new Button("Set Text");
p.add(putText);
xField = new TextField("0", 3);
p.add(xField);
yField = new TextField("0", 3);
p.add(yField);
contentField = new TextField("Vien DTCNTT",15);
p.add(contentField);
paintCanvas = new PaintCanvas();
setLayout(new BorderLayout());
add("Center", paintCanvas);
add("South", p);
}


public boolean action(Event evt, Object arg)
{
if (arg.equals("Set Text"))
{
paintCanvas.setData(
Integer.parseInt(xField.getText()),
Integer.parseInt(yField.getText()),
contentField.getText());
paintCanvas.repaint();
}
else return false;
return true;

}

private TextField xField, yField;
private TextField contentField;
private Button putText;
private PaintCanvas paintCanvas;
private Panel p;
}
class PaintCanvas extends Canvas
{
public void paint(Graphics g)
{
g.setColor(Color.yellow);
g.fillRect(0,0,getSize().width, getSize().height);
g.setColor(Color.red);
g.drawString(textContent, x, y);
}
public void setData(int x, int y, String text)
{
this.x = x;
this.y = y;
textContent = text;
}
private int x,y;
private String textContent;
}
6. Bài tập mẫu thể hiện khả năng điều khiển chuột trong một applet.
Mục đích: Học viên biết cách chặn và lập trình các sự kiện liên quan đến con chuột để
có thể tự xây dựng các ứng dụng tơng tác sử dụng chuột.
Nội dung: Applet hiển thị toạ độ x,y của con chuột trong khi NSD di chuột trên applet.

Mã ch ơng trình mẫu :
import java.applet.*;
import java.awt.*;
public class MyApplet6 extends Applet
{

public void paint(Graphics g)
{
g.drawString(Integer.toString(x),10,10);
g.drawString(Integer.toString(y),10,30);
}

public boolean mouseMove(Event evt, int x, int y)
{
this.x = x;
this.y = y;
repaint();
return true;
}

private int x,y;
}
7. Bài tập áp dụng cả 2 bài 5,6 để xây dựng một applet chặn các sự kiện của
chuột và hiển thị nội dung văn bản tại toạ độ chuột.
Mục đích: Học viên hiểu rõ 2 bài tập 5,6 để xây dựng một bài tập kết hợp nội dung cả 2
bài trên.
Nội dung: Applet có khả năng hiển thị toạ độ con chuột trong 2 hộp thoại khi NSD di
chuột trong applet. Khi NSD ấn chuột trong applet, applet sẽ hiển thị một chuỗi văn
bản tại vị trí ấn chuột. Chuỗi văn bản này NSD có thể tuỳ biến qua một hộp thoại cho
phép nhập liệu.

Lời giải:
import java.applet.*;
import java.awt.*;
public class MyApplet7 extends Applet
{
public void init()
{
Panel p = new Panel();
p.setLayout(new FlowLayout());
xField = new TextField("", 3);
p.add(xField);
yField = new TextField("", 3);
p.add(yField);
contentField = new TextField("Vien DTCNTT",15);
p.add(contentField);
paintCanvas = new MyPaintCanvas();
paintCanvas.setData(xField, yField, contentField);
setLayout(new BorderLayout());
add("Center", paintCanvas);
add("South", p);
}

private TextField xField, yField, contentField;
private Button putText;
private MyPaintCanvas paintCanvas;
private Panel p;
}
class MyPaintCanvas extends Canvas
{


public void setData(TextField x, TextField y, TextField t)
{
xField = x;
yField = y;
text = t;
}
public void paint(Graphics g)
{
g.setColor(Color.yellow);
g.fillRect(0,0,getSize().width, getSize().height);
g.setColor(Color.red);
g.drawString(text.getText(), x, y);
}
public boolean mouseMove(Event evt, int x, int y)
{
xField.setText(Integer.toString(x));
yField.setText(Integer.toString(y));
return true;
}
public boolean mouseDown(Event evt, int x, int y)
{
this.x = x;
this.y = y;
repaint();
return true;
}
int x,y;
TextField xField, yField, text;
}
8. Bài tập mẫu thể hiện khả năng tơng tác với NSD qua hộp thoại (Dialog) từ

trong một applet.
Mục đích: Học viên biết cách xây dựng các applet tơng tác với các hộp thoại để mở
rộng hơn nữa khả năng của applet.
Nội dung: Applet có 1 chuỗi văn bản và 1 nút bấm. Khi NSD ấn nút này, một hộp thoại
hiện ra. Khi NSD đóng hộp thoại này lại, chuỗi văn bản trên applet thay đổi để báo
applet biết NSD đã đóng hộp thoại.
Mã ch ơng trình mẫu :
import java.applet.*;
import java.awt.*;
public class MyApplet8 extends Applet
{
public void init()
{
Panel p = new Panel();
p.setLayout(new FlowLayout());
p.add(message = new Label("Press this button "));
p.add(new Button("Open About Dialog"));
setLayout(new BorderLayout());
add("North", p);
}
public boolean action(Event evt, Object arg)
{
if(arg.equals("Open About Dialog"))
{
AboutDialog ab = new AboutDialog(this);
ab.show();
}
else return false;
return true;
}

public void processData()
{
message.setText("Button was pressed.");
}
Frame p;
Label message;
}
class AboutDialog extends Frame
{ public AboutDialog(MyApplet8 parent)
{
this.parent = parent;
setTitle("About MyApplet8");
Panel p1 = new Panel();
p1.setLayout(new GridLayout(2,1));
p1.add(new Label("Vien Dao tao CNTT"));
p1.add(new Label("Ha Noi, 1/2000"));
add("Center", p1);
Panel p2 = new Panel();
p2.add(new Button("Ok"));
add("South", p2);
setSize(220, 150);
}
public boolean action(Event evt, Object arg)
{
if (arg.equals("Ok"))
{
parent.processData();
dispose();
return true;
}

return false;
}
public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY)
System.exit(0);
return super.handleEvent(evt);
}
MyApplet8 parent;
}
9. áp dụng bài tập 8 để xây dựng một applet tơng tác với hộp thoại.
Mục đích: Hiểu rõ cách xây dựng một applet cho phép NSD tơng tác với hộp thoại và
nhận thông tin từ hộp thoại chuyển về cho applet.
Nội dung: Applet có một nút bấm và một hộp văn bản. Nút bấm sẽ cho phép NSD nhập
thông tin vào các dòng văn bản của hộp thoại. Sau khi đóng hộp thoại, hộp văn bản trên
Applet sẽ hiển thị nội dung các dòng văn bản NSD đã nhập, chứng tỏ có đã truyền đợc
thông tin từ hộp thoại đến applet.
Lời giải:
import java.applet.*;
import java.awt.*;
public class MyApplet9 extends Applet
{
public void init()
{
Panel p = new Panel();
p.setLayout(new GridLayout(2,1));
p.add(new Button("Open About Dialog"));
p.add(message = new TextField("",30));
setLayout(new BorderLayout());
add("North", p);

}
public boolean action(Event evt, Object arg)
{
if(arg.equals("Open About Dialog"))
{
AboutDialog ab = new AboutDialog(this);
ab.show();
}
else return false;
return true;
}
public void processData(String name, String place)
{
message.setText(name + " is living in " + place);
}
Frame p;
TextField message;
}
class AboutDialog extends Frame
{ public AboutDialog(MyApplet9 parent)
{
this.parent = parent;
setTitle("About MyApplet8");
Panel p1 = new Panel();
p1.setLayout(new GridLayout(2,2));
p1.add(new Label("Enter name"));
p1.add(name = new TextField("", 10));
p1.add(new Label("Place"));
p1.add(place = new TextField("", 10));
add("Center", p1);

Panel p2 = new Panel();
p2.add(new Button("Ok"));
add("South", p2);
setSize(220, 150);
}
public boolean action(Event evt, Object arg)
{
if (arg.equals("Ok"))
{
parent.processData(name.getText(), place.getText());
dispose();
return true;
}
return false;
}
public boolean handleEvent(Event evt)
{
if (evt.id == Event.WINDOW_DESTROY)
System.exit(0);
return super.handleEvent(evt);
}
MyApplet9 parent;
TextField name, place;
}
Phần II JDBC application
Nhắc lại về công nghệ JDBC và khả năng kết nối CSDL từ ngôn ngữ Java
- JDBC driver
- Pure JDBC driver
- JDBC-ODBC bridge
- Package hỗ trợ JDBC trong Java : java.sql

- Các phiên bản JDBC phổ biến : JDBC 1 và JDBC 2.0
- Cách cấu hình một ODBC-DSN trên Windows để sử dụng kết nối JDBC-ODBC try
xuất dữ liệu.
1. Bài tập mẫu thẻ hiện khả năng truy xuất dữ liệu qua kết nối JDBC-ODBC từ
một ứng dụng Java.
Mục đích: Học viên biết cách kết nối một ứng dụng Java với một CSDL qua kết nối
trung gian ODBC sử dụng JDBC. Thể hiện đợc khả năng truy xuất (query) và cập nhật
dữ liệu (update) sử dụng Java.
Nội dung: Hiển thị nội dung thông tin của một CSDL về bảng lơng ( CSDL Access) và
cập nhật thêm thông tin vào CSDL này.
Mã ch ơng trình mẫu :
import java.sql.*;
class jdbc1
{
public static void main(String args[])
{
String url = "jdbc:odbc:Emp";
String query = "SELECT Name,Address from BangLuong";
String update = "INSERT INTO BangLuong VALUES ('Pham Ba Hung','TP.Hai Phong',3000)";
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
java.sql.Connection con = DriverManager.getConnection(url, null, null);
checkForWarning(con.getWarnings());
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
dispResultSet(rs);
int i = stmt.executeUpdate(update);
rs = stmt.executeQuery(query);
dispResultSet(rs);

rs.close();
stmt.close();
con.close();
}
catch(SQLException ex)
{
reportSQLError(ex);
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}

private static void reportSQLError(SQLException ex)
{
System.out.println("\n*** SQLException caught ***\n");
while(ex != null)
{
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("Message: " + ex.getMessage());
System.out.println("Vendor: " + ex.getErrorCode());
ex = ex.getNextException();
System.out.println("");
}
}
private static boolean checkForWarning(SQLWarning warn) throws SQLException
{
boolean rc = false;
if(warn != null)

{
System.out.println("\n *** Warning ***\n");
rc = true;
while(warn != null)
{
System.out.println("SQLState: " + warn.getSQLState());
System.out.println("Message: " + warn.getMessage());
System.out.println("Vendor: " + warn.getErrorCode());
System.out.println("");
warn = warn.getNextWarning();
}
}
return rc;
}
private static void dispResultSet(ResultSet rs) throws SQLException
{
int i;
ResultSetMetaData rsmd = rs.getMetaData();
int numCols = rsmd.getColumnCount();
System.out.println("+++++");
while(rs.next())
{
for(i=1; i<=numCols; i++)
{
if(i > 1) System.out.print(", ");
System.out.print(rs.getString(i));
}
System.out.println("");
}
}

}
2. Dựa vào bài 1, xây dựng một ứng dụng hiển thị thông tin về cơ sở dữ liệu trên
với giao diện GUI.
Mục đích: Học viên hiểu cách truy xuất dữ liệu (query) từ Java và áp dụng vào một ch-
ơng trình gần với thực tế.
Nội dụng: Hiển thị thông tin về bảng lơng của các cá nhân trong CSDL. Cho phép
duyệt xem từng bản ghi trong CSDL một cách lần lợt.
Lời giải:
import java.awt.*;
import java.sql.*;
public class jdbc2 extends Frame
{
String url = "jdbc:odbc:Emp";
String query = "SELECT Name,Address,Salary from BangLuong";
ResultSet rs;
Connection con;
Statement stmt;
TextField name, address, salary;
public jdbc2()
{
setTitle("JDBC Testing 2");
Panel p1 = new Panel();
p1.setLayout(new FlowLayout());
p1.add(new Button("First"));
p1.add(new Button("Next"));
p1.add(new Button("Quit"));
add("South", p1);
Panel p2 = new Panel();
p2.setLayout(new GridLayout(3,2));
p2.add(new Label("Name"));

p2.add(name = new TextField("",25));
p2.add(new Label("Address"));
p2.add(address = new TextField("",25));
p2.add(new Label("Salary"));
p2.add(salary = new TextField("",10));
add("Center", p2);
}
public void finalize()
{
try
{
rs.close();
stmt.close();
con.close();
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
private void reportSQLError(SQLException ex)
{
System.out.println("\n*** SQLException caught ***\n");
while(ex != null)
{
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("Message: " + ex.getMessage());
System.out.println("Vendor: " + ex.getErrorCode());
ex = ex.getNextException();
System.out.println("");

}
}
public void openDatabase()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url, null, null);
checkForWarning(con.getWarnings());
stmt = con.createStatement();
rs = stmt.executeQuery(query);
dispResultSet(rs);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
private static boolean checkForWarning(SQLWarning warn) throws SQLException
{
boolean rc = false;
if(warn != null)
{
System.out.println("\n *** Warning ***\n");
rc = true;
while(warn != null)

{
System.out.println("SQLState: " + warn.getSQLState());
System.out.println("Message: " + warn.getMessage());
System.out.println("Vendor: " + warn.getErrorCode());
System.out.println("");
warn = warn.getNextWarning();
}
}
return rc;
}
private void dispResultSet(ResultSet rs) throws SQLException
{
if (rs.next())
{
name.setText(rs.getString("Name"));
address.setText(rs.getString("Address"));
salary.setText(rs.getString("Salary"));
}
}
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return super.handleEvent(evt);
}
public boolean action(Event evt, Object arg)
{
if (arg.equals("First"))
{
try
{
rs = stmt.executeQuery(query);

dispResultSet(rs);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
else if (arg.equals("Next"))
{
try
{
dispResultSet(rs);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
else if (arg.equals("Quit")) System.exit(0);
else return false;
return true;
}

public static void main(String[] args)
{
jdbc2 f = new jdbc2();
f.resize(400, 150);
f.openDatabase();
f.show();
}

}
3. Dựa vào bài 1 và bài 2, bổ sung thêm tính năng cập nhật dữ liệu cho CSDL
Mục đích: Hiểu đợc bài 1 và 2, qua đó xây dựng một ứng dụng Java nhỏ có thể kết nội
và truy xuất, cập nhật DL nh các ứng dụng trong thực tế.
Nội dung: Ngoài khả năng duyệt bản ghi nh bài 2, cho phép NSD cập nhật dữ liệu
( thêm bản ghi). Kết thúc chế độ cập nhật, NSD có thể quay về chế độ duyệt.
Lời giải:
import java.awt.*;
import java.sql.*;
public class jdbc3 extends Frame
{
String url = "jdbc:odbc:Emp";
String query = "SELECT Name,Address,Salary from BangLuong";
ResultSet rs;
Connection con;
Statement stmt;
TextField name, address, salary;
Button first, next, add, quit;
public jdbc3()
{
setTitle("JDBC Testing 3");
Panel p1 = new Panel();
p1.setLayout(new FlowLayout());
p1.add(first = new Button("First"));
p1.add(next = new Button("Next"));
p1.add(add = new Button("Add"));
p1.add(quit = new Button("Quit"));
add("South", p1);
Panel p2 = new Panel();
p2.setLayout(new GridLayout(3,2));

p2.add(new Label("Name"));
p2.add(name = new TextField("",25));
p2.add(new Label("Address"));
p2.add(address = new TextField("",25));
p2.add(new Label("Salary"));
p2.add(salary = new TextField("",10));
add("Center", p2);
}
public void finalize()
{
try
{
rs.close();
stmt.close();
con.close();
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
private void reportSQLError(SQLException ex)
{
System.out.println("\n*** SQLException caught ***\n");
while(ex != null)
{
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("Message: " + ex.getMessage());
System.out.println("Vendor: " + ex.getErrorCode());
ex = ex.getNextException();

System.out.println("");
}
}
public void openDatabase()
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection(url, null, null);
checkForWarning(con.getWarnings());
stmt = con.createStatement();
rs = stmt.executeQuery(query);
dispResultSet(rs);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
private static boolean checkForWarning(SQLWarning warn) throws SQLException
{
boolean rc = false;
if(warn != null)
{
System.out.println("\n *** Warning ***\n");
rc = true;

while(warn != null)
{
System.out.println("SQLState: " + warn.getSQLState());
System.out.println("Message: " + warn.getMessage());
System.out.println("Vendor: " + warn.getErrorCode());
System.out.println("");
warn = warn.getNextWarning();
}
}
return rc;
}
private void dispResultSet(ResultSet rs) throws SQLException
{
if (rs.next())
{
name.setText(rs.getString("Name"));
address.setText(rs.getString("Address"));
salary.setText(rs.getString("Salary"));
}
}
private void viewMode()
{
first.show();
next.show();
add.setLabel("Add");
quit.setLabel("Quit");
try
{
rs = stmt.executeQuery(query);
dispResultSet(rs);

}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
private void updateMode()
{
first.hide();
next.hide();
add.setLabel("OK");
quit.setLabel("Cancel");
clearFields();
}
private void clearFields()
{
name.setText("");
address.setText("");
salary.setText("0");
}
public boolean handleEvent(Event evt)
{ if (evt.id == Event.WINDOW_DESTROY) System.exit(0);
return super.handleEvent(evt);
}
public boolean action(Event evt, Object arg)
{
if (arg.equals("First"))
{
try
{

rs = stmt.executeQuery(query);
dispResultSet(rs);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
else if (arg.equals("Next"))
{
try
{
dispResultSet(rs);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}
else if (arg.equals("Add"))
{
updateMode();
}
else if (arg.equals("OK"))
{
updateDatabase();
clearFields();
}
else if (arg.equals("Cancel"))
{

viewMode();
}
else if (arg.equals("Quit")) System.exit(0);
else return false;
return true;
}
private void updateDatabase()
{
String update = "INSERT INTO BangLuong VALUES ('"+
name.getText() + "','" + address.getText()+"'," +
salary.getText()+")";
try
{
stmt.executeUpdate(update);
}
catch(SQLException ex)
{
reportSQLError(ex);
}
}

public static void main(String[] args)
{
jdbc3 f = new jdbc3();
f.resize(400, 150);
f.openDatabase();
f.show();
}
}


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

Tải bản đầy đủ ngay
×