python+vue快餐店线上点餐系统

本在线订餐系统,一方面方便了企业员工在线进行订餐,在线选择喜欢的菜品下单,另一方面,方便了企业订餐的菜品线上推广,让企业的菜品更加好销售一些。系统采用了BS架构模式开发,利用django框架技术,  数据库采用mysql进行管理,系统主要是计算机毕业设计学习系统
 
  语言:Python
框架:django/flask
软件版本:python3.7.7
数据库:mysql 
数据库工具:Navicat
前端框架:vue.js
通过比较两个不同因素的框架,可以看出Flask和Django不能被标记为单一功能中的最佳框架。当Django在快速发展的大型项目中看起来更好并且提供更多功能时,Flask似乎更容易上手。这两个框架对于开发Web应用程序都非常有用,应根据当前的需求和项目的规模来选择它们。
最新python的web框架django/flask都可以开发.基于B/S模式,前端技术:nodejs+vue+Elementui+html+css
,前后端分离就是将一个单体应用拆分成两个独立的应用:前端应用和后端应用,以JSON格式进行数据交互.充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护等特点
 如今社会节奏的不断加快,社会不断的发展和进步,快餐文化已经成为了人们普遍采用的一种饮食方式,都市的白领,企业的上班族,工程师都在都市的核心区域上班,工作时间比较长,只能在网上进行订餐,解决中午的一顿饭。所以通过在线订餐,就能够让员工在公司就能享受到快餐带来的便捷。
