版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 目 錄</b></p><p> 1.開發(fā)環(huán)境和相關(guān)技術(shù)介紹</p><p><b> 1.1開發(fā)環(huán)境3</b></p><p> 1.2相關(guān)技術(shù)介紹3</p><p><b> 2.需求分析</b></p>&l
2、t;p> 2.1系統(tǒng)需求和功能3</p><p><b> 2.2數(shù)據(jù)字典4</b></p><p> 2.2.1數(shù)據(jù)結(jié)構(gòu)4</p><p> 2.2.2數(shù)據(jù)項(xiàng)4</p><p> 2.2.3數(shù)據(jù)流5</p><p> 2.3安全性要求5</p><
3、;p> 2.4一致性要求5</p><p> 2.5完整性要求5</p><p><b> 3面向?qū)ο蠓治?lt;/b></p><p> 3.1面向?qū)ο蠓治?</p><p> 3.2系統(tǒng)的結(jié)構(gòu)圖 8</p><p><b> 4.數(shù)據(jù)庫實(shí)施</b>&
4、lt;/p><p> 4.1數(shù)據(jù)庫創(chuàng)建8</p><p> 4.1.1各數(shù)據(jù)表說明8</p><p> 4.1.2數(shù)據(jù)庫創(chuàng)建9</p><p> 4.2數(shù)據(jù)庫備份和恢復(fù)方案10</p><p> 4.2.1應(yīng)用輔助工具進(jìn)行備份和恢復(fù)10</p><p> 4.2.2分離數(shù)據(jù)庫法
5、10</p><p> 4.3用戶界面設(shè)計(jì)和應(yīng)用程序編碼10</p><p> 4.3.1用戶界面設(shè)計(jì)10</p><p> 4.3.2類文件功能描述11</p><p> 4.3.3主要代碼分析11</p><p> 5.系統(tǒng)測試方案和測試報(bào)告</p><p> 5.1
6、測試方案16</p><p> 5.2測試過程16</p><p> 5.2.1登陸測試16</p><p> 5.2.2目錄管理功能測試17</p><p> 5.2.3訂戶管理功能測試20</p><p> 5.2.4訂單管理功能測試21</p><p> 5.2.5
7、統(tǒng)計(jì)查詢測試23</p><p><b> 6.完成情況和總結(jié)</b></p><p> 6.1完成情況24</p><p><b> 6.2總結(jié)24</b></p><p><b> 7.參考文獻(xiàn)</b></p><p> 1.開發(fā)環(huán)境
8、和相關(guān)技術(shù)介紹</p><p><b> 1.1開發(fā)環(huán)境</b></p><p> 系統(tǒng)結(jié)構(gòu):C/S結(jié)構(gòu)</p><p> 數(shù)據(jù)庫系統(tǒng):Microsoft SQL Server 2000 sp3</p><p><b> 宿主語言:JAVA</b></p><p>
9、 數(shù)據(jù)庫連接方式:JDBC連接方式</p><p> 開發(fā)工具:Eclipse 3.2</p><p><b> 1.2相關(guān)技術(shù)介紹</b></p><p> Microsoft SQL Server 2000數(shù)據(jù)庫管理系統(tǒng)是微軟公司研制開發(fā)的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。該系統(tǒng)支持并擴(kuò)展了SQL語言標(biāo)準(zhǔn),可以運(yùn)用標(biāo)準(zhǔn)SQL語句對數(shù)據(jù)進(jìn)行操作,也
10、可以使用功能強(qiáng)大的GUI工具進(jìn)行靈活的數(shù)據(jù)管理。同時(shí),系統(tǒng)還提供功能完善的API,可以在應(yīng)用程序中調(diào)用這些API來實(shí)現(xiàn)與數(shù)據(jù)庫系統(tǒng)的連接以及相關(guān)數(shù)據(jù)的操作。sp3是該系統(tǒng)的一個(gè)版本號,只有sp3以上的SQL 2000系統(tǒng)才能夠支持純JDBC連接方式。</p><p> Eclipse:功能強(qiáng)大的應(yīng)用程序開發(fā)工具,主要支持基于Java語言的各種開發(fā)項(xiàng)目。靈活的Plun-in功能,可以根據(jù)具體需要安裝各種插件。&l
11、t;/p><p> JDBC連接方式:Java與數(shù)據(jù)庫系統(tǒng)的一種連接方式,Java程序使用JDBC API與數(shù)據(jù)庫進(jìn)行通信,并用它操作數(shù)據(jù)庫中的數(shù)據(jù)。JDBC API使Java程序與具體數(shù)據(jù)庫系統(tǒng)獨(dú)立開來,保證了Java程序高度的可移植性。</p><p><b> 2.需求分析</b></p><p> 2.1系統(tǒng)需求和功能</p&g
12、t;<p> 設(shè)計(jì)一個(gè)報(bào)刊訂閱應(yīng)用系統(tǒng),使系統(tǒng)滿足以下功能和需求:</p><p><b> 1)</b></p><p> a一個(gè)訂戶可訂多種報(bào)刊;一種報(bào)刊可被多個(gè)用戶訂閱;訂單只能訂閱現(xiàn)有報(bào)刊目錄內(nèi)容;</p><p> b投遞時(shí),必須根據(jù)訂單的情況進(jìn)行投遞,不得超出訂單的訂閱品種、數(shù)量;</p><
13、;p> 2)、系統(tǒng)功能包括:</p><p> a訂戶管理:訂戶添加、修改、刪除;</p><p> b 目錄管理:目錄添加、修改、刪除;</p><p> c訂單管理:完成訂戶訂閱數(shù)據(jù)的管理(包括添加、修改、刪除);</p><p> d 訂單查詢:按訂戶或者訂單號查詢訂單詳細(xì)情況;</p>
14、<p> e統(tǒng)計(jì)查詢:按報(bào)刊目錄統(tǒng)計(jì)各類報(bào)刊的訂閱數(shù)量及金額;</p><p> f表單生成:根據(jù)統(tǒng)計(jì)查詢結(jié)果導(dǎo)出統(tǒng)計(jì)信息到文件(.xl</p><p><b> 2.2數(shù)據(jù)字典</b></p><p><b> 2.2.1數(shù)據(jù)結(jié)構(gòu)</b></p><p> 管理員用戶=管理員
15、帳戶+管理員密碼</p><p> 訂戶=訂戶編號+訂戶名+聯(lián)系電話+聯(lián)系地址</p><p> 目錄=目錄編號+目錄名+單價(jià)+批注信息</p><p> 訂單=訂單號+訂戶編號+下訂日期</p><p> 訂單細(xì)節(jié)=訂單號+目錄編號+訂閱數(shù)量+訂閱期數(shù)+單價(jià)+總價(jià)</p><p> ?。ㄗⅲ簽楸WC訂單確定后價(jià)
16、格不隨目錄單價(jià)變動,訂單細(xì)節(jié)中應(yīng)該有獨(dú)立的單價(jià)來記錄下訂時(shí)目錄的單價(jià))</p><p><b> 2.2.2數(shù)據(jù)項(xiàng)</b></p><p> 表2.1 數(shù)據(jù)項(xiàng)表</p><p><b> 2.2.3數(shù)據(jù)流</b></p><p> 表2.2 數(shù)據(jù)流表</p><p&
17、gt;<b> 2.3安全性要求</b></p><p> 訪問數(shù)據(jù)庫時(shí)需要輸入登陸帳號和密碼。在數(shù)據(jù)庫內(nèi)設(shè)有管理員表,登陸系統(tǒng)時(shí)會要求輸入管理員帳號和密碼。登陸模塊根據(jù)輸入帳號和密碼查管理員表,查到匹配記錄則允許其登陸系統(tǒng)。管理員帳號和密碼可以在系統(tǒng)中添加和修改。</p><p><b> 2.4一致性要求</b></p>
18、<p> 在管理系統(tǒng)相關(guān)的表之間,有較強(qiáng)的關(guān)聯(lián)性。為了實(shí)現(xiàn)一致性的需求,各個(gè)表之間均建立起了相應(yīng)的一致性約束。</p><p><b> 2.5完整性要求</b></p><p> 根據(jù)報(bào)刊訂閱管理系統(tǒng)的要求,為保持?jǐn)?shù)據(jù)的完整性,采用了數(shù)據(jù)庫的事務(wù)機(jī)制,防止出現(xiàn)操作故障引起的數(shù)據(jù)不一致。</p><p><b> 3
19、面向?qū)ο蠓治?lt;/b></p><p> 3.1 面向?qū)ο蠓治?lt;/p><p> 設(shè)計(jì)報(bào)刊訂閱系統(tǒng),主要的目的是使得用戶在訂閱是能跟回家的方便快捷同時(shí)也使得報(bào)刊提供商能更加有效的管理企業(yè)的銷售狀況。同時(shí)面向?qū)ο蠓治鍪沟萌藛T關(guān)注理解系統(tǒng)需要建立的內(nèi)容,從而產(chǎn)生一個(gè)準(zhǔn)確的完整的一致的和可驗(yàn)證的系統(tǒng)模型。</p><p> 管理員表(Administrat
20、or):用于存放管理員的數(shù)據(jù)記錄,包括數(shù)據(jù)項(xiàng):管理員名、密碼。</p><p> 部門表(Department):用來存放部門的相關(guān)記錄,包括數(shù)據(jù)項(xiàng):部門號,部門名。</p><p> 用戶表(Consumer):用于存放注冊用戶的記錄,包括數(shù)據(jù)項(xiàng):用戶賬號、密碼、真實(shí)姓名、身份證號、聯(lián)系電話,聯(lián)系地址,部門號(和部門表有關(guān))等。</p><p> 報(bào)刊信息表
21、(magazine):用于存放報(bào)刊記錄,包括數(shù)據(jù)項(xiàng):報(bào)刊代號、報(bào)刊名稱、出版報(bào)社、出版周期、季度報(bào)價(jià)、內(nèi)容介紹、分類編號(和報(bào)刊類別表有關(guān))等。</p><p> 訂單表(subscribe):用于存放用戶下達(dá)的訂閱報(bào)刊的基本信息,包括數(shù)據(jù)項(xiàng):訂單編號用戶編號(用戶表的主碼)、報(bào)刊代號(報(bào)刊信息表的主碼)、訂閱份數(shù)、訂閱月數(shù)等。</p><p> 用例圖:由上面的分析需能夠確定系統(tǒng)用例
22、圖:</p><p> 類圖:在根據(jù)已定義的對象類及其聯(lián)系,以及對象類的多重性、角色、導(dǎo)航等性質(zhì),可以畫出對象類圖 ,使用對象圖的目的是分析系統(tǒng)的瞬間狀態(tài),以便進(jìn)一步了解系統(tǒng)的結(jié)構(gòu)和行為。分析對象模型:</p><p> 也同時(shí)可以確定所有實(shí)體之間的E-R圖:</p><p> 圖3.1 報(bào)刊訂閱管理系統(tǒng)E-R圖</p><p>&
23、lt;b> 3.2系統(tǒng)結(jié)構(gòu)圖</b></p><p> 圖4.1 系統(tǒng)結(jié)構(gòu)圖</p><p><b> 4.數(shù)據(jù)庫實(shí)施</b></p><p><b> 4.1數(shù)據(jù)庫創(chuàng)建</b></p><p> 4.1.1各數(shù)據(jù)表說明</p><p> 表
24、4.1 數(shù)據(jù)表描述表</p><p> 4.1.2數(shù)據(jù)庫創(chuàng)建</p><p> 在Microsoft SQL Server 2000的企業(yè)管理器中完成數(shù)據(jù)庫和數(shù)據(jù)表的創(chuàng)建</p><p> CREATE TABLE [dbo].[Customer] (</p><p> [Cid] [varchar] (10) COLLATE C
25、hinese_PRC_CI_AS NOT NULL ,</p><p> [Cname] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,</p><p> [Phone] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,</p><p> [Address] [var
26、char] (50) COLLATE Chinese_PRC_CI_AS NOT NULL </p><p> ) ON [PRIMARY]</p><p><b> GO</b></p><p> CREATE TABLE [dbo].[Login] (</p><p> [UName] [varchar] (
27、20) COLLATE Chinese_PRC_CI_AS NOT NULL ,</p><p> [UPassword] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL </p><p> ) ON [PRIMARY]</p><p><b> GO</b></p>&l
28、t;p> CREATE TABLE [dbo].[Diretory] (</p><p> [Did] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,</p><p> [Dname] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,</p><p>
29、 [UnitPrice] [float] NOT NULL ,</p><p> [Ifo] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL </p><p> ) ON [PRIMARY]</p><p><b> GO</b></p><p> CREATE TAB
30、LE [dbo].[Order] (</p><p> [Ono] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,</p><p> [Cid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,</p><p> [Odate] [datetime]
31、NULL </p><p> ) ON [PRIMARY]</p><p><b> GO</b></p><p> CREATE TABLE [dbo].[OrderDetail] (</p><p> [Ono] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NUL
32、L ,</p><p> [Did] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,</p><p> [Quantity] [int] NOT NULL ,</p><p> [QiShu] [int] NOT NULL ,</p><p> [UnitPrice] [floa
33、t] NOT NULL ,</p><p> [Total] [float] NULL </p><p> ) ON [PRIMARY]</p><p><b> GO</b></p><p> 4.2數(shù)據(jù)庫備份和恢復(fù)方案</p><p> 4.2.1應(yīng)用輔助工具進(jìn)行備份和恢復(fù)</
34、p><p> 應(yīng)用數(shù)據(jù)庫輔助工具(如sqlbackuptools…)進(jìn)行備份,選擇所需要備份的數(shù)據(jù)庫和目標(biāo)地址即可進(jìn)行數(shù)據(jù)備份,恢復(fù)數(shù)據(jù)庫只需要指定備份文件和需要恢復(fù)的數(shù)據(jù)庫即可進(jìn)行數(shù)據(jù)恢復(fù)。</p><p> 4.2.2分離數(shù)據(jù)庫法</p><p> 在企業(yè)管理器中右擊需要備份的數(shù)據(jù)庫,選擇“所有任務(wù)”,“分離數(shù)據(jù)庫”,執(zhí)行分析操作,拷貝數(shù)據(jù)庫MDF文件和LDF
35、文件。</p><p> 恢復(fù)方案:在企業(yè)管理器的控制臺樹中選擇“數(shù)據(jù)庫”節(jié)點(diǎn),右擊,“所有任務(wù)”,“附加數(shù)據(jù)庫”,找到待恢復(fù)數(shù)據(jù)庫的MDF文件,確定。</p><p> 4.3用戶界面設(shè)計(jì)和應(yīng)用程序編碼</p><p> 4.3.1用戶界面設(shè)計(jì)</p><p> 本系統(tǒng)的用戶界面用Java Swing編寫,主要由1個(gè)主界面Newsp
36、aper.java和10個(gè)輔助對話框組成。主界面集合系統(tǒng)主要基本功能按鍵,輔助對話框負(fù)責(zé)采集用戶輸入信息和做基本的信息處理。</p><p><b> 用戶界面</b></p><p> 4.3.2類文件功能描述</p><p> 表4 類文件描述表</p><p> 4.3.3主要代碼分析</p>
37、;<p> //-----------------------------------------------------------------------------</p><p> //所屬類:Utilities</p><p> //功能:取得應(yīng)用程序與數(shù)據(jù)庫系統(tǒng)的連接</p><p> public static void getC
38、onnection() throws Exception {</p><p> Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver")</p><p> .newInstance();//加載驅(qū)動程序</p><p> String url = "jdbc:mic
39、rosoft:sqlserver://localhost:1433;DatabaseName=Newspaper";</p><p> String user = "sa";</p><p> String password = "";</p><p> conn = DriverManager.getConn
40、ection(url, user, password);//取得連接</p><p> stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,</p><p> ResultSet.CONCUR_UPDATABLE);//創(chuàng)建語句</p><p> conn2 = DriverManager.g
41、etConnection(url, user, password);</p><p> stmt2 = conn2.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,</p><p> ResultSet.CONCUR_UPDATABLE);</p><p><b> }</b></p&
42、gt;<p> //-----------------------------------------------------------------------------</p><p> //所屬類:Utilities</p><p> //功能:完成查詢結(jié)果的表格顯示</p><p> public static void displa
43、yResultSet(JTable table, ResultSet rs)</p><p> throws SQLException {</p><p> rs.beforeFirst();// 指針移到結(jié)果集第一條記錄前面</p><p> boolean moreRecords = rs.next();</p><p> if
44、(!moreRecords) {// 如果沒有記錄,則提示一條消息</p><p> JOptionPane.showMessageDialog(table, "無相關(guān)記錄", "Check your input!",</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b&g
45、t; return;</b></p><p><b> }</b></p><p> Vector columnHeads = new Vector();// 用于存儲表格字段</p><p> Vector rows = new Vector();// 用于存儲記錄行</p><p> try {
46、// 獲取字段的名稱</p><p> ResultSetMetaData rsmd = rs.getMetaData();</p><p> for (int i = 1; i <= rsmd.getColumnCount(); ++i)</p><p> columnHeads.addElement(rsmd.getColumnName(i));&l
47、t;/p><p> do {// 獲取記錄集</p><p> rows.addElement(getNextRow(rs, rsmd));</p><p> } while (rs.next());</p><p> // 建立相應(yīng)的TableModel,并將TableModel應(yīng)用到table中顯示出來</p><
48、p> DefaultTableModel model = new DefaultTableModel(rows, columnHeads);</p><p> table.setModel(model);</p><p><b> return;</b></p><p> } catch (SQLException sqlex)
49、{</p><p> sqlex.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p> //-------------------------------------------------------------
50、----------------//所屬類:Utilities</p><p> //功能:被displayResultSet(JTable table, ResultSet rs)調(diào)用, 返回一個(gè)記錄行</p><p> private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)</p>
51、<p> throws SQLException {</p><p> Vector<String> currentRow = new Vector<String>();</p><p> for (int i = 1; i <= rsmd.getColumnCount(); ++i)</p><p> current
52、Row.addElement(rs.getString(i));</p><p> return currentRow; // 返回一條記錄</p><p><b> }</b></p><p> //---------------------------------------------------------------------
53、--------</p><p> //所屬類:Utilities</p><p> //功能:創(chuàng)建空白EXCEL文件,并將統(tǒng)計(jì)查詢結(jié)果導(dǎo)出到該EXCEL文件</p><p> //說明:使用到org.apache的POI包,表示感謝</p><p> public static boolean outPut(ResultSet rs
54、, File file) {</p><p> if (rs == null)</p><p> return false;</p><p><b> try {</b></p><p> HSSFWorkbook wb = new HSSFWorkbook();</p><p> HS
55、SFSheet sheet = wb.createSheet("first sheet");</p><p> sheet.setDefaultColumnWidth((short) 20);</p><p> ResultSetMetaData metadata = rs.getMetaData();</p><p> int colum
56、nCount = metadata.getColumnCount();// 獲取屬性列數(shù)</p><p> HSSFRow row = sheet.createRow((short) 0);</p><p> for (int i = 1; i <= columnCount; i++) {// 填寫表格列名</p><p> row.createCell
57、((short) (i - 1)).setCellValue(</p><p> metadata.getColumnName(i));</p><p><b> }</b></p><p><b> // 按行填寫記錄</b></p><p> rs.beforeFirst();</
58、p><p> short counter = 1;</p><p> while (rs.next()) {</p><p> row = sheet.createRow(counter++);</p><p> for (int i = 1; i <= columnCount; i++) {</p><p>
59、; row.createCell((short) (i - 1)).setCellValue(</p><p> String.valueOf(rs.getObject(i)));</p><p><b> }</b></p><p><b> }</b></p><p> FileOut
60、putStream fileOut = new FileOutputStream(file);</p><p> wb.write(fileOut);// 結(jié)果輸出到文件</p><p> fileOut.close();// 關(guān)閉輸出流</p><p> } catch (Exception exc) {</p><p> exc.
61、printStackTrace();</p><p><b> }</b></p><p> return true;</p><p><b> }</b></p><p><b> }</b></p><p> //-------------
62、----------------------------------------------------------------</p><p> //所屬類:Newspaper</p><p><b> //功能:統(tǒng)計(jì)查詢</b></p><p> final JMenuItem menuItem_9 = new JMenuItem()
63、;</p><p> menuItem_9.addActionListener(new ActionListener() {</p><p> public void actionPerformed(ActionEvent e) {</p><p> String sql = "SELECT Diretory.Did AS 刊物編號,Dname AS
64、 刊物名稱,"</p><p> + "SUM(Quantity*QiShu) AS 總訂閱數(shù),SUM(Total) AS 總金額"</p><p> + " FROM Diretory LEFT JOIN OrderDetail ON (OrderDetail.Did=Diretory.Did) "</p><p&
65、gt; + " GROUP BY Diretory.Did,Diretory.Dname "</p><p> + " ORDER BY SUM(Total) DESC";</p><p><b> try {</b></p><p> Utilities.rs = Utilities.stmt.
66、executeQuery(sql);// 執(zhí)行統(tǒng)計(jì)查詢</p><p> Utilities.displayResultSet(table, Utilities.rs);//顯示查詢結(jié)果</p><p> } catch (SQLException exc) {</p><p> exc.printStackTrace();</p><p&
67、gt;<b> }</b></p><p><b> }</b></p><p><b> });</b></p><p> //-----------------------------------------------------------------------------//所屬類
68、:UserCreateDlg</p><p> //功能:創(chuàng)建新用戶</p><p> final JButton button = new JButton();</p><p> button.addActionListener(new ActionListener() {</p><p> public void actionPe
69、rformed(ActionEvent e) {</p><p> if (textField_1.getText().trim().length() != 0</p><p> && textField_2.getText().trim().length() != 0</p><p> && textField_3.getTe
70、xt().trim().length() != 0) {</p><p> String sql = "INSERT INTO Customer(Cid,Cname,Phone,Address) "</p><p> + "VALUES('"</p><p> + textField.getText().trim
71、()</p><p><b> + "','"</b></p><p> + textField_1.getText().trim()</p><p><b> + "','"</b></p><p> + textFi
72、eld_2.getText().trim()</p><p><b> + "','"</b></p><p> + textField_3.getText().trim() + "')";</p><p><b> try {</b></p>
73、;<p> Utilities.stmt.executeUpdate(sql);// 執(zhí)行數(shù)據(jù)行插入</p><p> JOptionPane.showMessageDialog(dialog, "用戶:"</p><p> + textField_1.getText() + "添加成功\nID:"</p><
74、p> + textField.getText(), "Success !",</p><p> JOptionPane.INFORMATION_MESSAGE);</p><p> dispose();</p><p> } catch (SQLException exc) {</p><p> exc.p
75、rintStackTrace();</p><p><b> }</b></p><p><b> } else {</b></p><p> JOptionPane.showMessageDialog(dialog, "信息不全,無法添加",</p><p> &quo
76、t;Check your input !", JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> }</b></p><p><b> });</b></p><p> //---------
77、--------------------------------------------------------------------//所屬類:UserModifyDlg</p><p> //功能:用戶信息更新修改</p><p> button_2 = new JButton();</p><p> button_2.setEnabled(false)
78、;</p><p> button_2.addActionListener(new ActionListener() {</p><p> public void actionPerformed(ActionEvent e) {</p><p> if (textField_1.getText().trim().length() != 0</p>
79、<p> && textField_2.getText().trim().length() != 0</p><p> && textField_3.getText().trim().length() != 0) {</p><p><b> try {</b></p><p> Utilit
80、ies.rs.updateString("Cname", textField_1</p><p> .getText().trim());</p><p> Utilities.rs.updateString("Phone", textField_2</p><p> .getText().trim());</p&
81、gt;<p> Utilities.rs.updateString("Address", textField_3</p><p> .getText().trim());</p><p> Utilities.rs.updateRow();// 更新數(shù)據(jù)行</p><p> JOptionPane.showMessageDi
82、alog(dialog, "更新成功!",</p><p> "Success !", JOptionPane.INFORMATION_MESSAGE);</p><p> dispose();</p><p> } catch (SQLException exc) {</p><p><b
83、> }</b></p><p><b> } else {</b></p><p> JOptionPane.showMessageDialog(dialog, "信息不全,無法修改",</p><p> "Check your input !", JOptionPane.ERR
84、OR_MESSAGE);</p><p><b> }</b></p><p><b> }</b></p><p><b> });</b></p><p> //----------------------------------------------------
85、-------------------------//所屬類:BookingDlg</p><p> //功能:讀取訂單數(shù)據(jù),向系統(tǒng)添加訂單</p><p> button_1 = new JButton();</p><p> button_1.addActionListener(new ActionListener() {</p><p
86、> public void actionPerformed(ActionEvent e) {</p><p><b> try {</b></p><p> String sql = "SELECT UnitPrice FROM Diretory WHERE Did='"</p><p> + comb
87、oBox.getSelectedItem() + "'";</p><p> Utilities.rs = Utilities.stmt.executeQuery(sql);</p><p> // 查詢當(dāng)前選擇目錄刊物的單價(jià)</p><p> if (Utilities.rs.next()) {</p><p&
88、gt; unitPrice = Utilities.rs.getFloat("UnitPrice");</p><p> quantity = Integer.parseInt(textField_1.getText());</p><p> qishu = Integer.parseInt(textField_2.getText());</p>&
89、lt;p> total = unitPrice * quantity * qishu;</p><p> sum += total;</p><p> sql = "INSERT INTO OrderDetail (ONo, Did, Quantity, QiShu, UnitPrice, total)"</p><p> + &q
90、uot;VALUES('"</p><p> + label_2.getText()</p><p><b> + "','"</b></p><p> + comboBox.getSelectedItem()</p><p><b> + &quo
91、t;',"</b></p><p> + quantity</p><p><b> + ","</b></p><p><b> + qishu</b></p><p><b> + ","</b>
92、</p><p> + unitPrice</p><p><b> + ","</b></p><p><b> + total</b></p><p><b> + ")";</b></p><p>
93、 sqls.add(sql);// 寄存訂單細(xì)節(jié)插入語句</p><p> comboBox.removeItem(comboBox.getSelectedItem());</p><p> // 將已選擇目錄從下拉選擇框中移除(一個(gè)訂單不能有兩個(gè)目錄相同的訂單項(xiàng))</p><p><b> }</b></p><p&
94、gt; } catch (SQLException exc) {</p><p> exc.printStackTrace();</p><p> } catch (NumberFormatException exc) {</p><p> JOptionPane.showMessageDialog(dialog, "錯(cuò)誤數(shù)字輸入",&l
95、t;/p><p> "Check again !", JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> }</b></p><p><b> });</b></p>&l
96、t;p> button_1.setEnabled(false);</p><p> button_1.setText("添加訂單項(xiàng)");</p><p> panel_1.add(button_1);</p><p> button_2 = new JButton();</p><p> button_2.
97、addActionListener(new ActionListener() {</p><p> public void actionPerformed(ActionEvent e) {</p><p> if (sqls.size() > 1) {</p><p> // 容器第一個(gè)空間放插入Order的sql語句,其它空間放插入OrderDetai
98、l的sql語句</p><p> // sqls.size()==1表示只有一張空訂單,不予插入</p><p> int ans = JOptionPane.showConfirmDialog(dialog, "一共需要支付訂金:"</p><p> + sum + "元\nContinue?", "We n
99、eed your money",</p><p> JOptionPane.YES_NO_CANCEL_OPTION);</p><p> if (ans == JOptionPane.YES_OPTION) {</p><p><b> try {</b></p><p> for (int i =
100、0; i < sqls.size(); i++) {</p><p> // 順序取出sql語句,完成訂單添加插入</p><p> Utilities.stmt.executeUpdate(sqls.get(i));</p><p> // 執(zhí)行插入更新語句</p><p><b> }</b></
101、p><p> dispose();</p><p> JOptionPane</p><p> .showMessageDialog(dialog, "訂單添加成功!",</p><p> "Success!",</p><p> JOptionPane.INFORMATI
102、ON_MESSAGE);</p><p> } catch (SQLException exc) {</p><p> exc.printStackTrace();</p><p><b> }</b></p><p> } else if (ans == JOptionPane.NO_OPTION) {<
103、/p><p> dispose();</p><p><b> }</b></p><p><b> } else {</b></p><p> JOptionPane.showMessageDialog(dialog,</p><p> "訂單為空,不能提交
104、,請選擇需要訂閱的期刊", "Check again !",</p><p> JOptionPane.ERROR_MESSAGE);</p><p><b> }</b></p><p><b> }</b></p><p><b> });<
105、/b></p><p> button_2.setEnabled(false);</p><p> button_2.setText("提交訂單");</p><p> panel_1.add(button_2);</p><p> 5.系統(tǒng)測試方案和測試報(bào)告</p><p><
106、b> 5.1測試方案</b></p><p> 由于系統(tǒng)規(guī)模較小,所以沒有安排單獨(dú)的白盒測試,而是相應(yīng)地將這部分測試歸并到系統(tǒng)編碼過程中。整個(gè)測試過程基于自頂向下測試的組裝模塊的方法,先對主模塊進(jìn)行基本測試,然后在按深度優(yōu)先策略逐一將子模塊組裝到主模塊上進(jìn)行測試,最后再對系統(tǒng)進(jìn)行全面的整體測試。</p><p><b> 5.2測試過程</b>
107、</p><p> ?。ò缀袦y試過程略(參考代碼),以下是系統(tǒng)黑盒測試過程:)</p><p><b> 5.2.1登陸測試</b></p><p> 雙擊可執(zhí)行文件Newspaper.jar打開應(yīng)用系統(tǒng),可見登陸界面:</p><p><b> 系統(tǒng)界面</b></p><
108、;p> 輸入錯(cuò)誤用戶名和密碼,用戶無法登陸:</p><p><b> 登陸錯(cuò)誤提示信息</b></p><p> 輸入正確用戶名和密碼,用戶正常登陸。</p><p> ?。ㄏ到y(tǒng)自帶用戶名和密碼有(admin,admin),(santino,santino),(ddt,ddt)…)</p><p> 5.
109、2.2目錄管理功能測試</p><p> 添加目錄:選擇“添加目錄”,填寫目錄信息,“確定”</p><p><b> 添加目錄</b></p><p><b> 結(jié)果</b></p><p> 修改目錄:“目錄管理”,“修改目錄”,輸入待修改目錄ID,鎖定目錄,修改目錄,“更新”。<
110、/p><p><b> 修改目錄</b></p><p><b> 結(jié)果</b></p><p> 刪除目錄:“目錄管理”,“修改目錄”,輸入待修改目錄ID,鎖定目錄,“刪除”</p><p><b> 刪除目錄</b></p><p><b&
111、gt; 結(jié)果</b></p><p> 5.2.3訂戶管理功能測試</p><p><b> 添加訂戶</b></p><p><b> 添加訂戶</b></p><p><b> 結(jié)果</b></p><p><b>
112、 修改訂戶:</b></p><p> 刪除訂戶:(參考“目錄管理”,操作基本類似,略)</p><p> 5.2.4訂單管理功能測試</p><p> 添加訂單:點(diǎn)擊“添加訂單”按鈕,填入有效用戶ID,檢測用戶,輸入目錄ID和訂閱數(shù)量、期數(shù),點(diǎn)擊“添加訂單項(xiàng)”為訂單添加訂單項(xiàng),點(diǎn)擊“提交訂單”可以向系統(tǒng)提交訂單。</p><p
113、><b> 添加訂單</b></p><p> 訂單管理:“訂單管理”,“訂單查詢”,輸入用戶ID</p><p><b> 查詢訂單</b></p><p><b> 查詢結(jié)果</b></p><p> 選中訂單項(xiàng),“訂單管理”,“打開訂單”</p>
114、;<p><b> 訂單詳細(xì)內(nèi)容</b></p><p> 選擇具體訂單項(xiàng)可進(jìn)行相應(yīng)修改操作:</p><p><b> 訂單項(xiàng)修改</b></p><p> 5.2.5統(tǒng)計(jì)查詢測試</p><p> 統(tǒng)計(jì)查詢:“數(shù)據(jù)統(tǒng)計(jì)”</p><p><b
115、> 統(tǒng)計(jì)查詢</b></p><p><b> 導(dǎo)出查詢數(shù)據(jù)</b></p><p> 選擇“數(shù)據(jù)統(tǒng)計(jì)”“結(jié)果導(dǎo)出”選擇路徑“保存”</p><p> 圖26 結(jié)果導(dǎo)出</p><p><b> 結(jié)果演示</b></p><p><b&g
116、t; 6.完成情況和總結(jié)</b></p><p><b> 6.1完成情況</b></p><p> 本系統(tǒng)完成了任務(wù)書中要求的所有內(nèi)容,包括:a訂戶管理:訂戶添加、修改、刪除;b 目錄管理:目錄添加、修改、刪除;c訂單管理:完成訂戶訂閱數(shù)據(jù)的管理(包括添加、修改、刪除);d 訂單查詢:按訂戶或者訂單號查詢訂單詳細(xì)情況;e統(tǒng)計(jì)查詢
117、:按報(bào)刊目錄統(tǒng)計(jì)各類報(bào)刊的訂閱數(shù)量及金額;另外,系統(tǒng)還具有表單生成功能,能將統(tǒng)計(jì)查詢結(jié)果導(dǎo)出到Excel文件中實(shí)現(xiàn)持久保存。</p><p><b> 6.2總結(jié)</b></p><p> 通過完成本次課程設(shè)計(jì),我對數(shù)據(jù)庫這門課程有了更加深刻的理解。在對系統(tǒng)數(shù)據(jù)庫的分析、設(shè)計(jì)中,碰到很多概念上很模糊的問題,通過查閱相關(guān)資料,問題得到了解決,設(shè)計(jì)工作也順利進(jìn)行。另外
118、,通過運(yùn)用JDBC數(shù)據(jù)庫連接技術(shù),我對java數(shù)據(jù)庫編程技術(shù)也有了一定的了解和認(rèn)識,希望通過以后的學(xué)習(xí)繼續(xù)加深這方面知識的掌握。同時(shí)對基本的軟件設(shè)計(jì)流程有了一定的了解。</p><p><b> 7.參考文獻(xiàn)</b></p><p> [1] 馬皓.JAVA語言程序設(shè)計(jì).北京:清華大學(xué)出版社,2006 </p><p> [2] 孫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)-報(bào)刊訂閱管理系統(tǒng)
- c_課程設(shè)計(jì)——報(bào)刊訂閱管理系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計(jì)---報(bào)刊訂閱管理系統(tǒng)
- 報(bào)刊訂閱管理系統(tǒng)
- 報(bào)刊訂閱管理系統(tǒng)
- 報(bào)刊訂閱管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)據(jù)庫原理與應(yīng)用課程設(shè)計(jì)報(bào)告--企業(yè)報(bào)刊訂閱管理系統(tǒng)
- 報(bào)刊訂閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- c++_課程設(shè)計(jì)--雜志訂閱管理系統(tǒng)
- c++ 課程設(shè)計(jì)--雜志訂閱管理系統(tǒng)
- 報(bào)刊訂閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 【全套設(shè)計(jì)】java+sql報(bào)刊訂閱管理系統(tǒng)
- 雜志訂閱系統(tǒng)課程設(shè)計(jì)2
- 數(shù)據(jù)庫課程設(shè)計(jì)--設(shè)計(jì)一個(gè)訂戶訂閱報(bào)刊的應(yīng)用系統(tǒng)
- 數(shù)據(jù)庫課程設(shè)計(jì)--企業(yè)報(bào)刊管理系統(tǒng)
- 69949.電子報(bào)刊訂閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 中國報(bào)刊(傳媒)信息庫——全國報(bào)刊訂閱查詢輔助系統(tǒng).pdf
- 季度報(bào)刊訂閱登記表
- web課程設(shè)計(jì)--課程管理系統(tǒng)
- 《面向?qū)ο笳n程設(shè)計(jì)》課程設(shè)計(jì)---媒體管理系統(tǒng)
評論
0/150
提交評論