关键词

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

本文链接:http://task.lmcjl.com/news/13134.html

展开阅读全文