基于Java+SpringBoot+vue+element实现前后端分离蛋糕商城系统详细设计
前言介紹:
? ? ? ?隨著社會的快速發展,計算機的影響是全面且深入的。人們生活水平的不斷提高,日常生活中用戶對網上蛋糕商城方面的要求也在不斷提高,網上蛋糕商城得到廣大用戶的青睞,使得網上蛋糕商城的開發成為必需而且緊迫的事情。網上蛋糕商城主要是借助計算機,通過對網上蛋糕商城所需的信息管理,增加用戶的選擇,同時也方便對廣大用戶信息的及時查詢、修改以及對用戶信息的及時了解。網上蛋糕商城對用戶帶來了更多的便利,該系統通過和數據庫管理系統軟件協作來滿足用戶的需求。計算機技術在現代管理中的應用,使計算機成為人們應用現代技術的重要工具。能夠有效的解決獲取信息便捷化、全面化的問題,提高效率。?
流程分析:
系統開發流程
網上蛋糕商城系統開發時,首先進行需求分析,進而對系統進行總體的設計規劃,設計系統功能模塊,數據庫的選擇等,本系統的開發流程如圖所示
圖系統開發流程圖
?用戶登錄流程
為了保證系統的安全性,要使用本系統對系統信息進行管理,必須先登陸到系統中。如圖所示。
圖登錄流程圖
系統操作流程
用戶打開并進入系統后,會先顯示登錄界面,輸入正確的用戶名和密碼,系統自動檢測信息,若信息無誤,則用戶會進入系統功能界面,進行操作,否則會提示錯誤無法登錄,操作流程如圖3-3所示。
圖系統操作流程圖?
功能截圖:
用戶前臺展示:
系統首頁:
用戶登陸注冊:用戶要想實現蛋糕購買操作必須進行登錄系統,用戶登錄界面展示如圖用戶登錄界面圖所示;在用戶信息添加界面,填寫信息后,通過客戶端驗證后,提交數據到數據庫。后臺對用戶信息進行保存操作,保存數據就,在數據庫中可以查看到剛才錄入的數據。用戶注冊在操作上屬于數據的插入操作,用戶注冊前,需要驗證該用戶是否存在數據庫,如果有這個用戶,就不能繼續注冊
商家店鋪信息:
?店鋪詳情信息:
蛋糕商品展示:用戶在蛋糕詳情界面可查看家具詳情,可點擊購買按鈕進行購買操作,蛋糕詳情界面展示如圖所示
商品詳情信息:
加入購物車:用戶可進購物車界面查看購物車蛋糕信息,購物車界面展示如圖所示。點擊收銀臺按鈕時進入地址填寫界面。
購買和訂單管理:在用戶點擊加入購物車后,通過客戶端驗證后,提交數據到數據庫。后臺對用戶信息進行保存操作,保存數據就,在數據庫中可以查看到剛才插入的數據。
用戶在我的訂單界面可查看訂單信息,對已發貨的訂單可進行確認收貨操作,我的訂單界面展示如圖我的訂單界面圖所示。?
蛋糕資訊:
個人中心管理:
普通用戶后臺管理:
管理員后臺管理:
?管理員要想進入系統后臺對系統進行管理操作,必須進行登錄,管理員登錄界面展示如圖所示
?用戶管理:管理員可查看所有會員信息,并可修改會員資料以及刪除操作,會員管理界面展示如圖所示
蛋糕商家管理:
蛋糕類型管理:管理員可添加、編輯和刪除蛋糕分類信息,蛋糕分類管理界面展示如圖所示點擊蛋糕分類管理鏈接,錄入蛋糕分類信息。在蛋糕分類信息添加界面,填寫信息后,通過客戶端驗證后,提交數據到數據庫。后臺對蛋糕分類信息進行保存操作,保存數據就,在數據庫中可以查看到剛才錄入的數據。錄入蛋糕分類信息后,在蛋糕分類列表中,通過后臺查詢方法,把所有的蛋糕分類信息讀取到集合對象,把集合對象通過html的方式顯示到界面。查詢有兩種類型,一個是查詢所有的蛋糕分類集合,也可以通過條件查詢蛋糕分類,實現的sql語句不同而已,最終實現的流程一樣。在列表中,可以對蛋糕分類信息進行刪除,刪除前,需要提示信息,是否確定刪除。這一步驟的提示屬于客戶端控制,當確定刪除后,調用服務器端刪除方法,實現數據庫數據刪除,并刷新蛋糕分類列表。
蛋糕商品詳情:管理員可進行蛋糕管理操作,可添加、刪除和編輯蛋糕信息,蛋糕管理界面展示如圖所示
訂單信息管理:管理員可進行訂單管理操作,可查看所有訂單信息,并可對其訂單進行發貨和刪除操作,訂單管理界面展示如圖所示。
蛋糕資訊以及系統輪播圖等維護管理:
數據設計:
本系統采用MYSQL數據庫作為數據存儲,下面介紹數據庫中的各個表的詳細信息。
管理員表是保存在線蛋糕銷售的用戶信息表,其中表結構如4.1所示。
表4-1 admin管理員表
| 列名 | 解釋 | 類型 | 大小 | 主鍵 | 空 |
| Idyaopin | 主鍵 | int | 4 | 是主鍵 | 不能為空 |
| Usernameyaopin | 用戶名 | varchar | 50 | 不是 | 可以為空 |
| Passwordyaopin | 密碼 | varchar | 50 | 不是 | 可以為空 |
| typeyaopin | 類型 | varchar | 30 | 不是 | 可以為空 |
訂單表是保存在線蛋糕銷售的訂單信息表,其中id為主鍵,表結構如4.2所示。
表4-2 orders訂單表
| 列名 | 解釋 | 類型 | 大小 | 主鍵 | 空 |
| idyaopin | 主鍵 | int | 11 | 是主鍵 | 不能為空 |
| onumberyaopin | 訂單號 | varchar | 50 | 不是 | 可以為空 |
| Spcyaopin | 商品 | varchar | 50 | 不是 | 可以為空 |
| Slcyaopin | 數量 | varchar | 50 | 不是 | 可以為空 |
| addressyaopin | 地址 | varchar | 50 | 不是 | 可以為空 |
| teyaopin | 電話 | varchar | 13 | 不是 | 可以為空 |
| emailyaopin | 用戶郵箱 | varchar | 20 | 不是 | 可以為空 |
| shffyaopin | 收貨 | varchar | 60 | 不是 | 可以為空 |
| zfffyaopin | 用戶支付 | varchar | 10 | 不是 | 可以為空 |
| leavewordyaopin | 用戶留言 | varchar | 2000 | 不是 | 可以為空 |
| addtimeyaopin | 日期 | time | 不是 | 可以為空 | |
| xnameyaopin | 下單人 | varchar | 10 | 不是 | 可以為空 |
| ztyaopin | 訂單的狀態 | varchar | 2 | 不是 | 可以為空 |
| totalyaopin | 總價格 | varchar | 10 | 不是 | 可以為空 |
| kuaidiyaopin | 快遞名稱 | varchar | 20 | 不是 | 可以為空 |
| knumberyaopin | 單號 | int | 20 | 不是 | 可以為空 |
| Receiveryaopin | 收貨人姓名 | varchar | 10 | 不是 | 可以為空 |
類別表是保存蛋糕銷售的類別信息表,其中id為主鍵,表結構如4.3所示。
表4-3 category類別表
| 列名 | 解釋 | 類型 | 大小 | 主鍵 | 空 |
| idyaopin | 主鍵 | int | 4 | 是主鍵 | 不能為空 |
| pidyaopin | 分類類型 | int | 6 | 不是 | 可以為空 |
| titleyaopin | 分類名稱 | varchar | 60 | 不是 | 可以為空 |
商品表是保存蛋糕銷售的商品信息表,其中id為主鍵,表結構如4.4所示。
表4-4 goods商品表
| 列名 | 解釋 | 類型 | 大小 | 主鍵 | 空 |
| idyaopin | 主鍵 | int | 4 | 是主鍵 | 不能為空 |
| pidyaopin | 類型編號 | int | 4 | 不是 | 可以為空 |
| categoryidyaopin | 分類編號 | int | 4 | 不是 | 可以為空 |
| pnumberyaopin | 商品的編號 | varchar | 10 | 不是 | 可以為空 |
| titleyaopin | 商品的名稱 | varchar | 10 | 不是 | 可以為空 |
| amountyaopin | 庫存數量 | int | 10 | 不是 | 可以為空 |
| cishuyaopin | 銷量 | int | 10 | 不是 | 可以為空 |
| mpriceyaopin | 市場的價格 | decimal | 10 | 不是 | 可以為空 |
| spriceyaopin | 會員的價格 | decimal | 10 | 不是 | 可以為空 |
| contentyaopin | 詳細介紹 | text | 不是 | 可以為空 | |
| apvyaopin | 點擊 | int | 4 | 不是 | 可以為空 |
| imgyaopin | 圖片 | varchar | 50 | 不是 | 可以為空 |
| statusyaopin | 狀態 | int | 2 | 不是 | 可以為空 |
| addtimeyaopin | 添加時間 | timestamp | 不是 | 可以為空 |
部分代碼:
/*** 訂單* 后端接口* @author * @email * @date 2022-03-27 17:11:41*/ @RestController @RequestMapping("/orders") public class OrdersController {@Autowiredprivate OrdersService ordersService;/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,OrdersEntity orders,HttpServletRequest request){if(!request.getSession().getAttribute("role").toString().equals("管理員")) {orders.setUserid((Long)request.getSession().getAttribute("userId"));}EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>();PageUtils page = ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));return R.ok().put("data", page);}/*** 前端列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,OrdersEntity orders, HttpServletRequest request){EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>();PageUtils page = ordersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, orders), params), params));return R.ok().put("data", page);}/*** 列表*/@RequestMapping("/lists")public R list( OrdersEntity orders){EntityWrapper<OrdersEntity> ew = new EntityWrapper<OrdersEntity>();ew.allEq(MPUtil.allEQMapPre( orders, "orders")); return R.ok().put("data", ordersService.selectListView(ew));}/*** 查詢*/@RequestMapping("/query")public R query(OrdersEntity orders){EntityWrapper< OrdersEntity> ew = new EntityWrapper< OrdersEntity>();ew.allEq(MPUtil.allEQMapPre( orders, "orders")); OrdersView ordersView = ordersService.selectView(ew);return R.ok("查詢訂單成功").put("data", ordersView);}/*** 后端詳情*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Long id){OrdersEntity orders = ordersService.selectById(id);return R.ok().put("data", orders);}/*** 前端詳情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Long id){OrdersEntity orders = ordersService.selectById(id);return R.ok().put("data", orders);}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody OrdersEntity orders, HttpServletRequest request){orders.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(orders);orders.setUserid((Long)request.getSession().getAttribute("userId"));ordersService.insert(orders);return R.ok();}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody OrdersEntity orders, HttpServletRequest request){orders.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());//ValidatorUtils.validateEntity(orders);ordersService.insert(orders);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody OrdersEntity orders, HttpServletRequest request){//ValidatorUtils.validateEntity(orders);ordersService.updateById(orders);//全部更新return R.ok();}/*** 刪除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){ordersService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 提醒接口*/@RequestMapping("/remind/{columnName}/{type}")public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request, @PathVariable("type") String type,@RequestParam Map<String, Object> map) {map.put("column", columnName);map.put("type", type);if(type.equals("2")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar c = Calendar.getInstance();Date remindStartDate = null;Date remindEndDate = null;if(map.get("remindstart")!=null) {Integer remindStart = Integer.parseInt(map.get("remindstart").toString());c.setTime(new Date()); c.add(Calendar.DAY_OF_MONTH,remindStart);remindStartDate = c.getTime();map.put("remindstart", sdf.format(remindStartDate));}if(map.get("remindend")!=null) {Integer remindEnd = Integer.parseInt(map.get("remindend").toString());c.setTime(new Date());c.add(Calendar.DAY_OF_MONTH,remindEnd);remindEndDate = c.getTime();map.put("remindend", sdf.format(remindEndDate));}}Wrapper<OrdersEntity> wrapper = new EntityWrapper<OrdersEntity>();if(map.get("remindstart")!=null) {wrapper.ge(columnName, map.get("remindstart"));}if(map.get("remindend")!=null) {wrapper.le(columnName, map.get("remindend"));}if(!request.getSession().getAttribute("role").toString().equals("管理員")) {wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));}int count = ordersService.selectCount(wrapper);return R.ok().put("count", count);}} @Service("ordersService") public class OrdersServiceImpl extends ServiceImpl<OrdersDao, OrdersEntity> implements OrdersService {@Overridepublic PageUtils queryPage(Map<String, Object> params) {Page<OrdersEntity> page = this.selectPage(new Query<OrdersEntity>(params).getPage(),new EntityWrapper<OrdersEntity>());return new PageUtils(page);}@Overridepublic PageUtils queryPage(Map<String, Object> params, Wrapper<OrdersEntity> wrapper) {Page<OrdersView> page =new Query<OrdersView>(params).getPage();page.setRecords(baseMapper.selectListView(page,wrapper));PageUtils pageUtil = new PageUtils(page);return pageUtil;}@Overridepublic List<OrdersVO> selectListVO(Wrapper<OrdersEntity> wrapper) {return baseMapper.selectListVO(wrapper);}@Overridepublic OrdersVO selectVO(Wrapper<OrdersEntity> wrapper) {return baseMapper.selectVO(wrapper);}@Overridepublic List<OrdersView> selectListView(Wrapper<OrdersEntity> wrapper) {return baseMapper.selectListView(wrapper);}@Overridepublic OrdersView selectView(Wrapper<OrdersEntity> wrapper) {return baseMapper.selectView(wrapper);}}獲取源碼:
?大家點贊、收藏、關注、評論啦 、查看👇🏻👇🏻👇🏻微信公眾號獲取聯系方式👇🏻👇🏻👇🏻
總結
以上是生活随笔為你收集整理的基于Java+SpringBoot+vue+element实现前后端分离蛋糕商城系统详细设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 空硬盘,linux – dd
- 下一篇: SpringBoot vue图片上传不能