java mysql退票系统包括dao层,service层,view层
时间: 2023-08-20 11:14:53 浏览: 50
好的,针对Java MySQL退票系统,下面是一个简单的DAO层、Service层和View层的实现:
1. DAO层
DAO层负责与数据库进行交互,主要包括查询、更新、插入和删除数据等操作。在这里我们以订单为例,创建一个OrderDAO类来实现相关操作:
```
public class OrderDAO {
private Connection conn;
public OrderDAO(Connection conn) {
this.conn = conn;
}
// 查询订单信息
public Order findOrderById(int orderId) throws SQLException {
Order order = null;
String sql = "SELECT * FROM orders WHERE order_id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, orderId);
try (ResultSet rs = stmt.executeQuery()) {
if (rs.next()) {
order = new Order();
order.setOrderId(rs.getInt("order_id"));
order.setUserId(rs.getInt("user_id"));
order.setStatus(rs.getString("status"));
order.setAmount(rs.getDouble("amount"));
}
}
}
return order;
}
// 更新订单状态
public void updateOrderStatus(int orderId, String status) throws SQLException {
String sql = "UPDATE orders SET status = ? WHERE order_id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, status);
stmt.setInt(2, orderId);
stmt.executeUpdate();
}
}
// 插入订单信息
public void insertOrder(Order order) throws SQLException {
String sql = "INSERT INTO orders (user_id, amount, status) VALUES (?, ?, ?)";
try (PreparedStatement stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
stmt.setInt(1, order.getUserId());
stmt.setDouble(2, order.getAmount());
stmt.setString(3, order.getStatus());
stmt.executeUpdate();
try (ResultSet rs = stmt.getGeneratedKeys()) {
if (rs.next()) {
order.setOrderId(rs.getInt(1));
}
}
}
}
// 删除订单信息
public void deleteOrder(int orderId) throws SQLException {
String sql = "DELETE FROM orders WHERE order_id = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setInt(1, orderId);
stmt.executeUpdate();
}
}
}
```
2. Service层
Service层负责业务逻辑的处理,主要包括对DAO层的调用和数据处理等。在这里我们以OrderService类来实现相关操作:
```
public class OrderService {
private OrderDAO orderDAO;
public OrderService(OrderDAO orderDAO) {
this.orderDAO = orderDAO;
}
// 查询订单信息
public Order findOrderById(int orderId) throws SQLException {
return orderDAO.findOrderById(orderId);
}
// 更新订单状态
public void updateOrderStatus(int orderId, String status) throws SQLException {
orderDAO.updateOrderStatus(orderId, status);
}
// 插入订单信息
public void insertOrder(Order order) throws SQLException {
orderDAO.insertOrder(order);
}
// 删除订单信息
public void deleteOrder(int orderId) throws SQLException {
orderDAO.deleteOrder(orderId);
}
// 根据用户ID查询订单信息
public List<Order> findOrdersByUserId(int userId) throws SQLException {
List<Order> orders = new ArrayList<>();
String sql = "SELECT * FROM orders WHERE user_id = ?";
try (PreparedStatement stmt = orderDAO.getConnection().prepareStatement(sql)) {
stmt.setInt(1, userId);
try (ResultSet rs = stmt.executeQuery()) {
while (rs.next()) {
Order order = new Order();
order.setOrderId(rs.getInt("order_id"));
order.setUserId(rs.getInt("user_id"));
order.setStatus(rs.getString("status"));
order.setAmount(rs.getDouble("amount"));
orders.add(order);
}
}
}
return orders;
}
}
```
在OrderService中,我们调用了OrderDAO的相关操作,同时还添加了根据用户ID查询订单信息的方法。
3. View层
View层负责与用户进行交互,主要包括数据的展示和用户的输入等。在这里我们以控制台界面来实现相关操作:
```
public class OrderView {
private OrderService orderService;
public OrderView(OrderService orderService) {
this.orderService = orderService;
}
public void showMenu() {
System.out.println("1. 查询订单");
System.out.println("2. 更新订单状态");
System.out.println("3. 插入订单");
System.out.println("4. 删除订单");
System.out.println("5. 查询用户订单");
System.out.println("0. 退出");
}
public void run() throws IOException, SQLException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
showMenu();
System.out.print("请选择操作:");
String option = reader.readLine();
if (option.equals("1")) {
System.out.print("请输入订单号:");
int orderId = Integer.parseInt(reader.readLine());
Order order = orderService.findOrderById(orderId);
if (order != null) {
System.out.println(order);
} else {
System.out.println("订单不存在");
}
} else if (option.equals("2")) {
System.out.print("请输入订单号:");
int orderId = Integer.parseInt(reader.readLine());
System.out.print("请输入订单状态:");
String status = reader.readLine();
orderService.updateOrderStatus(orderId, status);
} else if (option.equals("3")) {
System.out.print("请输入用户ID:");
int userId = Integer.parseInt(reader.readLine());
System.out.print("请输入订单金额:");
double amount = Double.parseDouble(reader.readLine());
Order order = new Order();
order.setUserId(userId);
order.setAmount(amount);
order.setStatus("未支付");
orderService.insertOrder(order);
System.out.println("订单已生成,订单号为:" + order.getOrderId());
} else if (option.equals("4")) {
System.out.print("请输入订单号:");
int orderId = Integer.parseInt(reader.readLine());
orderService.deleteOrder(orderId);
System.out.println("订单已删除");
} else if (option.equals("5")) {
System.out.print("请输入用户ID:");
int userId = Integer.parseInt(reader.readLine());
List<Order> orders = orderService.findOrdersByUserId(userId);
if (orders.isEmpty()) {
System.out.println("用户没有订单");
} else {
for (Order order : orders) {
System.out.println(order);
}
}
} else if (option.equals("0")) {
break;
} else {
System.out.println("无效操作");
}
}
}
}
```
在OrderView中,我们通过控制台界面展示菜单,并根据用户的输入调用OrderService的相关方法进行操作。同时注意要处理异常,以保证程序的稳定性。