日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

基于Web的仓库管理系统的设计与实现

發(fā)布時間:2023/12/14 windows 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Web的仓库管理系统的设计与实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

摘 要
倉庫物品的管理是與我們的日常生活息息相關(guān)的一個重大問題。隨著我國經(jīng)濟飛速的發(fā)展,改革開放的不斷深入,企業(yè)要想在激烈的市場競爭中立于不敗之地,要想繼續(xù)的發(fā)展與生存,沒有現(xiàn)代化的管理方式與方法是萬萬不行的,倉庫管理的全面信息化、自動化則是在其中占有極其重要的地位。倉庫管理信息系統(tǒng)則是在此需求背景下開始研制并開發(fā)的。在此篇文章中嚴(yán)格按照軟件工程思想,設(shè)計并實現(xiàn)了一個倉庫信息管理系統(tǒng)。介紹了系統(tǒng)從需求分析,邏輯設(shè)計,總體設(shè)計,詳細設(shè)計以及系統(tǒng)測試、實施各階段的主要內(nèi)容和成果,包括系統(tǒng)結(jié)構(gòu)圖、業(yè)務(wù)流程圖數(shù)據(jù)流程圖、物理表實現(xiàn)及其關(guān)系、功能模塊算法流程、界面設(shè)計等等。
關(guān)鍵字 倉庫; 軟件工程; 系統(tǒng)開發(fā)

Design and implementation of warehouse management system based on Web
Abstract
Warehouse management is a major issue is closely related to our daily life. With China’s rapid economic development and the deepening of reform and opening up, the enterprise to be in an invincible position in the fierce market competition, want to continue development and survival, no modern management methods and methods is absolutely out, warehouse management and comprehensive information, automation is where you play a very important role. Warehouse management information system is started research and development in the context of this demand. This article strictly according to the software engineering, design and implementation of a warehouse management system. Introduced from requirements analysis, logic design, General design, detailed design and system testing, implementation of the content and results of each stage, including charts, business process data flow chart, functional modules algorithms, physical form and its process, interface design and so on.

Key warehouse Software engineering; System development

目 錄

摘 要 i
Abstract ii
目 錄 iii
1. 緒論 1
1.1 系統(tǒng)背景 1
1.2 開發(fā)目的 1
1.3 開發(fā)工具 2
1.3.1 Eclipse 2
1.3.2 Oracle 2
1.3.3 PowerDesigner 2
1.4 相關(guān)技術(shù)介紹 3
1.4.1 JSP技術(shù) 3
1.4.2 JavaScript技術(shù) 5
1.4.3 Tomcat 5
1.4.4 軟硬件需求 6
1.5 可行性研究分析 6
1.5.1 系統(tǒng)目標(biāo)可行性分析 7
1.5.2 系統(tǒng)的經(jīng)濟可行性 7
1.5.3 系統(tǒng)的技術(shù)可行性 7
1.5.4 系統(tǒng)的法律可行性 7
2. 軟件需求分析 8
2.1 需求分析 8
2.1.1 用例圖 8
2.1.2 類圖 9
2.2 功能需求分析 9
2.3 業(yè)務(wù)流程分析 10
2.3.1 管理員模塊業(yè)務(wù)流程 10
2.3.2 客戶模塊業(yè)務(wù)流程分析 10
2.4 數(shù)據(jù)流程分析 11
2.4.1 頂層數(shù)據(jù)流 11
2.4.2 一層數(shù)據(jù)流圖 11
2.4.3 二層數(shù)據(jù)流圖 12
2.5 數(shù)據(jù)字典分析 13
2.5.1 數(shù)據(jù)存儲條目 13
2.5.2 加工條目 14
3. 軟件總體設(shè)計 16
3.1 軟件結(jié)構(gòu)設(shè)計原則 16
3.1.1 軟件的結(jié)構(gòu)體系 16
3.1.2 軟件模塊設(shè)計原則 16
3.1.3 軟件的模塊化 17
3.2 系統(tǒng)任務(wù)概述 17
3.2.1 系統(tǒng)的功能設(shè)計 17
3.2.2 系統(tǒng)功能結(jié)構(gòu) 18
3.3 系統(tǒng)架構(gòu) 18
3.4 系統(tǒng)主要子模塊設(shè)計 19
3.4.1 用戶登錄子模塊設(shè)計 19
3.4.2 商品入庫子模塊設(shè)計 19
3.4.3 商品出庫子模塊設(shè)計 19
3.4.4 用戶注冊子模塊設(shè)計 19
4. 數(shù)據(jù)庫設(shè)計 21
4.1 數(shù)據(jù)庫概念 21
4.2 數(shù)據(jù)庫分析 22
4.2.1 數(shù)據(jù)庫的完整性分析 22
4.2.2 數(shù)據(jù)庫的安全性分析 22
4.3 數(shù)據(jù)庫的設(shè)計 23
4.3.1 概念結(jié)構(gòu)設(shè)計 23
4.3.2 邏輯結(jié)構(gòu)設(shè)計 23
4.4 數(shù)據(jù)庫的連接 25
4.4.1 連接工具 25
4.4.2 工廠類配置文件主要內(nèi)容 26
4.4.3 Mapper類配置文件主要代碼 26
5. 軟件詳細設(shè)計 28
5.1 登錄模塊 28
5.2 入庫模塊 30
5.3 出庫模塊 31
5.4 用戶注冊模塊 32
5.5 個人信息管理模塊 34
6. 系統(tǒng)的測試 38
6.1 測試簡述 38
6.1.1 測試目的及重要性 38
6.1.2 測試原則 39
6.2 測試方法 40
6.2.1 黑盒測試 40
6.2.2 白盒測試 40
6.2.3 單元測試 40
6.2.4 集成測試 41
6.3系統(tǒng)模塊的測試 41
6.3.1 登陸模塊測試: 41
6.3.2 出庫模塊測試 41
6.4.3 用戶信息模塊測試結(jié)果 44
總 結(jié) 45
致 謝 46
參考文獻 47
附件1:外文文獻(原文) 48
附件2:外文文獻(譯文) 57

1. 緒論
現(xiàn)如今,計算機技術(shù)飛速發(fā)展,社會經(jīng)濟也在伴隨著不斷發(fā)展,各行各業(yè)也面臨著各種各樣的挑戰(zhàn)與困難。為了能夠在這個信息化的時代繼續(xù)發(fā)展下去,就必須緊跟上時代的腳步。在這個計算機技術(shù)飛速發(fā)展的年代里,智能化的商品存儲管理技術(shù)也在隨著不斷地發(fā)展。之前的那些古老的倉庫管理化的方法已經(jīng)難以滿足現(xiàn)代化發(fā)展的需求,因為許多些原因,企業(yè)要想在這個現(xiàn)代化的社會中生存下去都必須有一個良好的倉庫管理系統(tǒng)。倉庫是每個企業(yè)都必須謹(jǐn)慎管理的地方,一個企業(yè)的最基本是貨物,所以一個企業(yè)的貨物必須得得到很好的保管,在這片競爭激烈的土地上面才能謀得一塊生地。本課題正是根據(jù)這一理念,開發(fā)了一個功能比較完善,基本能滿足企業(yè)要求的倉庫管理系統(tǒng)。
1.1 系統(tǒng)背景
在這個科學(xué)技術(shù)不斷發(fā)展的年代里,世界已經(jīng)變的越來越高科技化越來越智能化,一個智能化的時代已經(jīng)到來。到現(xiàn)在為止,在我們生活的周圍你可以隨處見到各種各樣的智能化管理的系統(tǒng)[7]。
一個企業(yè)所擁有的商品是他所生存發(fā)展的根本,而倉庫是企業(yè)用來保存商品的所在。所以說,一個好的倉庫對于企業(yè)來說占有舉足輕重的地位。總而言之,一個成功的企業(yè)必定會有一個好的倉庫,但是一個好的倉庫沒有一個合理的管理系統(tǒng)是不完美的[7]。可是一個靜態(tài)化的簡單的倉庫管理的系統(tǒng),因為他不具備信息共享的功能,而且還不能夠保證貨物的正常運轉(zhuǎn)中所遇到的一些問題,還不能保證企業(yè)所擁有資源的正常的運轉(zhuǎn)與利用;還有一些傳統(tǒng)的倉庫管理系統(tǒng)在維護時非常的困難開發(fā)起來也是十分復(fù)雜,所以在人力物力上有極大的浪費,已經(jīng)遠遠的脫離了時代的軌道。因此,一個成功的企業(yè),如果擁有了一個現(xiàn)代化的倉庫管理的系統(tǒng),會大大的提高企業(yè)生產(chǎn)的效率,降低使用的成本。
1.2 開發(fā)目的
倉庫是所有企業(yè)都不可缺少的部分,對于一個成功的企業(yè)來說,想要在未來的市場中獲得發(fā)展得優(yōu)勢,擁有一個完善的倉庫管理系統(tǒng)是十分重要的。可是企業(yè)中的商品總是在不斷地流動的,倉庫中的商品也隨之不斷變化。所以,商品就需要不停的被記錄保存。在使用傳統(tǒng)的人工記錄時存在著各種各樣的問題,查詢的效率低下,而且保密性不高。因此,對于一個想要不斷發(fā)展的企業(yè)來說,這種人工記錄的方式必須淘汰。
在現(xiàn)代化科技的不斷發(fā)展前景之下,智能化的東西已經(jīng)遍布各地,電腦更是遍布在各個角落。計算機技術(shù)的應(yīng)用對庫存信息進行管理與人工管理技術(shù)相比較擁有無可比擬的優(yōu)勢,如:添加刪除快捷、安全性高、查詢便捷等。
在以上這些社會與技術(shù)的背景之下,我決定開始開發(fā)了這個系統(tǒng)。在開發(fā)的這個系統(tǒng)能夠保證對貨物進行正確的出庫與入庫擦偶哦、庫存控制和發(fā)貨。而且,這個系統(tǒng)比較小維護起來簡單,能夠節(jié)省一定的人力物力,對企業(yè)中倉庫的管理是百利的。
1.3 開發(fā)工具
1.3.1 Eclipse
Eclipse 開發(fā)工具是一款源代碼完全開放的、主要用于可擴展性開發(fā)Java語言的一種開發(fā)工具。對Eclipse本身來說,他僅僅只是一種服務(wù)和框架,主要是通過一些插件與組件來組成開發(fā)的環(huán)境。主要的優(yōu)勢有Eclipse自身帶有一種標(biāo)準(zhǔn)化的組件集合,含有Java的主要開發(fā)工具JDK。Eclipse具有十分豐富的開發(fā)環(huán)境,主要包括有超強的編碼能力、擁有玩?zhèn)涞恼{(diào)試功能、發(fā)布能力與測試功能等,全部支持了Hibernet、Struts、Mybatis、JSP、Spring、SQLPlus等等的一系列的框架。
1.3.2 Oracle
oracle是一家公司的名字(甲骨文公司),世界上屈指可數(shù)的,是國際上非常大的巨型IT公司,是全球最大的企業(yè)級軟件公司,總部位于美國加利福尼亞州的紅木灘。1989年正式進入中國市場。2013年,甲骨文已超越 IBM ,成為繼 Microsoft 后全球第二大軟件公司最有名的產(chǎn)品是DB,database,RDBMS,關(guān)系型數(shù)據(jù)庫系統(tǒng)。
1998年9月,ORACLE公司正式發(fā)布ORACLE 8i。“i”代表Internet,這一版本中添加了大量為支持Internet而設(shè)計的特性。這一款版本為數(shù)據(jù)庫的用戶提供了更加全面的全方位的Java技術(shù)支持。ORACLE 8i成為第一個完全整合了本地Java運行時環(huán)境的數(shù)據(jù)庫。
然后有9i,10g。在這個版本更新的最佳看點是一起加入了網(wǎng)格,然后是11g,現(xiàn)在發(fā)展到12c,c代表cloud,也是現(xiàn)在炒的非常火的概念。
1.3.3 PowerDesigner
在數(shù)據(jù)庫的設(shè)計過程中,運用Power Designer作為數(shù)據(jù)庫模型的主要的建模工具。在龐大的賽貝斯公司旗下的主要的CASE開發(fā)工具集之一就是PowerDesinger,運用這個工具的最大看點是更加快捷并且方便的對倉庫管理系統(tǒng)進行開發(fā),數(shù)據(jù)庫開發(fā)所需要的模型與需要的經(jīng)歷基本全部都能實現(xiàn)。例如數(shù)據(jù)流程圖、概念數(shù)據(jù)模型、物理數(shù)據(jù)模型等一系列的模型都可以通過使用PowerDesigner來實現(xiàn),可以生產(chǎn)出各種各樣的PC端開發(fā)出來的應(yīng)用軟件,也可以給系統(tǒng)的設(shè)計制作出系統(tǒng)的結(jié)構(gòu)模型,也能夠為一些開發(fā)團隊的系統(tǒng)模型進行調(diào)控。Power Designer還可以跟各種現(xiàn)如今使用比較多的用來設(shè)計數(shù)據(jù)庫的軟件,比如:Power Builder,StartUML,VB等相互配合來使用,以便于用來減少開發(fā)的時間與優(yōu)化系統(tǒng)的設(shè)計。

1.4 相關(guān)技術(shù)介紹
1.4.1 JSP技術(shù)
JSP技術(shù)使用起來是非常靈活的,可以用來便攜JAVA程序的。本技術(shù)還可以用來對一些編程的動態(tài)的網(wǎng)頁來進行封裝。網(wǎng)頁還可以訪問一些在服務(wù)器端的各種資源的一些邏輯應(yīng)用。JSP技術(shù)還可以將一些網(wǎng)頁的邏輯與網(wǎng)頁的設(shè)計和還有顯示進行分離,對于一些可重用的基礎(chǔ)的組件的開發(fā)進行支撐,更加容易的對基于Web的應(yīng)用程序進行設(shè)計。
在現(xiàn)今,計算機技術(shù)在不斷發(fā)展,Web 技術(shù)也隨之不斷的發(fā)展,產(chǎn)生了許多方法來解決動態(tài)頁面的生成問題,目前用于聲稱動態(tài)網(wǎng)頁的技術(shù)有CGI、ASP、PHP及JSP。JSP技術(shù)可以為做動態(tài)網(wǎng)頁的創(chuàng)建提供一個更加方便快捷的方法。JSP 是Java Server Page 的縮寫,是Sun 公司于1999年6月推出的新技術(shù),該技術(shù)由Sun 公司主導(dǎo),采取了了一些在電腦的軟件與硬件、數(shù)據(jù)庫、還有通信等領(lǐng)域的多個家廠家的建議與意見而一起制定出來的一種在Java與Web基礎(chǔ)上的一種動態(tài)的網(wǎng)頁技術(shù)。
JSP技術(shù)與之前傳統(tǒng)的網(wǎng)頁制作技術(shù)相比較,它有著明顯的優(yōu)點。JSP 不像CGI、ISAPIH 和NSAPI 那樣難于編寫和維護,不像PHP 那樣只能適應(yīng)中小流量的網(wǎng)站,也不像ASP 那樣受到跨平臺的限制,JSP 體現(xiàn)了當(dāng)今最先進的網(wǎng)站開發(fā)思想。
在服務(wù)器端接收到客戶端發(fā)送出來的請求時,開始運行的程序段,接下來將JSP文件中的代碼還有代碼在運行之后效果同時回饋給用戶。通過Java文件的插入能夠?qū)?shù)據(jù)庫、網(wǎng)頁的一系列多重的定向等運行,從而滿足構(gòu)建動態(tài)網(wǎng)頁所需要的程序。JSP是Servle的一種動態(tài)表現(xiàn),而且都可以通過服務(wù)器端來運行。由于能夠?qū)⒁粋€HTML文本返回給用戶端,所以用戶端具備瀏覽器就可以進行瀏覽。HTML程序與穿插在其內(nèi)部的Java程序可以共同構(gòu)建動態(tài)的JSP網(wǎng)頁。在服務(wù)器被用戶的客戶端訪問的時侯,能夠同時處理相應(yīng)的Java代碼,然后將產(chǎn)生的HTML頁面再返回給用戶端的瀏覽器。JSP的設(shè)計關(guān)鍵是Servlet,通常大型的Web應(yīng)用程序的設(shè)計成果也通過Java Servlet與JSP相結(jié)合來實現(xiàn)的。JSP既擁有了方便快捷的Java程序,又統(tǒng)統(tǒng)的面向用戶,既實現(xiàn)了平臺的無關(guān)性危險還比較小,可以具備互聯(lián)網(wǎng)的全部優(yōu)勢。JSP技術(shù)的優(yōu)點:
(1)能夠一次性完成編寫,到處運行。不包括系統(tǒng)在內(nèi),代碼基本不需要在寫。
(2)系統(tǒng)的多平臺支持。通常情況下,能夠在所有情況下的全部平臺上進行設(shè)計,能夠安排在任一情況中,也能夠在所有的情況下進行發(fā)展。相比ASP/.net來說,優(yōu)點是十分明顯的。
(3)強大的可塑性。通過一個不大的Jar程序能夠?qū)ervlet/JSP進行運行,也能夠通過很多服務(wù)器進行集群和負(fù)載平衡,甚至能夠通過多臺Application解決問題。單個的服務(wù)器到多個的服務(wù)器,Java展示了一個強大的功能。
(4)Java已經(jīng)有了很多的設(shè)計方法,何況大部分工具都是沒有花費的,這中間有很多都在多種平臺之下順暢的進展。
(5)支持服務(wù)器端組件。只有很有力的服務(wù)器端組件才能支撐web運行,因此開發(fā)者可以在調(diào)用web頁面時通過另外的開發(fā)工具來達成紛亂效用的組件,來加強系統(tǒng)的可操作性。JSP可以通過完善的JAVA BEANS 組件來達成紛亂的商務(wù)功能。
在JSP的內(nèi)部對象中會表現(xiàn)出來:客戶端發(fā)送請求使用request,這個請求會涵蓋到來自于GET/POST參數(shù)的請求; 服務(wù)器端傳回客戶端的回饋使用response;管理pageContext 網(wǎng)頁的屬性;session 與請求相關(guān)的會話;application servlet正在進行的內(nèi)容;輸送響應(yīng)的輸出流使用out;config代碼片段配置對象;page JSP網(wǎng)頁本身。
JSP 與ASP(Active Server Page) 的區(qū)別
從上面的基本介紹中,乍一看覺得JSP 與微軟的ASP 十分相似,但事實上,兩者有著本質(zhì)的不同,我們主要從以下幾個方面對其進行比較:
1、Web 服務(wù)器的支持
大部分的支持WEB的服務(wù)器段例如:Apache、IE、Netscape 和Microsoft IIS 等一系列服務(wù)器都可以運行JSP 。ASP的卻很難再除了微軟之外的平臺上繼續(xù)的運行與移植。
2、平臺的支持
平臺具有一定的獨立性,所有的能夠支持java程序的平臺,都可以支持JSP的運行。Windows 平臺可以很好的支持ASP, 但ASP 難于移植到其它平臺上。
3、組件模型
JSP 所在的平臺是建立在跨平臺的、這上面的所有的組件都是可是重新利用的。而ASP 使用的平臺卻是建立在Win32的COM 組件模型之上的,所使用的組件沒有JSP的靈活。
4、腳本語言
JSP是比較萬能的能夠靈活的使用JAVA語言或著與其他的腳本語言如javascript相互配合使用。可是ASP使用起來比較局限,只能使用Jscript 或者是VBScript兩種語言來作為腳本語言,不夠靈活。
5、安全性
JSP的安全模式是使用Java 的安全模型,但是ASP的安全模式使用的是Windows NT的安全模式兩者各不相同。
6、與Access數(shù)據(jù)庫的連接
Access 數(shù)據(jù)庫在與JSP 相連接的時候使用的連接方式是JDBC連接,而Access 數(shù)據(jù)庫與ASP相連接的時候使用的是Data Active Objects。
7、用戶定制的標(biāo)簽
JSP有一個很好的功能是用戶可以自己定義一個屬于自己的標(biāo)簽庫,并且可以靈活運用。然而ASP 中用戶卻不能自己定制標(biāo)簽庫,原因是在 ASP 中用戶是不可以對標(biāo)簽庫進行擴充的。
8、JSP 與Servlet 的區(qū)別
從某種意義上講,JSP 并不是一種新技術(shù),因為JSP 可以完成的工作,都可以通過編寫Servlet 程序來實現(xiàn)。而且,JSP 頁面中動態(tài)的、交互的部分最終也都是需要再編譯為相對應(yīng)的Servlet程序來實現(xiàn)。所以,可以說,JSP其實是Servlet 的一種抽象,它提供了更加方便有效的方式來編寫Servlet。
9、JSP 與CGI 的區(qū)別
JSP 與CGI 兩者之間有一個很明顯的最大的差異點,JSP在編寫時與編譯HTML時是很相似的兩者的差異不大,在語法上有些不同只要了解JSP的語法即可,不需要對JAVA、JScripety等語言有過多的了解。而編寫CGI 程序要求對腳本語言十分熟悉,因為CGI 程序基本上是用腳本語言直接寫的。除此之外,在使用CGI 程序的時侯,對每一次的訪問他都會進行處理,可是這樣的結(jié)果會造成在多個用戶的請求被處理時,會造成力不從心的局面,不會得到滿意的結(jié)果。可是JSP在編譯時只能編譯一次,在此之后會駐留在內(nèi)存中,再次調(diào)用時,不必重新處理,適于應(yīng)付多用戶情況。
1.4.2 JavaScript技術(shù)
JavaScript語言是腳本語言中直譯式的一種,屬于動態(tài)類型、弱種類型、原型為基礎(chǔ)的語言,支持類型的語言。JavaScript引擎是他的解釋器語言,屬于瀏覽器中的內(nèi)容,常常用在客戶端的一種腳本的語言,早期常常在HTML所編譯的網(wǎng)站上面運用,主要的功能是在HTML的基礎(chǔ)之上增加一些動態(tài)的功能。 在1995年時,由Netscape公司的Brendan Eich,在一個叫做網(wǎng)景導(dǎo)航者的瀏覽器上第一次實現(xiàn)而成。由于Netscape的合作者是SUN,所以在Netscape的管理層們希望把他的外觀做起來像JAVA,出于種種的原因給他取名叫做JavaScript。可是在實際上多了解了解它的語法風(fēng)格會發(fā)現(xiàn)是與Self及Scheme比較接近的。為了取得技術(shù)優(yōu)勢,微軟推出了JScript,CEnvi推出ScriptEase,與JavaScript同樣可在瀏覽器上運行。
為了能夠?qū)⒁?guī)格得到統(tǒng)一,因為JavaScript兼容于ECMA標(biāo)準(zhǔn),因此,也稱為ECMAScript。
JS技術(shù)特征:1、腳本語言2、解釋性語言3、弱類型語言4、事件驅(qū)動5、動態(tài)性6、安全性7、跨平臺性(兼容性)。
1.4.3 Tomcat
Tomcat 從一定的意義上面來說他并不只是一個APP Server, 它僅僅只是一個可以支持并且運行Serlvet/JSP 的Web 的容器,而且他還具有一些傳統(tǒng)的Web 服務(wù)器所具有的一系列的功能。可是他跟Apache 相對比,Tomcat處理靜態(tài)的HTML 的能力就比不上Apache。 因此,我們可以把Tomcat與Apache 集成到一塊,然后運用Apache 處理靜態(tài)HTML, 最后在利用Tomcat 處理JSP 還有Servlet。這幾種技術(shù)之間相互配合。這種集成只需將Apache 和Tomcat 的配置文件作出修改就可以了。
Tomcat 也擴展了一些App Server 的功能,如JNDI, 數(shù)據(jù)庫連接池,用戶事務(wù)處理等等。Tomcat 被非常廣泛的應(yīng)用在中小規(guī)模的Java Web 應(yīng)用中。在Tomcat5中,在Servlet2.3 中擁有一些事件監(jiān)聽器的功能我們可以利用這些功能來對事應(yīng)用或者Session 等進行一些列的實行監(jiān)聽。Tomcat 還有好多其他的一些特征,如與SSL 集成到一塊,實現(xiàn)安全傳輸。很多中小應(yīng)用不需要采用EJB 等技術(shù),JSP 和Servlet 已經(jīng)足夠,這時如果用應(yīng)用服務(wù)器就有些浪費了,我們自然會選擇Tomcat。
JSP 和Servlet的開發(fā)主要是在Tomcat的基上來進行開發(fā)的,JSP 與Servlet的開發(fā)并沒有想象中的麻煩,一般的一些文本編輯器或著IDE都是可以開發(fā)的, 最后,把這些東西壓縮為成WAR格式的就可以了。另外,也可以利用標(biāo)簽庫實現(xiàn)Java 代碼與HTML 文件的分離,使JSP 的維護更方便。
Tomcat 也可以與其它一些軟件一起來實現(xiàn)更多的功能,如與JBoss 集起來開發(fā)EJB, 與Cocoon 集成起來開發(fā)基于XML 的應(yīng)用,與OpenJMS 集成起來開發(fā)JMS 應(yīng)用,除了這幾種,可以與Tomcat 集成的軟件還有很多。
1.4.4 軟硬件需求
硬件需求:
CPU:Pentium以上計算機
內(nèi)存: 512M以上
軟件需求:
操作系統(tǒng)版本:Windows XP /vista/Win7
開發(fā)工具:MyEclipse 6.0.1
后臺服務(wù)器:Apache Tomcat 6.0
開發(fā)語言:Java
瀏覽器:F6.0

