首页 > 代码库 > 学生选课系统----StudentWindow

学生选课系统----StudentWindow

  

/** * @author 李佩 *  * @version v1 *  * @time 2016/12/2 22:21 *  * @program 画出学生选课系统的学生界面 * */package com.csms.windows;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import java.util.List;import com.csms.dao.CourseArrangeDAO;import com.csms.dao.SelectCourseDAO;import com.csms.dao.StudentDAO;import com.csms.entity.Student;import com.csms.entity.CourseArrange;import com.csms.entity.SelectCourse;public class StudentWindow extends JFrame implements ActionListener {	// 选课系统的学生窗口界面的大小	private static final int WINDOWWIDE = 922;	private static final int WINDOWHIGH = 570;	// 从登录界面通过取出输入的用户名和用户密码,并通过查询取得该用户的所有的属性	public Student student = null;	// 判断打印课程的标志,flag!=1的时候就不能打印了,只能打印一次	private static int courseFlag = 1;	// 判断刷新选课的标志,flag!=1的时候就不能打印了,只能打印一次	private static int flushFlag = 1;	// 设置界面的table组件的变量	private JTable table = null;	private DefaultTableModel tableModel;	private JButton addFlushBtn = new JButton("刷新课程"); // 定义按钮	private JButton addSelectBtn = new JButton("确认选课"); // 定义按钮	private JTextField courseIDText = null;	// Student界面设置总函数	public StudentWindow() {		// 取得用户的所有信息		student = new StudentDAO().searchStudentAll(LoginWindow.getLoginUserName(), LoginWindow.getLoginPassword());		// 1.左部信息显示区		this.rigthInformation(student);		// 2.添加右边的信息栏边框		this.liftInformation(student);		// 3.设置窗口的属性		PublicWindowSet.windowAttribute(this, WINDOWWIDE, WINDOWHIGH, null, "学生界面窗口");	}	// 左边窗口信息栏	public void liftInformation(Student student) {		// 1).添加一个文本标签		Icon lan = new ImageIcon("src//images//icons//lan.png");		JLabel label = new JLabel(lan);		label.setBounds(-20, 2, 250, 50);		this.add(label);		// 2).添加一个照片显示的窗口		// addPhotoLabel,addLabel也是PublicWindowSet类中封装好的标签添加函数		String photoUrl = "src//images//students//" + student.getStuID() + ".jpg";		PublicWindowSet.addPhotoLabel(this, 40, 70, 130, 170, photoUrl);		// 添加学生信息标签		PublicWindowSet.addLabel(this, 16, 40, 243, 200, 40, "姓名:   " + student.getStuName());		PublicWindowSet.addLabel(this, 16, 40, 263, 200, 40, "学号:   " + student.getStuID());		PublicWindowSet.addLabel(this, 16, 40, 283, 200, 40, "年龄:   " + student.getStuAge());		PublicWindowSet.addLabel(this, 16, 40, 303, 200, 40, "性别:   " + student.getStuGender());		PublicWindowSet.addLabel(this, 16, 40, 323, 200, 40, "班级:   " + student.getStuClass());		PublicWindowSet.addLabel(this, 16, 40, 343, 200, 40, "学院:   " + student.getStuSdept());		// 3).设置按钮		// 修改密码按钮		Icon psdIcon = new ImageIcon("src//images//icons//fixpsd.png");		this.addButton(psdIcon, 1, 390, this);		// 已选课程按钮		Icon selectIcon = new ImageIcon("src//images//icons//seecourse.png");		this.addButton(selectIcon, 2, 430, this);		// 查看成绩按钮		Icon gradeIcon = new ImageIcon("src//images//icons//seegrade.png");		this.addButton(gradeIcon, 3, 470, this);		// 4).设置分隔标签		Icon away = new ImageIcon("src//images//icons//tree1.png");		JLabel awayLabel = new JLabel(away);		awayLabel.setBounds(200, 50, 10, 450);		this.add(awayLabel);	}	// 右部列表信息	public void rigthInformation(Student student) {		// 设置JTabel的默认类型		this.tableModel = new DefaultTableModel(new CourseList().userInfo, new CourseList().titles);		// 添加JLabel组件		this.table = new JTable(this.tableModel);		// 禁止JLabel组件随着窗口的大小而改变		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);		// JTabel组件表格的显示尺寸		table.setPreferredScrollableViewportSize(new Dimension(690, 0));		// 使列表不可以整列的进行移动		table.getTableHeader().setReorderingAllowed(false);		// 使列表框不可被编辑		table.enable(false);		// 给JTabel组件添加滑动条		JScrollPane scr = new JScrollPane(this.table);		// 设置面板		JPanel toolBar = new JPanel();		// 添加底部信息提示标签		Icon bottom = new ImageIcon("src//images//icons//bottom.jpg");		JLabel bottomLab = new JLabel(bottom);		toolBar.add(bottomLab);		// 添加课程号输入文本域		courseIDText = new JTextField(25);		toolBar.add(courseIDText);		// 添加两个按钮:选课按钮和,刷新课程按钮		toolBar.add(this.addFlushBtn);		toolBar.add(this.addSelectBtn);		// 将底部操作组件添加入面板的南部区域		this.add(toolBar, BorderLayout.SOUTH);		// 将带滚动条的Tabel组件添加入面板的东部区域		this.add(scr, BorderLayout.EAST);		// 添加选课按钮和刷新课程列表按钮的响应事件		this.addFlushBtn.addActionListener(this);		this.addSelectBtn.addActionListener(this);	}	// 按钮添加方法	private void addButton(Icon icon, int flag, int high, StudentWindow sw) {		JButton button = new JButton(icon);		button.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				// 添加出发事件				switch (flag) {				case 1:					// 修改密码					new StudentFixPassWordWindows(student, sw);					break;				case 2:					// 查看已选课程					new SelectCourseWindows(courseFlag, student);					break;				case 3:					// 退选课程					new exitCourseWindows(student, 1);					break;				}			}		});		button.setBounds(35, high, 125, 30);		sw.add(button);	}	// JTabel列表属性设置类	class CourseList extends AbstractTableModel {		public String[] titles = { "序号", "课程ID", "课程名", "老师", "学时", "学分", "类型", "选课上限", "已选人数" };		public Object[][] userInfo = {}; // 定义数据		public int getRowCount() {			return 0;		}		public int getColumnCount() {			return 0;		}		public Object getValueAt(int rowIndex, int columnIndex) {			return null;		}	}	// 取得窗口的宽度	public static int getWindowwide() {		return WINDOWWIDE;	}	// 取得窗口的高度	public static int getWindowhigh() {		return WINDOWHIGH;	}	// 选课按钮和刷新按钮的时间响应机制处理函数	public void actionPerformed(ActionEvent e) {		// 刷新课程信息,从数据库中读出所有的课程信息		if (e.getSource() == this.addFlushBtn) {			if (flushFlag == 1) {				List<CourseArrange> list = new CourseArrangeDAO().searchCourseInformation();				CourseArrange arrange = null;				for (int i = 0; i < list.size(); i++) {					arrange = list.get(i);					this.tableModel.addRow(new Object[] { i + 1, arrange.getCourseID(), arrange.getCourseName(),							arrange.getCourseTeacher(), arrange.getCourseTimes(), arrange.getCourseGridits(),							arrange.getCourseType(), arrange.getCourseNumber(), arrange.getCourseSelectNumber() });				}				flushFlag++;			}		}		// 确定添加课程信息		if (e.getSource() == this.addSelectBtn) {			// 1. 取得学生的ID			String studentID = student.getStuID();			// 2. 取得所写的课程ID			String courseID = courseIDText.getText();			// 测试			System.out.println("StuID: " + studentID + " , " + "courseID: " + courseID);			// 3. 将数据刷新到数据库的已选课程表			if (courseID.length() != 0) {				int count = new SelectCourseDAO().addStudentSelectCourseInformation(studentID, courseID);			} else {				PublicWindowSet.promptPopUp("请填写课程ID,在选课!", "选课提示", this);			}		}	}	// 修改密码成功后学生窗口释放函数	public void windowDispose() {		this.dispose();	}}// 修改密码弹出框class StudentFixPassWordWindows {	JFrame frame = new JFrame();	public StudentFixPassWordWindows(Student stu, StudentWindow sw) {		frame.setLayout(null);		// 1.添加三个标签		// 添加密码框修改密码的标签		PublicWindowSet.addLabel(frame, 16, 68, 30, 80, 30, "  原密码:");		PublicWindowSet.addLabel(frame, 16, 68, 65, 80, 30, "  新密码:");		PublicWindowSet.addLabel(frame, 16, 68, 100, 80, 30, "重新输入:");		// 2.添加三个文本域		// 添加密码框修改密码的密码输入文本框		JPasswordField oldText = new JPasswordField();		JPasswordField newText = new JPasswordField();		JPasswordField reEText = new JPasswordField();		PublicWindowSet.addTextField(oldText, 160, 30, 150, 30, frame);		PublicWindowSet.addTextField(newText, 160, 65, 150, 30, frame);		PublicWindowSet.addTextField(reEText, 160, 100, 150, 30, frame);		// 3.添加确定按钮		// 添加按钮		Icon icon = new ImageIcon("src//images//icons//confirmFix.png");		JButton confirmBtn = new JButton(icon);		// 设置位置		confirmBtn.setBounds(150, 150, 125, 30);		// 添加进面板		frame.add(confirmBtn);		confirmBtn.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				// 添加修改密码的数据库操作				// 1. 判断原密码输入框的密码是否和元密码相同				if (oldText.getText().length() == 0) {					PublicWindowSet.promptPopUp("请输入原密码", "错误提示", frame);				} else if (newText.getText().length() == 0 || reEText.getText().length() == 0) {					PublicWindowSet.promptPopUp("请输入新密码或重复输入新密码", "错误提示", frame);				}				if (newText.getText().length() != 0 && reEText.getText().length() != 0						&& !oldText.getText().equals(stu.getLoginPSD())) {					PublicWindowSet.promptPopUp("原密码输入错误!", "更改密码提示", frame);				}				// 2. 判断新密码和原密码是否输入一致				if (newText.getText().length() != 0 && reEText.getText().length() != 0						&& !reEText.getText().equals(newText.getText())						&& oldText.getText().equals(stu.getLoginPSD())) {					PublicWindowSet.promptPopUp("两次密码输入不一致!", "更改密码提示", frame);				}				// 3. 更新密码操作				if (newText.getText().length() != 0 && reEText.getText().length() != 0						&& reEText.getText().equals(newText.getText()) && oldText.getText().equals(stu.getLoginPSD())) {					new StudentDAO().updatePassword(stu.getStuID(), newText.getText());					// 修改成功释放该窗口					frame.dispose();					// 释放学生窗口					sw.windowDispose();					// 同时调用出登录窗口					new LoginWindow();				}			}		});		PublicWindowSet.windowAttribute(frame, 420, 230, null, "密码修改窗口");	}}// 查看已选课程class SelectCourseWindows extends JFrame implements ActionListener {	private String[] columnNames = { "课程名", "老师", "学分", "成绩", "上课安排" };	private DefaultTableModel selectTableModel = null;	private static int flag;	private Student student = null;	// addTableList是PublicWindowSet中封装的table组件添加的方法	public SelectCourseWindows(int flag, Student student) {		PublicWindowSet.windowAttribute(this, 400, 180, null, "查看课程窗口");		selectTableModel = PublicWindowSet.addTableList(this, columnNames);		JButton seeBut = new JButton("查看课程");		JPanel bunPanel = new JPanel();		bunPanel.add(seeBut);		seeBut.addActionListener(this);		this.add(bunPanel, BorderLayout.SOUTH);		// 确定actionPerformed只能打印一次		this.flag = flag;		this.student = student;	}		// 添加button的时间响应机制	public void actionPerformed(ActionEvent e) {		if (flag == 1) {			List<Object> list = new CourseArrangeDAO().searchSpecificInformation(student.getStuID());			for (int i = 0; i < list.size(); i = i + 2) {				CourseArrange ca = (CourseArrange) list.get(i);				SelectCourse sc = (SelectCourse) list.get(i + 1);				selectTableModel.addRow(new Object[] { ca.getCourseName(), ca.getCourseTeacher(), ca.getCourseGridits(),						sc.getStudentGrade(), ca.getCourseArrange() });			}			flag++;		}	}}// 退选课程class exitCourseWindows extends JFrame implements ActionListener {	// 表头	private String[] columnNames = { "课程ID", "课程名", "学分", "课程安排" };	private DefaultTableModel exitTableModel = null;	static int flag = 0;	static int flagExit = 0;	JTextField text = null;	private Student student = null;	public exitCourseWindows(Student student, int flag) {		PublicWindowSet.windowAttribute(this, 300, 220, null, "退选课程窗口");		exitTableModel = PublicWindowSet.addTableList(this, columnNames);		JLabel label = new JLabel("在下框中输入退选的课程ID!");		text = new JTextField(20);		JButton exitBut = new JButton("退选");		JPanel bunPanel = new JPanel();		bunPanel.setLayout(new GridLayout(3, 1));		bunPanel.add(label);		bunPanel.add(text);		bunPanel.add(exitBut);		exitBut.addActionListener(this);		this.add(bunPanel, BorderLayout.SOUTH);		this.student = student;		this.flag = flag;	}	public void actionPerformed(ActionEvent e) {		if (flag == 1) {			List<CourseArrange> list = new CourseArrangeDAO().selectNameAndIDForCourse(student.getStuID());			for (int i = 0; i < list.size(); i++) {				exitTableModel.addRow(new Object[] { list.get(i).getCourseID(), list.get(i).getCourseName(),						list.get(i).getCourseGridits(), list.get(i).getCourseArrange() });			}			flag = 0;			flagExit = 1;		} else if (flagExit == 1) {			if (text.getText().length() == 0) {				PublicWindowSet.promptPopUp("请输入退选课程的ID!", "退选提示", this);			} else {				System.out.println(text.getText());				new SelectCourseDAO().removeCourse(text.getText());			}		}	}}

  

学生选课系统----StudentWindow