📄 mainframe.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 + -