實驗八基于圖形用戶界面的JDBC程序開發(fā).doc
實驗4基于圖形用戶界面的JDBC程序開發(fā) (2)淮海工學院計算機科學系實驗報告書課程名:_ Java_題 目:_基于圖形用戶界面的JDBC程序開發(fā)班 級:_ _ 學 號:_ _ 姓 名:_ _ _評語:成績: 指導(dǎo)教師: 批閱時間: 年 月 日一、實驗?zāi)康氖炀氝\用GUI標準組件和布局管理器,正確合理地利用常用AWT和Swing組件進行圖形界面的設(shè)計;理解Java的事件處理機制,正確運用Java的事件處理機制及事件委托模型編寫圖形界面組件的事件處理程序;理解Java多線程機制,掌握線程使用方法。理解JDBC的數(shù)據(jù)庫訪問編程原理,正確利用JDBC技術(shù)編寫以數(shù)據(jù)庫應(yīng)用為核心的軟件系統(tǒng),并在設(shè)計中靈活運用之前所學的Java語言面向?qū)ο蟮木幊碳夹g(shù)。二、實驗環(huán)境操作系統(tǒng):windows 2000 或 Window XP集成開發(fā)環(huán)境:JDK1.6及以上版本三、實驗學時 2學時,必做實驗。四、實驗內(nèi)容(1) 進一步熟悉JavaGUI標準組件和布局管理器、正確合理地利用常用AWT和Swing組件進行圖形界面的設(shè)計;理解Java的事件處理機制,正確運用Java的事件處理機制及事件委托模型編寫圖形界面組件的事件處理程序;實踐程序調(diào)試方法、糾錯能力及編程規(guī)范性等;理解JDBC的數(shù)據(jù)庫訪問編程原理,正確利用JDBC技術(shù)編寫以各種數(shù)據(jù)庫應(yīng)用;(2) 按以下各題目具體要求調(diào)試或編寫相關(guān)算法程序五、實驗步驟與結(jié)果1 請按照以下功能要求編寫并調(diào)試相關(guān)程序(1) 請定義一個抽象的“科學圖書”類,其中包含1個公共的抽象方法:圖書介紹;1個屬性為:圖書類別 (字符串類型); (2) 定義一個“計算機圖書”子類(繼承于“科學圖書”類),其中包括2個域:出版社、定價;2個構(gòu)造方法: 一個為無參構(gòu)造方法,在該無參構(gòu)造方法中將“圖書類別”設(shè)置為“計算機圖書”,一個帶2個參數(shù)(出版社、定價);不少于2個成員方法:分別用來查看出版社、修改定價,圖書介紹文字可自編,并編寫輸出計算機圖書全部信息的toString()方法。(3) 編寫一個圖形用戶界面,用來測試能否正確創(chuàng)建計算機圖書類的對象、能否正常調(diào)用其方法,參考界面如下。必須實現(xiàn)的基本功能是:1)單擊圖中的“新增計算機圖書”按鈕,則可顯示出新增的計算機圖書信息(顯示信息的控件不限,用文本域、列表框、表格均可),要求添加的計算機圖書不少于2本,如下圖所示:圖1 運行截圖新增計算機圖書2)單擊圖中的“修改定價”按鈕,可修改其中某本圖書的定價,并在下方顯示出修改后的結(jié)果請按照實驗內(nèi)容具體要求完成相關(guān)設(shè)計與編程,實驗步驟;(1) 程序代碼import java.awt.*;import java.awt.event.*;class CM extends Frame implements ActionListenerCMBook start; /當做鏈表的開頭Panel 操作欄;Label 出版社,定價,顯示;TextField 出版社欄,定價欄;Button 新增計算機圖書,修改定價;TextArea 顯示內(nèi)容;CM()super("計算機圖書類操作圖形用戶界面");start=null;顯示=new Label();顯示內(nèi)容=new TextArea();顯示內(nèi)容.setSize(80,50);新增計算機圖書=new Button("新增計算機圖書");修改定價=new Button("修改定價");新增計算機圖書.addActionListener(this);修改定價.addActionListener(this);操作欄=new Panel();操作欄.setSize(60,5);出版社=new Label("出版社");定價=new Label("定價");出版社欄=new TextField(10);定價欄=new TextField(5);操作欄.add(出版社);操作欄.add(出版社欄);操作欄.add(定價);操作欄.add(定價欄);操作欄.add(新增計算機圖書);操作欄.add(修改定價);setTitle("計算機圖書類操作的圖形界面");add(操作欄,BorderLayout.NORTH);add(顯示內(nèi)容,BorderLayout.CENTER);add(顯示,BorderLayout.SOUTH);setBounds(300,300,500,500);setVisible(true);validate();public void actionPerformed(ActionEvent e)if(e.getSource()=新增計算機圖書)String one=出版社欄.getText();String two=定價欄.getText();if(Integer.parseInt(two)<0)顯示.setText("價格不能為負數(shù)");elseCMBook mid=new CMBook(one,Integer.parseInt(two);mid.next=start;start=mid;顯示內(nèi)容.append(mid.toString(); else if(e.getSource()=修改定價)int pricenew;CMBook point;String one,two,three;one=出版社欄.getText();two=定價欄.getText();point=start;while(true)if(point=null)顯示.setText("查找不到該類別");break;if(point.出版社.equals(one)point.定價=Integer.parseInt(two);顯示內(nèi)容.append("價格修改完成"+point.toString();break;elsepoint=point.next;abstract class Book String 圖書類別;abstract String 圖書介紹();class CMBook extends BookCMBook next; /額外增加一個引用String 出版社;int 定價;String 圖書介紹()return "書籍是人類進步的階梯"CMBook()圖書類別="計算機圖書"next=null;CMBook(String 出版社,int 定價)this.出版社=出版社;this.定價=定價;圖書類別="計算機圖書"next=null;String 查看出版社()return 出版社;void 修改定價(int 定價)this.定價=定價;public String toString()return ("類別"+圖書類別+"|出版社"+出版社+"|定價"+定價+"圖書介紹|書籍是人類進步的階梯n");public class Bookcdxpublic static void main(String args)new CM();(2) 相應(yīng)運行結(jié)果2、(選做題) 改正以下程序中出現(xiàn)的錯誤,并進行注釋說明import java.applet.applet;import java.awt.*;public class test extends Applet Label prompt1,prompt2; TextField inputNo1,inputName1 Department MyDept1; void init() prompt1=new Label("請輸入部門的編號:"); inputNo1=new TextField(5); prompt2=new Label("請輸入部門的名稱:"); inputName1=new TextField(5); add(prompt1); add(inputNo1); add(prompt2); add(inputName1); MyDept1=new Department ( ); inputNo1.addAction(this); public paint(graphic g) g.drawstring(MyDept1.toString(),20,100); public void action(ActionEvent e) if(e.getSource=inputNo1) MyDept1.setDeptNo(inputNo1.getText(); else if(e.getSource()=inputName1) MyDept1.m_DeptName=new String(inputName1.getText(); repaint(); return True; final class Department int m_DeptNo=10; static m_DeptName; String getDeptNo() return m_DeptNo; setDeptNo(int newno) if(newno>0) m_DeptNo=newno; return true; else return false; public String toString() return("部門編號:"+getDeptNo()+" " +"部門名稱:" +m_DeptName+" "); 改正:import java.applet.*;/ 引入包import java.awt.*; / 引入包import java.awt.event.*;/分號public class Test extends Applet implements ActionListener / extend錯誤Label prompt1,prompt2; TextField inputNo1,inputName1;/分號 Department MyDept1; public void init() /少public prompt1=new Label("請輸入部門的編號:"); inputNo1=new TextField(5); prompt2=new Label("請輸入部門的名稱:"); inputName1=new TextField(5); add(prompt1); add(inputNo1); add(prompt2); add(inputName1);/添加inputName1 MyDept1=new Department ( ); inputNo1.addActionListener(this);/添加this inputName1.addActionListener(this); this.setVisible(true);/顯示輸出 public void paint(Graphics g)/ 單詞錯誤Graphics g.drawString(MyDept1.toString(),20,100); /drawString public void actionPerformed(ActionEvent e)/action 拼寫錯誤 if(e.getSource()=inputNo1) MyDept1.setDeptNo(Integer.parseInt(inputNo1.getText(); /類型轉(zhuǎn)換成字符 else if(e.getSource()=inputName1)/判斷是相等用= MyDept1.m_DeptName=new String(inputName1.getText(); /repaint(); /return True; /返回為空不需要 class Department /final不需要 int m_DeptNo=10; /分號 String m_DeptName; /類型沒有給出 String getDeptNo() /S return Integer.toString(m_DeptNo); /類型 boolean setDeptNo(int newno)/返回類型沒有給出 if(newno>0) m_DeptNo=newno; return true; else return false; public String toString() /S return("部門編號:"+getDeptNo()+" " +"部門名稱:" +m_DeptName+" "); 3、(選做題) 請按照以下功能要求編寫并調(diào)試相關(guān)程序?qū)嶒瀮?nèi)容:(1) 熟練Tomcat安裝與配置; (2) 熟練servlet部署、三種開發(fā)方式;(3) 練習JDBC連接;(4) 練習基于JDBC與Servlet的數(shù)據(jù)庫查詢、更新(添加、刪除、修改)(一) 實驗步驟:熟悉Tomcat安裝,servlet部署步驟;(1) 依次創(chuàng)建WEB-INF、classes、lib、web.xml等目錄結(jié)構(gòu)(2) 完成相關(guān)Servlet程序并調(diào)試(二) 以繼承HttpServlet方式開發(fā)Servlet,完成基于Servlet的JDBC連接(數(shù)據(jù)庫選擇SQLServer2000以上)和數(shù)據(jù)查詢應(yīng)用。(1) 選擇SQLServer2000數(shù)據(jù)庫,建立Test數(shù)據(jù)庫和相關(guān)users表(字段userid,username,userpass),用戶名111,密碼111;(2) 以繼承HttpServlet方式開發(fā)Servlet,完成以下數(shù)據(jù)庫查詢顯示代碼并調(diào)試相關(guān)結(jié)果。package js.hit;import javax.servlet.http.*;import java.sql.*;import java.io.*;public class DataSel extends HttpServletpublic void doGet(HttpServletRequest req,HttpServletResponse res)try res.setContentType("text/html;charset=gbk");PrintWriter out = res.getWriter();String url = "jdbc:microsoft:sqlserver:/127.0.0.1:1433;DatabaseName = test"String user = "111"String password = "111"String sqlsel = "select userid,username,userpass from users"Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connection cn = DriverManager.getConnection(url,user,password);Statement sm = cn.createStatement();ResultSet rs = sm.executeQuery(sqlsel);while(rs.next()out.println(rs.getString(1)+"");out.println(rs.getString(2)+"");out.println(rs.getString(3)+"");out.println("<br>");rs.close();sm.close();cn.close(); catch (Exception ex) public void doPost(HttpServletRequest req,HttpServletResponse res)this.doGet(req,res);(三) 在上例數(shù)據(jù)庫基礎(chǔ)上,繼續(xù)以繼承HttpServlet方式開發(fā)另一個Servlet,完成基于Servlet的數(shù)據(jù)更新應(yīng)用,參考代碼如下。package js.hit;import javax.servlet.http.*;import java.io.*;import java.sql.*;public class DataUpd extends HttpServlet public void doGet(HttpServletRequest req,HttpServletResponse res)try res.setContentType("text/html;charset =gbk");PrintWriter out = res.getWriter();String url = "jdbc:microsoft:sqlserver:/127.0.0.1:1433;DatabaseName = test"String user = "111"String password = "111"String sqlupd = "update users set userpass = 8 where userid = 3" Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connection cn = DriverManager.getConnection(url,user,password);Statement sm = cn.createStatement();sm.executeUpdate(sqlupd);sm.close();cn.close(); catch (Exception ex) public void doPost(HttpServletRequest req,HttpServletResponse res)this.doGet(req,res);六、實驗分析與體會(1) 請簡述使用JDBC技術(shù)編寫數(shù)據(jù)庫應(yīng)用關(guān)鍵步驟1、裝庫,建庫;2、找到相應(yīng)的數(shù)據(jù)庫連接包,sql、oracle都有對應(yīng)的jar包;2、寫一個類,結(jié)合對應(yīng)的jar包來連接數(shù)據(jù)庫;3、再寫一個類,通過第二步的類用來對數(shù)據(jù)庫操作。