前言
??博主介紹:?全網(wǎng)粉絲10W+,CSDN特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、全棧領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java、小程序技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn)???
???? 精彩專欄 推薦訂閱????
2023-2024年最值得選的微信小程序畢業(yè)設(shè)計(jì)選題大全:100個(gè)熱門選題推薦?2023-2024年最值得選的Java畢業(yè)設(shè)計(jì)選題大全:500個(gè)熱門選題推薦?
Java精品實(shí)戰(zhàn)案例《500套》
微信小程序項(xiàng)目精品案例《500套》
??文末獲取源碼+數(shù)據(jù)庫(kù)??
感興趣的可以先收藏起來(lái),還有大家在畢設(shè)選題,項(xiàng)目以及論文編寫等相關(guān)問題都可以給我留言咨詢,希望幫助更多的人
詳細(xì)視頻演示
請(qǐng)聯(lián)系我獲取更詳細(xì)的演示視頻
具體實(shí)現(xiàn)截圖
技術(shù)棧
后端框架SpringBoot
Spring Boot內(nèi)置了Tomcat、Jetty和Undertow等服務(wù)器,這意味著你可以直接使用它們而不需要額外的安裝和配置。Spring Boot的一個(gè)主要優(yōu)點(diǎn)是它的自動(dòng)配置功能。它可以根據(jù)你的項(xiàng)目中的依賴關(guān)系自動(dòng)配置應(yīng)用程序。這使得配置應(yīng)用程序變得非常容易,因?yàn)槟悴恍枰謩?dòng)配置每個(gè)依賴項(xiàng)。Spring Boot也提供了大量的開箱即用的功能和插件,如Spring Data、Spring Security和Spring Cloud等。這些功能使得開發(fā)者可以更快速地構(gòu)建應(yīng)用程序,并且可以更容易地?cái)U(kuò)展和集成其他技術(shù)。它是一個(gè)非常流行的框架,它的自動(dòng)配置、內(nèi)置服務(wù)器和插件等功能使得開發(fā)者可以更快、更輕松地構(gòu)建高質(zhì)量的應(yīng)用程序。
前端框架Vue
Vue.js的核心是虛擬DOM技術(shù)。虛擬DOM是一個(gè)內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),它可以幫助Vue.js實(shí)現(xiàn)高效的DOM操作,它采用了響應(yīng)式數(shù)據(jù)綁定、虛擬DOM、組件化等現(xiàn)代化技術(shù),為開發(fā)者提供了一種靈活、高效、易于維護(hù)的開發(fā)模式,當(dāng)數(shù)據(jù)發(fā)生變化時(shí),UI也會(huì)自動(dòng)更新,這樣就使得開發(fā)者可以更加專注于數(shù)據(jù)處理,而不是手動(dòng)更新UI,這就是Vue體現(xiàn)出來(lái)的簡(jiǎn)潔,靈活,高效。
持久層框架MyBaitsPlus
MyBatis-Plus是一款基于MyBatis框架的增強(qiáng)工具,旨在簡(jiǎn)化MyBatis的開發(fā)。它是一款開源的Java框架,支持多種數(shù)據(jù)庫(kù),包括MySQL、Oracle、SQL Server、PostgreSQL等。MyBatis-Plus提供了豐富的API和注解,可以通過簡(jiǎn)單的配置和使用來(lái)實(shí)現(xiàn)ORM操作,大大減少了手寫SQL的工作量。此外,MyBatis-Plus還提供了一套代碼生成器,可以自動(dòng)生成實(shí)體類、Mapper接口以及XML映射文件,極大地簡(jiǎn)化了開發(fā)流程。
MyBatis-Plus還支持分頁(yè)查詢、動(dòng)態(tài)查詢、樂觀鎖、性能分析等實(shí)用功能,方便開發(fā)者進(jìn)行高效的數(shù)據(jù)操作。通過MyBatis-Plus,開發(fā)者可以快速開發(fā)高質(zhì)量的數(shù)據(jù)訪問層代碼,提高開發(fā)效率
系統(tǒng)測(cè)試
從多個(gè)角度進(jìn)行測(cè)試找到系統(tǒng)中存在的問題是本系統(tǒng)首要的測(cè)試目的,通過功能測(cè)試尋找出系統(tǒng)缺陷并改正,確保系統(tǒng)沒有缺陷。在測(cè)試過程中證明系統(tǒng)滿足客戶需求,發(fā)現(xiàn)問題和不足及時(shí)改正。測(cè)試完成之后得出測(cè)試結(jié)論。
系統(tǒng)測(cè)試目的
在酒店管理系統(tǒng)的開發(fā)周期中,系統(tǒng)測(cè)試是必不可少且考驗(yàn)?zāi)托牡倪^程。其重要性在于,它是保證系統(tǒng)質(zhì)量和牢靠性的最后一道關(guān),也是整個(gè)系統(tǒng)開發(fā)過程的最后一次檢查。
系統(tǒng)測(cè)試主要是為了避免用戶在使用時(shí)發(fā)生問題,增強(qiáng)用戶體驗(yàn)感,為了不影響用戶的使用,我們需要從多角度、多思路去考慮系統(tǒng)可能遇到的問題,通過不同的模擬場(chǎng)景來(lái)發(fā)現(xiàn)缺陷并解決問題。在測(cè)試的過程中也可以了解到該系統(tǒng)的質(zhì)量情況,系統(tǒng)功能是否健全,系統(tǒng)邏輯是否順暢。一個(gè)合格的系統(tǒng)測(cè)試過程完成后將大大提升系統(tǒng)質(zhì)量和使用感。測(cè)試的目標(biāo)是驗(yàn)證系統(tǒng)是否符合需求規(guī)格說明書的定義,并找出與需求規(guī)格說明書不符合或與之沖突的內(nèi)容。測(cè)試過程中一定站在用戶的角度考慮問題,避免一些不切實(shí)際的場(chǎng)景,浪費(fèi)測(cè)試時(shí)間,從而可能會(huì)引起問題導(dǎo)致預(yù)期結(jié)果與實(shí)際結(jié)果不符。
系統(tǒng)功能測(cè)試
對(duì)系統(tǒng)功能模塊進(jìn)行測(cè)試,通過點(diǎn)擊、輸入邊界值和必填項(xiàng)非必填項(xiàng)的驗(yàn)證等方法進(jìn)行一系列的黑盒測(cè)試。通過編寫測(cè)試用例,根據(jù)測(cè)試用例中的內(nèi)容進(jìn)行測(cè)試,最后得出測(cè)試結(jié)論。
登錄功能測(cè)試方案:當(dāng)需要登入該系統(tǒng)時(shí),通過賬戶密碼等功能點(diǎn)進(jìn)行驗(yàn)證,用戶在輸入時(shí)需要輸入與數(shù)據(jù)庫(kù)內(nèi)存儲(chǔ)的數(shù)據(jù)匹配的內(nèi)容,當(dāng)其中某項(xiàng)輸入錯(cuò)誤時(shí)系統(tǒng)將提示輸入錯(cuò)誤。此界面對(duì)角色權(quán)限也有相應(yīng)的校驗(yàn),當(dāng)用戶角色的帳號(hào)選擇管理員角色登錄時(shí),也會(huì)報(bào)錯(cuò)。登錄功能測(cè)試用例如下表所示。
輸入數(shù)據(jù) | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 | 結(jié)果分析 |
---|---|---|---|
用戶名:guanliyuan 密碼:123456 驗(yàn)證碼:正確輸入 | 登入系統(tǒng) | 成功登入系統(tǒng) | 和估算結(jié)果一樣 |
用戶名:guanliyuan 密碼:111111 驗(yàn)證碼:正確輸入 | 密碼錯(cuò)誤 | 密碼錯(cuò)誤,請(qǐng)重新輸入密碼 | 和估算結(jié)果一樣 |
用戶名:guanliyuan 密碼:123456 驗(yàn)證碼:錯(cuò)誤輸入 | 驗(yàn)證碼錯(cuò)誤 | 驗(yàn)證碼信息錯(cuò)誤 | 和估算結(jié)果一樣 |
用戶名:空 密碼:123456 驗(yàn)證碼:正確輸入 | 用戶名必填 | 請(qǐng)輸入用戶名 | 和估算結(jié)果一樣 |
用戶名:guanliyuan 密碼:空 驗(yàn)證碼:正確輸入 | 密碼錯(cuò)誤 | 密碼錯(cuò)誤,請(qǐng)重新輸入密碼 | 和估算結(jié)果一樣 |
用戶管理功能測(cè)試方案:用戶管理主要有添加、編輯、刪除、查找用戶功能。添加用戶時(shí),必填項(xiàng)不填,檢驗(yàn)系統(tǒng)是否有非空檢驗(yàn);添加已有的用戶信息,檢驗(yàn)是否提示用戶名已被使用;刪除用戶信息,系統(tǒng)將檢驗(yàn)是否進(jìn)行此操作;更改用戶信息,更改用戶信息后頁(yè)面是否可以展示出來(lái)。用戶管理測(cè)試用例如下表所示。
輸入數(shù)據(jù) | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 | 結(jié)果分析 |
---|---|---|---|
填入用戶基本信息 | 添加成功,在用戶列表中顯示 | 該用戶出現(xiàn)在在列表中 | 和估算結(jié)果一樣 |
修改用戶信息 | 編輯成功,修改信息成功被修改 | 用戶信息被修改 | 和估算結(jié)果一樣 |
選中刪除用戶 | 系統(tǒng)詢問是否刪除用戶,確認(rèn)后用戶被刪除驗(yàn)證碼信息錯(cuò)誤 | 系統(tǒng)詢問是否刪除用戶,確認(rèn)后查找不到用戶信息 | 和估算結(jié)果一樣 |
添加用戶時(shí)不填用戶名 | 提示用戶名不能為空 | 提示用戶名不能為空 | 和估算結(jié)果一樣 |
填入已有用戶名 | 添加失敗,提示用戶名重復(fù) | 添加失敗,提示用戶名重復(fù) | 和估算結(jié)果一樣 |
系統(tǒng)測(cè)試結(jié)論
本系統(tǒng)主要使用黑盒測(cè)試,通過模擬用戶使用系統(tǒng)實(shí)現(xiàn)各個(gè)功能編寫測(cè)試用例,并進(jìn)行測(cè)試。以確保系統(tǒng)流程的正確性。系統(tǒng)測(cè)試必不可少,可以使系統(tǒng)更加完善,該系統(tǒng)的可使用性也會(huì)更高。
測(cè)試該系統(tǒng)主要為了驗(yàn)證系統(tǒng)的功能模塊是否滿足我們最初的設(shè)計(jì)理念,驗(yàn)證各個(gè)功能模塊邏輯是否正確,此系統(tǒng)不需要過于復(fù)雜的邏輯處理,以便于使用者操作。測(cè)試的最終目的也是圍繞著用戶使用展開。測(cè)試過程中所有場(chǎng)景都應(yīng)符合用戶需求,不可偏離需求目標(biāo),遇到問題時(shí)要站在用戶的角度進(jìn)行思考。經(jīng)過一系列的測(cè)試過程后得到最終的測(cè)試結(jié)果,從測(cè)試結(jié)果可以看出,實(shí)現(xiàn)的系統(tǒng)在功能和性能方面滿足設(shè)計(jì)要求。
為什么選擇我
自己的網(wǎng)站
網(wǎng)站上傳的項(xiàng)目均為博主自己收集和開發(fā)的,質(zhì)量都可以得到保障,適合自己懂一點(diǎn)程序開發(fā)的同學(xué)使用!
自己的小程序(小蔡coding)