1.5 可行性研究分析
可行性分析能夠讓系統(tǒng)用最低的開發(fā)成本來獲得最高的經(jīng)濟效益。可行性分析目的是根據(jù)所開發(fā)系統(tǒng)的用戶需求,明確研究方向,明確目標(biāo)[1] 。通過一些社會上的調(diào)查以及一些系統(tǒng)的框架設(shè)計功能模塊的分析,找到可行的方法。對要設(shè)計實現(xiàn)的倉庫管理系統(tǒng)從技術(shù)上、經(jīng)濟上、操作上、法律上進行可行性研究調(diào)查,這樣既能夠保證信息資源的合理利用,也能夠避免在設(shè)計程序過程中因失誤而導(dǎo)致的系統(tǒng)錯漏問題,協(xié)助我們對設(shè)計做出更加合理和可惜的抉擇[6]。
對所有系統(tǒng)完成設(shè)計,都可能受到時間以及空間上的制衡。因此,在開始設(shè)計每一個項目的時候,我們必須對系統(tǒng)進行可行性需求分析,只有這樣才能夠降低項目所帶來的危害,減少人力、物力以及財力方面的損耗。在這里簡單了解一下對技術(shù)、經(jīng)濟、系統(tǒng)和發(fā)展方面的可行性分析。
可行性研究這一部分的主要目的是探討問題是在定義階段所確定的問題有沒有可行的解,可行性研究是必須的。在這個主要的階段是從經(jīng)濟可行性、技術(shù)可行性、操作可行性和法律可行性等幾個可行性來討論項目是否能夠解決及是否值得去解決。通過可行性研究可以減少一些不必要的損失。

1.5.1 系統(tǒng)目標(biāo)可行性分析
本系統(tǒng)可以用最小的時間、經(jīng)費充分幫助倉庫管理人員進行倉庫貨品的數(shù)量進行管理,可以對商品的類型、出入庫時的數(shù)目、還有時間方面進行查詢。也可以對客戶使用貨物查看貨物,貨物與供應(yīng)商之間進行輔助。
1.5.2 系統(tǒng)的經(jīng)濟可行性
倉庫管理系統(tǒng)是基于JSP技術(shù)來開發(fā),采用的軟件都是開源的,這樣能夠削減很多的精力和資源,降低開發(fā)成本,同時也能夠提升設(shè)計的作用,所以系統(tǒng)在開發(fā)人力、財力要求不高,具有經(jīng)濟可行性。
1.5.3 系統(tǒng)的技術(shù)可行性
在本系統(tǒng)的開發(fā)包含有前端的程序開發(fā)與后臺的數(shù)據(jù)庫的連接與數(shù)據(jù)庫的維護。對于應(yīng)用程序的開發(fā)則是要使用起來比較簡單上手而且要兼具各方面的功能,而對于數(shù)據(jù)庫的建立和維護必須要求有一套完整的數(shù)據(jù)庫、數(shù)據(jù)必須要安全穩(wěn)定。本系統(tǒng)開發(fā)的重點就是對數(shù)據(jù)庫的設(shè)計和操作。在大學(xué)對軟件工程,軟件測試,UML統(tǒng)一建模語言等課程進行過系統(tǒng)的了解,也能夠?qū)@些課程進行開發(fā),能讓我們能夠進一步辨別、開發(fā)與檢驗系統(tǒng)。所以,本倉庫管理系統(tǒng)系統(tǒng)的開發(fā)在技術(shù)方面必定是高效的。
倉庫管理系統(tǒng)是一個數(shù)據(jù)庫的管理查詢系統(tǒng),要求運行環(huán)境、硬件、軟件不高,操作簡單,完全可以運用我們的技術(shù)實現(xiàn)系統(tǒng)的功能。
1.5.4 系統(tǒng)的法律可行性
本系統(tǒng)完全是自己設(shè)計的管理系統(tǒng),對于本人來說具有重大的實際意義。開發(fā)環(huán)境軟件和使用的數(shù)據(jù)庫都是開源代碼,因此對這個系統(tǒng)進行開發(fā)與普通的系統(tǒng)軟件設(shè)計存在很大不同,沒有侵權(quán)等問題,在法律上完全具有可行性。
綜上所述,設(shè)計一個倉庫管理系統(tǒng)具有效率高,操作簡便,降低成本等優(yōu)點,是必要可行的。

2. 軟件需求分析 軟件需求分析是開發(fā)的第一個階段,也是軟件開發(fā)周期中的一個非常重要的階段,根本任務(wù)是確定用戶對軟件系統(tǒng)的需求。它是項目開發(fā)的基礎(chǔ),它確定軟件系統(tǒng)做什么,具有什么功能性能,有什么約束條件等。在軟件的需求分析階段所得到的結(jié)果在后期的軟件開發(fā)的過程中是十分重要的,經(jīng)過嚴(yán)格評審并得到用戶確認(rèn)是必須經(jīng)過的。

2.1 需求分析
需求分析是系統(tǒng)開發(fā)的首要步驟,直接影響系統(tǒng)整體性能和功能的最主要的步驟。系統(tǒng)的需求分析最重要的是對系統(tǒng)的可行性、性能和功能等方面進行具體地分析。不合理的需求分析,會使系統(tǒng)的開發(fā)環(huán)節(jié)出現(xiàn)許多錯誤和走許多彎路,導(dǎo)致系統(tǒng)開發(fā)時間長,效率低,系統(tǒng)質(zhì)量受到影響[8]。
2.1.1 用例圖
倉庫管理系統(tǒng)分為系統(tǒng)管理員和客戶等不同種類的用戶角色。在本系統(tǒng)的整個的用例功能模塊包括管理員管理、用戶管理等模塊,管理員模塊的主要功能包括查看庫存信息,修改信息,用戶管理,產(chǎn)品入庫,產(chǎn)品出庫等功能,如圖2-1所示為倉庫管理員用例圖。

圖2-1 管理員用例圖

用戶模塊的功能主要包括有庫存信息的查找,用戶信息的修改,用戶管理等功能,如圖2-2所示為客戶用例圖。

圖2-2 客戶用例圖
2.1.2 類圖
倉庫管理系統(tǒng)中有管理員、客戶、還有貨物三大類。如圖2-3所示為倉庫管理系統(tǒng)的三大類之間的類圖關(guān)系。

圖2-3 系統(tǒng)類圖
2.2 功能需求分析
1、登錄驗證功能:為了保證倉庫管理系統(tǒng)信息的安全性,進入系統(tǒng)時需要對用戶身份進行驗證,如果驗證無誤可成功進入系統(tǒng),如果用戶名或者密碼不正確將返回錯誤提示要求重新輸入。
2、管理員管理功能:此功能屬于系統(tǒng)的管理員功能,他實現(xiàn)了對所有用戶的管理操作,可以添加一個新的用戶,也可以對已經(jīng)添加的業(yè)務(wù)員進行刪除的操作。
3、用戶的查詢功能模塊:此項功能屬客戶管理員功能,用戶可以根據(jù)條件查詢客戶信息,也可以對客戶信息進行修改。
4、倉庫存儲的查詢管理功能:此功能屬系統(tǒng)管理員與客戶共有的功能,客戶可以實現(xiàn)查看、入庫以及出庫等功能,兩者都可以查看庫存信息。
5、用戶的信息管理模塊:此項功能屬于用戶管理員的功能,業(yè)務(wù)員可以對自己的客戶信息進行管理與修改。
2.3 業(yè)務(wù)流程分析
倉庫管理系統(tǒng)主要分為兩大用戶功能,兩種功能所實現(xiàn)的功能流程如下所示。
2.3.1 管理員模塊業(yè)務(wù)流程
倉庫的管理員可以通過帳號和密碼驗證之后進行登錄,登錄到系統(tǒng)之后主要的功能是對商品與用戶的信息進行管理,主要流程如圖 2-4 所示。

圖2-4 管理員程序流程圖
2.3.2 客戶模塊業(yè)務(wù)流程分析
管理員可以通過帳號和密碼進行登錄,登錄后的主要功能是對用戶與品信息的管理,主要的功能包括查看用戶信息、修改用戶信息、對庫存商品進行查看等。主要業(yè)務(wù)流程圖如圖 2-5 所示。

圖2-5 客戶程序流程圖
2.4 數(shù)據(jù)流程分析
基于對業(yè)務(wù)流程的分析,對數(shù)據(jù)流分析。
2.4.1 頂層數(shù)據(jù)流
現(xiàn)行的頂層數(shù)據(jù)流圖如圖2-6所示。

圖2-6 頂層數(shù)據(jù)流圖

2.4.2 一層數(shù)據(jù)流圖
具體分析第一層數(shù)據(jù)流圖,包括有商品的管理、用戶信息的管理。商品管理,主要包括用戶對產(chǎn)品的入庫操作、查詢操作、出庫操作等一系列的處理以及管理員對產(chǎn)品的管理。用戶管理,管理員能對用戶的信息來操作。詳細流程圖如圖2-7所示。

圖2-7 一層數(shù)據(jù)流程圖

2.4.3 二層數(shù)據(jù)流圖
具體分析第二層數(shù)據(jù)流圖,包括的功能信息有用戶注冊、用戶登錄,產(chǎn)品入庫,產(chǎn)品查詢,產(chǎn)品出庫等功能。
用戶注冊模塊數(shù)據(jù)流圖如圖2-8所示:

圖2-8 用戶注冊功能的數(shù)據(jù)流圖

用戶登錄功能的數(shù)據(jù)流圖如圖2-9所示:

圖2-9 用戶登錄功能模塊的數(shù)據(jù)流圖

商品入庫功能模塊的數(shù)據(jù)流圖如圖2-10所示:

圖2-10 商品入庫模塊
如圖2-11所示為商品查詢功能模塊的數(shù)據(jù)流圖:

圖2-11 商品查詢模塊

如圖2-12所示為商品出庫模塊的數(shù)據(jù)流圖:

圖2-12 商品入庫模塊

2.5 數(shù)據(jù)字典分析
2.5.1 數(shù)據(jù)存儲條目
文件名:用戶信息表
組成:本次剛剛注冊用戶 + 之前注冊過的用戶
組織方式:索引類型的文件,以用戶名為索引
文件名:商品庫存表
組成:本次新入庫商品+以前入庫商品
組織方式:索引文件,以商品編號為索引
2.5.2 加工條目

加工名:商品存儲處理
編號:無
輸入:商品信息
輸出:庫存信息表

加工名:商品入庫處理
編號:無
輸入:商品信息
輸出:庫存信息表

加工名:商品出庫
編號:無
輸入:商品信息
輸出:庫存信息表

加工名:用戶信息存儲
編號:無
輸入:用戶信息
輸出:用戶信息表

加工名:用戶查詢處理
編號:無
輸入:用戶名
輸出:用戶信息表

加工名:用戶信息驗證
編號:1.1
輸入:用戶信息
輸出:用戶信息表

加工名:驗證用戶是否存在
編號:1.2
輸入:用戶名
輸出:用戶信息表

加工名:錄入用戶信息
編號:1.3
輸入:用戶信息
輸出:用戶信息表

加工名:登陸系統(tǒng)時的信息驗證
編號:2.1
輸入:用戶名、密碼
輸出:用戶信息表

加工名:個人信息查詢
編號:2.2
輸入:用戶名
輸出:用戶信息表

加工名:審查商品信息
編號:3.1
輸入:商品名稱
輸出:商品信息表

加工名:驗證是否為新商品
編號:3.2
輸入:商品名稱
輸出:庫存信息表

加工名:錄入商品
編號:3.3
輸入:商品信息
輸出:庫存信息表