网站前台:
用户注册登录:需要在线点餐的游客用户,可以在线进行注册, 并能够实现用户的登录,登录成功后,就能够在线进行菜品的选择下单。
菜品查看:通过手机网页,进入到系统中,查看相关的菜品发布信息,并能够进行菜品的类别选择。
菜品在线预订:用户注册登录后,可以在线进行菜品的查看,预订,并能够选择相应菜品,实现菜品的在线下单。
管理员:
类型维护:菜品的类型可以进行常规维护,修改,增加等操作。
菜品信息管理:实现了菜品的基本信息的管理,针对菜品的类别信息进行添加,修改,能实现菜品的上传等操作。
订单维护:对在线点餐的订单信息进行管理,并能够实现订餐的审核,查看,并能够删除订单信息。
系统管理:主要是提供了用户的信息维护,实现了用户的在线新增,修改以及删除,并能够进行系统用户的维护管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的点餐系统的搭建步骤: 1. 创建Spring Boot项目 首先我们需要创建一个Spring Boot项目,可以使用Spring官方提供的[Spring Initializr](https://start.spring.io/)来生成项目模板,选择Web、JPA、MySQL等依赖。 2. 创建数据库表 我们需要在MySQL数据库中创建两个表,一个是菜品表,一个是订单表。具体表结构如下: ```sql -- 菜品表 CREATE TABLE `dish` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `price` double NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; -- 订单表 CREATE TABLE `order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `total_price` double NOT NULL, `create_time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; -- 订单项表 CREATE TABLE `order_item` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) NOT NULL, `dish_id` int(11) NOT NULL, `quantity` int(11) NOT NULL, `price` double NOT NULL, PRIMARY KEY (`id`), KEY `fk_order_id` (`order_id`), KEY `fk_dish_id` (`dish_id`), CONSTRAINT `fk_dish_id` FOREIGN KEY (`dish_id`) REFERENCES `dish` (`id`), CONSTRAINT `fk_order_id` FOREIGN KEY (`order_id`) REFERENCES `order` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; ``` 3. 创建后端API 我们需要创建一些后端API,用于菜品的CRUD和订单的创建。具体实现可以参考下面的代码: ```java @RestController @RequestMapping("/api/dish") public class DishController { @Autowired private DishRepository dishRepository; @GetMapping public List<Dish> list() { return dishRepository.findAll(); } @PostMapping public Dish create(@RequestBody Dish dish) { return dishRepository.save(dish); } @PutMapping("/{id}") public Dish update(@PathVariable Long id, @RequestBody Dish dish) { dish.setId(id); return dishRepository.save(dish); } @DeleteMapping("/{id}") public void delete(@PathVariable Long id) { dishRepository.deleteById(id); } } @RestController @RequestMapping("/api/order") public class OrderController { @Autowired private DishRepository dishRepository; @Autowired private OrderRepository orderRepository; @Autowired private OrderItemRepository orderItemRepository; @PostMapping public Order create(@RequestBody List<OrderItem> orderItems) { double totalPrice = orderItems.stream().mapToDouble(item -> item.getPrice() * item.getQuantity()).sum(); Order order = new Order(totalPrice, LocalDateTime.now()); order = orderRepository.save(order); for (OrderItem orderItem : orderItems) { orderItem.setOrder(order); orderItemRepository.save(orderItem); } return order; } } ``` 其中,`DishRepository`、`OrderRepository`和`OrderItemRepository`是用于操作数据库的JPA接口。 4. 创建前端页面 我们可以使用Vue来实现前端页面,首先创建一个Vue项目,然后在`src/components`目录下创建一个`DishList.vue`组件和一个`OrderCart.vue`组件。 `DishList.vue`组件用于显示菜品列表和添加菜品到购物车,具体实现可以参考下面的代码: ```vue <template> <div class="dish-list"> <div class="dish" v-for="dish in dishes" :key="dish.id"> <div class="name">{{ dish.name }}</div> <div class="price">¥{{ dish.price }}</div> <button @click="addItem(dish)">加入购物车</button> </div> </div> </template> <script> export default { props: { dishes: { type: Array, required: true } }, methods: { addItem(dish) { this.$emit('add-item', dish) } } } </script> ``` `OrderCart.vue`组件用于显示购物车里的菜品和提交订单,具体实现可以参考下面的代码: ```vue <template> <div class="order-cart"> <div class="item" v-for="(item, index) in items" :key="index"> <div class="name">{{ item.dish.name }}</div> <div class="quantity">× {{ item.quantity }}</div> <div class="price">¥{{ item.price }}</div> <button @click="removeItem(index)">删除</button> </div> <div class="total-price">总价:¥{{ totalPrice }}</div> <button @click="submitOrder">提交订单</button> </div> </template> <script> export default { props: { items: { type: Array, required: true }, totalPrice: { type: Number, required: true } }, methods: { removeItem(index) { this.$emit('remove-item', index) }, submitOrder() { this.$emit('submit-order') } } } </script> ``` 最后,在主页面中引入这两个组件,并添加必要的样式即可: ```vue <template> <div class="app"> <div class="header">点餐系统</div> <div class="main"> <div class="dish-list-wrapper"> <div class="title">菜品列表</div> <DishList :dishes="dishes" @add-item="addItem"></DishList> </div> <div class="order-cart-wrapper"> <div class="title">订单</div> <OrderCart :items="items" :totalPrice="totalPrice" @remove-item="removeItem" @submit-order="submitOrder"></OrderCart> </div> </div> </div> </template> <script> import DishList from '@/components/DishList.vue' import OrderCart from '@/components/OrderCart.vue' export default { components: { DishList, OrderCart }, data() { return { dishes: [], items: [], totalPrice: 0 } }, mounted() { this.loadDishes() }, methods: { loadDishes() { // 调用后端API获取菜品列表 axios.get('/api/dish').then(response => { this.dishes = response.data }) }, addItem(dish) { let item = this.items.find(item => item.dish.id === dish.id) if (item) { item.quantity++ item.price += dish.price } else { item = { dish: dish, quantity: 1, price: dish.price } this.items.push(item) } this.totalPrice += dish.price }, removeItem(index) { let item = this.items[index] this.items.splice(index, 1) this.totalPrice -= item.price }, submitOrder() { let orderItems = this.items.map(item => { return { dishId: item.dish.id, quantity: item.quantity, price: item.price } }) // 调用后端API提交订单 axios.post('/api/order', orderItems).then(response => { alert('订单提交成功!') this.items = [] this.totalPrice = 0 }) } } } </script> <style scoped> .app { display: flex; flex-direction: column; height: 100%; } .header { height: 50px; line-height: 50px; text-align: center; font-size: 24px; font-weight: bold; } .main { display: flex; flex: 1; padding: 20px; } .dish-list-wrapper { flex: 1; margin-right: 20px; } .order-cart-wrapper { width: 300px; } .title { font-size: 20px; font-weight: bold; margin-bottom: 10px; } .dish { display: flex; align-items: center; height: 50px; padding: 0 20px; border-bottom: 1px solid #ccc; } .name { flex: 1; } .price { margin-left: 20px; } .order-cart { border: 1px solid #ccc; border-radius: 5px; padding: 20px; } .item { display: flex; align-items: center; height: 50px; padding: 0 20px; border-bottom: 1px solid #ccc; } .quantity { margin-left: 20px; } .price { margin-left: 20px; } .total-price { font-size: 20px; font-weight: bold; margin-top: 10px; } </style> ``` 完成以上步骤后,我们就可以启动应用并访问页面了,可以看到一个简单的点餐系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值