為了方便同學(xué)們使用,我開發(fā)了小程序版的,名字叫小蔡coding。同學(xué)們可以通過小程序快速搜索和定位到自己想要的程序文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-836726.html
代碼參考
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("賬號(hào)或密碼不正確");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
String token = CommonUtil.getRandomString(32);
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1);
if(tokenEntity!=null) {
tokenEntity.setToken(token);
tokenEntity.setExpiratedtime(cal.getTime());
this.updateById(tokenEntity);
} else {
this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
}
return token;
}
/**
* 權(quán)限(Token)驗(yàn)證
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//支持跨域請(qǐng)求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
// 跨域時(shí)會(huì)首先發(fā)送一個(gè)OPTIONS請(qǐng)求,這里我們給OPTIONS請(qǐng)求直接返回正常狀態(tài)
if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
response.setStatus(HttpStatus.OK.value());
return false;
}
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
//從header中獲取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
* 不需要驗(yàn)證權(quán)限的方法直接放過
*/
if(annotation!=null) {
return true;
}
TokenEntity tokenEntity = null;
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
if(tokenEntity != null) {
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(JSONObject.toJSONString(R.error(401, "請(qǐng)先登錄")));
} finally {
if(writer != null){
writer.close();
}
}
// throw new EIException("請(qǐng)先登錄", 401);
return false;
}
}
數(shù)據(jù)庫(kù)參考
-- ----------------------------
-- Table structure for token
-- ----------------------------
DROP TABLE IF EXISTS `token`;
CREATE TABLE `token` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`userid` bigint(20) NOT NULL COMMENT '用戶id',
`username` varchar(100) NOT NULL COMMENT '用戶名',
`tablename` varchar(100) DEFAULT NULL COMMENT '表名',
`role` varchar(100) DEFAULT NULL COMMENT '角色',
`token` varchar(200) NOT NULL COMMENT '密碼',
`addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新增時(shí)間',
`expiratedtime` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '過期時(shí)間',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='token表';
-- ----------------------------
-- Records of token
-- ----------------------------
INSERT INTO `token` VALUES ('9', '23', 'cd01', 'xuesheng', '學(xué)生', 'al6svx5qkei1wljry5o1npswhdpqcpcg', '2023-02-23 21:46:45', '2023-03-15 14:01:36');
INSERT INTO `token` VALUES ('10', '11', 'xh01', 'xuesheng', '學(xué)生', 'fahmrd9bkhqy04sq0fzrl4h9m86cu6kx', '2023-02-27 18:33:52', '2023-03-17 18:27:42');
INSERT INTO `token` VALUES ('11', '17', 'ch01', 'xuesheng', '學(xué)生', 'u5km44scxvzuv5yumdah2lhva0gp4393', '2023-02-27 18:46:19', '2023-02-27 19:48:58');
INSERT INTO `token` VALUES ('12', '1', 'admin', 'users', '管理員', 'h1pqzsb9bldh93m92j9m2sljy9bt1wdh', '2023-02-27 19:37:01', '2023-03-17 18:23:02');
INSERT INTO `token` VALUES ('13', '21', 'xiaohao', 'shezhang', '社長(zhǎng)', 'zdm7j8h1wnfe27pkxyiuzvxxy27ykl2a', '2023-02-27 19:38:07', '2023-03-17 18:25:20');
INSERT INTO `token` VALUES ('14', '27', 'djy01', 'xuesheng', '學(xué)生', 'g3teq4335pe21nwuwj2sqkrpqoabqomm', '2023-03-15 12:56:17', '2023-03-15 14:00:16');
INSERT INTO `token` VALUES ('15', '29', 'dajiyue', 'shezhang', '社長(zhǎng)', '0vb1x9xn7riewlp5ddma5ro7lp4u8m9j', '2023-03-15 12:58:08', '2023-03-15 14:03:48');
源碼獲取
文章下方名片聯(lián)系我即可~
大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 、查看????獲取聯(lián)系方式????
精彩專欄推薦訂閱:在下方專欄????
Java精品實(shí)戰(zhàn)案例《500套》
微信小程序項(xiàng)目精品案例《500套》文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836726.html
到了這里,關(guān)于基于SpringBoot+Vue+uniapp微信小程序的設(shè)備故障報(bào)修管理系統(tǒng)的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!