博主介紹:?全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn)?
??文末獲取源碼聯(lián)系??
?????精彩專欄推薦訂閱?????不然下次找不到喲
2022-2024年最全的計(jì)算機(jī)軟件畢業(yè)設(shè)計(jì)選題大全:1000個(gè)熱門(mén)選題推薦?
Java項(xiàng)目精品實(shí)戰(zhàn)案例《100套》
Java微信小程序項(xiàng)目實(shí)戰(zhàn)《100套》文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-753090.html
感興趣的可以先收藏起來(lái),還有大家在畢設(shè)選題,項(xiàng)目以及論文編寫(xiě)等相關(guān)問(wèn)題都可以給我留言咨詢,希望幫助更多的人
目錄
一、 前言介紹:
二 、功能設(shè)計(jì):
三、功能實(shí)現(xiàn):
用戶系統(tǒng)功能模塊
管理員功能模塊
賣家功能模塊
四、庫(kù)表設(shè)計(jì):
五、關(guān)鍵代碼:
六、論文參考:
七、其他案例:?
八、源碼獲?。?/p>
一、 前言介紹:
? ? 校園點(diǎn)餐系統(tǒng)小程序采用B/S模式、采用JAVA語(yǔ)言、springboot框架、mysql數(shù)據(jù)庫(kù)、小程序框架uniapp等開(kāi)工具,促進(jìn)了校園點(diǎn)餐系統(tǒng)小程序的業(yè)務(wù)發(fā)展。與傳統(tǒng)線下點(diǎn)餐相比,校園點(diǎn)餐系統(tǒng)小程序不但節(jié)省了賣家的線下運(yùn)營(yíng)的成本和門(mén)店曝光等難題,對(duì)學(xué)生而言提供了足不出戶送餐上門(mén)的服務(wù),針對(duì)現(xiàn)代校園而言,出門(mén)用餐路程遠(yuǎn),排隊(duì)麻煩等問(wèn)題,特開(kāi)發(fā)校園點(diǎn)餐系統(tǒng)小程序。
? ? 實(shí)現(xiàn)校園點(diǎn)餐的計(jì)算機(jī)化也是順應(yīng)時(shí)代潮流的舉措,現(xiàn)如今餐飲種類正逐漸增加,浩繁的餐飲信息令校園餐飲業(yè)迎來(lái)管理上的難題。餐飲行業(yè)進(jìn)入高速發(fā)展的時(shí)代,餐飲業(yè)的管理工作變得越來(lái)越困難,在這一客觀需要的推動(dòng)下,建立、完善、發(fā)展在線校園點(diǎn)餐系統(tǒng)小程序,可以為校園餐飲業(yè)管理者帶來(lái)極大的方便。
本系統(tǒng)即為方便餐飲店管理者和客戶而制作的校園校園點(diǎn)餐系統(tǒng)小程序,結(jié)合了餐飲店和客戶的需求,設(shè)計(jì)出的一個(gè)基于springboot框架、JAVA語(yǔ)言、MySQL數(shù)據(jù)庫(kù)等技術(shù)的校園點(diǎn)餐系統(tǒng)小程序。
二 、功能設(shè)計(jì):
本網(wǎng)站可以分為:注冊(cè)用戶使用的功能、賣家進(jìn)行管理的功能、管理員進(jìn)行管理的功能。
管理員管理功能:首頁(yè)、網(wǎng)站管理(輪播圖、公告信息)、人員管理(管理員、注冊(cè)用戶、賣家)、內(nèi)容管理(美食資訊)、購(gòu)物管理(餐品信息、分類列表、訂單列表)、模塊管理(我的好友、訂單狀態(tài)、營(yíng)業(yè)分析、餐品推薦)、個(gè)人管理等功能。
用戶使用功能:首頁(yè)、關(guān)于我們、餐品信息、餐品推薦、購(gòu)物車、美食資訊、我的(基本信息、收貨地址、收藏、訂單、購(gòu)物車,我的好友、訂單狀態(tài))等功能。
賣家管理功能:首頁(yè)、購(gòu)物管理(餐品信息、訂單列表)、模塊管理(訂單狀態(tài)、營(yíng)業(yè)分析、餐品推薦)、個(gè)人管理等功能。
三、功能實(shí)現(xiàn):
用戶系統(tǒng)功能模塊
校園點(diǎn)餐系統(tǒng)小程序,在系統(tǒng)注冊(cè)頁(yè)面填寫(xiě)用戶信息用戶名、密碼、姓名、性別、郵箱、手機(jī)等內(nèi)容進(jìn)行注冊(cè)操作,如圖5-1所示。
圖5-1用戶注冊(cè)界面圖
???在小程序首頁(yè)頁(yè)面可以用戶功能首頁(yè)、聯(lián)系方式、購(gòu)物車、美食資訊、我的等,如圖5-2所示。
圖5-2?小程序系統(tǒng)界面圖
在我的頁(yè)面可以查看基本信息、收貨地址、收藏、訂單、購(gòu)物車,我的好友、訂單狀態(tài)等功能,如圖5-3所示。
圖5-3?我的界面圖
在美食資訊詳情界面,用戶可以查看資訊詳情,并可進(jìn)行點(diǎn)贊、收藏、評(píng)論等操作,如圖5-4所示。
圖5-4?美食資訊詳情界面圖
用戶點(diǎn)擊產(chǎn)品詳情可以查看菜品信息菜品名稱、口味、價(jià)格、原材料、店鋪名稱、商品屬性等內(nèi)容,還可在該頁(yè)面進(jìn)行菜品收藏、加入購(gòu)物車、立即購(gòu)買等操作,如圖5-5所示。
圖5-5?產(chǎn)品詳情界面圖
用戶在餐品信息頁(yè)面可以瀏覽餐品圖片、餐品名稱、價(jià)格等信息,并可以選中感興趣的餐品加入購(gòu)物車,如圖5-6所示。
圖5-6 餐品信息界面圖
在訂單詳情頁(yè)面中可以查看已付款、未付款訂單、需付款、訂單編號(hào)、下單時(shí)間等信息,如圖5-7所示。
圖5-7 訂單詳情界面圖
管理員功能模塊
在管理員登錄頁(yè)面添加登錄信息用戶名、密碼、角色等進(jìn)行登錄,如圖5-8所示。
圖5-8 管理員登錄界面圖
在管理員功能頁(yè)面中可以查看功能分為:首頁(yè)、網(wǎng)站管理(輪播圖、公告信息)、人員管理(管理員、注冊(cè)用戶、賣家)、內(nèi)容管理(美食資訊)、購(gòu)物管理(餐品信息、分類列表、訂單列表)、模塊管理(我的好友、訂單狀態(tài)、營(yíng)業(yè)分析、餐品推薦)、個(gè)人管理等功能,并可進(jìn)行相應(yīng)操作,如圖5-9所示。
圖5-9 管理員功能界面圖
在用戶管理頁(yè)面中可以查看昵稱、用戶名、商家編號(hào)、店鋪名稱、負(fù)責(zé)人、創(chuàng)建時(shí)間、更新時(shí)間等信息進(jìn)行詳情、添加、修改或刪除等操作,如圖5-10所示。
圖5-10用戶管理界面圖
在美食資訊管理頁(yè)面中可以對(duì)標(biāo)題、封面圖、文章分類、標(biāo)簽等信息進(jìn)行添加、修改或刪除等操作,如圖5-11所示。
圖5-11美食資訊管理界面圖
在訂單狀態(tài)管理頁(yè)面可以查看訂單情號(hào)、商品名稱、商品編號(hào)、用戶編號(hào)、姓名、聯(lián)系電話、收貨地址、記錄時(shí)間等內(nèi)容,還可進(jìn)行詳情、修改、添加或刪除等操作,如圖5-12所示。
圖5-12 訂單狀態(tài)管理界面圖
賣家功能模塊
在餐品推薦頁(yè)面可以添加餐品名稱、圖片、類型、口味、原材料、商家編號(hào)、店鋪名稱、創(chuàng)建時(shí)間等內(nèi)容,還可進(jìn)行詳情、修改、添加或刪除等操作,如圖5-13所示。
圖5-13 餐品推薦界面圖
在營(yíng)業(yè)分析頁(yè)面可以添加標(biāo)題、商家編號(hào)、店鋪名稱、絨計(jì)時(shí)間、收入總額、備注、創(chuàng)建時(shí)間等內(nèi)容,還可進(jìn)行詳情、修改、添加或刪除等操作,如圖5-14所示。
圖5-14 營(yíng)業(yè)分析界面圖
四、庫(kù)表設(shè)計(jì):
一個(gè)好的系統(tǒng)它的后臺(tái)數(shù)據(jù)庫(kù)一定要考慮的全面,這和我們建造房子一個(gè)概念,房子不是隨心所欲建起來(lái)的,一切都是在合理設(shè)計(jì)的基礎(chǔ)是實(shí)現(xiàn)的,地基打牢固了房子才能建的更高。數(shù)據(jù)庫(kù)如果設(shè)計(jì)的很合理,而且每個(gè)方面都能考慮到了那么這個(gè)系統(tǒng)才能不會(huì)出現(xiàn)大的問(wèn)題。
學(xué)習(xí)編程,我們都知道數(shù)據(jù)庫(kù)設(shè)計(jì)是基于需要設(shè)計(jì)的系統(tǒng)功能,我們需要建立一個(gè)數(shù)據(jù)庫(kù)關(guān)系模型,用于存儲(chǔ)數(shù)據(jù)信息,這樣當(dāng)我們?cè)诔绦蛑袝r(shí),就沒(méi)有必要為程序頁(yè)面添加數(shù)據(jù),從而提高系統(tǒng)的效率。數(shù)據(jù)庫(kù)存儲(chǔ)了很多信息,可以說(shuō)是信息管理系統(tǒng)的核心和基礎(chǔ),數(shù)據(jù)庫(kù)還為系統(tǒng)提供了添加、刪除、修改和檢查等操作模塊,使系統(tǒng)能夠快速找到自己想要的信息,而不是在程序代碼中找到。數(shù)據(jù)庫(kù)中信息表的每個(gè)部分根據(jù)一定的關(guān)系精確地組合,排列和組合成數(shù)據(jù)表。系統(tǒng)ER圖如下圖所示
五、關(guān)鍵代碼:
?
/**
* 用戶賬戶:用于保存用戶登錄信息(User)表控制層
*/
@Slf4j
@RestController
@RequestMapping("user")
public class UserController extends BaseController<User, UserService> {
/**
* 服務(wù)對(duì)象
*/
@Autowired
public UserController(UserService service) {
setService(service);
}
/**
* Token服務(wù)
*/
@Autowired
private AccessTokenService tokenService;
@Autowired
private UserGroupService userGroupService;
/**
* 注冊(cè)
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查詢用戶
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用戶已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 找回密碼
* @param form
* @return
*/
@PostMapping("forget_password")
public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {
JSONObject ret = new JSONObject();
String username = form.getUsername();
String code = form.getCode();
String password = form.getPassword();
// 判斷條件
if(code == null || code.length() == 0){
return error(30000, "驗(yàn)證碼不能為空");
}
if(username == null || username.length() == 0){
return error(30000, "用戶名不能為空");
}
if(password == null || password.length() == 0){
return error(30000, "密碼不能為空");
}
// 查詢用戶
Map<String, String> query = new HashMap<>();
query.put("username",username);
Query select = service.select(query, service.readConfig(request));
List list = select.getResultList();
if (list.size() > 0) {
User o = (User) list.get(0);
JSONObject query2 = new JSONObject();
JSONObject form2 = new JSONObject();
// 修改用戶密碼
query2.put("user_id",o.getUserId());
form2.put("password",service.encryption(password));
service.update(query, service.readConfig(request), form2);
return success(1);
}
return error(70000,"用戶不存在");
}
/**
* 登錄
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[執(zhí)行登錄接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "賬號(hào)或密碼不能為空");
}
if (resultList == null || password == null) {
return error(30000, "賬號(hào)或密碼不能為空");
}
//判斷是否有這個(gè)用戶
if (resultList.size()<=0){
return error(30000,"用戶不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用戶組不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查詢用戶審核狀態(tài)
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用戶不存在");
}
if (!res.equals("已通過(guò)")){
return error(30000,"該用戶審核未通過(guò)");
}
}
//查詢用戶狀態(tài)
if (byUsername.getState()!=1){
return error(30000,"用戶非可用狀態(tài),不能登錄");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存儲(chǔ)Token到數(shù)據(jù)庫(kù)
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用戶信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "賬號(hào)或密碼不正確");
}
}
/**
* 修改密碼
* @param data
* @param request
* @return
*/
@PostMapping("change_password")
public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
// 根據(jù)Token獲取UserId
String token = request.getHeader("x-auth-token");
Integer userId = tokenGetUserId(token);
// 根據(jù)UserId和舊密碼獲取用戶
Map<String, String> query = new HashMap<>();
String o_password = data.get("o_password");
query.put("user_id" ,String.valueOf(userId));
query.put("password" ,service.encryption(o_password));
Query ret = service.count(query, service.readConfig(request));
List list = ret.getResultList();
Object s = list.get(0);
int count = Integer.parseInt(list.get(0).toString());
if(count > 0){
// 修改密碼
Map<String,Object> form = new HashMap<>();
form.put("password",service.encryption(data.get("password")));
service.update(query,service.readConfig(request),form);
return success(1);
}
return error(10000,"密碼修改失?。?);
}
/**
* 登錄態(tài)
* @param request
* @return
*/
@GetMapping("state")
public Map<String, Object> state(HttpServletRequest request) {
JSONObject ret = new JSONObject();
// 獲取狀態(tài)
String token = request.getHeader("x-auth-token");
// 根據(jù)登錄態(tài)獲取用戶ID
Integer userId = tokenGetUserId(token);
log.info("[返回userId] {}",userId);
if(userId == null || userId == 0){
return error(10000,"用戶未登錄!");
}
// 根據(jù)用戶ID獲取用戶
Map<String,String> query = new HashMap<>();
query.put("user_id" ,String.valueOf(userId));
// 根據(jù)用戶ID獲取
Query select = service.select(query,service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));
user.put("token",token);
ret.put("obj",user);
return success(ret);
} else {
return error(10000,"用戶未登錄!");
}
}
/**
* 登錄態(tài)
* @param request
* @return
*/
@GetMapping("quit")
public Map<String, Object> quit(HttpServletRequest request) {
String token = request.getHeader("x-auth-token");
JSONObject ret = new JSONObject();
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
try{
tokenService.delete(query,service.readConfig(request));
}catch (Exception e){
e.printStackTrace();
}
return success("退出登錄成功!");
}
/**
* 獲取登錄用戶ID
* @param token
* @return
*/
public Integer tokenGetUserId(String token) {
log.info("[獲取的token] {}",token);
// 根據(jù)登錄態(tài)獲取用戶ID
if(token == null || "".equals(token)){
return 0;
}
Map<String, String> query = new HashMap<>(16);
query.put("token", token);
AccessToken byToken = tokenService.findOne(query);
if(byToken == null){
return 0;
}
return byToken.getUser_id();
}
/**
* 重寫(xiě)add
* @return
*/
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
Map<String,Object> map = service.readBody(request.getReader());
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
}
六、論文參考:
第1章 緒論
1.1.1 ?課題背景
1.1.2 ?研究意義
第2章 關(guān)鍵技術(shù)的研究
2.1微信開(kāi)發(fā)者工具
2.2小程序框架以及目錄結(jié)構(gòu)介紹
2.3 JAVA技術(shù)
2.4?Spring Boot框架
2.5?MYSQL數(shù)據(jù)庫(kù)
2.6?B/S結(jié)構(gòu)
2.7 ECLIPSE開(kāi)發(fā)環(huán)境
2.8?Tomcat服務(wù)器
第3章 需求分析與可行性分析
3.1 功能需求分析
3.2 可行性分析
3.2.1技術(shù)可行性:
3.2.2經(jīng)濟(jì)可行性
3.2.3操作可行性:
3.3?系統(tǒng)性能分析
第4章 系統(tǒng)總體設(shè)計(jì)
4.1 ?系統(tǒng)的結(jié)構(gòu)劃分
4.2 ?系統(tǒng)的流程分析
4.2.1操作流程
4.2.2添加信息流程
4.2.3刪除信息流程
4.3. 數(shù)據(jù)庫(kù)設(shè)計(jì)
4.3.1數(shù)據(jù)庫(kù)E-R圖設(shè)計(jì)
4.3.2數(shù)據(jù)表
第5章 系統(tǒng)實(shí)現(xiàn)過(guò)程
5.1 ?運(yùn)行環(huán)境
5.1.1 ?硬件環(huán)境
5.1.2 ?軟件環(huán)境
5.2 ?系統(tǒng)實(shí)現(xiàn)
5.2.1用戶系統(tǒng)功能模塊
5.2.2管理員功能模塊
5.2.3賣家功能模塊
第6章 系統(tǒng)測(cè)試
6.1系統(tǒng)測(cè)試的目的
6.2系統(tǒng)測(cè)試方法
6.3功能測(cè)試
第7章 總結(jié)
參考文獻(xiàn)
致謝
?
七、其他案例:?
?
?
?
八、源碼獲?。?/h2>
大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 、查看????獲取聯(lián)系方式????
?精彩專欄推薦訂閱:在下方專欄????
2022-2024年最全的計(jì)算機(jī)軟件畢業(yè)設(shè)計(jì)選題大全:1000個(gè)熱門(mén)選題推薦?
Java項(xiàng)目精品實(shí)戰(zhàn)案例《100套》文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-753090.html
Java微信小程序項(xiàng)目實(shí)戰(zhàn)《100套》
到了這里,關(guān)于基于SpringBoot+uniapp微信小程序校園點(diǎn)餐平臺(tái)詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!