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日

相关文章

  • SpringBoot如何实现Tomcat自动配置

    Spring Boot 是一个基于 Spring 的开源应用框架,它可以快速搭建大规模、高性能的 Web 应用。Spring Boot 的最大特点就是自动配置,这也是 Spring Boot 的核心功能之一。它可以自动将 Web 容器嵌入到应用中。Tomcat 是个著名的 Web 容器,Spring Boot 如何实现 Tomcat 的自动配置呢? Spri…

    Java 2023年5月19日
    00
  • 为什么继续选择DELPHI(即将逝去的Delphi前景在何方)

    为什么继续选择DELPHI(即将逝去的Delphi前景在何方) 背景 Delphi是一种基于Object Pascal编程语言的集成开发环境,由Borland公司在1995年发布。自发布以来,Delphi为数不少的开发者提供了稳定快捷、功能丰富的编程环境。然而,随着新的技术不断涌现,Delphi市场份额逐渐萎缩,导致一些人对其前景存在疑虑。但是,选择Delp…

    Java 2023年5月19日
    00
  • java统计字符串中指定元素出现次数方法

    Java统计字符串中指定元素出现次数方法攻略 在Java中统计字符串中指定元素出现次数,我们通常有以下几种方法: 1. 使用正则表达式 我们可以使用正则表达式来匹配指定元素出现的次数。下面是一个示例代码: public static int countOccurrencesUsingRegex(String str, String element) { St…

    Java 2023年5月27日
    00
  • java微信公众号开发第一步 公众号接入和access_token管理

    下面我将详细讲解Java微信公众号开发中,公众号接入和access_token管理的完整攻略。 公众号接入 公众号接入是指将你的微信公众号与微信平台进行绑定,以便在微信平台上管理和运营你的公众号。以下是接入的具体步骤: 步骤一:注册微信公众号和开发者账号 要进行公众号接入,首先需要注册一个微信公众号,并且在微信公众平台上注册一个开发者账号。 步骤二:认证公众…

    Java 2023年5月26日
    00
  • Android 运用@JvmName解决函数签名冲突问题详解

    当我们在 Kotlin 中定义具有相同名称、相同参数但返回值类型不同时的函数时,编译器会自动为这些函数生成不同的 JVM 签名。然而,在某些情况下,我们可能需要使用相同的 JVM 签名,例如与 Java 互操作、使用反射或 JNI。这时就需要用到 @JvmName 注解来解决函数签名冲突问题。 @JvmName 注解的作用是为指定的 Kotlin 函数或属性…

    Java 2023年5月26日
    00
  • 64位Windows2008系统下IIS7和Tomcat7整合共用80端口如何解决

    整合IIS7和Tomcat7共用80端口是一种常见的Web服务器配置,但对于64位的Windows2008系统,由于其内核和系统的一些限制,如果不加以特殊处理,在IIS7和Tomcat7同时运行时会遇到80端口被占用、无法访问、无法共享Session等问题。以下是在64位Windows2008系统下整合IIS7和Tomcat7共用80端口的完整攻略。 步骤一…

    Java 2023年6月15日
    00
  • Mybatis通过Mapper代理连接数据库的方法

    Mybatis是一款基于Java的ORM框架,它通过Xml或注解的方式来将Java对象与SQL语句映射起来,把对象持久化到数据库中。在Mybatis中,我们可以通过Mapper代理的方式来调用SQL语句操作数据库。下面是Mybatis通过Mapper代理连接数据库的完整攻略: 步骤一:创建数据库和数据表 首先要创建一个MySQL数据库,然后在数据库中创建一个…

    Java 2023年5月20日
    00
  • Ubuntu安装java的最简单的命令行方式(推荐)

    接下来我会为您提供Ubuntu安装Java的最简单的命令行方式的完整攻略。 步骤一:更新apt-get软件包索引 在安装任何新软件之前,我们需要先更新apt-get软件包。运行以下命令以更新apt-get软件包索引: sudo apt-get update 步骤二:安装默认的JRE/JDK Ubuntu默认已经安装OpenJDK,这是一个免费的开源实现和Ja…

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