Java实战之吃货联盟订餐系统

Java实战之吃货联盟订餐系统攻略

系统需求

  • 用户可以查看菜单列表信息
  • 用户可以注册账号
  • 用户可以登录进入系统
  • 用户可以选择菜品下单
  • 用户可以查看订单列表
  • 用户可以修改个人信息和密码

技术选型

  • 使用Spring Boot进行快速开发
  • 使用MyBatis进行数据库操作
  • 使用Thymeleaf进行前端页面渲染
  • 使用Spring Security进行权限管理
  • 使用Swagger进行API文档生成

数据库设计

菜品表

字段名 类型 描述
id int 自增主键
name varchar 菜品名称
price double 菜品价格
picture varchar 菜品图片
create_time timestamp 创建时间

订单表

字段名 类型 描述
id int 自增主键
user_id int 下单用户id
total double 订单总价
status int 订单状态,0-已取消,1-待付款,2-已付款,3-已完成
create_time timestamp 创建时间
update_time timestamp 更新时间

用户表

字段名 类型 描述
id int 自增主键
username varchar 用户名
password varchar 密码
real_name varchar 真实姓名
phone varchar 手机号码
create_time timestamp 创建时间
update_time timestamp 更新时间

功能实现

查看菜单列表

用户可以通过访问/menu/list页面查看菜品列表。

实现方式

@Controller
@RequestMapping("/menu")
public class MenuController {

    @Autowired
    private MenuService menuService;

    @GetMapping("/list")
    public ModelAndView getList() {
        List<Menu> menuList = menuService.getList();
        ModelAndView mav = new ModelAndView("menuList");
        mav.addObject("menuList", menuList);
        return mav;
    }
}

用户注册

用户可以通过访问/user/register页面进行账号注册。

实现方式

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/register")
    public String register() {
        return "register";
    }

    @PostMapping("/register")
    public String doRegister(User user) {
        userService.register(user);
        return "redirect:/login";
    }
}

用户登录

用户可以通过访问/login页面进行登录,如果未登录用户访问需要登录才能查看的页面,则会跳转至登录页面。

