摘要
首先,論文一開始便是清楚的論述了系統(tǒng)的研究?jī)?nèi)容。其次,剖析系統(tǒng)需求分析,弄明白“做什么”,分析包括業(yè)務(wù)分析和業(yè)務(wù)流程的分析以及用例分析,更進(jìn)一步明確系統(tǒng)的需求。然后在明白了系統(tǒng)的需求基礎(chǔ)上需要進(jìn)一步地設(shè)計(jì)系統(tǒng),主要包羅軟件架構(gòu)模式、整體功能模塊、數(shù)據(jù)庫設(shè)計(jì)。本項(xiàng)目軟件架構(gòu)選擇B/S模式,總體功能模塊運(yùn)用自頂向下的分層思想。再然后就是實(shí)現(xiàn)系統(tǒng)并進(jìn)行代碼編寫實(shí)現(xiàn)功能。論文的最后章節(jié)總結(jié)一下自己完成本論文和開發(fā)本項(xiàng)目的心得和總結(jié)。通過手機(jī)密碼管理app將會(huì)使在手機(jī)密碼管理管理各個(gè)方面的工作效率帶來實(shí)質(zhì)性的提升。
關(guān)鍵字:B/S模式 、 手機(jī)密碼管理app、 軟件架構(gòu)
Abstract
First of all, at the beginning of the paper is a clear discussion of the system of research content. Secondly, analyze the system requirements analysis to understand “what to do”. The analysis includes business analysis, business process analysis and use case analysis to further clarify the requirements of the system. Then on the basis of understanding the requirements of the system need to further design the system, mainly including software architecture pattern, overall functional modules, database design. The software architecture of this project chooses B/S mode, and the overall functional module adopts the top-down hierarchical idea. And then is to implement the system and code to achieve the function. The last chapter of the paper summarizes the experience and summary of completing this paper and developing this project. Through the mobile password management app will make the mobile password management in all aspects of the work efficiency to bring substantial improvement.
Keywords: B/S mode, mobile password management app, software architecture
目錄
1緒論 4
1.1項(xiàng)目研究的背景 4
1.2開發(fā)意義 4
1.3項(xiàng)目研究?jī)?nèi)容與結(jié)構(gòu) 4
2開發(fā)技術(shù)介紹 5
2.1B/S架構(gòu) 5
2.2 Android平臺(tái) 5
2.3 Java語言簡(jiǎn)介 5
2.4 MySQL 介紹 6
2.5 MySQL環(huán)境配置 8
2.6 SSM框架 8
3系統(tǒng)分析 9
3.1可行性分析 9
3.1.1技術(shù)可行性 9
3.1.2經(jīng)濟(jì)可行性 9
3.1.3操作可行性 9
3.2 app性能需求分析 10
3.3 app設(shè)計(jì)規(guī)則與運(yùn)行環(huán)境 10
3.4 app功能分析 10
3.5 app流程的分析 11
3.5.1 用戶管理的流程 12
3.5.2 個(gè)人中心管理流程 13
3.5.3 登錄流程 13
4系統(tǒng)設(shè)計(jì) 14
4.1 軟件功能模塊設(shè)計(jì) 14
4.2 數(shù)據(jù)庫設(shè)計(jì) 14
4.2.1 概念模型設(shè)計(jì) 14
4.2.2 物理模型設(shè)計(jì) 15
5系統(tǒng)詳細(xì)設(shè)計(jì) 18
5.1 APP端 18
5.2管理員功能模塊 20
6系統(tǒng)測(cè)試 23
7總結(jié)與心得體會(huì) 24
7.1 總結(jié) 24
7.2 心得體會(huì) 24
參考文獻(xiàn) 25
致謝 26
1緒論
1.1項(xiàng)目研究的背景
隨著大量的便捷網(wǎng)站和 APP 的應(yīng)用,需要不斷地注冊(cè)賬戶。每個(gè)人在不同平臺(tái)的賬戶密碼也越來越多,加上現(xiàn)在不同平臺(tái)的密碼設(shè)置要求也越來越復(fù)雜,人類的記憶能力也有限,所以隨著某些軟件長(zhǎng)時(shí)間不用,就會(huì)忘記一些賬戶信息,尤其是用戶名和密碼。但是記錄在本子或電腦上的一些平臺(tái)上,又是十分不安全而且容易丟失的。人們迫切地需要一個(gè)安全靠譜的手機(jī)APP來記錄和管理這些賬戶密碼,所以,有個(gè)能保證用戶賬戶信息安全的移動(dòng)應(yīng)用來幫用戶隨時(shí)隨地管理這些個(gè)人賬戶是非常必須的。
1.2國(guó)內(nèi)外研究現(xiàn)狀
1.國(guó)外現(xiàn)狀及水平
目前在密碼管理器的研究領(lǐng)域,國(guó)際上己經(jīng)有不少較為成熟的軟件正在被人們所使用,這些軟件有的應(yīng)用在PC端,有的應(yīng)用在MAC端,也有應(yīng)用在移動(dòng)設(shè)備上的。在眾多的密碼管理器中以1Password、LassPass、Dashlane、KeePass為代表。
對(duì)數(shù)據(jù)加密時(shí),以上四種密碼管理器均使用AES對(duì)稱加密算法。身份認(rèn)證方式中1Password以及KeePass均使用主密碼作為身份認(rèn)證的唯一方式,而Dashlane則是以設(shè)備唯一碼與主密碼共同作用的雙重身份認(rèn)證。LassPass雖然也是以主密碼為主的驗(yàn)證方式,但它還可以通過配合谷歌的身份驗(yàn)證器進(jìn)行雙重身份認(rèn)證。在信息同步方面1Password和KeePass均只在客戶端本地保存數(shù)據(jù),用戶可使用類似Dropbox等第三方網(wǎng)絡(luò)文件同步工具進(jìn)行數(shù)據(jù)的同步。而LassPass和Dashlane則強(qiáng)制將用戶的每條網(wǎng)絡(luò)賬戶信息保存到服務(wù)器端。
2.國(guó)內(nèi)現(xiàn)狀及水平
徐孝成設(shè)計(jì)了一種對(duì)密碼加密存儲(chǔ)的密碼管理器。系統(tǒng)采用Android智能手機(jī)操作系統(tǒng)、JSP,HTML5、MySQL數(shù)據(jù)庫和MVC模式等幵發(fā)技術(shù),最大化的實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)、業(yè)務(wù)邏輯和數(shù)據(jù)展現(xiàn)的分離,使系統(tǒng)結(jié)構(gòu)更加清晰,易于維護(hù)和升級(jí)。系統(tǒng)從數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸、數(shù)據(jù)訪問和事件審汁等多個(gè)方面進(jìn)彳設(shè)計(jì)與實(shí)現(xiàn)以保證系統(tǒng)的安全。在Android客戶端釆取Native和Web相結(jié)合的混合開發(fā)模式,在具有出色的用戶體驗(yàn)的基礎(chǔ)上,提高了代碼重用件和系統(tǒng)的跨平臺(tái)移植能力。該軟件本質(zhì)上屬于B/S結(jié)構(gòu),未設(shè)置本地存儲(chǔ),如果用戶未連接網(wǎng)絡(luò)則不能在該密碼管理器中存取信息。并且在登錄階段,該密碼管理器只對(duì)用戶名和密碼進(jìn)行驗(yàn)證,未考慮到用戶主密碼丟失的情況。
蘭坤設(shè)計(jì)的密碼管家也是基于安卓平臺(tái)的—款應(yīng)用軟件,該密碼管家實(shí)現(xiàn)了對(duì)密碼的加密存儲(chǔ)。但是該應(yīng)用軟件只是應(yīng)用在安卓客戶端本地的密碼管理器,無法同步用戶存儲(chǔ)的各項(xiàng)數(shù)據(jù)。
屈曉等人設(shè)計(jì)的密碼網(wǎng)上存儲(chǔ)讀取網(wǎng)站,是一款基于B/S模式的密碼管理器。用戶身份認(rèn)證只進(jìn)行簡(jiǎn)單的用戶名和密碼的驗(yàn)證,并且只能在連接互聯(lián)網(wǎng)的情況下才能實(shí)現(xiàn)數(shù)據(jù)的存取。
羅立峰設(shè)計(jì)的密碼存儲(chǔ)系統(tǒng),實(shí)現(xiàn)了密碼的明文和密文兩種保存方式,登錄模塊設(shè)計(jì)了無密碼登錄、使用二維碼登錄和主密碼登錄三種方式。但該密碼存儲(chǔ)系統(tǒng),是一款移動(dòng)終端本地應(yīng)用,只將用戶的密碼數(shù)據(jù)保存在安卓本地?cái)?shù)據(jù)庫中。
才華、肖普山針對(duì)已有的密碼管理器實(shí)現(xiàn)方案中存在的單個(gè)主密碼認(rèn)證、傳輸存儲(chǔ)涉及密碼內(nèi)容本身等問題,設(shè)計(jì)了用戶密碼和網(wǎng)站密碼的映射轉(zhuǎn)換關(guān)系,并采用與1Password、LassPass等商用產(chǎn)品類似的 AES256 與PBKDF「哈希算法」加密技術(shù)對(duì)映射關(guān)系表進(jìn)行加密,使得被加密存儲(chǔ)對(duì)象由用戶密碼改進(jìn)為映射關(guān)系表。 同時(shí),通過綜合用戶自定義和系統(tǒng)輔助生成的方式制定網(wǎng)站密碼等級(jí)、映射關(guān)系、密碼規(guī)則,優(yōu)化密碼自定義安全等級(jí)和便捷性,提出了一種聚合密碼管理器,保留了現(xiàn)有加密模式安全性的同時(shí),整體提高了密碼管理器的抗風(fēng)險(xiǎn)能力,極大便利了用戶的使用體驗(yàn)。
張亞娟、韓銀雪、劉效洋設(shè)計(jì)的基于AES加密算法的賬號(hào)密碼管理 APP,主要的優(yōu)點(diǎn)包括兩方面:一是對(duì)賬戶進(jìn)行了分組管理功能,方便用戶管理和查找賬戶信息; 另一方面是對(duì)分組進(jìn)行加密設(shè)置,對(duì)賬戶信息進(jìn)行雙重保護(hù),提高了用戶信息的安全性,用戶可以更加方便和放心地使用它對(duì)重要的賬戶信息進(jìn)行管理。不足的是,這個(gè)項(xiàng)目采用本地存儲(chǔ)的方式,雖然增加了賬號(hào)密碼的安全性,但是一旦用戶的移動(dòng)設(shè)備丟失,賬戶信息也將丟失。
吳迪將區(qū)塊鏈?zhǔn)状螒?yīng)用于密碼管理領(lǐng)域,利用區(qū)塊鏈去中心化、不可篡改以及點(diǎn)對(duì)點(diǎn)通信等特點(diǎn),很好地解決了傳統(tǒng)密碼管理方案中安全性差、不易于隱秘的分享等問題。同時(shí),利用SVM算法對(duì)分類問題解決的高效性,設(shè)計(jì)并實(shí)現(xiàn)基于SVM算法對(duì)惡意請(qǐng)求識(shí)別的檢測(cè)模塊,提高了方案的安全性。通過SVM分類算法實(shí)現(xiàn)對(duì)惡意請(qǐng)求的分類,構(gòu)建系統(tǒng)安全模塊,避免了Web密碼管理系統(tǒng)遭受XSS、CSRF攻擊,為系統(tǒng)安全提供保障。編寫模擬登陸功能,提升了用戶使用密碼的便利性。
張文靜、周游、薛長(zhǎng)舉綜合現(xiàn)有認(rèn)證系統(tǒng)存在的一些問題,設(shè)計(jì)了基于移動(dòng)終端的動(dòng)態(tài)密碼安全認(rèn)證系統(tǒng)。 該系統(tǒng)將密碼認(rèn)證和密碼管理相結(jié)合,并結(jié)合密碼應(yīng)用業(yè)務(wù),實(shí)現(xiàn)數(shù)據(jù)信息全程加密保護(hù),并采用一次一密以及數(shù)據(jù)多重加密等密碼應(yīng)用技術(shù),實(shí)現(xiàn)用戶按權(quán)限訪問、按資源訪問密碼業(yè)務(wù)的管控目標(biāo),保證持有智能終端設(shè)備的用戶在對(duì)相應(yīng)業(yè)務(wù)進(jìn)行訪問時(shí)的安全性和保密性。
吳晗針對(duì)密碼的管理困難問題設(shè)計(jì)一種基于安卓平臺(tái)的密碼管理器,其主要作用是加密存儲(chǔ)用戶的網(wǎng)絡(luò)賬戶信息。設(shè)計(jì)密碼管理器客戶端中的各個(gè)模塊。在客戶端的身 份認(rèn)證模塊中提出一種新的身份認(rèn)證方式,即主密碼、手機(jī)IMEI碼和藍(lán)牙MAC地址共同作用的身份認(rèn)證機(jī)制??蛻舳说男畔⒋鎯?chǔ)模塊,使用了對(duì)稱加密算法和單分組哈希函數(shù)對(duì)用戶的網(wǎng)絡(luò)賬戶信息進(jìn)行加密存儲(chǔ)與解密讀取。他提出的密碼管理器, 用戶界面簡(jiǎn)單易操作,能夠安全、快速地存取用戶的各類網(wǎng)絡(luò)賬戶信息。身份認(rèn)證準(zhǔn)確且耗時(shí)較短。服務(wù)端與本地客戶端以密文形式傳輸數(shù)據(jù),安全可靠。
吳福維為解決數(shù)據(jù)中心操作系統(tǒng)用戶密碼管理的困境,提高系統(tǒng)的安全性、系統(tǒng)運(yùn)維效率和服務(wù)水平,研發(fā)了一套開放平臺(tái)服務(wù)器群用戶密碼自動(dòng)化管理系統(tǒng),實(shí)現(xiàn)
對(duì)服務(wù)器群操作系統(tǒng)用戶密碼的集中存儲(chǔ)、自動(dòng)修改、統(tǒng)一授權(quán)以及通過自動(dòng)提取密碼實(shí)現(xiàn)系統(tǒng)單點(diǎn)登錄等功能,使企業(yè)運(yùn)維管理技術(shù)人員無需再記憶大量密碼,降低人力成本,提高系統(tǒng)運(yùn)維安全性和工作效率。對(duì)企業(yè)級(jí)數(shù)據(jù)中心的服務(wù)器群操作系統(tǒng)密碼自動(dòng)化管理和使用給出了兼顧效率與安全的技術(shù)解決方案。
施勇面對(duì)本地管理的復(fù)雜性、在線管理的安全性及運(yùn)行環(huán)境的高要求現(xiàn)狀,采取本地管理與在線管理相結(jié)合的方式,描述開發(fā)輕量級(jí)的密碼使用管理系統(tǒng),從用戶當(dāng)前管理多口令的現(xiàn)狀出發(fā),使得大眾用戶方便在普通計(jì)算機(jī)或移動(dòng)端中進(jìn)行管理,提升大數(shù)據(jù)時(shí)代個(gè)人信息的綜合安全防護(hù)能力,防范個(gè)人信息風(fēng)險(xiǎn)。他的研究團(tuán)隊(duì)開發(fā)的密碼管理系統(tǒng),可以為用戶提供友好的管理界面,快捷的管理功能,方便、準(zhǔn)確的記錄用戶名與密碼,以及各種有效的信息。對(duì)于大眾而言,賬戶密碼口令管理更加安全、方便、快捷。該系統(tǒng)采用MD5twithRSA雙重保險(xiǎn),保證用戶主密碼安全,使用AES輕量級(jí)且安全度高的加密算法,極大減輕了服務(wù)器負(fù)載。
吳應(yīng)廣針對(duì)密碼設(shè)備使用管理需求,主要研究密碼管理常用功能的實(shí)現(xiàn),著重對(duì)管理系統(tǒng)網(wǎng)絡(luò)處理模塊進(jìn)行深入探討,并在系統(tǒng)中引入IOCP模型,設(shè)計(jì)高效的管理機(jī)制,實(shí)現(xiàn)對(duì)大量密碼設(shè)備的在線監(jiān)控、在線管理和密鑰文件在線安裝更換,解決密碼終端大量使用時(shí)統(tǒng)一在線管理的問題,這對(duì)促進(jìn)單位密碼管理的嚴(yán)格化、信息化有著非常重要的意義。他利用IOCP技術(shù)建立了一套高性能可伸縮應(yīng)用服務(wù)器模型。他從對(duì)IOCP使用的研究開始,研究了該模型的基本原理、實(shí)現(xiàn)機(jī)制和使用方法。然后根據(jù)現(xiàn)實(shí)網(wǎng)絡(luò)連接需求建立了一套服務(wù)器模型,該服務(wù)器模型的核心是IOCP技術(shù),其特點(diǎn)就是連接高效、性能穩(wěn)定。最后,利用建立的IOCP高效服務(wù)器模型,分析當(dāng) 前密碼管理任務(wù)是需求,設(shè)計(jì)一個(gè)基于IOCP的密碼管理系統(tǒng)模型,研發(fā)了一套高效 的、功能齊全的密碼管理系統(tǒng),實(shí)現(xiàn)密鑰和密碼設(shè)備在線管理。同時(shí),通過多對(duì)線程 的使用、內(nèi)存池的管理、防止惡意連接和高效傳輸方法的研究,更進(jìn)一步提高了服務(wù)器的效率,較好地實(shí)現(xiàn)了密鑰管理、設(shè)備管理、在線監(jiān)控等功能。
1.3開發(fā)意義
隨著互聯(lián)網(wǎng)的高速發(fā)展,信息網(wǎng)站數(shù)量也隨之快速增加。網(wǎng)站數(shù)量的增多一方面給網(wǎng)絡(luò)用戶帶來了便利,網(wǎng)絡(luò)用戶可以足不出戶的在網(wǎng)絡(luò)上辦理事務(wù)、隨時(shí)隨地獲取資訊、即時(shí)與他人取得聯(lián)系;另一方面紛繁復(fù)雜的網(wǎng)站也意味著網(wǎng)絡(luò)用戶需要在不同的網(wǎng)站上注冊(cè)網(wǎng)絡(luò)賬戶,導(dǎo)致用戶需要同時(shí)管理無數(shù)個(gè)網(wǎng)絡(luò)賬戶。而管理這樣龐大的賬戶體系,給用戶的數(shù)據(jù)管理能力提出了難以應(yīng)對(duì)的挑戰(zhàn)。針對(duì)數(shù)據(jù)管理困難的問題,一些網(wǎng)絡(luò)用戶選擇將自己的各類網(wǎng)絡(luò)賬戶信息記錄在文檔或者筆記本中這樣的記錄方式確實(shí)方便了用戶,解決了記憶困難的問題,但保存時(shí)未對(duì)賬戶信息進(jìn)行加密,具有安全隱患;還有一些網(wǎng)絡(luò)用戶選擇在每個(gè)網(wǎng)站統(tǒng)一使用相同的賬戶名和密碼,這樣用戶只需要記憶一個(gè)密碼便可登錄所有的網(wǎng)站。但因?yàn)楦骶W(wǎng)站對(duì)用戶密碼的存儲(chǔ)方式有著很大的差異,有的網(wǎng)站會(huì)加密存儲(chǔ),有的則以明文存儲(chǔ)。而且各個(gè)網(wǎng)站的服務(wù)器安全系數(shù)也存在著很大的差異,若安全系數(shù)較低的網(wǎng)站數(shù)據(jù)庫被攻破,那么攻擊者便可以使用獲取到的用戶名和密碼進(jìn)行大量的撞庫攻擊,這必將導(dǎo)致大規(guī)模的個(gè)人信息泄露問題。本文提出的安卓平臺(tái)的密碼管理器屬于密碼工具技術(shù)類,將對(duì)現(xiàn)有問題進(jìn)行部分改進(jìn),通過對(duì)用戶所儲(chǔ)存的賬戶密碼進(jìn)行加密,再以人臉識(shí)別方式確認(rèn)使用者身份,只有使用者本可以看密碼的原碼的方法增強(qiáng)密碼管理APP的安全性。
并且本文提出的密碼管理器可同時(shí)支持本地存儲(chǔ)和服務(wù)器同步兩大功能,為用戶的密碼管理提供便利。
1.4項(xiàng)目研究?jī)?nèi)容與結(jié)構(gòu)
課題研究的主要內(nèi)容:
本課題將主要研究以下內(nèi)容,
1)手機(jī)密碼管理APP的系統(tǒng)架構(gòu)。
2)對(duì)現(xiàn)行的密碼算法的理解,并進(jìn)行實(shí)現(xiàn)。
3)人臉識(shí)別算法的應(yīng)用。
4)小型數(shù)據(jù)庫的構(gòu)建與管理
研究方法:
該APP將通過人臉識(shí)別的方式登錄,利用RSA是非對(duì)稱加密算法對(duì)賬號(hào)、密碼、文字等信息進(jìn)行加密。因?yàn)镽SA加密和解密采用的是不同的密鑰(公鑰和私鑰),用戶查詢需要依照所選質(zhì)數(shù)大范圍隨機(jī)生成的私鑰解密,這樣對(duì)賬戶就多了一重保護(hù)。加密后的信息通過網(wǎng)絡(luò)數(shù)據(jù)庫的形式進(jìn)行儲(chǔ)存,可實(shí)現(xiàn)多設(shè)備隨時(shí)添加、查詢的功能。此外,這款A(yù)PP還具有拍照識(shí)別銀行卡信息、語音輸入文字、便于記憶的圖像密碼等AI功能。
準(zhǔn)備采取的措施:
1.構(gòu)建一個(gè)小型數(shù)據(jù)庫來存放用戶名與密碼等信息,密碼以加密的方式存儲(chǔ)。
2.通過APP輸入用戶的各種用戶名和密碼。
3.通過人臉識(shí)別方式確認(rèn)使用者身份,只有使用者本可以看密碼的原碼。
4.利用掌握的知識(shí)設(shè)計(jì)密碼管理APP并實(shí)現(xiàn)制作。
開發(fā)技術(shù)介紹
2.1B/S架構(gòu)
B/S結(jié)構(gòu)是目前使用最多的結(jié)構(gòu)模式,它可以使得系統(tǒng)的開發(fā)更加的簡(jiǎn)單,好操作,而且還可以對(duì)其進(jìn)行維護(hù)。使用該結(jié)構(gòu)時(shí)只需要在計(jì)算機(jī)中安裝數(shù)據(jù)庫,和一些很常用的瀏覽器就可以了。瀏覽器就會(huì)與數(shù)據(jù)庫進(jìn)行信息的連接,可以實(shí)現(xiàn)很多的功能,B/S結(jié)構(gòu)是可以直接進(jìn)行使用的,而且B/S結(jié)構(gòu)在使用中極大的減少了工作的維護(hù)?;贐/S的軟件,所有的數(shù)據(jù)庫之間都是相互獨(dú)立的,因此是非常安全的。因?yàn)榛贐/S結(jié)構(gòu)可以清楚的看到系統(tǒng)正在處理的業(yè)務(wù),并且能夠及時(shí)的讓管理人員做出決策,這樣就可以避免企業(yè)的損失。B/S結(jié)構(gòu)的基本特點(diǎn)是集中式的管理模式,用戶使用系統(tǒng)生成數(shù)據(jù)后,這些數(shù)據(jù)就可以存儲(chǔ)到系統(tǒng)的數(shù)據(jù)庫中,方便日后能夠用到,這樣就可以滿足人們的所有的需求。
圖2-1 B/S模式三層結(jié)構(gòu)圖
針對(duì)現(xiàn)在的購(gòu)物商城,選擇系統(tǒng)結(jié)構(gòu)為B/S(Browser /Service ),即瀏覽器和服務(wù)器結(jié)構(gòu)。是目前國(guó)內(nèi)最為常見,而且對(duì)于用戶而言是最方便的一個(gè)常用結(jié)構(gòu),對(duì)以往的客戶機(jī)/服務(wù)器結(jié)構(gòu)(Client/Service)進(jìn)行更深一層的優(yōu)化。用戶為了使用瀏覽器進(jìn)行操作,瀏覽各個(gè)網(wǎng)站,進(jìn)行實(shí)現(xiàn)和使用瀏覽器獲取的資料和信息。獲取的主要信息和邏輯都在服務(wù)器端保存的數(shù)據(jù),這些數(shù)據(jù),當(dāng)用戶通過瀏覽器請(qǐng)求服務(wù)器時(shí),服務(wù)器進(jìn)行對(duì)請(qǐng)求的響應(yīng)作答,返回一系列數(shù)據(jù),因此在服務(wù)器端進(jìn)行業(yè)務(wù)邏輯的處理,在客戶端的瀏覽器主要處理很少的簡(jiǎn)單的邏輯。所謂的傳統(tǒng)的C/S結(jié)構(gòu)模式發(fā)展演變成如今在web上的三層模式?,F(xiàn)如今此結(jié)構(gòu)模式非常廣泛的運(yùn)用在各個(gè)互聯(lián)網(wǎng)上,其對(duì)系統(tǒng)維護(hù)所產(chǎn)生的升級(jí)成本和人力時(shí)間更低,用戶使用成本低,以目前的技術(shù)發(fā)展情況看,其技術(shù)相對(duì)來講易于把握。
此網(wǎng)站系統(tǒng)開發(fā)主要運(yùn)用了java語言,和最新流行的三大框架,比如Spring,SpringMVC,MyBatis,這些技術(shù)主要運(yùn)用在后端的開發(fā)實(shí)現(xiàn)上,數(shù)據(jù)庫方面主要用輕巧簡(jiǎn)單的實(shí)用的Mysql數(shù)據(jù)庫。前端用了HTML,JQuery和Bootstrap框架技術(shù)。在Web應(yīng)用程序的開發(fā)實(shí)踐中,Spring公司研制了基于MVC模式應(yīng)用的輕量級(jí)的框架—Spring。Spring使用的思路在于JavaBean的生成和銷毀的生命周期,為了完成以前的EJB完成的任務(wù)。Spring框架主要核心作用在于IOC和AOP容器,IOC控制反轉(zhuǎn),顧名思義,將以前創(chuàng)建對(duì)象的控制對(duì)象的權(quán)利交給Spring的IOC容器來完成,方便管理所有的對(duì)象,解決開發(fā)中生成的大量的對(duì)象,使開發(fā)變得簡(jiǎn)單容易。AOP面向切面,主要為了分離開發(fā)系統(tǒng)中的業(yè)務(wù)邏輯,當(dāng)有大量重復(fù)的業(yè)務(wù)邏輯時(shí),可以運(yùn)用AOP技術(shù),使重復(fù)做的工作量變得簡(jiǎn)單,最核心的為了完成業(yè)務(wù)邏輯。根據(jù)MVC模式的特點(diǎn),構(gòu)建了SpringMVC框架,使得Web應(yīng)用開發(fā)更加方便操作。JQuery的插件為了和Bootstrap兼容的整合到一起,構(gòu)建了Bootstrap的UI組件庫。此UI庫,含有大量的實(shí)用性的組件,給前端開發(fā)人員快速開發(fā)非常方便。以JavaScript為核心技術(shù),開發(fā)封裝了一套簡(jiǎn)單、方便使用的JQuery框架,此框架能特別快速上手。JavaScript中的很多的常用功能代碼都進(jìn)行封裝,提供簡(jiǎn)單的操作,使得其能和HTML標(biāo)簽快速融合,進(jìn)行前后端的人機(jī)交互。Bootstrap主要又在JQuery的基礎(chǔ)上進(jìn)行更多的的封裝,使得開發(fā)人員操作起來更加的人性化,完善了JQuery的不足之處,形成了柵格式的網(wǎng)站風(fēng)格,頁面變得簡(jiǎn)潔大氣美觀。
2.2 Android平臺(tái)
Android是谷歌旗下著名的移動(dòng)開源操作系統(tǒng)。這個(gè)系統(tǒng)的內(nèi)核是Linux。 該系統(tǒng)具有很高的兼容性,可以用在包括智能手機(jī)、電視、平板等諸多設(shè)備上。有著高度兼容的特性。最重要的是,Android開源的屬性使開發(fā)者可以自由的通過Android系統(tǒng)進(jìn)行開發(fā)。而本系統(tǒng)就是基于Android開發(fā)的一款醫(yī)院掛號(hào)系統(tǒng)。Android的開源屬性在07年已經(jīng)推出,就受到了開發(fā)者的高度贊揚(yáng),而Android開發(fā)也成為一時(shí)間最熱門的詞語。開發(fā)者可以在Android系統(tǒng)上盡情揮舞畫筆隨心所欲地創(chuàng)作。Android作為以智能手機(jī)、平板、電視為主戰(zhàn)場(chǎng)的可移動(dòng)設(shè)備操作系統(tǒng),使用度和適用性非常廣泛,遠(yuǎn)遠(yuǎn)超過諸如塞班、IOS等系統(tǒng)。在Android平臺(tái)上,APP的體系結(jié)構(gòu)很大幅度的上簡(jiǎn)化了組件的工作。在這之中,Java成為了APP開發(fā)的唯一語言,Java通過跨平臺(tái)功能,無需編譯基于Android框架開發(fā)的軟件應(yīng)用程序,即任意一臺(tái)搭載了Android的設(shè)備均可運(yùn)行。
2.3 Java語言簡(jiǎn)介
Java是由SUN公司推出,該公司于2010年被oracle公司收購(gòu)。Java本是印度尼西亞的一個(gè)叫做爪洼島的英文名稱,也因此得來java是一杯正冒著熱氣咖啡的標(biāo)識(shí)。Java語言在移動(dòng)互聯(lián)網(wǎng)的大背景下具備了顯著的優(yōu)勢(shì)和廣闊的前景,它是面向?qū)ο蟮?,分布式的,?dòng)態(tài)的,具有平臺(tái)無關(guān)性、安全性、健壯性。Java語言的基本語句語法和C++一樣,但是它面向?qū)ο蟮募夹g(shù)更加徹底,因?yàn)镴ava要求將所有的內(nèi)容都必須封裝成類,把類作為程序的基本單位。由于不允許類外有變量、方法。 Java語言的分布式體現(xiàn)在數(shù)據(jù)分布和操作分布,它是面向網(wǎng)絡(luò)的語言,可以處理TCP/IP協(xié)議,它也支持客戶機(jī)/服務(wù)器的計(jì)算模式。Java語言的動(dòng)態(tài)性是指類在運(yùn)行時(shí)是動(dòng)態(tài)安裝的,使得Java可以動(dòng)態(tài)的維護(hù)程序。Java不支持指針,對(duì)內(nèi)存訪問的所有操作都是通過對(duì)象實(shí)例化實(shí)現(xiàn)的,這樣就避免了指針操作中易產(chǎn)生的錯(cuò)誤,同時(shí)也預(yù)防了病毒對(duì)系統(tǒng)的破壞和威脅。
Java語言的編程風(fēng)格與C語言非常接近,它繼承了C++面向?qū)ο蠹夹g(shù)的核心,它面世之后發(fā)展迅速,非常流行,對(duì)高級(jí)C語言形成了很大的沖擊。業(yè)內(nèi)人士稱之為“一次編譯、到處執(zhí)行”。當(dāng)然java也有缺點(diǎn),在每次執(zhí)行編譯后,字節(jié)碼都需要消耗一定的時(shí)間,在某些程度上降低了性能。但是這并不影響java成為此次設(shè)計(jì)語言的選擇。Java語言簡(jiǎn)單易學(xué),使用它的編程時(shí)間短,功能性強(qiáng),開發(fā)者學(xué)習(xí)起來更簡(jiǎn)便、更快。Java的主要特性有以下幾個(gè):
1.面向?qū)ο?br> 面向?qū)ο笥兴膫€(gè)特點(diǎn):封裝、繼承、多態(tài)、抽象。抽象是指忽略一個(gè)問題中的次要部分,關(guān)注主要部分。多態(tài)是指對(duì)同一種消息做出的不同反應(yīng)。繼承是指在原有的父類方法基礎(chǔ)上增加自己獨(dú)有的方法,而不改變?cè)瓉砀割悺?br> 2.平臺(tái)無關(guān)性、
Java編譯出來的是字節(jié)碼,直接由虛擬機(jī)執(zhí)行。在任何平臺(tái)上,只要有Java虛擬機(jī),Java代碼都能運(yùn)行。
3.可靠性和安全性
Java對(duì)內(nèi)存的訪問都必須通過對(duì)象的實(shí)例變量來實(shí)現(xiàn),避免了指針中出現(xiàn)的錯(cuò)誤。
4. 多線程
Java提供了多線程功能,利用編程實(shí)現(xiàn)同一時(shí)間同時(shí)工作的功能。
2.4 MySQL 介紹
數(shù)據(jù)庫(Database)是按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲(chǔ)和管理數(shù)據(jù)的建立在計(jì)算機(jī)存儲(chǔ)設(shè)備上的倉(cāng)庫。簡(jiǎn)單來講,存儲(chǔ)糧食的倉(cāng)庫叫糧倉(cāng)存儲(chǔ)數(shù)據(jù)的倉(cāng)庫就叫數(shù)據(jù)庫。數(shù)據(jù)庫在軟件項(xiàng)目中扮演著操作管理數(shù)據(jù)的角色同時(shí)還能夠保證數(shù)據(jù)的獨(dú)立性、一致性和安全性,并為系統(tǒng)訪問數(shù)據(jù)提供有效方式不僅如此數(shù)據(jù)庫還能大大減少程序員開發(fā)程序時(shí)間。在日常能夠接觸實(shí)用的一般有兩類數(shù)據(jù)庫,一類是以(Oracle,DB2,SQL Server,MySQL )為代表的關(guān)系型數(shù)據(jù)庫和以(NoSql、MongeDB)為代表的非關(guān)系型數(shù)據(jù)庫,兩類數(shù)據(jù)庫各有各的優(yōu)缺點(diǎn)。其中非關(guān)系型數(shù)據(jù)庫又分為網(wǎng)絡(luò)數(shù)據(jù)庫和層級(jí)數(shù)據(jù)庫。網(wǎng)絡(luò)數(shù)據(jù)庫網(wǎng)絡(luò)數(shù)據(jù)庫是指在計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)中應(yīng)用數(shù)據(jù)庫技術(shù)然后借助網(wǎng)絡(luò)技術(shù)將存儲(chǔ)于數(shù)據(jù)庫中的大量信息及時(shí)發(fā)布出去;在成熟的數(shù)據(jù)庫技術(shù)的幫助下,計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)中的各種數(shù)據(jù)的有效管理,用戶與網(wǎng)絡(luò)中的數(shù)據(jù)庫數(shù)據(jù)交互也借此得以進(jìn)行。作為最成功的典型層次模型數(shù)據(jù)庫系統(tǒng),IMS是最早研制成功的數(shù)據(jù)庫系統(tǒng)。1970年由埃德加·科德于首先提出的關(guān)系模型融合了“科德十二定律”?,F(xiàn)如今即使很多人仍舊不看好這個(gè)模型,但它依舊是數(shù)據(jù)存儲(chǔ)的傳統(tǒng)標(biāo)準(zhǔn)。關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束構(gòu)成了關(guān)系模型。作為數(shù)據(jù)庫另外一種區(qū)分方式的存儲(chǔ)介質(zhì)被大家分為磁盤和內(nèi)存這 兩種。例如:關(guān)系型數(shù)據(jù)庫就存儲(chǔ)在磁盤中,非關(guān)系型數(shù)據(jù)庫則存儲(chǔ)在內(nèi)存中。典型的關(guān)系型數(shù)據(jù)庫有:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite。小型關(guān)系型數(shù)據(jù)庫:Microsoft Access,SQLite;中型關(guān)系型數(shù)據(jù)庫:SQL Server,Mysql;大型關(guān)系型數(shù)據(jù)庫:Oracle,DB2。
大家常用的其他關(guān)系形數(shù)據(jù)庫系統(tǒng)大多是MySQL AB公司開發(fā)的,其中MySQL也是由這家開發(fā)的,所應(yīng)用的分布式數(shù)據(jù)庫管理系統(tǒng)是客戶機(jī)/服務(wù)器體系結(jié)構(gòu)得益于此結(jié)構(gòu),而且用這個(gè)系統(tǒng)建造的數(shù)據(jù)庫具有很強(qiáng)的適用性,用C和C++編寫的系統(tǒng)讓他擁有很強(qiáng)的適用性所以他可以在大部分操作系統(tǒng)上使用并能和php結(jié)合。不同的API函數(shù)針對(duì)不同的語言(C,C++,JAVA等)來處理不同數(shù)據(jù);為了更好地支持多CPU多線程通過使用核心線程來實(shí)現(xiàn);提供的存儲(chǔ)機(jī)制分為事務(wù)和非事務(wù)存儲(chǔ)機(jī)制;MySQL采用雙重許可,不管是從MySQL AB公司獲得正式的商業(yè)許可又或是許可條款下以免費(fèi)軟件或開放源碼軟件的方式使用MySQL軟件都是被允許的。
MySQL作為數(shù)據(jù)庫擁有很多優(yōu)點(diǎn),其中由于是開放源碼,所以使用成本特別低,而它體積小的特點(diǎn)決定了速度快的特性。因此,My Sql具有開放性,多線程支持多種API,可跨數(shù)據(jù)庫連接,國(guó)際化,數(shù)據(jù)庫體積巨大等特點(diǎn)。簡(jiǎn)單的來說 ,MySql是一個(gè)開放的、快速的、多線程的、多用戶的數(shù)據(jù)庫服務(wù)器。
選用MySQL作為數(shù)據(jù)庫的其中一個(gè)原因就是支持多線程,支持多線程的特點(diǎn)為利用系統(tǒng)資源提供了便捷并因此大大提高了系統(tǒng)運(yùn)行速度和效率,而且連接數(shù)據(jù)庫的方式多樣包括但不局限于TCP/IP、ODBC和JDBC等途徑;但是沒有東西是完美無缺的,即便MySQL也如此,雖說它有著眾多優(yōu)點(diǎn)但其功能不夠強(qiáng)大,規(guī)模也相對(duì)較小,無法應(yīng)對(duì)大型數(shù)據(jù)哭的處理。但是對(duì)于本系統(tǒng)來說,選用MySQL作為數(shù)據(jù)庫,其功能性能已綽綽有余,如果要進(jìn)行二次開發(fā)的數(shù)據(jù)庫表結(jié)構(gòu)空間的擴(kuò)展也是完全可行的。綜上所述,MySQL是作為本系統(tǒng)數(shù)據(jù)庫的最優(yōu)選擇。
圖2-2 數(shù)據(jù)庫管理系統(tǒng)和接口的原理
2.5 MySQL環(huán)境配置
本系統(tǒng)的數(shù)據(jù)使用的是MySQL,所以要將MySQL安裝到指定目錄,如果下載的是非安裝的MySQL壓縮包,直接解壓到指定目錄就可以了。然后點(diǎn)擊C:\Program Files\MySQL\bin\winMySQLadmin.exe這個(gè)文件其中C:\Program Files\MySQL是MySQL安裝目錄。輸入winMySQLadmin的初始用戶、密碼(注:這不是MySQL里的用戶、密碼)隨便填不必在意,確定之后右下角任務(wù)的啟動(dòng)欄會(huì)出現(xiàn)一個(gè)紅綠燈的圖標(biāo),紅燈亮代表服務(wù)停止,綠燈亮代表服務(wù)正常,左擊這個(gè)圖標(biāo)->winnt->install the service 安裝此服務(wù),再左擊這個(gè)圖標(biāo)->winnt->start the service 啟動(dòng)MySQL服務(wù)。
修改MySQL數(shù)據(jù)庫的root密碼。用cmd進(jìn)入命令行模式輸入如下命令:
cd C:\Program Files\MySQL\bin
MySQLadmin -u root -p password 123
回車出現(xiàn)Enter password: ,這是要輸入原密碼. 剛安裝時(shí)密碼為空,所以直接回車,此時(shí)MySQL 中賬號(hào) root 的密碼被改為 123 安裝完畢。
2.6 SSM框架
手機(jī)密碼管理app的主流框架是SSM(Spring + Spring MVC + MyBatis),SSM框架web層使用Spring MVC框架,使傳輸前后端數(shù)據(jù)變得簡(jiǎn)單;對(duì)于業(yè)務(wù)層使用Spring作為輕量級(jí)控制反轉(zhuǎn)和面向切面的容器框架;對(duì)于相關(guān)SQL操作,采用Mybatis作為持久層框架,對(duì)JDBC進(jìn)行封裝,使得數(shù)據(jù)庫的底層面向開發(fā)者操作處于一種透明狀態(tài)。
2.5 JSP技術(shù)
本系統(tǒng)的開發(fā)主要用JSP(Hypertext Preprocessor,超文本預(yù)處理器)這一門開發(fā)語言。作為開發(fā)語言,這是一種通用的開源腳本語言。這種語法主要是將C語言、Java和Perl等語言的相關(guān)特點(diǎn)進(jìn)行總結(jié)吸收形成自身特點(diǎn),使得更加方便學(xué)習(xí),當(dāng)前廣泛在Web領(lǐng)域進(jìn)行使用。此語法的獨(dú)特之處在于將C、Java、Perl這三種語言進(jìn)行了歸納,并創(chuàng)新出JSP具有自己特點(diǎn)的語法。它在執(zhí)行動(dòng)態(tài)網(wǎng)頁方面相對(duì)于CGI和Perl語言更加高效。用動(dòng)態(tài)頁面如果是使用JSP語言,那么相對(duì)于其它的編程語言,JSP的執(zhí)行主要是體現(xiàn)在將程序嵌入到HTML文檔中,相對(duì)于其它語言,其執(zhí)行的效率一般都領(lǐng)先于其它的語言。此外,JSP編譯后代碼方面也是做得比較好的,一般其編譯能夠使代碼的運(yùn)行速度比一般語言都要快[7]。
其主要特性有以下幾個(gè)方面:
1)免費(fèi)性
和其它技術(shù)相比,JSP本身免費(fèi)且是開源代碼。
2)快捷性
使用JSP編程的程序一般開發(fā)比較快,而且系統(tǒng)運(yùn)行也比較快,也易于學(xué)習(xí)[2]。嵌入于HTML的這種方式,使其相對(duì)于其它開發(fā)語言編輯起來相對(duì)簡(jiǎn)單,實(shí)用性也更加強(qiáng),對(duì)初學(xué)者是比較適用的。
3)跨平臺(tái)性強(qiáng)
由于JSP是運(yùn)行在服務(wù)器的腳本,可以運(yùn)行在UNIX、LINUX、WINDOWS、MacOS、Android等平臺(tái)
4)效率高
JSP占用相當(dāng)少的系統(tǒng)資源。
JSP是面向?qū)ο笄要?dú)立于架構(gòu)的動(dòng)態(tài)腳本語言,使用JSP和HTML編寫WEB頁面,JSP服務(wù)器先對(duì)頁面的JSP代碼進(jìn)行解析,然后把處理后的結(jié)果連同HTML內(nèi)容一起傳送到訪問端的瀏覽器。JSP是一種源代碼開放程序,擁有很好的跨平臺(tái)兼容性。JSP代碼可以在Window系統(tǒng)以及許多版本的linux系統(tǒng)上完美運(yùn)行。
JSP語言是不需要任何特殊的開發(fā)環(huán)境的,所以用戶可以直接在WEB頁面中輸入JSP命令代碼。在WEB頁面中,所有的JSP代碼都被放置在“<?JSP”和“?>”中。
3系統(tǒng)分析
3.1可行性分析
在開發(fā)系統(tǒng)之前要進(jìn)行系統(tǒng)可行性分析,目的是在用最簡(jiǎn)單的方法去解決最大的問題,程序一旦開發(fā)出來滿足了用戶的需要,所帶來的利益也很多。下面我們將從技術(shù)、操作、經(jīng)濟(jì)等方面來選擇這個(gè)系統(tǒng)最終是否開發(fā)。
可行性分析就是可行性研究,它對(duì)于這個(gè)項(xiàng)目起著十分重要的作用,利用系統(tǒng)確定題目的前期,需要就行走訪、市場(chǎng)調(diào)差、親身體驗(yàn)等各種方式去了解系統(tǒng)未來的存在價(jià)值、使用價(jià)值、長(zhǎng)遠(yuǎn)利益等,為了避免項(xiàng)目出現(xiàn)瓶頸,減少項(xiàng)目不必要的損失,保障項(xiàng)目的成功投資,系統(tǒng)主要從經(jīng)濟(jì)可行性、技術(shù)可行性、管理可行性和開發(fā)環(huán)境可行性做評(píng)估,利用較短的時(shí)間,確定未來可能出現(xiàn)問題的解決方案。
技術(shù)本身來說是完全可以實(shí)現(xiàn)手機(jī)密碼管理的所有功能,不存在技術(shù)的不完整性,和功能的不可實(shí)現(xiàn)性。就自己的技術(shù)水平來說,隨著畢業(yè)設(shè)計(jì)的不斷深入,自己也在不斷的學(xué)習(xí),通過互聯(lián)網(wǎng)的查詢、圖書館資料的查閱、導(dǎo)師熱情的指點(diǎn)及同學(xué)朋友的幫助,自身技術(shù)會(huì)不斷提高,相信通過自己的努力,自身的技術(shù)水平可以達(dá)到系統(tǒng)實(shí)現(xiàn)的要求。
3.1.1技術(shù)可行性
本系統(tǒng)開發(fā)選擇java技術(shù),java是一個(gè)完全面向?qū)ο蟮恼Z言,java為開發(fā)者提供了豐富的類庫,大大減少了使用windows編程的難度,減少開發(fā)人員在設(shè)計(jì)算法上的難度,作為java開發(fā) Visual Studio更是一個(gè)必不可少的角色,它友好的界面,以及強(qiáng)大的功能,給程序開發(fā)人員帶來了很多方便,加上環(huán)境簡(jiǎn)單,轉(zhuǎn)移方便,無疑使此系統(tǒng)最佳的選擇。所以后臺(tái)設(shè)計(jì)選擇使用MySQL數(shù)據(jù)庫主要用來的建立和維護(hù)信息。對(duì)于前臺(tái)開發(fā)要求應(yīng)具備功能完善、易于操作等優(yōu)點(diǎn),后臺(tái)數(shù)據(jù)庫的要求則是能夠建立和維護(hù)數(shù)據(jù)信息的統(tǒng)一性和完整性。
依據(jù)上述目標(biāo)來分析本系統(tǒng)的硬件如下:
奔騰3的處理器;
內(nèi)存是 2G;
硬盤是50G;
操作系統(tǒng)是Window 10;
在軟件方面的話,安裝了Visul Studio 0 和MySQL數(shù)據(jù)庫開發(fā)工具。根據(jù)以上的軟件與硬件要求,得到這個(gè)系統(tǒng)的技術(shù)是可行的。
3.1.2經(jīng)濟(jì)可行性
基于ssm的手機(jī)密碼管理app,該app軟件開發(fā)僅需要一臺(tái)普通的計(jì)算機(jī)便可完成實(shí)現(xiàn)開發(fā),其成本很低。另外,作為畢業(yè)設(shè)計(jì)作品來講,開發(fā)成本基本上可以忽略不計(jì),且該系統(tǒng)軟件的投入使用,可以實(shí)現(xiàn)更加快速高效的手機(jī)密碼管理,同時(shí)還能實(shí)現(xiàn)對(duì)人力資源和管理資源的有效節(jié)約,該手機(jī)密碼管理在經(jīng)濟(jì)上完全可行。
3.1.3操作可行性
現(xiàn)在隨著科技的飛速發(fā)展,計(jì)算機(jī)早已經(jīng)進(jìn)入了人們的日常生活中,人們的工作環(huán)境也不像以前有那么多的要求,需要員工一定要到公司辦公,有的工作在家也可以完成。這使得人們的工作效益有了很大的提高。操作的多樣性也變高了。因此,管理的計(jì)算機(jī)化,智能化是社會(huì)發(fā)展而帶來的必然趨勢(shì),各種智能的軟件層出不窮,不同的軟件能完成用戶不同的需求,這不僅提高了工作效率還能完成一些用戶特定的一些需求。本系統(tǒng)不僅界面簡(jiǎn)潔明了還采用可視化界面,用戶只要用鼠標(biāo)和鍵盤就可以完成對(duì)相關(guān)信息的修改,刪除,添加等操作。因?yàn)檫@個(gè)系統(tǒng)的操作十分簡(jiǎn)單,方便上手,對(duì)于第一次使用系統(tǒng)的人,只需要很少的時(shí)間就可以上手操作。由此可見,本系統(tǒng)在操作上是可行的。
2.3 系統(tǒng)性能分析
(1)系統(tǒng)響應(yīng)效率:頁面響應(yīng)時(shí)問應(yīng)該在3秒以內(nèi),最長(zhǎng)不能超過4秒,并支持至少10000人同時(shí)在線所有系統(tǒng)。
(2)界面簡(jiǎn)潔清晰:系統(tǒng)界面要求簡(jiǎn)單明了,容易操作,符合用戶操作習(xí)慣。
(3)儲(chǔ)存性高:因?yàn)槭謾C(jī)密碼管理app站中有很多的信息需要存儲(chǔ),因此對(duì)于系統(tǒng)的存儲(chǔ)量有很大的要求,需要有一個(gè)強(qiáng)大的數(shù)據(jù)庫的支持才能確保所有的信息都能安全穩(wěn)定的進(jìn)行存儲(chǔ)。
(4)易學(xué)性:該系統(tǒng)在操作上必須簡(jiǎn)單好上手,沒有很多復(fù)雜的操作,只需要簡(jiǎn)單的進(jìn)行學(xué)習(xí)就能操作該系統(tǒng)。
(5)穩(wěn)定性需求:開發(fā)的手機(jī)密碼管理app站要求運(yùn)行穩(wěn)定,運(yùn)行過程中無界面不清楚、字體模糊等現(xiàn)象。
3.2 app性能需求分析
對(duì)網(wǎng)站性能進(jìn)行分析,可對(duì)系統(tǒng)反應(yīng)度、界面簡(jiǎn)潔清晰度、儲(chǔ)存能性、易學(xué)性和穩(wěn)定性進(jìn)行分析;
系統(tǒng)反應(yīng)度:同時(shí)上萬人在線時(shí)反應(yīng)時(shí)間應(yīng)該在兩三秒以內(nèi),。
界面簡(jiǎn)潔清晰:系統(tǒng)界面要求簡(jiǎn)單明了,操作簡(jiǎn)單,用戶操作容易上手。
儲(chǔ)存性能高:手機(jī)密碼管理中需要存儲(chǔ)的信息有很多,所以對(duì)系統(tǒng)的存儲(chǔ)量要求很高,因此數(shù)據(jù)庫就應(yīng)該很強(qiáng)大,才能保證信息能安全穩(wěn)定的進(jìn)行存儲(chǔ);
易學(xué)性:該系統(tǒng)在操作上必須簡(jiǎn)單好上手,沒有很多復(fù)雜的操作,只需要簡(jiǎn)單的進(jìn)行學(xué)習(xí)就能操作該系統(tǒng)。
穩(wěn)定性:要求手機(jī)密碼管理運(yùn)行要穩(wěn)定,界面清楚、字體清晰等。
3.3 app設(shè)計(jì)規(guī)則與運(yùn)行環(huán)境
軟件系統(tǒng)的優(yōu)劣很大程度上是由系統(tǒng)設(shè)計(jì)的完善與否決定的。世間萬物都必須遵循生老病死的法則,這是大自然的規(guī)則不能違反,軟件設(shè)計(jì)也一樣需要遵循系統(tǒng)設(shè)計(jì)規(guī)則。因此,在設(shè)計(jì)過程中必須遵循系統(tǒng)設(shè)計(jì)規(guī)則。
規(guī)則如下:
簡(jiǎn)單性:為了擴(kuò)大系統(tǒng)使用者的受眾面,系統(tǒng)設(shè)計(jì)應(yīng)該本著操作越簡(jiǎn)單約好的原則,這樣不僅能提高系統(tǒng)的使用率更能夠擴(kuò)大系統(tǒng)使用面。。
針對(duì)性:一個(gè)系統(tǒng)針對(duì)性越強(qiáng),所能提供的功能必然越完善,用戶體驗(yàn)肯定更好,所以應(yīng)該明確指定系統(tǒng)針對(duì)性。
實(shí)用性:實(shí)用永遠(yuǎn)是檢驗(yàn)一個(gè)系統(tǒng)是否成功的唯一標(biāo)準(zhǔn),使用的語言再高端,使用的結(jié)構(gòu)再新穎但不能滿足管理員和用戶的要求那就是失敗。
運(yùn)行環(huán)境:
本系統(tǒng)是利用B/S結(jié)構(gòu)來開發(fā)的,數(shù)據(jù)庫在服務(wù)器上進(jìn)行部署 Mysql即可,其他包括My Eclipse等常規(guī)開發(fā)程序。
3.4 app功能分析
考慮到實(shí)際生活中在手機(jī)密碼管理方面的需要以及對(duì)該系統(tǒng)認(rèn)真的分析,將app權(quán)限按管理員和用戶這兩類涉及用戶劃分。
(a) 管理員;管理員使用本系統(tǒng)涉到的功能主要有所有記錄、回收站、文件夾等功能。管理員用例圖如圖3-1所示。
圖3-1 管理員用例圖
3.5 app流程的分析
由于不同的系統(tǒng)實(shí)際使用用戶角色的不同,他們的業(yè)務(wù)分析也會(huì)變得有所不一樣,為了論述方便接下來都將以用戶功能權(quán)限下的系統(tǒng)業(yè)務(wù)流程來分析,如下圖所展示:
3.5.1 用戶管理的流程
圖3-3 用戶管理流程
3.5.2 個(gè)人中心管理流程
圖3-4 個(gè)人中心管理流程
3.5.3 登錄流程
圖3-4 登錄流程
4系統(tǒng)設(shè)計(jì)
4.1 軟件功能模塊設(shè)計(jì)
App整體功能如下圖所示:
圖 4-1 整體功能模塊圖
4.1.1 系統(tǒng)架構(gòu)
系統(tǒng)架構(gòu)圖如圖3.2所示。
圖3.2 系統(tǒng)架構(gòu)圖
系統(tǒng)架構(gòu)選用Spring3.0架構(gòu)。作為在Java領(lǐng)域最為成功的開源軟件之一,Spring在Java EE 開發(fā)中使用者眾多。Spring抽象了我們?cè)谀壳霸S多應(yīng)用開發(fā)中所遇到的最共性的問題,同時(shí)作為一個(gè)輕量級(jí)的應(yīng)用開發(fā)框架,Spring和傳統(tǒng)的J2EE開發(fā)相比,有其自身特有的特點(diǎn)。Spring通過這些自身特有的特點(diǎn)充分體現(xiàn)了它的設(shè)計(jì)理念:在Java EE的應(yīng)用開發(fā)中,支持POJO(JavaBean)的開發(fā)方式,使應(yīng)用能夠面向接口開發(fā),充分支持OO(面向?qū)ο螅┑脑O(shè)計(jì)方法。在IOC容器和AOP面向切面編程的核心模塊的支持下,使得程序員能夠高度簡(jiǎn)化了Java EE的開發(fā)過程。為應(yīng)用開發(fā)提供了極其豐富的系統(tǒng)組件,通過這些組件,為企業(yè)應(yīng)用服務(wù)的實(shí)現(xiàn)提供驅(qū)動(dòng)支持。
4.2 數(shù)據(jù)庫設(shè)計(jì)
4.3.1數(shù)據(jù)庫設(shè)計(jì)概述
數(shù)據(jù)庫的設(shè)計(jì)在這一套開發(fā)系統(tǒng)中扮演者非常重要的角色,完善的數(shù)據(jù)庫建立可以讓其更快的完成項(xiàng)目。整個(gè)數(shù)據(jù)庫的創(chuàng)建是庫存管理系統(tǒng)開發(fā)和創(chuàng)立的核心技術(shù),概括的說,就是根據(jù)用戶的需求創(chuàng)立起滿足用戶的需要的數(shù)據(jù)庫。數(shù)據(jù)庫的整體設(shè)計(jì)是在軟件開發(fā)是其最主要的問題。
再考慮到數(shù)據(jù)庫設(shè)計(jì)的時(shí)候,我們首先應(yīng)該想到把這個(gè)系統(tǒng)的數(shù)據(jù)設(shè)計(jì)和處理設(shè)計(jì)密切結(jié)合起來,從而使得把整個(gè)庫存信息管理系統(tǒng)相結(jié)合起來。
4.3.1概念設(shè)計(jì)
一個(gè)完整的數(shù)據(jù)分析過程與這個(gè)數(shù)據(jù)庫的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)有十分密切的聯(lián)系,我們需要一系列操作來完成對(duì)應(yīng)用數(shù)據(jù)庫所使用的信息進(jìn)行確認(rèn)、編纂、組織、挑選。我們可以采用特定的方法來獲取有關(guān)用戶的所有的有效信息,從而使這些有用信息可以直接成為數(shù)據(jù)庫的重要數(shù)據(jù)。
概念模型是對(duì)現(xiàn)實(shí)中的問題出現(xiàn)的事物的進(jìn)行描述,ER圖是由實(shí)體及其關(guān)系構(gòu)成的圖,通過E-R圖可以清楚地描述系統(tǒng)涉及到的實(shí)體之間的相互關(guān)系。
4.2.2 物理模型設(shè)計(jì)
根據(jù)上訴的邏輯模型設(shè)計(jì),下面給出物理模型的設(shè)計(jì),如下表:
config
表注釋: 配置文件
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
name varchar(100) 否 配置參數(shù)名稱
value varchar(100) 是 NULL 配置參數(shù)值
news
表注釋: 美容產(chǎn)品
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
title varchar(200) 否 產(chǎn)品名稱
introduction longtext 是 NULL 簡(jiǎn)介
picture varchar(200) 否 圖片
content longtext 否 內(nèi)容
tijianbaogao
表注釋: 項(xiàng)目預(yù)約
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
baogaobianhao varchar(200) 是 NULL 報(bào)告編號(hào)
xiangmubianhao varchar(200) 是 NULL 項(xiàng)目編號(hào)
yiyuanmingcheng varchar(200) 是 NULL 醫(yī)院名稱
xiangmumingcheng varchar(200) 是 NULL 項(xiàng)目名稱
xiangmufenlei varchar(200) 是 NULL 項(xiàng)目分類
xiangmufengmian varchar(200) 是 NULL 項(xiàng)目封面
yishengzhanghao varchar(200) 是 NULL 醫(yī)生賬號(hào)
yishengxingming varchar(200) 是 NULL 醫(yī)生姓名
baogaoshijian date 是 NULL 報(bào)告時(shí)間
yonghuzhanghao varchar(200) 是 NULL 用戶賬號(hào)
yonghuxingming varchar(200) 是 NULL 用戶姓名
baogaojieguo longtext 是 NULL 報(bào)告結(jié)果
yishengjianyi longtext 是 NULL 醫(yī)生建議
userid bigint(20) 是 NULL 用戶id
tijianxiangmu
表注釋: 在線預(yù)約
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
xiangmubianhao varchar(200) 是 NULL 項(xiàng)目編號(hào)
yiyuanmingcheng varchar(200) 是 NULL 醫(yī)院名稱
xiangmumingcheng varchar(200) 是 NULL 項(xiàng)目名稱
xiangmufenlei varchar(200) 是 NULL 項(xiàng)目分類
xiangmufengmian varchar(200) 是 NULL 項(xiàng)目封面
xiangmujiage float 是 NULL 項(xiàng)目?jī)r(jià)格
fabushijian date 是 NULL 發(fā)布時(shí)間
xiangmuxiangqing longtext 是 NULL 項(xiàng)目詳情
yishengzhanghao varchar(200) 是 NULL 醫(yī)生賬號(hào)
yishengxingming varchar(200) 是 NULL 醫(yī)生姓名
tijianyuyue
表注釋: 體檢預(yù)約
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
yuyuebianhao varchar(200) 是 NULL 預(yù)約編號(hào)
xiangmubianhao varchar(200) 是 NULL 項(xiàng)目編號(hào)
yiyuanmingcheng varchar(200) 是 NULL 醫(yī)院名稱
xiangmumingcheng varchar(200) 是 NULL 項(xiàng)目名稱
xiangmufenlei varchar(200) 是 NULL 項(xiàng)目分類
xiangmufengmian varchar(200) 是 NULL 項(xiàng)目封面
xiangmujiage float 是 NULL 項(xiàng)目?jī)r(jià)格
yishengzhanghao varchar(200) 是 NULL 醫(yī)生賬號(hào)
yishengxingming varchar(200) 是 NULL 醫(yī)生姓名
yuyueshijian date 是 NULL 預(yù)約時(shí)間
yonghuzhanghao varchar(200) 是 NULL 用戶賬號(hào)
yonghuxingming varchar(200) 是 NULL 用戶姓名
beizhu longtext 是 NULL 備注
sfsh varchar(200) 是 否 是否審核
shhf longtext 是 NULL 審核回復(fù)
ispay varchar(200) 是 未支付 是否支付
userid bigint(20) 是 NULL 用戶id
token
表注釋: token表
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
userid bigint(20) 否 用戶id
username varchar(100) 否 用戶名
tablename varchar(100) 是 NULL 表名
role varchar(100) 是 NULL 角色
token varchar(200) 否 密碼
addtime timestamp 否 CURRENT_TIMESTAMP 新增時(shí)間
expiratedtime timestamp 否 CURRENT_TIMESTAMP 過期時(shí)間
users
表注釋: 用戶表
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
username varchar(100) 否 用戶名
password varchar(100) 否 密碼
role varchar(100) 是 管理員 角色
addtime timestamp 否 CURRENT_TIMESTAMP 新增時(shí)間
xiangmufenlei
表注釋: 項(xiàng)目分類
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
xiangmufenlei varchar(200) 是 NULL 項(xiàng)目分類
yisheng
表注釋: 醫(yī)生
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
yishengzhanghao varchar(200) 否 醫(yī)生賬號(hào)
mima varchar(200) 否 密碼
yishengxingming varchar(200) 否 醫(yī)生姓名
xingbie varchar(200) 是 NULL 性別
zhicheng varchar(200) 是 NULL 職稱
lianxidianhua varchar(200) 是 NULL 聯(lián)系電話
touxiang varchar(200) 是 NULL 頭像
yiyuanxinxi
表注釋: 美容視頻
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
yiyuanmingcheng varchar(200) 是 NULL 醫(yī)院名稱
yiyuantupian varchar(200) 是 NULL 醫(yī)院圖片
yiyuandizhi varchar(200) 是 NULL 醫(yī)院地址
fuzeren varchar(200) 是 NULL 負(fù)責(zé)人
lianxidianhua varchar(200) 是 NULL 聯(lián)系電話
yingyeshijian varchar(200) 是 NULL 營(yíng)業(yè)時(shí)間
yiyuandengji varchar(200) 是 NULL 醫(yī)院等級(jí)
yiyuanjieshao longtext 是 NULL 醫(yī)院介紹
yonghu
表注釋: 用戶
字段 類型 空 默認(rèn) 注釋
id (主鍵) bigint(20) 否 主鍵
addtime timestamp 否 CURRENT_TIMESTAMP 創(chuàng)建時(shí)間
yonghuzhanghao varchar(200) 否 用戶賬號(hào)
mima varchar(200) 否 密碼
yonghuxingming varchar(200) 否 用戶姓名
xingbie varchar(200) 是 NULL 性別
lianxifangshi varchar(200) 是 NULL 聯(lián)系方式
touxiang varchar(200) 是 NULL 頭像
5系統(tǒng)詳細(xì)設(shè)計(jì)
(一)基本任務(wù)
系統(tǒng)實(shí)現(xiàn)階段的根本目標(biāo)在這個(gè)階段的設(shè)計(jì)工作中精確地描述出目標(biāo)系統(tǒng),從而在編碼階段可以直接根據(jù)這個(gè)描述翻譯成用程序語言編寫的系統(tǒng)。
系統(tǒng)實(shí)現(xiàn)的基本任務(wù)有以下幾個(gè):
(1) 為每個(gè)模塊進(jìn)行詳細(xì)的算法設(shè)計(jì)。用某種圖形、表格、語言等工具將每個(gè)模塊處理過程的詳細(xì)算法描述出來。
(2) 為模塊內(nèi)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì)。對(duì)于需求分析、概要設(shè)計(jì)確定的概念性的數(shù)據(jù)類型進(jìn)行確切的定義。
(3) 對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行物理設(shè)計(jì),即確定數(shù)據(jù)庫的物理結(jié)構(gòu)。
(4) 其他設(shè)計(jì):根據(jù)軟件系統(tǒng)的類型,可能還需要進(jìn)行代碼設(shè)計(jì)、輸入/輸出格式設(shè)計(jì)、人機(jī)對(duì)話設(shè)計(jì)。
(5) 編寫系統(tǒng)實(shí)現(xiàn)說明書。
(6) 評(píng)審。對(duì)處理過程的算法和數(shù)據(jù)庫的物理結(jié)構(gòu)都要評(píng)審。
系統(tǒng)結(jié)構(gòu)可分為src的java源代碼,database文件夾為系統(tǒng)的數(shù)據(jù)庫文件,webroot為系統(tǒng)的界面代碼文件。Src文件夾里面包含control包、dao包、util包,dao包為邏輯層,是系統(tǒng)方法的底層包,包括各種數(shù)據(jù)增刪改查的方法,control包是控制層,用來連接邏輯層和視圖層,在邏輯層調(diào)用邏輯層,完成視圖層需要的功能,視圖層為系統(tǒng)的界面代碼,完成界面的設(shè)計(jì)和數(shù)據(jù)的顯示。
5.1 APP端
用戶登錄,用戶進(jìn)入app,輸入自己的賬號(hào)和密碼,并選擇對(duì)應(yīng)的角色進(jìn)行系統(tǒng)登錄操作,如圖5-1所示。
圖5-1登錄界面圖
用戶登陸系統(tǒng)后,可以對(duì)所有記錄、回收站、文件夾等內(nèi)容進(jìn)行詳細(xì)操作,如圖5-2所示。
圖5-2 app首頁界面圖
5.2管理員功能模塊
管理員登錄,管理員通過輸入用戶名,密碼,在角色中選擇管理員,點(diǎn)擊登錄進(jìn)入系統(tǒng)操作進(jìn)行操作,如圖5-7所示。
圖5-7管理員登錄界面圖
該模塊控制層主要代碼:
/**
* 登錄
*/
@IgnoreAuth
@RequestMapping(value = “/login”)
public R login(String username, String password, String captcha, HttpServletRequest request) {
YonghuEntity user = yonghuService.selectOne(new EntityWrapper().eq(“yonghuming”, username));
if(user==null || !user.getMima().equals(password)) {
return R.error(“賬號(hào)或密碼不正確”);
}
String token = tokenService.generateToken(user.getId(), username,“yonghu”, “用戶” );
return R.ok().put(“token”, token);
}
/**
* 注冊(cè)
*/
@IgnoreAuth
@RequestMapping("/register")
public R register(@RequestBody YonghuEntity yonghu){
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("注冊(cè)用戶已存在");
}
Long uId = new Date().getTime();
yonghu.setId(uId);
yonghuService.insert(yonghu);
return R.ok();
}
/**
* 退出
*/
@RequestMapping("/logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
}
管理員登陸系統(tǒng)后,可以查看所有記錄、回收站、文件夾等功能,還能對(duì)每個(gè)功能逐一進(jìn)行相應(yīng)操作,如圖5-8所示。
圖5-8管理員功能界面圖
該模塊控制層主要代碼:
/**
* 列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper ew = new EntityWrapper();
PageUtils page = configService.queryPage(params);
return R.ok().put(“data”, page);
}
/**
* 列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
PageUtils page = configService.queryPage(params);
return R.ok().put("data", page);
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 根據(jù)name獲取信息
*/
@RequestMapping("/info")
public R infoByName(@RequestParam String name){
ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
return R.ok().put("data", config);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.insert(config);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.updateById(config);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
configService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
}
文件夾,在文件夾頁面可以對(duì)文件夾、名稱、用戶名、密碼、地址等內(nèi)容進(jìn)行修改和刪除操作,如圖5-9所示。
圖5-9文件夾界面圖
該模塊控制層主要代碼:
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,YonghuEntity yonghu,
HttpServletRequest request){
EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,YonghuEntity yonghu,
HttpServletRequest request){
EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
PageUtils page = yonghuService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, yonghu), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( YonghuEntity yonghu){
EntityWrapper<YonghuEntity> ew = new EntityWrapper<YonghuEntity>();
ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu"));
return R.ok().put("data", yonghuService.selectListView(ew));
}
/**
* 查詢
*/
@RequestMapping("/query")
public R query(YonghuEntity yonghu){
EntityWrapper< YonghuEntity> ew = new EntityWrapper< YonghuEntity>();
ew.allEq(MPUtil.allEQMapPre( yonghu, "yonghu"));
YonghuView yonghuView = yonghuService.selectView(ew);
return R.ok("查詢用戶成功").put("data", yonghuView);
}
/**
* 后端詳情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
YonghuEntity yonghu = yonghuService.selectById(id);
return R.ok().put("data", yonghu);
}
/**
* 前端詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
YonghuEntity yonghu = yonghuService.selectById(id);
return R.ok().put("data", yonghu);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("用戶已存在");
}
yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
yonghu.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(yonghu);
YonghuEntity user = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("yonghuming", yonghu.getYonghuming()));
if(user!=null) {
return R.error("用戶已存在");
}
yonghu.setId(new Date().getTime());
yonghuService.insert(yonghu);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request){
//ValidatorUtils.validateEntity(yonghu);
yonghuService.updateById(yonghu);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
yonghuService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
該模塊控制層主要代碼:
/**
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,ForumEntity forum,
HttpServletRequest request){
if(!request.getSession().getAttribute(“role”).toString().equals(“管理員”)) {
forum.setUserid((Long)request.getSession().getAttribute(“userId”));
}
EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();
PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ForumEntity forum,
HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理員")) {
forum.setUserid((Long)request.getSession().getAttribute("userId"));
}
EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();
PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@IgnoreAuth
@RequestMapping("/flist")
public R flist(@RequestParam Map<String, Object> params,ForumEntity forum, HttpServletRequest request){
EntityWrapper<ForumEntity> ew = new EntityWrapper<ForumEntity>();
PageUtils page = forumService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, forum), params), params));
return R.ok().put("data", page);
}
/**
* 查詢
*/
@RequestMapping("/query")
public R query(ForumEntity forum){
EntityWrapper< ForumEntity> ew = new EntityWrapper< ForumEntity>();
ew.allEq(MPUtil.allEQMapPre( forum, "forum"));
ForumView forumView = forumService.selectView(ew);
return R.ok("查詢手機(jī)密碼管理表成功").put("data", forumView);
}
/**
* 后端詳情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ForumEntity forum = forumService.selectById(id);
return R.ok().put("data", forum);
}
/**
* 前端詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ForumEntity forum = forumService.selectById(id);
return R.ok().put("data", forum);
}
/**
* 手機(jī)密碼管理詳情
*/
@IgnoreAuth
@RequestMapping("/list/{id}")
public R list(@PathVariable("id") String id){
ForumEntity forum = forumService.selectById(id);
getChilds(forum);
return R.ok().put("data", forum);
}
private ForumEntity getChilds(ForumEntity forum) {
List<ForumEntity> childs = new ArrayList<ForumEntity>();
childs = forumService.selectList(new EntityWrapper<ForumEntity>().eq("parentid", forum.getId()));
if(childs == null || childs.size()==0) {
return null;
}
forum.setChilds(childs);
for(ForumEntity forumEntity : childs) {
getChilds(forumEntity);
}
return forum;
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ForumEntity forum, HttpServletRequest request){
forum.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(forum);
forum.setUserid((Long)request.getSession().getAttribute("userId"));
forumService.insert(forum);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ForumEntity forum, HttpServletRequest request){
forum.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(forum);
forum.setUserid((Long)request.getSession().getAttribute("userId"));
forumService.insert(forum);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ForumEntity forum, HttpServletRequest request){
//ValidatorUtils.validateEntity(forum);
forumService.updateById(forum);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
forumService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
該模塊控制層主要代碼:
/**
* 后端列表
*/
@RequestMapping(“/page”)
public R page(@RequestParam Map<String, Object> params,MessagesEntity messages,
HttpServletRequest request){
if(!request.getSession().getAttribute(“role”).toString().equals(“管理員”)) {
messages.setUserid((Long)request.getSession().getAttribute(“userId”));
}
EntityWrapper<MessagesEntity> ew = new EntityWrapper<MessagesEntity>();
PageUtils page = messagesService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, messages), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,MessagesEntity messages,
HttpServletRequest request){
EntityWrapper<MessagesEntity> ew = new EntityWrapper<MessagesEntity>();
PageUtils page = messagesService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, messages), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( MessagesEntity messages){
EntityWrapper<MessagesEntity> ew = new EntityWrapper<MessagesEntity>();
ew.allEq(MPUtil.allEQMapPre( messages, "messages"));
return R.ok().put("data", messagesService.selectListView(ew));
}
/**
* 查詢
*/
@RequestMapping("/query")
public R query(MessagesEntity messages){
EntityWrapper< MessagesEntity> ew = new EntityWrapper< MessagesEntity>();
ew.allEq(MPUtil.allEQMapPre( messages, "messages"));
MessagesView messagesView = messagesService.selectView(ew);
return R.ok("查詢項(xiàng)目預(yù)約成功").put("data", messagesView);
}
/**
* 后端詳情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
MessagesEntity messages = messagesService.selectById(id);
return R.ok().put("data", messages);
}
/**
* 前端詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
MessagesEntity messages = messagesService.selectById(id);
return R.ok().put("data", messages);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody MessagesEntity messages, HttpServletRequest request){
messages.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(messages);
messagesService.insert(messages);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody MessagesEntity messages, HttpServletRequest request){
messages.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(messages);
messagesService.insert(messages);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody MessagesEntity messages, HttpServletRequest request){
//ValidatorUtils.validateEntity(messages);
messagesService.updateById(messages);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
messagesService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
該模塊控制層主要代碼:
/**
* 列表
*/
@IgnoreAuth
@RequestMapping(“/list”)
public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
EntityWrapper ew = new EntityWrapper();
PageUtils page = configService.queryPage(params);
return R.ok().put(“data”, page);
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 詳情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") String id){
ConfigEntity config = configService.selectById(id);
return R.ok().put("data", config);
}
/**
* 根據(jù)name獲取信息
*/
@RequestMapping("/info")
public R infoByName(@RequestParam String name){
ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
return R.ok().put("data", config);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.insert(config);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody ConfigEntity config){
// ValidatorUtils.validateEntity(config);
configService.updateById(config);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
configService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
} }
6系統(tǒng)測(cè)試
系統(tǒng)測(cè)試不僅僅是發(fā)現(xiàn)系統(tǒng)潛在的BUG或錯(cuò)誤,而更為重要的是為用戶提供一個(gè)良好的體驗(yàn)和安全可使用的產(chǎn)品服務(wù)。而通過發(fā)現(xiàn)錯(cuò)誤或潛在的問題,將有助于提升產(chǎn)品的競(jìng)爭(zhēng)力,這也是軟件測(cè)試的其中的重要目的之一。
軟件測(cè)試的方法有好幾種,但目前主要采用的是包括以功能為主要測(cè)試方向的黑盒測(cè)試以及以邏輯為主要測(cè)試方向的白盒測(cè)試,這是兩種不同的測(cè)試方法,針對(duì)的測(cè)試側(cè)重點(diǎn)不同,本課題根據(jù)實(shí)際需求情況,選擇以功能為主要的黑盒測(cè)試方法,同時(shí)測(cè)試是要遵循一定的規(guī)則來執(zhí)行的,一個(gè)測(cè)試要執(zhí)行其執(zhí)行的依據(jù)一般是由測(cè)試用例來規(guī)定的,而測(cè)試用例一般是依據(jù)需求或說明書來綜合制定的,測(cè)試在硬件出廠前是十分重要的一個(gè)過程,本課題由于時(shí)間和精力的關(guān)系,選擇以實(shí)現(xiàn)的功能作為測(cè)試要點(diǎn)來進(jìn)行測(cè)試。具體測(cè)試過程如下:
測(cè)試用例1及測(cè)試過程:
登錄:錄入登錄信息,賬號(hào),密碼和選擇權(quán)限,點(diǎn)擊登錄按鈕,會(huì)出現(xiàn)兩種情況:登錄成功進(jìn)入用戶具有權(quán)限的功能界面和提示登錄失敗。
測(cè)試用例2及測(cè)試過程:
管理員登錄:錄入登錄信息,管理員賬號(hào),密碼和選擇權(quán)限,點(diǎn)擊登錄按鈕,會(huì)出現(xiàn)兩種情況:登錄成功進(jìn)入管理員具有權(quán)限的功能界面和提示登錄失敗。
(一)測(cè)試目的
軟件測(cè)試的目的主要是發(fā)現(xiàn)軟件缺陷和漏洞,其次,軟件測(cè)試能夠識(shí)別項(xiàng)目風(fēng)險(xiǎn)。為開發(fā)人員和程序經(jīng)理提供軟件測(cè)試的反饋結(jié)果,為風(fēng)險(xiǎn)評(píng)估提供必要的信息。再者,軟件測(cè)試確保在上線日前達(dá)到上線標(biāo)準(zhǔn)。包括持續(xù)追蹤項(xiàng)目進(jìn)度和嚴(yán)格把控各個(gè)開發(fā)階段的產(chǎn)品質(zhì)量。
基于ssm的手機(jī)密碼管理app,主要測(cè)試客戶端的使用和后臺(tái)服務(wù)器的使用??蛻舳酥饕菧y(cè)試用戶注冊(cè)、用戶登錄、用戶完善信息、頁面是否進(jìn)行跳轉(zhuǎn)等功能是否實(shí)現(xiàn)。管理員的使用主要是測(cè)試所有記錄、回收站、文件夾功能是否實(shí)現(xiàn)。
(二)測(cè)試概述
1.測(cè)試的原則
(1)系統(tǒng)測(cè)試應(yīng)該避免測(cè)試自己的程序,以免發(fā)現(xiàn)不了細(xì)小的問題。
(2)系統(tǒng)測(cè)試用例應(yīng)有兩部分組成,分別為輸入測(cè)試和輸出測(cè)試。
(3)系統(tǒng)測(cè)試數(shù)據(jù)應(yīng)當(dāng)引用不合理的數(shù)據(jù)進(jìn)行測(cè)試,選取不同情況的進(jìn)行逐一測(cè)試。
(4)不僅要檢查程序是否達(dá)到預(yù)期的效果,還要檢查程序是否執(zhí)行了規(guī)定以外的操作。
(5)對(duì)出現(xiàn)錯(cuò)誤多的模塊進(jìn)行集中測(cè)試。
(6)已發(fā)現(xiàn)錯(cuò)誤的模塊修改后,應(yīng)及時(shí)進(jìn)行重新測(cè)試。
2.測(cè)試的方法
測(cè)試方法主要有人工測(cè)試和機(jī)器測(cè)試。
(1)人工測(cè)試
人工測(cè)試又稱代碼復(fù)審,包括個(gè)人復(fù)查、走查、會(huì)審三種方法[7]。
(2)機(jī)器測(cè)試
機(jī)器測(cè)試主要是由黑盒測(cè)試和白盒測(cè)試兩種方法。
在最后的測(cè)試階段,系統(tǒng)采用后黑盒測(cè)試和白盒測(cè)試想結(jié)合的方法。黑盒測(cè)試主要用于對(duì)系統(tǒng)的輸入和輸出特性進(jìn)行測(cè)試,檢測(cè)功能方面存在的錯(cuò)誤與可能存在的缺陷。白盒測(cè)試主要用于對(duì)軟件的過程及邏輯路徑進(jìn)行測(cè)試,發(fā)現(xiàn)性能方面的錯(cuò)誤。具體采用的測(cè)試方法為系統(tǒng)測(cè)試和單元測(cè)試。
(三)單元測(cè)試
(1)注冊(cè)測(cè)試
用戶得先注冊(cè)賬號(hào)才能登錄系統(tǒng),用戶輸入符合規(guī)則的用戶名后,填寫2次一樣的密碼,點(diǎn)擊注冊(cè)按鈕,系統(tǒng)提示“注冊(cè)成功“。當(dāng)用戶2次密碼不一致時(shí),系統(tǒng)提示兩次密碼不一致。
注冊(cè)測(cè)試用例如下表所示。
表6-1注冊(cè)測(cè)試用例
測(cè)試模塊 用戶注冊(cè)模塊測(cè)試
測(cè)試目的 測(cè)試當(dāng)注冊(cè)信息輸入不符合要求時(shí),系統(tǒng)是否能進(jìn)行相應(yīng)處理并給出提示。
測(cè)試方法 黑盒測(cè)試
測(cè)試數(shù)據(jù) 1不輸入用戶名和密碼,直接點(diǎn)擊注冊(cè)。
2輸入未注冊(cè)過的用戶名。例如:abcd
3輸入正確用戶名,兩次密碼不一樣。例如:用戶名abcdefg、密碼 000,確認(rèn)密碼111
預(yù)期結(jié)果 1 界面不跳轉(zhuǎn),彈出對(duì)話框,提示用戶輸入必填項(xiàng)。
2界面跳轉(zhuǎn),彈出對(duì)話框,提示用戶注冊(cè)成功。
3界面不跳轉(zhuǎn),彈出對(duì)話框,提示兩次密碼不一致。
實(shí)際結(jié)果 與預(yù)想一致。
結(jié)論 注冊(cè)模塊實(shí)現(xiàn)了基本的異常輸入應(yīng)對(duì)。
(2)登錄測(cè)試
登錄模塊需要測(cè)試的功能有:輸入登錄名和密碼,點(diǎn)擊“登錄”按鈕是否正常進(jìn)入系統(tǒng)首頁。
登錄測(cè)試用例如下表所示。
表6-2登錄測(cè)試用例
測(cè)試模塊 用戶登錄模塊測(cè)試
測(cè)試目的 測(cè)試當(dāng)?shù)顷懶畔⑤斎氩环弦髸r(shí),系統(tǒng)是否能進(jìn)行相應(yīng)處理并給出提示。
測(cè)試方法 黑盒測(cè)試
測(cè)試數(shù)據(jù) 1不輸入用戶名和密碼,直接點(diǎn)擊登陸。
2輸入未注冊(cè)過的用戶名。例如:abcdefg
3輸入正確用戶名,錯(cuò)誤密碼。例如:用戶名abcdefg、密碼 000
4輸入正確用戶名,正確匹配密碼。例如:用戶名abcdefg、密碼 111
預(yù)期結(jié)果 1 界面不跳轉(zhuǎn),彈出對(duì)話框,提示用戶輸入必填項(xiàng)。
2界面不跳轉(zhuǎn),彈出對(duì)話框,提示用戶當(dāng)前用戶名尚未注冊(cè)。
3界面不跳轉(zhuǎn),彈出對(duì)話框,提示用戶密碼錯(cuò)誤。
4界面實(shí)現(xiàn)跳轉(zhuǎn),登陸功能正常進(jìn)行。
實(shí)際結(jié)果 與預(yù)想一致。
結(jié)論 登陸模塊實(shí)現(xiàn)了基本的異常輸入應(yīng)對(duì)。
(3)集成測(cè)試
集成測(cè)試的方案主要如下所述:
1.將系統(tǒng)移植到另一臺(tái)計(jì)算機(jī)上,運(yùn)行出錯(cuò)。修改配置信息后運(yùn)行成功。
2.用戶信息管理模塊綜合測(cè)試,添加新用戶roess,為其分配一般管理員角色,查看一般管理員角色權(quán)限,保存設(shè)置,以roess身份登錄,查看所擁有權(quán)限。
3.最后按照手機(jī)密碼管理app的設(shè)計(jì)與實(shí)現(xiàn),以不同角色的身份進(jìn)入系統(tǒng),對(duì)系統(tǒng)各模塊功能進(jìn)行測(cè)試,測(cè)試模塊間邏輯功是否有誤。
經(jīng)過測(cè)試,發(fā)現(xiàn)此開發(fā)系統(tǒng)可以滿足手機(jī)密碼管理app流程的基本工作流程和基本要求。
7總結(jié)與心得體會(huì)
7.1 總結(jié)
通過完成該手機(jī)密碼管理app和本論文的撰寫讓我更加明白了軟件開發(fā)過程中軟件工程思想的重要性。在項(xiàng)目的前期由于對(duì)需求分析做的不夠謹(jǐn)慎和明確,導(dǎo)致了后面在設(shè)計(jì)甚至編碼時(shí)候造成了許多不必要的麻煩。由此在今后的學(xué)習(xí)和工作開發(fā)之中必須要牢牢把握住軟件工程的設(shè)計(jì)思想和方法,這樣可以進(jìn)一步保證項(xiàng)目開發(fā)的健壯性和準(zhǔn)確性。
本app所實(shí)現(xiàn)的是一個(gè)手機(jī)密碼管理,該系統(tǒng)嚴(yán)格按照需求分析制作相關(guān)模塊,并利用所學(xué)知識(shí)盡力完成,但是本人由于學(xué)識(shí)淺薄,無法真正做到讓該程序可以投入市場(chǎng)使用,僅僅簡(jiǎn)單實(shí)現(xiàn)部分功能,希望日后還能改善。
本app具有以下優(yōu)點(diǎn):
該app具有較高的適用性,選用B/S結(jié)構(gòu),可以在絕大部分個(gè)人平臺(tái)上使用該系統(tǒng)。
系統(tǒng)將用戶權(quán)限進(jìn)行劃分,管理員和用戶能看到及操作的信息不一樣,兩者具備不同的操作權(quán)限。
該app操作界面簡(jiǎn)單明了,大部分人都可以正常使用。
但也存在以下問題需要改進(jìn):
運(yùn)行時(shí)窗口不能被刷新,可以改進(jìn)。
系統(tǒng)過于簡(jiǎn)單,顯示的信息有限。
不能添加多個(gè)管理員賬號(hào),如果可以則將利于發(fā)展手機(jī)密碼管理規(guī)模,便于在手機(jī)密碼管理信息集中管理。
不能實(shí)時(shí)預(yù)約接待消息和手機(jī)密碼管理反饋建議,容易被忽視,不利于管理員服務(wù)客戶。
在畢業(yè)設(shè)計(jì)開發(fā)的這些時(shí)間中,付出努力和心血,終于將手機(jī)密碼管理app完美的完成。這套系統(tǒng)具有很多優(yōu)點(diǎn),不僅能完成日常用戶的管理,還可以對(duì)用戶進(jìn)行記事本業(yè)務(wù)進(jìn)行擴(kuò)展。不過在本項(xiàng)目完成的同時(shí),由于時(shí)間短,項(xiàng)目緊促,造成了該系統(tǒng)也有很多不足的地方。整個(gè)項(xiàng)目仍有改進(jìn)的空間。具體的改進(jìn)如下:
優(yōu)點(diǎn)
本項(xiàng)目的優(yōu)點(diǎn)在于項(xiàng)目前后臺(tái)分離,各自負(fù)責(zé)不同的部分。同時(shí)還應(yīng)用了較為新穎的技術(shù)。項(xiàng)目運(yùn)用了JQuery,使項(xiàng)目能有較高的易用性,其強(qiáng)大的UI庫保證了界面的美觀程度。
缺點(diǎn)
本項(xiàng)目的缺點(diǎn)在于由于只有一個(gè)人完成整個(gè)項(xiàng)目,以此來計(jì)算的情況下完成整套系統(tǒng)的時(shí)間顯得非常倉(cāng)促。在需求調(diào)研階段就調(diào)研結(jié)果而言并不能高度滿足于現(xiàn)有系統(tǒng)真正所需要的要求。另外在項(xiàng)目中,并沒能很好的完全分離前后臺(tái),這一點(diǎn)還有待加強(qiáng)學(xué)習(xí)。
對(duì)于手機(jī)密碼管理app系統(tǒng)的缺點(diǎn)的相對(duì)應(yīng)改善計(jì)劃是,理清前后臺(tái)的業(yè)務(wù)邏輯,使之能夠做到前后臺(tái)分離。而JQuery中我們可以通過加強(qiáng)對(duì)JavaScript的使用對(duì)其進(jìn)行補(bǔ)充。使得項(xiàng)目能夠有更好的易用性。針對(duì)JQuery組件庫過多的問題,可以對(duì)其進(jìn)行庫設(shè)計(jì),從而達(dá)到快速引用的設(shè)計(jì)。
通過這幾個(gè)月的不斷努力和學(xué)習(xí),最終獨(dú)立的完成了整個(gè)項(xiàng)目。對(duì)此有很多的感觸。項(xiàng)目中應(yīng)用到了不少的新技術(shù)。有很多都不在學(xué)校的課堂中學(xué)習(xí)到而是通過不斷的實(shí)踐獲得的。有很多的知識(shí)通過在公司的實(shí)習(xí)和在對(duì)技術(shù)的應(yīng)用中獲得,而這些知識(shí)將全部應(yīng)用在手機(jī)密碼管理app系統(tǒng)這個(gè)項(xiàng)目上來。隨著技術(shù)的進(jìn)步,我們還需要不斷的學(xué)習(xí)與探索,會(huì)有更好的天地等著我們?nèi)?shí)現(xiàn)。
7.2 心得體會(huì)
由于經(jīng)驗(yàn)和能力不足,導(dǎo)致在開發(fā)、設(shè)計(jì)該app的時(shí)候,出現(xiàn)了比較多的問題,例如需要用到的技術(shù)不熟悉、程序報(bào)錯(cuò)等,后來我積極地向同學(xué)詢問自己出現(xiàn)的問題同時(shí)也會(huì)找一些相關(guān)的書進(jìn)行學(xué)習(xí),慢慢的一點(diǎn)點(diǎn)將自己遇到的問題逐漸解決。所以不管以后在任何時(shí)候合作都會(huì)讓自己事半功倍。通過本app的完整的開發(fā),可以遇到自己平時(shí)寫一些簡(jiǎn)單的小程序遇不到的問題,不僅僅局限與技術(shù)與業(yè)務(wù)方面的,同時(shí)也使得自己更加深入的了解軟件過程的開發(fā)設(shè)計(jì)思想,對(duì)于即將踏入社會(huì)工作而言,這些心得都十分重要。在以后的研究生學(xué)習(xí)生涯也必須加深這方面的理解,將最好的開發(fā)技術(shù)和最新的科學(xué)原理運(yùn)用到自己以后的開發(fā)工作和學(xué)習(xí)研究中去。
mc
[1] 李長(zhǎng)江,安筱鵬.開放手機(jī)聯(lián)盟:重塑移動(dòng)互聯(lián)網(wǎng)產(chǎn)業(yè)鏈.中國(guó)電子報(bào),2018.
[2] 方銀旺,趙向道,李欣.Symbian操作系統(tǒng)及其應(yīng)用程序開發(fā).計(jì)算機(jī)工程,2013(1):275-277.
[3] 余志龍,陳昱勛,鄭名杰等著.Google Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2016:2.
[4] 馬寧.嵌入式移動(dòng)開發(fā).程序員,2017,(12):14-15.
[5] Chris Haseman.Android Essentials.PEF Electronic Book,2018.
[6] 楊豐盛著.Android應(yīng)用開發(fā)揭秘[M].北京:機(jī)械工業(yè)出版社,2019:96.
[7] W.Frank Ableson (美) Charlie Collins RobiSen(美)著.張波,高朝勤,楊越譯.Google Android揭秘[M].北京:人民郵電出版社,2015:2-7.
[8] 朱桂英.Android開發(fā)應(yīng)用從入門到精通[M].北京:中國(guó)鐵道出版社,2011:21.
[9] 余志龍,陳昱勛,鄭名杰等著.Google Android SDK開發(fā)范例大全[M].北京:人民郵電出版社,2017:2.
[10] 郭宏志著.Android應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2016:96.
[11] 姚旻旻,劉衛(wèi)國(guó)著.計(jì)算機(jī)系統(tǒng)應(yīng)用.計(jì)算機(jī)應(yīng)用,2018:17(11).
[12]BruceEckel著.陳昊鵬等譯.Thinking in Java 3th Edition[M] .機(jī)械工業(yè)出版社,2014:75.
[13] Comp-U-Learn Tech India Ltd(美)著,賈素玲譯.Java編程基礎(chǔ)[M].北京:高等教育出版社,2017:20.
[14] 王水著.軟件工程[M].河南:河南科學(xué)技術(shù)出版社,2018:80.
[15]吳潔明著.軟件工程實(shí)例教程[M].北京:清華大學(xué)出版社,2015:11.
[16] Ed Burnette(美)著.張波等譯.Hello Android[M] .北京:人民郵電出版社,2019:34.
[17] Ron patton(美)著小松.王鈺,曹躍譯.軟件測(cè)試[M].北京:機(jī)械工業(yè)出版社,2016:4.文章來源:http://www.zghlxwxcb.cn/news/detail-790744.html
致謝
在系統(tǒng)全部完成之際,我非常感謝在畢業(yè)設(shè)計(jì)時(shí)給予我?guī)椭娜?。沒有他們的幫助,就沒有我能夠順利的完成畢業(yè)設(shè)計(jì)。
首先,我要感謝我的指導(dǎo)老師,這幾個(gè)月來,老師為我們付出了很多的努力,針對(duì)我們的系統(tǒng)和論文進(jìn)行了非常細(xì)心的指導(dǎo)。根據(jù)畢業(yè)設(shè)計(jì)期間的要求和政策對(duì)我提出了不少的意見和建議。在她的建議下我能夠圓滿完成我的畢業(yè)設(shè)計(jì)任務(wù)。對(duì)此再次表示衷心的感謝。
其次我需要感謝的是我的父母,在整個(gè)畢業(yè)設(shè)計(jì)期間,是我的父母,作為在畢業(yè)設(shè)計(jì)期間最強(qiáng)有力的后盾,我可以全身心的去關(guān)注、去撰寫我的畢業(yè)設(shè)計(jì)論文。在大學(xué)生活中我的每時(shí)每刻都離不開來自于我的父母的全力支持和關(guān)心。
過程永遠(yuǎn)比結(jié)果重要。畢業(yè)設(shè)計(jì)是大學(xué)生活中最為濃墨重彩的一筆,在這個(gè)過程中不僅學(xué)到更為全面的書本和實(shí)踐知識(shí),更讓我感受到了濃濃的同窗之情及師生情。雖然大學(xué)四年間做過不少實(shí)驗(yàn)作業(yè),但是獨(dú)立完成這樣一個(gè)操作系統(tǒng)還是第一次,遇到困難時(shí)理所當(dāng)然,我也有所心理準(zhǔn)備,但是超出自身能力的部分還是需要尋求教師及同學(xué)的幫助。在此,我衷心地感謝我的指導(dǎo)教師,可以說,沒有教師我就不能順利完成這次設(shè)計(jì)。他總是在一籌莫展的時(shí)候?yàn)槲抑敢较?。比如在開題報(bào)告,我的指導(dǎo)教師就細(xì)致地指導(dǎo)我該怎么有邏輯地將自己的想法和做法表達(dá)清楚,在此由衷感謝他。在設(shè)計(jì)的過程中,教師百忙之中也樂于給予我指導(dǎo),不管多晚給教師發(fā)消息,不管是不是上班時(shí)間去教師辦公室尋求幫助,他總能在第一時(shí)間對(duì)我施以援手,由于我在設(shè)計(jì)期間需要離校實(shí)習(xí),不能及時(shí)到教師辦公室檢查設(shè)計(jì)進(jìn)度,當(dāng)時(shí)已經(jīng)是晚上6點(diǎn)多,我匆匆趕到辦公室時(shí),教師依然在伏案辦公,桌上是同學(xué)們的中期檢查報(bào)告,檢查完畢業(yè)設(shè)計(jì)后,他又繼續(xù)查看同學(xué)們的中期報(bào)告,并督促我及時(shí)上交報(bào)告。教師給的意見總是一針見血地指出我設(shè)計(jì)及論文中的不足,并舉例詳細(xì)說明我的改進(jìn)方法,不得不佩服他的學(xué)術(shù)水平及教學(xué)水平。在我開始著手實(shí)現(xiàn)這個(gè)設(shè)計(jì)的時(shí)候,通過需求分析及可行性分析對(duì)該系統(tǒng)有了較為淺顯的認(rèn)識(shí);但是在我真正開始實(shí)現(xiàn)時(shí)發(fā)現(xiàn)事情并沒有這么簡(jiǎn)單。任何成功都不是一蹴而就的,就算是一個(gè)簡(jiǎn)單的畢業(yè)設(shè)計(jì)也需要日積月累的知識(shí)和經(jīng)驗(yàn)。于是,我便去尋求老師和同學(xué)的幫助,這也使得我得以從不同的角度重新考慮我的設(shè)計(jì)。終于,這個(gè)系統(tǒng)在我內(nèi)心有了雛形。在真正實(shí)現(xiàn)這個(gè)設(shè)計(jì)的過程中,學(xué)習(xí)新知識(shí)是必定的,同時(shí)那些由于時(shí)間關(guān)系或者本來就沒有掌握牢固的知識(shí)也有了進(jìn)一步鞏固的機(jī)會(huì)。然而最重要的是了解到如何作為一個(gè)開發(fā)人員,以開發(fā)人員的思維來看待軟件開發(fā)的步驟和方法策略。
本次畢業(yè)設(shè)計(jì)的完成預(yù)示著大學(xué)時(shí)代的句號(hào),在這個(gè)設(shè)計(jì)過程中,我收獲到的絕不僅僅是做項(xiàng)目過程中要到的知識(shí),更多的是同窗情誼和師生情誼,最重要的是做任何事情都要具備的認(rèn)真態(tài)度,以及真正職業(yè)的思考方式方法。
之后,我要感謝的是全體軟件工程系的大力協(xié)助,在大學(xué)的四年間,您們嚴(yán)謹(jǐn)?shù)慕虒W(xué)態(tài)度和科學(xué)的工作方法對(duì)我們的成長(zhǎng)有很重要的影響。沒有您們?yōu)槲覀儫o私的傳授知識(shí)和獲取知識(shí)的方法,就沒有我們能夠在軟件行業(yè)立足的基礎(chǔ)。
最后我要感謝的,是我們的學(xué)校。不僅教育我們知識(shí),對(duì)我們的思想道德的培養(yǎng)更多。使我們不僅能夠做一名合格的大學(xué)生,更能在走出校園時(shí),能夠成為一名合格的社會(huì)人。文章來源地址http://www.zghlxwxcb.cn/news/detail-790744.html
到了這里,關(guān)于手機(jī)密碼管理的APP的設(shè)計(jì)與制作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!