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技术站