⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainframe.java

📁 功能简介: 1.增减学生对象(该对象包含学号、姓名、分数等信息) 2.登记、编辑分数 3.计算出平均成绩 4.统计出优秀(100-90)、良好(89-75)、中等(74-60)和不及格(59-
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;

public final class MainFrame extends JFrame {

	/**
	 * 主框架的实现
	 */
	private static final long serialVersionUID = 1L;
	
	//MainFrame的构造函数
	MainFrame(int width, int height){
		
		setSize(width, height);
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension screenSize = kit.getScreenSize();
		int x = (screenSize.width-width)/2;
		int y = (screenSize.height-height)/4;
		setLocation(x,y);
		
		initPanel(width, height);
		updateList(ConnToAcc.INIT);
		registerEventListener();
		dataList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		setContentPane(mainPanel);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setTitle("学生成绩管理程序");
		setLayout(null);
		setResizable(false);
		setVisible(true);	
	}
	
	//为面板添加组件并初始化
	private void initPanel(int width, int height){
		
		mainPanel.setLayout(null);
		mainPanel.add(listLabel);
		mainPanel.add(infoArea);
		mainPanel.add(btnReFresh);
		mainPanel.add(btnAscend);
		mainPanel.add(btnDescend);
		mainPanel.add(btnInsert);
		mainPanel.add(btnDelete);
		mainPanel.add(btnEdit);
		mainPanel.add(btnAbout);
		mainPanel.add(btnQuery);
		mainPanel.add(textQuerySID);
		
		listLabel.setBounds(30,10,300,25);		
		infoArea.setBounds(10,50,width/2,height*15/20);
		
		btnReFresh.setBounds(width-240, height-150, 80, 25);
		btnAscend.setBounds(width-140, height-150, 50, 25);
		btnDescend.setBounds(width-90, height-150, 50, 25);
		btnEdit.setBounds(width-240, height-70,80, 25);
		btnInsert.setBounds(width-240, height-100, 80, 25);
		btnDelete.setBounds(width-120, height-100, 80, 25);
		btnAbout.setBounds(width-120, height-70, 80, 25);
		btnQuery.setBounds(width-140, height-180, 80, 25);
		textQuerySID.setBounds(width-240, height-180, 80, 25);
		textQuerySID.setText("在此输入学号");
	}
	
	//注册事件监听器
	public void registerEventListener(){
		dataList.addListSelectionListener(new DataListSelectionListener());		
		btnReFresh.addActionListener(new BtnReFreshActionListener());	
		btnAscend.addActionListener(new BtnAscendActionListener());	
		btnDescend.addActionListener(new BtnDescendActionListener());	
		btnInsert.addActionListener(new BtnInsertActionListener());	
		btnDelete.addActionListener(new BtnDeleteActionListener());	
		btnEdit.addActionListener(new BtnEditActionListener());	
		btnAbout.addActionListener(new BtnAboutActionListener());
		btnQuery.addActionListener(new BtnQueryActionListener());
		textQuerySID.addFocusListener(new TextQuerySIDFocusListener());
	}
	
	private class DataListSelectionListener implements ListSelectionListener{
		//数据列表的Selection事件监听器接口的实现
		public void valueChanged(ListSelectionEvent event){	
			selectedStudent = (Student)(dataList.getSelectedValue());
			//System.out.println("---选中的条目:"+selectedStudent+"----");
		}	
	}
	
	
	private class BtnReFreshActionListener implements ActionListener{
		//刷新按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			updateList(ConnToAcc.INIT);
		}
	}
	
	
	private class BtnAscendActionListener implements ActionListener{
		//升序排列按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			updateList(ConnToAcc.SORT_BY_SCORE_ASC);
		}
	}
	
	
	private class BtnDescendActionListener implements ActionListener{
		//降序排列按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			updateList(ConnToAcc.SORT_BY_SCORE_DESC);
		}
	}
	
	//添加按钮的事件监听器接口实现
	private class BtnInsertActionListener implements ActionListener{
		public void actionPerformed(ActionEvent event){
			if(addDataDialog == null)
				addDataDialog = new AddDataDialog(getFrame());
			else addDataDialog.setVisible(true);
		}
	}
	
	
	private class BtnDeleteActionListener implements ActionListener{
		//删除按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			if(JOptionPane.showConfirmDialog(null, "您选中的条目将会被删除,确认要删除吗?", "删除确认", 0, 2)==1)
				return;
			
			//后续操作
			int sid = selectedStudent.getSID();
			updateList(ConnToAcc.DELETE, sid, "", 0);
		}
	}
	
	
	private class BtnEditActionListener implements ActionListener{
		//编辑按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			openEditDialog();
		}
	}
	
	private class BtnAboutActionListener implements ActionListener{
		//关于按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			JOptionPane.showMessageDialog(null,
					"     JAVA课程设计:学生信息管理系统\n     姓名:王川     班级:电科04-1 \n     学号:0401051324",
					"关于作者",-1);
		}
	}
	
	
	private class BtnQueryActionListener implements ActionListener{
		//按学号查询按钮的事件监听器接口实现
		public void actionPerformed(ActionEvent event){
			int querySID;
			try{
				querySID = Integer.parseInt(textQuerySID.getText().trim());
			}
			catch(Exception e){
				JOptionPane.showMessageDialog(null, "输入的数据不正确:学号必须为4位数字", "输入错误", 0);
				return;
			}
			if(querySID<1000 || querySID>9999){
				JOptionPane.showMessageDialog(null, "输入的数据不正确:学号必须为4位数字", "输入错误", 0);
				return;
			}
			if(conn == null)
				conn = new ConnToAcc();
			Student queryStudent;
			queryStudent = conn.getQueryResult(querySID);
			if(queryStudent == null)
				return;
			selectedStudent = queryStudent;
			openEditDialog();
		}
	}
	
	private class TextQuerySIDFocusListener implements FocusListener{
		
		//查询输入文本框获得焦点时清空文本框内容
		public void focusGained(FocusEvent arg0) {
			textQuerySID.setText("");
		}

		//查询输入文本框失去焦点时无操作
		public void focusLost(FocusEvent arg0) {}	
	}
	
	public Student getSelectedStudent(){
		
		return selectedStudent;
	}
	
	//打开编辑对话框
	private void openEditDialog(){
		if(editDataDialog == null)
			editDataDialog = new EditDataDialog(getFrame());
		if(selectedStudent == null)
			return;
		editDataDialog.setEditStudent(selectedStudent);
		editDataDialog.setDataText(selectedStudent.getSID(),
				selectedStudent.getSName(),
				selectedStudent.getScore());
		editDataDialog.setVisible(true);
	}
	
	//刷新、排序操作后更新显示列表
	public void updateList(int type){
		//1为refresh  2为成绩升序排列  3为成绩降序排列
		switch(type){
		case ConnToAcc.INIT: sql = "SELECT * FROM "+ConnToAcc.StudentsInfomation+" ORDER BY sid"; break;
		case ConnToAcc.SORT_BY_SCORE_ASC: sql = "SELECT * FROM "+ConnToAcc.StudentsInfomation+" ORDER BY score ASC"; break;
		case ConnToAcc.SORT_BY_SCORE_DESC: sql = "SELECT * FROM "+ConnToAcc.StudentsInfomation+" ORDER BY score DESC"; break;
		}
		if(conn == null)
			conn = new ConnToAcc();
		data = conn.getData(sql);
		dataList = new JList(data);
		dataList.addListSelectionListener(new DataListSelectionListener());	
		infoArea.setViewportView(dataList);
		listLabel.setText("学号"+bs+"|"+bs+" 姓名 "+bs+"|"+bs+"分数"+bs+bs+"平均分:"+(int)(Student.averScore*10)/10.0);
		repaint();
		//System.out.println(data.length);
	}
	
	//添加、修改和删除操作后更新显示列表
	public void updateList(int type, int sid, String name, float score){
		if(conn == null)
			conn = new ConnToAcc();
		switch(type){		
		case ConnToAcc.INSERT: 
			sql = "INSERT INTO "+ConnToAcc.StudentsInfomation+" VALUES ("+sid+",'"+name+"',"+score+")"; 
			conn.DBOperation(type,sql);
			break;
		case ConnToAcc.UPDATE:
			sql = "UPDATE "+ConnToAcc.StudentsInfomation+" SET name='"+name+"' WHERE sid="+sid;
			conn.DBOperation(type,sql);
			sql =" UPDATE "+ConnToAcc.StudentsInfomation+" SET score="+score+" WHERE sid="+sid;
			conn.DBOperation(type,sql);
			break;
			
		case ConnToAcc.DELETE: 
			sql = "DELETE FROM "+ConnToAcc.StudentsInfomation+" WHERE sid="+sid; 
			conn.DBOperation(type,sql);
			break;
		default: 
			sql = "SELECT * FROM "+ConnToAcc.StudentsInfomation+" ORDER BY sid";
			conn.DBOperation(type,sql);
		}
		updateList(ConnToAcc.INIT);
		//System.out.println(data.length);   
	}
	
	//返回当前程序主框架的引用
	public MainFrame getFrame(){
		return this;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new MainFrame(600,450);
	}
	
	private ConnToAcc conn;
	
	private AddDataDialog addDataDialog;
	private EditDataDialog editDataDialog;
	private Student selectedStudent;
	private final String bs = "      ";
	private String sql;
	
	ContentPanel mainPanel =new ContentPanel();
	JLabel listLabel = new JLabel();
	Student[] data ;
	JList dataList = new JList(data);
	JScrollPane infoArea = new JScrollPane(dataList);
	JButton btnReFresh = new JButton("刷新");
	JButton btnInsert = new JButton("添加");
	JButton btnDelete = new JButton("删除");
	JButton btnEdit = new JButton("修改");
	JButton btnAscend = new JButton("升");
	JButton btnDescend = new JButton("降");
	JButton btnAbout = new JButton("关于");
	JButton btnQuery = new JButton("查询");
	JTextField textQuerySID = new JTextField(8);
}


