1. 程式人生 > >Java實現專案電影購票系統(swing介面)

Java實現專案電影購票系統(swing介面)

       使用三層架構實現電影購票系統,分使用者和管理員,使用者功能:展示電影,查詢電影(模糊查詢),檢視電影詳情,查詢場次,購買影票,訂製座位,退訂影票等功能,介面美觀漂亮,邏輯嚴謹,附加電影評論功能,訂票超過五張打0.9折的打折功能。管理員功能:影院的增刪改查,場次的增刪改查,電影的增刪改查,影票管理等。

管理員賬號:admin  密碼:admin

效果展示圖:

登入介面:

使用者主介面:

檢視熱門電影:

點選電影進入檢視詳情,可以看到該電影的所有評論,可以進行評論。

點選想看電影進入場次介面,可通過影院名查詢場次,支援模糊查詢。

選好場次進入訂座購票介面,購買票並扣取相應錢數,顯示餘額

       返回主頁,檢視我的影票,選擇影票並檢視我的評論 ,如未評論可進行評論,評論過可進行修改評論,可退訂影票,退訂成功錢會返還給使用者。

再看查詢電影功能,支援模糊查詢,也可點選海報進入電影詳情

咱們來展示下BaseDao的程式碼:

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class BaseDao {

	public static final String DRIVER = "com.mysql.jdbc.Driver";
	public static final String URL = "jdbc:mysql://localhost:3306/tickets";

	// 載入驅動,只需載入一次
	static {
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 獲得連線
	public Connection getConn() {
		Connection conn = null;

		try {
			conn = DriverManager.getConnection(URL, "root", "123456");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}

	// 關閉所有
	public void releaseAll(ResultSet rs, PreparedStatement pstmt, Connection conn) {

		try {
			if (rs != null) {
				rs.close();
			}
			if (pstmt != null) {
				pstmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	// 增刪改 封裝
	public boolean operUpdate(String sql, List<Object> params) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		int res = 0;

		// 獲得與資料庫的連線物件
		conn = getConn();

		try {

			pstmt = conn.prepareStatement(sql);

			if (params != null) {
				for (int i = 0; i < params.size(); i++) {

					pstmt.setObject(i + 1, params.get(i));

				}

			}
			// 增刪改的統一方法

			res = pstmt.executeUpdate();
			//返回的是sql在資料庫中影響的行數
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			releaseAll(null, pstmt, conn);
		}

		return res > 0 ? true : false;

	}

	public <T> List<T> operQuery(String sql, List<Object> params, Class<T> cls) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<T> list = new ArrayList<T>();
		conn = getConn();

		try {
			pstmt = conn.prepareStatement(sql);

			if (params != null) {
				for (int i = 0; i < params.size(); i++) {

					pstmt.setObject(i + 1, params.get(i));

				}

			}
			// 增刪改的統一方法

			rs = pstmt.executeQuery();
			ResultSetMetaData rsmd = rs.getMetaData();
			while (rs.next()) {
				T m = cls.newInstance();

				for (int i = 0; i < rsmd.getColumnCount(); i++) {
					String col_name = rsmd.getColumnName(i + 1);

					Object value = rs.getObject(col_name);

					Field field;

					field = cls.getDeclaredField(col_name);

					field.setAccessible(true);
					field.set(m, value);
				}
				list.add(m);
			}
		}

		catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			releaseAll(rs, pstmt, conn);
		}
		return list;

	}

}

該專案介面美觀,程式碼封裝性良好,邏輯嚴密,僅供參考。如有疑問可加我qq:943420328

若發現bug,請大佬指正。