加工名:查詢商品
編號:4.2
輸入:商品名稱
輸出:庫存信息表

  • 軟件總體設(shè)計
    軟件系統(tǒng)的設(shè)計是在整個系統(tǒng)在實現(xiàn)軟件開發(fā)過程中的十分重要的一個環(huán)節(jié)。本章將主要介紹一下倉庫管理系統(tǒng)的總體結(jié)構(gòu)與系統(tǒng)的架構(gòu)[2]。總體設(shè)計的結(jié)構(gòu)實際上介紹了各個模快相互產(chǎn)生的關(guān)系,數(shù)據(jù)庫的設(shè)計主要說明了表的建立與數(shù)據(jù)之間的關(guān)系。
    系統(tǒng)怎樣實現(xiàn)是在總體設(shè)計階段的階段的基本目標(biāo)。所以總體設(shè)計又被叫做為概要設(shè)計。在經(jīng)歷過這個階段的工作,開發(fā)人員又將可以組成系統(tǒng)的物理元素,例如有文件、程序、還有數(shù)據(jù)庫等。但是這些物理元素還處于黑盒子的形式。總體設(shè)計的另一項任務(wù)是設(shè)計軟件的總體結(jié)構(gòu),即為了找出系統(tǒng)中的每一樣程序都是由那些模塊組成的,每個模塊的功能及模塊和模塊之間的接口、調(diào)用關(guān)系等,但所有這些都不要求設(shè)計模塊的內(nèi)部過程的細節(jié)。
    容易看出,軟件設(shè)計的結(jié)構(gòu)是基于模塊之上的,根據(jù)分析階段得到的數(shù)據(jù)流圖來設(shè)計軟件結(jié)構(gòu)。數(shù)據(jù)流圖是設(shè)想各種可能方案的基礎(chǔ)。首先,分析員從提供的方案中選出若干個設(shè)計方案,然后對這些方案進行篩選,從而選出一個合理方案。對于復(fù)雜的大型系統(tǒng)要進行功能分解,為確定軟件結(jié)構(gòu),把一些設(shè)十分復(fù)雜的處理功能適當(dāng)?shù)胤纸獬梢幌盗斜容^簡單復(fù)雜的功能,然后在進行軟件結(jié)構(gòu)設(shè)計。最后制定測試計劃,書寫文檔并復(fù)審。
    3.1 軟件結(jié)構(gòu)設(shè)計原則
    軟件總體設(shè)計的任務(wù)是軟件的結(jié)構(gòu)體系設(shè)計與軟件的模塊化設(shè)計。為了提高軟件設(shè)計質(zhì)量,人們在長期的計算機軟件開發(fā)過程中積累了豐富經(jīng)驗,對這些經(jīng)驗做出總結(jié)會進一步得出一下軟件設(shè)計準(zhǔn)則。
    3.1.1 軟件的結(jié)構(gòu)體系
    軟件的體系結(jié)構(gòu)是在整個軟件系統(tǒng)中最基層的。設(shè)計準(zhǔn)則如下:
    1.體系結(jié)構(gòu)是一種抽象的結(jié)構(gòu)。
    2.軟件的體系結(jié)構(gòu)能夠保持一定時間的穩(wěn)定。
    3.良好的體系結(jié)構(gòu)意味著普通、高校和穩(wěn)定。
    3.1.2 軟件模塊設(shè)計原則
    在軟件開發(fā)過程中,軟件的模塊化式設(shè)計關(guān)鍵,軟件模塊化設(shè)計需要遵循的總則如下:
    1.模塊的耦合性降低,模塊的內(nèi)聚性要提高。
    2.模塊的作用范圍需要能夠控制。
    3.模塊接口設(shè)計要簡單,以便降低復(fù)雜程度和冗余度。
    4.設(shè)計功能可預(yù)測并能得到驗證的模塊。
    5.適當(dāng)劃分模塊規(guī)模,已保持其獨立性。
    3.1.3 軟件的模塊化
    模塊是軟件結(jié)構(gòu)的基礎(chǔ),是軟件元素,是能夠單獨命名、獨立完成一定功能的程序語句的集合,如高級語言中的過程、函數(shù)、子程序等。廣義的將,在面向?qū)ο蟮姆椒▽W(xué)中其中的對象也屬于模塊,模塊是構(gòu)成程序的基本構(gòu)件,在程序設(shè)計中有很重要的地位。
    模塊化是使得軟件能夠?qū)Ω稄?fù)雜問題所具備的屬性。使用模塊化是為了使軟件的復(fù)雜性能夠降低,能簡單的操作軟件的設(shè)計、維護、還有測試。模塊化技術(shù)的運用還可以防 止錯誤蔓延,從而可以提高系統(tǒng)的可靠性。關(guān)于模塊可以降低軟件復(fù)雜性的事實。
    3.2 系統(tǒng)任務(wù)概述
    一個成功的網(wǎng)站應(yīng)明確為什么要建立這個網(wǎng)站,確定網(wǎng)站所擁有的功能,明確網(wǎng)站所有的規(guī)模、投資花費的費用等[8],了解這些都需去市場進行調(diào)查。只有經(jīng)過詳細的策劃,才能夠免去在網(wǎng)站的建設(shè)中出現(xiàn)的很多問題網(wǎng)站的建設(shè)才會順利[4]。同時,一個大型的計算機網(wǎng)站系統(tǒng),需要有一個十分明確的思想做指導(dǎo),并且通過一系列合理的結(jié)構(gòu)設(shè)計,就能夠充分發(fā)揮出倉庫管理系統(tǒng)的巨大優(yōu)勢。
    在倉庫管理系統(tǒng)系統(tǒng)的實現(xiàn)時首先我們要考慮下面幾點:
    安全性。現(xiàn)在社會是一個信息的社會,信息就是寶貴的財富,保證信息的安全,特別是個人信息更加的需要安全性。
    先進性。結(jié)合當(dāng)前流行趨勢,開發(fā)要符合用戶的需求,適合用戶進行網(wǎng)上預(yù)約掛號的系統(tǒng)。本系統(tǒng)采用的這些技術(shù)完全基于微軟平臺進行開發(fā),從來有效的降低了系統(tǒng)的運營成本,大大提高了該醫(yī)院預(yù)約掛號系統(tǒng)的穩(wěn)定性和易維護性。
    可擴展性。本系統(tǒng)給用戶帶來了極大的便利,提高了網(wǎng)站的管理效率,因此在開發(fā)系統(tǒng)的功能過程中,我們要考慮到系統(tǒng)的可擴展性,便于將來系統(tǒng)的升級、更新。
    有效性。實際上這里所說的有效性包括了兩個方面的意思,即有用性和可用性。其中有用性是指的是站點能滿足用戶需求的潛在功能,而可用性指的是能夠通過站點來操作實現(xiàn)系統(tǒng)的體現(xiàn)功能。所以實現(xiàn)在倉庫管理系統(tǒng)的功能時一定要盡最大的可能滿足用戶的需求。
    3.2.1 系統(tǒng)的功能設(shè)計
    倉庫管理系統(tǒng)主要分為兩個個用戶角色,主要是管理員角色與用戶角色,其功能如下:
    1.管理員
    管理員可以通過帳號和密碼進行登錄,登錄到系統(tǒng)后主要功能是對庫存信息的管理,主要包括個人信息管理、商品進行入庫、出庫、查詢操作、客戶的信息進行查看修改、退出系統(tǒng)等功能。
    2.用戶
    用戶可以注冊登錄成為會員,其中的系統(tǒng)功能包括系統(tǒng)首頁,查詢庫存,注冊登錄,我的信息,退出系統(tǒng)等一些功能。
    3.2.2 系統(tǒng)功能結(jié)構(gòu)
    根據(jù)上述分析,得出的功能結(jié)構(gòu)圖有,如圖3-1所示。
  • 圖 3-1 系統(tǒng)總體結(jié)構(gòu)圖
    3.3 系統(tǒng)架構(gòu)
    B/S系統(tǒng)對客戶機的工作量做了極大的簡化,對數(shù)據(jù)庫的訪問以及應(yīng)用程序的執(zhí)行都將由服務(wù)器來完成。B/S架構(gòu)主要使用WWW瀏覽器技術(shù),根據(jù)各種基于瀏覽器的腳本語言。在B/S架構(gòu)基礎(chǔ)上軟件結(jié)構(gòu)的安裝、修改與維修的需要在服務(wù)器端解決。使用該系統(tǒng)時,只需要一個瀏覽器用戶可以運行所有的模塊,從而實現(xiàn)了“零客戶端”功能,很容易在運行時自動升級。B/S架構(gòu)也有一個均質(zhì)機,網(wǎng)上異構(gòu)網(wǎng)絡(luò),異構(gòu)應(yīng)用服務(wù)的聯(lián)機[10]。
    B/S系統(tǒng)由以下三層構(gòu)成,三層是相對獨立又相互關(guān)聯(lián),在這里我們在三個層面上做一個介紹:
    1.表示邏輯層提出一個服務(wù)請求到網(wǎng)絡(luò)上的Web服務(wù)器,并且開始驗證身份,主頁信息被HTTP給傳送給客戶端,主頁文件會被客戶機收到,并將主頁文件信息顯示在Web瀏覽器上。
    2.用戶的數(shù)據(jù)請求會被控制邏輯層接受到,數(shù)據(jù)庫與程序相互連接,并進行數(shù)據(jù)處理請求的數(shù)據(jù)庫服務(wù)器,然后Web服務(wù)器開始接受數(shù)據(jù)庫服務(wù)器的數(shù)據(jù)處理的結(jié)果,最后再返回給客戶端。
    3.數(shù)據(jù)表示層接受Web服務(wù)器請求的數(shù)據(jù)庫操作,以實現(xiàn)對數(shù)據(jù)庫操作的一系列的功能, Web服務(wù)器來接收操作結(jié)果。
    3.4 系統(tǒng)主要子模塊設(shè)計
    在對系統(tǒng)的功能設(shè)計進行分析,在對系統(tǒng)的小模塊在進行劃分,即系統(tǒng)的模塊化。建立系統(tǒng)的整體的結(jié)構(gòu)了解模塊之間的關(guān)系如何。系統(tǒng)的功能需求分析和企業(yè)倉庫管理的有各自不同的特點。
    3.4.1 用戶登錄子模塊設(shè)計
    系統(tǒng)中用戶登錄驗證相對比較簡單,可以將其流程概括如下:
    在用戶登錄時,系統(tǒng)要求在用戶名的輸入框與密碼的輸入框輸入相應(yīng)的信息,然后再由系統(tǒng)將其傳送至相應(yīng)的服務(wù)器端。服務(wù)器端處理程序時,服務(wù)器會根據(jù)提交的內(nèi)容將用戶名中的內(nèi)容以及密碼框的內(nèi)容進行分離,再與數(shù)據(jù)庫中的數(shù)據(jù)進行比對判斷。如果輸入的內(nèi)容能夠相互匹配會進入到登錄首頁;若不能正常匹配則系統(tǒng)會跳轉(zhuǎn)到報錯界面。
    3.4.2 商品入庫子模塊設(shè)計
    首先,入庫申請人需要向倉庫管理員提交一份入庫申請單和相應(yīng)的貨物,倉庫管理員會根據(jù)所提交的清單進行對比。如果發(fā)現(xiàn)貨物與入庫申請單中的數(shù)據(jù)有所差異,那么則拒絕貨物入庫操作;如果發(fā)現(xiàn)庫存中有該商品存在,還需考慮入庫貨物的數(shù)量加上現(xiàn)有的庫存量是不是超過了該倉庫的最大庫存量,若超過則暫時禁止入庫。沒有超過的話,倉庫的管理員進行入庫操作。如果該庫存中沒有該商品存在,則需要重新添加該商品,計算該商品可在庫存中所能存放的最大庫存量,重新考慮入庫貨物的數(shù)量加上現(xiàn)有的庫存量是不是超過了該倉庫的最大庫存量,若超過則暫時禁止入庫。貨物存入倉庫之后,該倉庫管理員需要給入庫申請人開具一份貨物入庫單,入庫單中的內(nèi)容必須嚴(yán)謹(jǐn)。至此該系統(tǒng)的入庫流程全部完成。
    3.4.3 商品出庫子模塊設(shè)計
    在進行出庫操作時,首先,出庫申請人需要向倉庫管理員提交一份申請單。若申請單不真實,則取消出庫操作,不再繼續(xù)進行出庫。對真實有效的出庫單,倉庫管理員再對照其要求出庫的貨物名稱查詢該貨物的信息和庫存量。如果此貨物的庫存量達未到所需要數(shù)量則取消出庫操作。如果此貨物的庫存量達到所需要數(shù)量,可以執(zhí)行出庫操作并且記錄。隨后倉庫管理員給該申請人開出庫單據(jù),倉庫管理系統(tǒng)出庫流程全部完成。
    3.4.4 用戶注冊子模塊設(shè)計
    系統(tǒng)中用戶登錄驗證相對比較簡單,可以將其流程概括如下:
    在用戶注冊時,需要在注冊的頁面各框中輸入用戶名、密碼、姓名、性別、年齡、聯(lián)系方式、email、聯(lián)系地址等一系列信息,系統(tǒng)將其提交至服務(wù)器端。服務(wù)器端處理程序時,服務(wù)器根據(jù)提交的內(nèi)容將用戶名與其他信息進行分離判斷。如果沒有找到所注冊的用戶名,系統(tǒng)會進一步進行注冊;當(dāng)在注冊的過程中有空的情況下系統(tǒng)會有相應(yīng)的提示。在進行email注冊時,在注冊的欄中輸入的不正確時,系統(tǒng)會提示出錯誤。當(dāng)輸入的內(nèi)容符合要求時會繼續(xù)注冊。還可以選擇清空,從頭開始在注冊一遍內(nèi)容。

  • 數(shù)據(jù)庫設(shè)計
    數(shù)據(jù)庫的設(shè)計在開發(fā)的過程中占有一個十分關(guān)鍵的作用,在這里強調(diào)數(shù)據(jù)庫重要性的作用,原因是數(shù)據(jù)庫是軟件開發(fā)過程的根基,前期的建設(shè)不牢固,會使得后期的建設(shè)出現(xiàn)大批量的問題,在后期的處理過程中會非常的困難。
    通常概念設(shè)計的主要目標(biāo)是設(shè)計并反映出某一個組織部門的信息需求中的要求,數(shù)據(jù)庫系統(tǒng)通常是獨立的并主要存在于:數(shù)據(jù)庫系統(tǒng)的邏輯結(jié)構(gòu)、DBMS即數(shù)據(jù)庫管理系統(tǒng)、計算機系統(tǒng)等模式。
    概念模式的設(shè)計方法是在需求分析的基礎(chǔ)上,通常使用E-R模型來表示數(shù)據(jù)以和數(shù)據(jù)之間的聯(lián)系,開發(fā)出能夠解決用戶信息要求和處理要求的數(shù)據(jù)庫的模式。數(shù)據(jù)庫概念設(shè)計的主要目標(biāo)是能夠準(zhǔn)確的描述應(yīng)用領(lǐng)域的信息模式,并且支持用戶的不同應(yīng)用,并方便轉(zhuǎn)換為數(shù)據(jù)庫系統(tǒng)邏輯模式以及方便用戶理解。該模型是不能夠直接的用于數(shù)據(jù)庫系統(tǒng)的實現(xiàn)的,因為它主要是面向現(xiàn)實世界的數(shù)據(jù)模型。在此階段,用戶可以參與和評價數(shù)據(jù)庫系統(tǒng)的設(shè)計,從而有利于保證數(shù)據(jù)庫系統(tǒng)的設(shè)計能夠滿足用戶的需求。
    4.1 數(shù)據(jù)庫概念
    數(shù)據(jù)庫技術(shù)從年代中期至今只有不到年的歷史,但其發(fā)展速度之快是其它技術(shù)所不及的。數(shù)據(jù)庫的發(fā)展已經(jīng)從剛開始的網(wǎng)狀型數(shù)據(jù)庫發(fā)展到后來的的關(guān)系型數(shù)據(jù)庫現(xiàn)如今已經(jīng)變?yōu)橐悦嫦驅(qū)ο鬄橹饕P偷臄?shù)據(jù)庫。數(shù)據(jù)庫技術(shù)現(xiàn)如今已經(jīng)與網(wǎng)絡(luò)的通信技術(shù)、現(xiàn)如今流行的人工智能技術(shù)以及面向?qū)ο蟮木幊趟枷氲燃夹g(shù)之間互有融合,并且使得其得到了廣泛的發(fā)展與應(yīng)用。
    數(shù)據(jù)庫的原理管理方式根據(jù)的是數(shù)據(jù)結(jié)構(gòu)的方式進行的管理還有存儲數(shù)據(jù)的數(shù)據(jù)倉庫,在本次系統(tǒng)中的作用主要是用來查詢倉庫管理系統(tǒng)的系統(tǒng)設(shè)計與實現(xiàn)數(shù)據(jù)的存儲。使用數(shù)據(jù)庫可以帶來許多好處:使得數(shù)據(jù)的冗余度得到了減少,而且在一定的程度上使得數(shù)據(jù)的存儲的空間得到了充分的利用,讓數(shù)據(jù)資源能夠最大程度的得到共享等等。尤其在最近的一些年中計算機的關(guān)系數(shù)據(jù)庫的不斷地發(fā)展,使得編程方面更大限度的得到便利,在處理數(shù)據(jù)的過程中更加方便快捷,操作更容易上手。
    數(shù)據(jù)庫設(shè)計的目的是指在特定的環(huán)境下能夠在建立好的應(yīng)用模式與好的應(yīng)用環(huán)境之下使得用戶的各種需求得到滿足。
    數(shù)據(jù)庫在一個完整的網(wǎng)站中是必不可少的,原因是在網(wǎng)頁被訪問的過程中都會有數(shù)據(jù)保存下來,網(wǎng)站會是這些數(shù)據(jù)保存在一個文件中。可是在實際的網(wǎng)站建設(shè)當(dāng)中,這些文件所能保存的數(shù)據(jù)往往是不夠的,無法滿足各種數(shù)據(jù)的需求[5]。因此一個完美的網(wǎng)站的建設(shè)必須擁有一個完美的數(shù)據(jù)庫。我們現(xiàn)在可以使用的數(shù)據(jù)庫有很多種,如數(shù)據(jù)庫、數(shù)據(jù)庫等等,在本次設(shè)計中,選擇了ORACLE數(shù)據(jù)庫作為后臺數(shù)據(jù)庫工具。自從ORACLE數(shù)據(jù)庫推出一來,得到了快速的發(fā)展,很快便在應(yīng)用市場中占有了十分重要的地位。在時代的不斷發(fā)展過程中,ORACLE數(shù)據(jù)庫已經(jīng)在發(fā)展的過程中占據(jù)了牢固的地位,在下如今工作的前景之下,以數(shù)據(jù)庫為背景的應(yīng)用發(fā)展,為用戶的應(yīng)用提供了款完善的數(shù)據(jù)管理和數(shù)據(jù)分析解決方案。數(shù)據(jù)庫是一種具有屬于自己的結(jié)構(gòu)與管理的方式數(shù)據(jù)的倉庫。數(shù)據(jù)庫簡單來說是是屬于一種文件柜電子化的一種存儲工具(主要用于電子文件的存儲),用戶可以對其中的文件進行一定的操作。它能夠把以一種屬于自己的方式進行存儲、而且能夠使得多個用戶之間的數(shù)據(jù)相互的分享、還能使得用戶數(shù)據(jù)的冗余度能夠最大程度的減少、在應(yīng)用程序之間的各種數(shù)據(jù)能夠分離。
    4.2 數(shù)據(jù)庫分析
    數(shù)據(jù)的模型屬于在數(shù)據(jù)庫當(dāng)中中用來存儲數(shù)據(jù)的一種方式,是數(shù)據(jù)庫系統(tǒng)的基礎(chǔ)。
    數(shù)據(jù)模型經(jīng)歷了:
    1、層次模型:是數(shù)據(jù)庫系統(tǒng)中最早使用的一種模型,它的數(shù)據(jù)的結(jié)構(gòu)是一棵“有向樹”
    2、網(wǎng)狀模型:網(wǎng)狀模型以網(wǎng)狀結(jié)構(gòu)表示實體之間的聯(lián)系。網(wǎng)中的每一個結(jié)點代表一個記錄類型,聯(lián)系用鏈接指針來實現(xiàn)。網(wǎng)狀模型可以表示許多不同的聯(lián)系,還能表示不同的數(shù)據(jù)之間的交流,即數(shù)據(jù)間的橫向關(guān)系與縱向關(guān)系,屬于擴展之后的層次模型。網(wǎng)狀模型可以方便地表示各種類型的聯(lián)系,但結(jié)構(gòu)復(fù)雜,實現(xiàn)的算法難以規(guī)范化
    3、關(guān)系型:在關(guān)系模型中基本數(shù)據(jù)結(jié)構(gòu)就是二維表,不用像層次或網(wǎng)狀那樣的鏈接指針。
    4.2.1 數(shù)據(jù)庫的完整性分析
    數(shù)據(jù)的正確性與數(shù)據(jù)之間的相容性即為數(shù)據(jù)哭庫的完整性。用來管理數(shù)據(jù)庫的系統(tǒng),需要用一定的機制來檢查現(xiàn)存的數(shù)據(jù)庫中的數(shù)據(jù)是否滿足規(guī)定的條件,數(shù)據(jù)的約束條件是基于倉庫管理系統(tǒng)設(shè)計與實現(xiàn)語義的體現(xiàn),會作為模式的一部分存入數(shù)據(jù)庫之中。本系統(tǒng)中定義了表與表之間的聯(lián)系有助于實現(xiàn)完整性規(guī)則,一般在程序中實現(xiàn)具體的完整性控制。數(shù)據(jù)庫的完整性約束能夠在一定的程度上防止終端的用戶輸入一些錯誤的數(shù)據(jù),以此來保證所有的數(shù)據(jù)庫中的數(shù)據(jù)都是合法的、完整的。
    在設(shè)計數(shù)據(jù)庫表時采用數(shù)據(jù)庫完整性約束,它是數(shù)據(jù)庫完整性的一種機制,他會在之前用來定制一些規(guī)則,用來約束數(shù)據(jù)庫,而這些數(shù)據(jù)規(guī)則存放于數(shù)據(jù)庫中,具體來說,這種約束有以下幾種非空約束缺省值約束唯一性約束主鍵約束外部鍵約束規(guī)則約束。由于這種約束是加在數(shù)據(jù)庫的表的定義上的,因此,不需要有大的代價便可以取得一些高的性能。
    4.2.2 數(shù)據(jù)庫的安全性分析
    能夠保證數(shù)據(jù)的網(wǎng)整性、合法性還有安全性是數(shù)據(jù)庫重要的安全性能的指標(biāo)。數(shù)據(jù)能夠在數(shù)據(jù)庫中大量的存放并且能夠?qū)崿F(xiàn)數(shù)據(jù)之間的共享,這都屬于數(shù)據(jù)庫的寶貴的資源。
    數(shù)據(jù)庫的安全和服務(wù)器的安全是倉庫管理系統(tǒng)安全的重要性能。采用管理員表示和鑒定的方法實現(xiàn)數(shù)據(jù)庫的安全,此安全管理措施并不在前臺開發(fā)工具中實現(xiàn),而是在后臺數(shù)據(jù)庫中實現(xiàn)。在登錄數(shù)據(jù)庫時,系統(tǒng)讓管理員戶表示自己的身份,不同的管理員權(quán)限不同,系統(tǒng)進行核實,分辨出此管理員是否能夠與系統(tǒng)匹配,若是,系統(tǒng)進一步核實用戶,通常要求重新輸入,系統(tǒng)和用戶重新輸入的信息用來鑒別用戶的身份。服務(wù)器的安全也是通過判斷用戶在登錄服務(wù)器時輸入信息是否與數(shù)據(jù)庫中的信息相匹配來驗證的[3]。這種方法比較容易實現(xiàn),實現(xiàn)起來也比較方便。沒有采用更加復(fù)雜的系統(tǒng)安全管理措施是因為本管理系統(tǒng)一般是應(yīng)用在校園網(wǎng)中,采用安全管理措施主要是為了防止沒有修改權(quán)限的用戶無意間修改了數(shù)據(jù),因此采用用戶標(biāo)識和鑒定的安全管理措施就能夠保障數(shù)據(jù)庫的安全性。
    4.3 數(shù)據(jù)庫的設(shè)計
    4.3.1 概念結(jié)構(gòu)設(shè)計
    在次結(jié)構(gòu)的設(shè)計過程當(dāng)中,E-R模型法是最常見的設(shè)計方法。
    在次結(jié)構(gòu)設(shè)計當(dāng)中中,有以下幾種方法方法:
    自下往上、從上往下、逐步擴張、相互結(jié)合,以這種方式為模型然后煩別實現(xiàn)各個結(jié)構(gòu)的模型。
    在物理結(jié)構(gòu)設(shè)計階段首先分兩步走:
    確定數(shù)據(jù)庫的物理結(jié)構(gòu),是用來說明數(shù)據(jù)在數(shù)據(jù)庫中怎么樣存儲的。
    選取正確的關(guān)系模式存取方法有好多種方法進行選擇。
    概念設(shè)計通常是從系統(tǒng)的需求出發(fā),常常將對象使用數(shù)據(jù)流的形式表達成為完整的抽象實體。而與模塊內(nèi)部的細節(jié)無關(guān)。E-R圖為主要的工具,如下圖4-1。
  • 圖4-1 系統(tǒng)E-R圖
    4.3.2 邏輯結(jié)構(gòu)設(shè)計
    (1) 管理員信息關(guān)系模式,里面的主鍵是管理員ID。
    管理員(管理員ID、用戶名、email、密碼、聯(lián)系方式、姓名、聯(lián)系地址、性別)
    (2) 客戶信息關(guān)系模式,里面的關(guān)系主鍵是客戶ID。
    客戶(客戶ID、用戶名、email、密碼、聯(lián)系方式、姓名、聯(lián)系地址、性別)
    (3) 商品信息關(guān)系模式,里面的關(guān)系主鍵是商品編號。。
    商品(商品編號、商品價格、商品名、類別、生產(chǎn)產(chǎn)地、商品數(shù)量)

    表3-1 管理員信息表
    列名 數(shù)據(jù)類型 可否為空 說明
    id number NOT NULL 管理員編號
    account varchar NOT NULL 帳號
    Password varchar NOT NULL 密碼
    name varchar NOT NULL 姓名
    sex varchar NOT NULL 性別
    age varchar NOT NULL 年齡
    phone varchar NOT NULL 聯(lián)系方式
    email varchar NOT NULL E-mail
    address varchar NOT NULL 地址

    表3-2 客戶信息表
    列名 數(shù)據(jù)類型 可否為空 說明
    id number NOT NULL 客戶編號
    account varchar NOT NULL 帳號
    password varchar NOT NULL 密碼
    name varchar NOT NULL 姓名
    sex varchar NOT NULL 性別
    age varchar NOT NULL 年齡
    phone varchar NOT NULL 聯(lián)系方式
    email varchar NOT NULL E-mail
    address varchar NOT NULL 地址

    表3-3 商品信息表
    列名 數(shù)據(jù)類型 可否為空 說明
    id number NOT NULL 庫存編號
    name Varchar NOT NULL 商品名稱
    goodsid varchar NOT NULL 商品編號
    price varchar NOT NULL 商品價格
    sort varchar NOT NULL 商品分類
    num varchar NOT NULL 商品數(shù)量
    address varchar NOT NULL 生產(chǎn)廠商
    4.4 數(shù)據(jù)庫的連接
    本系統(tǒng)與數(shù)據(jù)庫的連接方式,包括對數(shù)據(jù)庫中的信息進行添加、刪除、修改,都使用的數(shù)據(jù)持久化層(persistence layer)的開源框架Mybatis,它抽象了大量的JDBC冗余代碼,并提供了一個簡單易用的API和數(shù)據(jù)庫交互。以便倉庫管理人員在計算機上運行本系統(tǒng)時,對數(shù)據(jù)庫進行必要的操作.
    4.4.1 連接工具
    本系統(tǒng)采用mybatis數(shù)據(jù)持久化層的開源框架與數(shù)據(jù)庫進行連接,包括對數(shù)據(jù)庫中的信息進行添加、刪除、修改. MyBatis簡化與實現(xiàn)了在變成中的數(shù)據(jù)的持久化層(persistence layer),并且它抽象出了大量的JDBC冗余代碼,并提供了一個簡單易用的API和數(shù)據(jù)庫交互。MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin創(chuàng)建。MyBatis3是iBATIS的另一個版本,而且支持注解還有Mapper。
    MyBatis具有簡單性和易使用性,所以,才會開始流行起來。在Java應(yīng)用程序中,將從數(shù)據(jù)庫查詢到的數(shù)據(jù)生成所需要的Java對象;將Java對象中的數(shù)據(jù)通過SQL長期保存到數(shù)據(jù)庫中,都是數(shù)據(jù)庫的設(shè)計中所涉及到的。MyBatis通過抽象底層的JDBC代碼,自動化SQL結(jié)果集產(chǎn)生Java對象、Java對象的數(shù)據(jù)持久化數(shù)據(jù)庫中的過程使得對SQL的使用變得容易。
    使用Mybatis的具有一下幾點的優(yōu)勢:

  • 它消除了大量的不必要的重復(fù)代碼。

  • 學(xué)習(xí)和使用起來非常簡單。

  • 能與其他的一些數(shù)據(jù)庫在一起共同使用。

  • 它可以接受SQL語句。

  • 具有與其他的一些框架一起使用的集成支持。

  • 提供了與第三方緩存類庫的集成支持。

  • 引入了更好的性能
    4.4.2 工廠類配置文件主要內(nèi)容



















    4.4.3 Mapper類配置文件主要代碼


    select * from admin
    where account=#{account}


    select * from admin
    where id=#{id}



    select admin_seq.nextval from dual

    insert into admin values(#{id},#{account},#{password},#{name},#{sex},#{age},#{phone},#{email},#{address})


    update Admin set account=#{account},password=#{password}, name=#{name}, sex=#{sex}, age=#{age}, phone=#{phone}, address=#{address}, email=#{email}
    where account=#{account}

  • 軟件詳細設(shè)計
    在軟件的詳細設(shè)計的這個階段確定應(yīng)該使用什么樣的方式來實現(xiàn)整個系統(tǒng)使這個階段的根本目的,通過這一階段的具體的努力基本上能夠明確整個系統(tǒng)所需要實現(xiàn)的所有的功能,具體的就是微軟件結(jié)構(gòu)圖中每個模塊確定采用的算法和塊內(nèi)數(shù)據(jù)結(jié)構(gòu),用某種選定的詳細設(shè)計工具更清晰的描述。經(jīng)過這一階段的努力可以在編碼階段直接翻譯成為源程序。
    在這個階段中,考慮到的程序代碼的質(zhì)量時必須注意,程序的“讀者”有兩個,即計算機和人。在整個軟件生存周期中,軟件的測試與診斷出的程序的錯誤還有程序錯誤的修改等都必須先讀程序。實際上對于任何一個經(jīng)常使用的軟件系統(tǒng),程序員在之后的過程中,讀程序所花費的時間可能比寫程序所花費的時間還要長的多。因此,衡量程序的質(zhì)量不僅僅看他的邏輯是否正確,性能是否滿足要求,更重要的是看他是否一度易理解。詳細設(shè)計的目的不僅僅看他的邏輯上是否正確,性能是否滿足于要求,更重要的是看他是否易讀、易理解。結(jié)構(gòu)化的程序設(shè)計技術(shù)是實現(xiàn)這些問題所使用的關(guān)鍵性技術(shù),更是詳細設(shè)計的基礎(chǔ)。
    在本次倉庫管理系統(tǒng)說實現(xiàn)的這些基本功能。倉庫管理的人員或者是客戶在登錄后可以進入系統(tǒng)使用主界面進行相應(yīng)的操作。
    5.1 登錄模塊
    在本次的倉庫管理系統(tǒng)中有兩個不同的入口。倉庫管理人員使用用戶名和密碼之后可以對應(yīng)有相應(yīng)的操作。用戶的登錄所需的用戶名和密碼已經(jīng)在之前的用戶信息表中建立,用戶的個人信息由管理員提前錄入或者自己注冊。由于用戶信息需要先從所對應(yīng)的數(shù)據(jù)庫中進行讀取,所以在讀取之前需要先于數(shù)據(jù)庫進行連接。在本系統(tǒng)當(dāng)中,有兩個登陸模塊的入口。如下圖所示確認(rèn)文件審核用戶提供的用戶名和密碼。
    管理員登錄圖片如下:

    圖5-1 管理員登錄
  • 管理員登陸模塊主要邏輯代碼如下:
    AloginServlet.java文件主要代碼如下:
    String account = request.getParameter(“in_be”);
    String password = request.getParameter(“pass”);
    HttpSession session = request.getSession();
    session.setAttribute(“account”, account);
    AdminService adminService = new AdminService();
    SqlSession sqlSession = MybatisSessionFactory.getSession();
    AdminDaoImp aDaoImp = new AdminDaoImp();
    try {
    List fadmin = aDaoImp.findAdminByName(account);
    sqlSession.clearCache();
    sqlSession.commit();
    //session.close();
    System.out.println(“用戶名不存在,ADS開始注冊”+fadmin);
    for(Admin fAdmin2:fadmin)
    {
    if( password.equals(fAdmin2.getPassword()))
    {
    response.sendRedirect(“AFirstLog.jsp”);
    session.setAttribute(“Admin”, fAdmin2);
    //System.out.println(“帳號密碼正確!”);
    find=true;
    }
    }
    if (fadmin.size()==0) {
    System.out.println(“用戶名不存在,ADS開始注冊”+fadmin);
    response.sendRedirect(“AloginFail.html”);
    throw new AdminServiceException(“用戶名不存在!”);
    }

    else {if(find==false){response.sendRedirect("AloginFail.html");throw new AdminServiceException("密碼錯誤!");}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}

    5.2 入庫模塊
    商品入庫模塊這是系統(tǒng)設(shè)計得最好最完善的模塊之一。系統(tǒng)提供兩種入庫方式可供選擇一次是錄入庫存中已經(jīng)錄入的商品,或者錄入庫存中沒有錄入的商品
    ,另外添加新商品。錄入已存在商品方式時,可自由選擇錄入某種商品。己錄入的商品的信息會在相應(yīng)的信息的框中顯示出來。在此模塊的編程中,使用了非常多的編程技巧來提供上述功能做到了與完美的配合。此種方式便于管理員掌握相應(yīng)商品的情況。按商品名查詢可以在選定撒謊能夠品后,查詢某一次或多次商品信息。
    添加已有上商品模塊如圖5-2所示:

    圖5-2 添加已有商品圖片
    當(dāng)有新的商品進入倉庫中時,倉庫管理人員需點擊入庫界面的“添加新商品”選項。在對現(xiàn)有的商品進行入庫操作時,商品的信息都是重新輸入的。當(dāng)將新入庫的商品的信息填寫完畢之后,系統(tǒng)會自己將新入庫的一些商品的信息添加到管理商品信息的數(shù)據(jù)表“goods”中。
    添加新商品模塊如圖5-3所示:

    圖5-3 添加新商品模塊
    5.3 出庫模塊
    商品出庫模塊這是系統(tǒng)設(shè)計得最好最完善的模塊之一。系統(tǒng)提供出庫方式是在庫存表中已經(jīng)儲存有商品基礎(chǔ)上才能可以出庫的。若是在庫存中商品品的數(shù)量小于所要出庫的輸了時,系統(tǒng)會顯示出庫存數(shù)量不足。在進行出庫的操作過程時,若是出庫的商品在庫存中的數(shù)量小于0時,系統(tǒng)會報出出庫商品出錯。此時都不可以正常出庫。在正常出庫之后,庫存中商品的數(shù)量會發(fā)生改變。

    圖5-4 出庫管理模塊圖片
    在出庫商品的管理模塊中的主要邏輯代碼如下:
    GoodsDaoImp goodsDaoImp = new GoodsDaoImp();

    OutGoodsDaoImp outGoodsDaoImp = new OutGoodsDaoImp();for(Goods goods2:goods){String GoodsNum = goods2.getNum();System.out.println("goods2值為:"+goods2);Integer IntGoodsNum = Integer.valueOf(GoodsNum);Goods goods3 = goods2;System.out.println("IntGoodsNum :"+IntGoodsNum);if (IntOutNum>IntGoodsNum) {System.out.println("出庫數(shù)量不足!");response.sendRedirect("OutStockFail.jsp");}else{goods2.setNum(String.valueOf(IntGoodsNum-IntOutNum));try {//goods3.setNum(String.valueOf(IntOutNum));goodsDaoImp.updateGoods(goods2);sqlSession.commit();goods3.setNum(String.valueOf(IntOutNum));outGoodsDaoImp.saveOutGoods(goods3);sqlSession.commit();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}response.sendRedirect("Goods.jsp"); System.out.println("出庫成功!");} }

    5.4 用戶注冊模塊
    在用戶需要訪問此系統(tǒng)時,用戶需要在登錄框中輸入相應(yīng)的信息,然后系統(tǒng)在后臺服務(wù)器中與數(shù)據(jù)庫進行匹配。所以在進入系統(tǒng)之前需要進行帳號密碼的注冊,在注冊的過程中需要輸入輸入用戶名、密碼、姓名、性別、年齡、聯(lián)系方式、email、聯(lián)系地址等一系列信息,系統(tǒng)將其提交至服務(wù)器端。服務(wù)器端處理程序時,服務(wù)器會獲取到系統(tǒng)提交的內(nèi)容,然后系統(tǒng)會將獲取的信息與數(shù)據(jù)庫中所存儲的表格中的信息進行對比,得出相應(yīng)的結(jié)果。若是輸入的用戶名是在數(shù)據(jù)庫的庫存中已經(jīng)存在的,系統(tǒng)會終止注冊,然后系統(tǒng)會提示用戶名已經(jīng)被使用,請重新注冊的提示。如果在進行繼續(xù)注冊的過程中出現(xiàn)某一項信息沒有填寫時,系統(tǒng)會發(fā)出此項信息沒有填寫請重新填寫的提示。在進行email注冊時,若輸入的格式與系統(tǒng)定義的格式不匹配的情況下,系統(tǒng)會作出相應(yīng)的警告在重新注冊。若注冊的信息不滿足要求時,可以將信息清空再重新注冊。

    圖5-5 用戶注冊系統(tǒng)

    用戶注冊模塊的邏輯代碼如下:

    String account = request.getParameter(“in_be”);
    String password = request.getParameter(“pass”);
    HttpSession session = request.getSession();
    session.setAttribute(“account”, account);
    //System.out.println(“賬戶為:”+account);
    //System.out.println(“密碼為:”+password);
    AdminService adminService = new AdminService();
    SqlSession sqlSession = MybatisSessionFactory.getSession();
    AdminDaoImp aDaoImp = new AdminDaoImp();
    try {
    List fadmin = aDaoImp.findAdminByName(account);
    sqlSession.clearCache();
    sqlSession.commit();
    //session.close();
    // /session.flush();
    for(Admin fAdmin2:fadmin)

    {
    if( password.equals(fAdmin2.getPassword()))
    {
    response.sendRedirect(“AFirstLog.jsp”);
    session.setAttribute(“Admin”, fAdmin2);
    //System.out.println(“帳號密碼正確!”);
    find=true;
    }
    }
    if (fadmin.size()==0) {
    System.out.println(“用戶名不存在,ADS開始注冊”+fadmin);
    response.sendRedirect(“AloginFail.html”);
    throw new AdminServiceException(“用戶名不存在!”);
    }

    else {if(find==false){response.sendRedirect("AloginFail.html");throw new AdminServiceException("密碼錯誤!");}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();

    }
    、}
    5.5 個人信息管理模塊
    當(dāng)管理員或用戶進入到主界面之后,管理員可以選擇信息管理選項,會進入到用戶信息的管理模塊。管理員或者用戶在系統(tǒng)中具有兩項功能,第一項功能是可以對管理員或用戶的個人信息進行一些列的操作。在此界面上面可以查詢到用戶全部的個人信息。第二項功能是能夠管理全部的用戶的信息。在進入信息管理模塊對個人的信息可以進行查看,可以修改自己的信息。在點擊修改之后會完成所對應(yīng)的個人信息。
    管理員信息模塊圖片如圖5-6所示:

    圖5-6 管理員信息
    此信息模塊的主要邏輯代碼如下:
    request.setCharacterEncoding(“UTF-8”)
    response.setCharacterEncoding(“UTF-8”);
    String account = request.getParameter(“userid”);
    String password = request.getParameter(“password”);
    String name = request.getParameter(“name”);
    String sex = request.getParameter(“sex”);
    String age = request.getParameter(“age”);
    String phone = request.getParameter(“phone”);
    String email = request.getParameter(“email”);
    String address = request.getParameter(“address”);
    Admin admin = new Admin();
    admin.setAccount(account);
    admin.setPassword(password);
    admin.setName(name);
    admin.setSex(sex);
    admin.setAge(age);
    admin.setPhone(phone);
    admin.setEmail(email);
    admin.setAddress(address);
    System.out.println(“AInfServlet獲取的信息:”+admin);
    SqlSession sqlSession = MybatisSessionFactory.getSession();
    HttpSession session = request.getSession();
    AdminDaoImp aDaoImp = new AdminDaoImp();
    try {
    aDaoImp.updateAdmin(admin);
    sqlSession.commit();
    session.setAttribute(“admin”, admin);
    response.sendRedirect(“AInf.jsp”);
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    在這個模塊當(dāng)中,管理員可以對所有的信息進行修改,所有的用戶的信息也可以被查詢到。在客戶的需求之下,管理員可以隨意的進入到某一位客戶的信息界面之下,可以對所有的信息進行管理。修改之后用戶可使用最新一次更新的信息進行登錄,進入主界面之后可以更新自己信息。
    系統(tǒng)中全部的用戶信息塊如圖5-7所示:

    圖5-7 管理員對客戶信息管理
    實現(xiàn)此模塊的主要邏輯代碼如下:

    String password = request.getParameter(“password”);
    String name = request.getParameter(“name”);
    String sex = request.getParameter(“sex”);
    String age = request.getParameter(“age”);
    String phone = request.getParameter(“phone”);
    String email = request.getParameter(“email”);
    String address = request.getParameter(“address”);

    Customer customer = new Customer();customer.setAccount(account);customer.setPassword(password);customer.setName(name);customer.setSex(sex);customer.setAge(age);customer.setPhone(phone);customer.setEmail(email);customer.setAddress(address);System.out.println("AInfServlet獲取的信息:"+customer);SqlSession sqlSession = MybatisSessionFactory.getSession();HttpSession session = request.getSession();CustomerDaoImp customerDaoImp = new CustomerDaoImp();try {customerDaoImp.updateCustomer(customer);sqlSession.commit();//response.sendRedirect("ACInf.jsp");session.setAttribute("customer",customer);response.sendRedirect("ACInf.jsp");}

    catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

  • 系統(tǒng)的測試
    系統(tǒng)測試是軟件設(shè)計過程中最后的一部分,也是非常重要的一步。用于檢查軟件的質(zhì)量、性能、可靠性等是否符合用戶需求。一套嚴(yán)謹(jǐn)?shù)摹⒁?guī)范的、完善的測試過程將大大提高軟件的質(zhì)量、可信度、可靠性,降低軟件的出錯率,降低用戶風(fēng)險系數(shù)。
    軟件測試就是用戶希望能夠通過軟件測試尋找出軟件當(dāng)中的一些錯誤,以考慮該產(chǎn)品能不能被廣大的用戶所接受。而軟件測試者則是替用戶受過。而今,人們已認(rèn)識到,用戶能夠得到最為滿意的產(chǎn)品是軟件測試的最終的目的,盡可能多的發(fā)現(xiàn)系統(tǒng)的問題并改正,然后交給客戶使用。
    在測試的過程中主要需要實現(xiàn)一下幾點要求:
    1)要完成并實現(xiàn)在前期承諾所需要實現(xiàn)的功能,并且在系統(tǒng)中的每一項功能都需要有說明書。
    2)所做出來的產(chǎn)品的性能要得到滿足。
    3)產(chǎn)品應(yīng)該能夠適應(yīng)所有的用戶的環(huán)境。
    總之,軟件測試的最終的目標(biāo)是希望能夠找出系統(tǒng)中所存在的一些不足與缺陷,而且要求與軟件需求階段所提出的要求相匹配。要注意的是:軟件的測試并不能說明軟件中沒有錯誤,只能發(fā)現(xiàn)并盡可能的減少錯誤。
    6.1 測試簡述
    軟件測試,是在軟件的完整性、安全性、正確性以及質(zhì)量是否過關(guān)的一種描述。也可以說成是輸出比較的一種過程。軟件測試的經(jīng)典定義是:在一定的條件之下來操作并使用軟件,在這個過程中來發(fā)現(xiàn)并且找出軟件自身的錯誤,以此來評價一個軟件的質(zhì)量。
    在經(jīng)過查詢一系列的資料表明出,軟件的測試工作在軟件的整個開發(fā)的過程當(dāng)中占有極其重大的一部分。在一些情況表明之下,如果所設(shè)計的軟件關(guān)系到人的生命安全的情況下,軟件的測試會變的即為的重要,并且還需要有成倍的工作量來增加測試的目的,以此來說明程序能正確的執(zhí)行它應(yīng)有的功能,還有表明程序沒有錯誤。如果抱有這樣的目的,就不會輕易地發(fā)現(xiàn)錯誤,從而導(dǎo)致選擇一些不易暴露錯誤的例子。
    6.1.1 測試目的及重要性
  • 測試目的
    系統(tǒng)的測試是一個在開發(fā)過程中十分重要的一個階段。在系統(tǒng)的測試階段找出程序的錯誤,并提高系統(tǒng)的性能是測試階段的主要任務(wù)。主要目的是檢驗系統(tǒng)“做得怎樣”。通過軟件的測試會發(fā)現(xiàn)一系列的問題,還能找出問題的原因,然后再對這些問題進行修改。
    Grenford J.Myers在以前提出過一下的軟件問題:
    1.找出程序中盡可能多的問題。
    2.設(shè)計出一個非常好的測試方案,有可能發(fā)現(xiàn)一些到目前為止沒有能發(fā)現(xiàn)的錯誤。
    3.如果能夠找出之前并未發(fā)現(xiàn)的錯誤,算是設(shè)計出了一個成功的方案。
    4.測試不是單獨的找出錯誤。而是通過分析錯誤,來找出產(chǎn)生錯誤的原因,來避免發(fā)生錯誤,幫助程序員找出軟件開發(fā)過程中的缺陷,以便及時進項改正。
    2.測試重要性
    不管是什么技術(shù),以及如何使用的方法,但該軟件,該軟件將仍然是放錯了地方。為了減少引入的錯誤,您可以使用最新的語言,最領(lǐng)先的開發(fā)方法,詳細的改進開發(fā)過程,可是就算是這樣也不能夠完全的消除軟件上面的錯誤,還要進行詳細的測試過程,以找出引入的錯誤,你必須通過測試誤差估計密度在軟件中。所有工程學(xué)科最根本的所在是一個測試,是在軟件開發(fā)中占有很重要的一個部分。測試陪同,從編程本身的日子。統(tǒng)計顯示,軟件測試這個階段所花費的成本為這個測試是30%至50%的軟件開發(fā)總成本的。要是也考慮了維護的階段,在軟件開發(fā)的整個周期中,有所降低的也許是測試的成本比例,可是維護的工作,實際上是相當(dāng)于對軟件進行了第二次的開發(fā),還有可能是多次,許多測試工作也一定包含在其中。
    在實踐中,因為還有一個感知測試這是不正確的和錯誤的態(tài)度,后導(dǎo)致一系列的問題,主要包括有:
    假設(shè)測試,也很難帶來成就試驗人員從某種意義上說,作為設(shè)計和編碼一樣容易取得進展:
    那個戒指是不是建立在自然破裂,找到軟件錯誤作為測試的目標(biāo),他們負(fù)責(zé)的負(fù)面測試工作中發(fā)現(xiàn)錯位;
    測試工作是一種比較乏味、缺少技術(shù)性的工作;
    有時候開發(fā)人員在開發(fā)出軟件之后自信心會比較強大,在發(fā)現(xiàn)錯誤后,所表達的意見與他們的自尊心會有所沖突、矛盾。
    軟件測試,不賺錢、技術(shù)含量低不需要專門去做的錯誤認(rèn)知。
  • 6.1.2 測試原則
    在軟件測試中人們所具有的經(jīng)驗非常重要,但人們的心理因素也更加的很重要的。根據(jù)軟件測試的目標(biāo)確定一些測試原則,將一些容易被人們忽視的、實際上又是顯而易見的問題作為原則來加以重視,所以測試有以下幾大原則。
    1.測試用力既要有合理的數(shù)據(jù)的輸入,又需要有一定合理的輸出結(jié)果。
    2.合理的用例固然重要,但是卻不能忘卻一些不合理的用例。
    3.檢查程序時,需要檢查程序該做的與不該做的事情。
    4.測試的計劃需要早早的開始制定。
    5.測試計劃、測試用例、測試報告需要進行長期的保存,以免以后出問題可以解決。
    6.遵守二八原則。
    7.軟件的開發(fā)人員應(yīng)該盡量避免不要親自去進行測試。
    6.2 測試方法
    測試的過程是一個執(zhí)行程序的過程,即要求被測試程序能夠在各種環(huán)境下運行。其實,不再記起上運行也可以發(fā)現(xiàn)程序的錯誤。為了便于區(qū)分,一般把被測程序在機器上運行稱為動態(tài)測試,不再機器上運行稱為靜態(tài)測試,廣義上講都屬于軟件測試。動態(tài)分析方法又分為黑盒測試和白盒測試兩種方法。以下的兩種方法是即為典型的測試方法。
    6.2.1 黑盒測試
    黑河測試,即功能測試。他的工作重點不是考慮程序應(yīng)該是怎么編寫的。往往將被測試的程序看成一個黑盒,只是在軟件的接口處開始進行測試,根據(jù)前期制定的需求說明,來檢查所做出來的程序是否滿足了所有的功能要求。程序梭邊寫出來的每一項功能,都能不能滿足用戶在輸入數(shù)據(jù)之后所要達到的目的與要求。并且保持外部信息的完整性。在黑盒測試中會有以下的錯誤。
    1.發(fā)現(xiàn)一些沒有實現(xiàn)的功能。
    2.在接口上,數(shù)據(jù)能不能正確的別接收,結(jié)果是否合理。
    3.性能上是否滿足要求。
    4.所做出來的界面是不是很清晰、美觀。
    6.2.2 白盒測試
    白盒測試,即結(jié)構(gòu)化的測試,主要測試程序的內(nèi)部組成。白盒測試與黑盒測試法不同,測試人員將程序視為一個透明的盒子,測試人員需要檢查處理過程的中一些細微的程序,要求對程序的結(jié)構(gòu)性做到一定程度的覆蓋,以此來檢驗程序內(nèi)部的一些組成。
    白盒測試法也不可能完全測試,也做不到對所有的路徑都挨個測試一遍。例如要測試一個循環(huán)20次的嵌套if語句,循環(huán)體中有5條路徑,這樣的測試程序會產(chǎn)生很多種情況。如果每1ms完成一條路徑的測試,測試完這樣的一個程序需要花費很多的時間,因此可能做到完全覆蓋。
    總之,無論哪種測試的方法,對于一個大的軟件系統(tǒng)完全測試是不可能的,所以我們要找出更多更合適的方法進行測試,使得軟件產(chǎn)品達到一定的質(zhì)量標(biāo)準(zhǔn)的要求。
    6.2.3 單元測試
    單元測試(unit testing),對軟件設(shè)計中的一些細小的結(jié)構(gòu)單元進行測試。單元測試是在軟件開發(fā)過程中要進行的最低級別的測試活動,軟件的測試單元與其他部分相隔離的情況下進行測試。
    6.2.4 集成測試
    集成測試,即軟件的聯(lián)合測試。以單元測試為基礎(chǔ),把系統(tǒng)中所做出來的一些模塊結(jié)合起來進行測試。
    6.3系統(tǒng)模塊的測試
    6.3.1 登陸模塊測試:
    在首次進入系統(tǒng)時,首次進入的是登陸注冊的界面,在輸入的信息有效的情況下會進入到首界面。如圖6-1所示為系統(tǒng)的登錄界面的測試:

    圖6-1 管理員登錄測試
    在當(dāng)帳號密碼出錯時,系統(tǒng)會自動跳轉(zhuǎn)到一個報錯的頁面如圖6-2所示:

    圖6-2 登錄出錯界面
    6.3.2 出庫模塊測試

    系統(tǒng)在進入主界面之后會有一個出庫模塊的入口,在進入到出庫模塊時,在輸入的出庫數(shù)量小于庫存數(shù)量商品能夠進行正常出庫操作,查詢庫存結(jié)果隨之更新。出庫的數(shù)量比庫存中的數(shù)量躲得情況下,會跳轉(zhuǎn)一個出庫出錯的界面,提示庫存數(shù)量不足。該模塊之下的測試用例如下:
    庫存中的信息如圖6-3所示:

    圖6-3 出庫前庫存信息
    以華為手機出庫為例先存量為103,出庫數(shù)量20(如圖6-4所示):

    圖6-4 出庫信息圖
    在進行完出庫的操作之后,如圖6-5所示:

    圖6-5 出庫后庫存信息圖

    出庫數(shù)量超出庫存數(shù)量,以鉛筆為例,出庫25個如圖6-6所示:

    圖6-6 鉛筆出庫信息圖
    鉛筆進行出庫操作后庫存中的信息圖如圖6-7所示:

    圖6-7 庫存不足出庫后信息圖
    用戶信息模塊測試:
    此模塊的信息如圖6-8所示:

    圖6-8 用戶信息圖
    修改后信息圖如圖6-9所示:

    圖6-9 修改后用戶信息圖
    6.4.3 用戶信息模塊測試結(jié)果
    當(dāng)在操作中,進入到系統(tǒng)中的這個模塊時,可以查看到本人的所有登錄信息。可以對此模塊中的所有的信息都進行修改操作,然后在對所作出的操作進行更新。

    總 結(jié)
    基于Web的倉庫管理系統(tǒng)在之后的市場發(fā)展中有著非常廣闊的前景,會對傳統(tǒng)的一些理念造成巨大的沖擊。本文是運用了計算機學(xué)科中的兩項重要的技術(shù)即計算機網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫技術(shù)出發(fā),分析了Web數(shù)據(jù)庫及JSP技術(shù)在本次倉庫管理系統(tǒng)中的應(yīng)用。本文的主要工作如下:
    1、探討了數(shù)據(jù)庫應(yīng)用系統(tǒng)所經(jīng)歷的主機/服務(wù)器—瀏覽器/服務(wù)器模式,重點討論了三層結(jié)構(gòu)的工作原理及其特點,其中有中間件技術(shù)(CGI和API), Java技術(shù)、JSP技術(shù)、JScript技術(shù)、Mybatis技術(shù)、PowerDesiner技術(shù)等,而且還從一定的方面評價分析了其中的優(yōu)缺點。
    2、探討了怎么合理的運用在軟件工程中所學(xué)習(xí)的一些基本原理去分析和設(shè)計實現(xiàn)倉庫管理系統(tǒng)的過程。并對系統(tǒng)的開發(fā)原理、功能設(shè)計和模塊的設(shè)計做出系統(tǒng)的分析。
    3、論文中詳盡的介紹了倉庫管理系統(tǒng)的總體框架和使用的主要技術(shù)、以及功能的實現(xiàn)。
    本文通過理論聯(lián)系實際,對三層架構(gòu)結(jié)構(gòu)上的Web數(shù)據(jù)庫的不同實現(xiàn)方法作了詳盡的分析,同時使用JSP技術(shù)開發(fā)的一個倉庫管理系統(tǒng)。

    致 謝
    衷心感謝我的指導(dǎo)老師,老師淵博深厚的學(xué)識,敏銳的眼光,精辟的見解,創(chuàng)新的開拓精神,嚴(yán)謹(jǐn)認(rèn)真的治學(xué)風(fēng)范,勤奮謙遜的工作態(tài)度,以及忘我的工作精神是我終身的學(xué)習(xí)楷模,導(dǎo)師對我耐心的指導(dǎo)和嚴(yán)格的要求使我的學(xué)習(xí)有了不斷提高和許多收獲,并將繼續(xù)激勵我在今后的工作中克服困難,迎接挑戰(zhàn)。真誠的向尊敬的老師致以崇高的敬意!
    本人的論文得以完成,與所有的授課老師以及全體同學(xué)的啟發(fā)和幫助是密不可分的,在此向他們表示衷心的謝意!
    特別要感謝我的家人對我學(xué)習(xí)期間的理解、支持與鼓勵!
    隨著科學(xué)技術(shù)的不斷發(fā)展,計算機技術(shù)和網(wǎng)絡(luò)技術(shù)也在日新月異地飛速發(fā)展,人們總是處在不斷學(xué)習(xí)階段,再加上作者水平有限,所以本文肯定存在不少錯誤和不盡如人意之處,歡迎廣大老師和同學(xué)批評指正,在此深表感謝。

    參考文獻

    [1] 鄭人杰等編著,軟件工程[M].清華大學(xué)出版社,1999
    [2] DAVID A. GUSTAFSON,Schaum’s Outline Series -Theory and Problems of SOFTWARE ENGINEERING[M].McGRAW-HILL Companies.Inc,2002
    [3] 唐東,《Web數(shù)據(jù)庫開發(fā)進階》,人民郵電出版社
    [4] Jeffrey D.Ullman.Fundamental Course of Database System[M].TsingHua Press,2001.
    [5] DAVID A. GUSTAFSON,Schaum’s Outline Series -Theory and Problems of SOFTWARE ENGINEERING[M].McGRAW-HILL Companies.Inc,2002
    [6] 張海藩.軟件工程導(dǎo)論[M]. 北京:清華大學(xué)出版社,2003.
    [7] 李習(xí)文,李斌.庫存控制與管理 [M].北京:機械工業(yè)出版社,2007:43-120
    [8] 周之英編著,現(xiàn)代軟件工程[M].科學(xué)出版社,2000
    [9] 徐娟.網(wǎng)頁制作實用技術(shù)[M].北京:清華大學(xué)出版社,2003:21-52.
    [10] 元燕輝等,《瀏覽器/服務(wù)器應(yīng)用開發(fā)》,科學(xué)出版社

    附件1:外文文獻(原文)
    Java Technical Description
    Java as a Programming Platform
    Java is certainly a good programming language. There is no doubt that it is oneofthe better languages available to serious programmers. We think it could potentially have been a great programming language, but it is probably too late for that. Once a language is out in the field, the ugly reality of compatibility with existing code sets in."
    Java was never just a language. There are lots of programming languages out there, and few of them make much of a splash. Java is a whole platform, with a huge library, containing lots of reusable code, and an execution environment that provides services such as security, portability across operating systems, and automatic garbage collection.
    As a programmer, you will want a language with a pleasant syntax and comprehensible semantics (i.e., not C++). Java fits the bill, as do dozens of other fine languages. Some languages give you portability, garbage collection, and the like, but they don’t have much of a library, forcing you to roll your own if you want fancy graphics or networking or database access. Well, Java has everything—a good language, a high-quality execution environment, and a vast library. That combination is what makes Java an irresistible proposition to so many programmers.
    Features of Java
    1.Simple
    We wanted to build a system that could be programmed easily without a lot of esoteric training and which leveraged today’s standard practice. So even though we found that C++ was unsuitable, we designed Java as closely to C++ as possible in order to make the system more comprehensible. Java omits many rarely used, poorly understood, confusing features of C++ that, in our experience, bring more grief than benefit.
    The syntax for Java is, indeed, a cleaned-up version of the syntax for C++. There is no need for header files, pointer arithmetic (or even a pointer syntax), structures, unions, operator overloading, virtual base classes, and so on. (See the C++ notes interspersed throughout the text for more on the differences between Java and C++.) The designers did not, however, attempt to fix all of the clumsy features of C++. For example, the syntax of the switch statement is unchanged in Java. If you know C++, you will find the transition to the Java syntax easy.
    If you are used to a visual programming environment (such as Visual Basic), you will not find Java simple. There is much strange syntax (though it does not take long to get the hang of it). More important, you must do a lot more programming in Java. The beauty of Visual Basic is that its visual design environment almost automatically provides a lot of the infrastructure for an application. The equivalent functionality must be programmed manually, usually with a fair bit of code, in Java. There are, however, third-party development environments that provide “drag-and-drop”-style program development.
    Another aspect of being simple is being small. One of the goals of Java is to enable the construction of software that can run stand-alone in small machines. The size of the basic interpreter and class support is about 40K bytes; adding the basic standard libraries and thread support (essentially a self-contained microkernel) adds an additional 175K.
    2. Object Oriented
    Simply stated, object-oriented design is a technique for programming that focuses on the data (= objects) and on the interfaces to that object. To make an analogy with carpentry, an “object-oriented” carpenter would be mostly concerned with the chair he was building, and secondarily with the tools used to make it; a “non-object-oriented” carpenter would think primarily of his tools. The object-oriented facilities of Java are essentially those of C++.
    Object orientation has proven its worth in the last 30 years, and it is inconceivable that a modern programming language would not use it. Indeed, the object-oriented features of Java are comparable to those of C++. The major difference between Java and C++ lies in multiple inheritance, which Java has replaced with the simpler concept of interfaces, and in the Java metaclass model. The reflection mechanism and object serialization feature make it much easier to implement persistent objects and GUI builders that can integrate off-the-shelf components.
    3. Distributed
    Java has an extensive library of routines for coping with TCP/IP protocols like HTTP and FTP. Java applications can open and access objects across the Net via URLs with the same ease as when accessing a local file system.
    We have found the networking capabilities of Java to be both strong and easy to use. Anyone who has tried to do Internet programming using another language will revel in how simple Java makes onerous tasks like opening a socket connection. (We cover networking in Volume 2 of this book.) The remote method invocation mechanism enables communication between distributed objects (also covered in Volume 2).There is now a separate architecture, the Java 2 Enterprise Edition (J2EE), that supports very large scale distributed applications.
    4. Robust
    Java is intended for writing programs that must be reliable in a variety of ways. Java puts a lot of emphasis on early checking for possible problems, later dynamic (run-time) checking, and eliminating situations that are error-prone.… The single biggest difference between Java and C/C++ is that Java has a pointer model that eliminates the possibility of overwriting memory and corrupting data.
    This feature is also very useful. The Java compiler detects many problems that, in other languages, would show up only at run time. As for the second point, anyone who has spent hours chasing memory corruption caused by a pointer bug will be very happy with this feature of Java.
    If you are coming from a language like Visual Basic that doesn’t explicitly use pointers, you are probably wondering why this is so important. C programmers are not so lucky. They need pointers to access strings, arrays, objects, and even files. In Visual Basic, you do not use pointers for any of these entities, nor do you need to worry about memory allocation for them. On the other hand, many data structures are difficult to implement in a pointerless language. Java gives you the best of both worlds. You do not need pointers for everyday constructs like strings and arrays. You have the power of pointers if you need it, for example, for linked lists. And you always have complete safety, because you can never access a bad pointer, make memory allocation errors, or have to protect against memory leaking away.
    5. Secure
    Java is intended to be used in networked/distributed environments. Toward that end, a lot of emphasis has been placed on security. Java enables the construction of virus-free, tamper-free systems.
    In the first edition of Core Java we said: “Well, one should ‘never say never again,’” and we turned out to be right. Not long after the first version of the Java Development Kit was shipped, a group of security experts at Princeton University found subtle bugs in the security features of Java 1.0. Sun Microsystems has encouraged research into Java security, making publicly available the specification and implementation of the virtual machine and the security libraries. They have fixed all known security bugs quickly. In any case, Java makes it extremely difficult to outwit its security mechanisms. The bugs found so far have been very technical and few in number.
    From the beginning, Java was designed to make certain kinds of attacks impossible, among them:
    ?Overrunning the runtime stack—a common attack of worms and viruses
    ?Corrupting memory outside its own process space
    ?Reading or writing files without permission
    A number of security features have been added to Java over time. Since version 1.1, Java has the notion of digitally signed classesWith a signed class, you can be sure who wrote it. Any time you trust the author of the class, the class can be allowed more privileges on your machine.
    6. Architecture Neutral
    The compiler generates an architecture-neutral object file format—the compiled code is executable on many processors, given the presence of the Java runtime system. The Java compiler does this by generating bytecode instructions which have nothing to do with a particular computer architecture. Rather, they are designed to be both easy to interpret on any machine and easily translated into native machine code on the fly.This is not a new idea. More than 20 years ago, both Niklaus Wirth’s original implementation of Pascal and the UCSD Pascal system used the same technique.
    Of course, interpreting bytecodes is necessarily slower than running machine instructions at full speed, so it isn’t clear that this is even a good idea. However, virtual machines have the option of translating the most frequently executed bytecode sequences into machine code, a process called just-in-time compilation. This strategy has proven so effective that even Microsoft’s .NET platform relies on a virtual machine.
    The virtual machine has other advantages. It increases security because the virtual machine can check the behavior of instruction sequences. Some programs even produce bytecodes on the fly, dynamically enhancing the capabilities of a running program.
    7. Portable
    Unlike C and C++, there are no “implementation-dependent” aspects of the specification. The sizes of the primitive data types are specified, as is the behavior of arithmetic on them.
    For example, an int in Java is always a 32-bit integer. In C/C++, int can mean a 16-bit integer, a 32-bit integer, or any other size that the compiler vendor likes. The only restriction is that the int type must have at least as many bytes as a short int and cannot have more bytes than a long int. Having a fixed size for number types eliminates a major porting headache. Binary data is stored and transmitted in a fixed format, eliminating confusion about byte ordering. Strings are saved in a standard Unicode format.The libraries that are a part of the system define portable interfaces. For example, there is an abstract Window class and implementations of it for UNIX, Windows, and the Macintosh.
    As anyone who has ever tried knows, it is an effort of heroic proportions to write a program that looks good on Windows, the Macintosh, and 10 flavors of UNIX. Java 1.0 made the heroic effort, delivering a simple toolkit that mapped common user interface elements to a number of platforms. Unfortunately, the result was a library that, with a lot of work, could give barely acceptable results on different systems. (And there were often different bugs on the different platform graphics implementations.) But it was a start. There are many applications in which portability is more important than user interface slickness, and these applications did benefit from early versions of Java. By now, the user interface toolkit has been completely rewritten so that it no longer relies on the host user interface. The result is far more consistent and, we think, more attractive than in earlier versions of Java.
    8. Interpreted
    The Java interpreter can execute Java bytecodes directly on any machine to which the interpreter has been ported. Since linking is a more incremental and lightweight process, the development process can be much more rapid and exploratory.
    Incremental linking has advantages, but its benefit for the development process is clearly overstated. In any case, we have found Java development tools to be quite slow. If you are used to the speed of the classic Microsoft Visual C++ environment, you will likely be disappointed with the performance of Java development environments. (The current version of Visual Studio isn’t as zippy as the classic environments, however. No matter what language you program in, you should definitely ask your boss for a faster computer to run the latest development environments. )
    9. High Performance
    While the performance of interpreted bytecodes is usually more than adequate, there are situations where higher performance is required. The bytecodes can be translated on the fly (at run time) into machine code for the particular CPU the application is running on.
    If you use an interpreter to execute the bytecodes, “high performance” is not the term that we would use. However, on many platforms, there is also another form of compilation, the just-in-time (JIT) compilers. These work by compiling the bytecodes into native code once, caching the results, and then calling them again if needed. This approach speeds up commonly used code tremendously because one has to do the interpretation only once. Although still slightly slower than a true native code compiler, a just-in-time compiler can give you a 10- or even 20-fold speedup for some programs and will almost always be significantly faster than an interpreter. This technology is being improved continuously and may eventually yield results that cannot be matched by traditional compilation systems. For example, a just-in-time compiler can monitor which code is executed frequently and optimize just that code for speed.
    10. Multithreaded
    The enefits of multithreading are better interactive responsiveness and real-time behavior.if you have ever tried to do multithreading in another language, you will be pleasantly surprised at how easy it is in Java. Threads in Java also can take advantage of multiprocessor systems if the base operating system does so. On the downside, thread implementations on the major platforms differ widely, and Java makes no effort to be platform independent in this regard. Only the code for calling multithreading remains the same across machines; Java offloads the implementation of multithreading to the underlying operating system or a thread library. Nonetheless, the ease of multithreading is one of the main reasons why Java is such an appealing language for server-side development.
    11. Dynamic
    In a number of ways, Java is a more dynamic language than C or C++. It was designed to adapt to an evolving environment. Libraries can freely add new methods and instance variables without any effect on their clients. In Java, finding out run time type information is straightforward.
    This is an important feature in those situations in which code needs to be added to a running program. A prime example is code that is downloaded from the Internet to run in a browser. In Java 1.0, finding out runtime type information was anything but straightforward, but current versions of Java give the programmer full insight into both the structure and behavior of its objects. This is extremely useful for systems that need to analyze objects at run time, such as Java GUI builders, smart debuggers, pluggable components, and object databases.
    Java and the Internet
    The idea here is simple: users will download Java bytecodes from the Internet and run them on their own machines. Java programs that work on web pages are called applets. To use an applet, you need a Java-enabled web browser, which will execute the bytecodes for you. Because Sun is licensing the Java source code and insisting that there be no changes in the language and basic library structure, a Java applet should run on any browser that is advertised as Java-enabled. Unfortunately, reality has been different. Various versions of Netscape and Internet Explorer run different versions of Java, some of which are seriously outdated. This sorry situation made it increasingly difficult to develop applets that take advantage of the most current Java version. To remedy this problem, Sun has developed the Java Plug-in, a tool that makes the newest Java runtime environment available to both Netscape and Internet Explorer
    When the user downloads an applet, it works much like embedding an image in a web page. The applet becomes a part of the page, and the text flows around the space used for the applet. The point is, the image is alive. It reacts to user commands, changes its appearance, and sends data between the computer presenting the applet and the computer serving it.
    a good example of a dynamic web page—an applet to view molecules—that carries out sophisticated calculations. By using the mouse, you can rotate and zoom each molecule to better understand its structure. This kind of direct manipulation is not achievable with static web pages, but applets make it possible.

    附件2:外文文獻(譯文)

    Java技術(shù)介紹
    Java是一種程序設(shè)計平臺
    Java是一種優(yōu)秀的程序設(shè)計語言。對于一個名副其實的程序設(shè)計人員來說,使用Java無疑是一個好的選擇。有人認(rèn)為:Java將有望成為一種最優(yōu)秀的程序設(shè)計語言,但還需要一個相當(dāng)長的發(fā)展時期。一旦一種語言應(yīng)用于某個領(lǐng)域,與現(xiàn)存代碼的相容性問題就擺在了人們的面前。”
    Java并不只是一種語言。在此之前出現(xiàn)的那么多種語言也沒有能夠引起那么大的轟動。Java是一個完整的平臺,有一個龐大的庫,其中包含很多可重用的代碼和一個提供諸如安全性、跨操作系統(tǒng)的可移植性以及自動垃圾回收等服務(wù)的執(zhí)行環(huán)境。
    作為一名程序設(shè)計人員,常常希望能夠有一種語言,它具有令人賞心悅目的語法和易于理解的語義(C++不是這樣的)。與許多其他的優(yōu)秀語言一樣,Java恰恰滿足了這些要求。有些語言提供了可移植性、垃圾回收等等,但是,沒有提供一個大型的庫,如果想要有奇特的繪圖功能、網(wǎng)絡(luò)連接功能和數(shù)據(jù)庫存取功能就必須自己動手編寫代碼。Java這種功能齊全的出色語言,具有高質(zhì)量的執(zhí)行環(huán)境以及龐大的庫。正是因為它集多種優(yōu)勢于一身,所以對于廣大的程序設(shè)計人員來說有著不可抗拒的吸引力。
    JAVA的特性
    1.簡單性
    人們希望構(gòu)建一個無需深奧的專業(yè)訓(xùn)練就可以進行編程的系統(tǒng),并且要符合當(dāng)今的 標(biāo)準(zhǔn)慣例。因此,盡管人們發(fā)現(xiàn)C++不太適用,但在設(shè)計Java的時候還是盡可能地接近 C++,以便系統(tǒng)更易于理解。Java別除了C++中許多很少使用、難以理解、易混淆的特性。在目前看來,這些特性帶來的麻煩遠遠大于帶來的好處。
    的確,Java語法是C++語法的一個“純凈”版本。這里沒有頭文件、指針運算(甚至指針語法)、結(jié)構(gòu)、聯(lián)合、操作符重載、虛基類等等。(請參看本書各個章節(jié)給出的C++注釋,那里比較詳細地解釋了Java與C++之間的區(qū)別。)然而,設(shè)計者并沒有試圖清除C++中所有不適當(dāng)?shù)奶匦浴@?#xff0c;switch語句的語法在Java中就沒有改變。如果熟悉C++就會發(fā)現(xiàn)可以輕而易舉地將它轉(zhuǎn)換成Java,
    如果已經(jīng)習(xí)慣于可視化的編程環(huán)境(例如Visual Basic),就不會覺得Java簡單了。Java有許多奇怪的語法(盡管掌握其要領(lǐng)并不需要很長時間),更重要的是,使用Java需要自己編寫大量的程序。Visual Basic的魅力在于它的可視化設(shè)計環(huán)境幾乎自動地為應(yīng)用程序提供了大量的基礎(chǔ)結(jié)構(gòu)。而使用Java實現(xiàn)同樣的功能卻需要手工地編制代碼,通常代碼量還相當(dāng)大。然而,已經(jīng)有一些支持“拖放”風(fēng)格程序開發(fā)的第三方開發(fā)環(huán)境。
    簡單性的另一個方面是小。Java的目標(biāo)之一是支持開發(fā)能夠在小型機器上獨立運行的軟件。基本的解釋器以及類支持大約僅為40KB;再加上基礎(chǔ)的標(biāo)準(zhǔn)類庫和對線程的支持(基本上是一個自含的微內(nèi)核)大約需要增加175KB。這是一個了不起的成就。然而,需要注意的是支持圖形用戶界面(GUI)的類庫相當(dāng)大。
    2.面向?qū)ο?br /> 簡單地講,面向?qū)ο笤O(shè)計是一種程序設(shè)計技術(shù)。它將重點放在數(shù)據(jù)(即對象)和對象的接口上。用木匠來打一個比方,一個“面向?qū)ο蟮摹蹦窘呈冀K關(guān)注的是所制作的 椅子,第二位才是所使用的工具;一個“非面向?qū)ο蟮摹蹦窘硠t首先考慮的是所用的工具。在本質(zhì)上,Java的面向?qū)ο竽芰εcC++是一樣的。
    在過去的30年里,面向?qū)ο笠呀?jīng)證明了自身的價值,一種現(xiàn)代的程序設(shè)計語言不使用面向?qū)ο蠹夹g(shù)簡直讓人難以置信。的確,Java的面向?qū)ο筇匦耘cC++旗鼓相當(dāng)。Java與C++的主要不同點在于多繼承,在Java中,取而代之的是簡單的接口概念,以及Java的元類(metaclass)模型。
    反射機制以及對象序列化特性使得Java更加容易實現(xiàn)持久對象和GUI構(gòu)建器(可以整合外來組件)。
    3.分布式
    Java有一個擴展的例程庫,用于處理像HTTP和FTP這類的TCP/IP協(xié)議。Java應(yīng)用程序能夠通過URL打開和訪問網(wǎng)絡(luò)上的對象,其便利程度如同訪問本地文件系統(tǒng)一樣。 人們已經(jīng)看到Java的網(wǎng)絡(luò)能力強大且易于使用。任何曾經(jīng)試圖使用其他語言進行網(wǎng)絡(luò)編程的人都會驚呼Java竟然把類似打開socket連接這類繁重的任務(wù)都變得如此簡單。
    另外,遠程方法調(diào)用機制使得分布式對象之間可以進行通信。 現(xiàn)在有一種獨立的體系結(jié)構(gòu),Java 2企業(yè)版(J2EE ),它支持大規(guī)模的分布式應(yīng)用。
    4.健壯性
    Java的設(shè)計目標(biāo)之一在于使用Java編寫的程序具有多方面的可靠性。Java投入了大量的精力進行早期的問題檢測、后期動態(tài)的(運行時)檢測,并消除了有出錯傾向的狀態(tài)……
    Java和C++最大的不同在于Java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能性。這個特性非常有用。Java編譯器能夠檢測許多在其他語言中僅在運行時刻才能夠檢測出來的問題。至于第二點,對于曾經(jīng)花費幾個小時來檢查由于指針bug而引起內(nèi)存沖突的人來說,一定很喜歡Java的這一特性。
    如果曾經(jīng)只使用過Visual Basic這類沒有顯式指針的語言,就會感覺這么說似乎有些小題大做。然而,C程序員就沒有這樣幸運了。他們需要利用指針來存取串、數(shù)組、對象,甚至文件。
    在Visual Basic中,根本不必使用指針來訪問這些實體,也不必關(guān)心有關(guān)內(nèi)存分配的問題。另一方面,在沒有指針的語言中,許多數(shù)據(jù)結(jié)構(gòu)很難實現(xiàn)。Java具有雙方的優(yōu)勢。它不需要使用指針構(gòu)造諸如串、數(shù)組這樣的結(jié)構(gòu)。如果需要,也能夠具有指針的能力,如鏈表。Java絕對是安全的,其原因是永遠不會存取一個“壞的”指針,造成內(nèi)存分配的錯誤,也不必防范內(nèi)存泄漏。
    5.安全性
    Java適用于網(wǎng)絡(luò)/分布式環(huán)境。為了達到這個目標(biāo),在安全方面投入了很大精力。 使用Java可以構(gòu)建防病毒、防墓改的系統(tǒng)。事實證明這是正確的。在Java開發(fā)工具箱啟用后不久,普林斯頓大學(xué)的一些安全專家們發(fā)現(xiàn)了在Java 1.0中的某些安全特性方面存在著一些非常隱蔽的bug, Sun Microsystems大力支持對Java的安全性的研究,制定了供人們使用的規(guī)范,實現(xiàn)了虛擬機和安全庫,并迅速地處理了所有已知的安全bug。在任何情況下,蒙騙Java的安全機制都是十分困難的。現(xiàn)在,發(fā)現(xiàn)bug所需的技術(shù)性越來越強,數(shù)目越來越少。 從一開始,Java就被設(shè)計成能夠防范各種襲擊,包括:
    ·禁止運行時堆棧溢出。例如,蠕蟲等病毒常用的襲擊手段。
    ·禁止在自己的處理空間之外破壞內(nèi)存。
    ·未經(jīng)授權(quán)禁止讀寫文件。許多安全特性相繼不斷地被加入Java中。
    自從Java 1.1問世以來,Java就有了數(shù)字簽名類(digitally signed class)的概念(請參看卷II)。通過數(shù)字簽名類,可以確定類的作者。如果信任這個類的作者,這個類就可以在你的機器上擁有更多的權(quán)限。
    來自微軟的基于ActiveX技術(shù)的競爭代碼傳輸機制,其安全性完全依賴于數(shù)字簽名。這顯然是不夠的,因為微軟自身產(chǎn)品的任何用戶都可以證實,來自知名提供商的程序會崩潰并對系統(tǒng)產(chǎn)生危害。Java的安全機制比ActiveX要強得多,因為它是在應(yīng)用程序運行時加以拉制并制止惡意性破壞的。
    6.體系結(jié)構(gòu)中立
    編譯器生成一個體系結(jié)構(gòu)中立的目標(biāo)文件格式,這是一種編譯過場代碼,只要有Java運行時系統(tǒng),就可以在許多處理器上運行。Java編譯器通過生成與特定的計算機體系結(jié)構(gòu)無關(guān)的字節(jié)碼指令來實現(xiàn)這一特性。精心設(shè)計的字節(jié)碼不僅可以很容易地在任何機器上被解釋執(zhí)行,而且還可以迅速地翻譯成本地機器的代碼。這并不是什么新的思想。20多年以前,Niklaus Wirth最初實現(xiàn)的Pascal以及UCSD Pascal系統(tǒng)都使用了這種技術(shù)。當(dāng)然,解釋字節(jié)碼肯定要比全速地運行機器指令慢很多。所以說,這是不是一個好的思想還很難講!然而,虛擬機有一個選項,它可以將執(zhí)行最頻繁的字韋碼序列翻譯成機器碼,這一過程被稱為即時編譯。這一策略已經(jīng)被證明十分有效,致使微軟的.NET平臺也依賴于虛擬機。虛擬機還有一些其他的優(yōu)點。虛擬機可以檢測指令序列的行為,以增強其安全性。有些程序甚至能夠快速地生成字節(jié)碼,并動態(tài)地增強所運行程序的處理能力。
    7.可移植性
    與C和C++不同,Java規(guī)范中沒有“依賴具體實現(xiàn)”的地方。塞本數(shù)據(jù)類型的大小以及有關(guān)算法都做了明確的說明。例如,Java中的int永遠為32位的整數(shù),而在C/C++中,int可能是16位整數(shù)、32位整數(shù),也可能是編譯器提供商指定的其他大小。唯一的限制只是int類型的大小不能低于short int,并且不能高于long int。在Java中,數(shù)據(jù)類型具有固足的大小,們除J代消移祖盯竿八大油a’i土女IWJ*I。-ml R77數(shù)據(jù)以固定的格式存儲和傳輸,消除了字節(jié)順序的困擾。字符串是用標(biāo)準(zhǔn)的Unicode格式存儲的。作為系統(tǒng)的組成部分的類庫,定義了可移植的接口。例如,有一個抽象的Window類給出了在UNIX, Windows和Macintosh環(huán)境下的不同實現(xiàn)。
    凡是嘗試過的人都知道,要編寫一個在Windows, Macintosh和10種不同風(fēng)格的、在UNIX上看起來都不錯的程序有多么困難。Java 1.0就嘗試著做了這么一個壯舉,發(fā)布了一個將常用的用戶界面元素映射到不同平臺上的簡單工具箱。遺憾的是,花費了大量的心血,卻構(gòu)建了一個在各個系統(tǒng)上都難以讓人接受的庫(而且,在不同平臺的圖形實現(xiàn)中有不同的bug)。不過,這畢竟是個開端。對于許多應(yīng)用問題來說,可移植性比花枝招展的用戶界面更加重要。而且這些應(yīng)用程序從Java的早期版本中獲益匪淺。現(xiàn)在,用戶界面工具箱已經(jīng)完全被重寫了,不再依賴于主機的用戶接口。現(xiàn)在的Java版本比早期版本更加穩(wěn)定,更加吸引人。
    8.解釋型
    Java解釋器可以在任何移植了解釋器的機器上執(zhí)行Java字節(jié)碼。由于鏈接是一個更加增量且簡便的過程,所以開發(fā)過程也變得更加快捷,更加具有探索性。增量鏈接有其優(yōu)勢,但給開發(fā)過程帶來的好處顯然是言過其實了。在任何情況下,都會覺得Java開發(fā)工具的速度相當(dāng)慢。如果習(xí)慣于經(jīng)典的Microsoft Visual C++環(huán)境的速度,就會對Java開發(fā)環(huán)境的性能感到失望。(但是,Visual Studio的當(dāng)前版本不像經(jīng)典的環(huán)境那樣快捷。無論用什么語言編寫程序,都需要向老板申請一臺速度更快的計算機,以便運行最新的開發(fā)環(huán)境。)
    9.高性能
    盡管對解釋后的字節(jié)碼性能已經(jīng)比較滿意,但在有些情況下卻需要更加高效的性能。字節(jié)碼可以(在運行時刻)被快速地翻譯成運行該應(yīng)用程序的特定CPU的機器碼。如果使用解釋器執(zhí)行字節(jié)碼,根本就不可能用術(shù)語“高性能”。然而,在許多平臺上,還有另一種編譯形式,這就是即時編譯器(JIT編譯器)。它的基本工作方式是一次把字節(jié)碼編譯為本地代碼,并將結(jié)果緩存起來。在需要的時候重新調(diào)用。由于這種方式只需要進行一次解釋,從而極大地提高了常用代碼運行速度。雖然,即時編譯器仍然比真正的本地代碼編譯器慢一些,但是對某些程序來說,能夠提高10倍乃至20倍的速度,而且?guī)缀踉谌魏吻闆r下,都比解釋器的速度快得多。這個技術(shù)始終在不斷完善著,或許有一天它能夠達到傳統(tǒng)編譯系統(tǒng)所無法匹敵的性能。例如,即時編譯器可以監(jiān)視哪些代碼被頻繁地執(zhí)行,并對其進行優(yōu)化,以提高程序的運行速度。
    10.多線程
    多線程可以帶來更好的交互響應(yīng)和實時行為。 如果曾經(jīng)使用過其他語言編寫多線程的應(yīng)用程序,就會對Java多線程處理的便捷性驚嘆不已。
    只要操作系統(tǒng)支持,Java中的線程就可以利用多個處理器。在底層,主流平臺的線程實現(xiàn)機制各不相同,Java并沒有花費太大的力氣對此實現(xiàn)平臺無關(guān)性。在不同的機器上,只是調(diào)用多線程的代碼完全相同;Java把多線程的實現(xiàn)交給了底層的操作系統(tǒng)或線程庫來完成。(有關(guān)線程的詳細內(nèi)容將在卷II中介紹。)盡管如此,多線程的簡單性是Java成為頗具魅力的服務(wù)器端開發(fā)語言的主要原因之一。
    11.動態(tài)性
    從各種角度看,Java與C或C++相比更加具有動態(tài)性。它能夠適應(yīng)不斷發(fā)展的環(huán)境。庫中可以自由地添加新方法和實例變童,而時客戶端卻沒有任何影響。在Java中找出運行時刻類型信息十分直觀。當(dāng)需要將某些代碼添加到正在運行的程序中時,動態(tài)性將是一個非常重要的特性。一個很好的例子是:從Internet上下載代碼,然后在瀏覽器上運行。在Java 1.0中,不能直接地獲取運行時類型信息,而Java的當(dāng)前版本允許程序員知曉對象的結(jié)構(gòu)和行為。這對于必須在運行時分析對象的系統(tǒng)來說非常有用。這些系統(tǒng)有:Java GUI構(gòu)建器、智能調(diào)試器、可插入組件以及對象數(shù)據(jù)庫。
    微軟曾經(jīng)發(fā)布了一個叫做J++的產(chǎn)品,它與Java有許多共享的機制。與Java一樣,J++是由虛擬機來執(zhí)行的,該虛擬機與執(zhí)行Java字節(jié)碼的Java虛擬機相互兼容,但是,當(dāng)與外部代碼有接口時就會出現(xiàn)很多不同之處。基本語言的語法與Java幾乎一樣。只是除了與Windows API的接口之外,還增加了一些可能具有一定實用性的語言結(jié)構(gòu)。Java和J++不僅共享通用的語法,它們的塞本類庫(串、實用程序、聯(lián)網(wǎng)、多線程、數(shù)學(xué)函數(shù)等等)從本質(zhì)上說也是一致的。然而,圖形庫、用戶界面、遠程對象存取的方式則完全不同。為此,微軟不再支持J++,取而代之的是另一種被稱為C#語言。C#與Java有很多相似之處,然而使用的卻是完全不同的虛擬機。甚至還有一種J#語言可將J++的應(yīng)用遷移到使用C#的虛擬機上。
    Java與Internet
    這里的思想很簡單:用戶將從Internet下載Java字節(jié)碼,并在自己的機器上運行。在網(wǎng)頁中運行的Java程序稱為applet。為了使用applet,需要一個啟用Java的Web瀏覽器來執(zhí)行字節(jié)碼。因為Sun公司只負(fù)責(zé)發(fā)放Java源代碼的許可證,并堅持不允許對語言和基本類庫的結(jié)構(gòu)做出任何修改,因此,Java的applet應(yīng)該可以運行在任何啟用Java瀏覽器上。遺憾的是,實際情況并非如此。
    各個版本的Netscape(網(wǎng)景瀏覽器)和Internet Explorer (IE瀏覽器)運行著不同版本的Java,其中有些早已過時。這種糟糕的情況導(dǎo)致更加難于利用Java最新版本來開發(fā)applet。為了擺脫這種局面,Sun開發(fā)了Java插件。這就使得Netscape和Internet Explorer都可以利用最新的Java運行時環(huán)境。 用戶下載一個applet就如同在網(wǎng)頁中嵌入一幅圖片。applet成為了頁面的一部分。文本環(huán)繞著applet所占據(jù)的空間周圍。關(guān)鍵一點是圖片為活動的。它可以對用戶命令做出響應(yīng),改變外觀,在運行它的計算機與提供它的計算機之間傳遞數(shù)據(jù)。 applet顯示了分子結(jié)構(gòu),這將需要相當(dāng)復(fù)雜的計算。
    在一個網(wǎng)頁中,可以利用鼠標(biāo)進行旋轉(zhuǎn),調(diào)整焦距等操作,以便能夠更好地理解分子結(jié)構(gòu)。用靜態(tài)網(wǎng)頁將無法實現(xiàn)這種直接操作,而applet卻可以達到此目的。可以借助applet在網(wǎng)頁上增加按鈕和輸人框。但是,通過撥號連接下載這樣的applet速度相當(dāng)慢。除此之外,還可以使用Dynamic HTML, HTML表單和某種腳本語言(如JavaScript)完成這類操作。當(dāng)然,早期的applet主要用于動畫,如大家熟悉的旋轉(zhuǎn)球、跳動的卡通字符、瘋狂。

    完整畢業(yè)設(shè)計下載:https://www.huzhan.com/code/goods344411.html

    總結(jié)

    以上是生活随笔為你收集整理的基于Web的仓库管理系统的设计与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    日韩一区二区三区高清免费看看 | 婷婷综合成人 | 日韩最新av在线 | 在线精品视频免费播放 | 一级淫片在线观看 | 久久av电影 | 天天玩天天操天天射 | 午夜少妇 | 日韩精品免费一区 | 最近中文字幕高清字幕在线视频 | 国产热re99久久6国产精品 | 免费看高清毛片 | 免费中文字幕 | 久久精品国亚洲 | 久久男人影院 | 国产精品欧美久久 | 天天操天天干天天插 | 国产成人一区二区三区电影 | 奇米777777 | 亚洲成av人影院 | 国产在线观看不卡 | 精品电影一区二区 | 综合av在线 | 国产日韩精品在线观看 | 欧美日韩成人一区 | 天堂av网址| 五月婷婷狠狠 | 久久激情视频 久久 | 国产精品永久久久久久久久久 | 日免费视频 | 成人97视频一区二区 | 国产精品久久二区 | 玖玖国产精品视频 | 综合网天天 | 美女视频国产 | 91免费看黄 | a极黄色片 | 黄色特级片 | 啪啪免费试看 | 免费在线色视频 | 亚洲国产欧美在线人成大黄瓜 | 国产成人av | 亚洲欧美一区二区三区孕妇写真 | 久久久久久久99 | 色综合人人 | 久久中文字幕导航 | 天天射射天天 | 午夜精品久久久久久久99无限制 | 九九精品视频在线 | 在线а√天堂中文官网 | 美女视频a美女大全免费下载蜜臀 | 日本xxxxav| 色福利网 | 国产91精品久久久久久 | 99精品视频免费在线观看 | 中文字幕电影高清在线观看 | 国产精品久久久久久影院 | 国产专区在线看 | 激情五月综合 | 久久在线| 国产精品va视频 | 日本成人中文字幕在线观看 | av在线电影免费观看 | 99色在线观看 | 国产精品3区| 国产成人a亚洲精品v | 日日爽天天 | 就色干综合 | 五月激情久久久 | 亚洲精品福利在线观看 | 国产视频综合在线 | 久久久国产精品亚洲一区 | 91麻豆.com | 久久6精品 | 欧美色图88 | 天天弄天天操 | 国产一区在线免费观看视频 | 免费中文字幕 | 欧美a级一区二区 | 99久久精品国产一区二区三区 | 国产精品区二区三区日本 | 91精品成人久久 | 午夜免费福利视频 | 国产成人精品免费在线观看 | 啪啪免费观看网站 | 91视频免费看网站 | 91视频免费观看 | 一区二区中文字幕在线播放 | 18网站在线观看 | 亚洲午夜久久久影院 | 婷婷九月丁香 | 国产精品久久久久三级 | 中文字幕大全 | 99免费观看视频 | 久久99国产精品久久 | 久久高清av | 正在播放久久 | 欧美一级电影在线观看 | 少妇bbbb搡bbbb搡bbbb | 欧美性生活一级片 | 国产成人区 | 色综合咪咪久久网 | 国产色网站 | www.天天操| 黄av资源 | 亚洲欧洲成人精品av97 | 久久天| 99久久精品电影 | 人人澡澡人人 | 美女视频黄网站 | 亚洲综合色视频 | 日韩一区视频在线 | 成人午夜黄色影院 | 久久久香蕉视频 | 国产精品www | 在线观看视频三级 | 久久怡红院| 日韩一区二区三区在线看 | 一区二区在线影院 | 韩日视频在线 | 久久精品香蕉 | 久草免费手机视频 | 日本中文字幕视频 | 国模视频一区二区三区 | 国产69久久精品成人看 | 视频一区二区精品 | 国产一区二区电影在线观看 | 欧美日韩精品综合 | 成人久久精品 | 97人人模人人爽人人喊网 | 9i看片成人免费看片 | 国产成人av电影在线观看 | 国产精品亚洲片在线播放 | 午夜精品久久久久99热app | 国产日韩欧美在线 | 在线不卡中文字幕播放 | 精品国产黄色片 | 欧美a级在线播放 | 久保带人 | 四虎在线免费视频 | 国产一区二区网址 | 久久久午夜精品理论片中文字幕 | 日韩资源在线观看 | 国产精品你懂的在线观看 | 99久久久久国产精品免费 | www中文在线 | 亚洲 欧美 变态 国产 另类 | 国产大陆亚洲精品国产 | 黄色软件在线观看视频 | 伊人成人激情 | 丁香高清视频在线看看 | 深爱婷婷激情 | 欧美在线久久 | 高清av免费观看 | 色综合天天综合网国产成人网 | www.色午夜.com | 麻豆一区二区 | 久草视频一区 | 国产一级片在线播放 | 免费观看国产成人 | 国产高清免费在线播放 | 免费看日韩 | 97色婷婷人人爽人人 | 国产成人精品一区在线 | 波多野结衣久久精品 | 色婷婷福利视频 | 九色视频网站 | 中文一区二区三区在线观看 | 热久久免费视频精品 | 92国产精品久久久久首页 | 精品一区二区免费在线观看 | 国产自制av| 午夜丁香视频在线观看 | 九色激情网 | 91av视频网 | 欧美在线你懂的 | 国产va精品免费观看 | 国产一级淫片在线观看 | 91完整版在线观看 | 天天天天色射综合 | 国产99久久久国产精品免费二区 | 91在线观看欧美日韩 | 日韩欧美视频免费在线观看 | 成在人线av| 欧美大码xxxx| 超碰人人av| 亚洲国产精品激情在线观看 | www.久久免费视频 | 18久久久久久 | 在线视频麻豆 | 91精品国产三级a在线观看 | 综合久久五月天 | 亚洲激情免费 | 免费福利在线播放 | 精品成人网 | 亚洲欧洲一区二区在线观看 | 香蕉网在线 | 国产精品日韩在线播放 | 91精品视频免费观看 | 久久婷亚洲五月一区天天躁 | 日韩av一区二区三区在线观看 | 久久激五月天综合精品 | 欧美大片第1页 | 97人人添人澡人人爽超碰动图 | 国产理论一区二区三区 | 四虎在线免费视频 | 久久精品99国产精品酒店日本 | 免费观看一区二区 | 在线观看不卡视频 | aaa亚洲精品一二三区 | 在线观看av不卡 | 国产 日韩 欧美 中文 在线播放 | 九九热中文字幕 | 日韩高清久久 | 特黄一级毛片 | 黄色大片入口 | av导航福利 | 亚洲波多野结衣 | 国产精品资源 | 久久在线免费观看 | 婷婷草 | 欧美在线视频精品 | 四虎在线免费观看视频 | 成人在线你懂得 | 麻豆va一区二区三区久久浪 | 免费在线观看成人 | 成人国产在线 | 波多野结衣在线中文字幕 | 精品免费在线视频 | av丝袜美腿 | 国产精品久久久av久久久 | 五月天av在线 | 国产精品视频免费 | 国产精品麻豆99久久久久久 | 国产一区二区久久 | 久久久国产精华液 | 美女视频网站久久 | 天天操天天干天天爱 | av免费在线网| 夜夜操天天干, | 就操操久久| 欧美在线日韩在线 | 久久久久久高潮国产精品视 | 午夜狠狠操 | www视频免费在线观看 | 久久精国产| 一区av在线播放 | 天天精品视频 | 成人小视频在线播放 | 成人精品视频 | 99re国产| 成人在线网站观看 | 91九色丨porny丨丰满6 | 最新av在线网站 | 国产视频不卡一区 | 久久精品亚洲综合专区 | 1000部国产精品成人观看 | 天天操天天色天天射 | 99精品视频在线免费观看 | 日日爽夜夜操 | 日本精品视频在线 | 四虎永久免费在线观看 | 日韩欧美在线国产 | 国产精品毛片一区二区 | 天天拍夜夜拍 | 婷婷五天天在线视频 | 欧美日韩视频一区二区 | 欧美精彩视频在线观看 | 黄色av影院| 日韩经典一区二区三区 | 狠色狠色综合久久 | 天堂网av在线 | 国产精品一区二区吃奶在线观看 | 成人h视频在线 | 亚洲一区二区视频在线播放 | 91av蜜桃| 久久99精品国产一区二区三区 | 欧美极品在线播放 | 99久久精品视频免费 | 99精品欧美一区二区蜜桃免费 | 久久久久免费精品国产 | 婷婷在线网 | 成人毛片在线观看视频 | 色亚洲网 | 成人av资源 | 午夜色影院 | 丁香九月婷婷 | 日韩电影一区二区三区 | 激情五月六月婷婷 | 国产午夜视频在线观看 | av在线电影网站 | 天天曰天天爽 | 99在线热播精品免费 | 久久国产午夜精品理论片最新版本 | 久操视频在线免费看 | 欧美日韩国产精品一区二区亚洲 | 久久久国产成人 | 日日爱影视| 久久免费电影 | av电影在线播放 | 夜夜躁日日躁狠狠久久88av | 日本韩国精品在线 | 欧美日韩电影在线播放 | 欧美在线视频一区二区三区 | 特黄一级毛片 | 国产精品欧美在线 | 四虎免费在线观看视频 | 天天干天天做天天爱 | 久久99爱视频 | 日韩精品中字 | 右手影院亚洲欧美 | 欧美污污视频 | 中文一区二区三区在线观看 | 久久九九久久九九 | 激情久久久久 | 免费视频久久久久久久 | 一区二区三区在线看 | 国产九九九精品视频 | 久久免费视频精品 | 亚洲天堂网在线视频 | 成人av片在线观看 | 国产97色| 久久人人添人人爽添人人88v | 午夜视频一区二区 | 中文字幕在线观看一区二区 | 西西444www大胆高清视频 | 99色免费| 日韩欧美在线不卡 | 又色又爽又黄 | 国产69久久久欧美一级 | 色婷婷www | 免费黄色a级毛片 | 成人黄色免费在线观看 | 日韩美视频| 国产亚洲日 | 在线免费观看黄色大片 | 国产美女免费视频 | 欧美性色黄大片在线观看 | 日韩中文字幕在线观看 | 在线播放精品一区二区三区 | 国产视频综合在线 | 91精品国产一区二区三区 | 在线观看视频一区二区三区 | 国产精品一区二区三区电影 | 国产精品麻豆视频 | 欧美日韩网站 | 97av影院| 在线观看免费视频你懂的 | 男女拍拍免费视频 | 在线99视频 | 欧美激情精品久久久久久免费印度 | 丁香婷婷久久久综合精品国产 | 98超碰人人 | 成人黄色大片网站 | 五月婷影院 | 午夜.dj高清免费观看视频 | 午夜精品一区二区三区在线观看 | 亚洲少妇影院 | 久免费| 在线免费观看麻豆 | 久久综合色婷婷 | 中文在线天堂资源 | 国产精品女同一区二区三区久久夜 | 91精品久久久久久综合五月天 | 欧美在线1区 | 精品国产成人在线影院 | 成人免费观看网站 | 男女激情网址 | 色综合久久久久网 | 97超碰人人澡人人 | 在线观看va | 中文字幕高清免费日韩视频在线 | 色av男人的天堂免费在线 | 国产二区免费视频 | 色偷偷97 | 国产精品日韩欧美一区二区 | 亚洲成人资源在线观看 | www激情网 | 在线看免费 | 久久午夜色播影院免费高清 | 一区三区视频在线观看 | 91传媒免费在线观看 | 色多多视频在线 | 日韩成人在线一区二区 | 国产精品入口a级 | 456免费视频 | 久久国产一区 | 亚洲 成人 欧美 | 国产亚洲精品久久19p | 精品免费国产一区二区三区四区 | 国产免费作爱视频 | 免费成人在线观看视频 | 国产精品地址 | 久久久久久久久久久久国产精品 | 天天操操操操操 | 国产最顶级的黄色片在线免费观看 | 国产片免费在线观看视频 | 久久久久国产a免费观看rela | 国产精品xxxx18a99 | 香蕉在线观看视频 | 国产高清视频免费观看 | 91高清免费在线观看 | 国产精品久久久视频 | 精品国产一区二区三区噜噜噜 | 综合久久2023| 婷婷色资源 | 亚洲精品视频一 | 久久精品网站视频 | 国产精品麻豆欧美日韩ww | 久久久精品一区二区 | 国产精品美女毛片真酒店 | 99热这里是精品 | 欧美精品一区二区免费 | 免费看色的网站 | 在线播放 日韩专区 | 热久久国产精品 | 免费在线精品视频 | 国产精品久久久久久婷婷天堂 | 日韩视频在线播放 | 日日干夜夜干 | 狠狠躁日日躁夜夜躁av | 国产精品第一页在线 | 337p欧美| 亚洲精品资源 | 黄色在线成人 | 久久99日韩 | 在线中文字幕一区二区 | 国产成人区 | 特级西西444www高清大视频 | 国产日韩精品欧美 | 日韩av不卡在线播放 | 少妇高潮冒白浆 | 国产999精品视频 | 五月婷婷丁香综合 | 久久久久国产精品午夜一区 | 欧美黑人巨大xxxxx | 毛片网站免费 | 亚洲精品黄色片 | 精品人妖videos欧美人妖 | 国产高清免费视频 | 美女网站视频久久 | 免费高清在线视频一区· | 美女黄濒 | 最新国产中文字幕 | 中文字幕在线免费看 | 欧美一二三区在线播放 | 三级视频国产 | 中文字幕在线影院 | 91片黄在线观 | 最新91在线视频 | 国内久久久久久 | 黄色网中文字幕 | 亚洲性视频| 久久久亚洲精品 | 99精品国产兔费观看久久99 | 又湿又紧又大又爽a视频国产 | 久久情侣偷拍 | 亚洲精品乱码久久久久 | 国产精品久久久久一区二区三区 | 国产精品露脸在线 | 国产福利精品一区二区 | 久久歪歪 | 91成人看片 | 国产精品三级视频 | 在线视频日韩精品 | 500部大龄熟乱视频使用方法 | 久草电影免费在线观看 | 精品久久久久久综合日本 | 97在线看片| 色a综合| 亚洲日韩中文字幕在线播放 | 天天射综合 | 久久免费美女视频 | 天天色天天操综合网 | 欧美日韩色婷婷 | 国产不卡一区二区视频 | 精品国模一区二区 | 97在线视| 久产久精国产品 | 免费情缘 | 日日爱av | 中文字幕在线观看免费高清电影 | 久久午夜电影院 | 久久久免费视频播放 | 日日夜日日干 | 久久综合成人网 | 丝袜美女视频网站 | 欧美精品一二 | av在线播放中文字幕 | 国产专区精品视频 | 欧美激情视频免费看 | 91色网址| 激情五月伊人 | 久久成人一区 | 91在线看视频免费 | 精品国产一区二区三区av性色 | www.xxxx变态.com| 91精品国产欧美一区二区 | 波多野结衣在线播放一区 | 国产精品一区二区视频 | 久久成人精品视频 | 色综合久久88色综合天天免费 | 91成人欧美| 天天玩天天干天天操 | 久久午夜影院 | 免费观看久久 | 日韩av在线免费播放 | 一区二区观看 | 国产视频一区二区三区在线 | 成人免费视频免费观看 | 国产一区二区久久久久 | 一区二区三区精品久久久 | 日韩成人欧美 | 久99久精品| 97久久精品午夜一区二区 | 日韩av中文字幕在线 | 亚洲视频 在线观看 | 中文成人字幕 | 中文字幕在线精品 | 日本99久久 | 黄色av网站在线免费观看 | 97视频在线观看免费 | 91亚洲网| 国产免费又爽又刺激在线观看 | 欧美一二三视频 | 中文字幕资源网 国产 | 久久精品久久久久 | 成人国产精品久久久春色 | 日本久久精品视频 | 天天拍天天爽 | 91久久国产露脸精品国产闺蜜 | 亚洲综合在线播放 | 午夜丁香视频在线观看 | 91网站免费观看 | 夜夜爽夜夜操 | 日韩丝袜 | 狠狠色噜噜狠狠狠狠2022 | 国产精品第52页 | 久久国产亚洲 | 中文字幕一区二区三区在线视频 | av资源在线观看 | 午夜av在线 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 日韩成人不卡 | 四虎影视国产精品免费久久 | 亚洲小视频在线 | 夜夜高潮夜夜爽国产伦精品 | 日韩系列 | 97视频一区 | 高清日韩一区二区 | 国产在线视频一区 | 国产高清在线永久 | 91av在线视频免费观看 | 五月丁香| 中文字幕乱码日本亚洲一区二区 | 亚洲 欧洲 国产 日本 综合 | 亚洲午夜精品久久久久久久久 | 五月婷婷播播 | 91污在线 | 亚洲国产精品电影在线观看 | 麻豆免费精品视频 | 日韩免费一二三区 | 色吊丝av中文字幕 | 日本中文字幕电影在线免费观看 | 免费观看黄| 午夜精品久久久久久久久久久 | 91麻豆精品国产91久久久使用方法 | 日韩最新中文字幕 | 国产视频精品视频 | 中文av在线免费观看 | 国产精品久久久久影视 | 日本久久精品视频 | 国产手机在线 | 午夜精品视频免费在线观看 | 麻豆成人网| 久久超级碰视频 | 97超碰色偷偷 | 国产精品淫片 | 91热爆视频 | 欧美一级裸体视频 | 国产精品综合久久久久久 | 天天干 天天摸 天天操 | 久久乐九色婷婷综合色狠狠182 | 超碰成人免费电影 | 激情大尺度视频 | 亚洲精品国产精品乱码在线观看 | 中文字幕在线观看完整版电影 | 日韩精选在线 | 久久久久观看 | 精品国产一区二区三区久久久久久 | 亚洲三区在线 | 亚洲欧美成人综合 | 九九久久成人 | 国产福利精品一区二区 | 国产亚洲观看 | 91在线免费播放视频 | 又黄又爽又刺激视频 | 国产一区网 | 国产一区欧美一区 | 久久婷婷丁香 | 色综合在| 天天操天天色天天射 | 五月在线视频 | 久久综合九色综合久久久精品综合 | 国产视频黄 | 亚洲视频网站在线观看 | 伊在线视频 | 久久午夜精品影院一区 | 国产成人一区二区三区影院在线 | 午夜视频在线观看一区 | 波多野结衣在线播放一区 | 国产69精品久久99的直播节目 | 91中文在线 | 天堂av中文字幕 | 欧美成年网站 | 国产精品久久一区二区三区, | 97视频在线观看网址 | 婷婷六月色 | 99 视频 高清 | 久久综合久久综合这里只有精品 | 国产伦理久久精品久久久久_ | 美女免费视频网站 | 精品在线二区 | 四虎国产精| 成人网444ppp | 国产色就色| 免费看片网址 | 久久电影日韩 | 日本成址在线观看 | 成人资源网 | 99久热在线精品 | av丝袜在线| 成人黄色毛片视频 | 99热播精品 | 人人射人人插 | 黄av在线| 亚洲一二三久久 | 一级片视频在线 | 日韩三级视频在线观看 | 国产91免费观看 | 亚洲高清91 | a亚洲视频 | 亚洲精品www久久久久久 | 韩国av三级 | 久久婷婷一区二区三区 | 日韩伦理片一区二区三区 | 久久久国产一区二区三区 | 国产小视频在线观看免费 | 在线看免费 | 天天干天天弄 | 国产精品a成v人在线播放 | 国产婷婷精品av在线 | 在线中文字幕视频 | 色中色资源站 | 国产一区二区午夜 | 国产精品久久久久久久久久了 | 精品综合久久 | 亚洲精品色婷婷 | av千婊在线免费观看 | 九九热在线观看 | 天天干天天做天天爱 | 日韩av图片 | 久久爱影视i | 中文字幕久久精品亚洲乱码 | 狂野欧美激情性xxxx | 国产精品麻豆三级一区视频 | 久久国产精品99精国产 | 一区二区理论片 | 久久精品国产美女 | 国产精品美女久久久久久久久 | 色婷婷视频在线 | 国产一区福利 | 亚洲禁18久人片 | 黄网站色欧美视频 | 久久免费福利 | 丁香花五月 | 伊人伊成久久人综合网小说 | 天堂av在线免费 | 欧美日韩一区三区 | 婷婷去俺也去六月色 | 亚洲爽爽网 | 欧美激情综合色综合啪啪五月 | 久久99久久99精品中文字幕 | 欧美特一级片 | 激情婷婷 | 久久人人97超碰国产公开结果 | 久久热首页 | 中文字幕av最新 | 免费观看www视频 | av资源在线观看 | 国产精品嫩草影视久久久 | 欧美日韩精品免费观看视频 | 欧美激情精品久久久久久变态 | 五月婷婷色 | 夜夜夜夜操 | 国产精品免费久久久久 | 夜夜躁狠狠燥 | 欧美日韩精品在线观看视频 | 久久久精品国产免费观看同学 | 国产亚洲精品久久久久动 | 四虎永久免费网站 | av色一区 | 国产69久久久欧美一级 | 欧美一区日韩一区 | 最近日本中文字幕 | 91九色自拍 | 91精品国产成 | adn—256中文在线观看 | 日韩精品欧美视频 | 成人免费看视频 | 91在线资源 | 国产视频网站在线观看 | 六月婷色 | 国产一区二区不卡视频 | 国产第页 | 免费看av片网站 | 欧美 日韩 成人 | 午夜在线免费视频 | 免费三级黄 | 91免费试看| 日韩美在线观看 | 97视频免费 | 日本久久久影视 | 超碰在线9| 99久精品视频 | 91色影院| 五月天久久综合网 | 欧美成人影音 | 一本一道久久a久久精品 | 天天色官网| 日日婷婷夜日日天干 | 欧美日韩中文在线观看 | 久精品视频在线观看 | 99久久久久久国产精品 | 欧美在线91 | 99久高清在线观看视频99精品热在线观看视频 | 欧美91精品久久久久国产性生爱 | 91中文在线 | 狠狠色狠狠色综合日日小说 | 高清av在线免费观看 | 国产精品免费大片视频 | 日韩在线免费看 | 日韩精品一区二区三区第95 | www夜夜操com | 久久黄色影院 | 日批视频在线 | 激情五月伊人 | 免费福利片 | 黄色小网站在线 | 久草在线观看视频免费 | 欧美精品日韩 | 香蕉视频在线视频 | 欧美在线日韩在线 | 亚洲精品一区二区三区新线路 | 黄色国产在线观看 | 成年一级片 | 黄色在线小网站 | 天天操天天操天天操 | 黄色国产成人 | 久久久久免费精品 | 探花视频在线观看免费版 | 国产小视频在线 | 国产精品中文字幕在线观看 | 激情开心 | 三级午夜片 | 中文字幕文字幕一区二区 | 国产成人av免费在线观看 | 中文字幕在线观看完整 | 缴情综合网五月天 | 日韩免费电影一区二区 | a电影在线观看 | 97视频在线观看播放 | 色狠狠综合天天综合综合 | 美女国产在线 | 丁香婷婷社区 | 亚洲欧美日韩精品久久奇米一区 | 96香蕉视频 | 国产一区免费在线观看 | 在线 你懂 | 日韩在线观看视频网站 | 97视频在线免费播放 | 久久精品99久久久久久 | 在线电影 一区 | 激情综合五月网 | 日韩免费在线观看视频 | 欧美久久久久久久久久 | 久久一视频 | 中文字幕精品www乱入免费视频 | 欧美91精品久久久久国产性生爱 | 亚洲精品美女久久久久网站 | www夜夜操 | 午夜久久久精品 | 一区二区三区观看 | 国产精品久久三 | 日韩专区中文字幕 | 婷婷深爱五月 | 日韩av一区二区在线影视 | 免费看一级特黄a大片 | 国产一级免费电影 | 人人爽人人澡 | av成人在线网站 | 日韩中文字幕视频在线 | 国产综合91 | 人人干人人上 | 综合久久久 | 久久精品国产免费看久久精品 | 毛片无卡免费无播放器 | 免费在线观看毛片网站 | 欧美激情视频三区 | 九热精品| 丰满少妇一级 | 超碰97国产在线 | 一区二区三区观看 | 亚洲综合激情小说 | 国产高清视频在线免费观看 | 91精品一区二区三区久久久久久 | 麻豆视频在线观看免费 | 18久久久 | 成人国产精品入口 | av高清一区 | 国产黄色精品在线 | 亚洲91av| 免费观看丰满少妇做爰 | 日韩免费在线 | 午夜99| 福利视频午夜 | 国产一区二区在线观看视频 | 黄色网址av | 三级黄在线 | 午夜精品久久久久99热app | 国产视频一区二区在线播放 | 国产成人精品一区一区一区 | 国产午夜在线观看视频 | 噜噜色官网 | 欧美国产一区二区 | 久久精品观看 | 日韩精品无码一区二区三区 | 久久国产精品二国产精品中国洋人 | 欧美性生爱 | 免费人人干| 午夜国产一区二区 | 色婷婷免费视频 | 亚洲午夜久久久影院 | www免费网站在线观看 | 国产亚洲精品久久网站 | 免费高清在线观看成人 | 日韩丝袜在线观看 | 99在线看 | www.香蕉视频在线观看 | av手机在线播放 | 久久人人97超碰精品888 | 国产一级久久久 | 国产精品成人一区二区三区 | 婷婷福利影院 | 在线亚洲午夜片av大片 | 国产成人性色生活片 | 香蕉视频日本 | 国产视频精选 | 麻花豆传媒一二三产区 | avav99| 黄色软件在线观看免费 | 国产精品久久久久久一区二区 | 91av手机在线 | 中文在线中文a | 91网址在线 | 亚洲精品视频偷拍 | 精品99在线视频 | 日本视频不卡 | 久九视频 | 久久公开视频 | 欧美日韩中文视频 | 国产精品免费视频久久久 | a v在线视频 | 国内丰满少妇猛烈精品播放 | 亚洲第一成网站 | 国产精品原创在线 | 成人在线网站观看 | 欧美日韩国产一区二区三区 | 九九热在线视频免费观看 | 久久婷婷国产色一区二区三区 | 欧美精品一级视频 | 五月婷婷在线播放 | av千婊在线免费观看 | 九九色综合 | 久久久久久久网站 | 美女国内精品自产拍在线播放 | 天天做日日做天天爽视频免费 | 99r精品视频在线观看 | 天天av在线播放 | 国产精品美女久久久久久 | 久草视频在线免费播放 | 91香蕉国产在线观看软件 | 九色视频网站 | 99精品热视频| 美女网色 | 国产欧美精品一区二区三区四区 | 亚洲激情国产精品 | 色久av | 日本公妇在线观看 | 免费观看mv大片高清 | 最近2019年日本中文免费字幕 | 99视频偷窥在线精品国自产拍 | 久在线观看视频 | 最近免费中文字幕大全高清10 | 免费男女羞羞的视频网站中文字幕 | 九九免费在线观看 | 国产亚洲在线视频 | 久久精品观看 | 亚洲精品免费在线观看视频 | 精品国产一区二区三区蜜臀 | av一区二区三区在线播放 | 国产精品美女久久久久久久久久久 | 国产精品无av码在线观看 | 精品伊人久久久 | 91mv.cool在线观看 | 国产在线美女 | 亚洲欧美日本一区二区三区 | 久久五月天综合 | 国产成人福利在线 | 国产午夜精品一区 | 国内偷拍精品视频 | 国产一级黄大片 | 国产精品黑丝在线观看 | 欧美色精品天天在线观看视频 | 欧美在线1区| 国产美女被啪进深处喷白浆视频 | 亚洲精选视频免费看 | 欧美一区在线观看视频 | 超碰大片 | 日韩成人黄色 | 看片一区二区三区 | 久久综合九色综合欧美狠狠 | 91麻豆精品国产自产 | 亚洲日韩精品欧美一区二区 | 亚洲区另类春色综合小说校园片 | 在线中文字幕播放 | 日韩一区二区三区免费视频 | 久久综合九色欧美综合狠狠 | 国产精品日韩在线观看 | 国产精品一区二区三区在线播放 | 国产精品久久久久久久久久久久午夜片 | 中文字幕免费高清在线观看 | 中文字幕你懂的 | 91精品国产自产在线观看 | 国内精品久久久久影院优 | 日韩在线免费观看视频 | 欧美精品久久99 | 999视频精品| 欧美老女人xx | 国产精品99久久久久久宅男 | 欧美精品在线一区二区 | 久久久国产毛片 | 在线成人免费电影 | 天天碰天天操 | 日日夜夜天天综合 | 久久久久久久综合色一本 | 一本一本久久a久久精品牛牛影视 | 国产女人18毛片水真多18精品 | 日韩区在线观看 | 色综合天天天天做夜夜夜夜做 | 成人av在线直播 | 中文字幕欧美日韩va免费视频 | 亚洲婷婷伊人 | 国产探花视频在线播放 | 日韩电影中文 | 国产资源免费在线观看 | 日韩一级黄色av | 超碰人人草人人 | 国产成人精品电影久久久 | 波多野结衣电影一区 | 超级碰视频| 国产一区二区不卡视频 | 欧美日韩国产精品一区二区三区 | 国产免费又粗又猛又爽 | 九九精品久久 | 在线观看免费91 | 国产亚洲视频在线免费观看 | 麻豆一区在线观看 | 在线观看色网站 | 亚洲清纯国产 | 亚洲精品国产拍在线 | 国产精品女教师 | 欧美aaaxxxx做受视频 | 欧美日韩xxxxx| 国产成人在线综合 | 三级黄色网络 | 亚洲免费不卡 | 性色xxxxhd| 久久综合九色综合欧美就去吻 | 国产视频2021 | 亚洲精品成人av在线 | 伊人婷婷色 | 日本黄色免费观看 | 蜜臀久久99精品久久久无需会员 | 亚洲国产97在线精品一区 | 久草资源在线观看 | 亚洲狠狠婷婷综合久久久 | 成人a大片 |