版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、軟件實(shí)現(xiàn)(圖書管理系統(tǒng))1 引言 1.1目的和作用 衡量一個程序的質(zhì)量,主要有兩個方面:運(yùn)行質(zhì)量和代碼質(zhì)量。一個穩(wěn)定運(yùn)行的程序并不等同于優(yōu)良的程序,有可能其源代碼可讀性極差,不具有低成本的可維護(hù)性,以后的升級或者新員工接手時都會非常困難,對公司來說,意味著更高的資源投入,對工程師來說,意味著精力時間的浪費(fèi),甚至?xí)饘Τ绦虻牡种魄榫w,導(dǎo)致推翻重新實(shí)現(xiàn),降低了軟件復(fù)用度。當(dāng)然,程序的運(yùn)行質(zhì)量是必須保證的,否則代碼再規(guī)范也是一個廢品。事實(shí)上,程序的不良書寫風(fēng)格和錯誤的寫法往往是滋生錯誤的溫床,而且很大一部分反復(fù)出現(xiàn)的錯誤是同一個原因造成的。本文檔結(jié)合一些常見的錯誤或者危險的代碼,規(guī)定了編碼的規(guī)范,
2、按照規(guī)范上的要求編碼,不僅可以使不同人寫的代碼看起來很統(tǒng)一,降低了交流的障礙和工作轉(zhuǎn)接的成本,而且能夠規(guī)避很多反復(fù)出現(xiàn)的程序錯誤。 1.2 文檔概述 該規(guī)范定義了良好的編程風(fēng)格,內(nèi)容涉及排版,可讀性,可維護(hù)性,可測性等方面。2 編碼規(guī)范2.1 文件組織每個Java源文件包含一個單獨(dú)的Public類接口或接口。當(dāng)private類和接口與某個Public類有關(guān)部門時,可以把他們放在同一源文件中作為Public類。Public類應(yīng)為文件中第一個類或接口。Java源文件中有下列順序:(1)開頭注釋;(2)包和引用聲明,如:package u.lms.utils;import java.sql.Conn
3、ection;import java.sql.DriverManager;(3)類和接口定義下面表格按序定義了一個類或接口的定義的各個部分。表5.1類和接口定義序號類/接口定義部分說明1類/接口文檔注釋(/*.*/)見注釋2類/接口聲明3類/接口執(zhí)行注釋可選,需包含不在類/接口文檔注釋的關(guān)于類/接口的所有信息4類靜態(tài)變量先是Public類變量,再protected,再private5實(shí)例變量同上6構(gòu)造函數(shù)7方法按功能排序2.2 文件格式標(biāo)準(zhǔn) 縮排縮排的單位,邏輯Tab鍵,統(tǒng)一縮進(jìn)為4個字符。換行當(dāng)一個表示不能在一行內(nèi)寫完時,按以下規(guī)則斷行:(1) 在逗號后斷行。(2) 在操作符前斷行。(3)
4、寧可選擇較高級別(higher-level)的斷開,而不是較低級別(lower-level)的斷開。(4) 新的一行應(yīng)該與上一行同一級別表達(dá)式的開頭處對齊。(5) 如果以上規(guī)則導(dǎo)致代碼混亂或者使代碼都堆擠在右邊,那就代之縮進(jìn)8個空格??瞻讘?yīng)謹(jǐn)慎使用空行來突出代碼。例:(1) 在循環(huán)和條件塊前后至少有一個空行。(2) 函數(shù)間至少有一個空行。(3) 注釋前至少有一個空行。 行長度盡量避免一行的長度超過80個字符,因?yàn)楹芏嘟K端和工具不能很好處理之。注意:用于文檔中的例子應(yīng)該使用更短的行長,長度一般不超過70個字符。數(shù)值語句不要用硬性代碼數(shù)值。用符號常量。例:nTimeout = 3000; /BAD
5、!NTimeout = MAX_ABC_DURATION; /Good2.3 注釋注釋是幫助程序讀者的一種手段。最好的注釋是簡潔地點(diǎn)明程序的突出特征,或是提供一種概觀,幫助別人理解程序。Java程序有兩類注釋:實(shí)現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實(shí)現(xiàn)注釋使用/ * * / 和/界定的注釋。文檔的注釋(被稱為“doc comments”)是Java獨(dú)有的,并由/* * */界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換 HTML文件。 文件頭注釋一個文件由被空行隔開的節(jié)和可選的標(biāo)識節(jié)的注釋組成。一個包聲明和接口聲明需用至少一個
6、空行隔開。每個文件需在開頭包括一個注釋塊,提供以下信息:版權(quán)聲明,修改歷史。/*數(shù)據(jù)庫連接管理類 * author WangLiyun * version1.0 */類注釋每個源文件需在類聲明前包含一個注釋,提供以下信息:作者,版本。/* *<pre> * Window win = new window(parent); * win.show(); *</pre> * *author Sami Shaic *version % I %,% G % */ class window extends BaseWindow 方法頭注釋每個函數(shù)要在開頭提供一個注釋,包含以下信息:
7、描述做了什么,如何完成的;假設(shè),前提,限制;輸入輸出,包括返回值。/* * 用戶登錄 * * param mapping * param form * param request * param response * return * throws ServletException */ 定義注釋多數(shù)域都需要描述其目的的簡單注釋。private String username;/ 用戶名 注釋風(fēng)格程序可以有四中實(shí)現(xiàn)注釋的風(fēng)格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。下面用例子來解釋。(1) 塊注釋(block Comments
8、)/* * 保存帳號 * * param accountForm*/(2) 單行注釋(single-line Comments)if (condition)/*Handle the condition. */(3) 尾端注釋(trailing Comments) if (a = = 2) return TRUE; /*special case */ (4)行末注釋(end-of-line Comments)private String username;/ 用戶名2.4 聲明每行聲明變量的數(shù)量(Number Per Line)推薦一行議購聲明,因?yàn)檫@樣有利于寫注釋。 布局(Placement)
9、只在代碼塊的開始處聲明變量(一個塊是指任何被包含在大括號“”和“”中間的代碼。不要在首次用到該變量時才聲明之。避免聲明的局部變量覆蓋上一級的變量。初始化(Initialization)盡量在聲明局部變量的同時初始化。唯一不這樣做的理由是變量的初始值依賴于某些先前發(fā)生的計(jì)算。 類和接口的聲明(Class and Interface Declaration)當(dāng)編寫類和接口時,應(yīng)該遵循以下格式規(guī)則:(1) 在方法名與其參數(shù)列表之前的左擴(kuò)號“(”間不要有空格。(2) 左大擴(kuò)號“”位于聲明語句同行的末尾。(3) 右大括號“”另起一行,與相應(yīng)的聲明語句對齊,除非是一個空語句,“”應(yīng)緊跟在“”之后。publ
10、ic void setUsername(String username) this.username = username;(4) 方法與方法之間一空行分隔。2.5 語句(Statements)簡單語句(Simple Statements)每行至多包含一條語句,例如:argv + +; /Correctargc - - ; /Correctargv + +; argc - - ; /AVOID! 復(fù)合語句(Compound Statements)復(fù)合語句是包含在大括號中的語句序列,形如“語句”。例如下面各段。(1) 被括其中的語句應(yīng)該較之復(fù)合語句縮進(jìn)一個層。(2) 左大括號“”應(yīng)位于復(fù)合語句起
11、始行的行尾;右大括號“”應(yīng)另起一行與復(fù)合語句首行對齊。(3) 大括號可以被用于所有語句,包括單個語句,只有這些語句諸如此類if-else 或for 控制語句的一部分。這樣便于添加語句而無需擔(dān)心由于忘了加括號而引入bug。 返回語句(return Statements)一個返回值的return語句不使用小括號“()”,除非它們以美中不足方式使返回值更為顯見。 public String getUsername() return username; if,if-else, if else-if else語句if-else語句應(yīng)具有如下格式:if (condition) statement; if
12、(condition) statement; else statement; if (condition) statement; else if (condition) statement; else statement; 注意:if語句總是用“”和“”括起來,避免使用如下容易引起錯誤的格式:if (condition)/AVOID!this omits the braces! Statement; for 語句(for Statements)一個for語句應(yīng)該具有如下格式:for (int i = 0; i < ids.length; i+) deleteAccount(idsi);一
13、個空的for語句(所有工作都在初始化,條件判斷,更新子句中完成)應(yīng)該具有如下格式:for (initialization;condition;update) statement當(dāng)在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變量。而導(dǎo)致復(fù)雜度提高。如果需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨(dú)的語句。 while語句(while Statements)一個while語句應(yīng)該具有如下格式:while (rs.next() AccountForm accountForm = new AccountForm();accountForm.setId
14、(rs.getString("id");accountForm.setUsername(rs.getString("username");accountForm.setType(rs.getString("type");accountList.add(accountForm); do-while語句(do-while Statements)一個do-while語句應(yīng)該具有如下格式:do .while(condition) switch語句(switch Statements)一個switch語句應(yīng)該具有如下格式:switch (con
15、dition) try-catch語句(try-catch Statements)一個try-catch語句應(yīng)該具有如下格式:try Class.forName(DBDriver);conn = DriverManager.getConnection(DBUrl, DBUser, DBPassword); catch (ClassNotFoundException ex) ex.printStackTrace();throw new CustomException("找不著驅(qū)動程序", ex); catch (Exception ex) ex.printStackTrace
16、();throw new CustomException("數(shù)據(jù)庫連接錯誤", ex);一個try-catch語句后面也可緊跟著一個finally語句,不論try代碼塊是否順利執(zhí)行完,它都會執(zhí)行。try Class.forName(DBDriver);conn = DriverManager.getConnection(DBUrl, DBUser, DBPassword); catch (ClassNotFoundException ex) ex.printStackTrace();throw new CustomException("找不著驅(qū)動程序",
17、 ex); catch (Exception ex) ex.printStackTrace();throw new CustomException("數(shù)據(jù)庫連接錯誤", ex);finally if(conn!=null) conn.close();2.6 命名規(guī)范命名規(guī)范使程序更易讀,從而易于理解。它們可以提供一個有關(guān)標(biāo)識符功能的信息,以助于理解代碼,不論它是一個常量,包,還是類。表5.2 標(biāo)識符命名標(biāo)識符類型命名規(guī)則例子包(Packages)一個唯一的包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com、edu、gov、mil、net、org或1981
18、年ISO3166標(biāo)準(zhǔn)所指定的標(biāo)識國家的英文雙字符代碼。包名的后綴部分根據(jù)不同機(jī)構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能一特定目錄名的組成來區(qū)分部門(department),項(xiàng)目(project)機(jī)器(machine),或注冊名(login names) 類(Class)類名是一個名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量使類名簡潔而富于描述。使用完整單詞,避免縮寫詞。(除非縮寫詞已被廣泛使用,像URL,HTML)class Raster;class ImageSprite;接口(Interface)大小寫規(guī)則與類名相似interface ResterDelegateinte
19、rface Storing方法(Methods)方法名是一個動詞,采用大小寫混合的方式,第一個單詞首字母小寫,其后單詞的首字母大寫。run( );runFast( );getRackground( )變量(Variables)除了變量名外,所有實(shí)例,包括類,類常量,均采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號開頭,盡管這在語發(fā)上是允許的。變量名應(yīng)簡短且富于描述。變量名的選用應(yīng)該易于記憶,能夠指出其用途。盡量避免單個字符的變量名,除非是一次性的臨時變量,臨時變量通常被取名為 i,j,k,m,和n,它們一般用于整型,c,d,e,它們一般用于字符
20、型。char c;int i;flost myWidth;實(shí)例變量(Instance Variables)大小寫規(guī)則和變量名相似,除了在前面需要一個下劃線int_comployeeId;String_nameCustomer_customer常量(Constants)類常量和ANSI常量的聲明,應(yīng)該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯誤)static final int MIN_WIDTH=4;static final int MAX_WIDTH=999;static final int GET_THE-CPU=1;2.7代碼范例(Code Examples)/ *
21、賬戶管理控制類 * author WangLiyun * */package u.lms.action;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import mons.logging.Log;import m
22、ons.logging.LogFactory;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import org.apache.struts.actions.DispatchAction;import u.lms.DaoFactory;import u.lms.dao.IAccountDao;import u.lms.dao.IBookDao;import u.lms.fo
23、rm.AccountForm;import u.lms.form.BookForm;public class AccountAction extends DispatchAction private static final Log logger = LogFactory.getLog(AccountAction.class);/* * 用戶登錄 * * param mapping * param form * param request * param response * return * throws ServletException */public ActionForward log
24、on(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws ServletException AccountForm accountForm = (AccountForm) form;boolean isAccount = false;try IAccountDao iAccountDao = DaoFactory.getInstance().getAccountDao();isAccount = iAccountDao.isAccount(a
25、ccountForm);if (isAccount) HttpSession session = request.getSession();session.setAttribute("username", accountForm.getUsername();session.setAttribute("type", accountForm.getType();/ 如果是管理員,則跳轉(zhuǎn)到indexif (accountForm.getType().equals("1") return mapping.findForward("i
26、ndex");else return mapping.findForward("indexR"); else request.setAttribute("invalidAccount", "invalidAccount");return mapping.findForward("logon"); catch (Exception e) logger.error("登錄出錯", e);throw new ServletException("登錄出錯", e);/* *
27、 注銷用戶 * * param mapping * param form * param request * param response * return * throws ServletException */public ActionForward logout(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws ServletException try HttpSession session = request.getSession(
28、);session.invalidate();return mapping.findForward("logon"); catch (Exception e) logger.error("注銷出錯", e);throw new ServletException("注銷出錯", e);/* * 添加帳號 * * param mapping * param form * param request * param response * return * throws ServletException */public ActionForw
29、ard save(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws ServletException AccountForm accountForm = (AccountForm) form;try IAccountDao iAccountDao = DaoFactory.getInstance().getAccountDao();iAccountDao.saveAccount(accountForm);return mapping.fin
30、dForward("success_save"); catch (Exception e) logger.error("添加帳號出錯", e);throw new ServletException("添加帳號出錯", e);/* * 刪除帳號信息 * * param mapping * param form * param request * param response * return * throws ServletException */public ActionForward delete(ActionMapping map
31、ping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws ServletException try String ids = request.getParameterValues("id");IAccountDao iAccountDao = DaoFactory.getInstance().getAccountDao();iAccountDao.deleteAccount(ids);return mapping.findForward("succes
32、s_delete"); catch (Exception e) logger.error("刪除帳號信息出錯", e);throw new ServletException("刪除帳號信息出錯", e);/* * 查找?guī)ぬ栃畔?* * param mapping * param form * param request * param response * return * throws ServletException */public ActionForward query(ActionMapping mapping, ActionForm
33、 form,HttpServletRequest request, HttpServletResponse response)throws ServletException AccountForm accountForm = (AccountForm) form;List accountList = new ArrayList();try IAccountDao iAccountDao = DaoFactory.getInstance().getAccountDao();accountList = iAccountDao.getAccounts(accountForm.getUsername(
34、),accountForm.getType();request.setAttribute("accountList", accountList);return mapping.findForward("accountList"); catch (Exception e) logger.error("查找?guī)ぬ栃畔⒊鲥e", e);throw new ServletException("查找?guī)ぬ栃畔⒊鲥e", e);/* * 在更新頁面顯示帳號信息 * * param mapping * param form * para
35、m request * param response * return * throws ServletException */public ActionForward updateInit(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)throws ServletException try String id = request.getParameter("id");IAccountDao iAccountDao = DaoFactory.getInstance().getAccountDao();AccountForm accountForm = iAccountDao.getAccount(id);request.setAttribute("accountForm", accountForm);return ma
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 正規(guī)足浴加盟合同協(xié)議
- 工業(yè)自動化材料采購合同
- 地毯物流配送合同
- 全面升級旅游服務(wù)合同模板
- 石灰石購銷合同格式
- 學(xué)生個人衛(wèi)生保證書
- 電力設(shè)備招標(biāo)文件示范文本
- 補(bǔ)充協(xié)議勞工合同細(xì)節(jié)
- 專業(yè)電腦維護(hù)保養(yǎng)
- 抹灰分包工程勞務(wù)合同
- JT∕T 860.1-2013 瀝青混合料改性添加劑 第1部分:抗車轍劑
- 《紅樓夢》十二講智慧樹知到期末考試答案章節(jié)答案2024年安徽師范大學(xué)
- 項(xiàng)目介紹書范文
- 2024年巴西玩具市場機(jī)會及渠道調(diào)研報(bào)告
- 2024年《建筑節(jié)能》理論考試題庫(濃縮500題)
- 2024廚具采購合同
- 酶工程智慧樹知到期末考試答案章節(jié)答案2024年華南理工大學(xué)、暨南大學(xué)、華南農(nóng)業(yè)大學(xué)
- 會計(jì)師事務(wù)所的年度工作總結(jié)
- 2024年中考作文十二大高頻熱點(diǎn)主題9-家國情懷(素材)
- 中國裝備智慧樹知到期末考試答案章節(jié)答案2024年上海電機(jī)學(xué)院
- 2022-2023學(xué)年山東省菏澤市單縣人教PEP版四年級上冊期末考試英語試卷
評論
0/150
提交評論