实现方式

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserService userService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/menu/**").permitAll()
            .antMatchers("/user/**").permitAll()
            .antMatchers("/order/**").hasRole("USER")
            .anyRequest().authenticated();
        http.formLogin().loginPage("/login").permitAll();
        http.logout().logoutUrl("/logout").logoutSuccessUrl("/").permitAll();
        http.csrf().disable();
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

下单

用户可以通过访问/order/create页面进行下单操作。

实现方式

@Controller
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @PostMapping("/create")
    @ResponseBody
    public String createOrder(@RequestParam("menuId") Integer menuId, 
                              @RequestParam("quantity") Integer quantity) {
        orderService.createOrder(menuId, quantity);
        return "下单成功";
    }
}

查看订单列表

用户可以通过访问/order/list页面查看订单列表。

实现方式

@Controller
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/list")
    public ModelAndView list() {
        List<OrderVO> orderList = orderService.getOrderList();
        ModelAndView mav = new ModelAndView("orderList");
        mav.addObject("orderList", orderList);
        return mav;
    }
}

修改个人信息和密码

用户可以通过访问/user/profile页面修改个人信息和密码。

实现方式

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/profile")
    public ModelAndView profile() {
        User user = userService.getCurrentUser();
        ModelAndView mav = new ModelAndView("profile");
        mav.addObject("user", user);
        return mav;
    }

    @PostMapping("/update")
    public String updateProfile(User user) {
        userService.updateProfile(user);
        return "redirect:/user/profile";
    }

    @PostMapping("/changePassword")
    public String changePassword(String oldPassword, String newPassword) {
        userService.changePassword(oldPassword, newPassword);
        return "redirect:/user/profile";
    }
}

总结

本文简要介绍了Java实战之吃货联盟订餐系统的技术选型、数据库设计和主要功能实现。此外,本文也提供了一些具体代码示例,以方便读者更好地理解和掌握本系统。如果对于任何问题还有疑问,可以查看本系统的代码仓库或者参考相关文献,或者在社区中提出问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实战之吃货联盟订餐系统 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • Java深入讲解SPI的使用

    Java深入讲解SPI的使用 什么是SPI SPI全称为Service Provider Interface,是Java提供的一种服务发现机制,它通过在classpath路径下查找META-INF/services目录中的配置文件,来实现对接口的实现类自动发现。简单来说,它为接口的实现提供了解耦、可扩展的方式。 SPI的使用步骤 1.创建接口 public …

    Java 2023年5月26日
    00
  • SpringBoot入坑笔记之spring-boot-starter-web 配置文件的使用

    SpringBoot入坑笔记之spring-boot-starter-web配置文件的使用 在Spring Boot中,我们可以使用spring-boot-starter-web依赖来快速构建Web应用程序。在本文中,我们将介绍如何使用spring-boot-starter-web依赖,并提供两个示例。 添加依赖 在pom.xml文件中添加以下依赖: &lt…

    Java 2023年5月15日
    00
  • java利用冒泡排序对数组进行排序

    下面是Java利用冒泡排序对数组进行排序的完整攻略。 一、冒泡排序的基本原理 冒泡排序是基于比较的排序算法,其基本思想是:将要排序的元素按照从小到大(或从大到小)的顺序排列,每次将相邻的两个元素比较大小,如果前面的元素比后面的元素大,则交换它们的位置,直到整个数组按照要求排列完毕。 二、Java实现冒泡排序 Java程序中可以很容易地实现冒泡排序,下面给出一…

    Java 2023年5月19日
    00
  • java中int初始化可以为0,但不能为NULL问题

    在Java中,int类型的变量可以被初始化为0,但不能被初始化为NULL。这是因为在Java中,int是原始数据类型,而NULL是引用数据类型的特殊值,不适用于原始数据类型的变量。 如果我们试图初始化一个int变量为NULL,将会得到一个编译时错误: int a = NULL; // 编译报错 相反,我们可以将int变量初始化为0: int a = 0; 在…

    Java 2023年5月19日
    00
  • Spring ProtocolResolver策略接口示例

    下面我给出关于Spring ProtocolResolver策略接口示例的详细攻略。 策略接口概述 在Spring框架中,策略(Strategy)模式是一种常见的设计模式,它可以将不同的实现算法封装在不同的策略类中,并且这些策略类可以互相替换。Spring框架充分利用了策略模式的优势,因为它可以将不同的实现逻辑分离开来,使得代码更加灵活和可扩展。 Proto…

    Java 2023年5月23日
    00
  • java生成随机字符串的两种方法

    下面是“Java生成随机字符串的两种方法”的详细讲解: 方法一:使用Java自带的Random类生成随机字符串 Java自带的Random类可以用来生成随机数,利用这个随机数可以生成随机字符串。下面是实现代码: import java.util.Random; public class RandomStringGenerator { private stat…

    Java 2023年5月26日
    00
  • Spring MVC处理方法返回值过程解析

    下面我来详细讲解一下“Spring MVC处理方法返回值过程解析”的完整攻略。 什么是Spring MVC处理方法返回值过程? Spring MVC是基于MVC结构的开发框架,其中的控制器(Controller)负责处理用户请求并返回响应结果。在Spring MVC的控制器中,方法的返回值封装成一个ModelAndView对象,其中包含了视图名、数据模型和状…

    Java 2023年5月16日
    00
  • 常见的垃圾收集器算法有哪些?

    常见的垃圾收集器算法有哪些? 在大部分编程语言中,动态内存分配是必不可少的。为了防止内存泄漏,需要进行垃圾回收(Garbage Collection,简称GC),即在进行垃圾回收时收集并释放不再需要使用的存储器资源,在内存使用过多而导致程序出现异常时,垃圾回收是很重要的。而垃圾回收主要有2类算法 — 标记-清扫(Mark and Sweep)和复制式(Cop…

    Java 2023年5月10日
    00
合作推广
合作推广
分享本页
返回顶部