class ContentPanel extends JPanel{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	//绘制文字及饼图
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		
		//计算并显示各种成绩等级所占百分比,若无数据则不显示
		if (Student.totalNum != 0){
			float a = (int)(Student.aGradeNum*1000/Student.totalNum)/10.0f;
			float b = (int)(Student.bGradeNum*1000/Student.totalNum)/10.0f;
			float c = (int)(Student.cGradeNum*1000/Student.totalNum)/10.0f;
			float d = (int)(Student.dGradeNum*1000/Student.totalNum)/10.0f;
			g.setColor(Color.BLUE);
			g.drawString("优秀:"+Student.aGradeNum+"("+a+"%)",360,30);
			g.setColor(Color.GREEN);
			g.drawString("良好: "+Student.bGradeNum+"("+b+"%)",460,30);
			g.setColor(Color.YELLOW);
			g.drawString("中等:"+Student.cGradeNum+"("+c+"%)",360,60);
			g.setColor(Color.RED);
			g.drawString("不及格:"+Student.dGradeNum+"("+d+"%)",460,60);
			
		
		//计算并绘制饼图,若无数据则不显示			
			int aArc = Student.aGradeNum*360*100/Student.totalNum/100;
			int bArc = Student.bGradeNum*360*100/Student.totalNum/100;
			int cArc = Student.cGradeNum*360*100/Student.totalNum/100;
			int dArc = Student.dGradeNum*360*100/Student.totalNum/100;
			
			g.setColor(Color.BLUE);
			g.fillArc(370, 80, 170, 170, 0, aArc);
			g.setColor(Color.GREEN);
			g.fillArc(370, 80, 170, 170, aArc, bArc);
			g.setColor(Color.YELLOW);
			g.fillArc(370, 80, 170, 170, aArc+bArc, cArc);
			g.setColor(Color.RED);
			g.fillArc(370, 80, 170, 170, aArc+bArc+cArc, dArc);
		}
		else {
			g.drawString("暂无数据",440,30);
			g.setColor(Color.WHITE);
			g.fillArc(370, 100, 180, 150, 0, 360);
		}
	}
	
}
//创建一个自定的面板
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -