Java 基于JFrame的一个简单学生成绩管理系统(内含详细注释)

/*
 * 若尘
 */
package demo;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * 
 * @author ruochen
 * @version 1.0
 */
public class Test extends JFrame{

	/**
	 * 
	 */
	private static final long serialVersionUID = -303244674232669473L;

	Container c = this.getContentPane();
	
	Student[] stu = new Student[10];
	int count = 0;
	JTabbedPane jtab = new JTabbedPane();
	JTextField tNumberIn = new JTextField(8);
	JTextField tScoreIn = new JTextField(8); 
	JTextField tNumberQuery = new JTextField(8);
	JTextField tScoreQuery = new JTextField(8);
	JTextArea textArea = new JTextArea(5, 20);
	
	JButton bIn, bSort, bQuery;
	
	/**
	 * 构造函数初始化
	 */
	public Test() {
		
		for (int i = 0; i < stu.length; i++) {
			stu[i] = new Student();
		}
		
		/**--------------------- 建立输入面板 --------------------- **/
		JPanel panel1 = new JPanel();
		panel1.setLayout(new BorderLayout());
		
		JPanel panel11 = new JPanel();
		JLabel lNumberIn = new JLabel("请输入学号: ");
		panel11.setLayout(new FlowLayout());
		panel11.add(lNumberIn);
		panel11.add(tNumberIn);
		
		JPanel panel12 = new JPanel();
		JLabel lScoreIn = new JLabel("请输入成绩: ");
		panel12.setLayout(new FlowLayout());
		panel12.add(lScoreIn);
		panel12.add(tScoreIn);
		
		bIn = new JButton("确认");
		panel1.add(panel11, BorderLayout.NORTH);
		panel1.add(panel12, BorderLayout.CENTER);
		panel1.add(bIn, BorderLayout.SOUTH);
		
		bIn.addActionListener(new InActionListener());
		
		jtab.addTab("输入成绩", null, panel1, null);
		// 设置选项卡索引
		jtab.setSelectedIndex(0);
		
		
		/**--------------------- 建立排序面板 --------------------- **/
		JPanel panel2 = new JPanel();
		bSort = new JButton("排序");
		textArea.setEditable(false);
		// 设置水平和垂直方向滚动条总是出现
		JScrollPane scrollPane = new JScrollPane(textArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
		// 将panel2的布局设置为GirdBagLayout
		GridBagLayout gridBagLayout = new GridBagLayout();
		panel2.setLayout(gridBagLayout);
		GridBagConstraints constraints = new GridBagConstraints();
		// 水平方向最后一个组件
		// 根据前一个组件而决定当前组件的相对放置方式
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		// 当格子有剩余空间时,填充空间
		constraints.fill = GridBagConstraints.BOTH;
		// 窗口放大时,长度和宽度
		constraints.weightx = 1.0;
		constraints.weighty = 1.0;
		gridBagLayout.setConstraints(scrollPane, constraints);
		
		constraints.fill = GridBagConstraints.HORIZONTAL;
		gridBagLayout.setConstraints(bSort, constraints);
		panel2.add(scrollPane);
		panel2.add(bSort);
		
		bSort.addActionListener(new SortActionListener());
		jtab.addTab("成绩排序", null, panel2, null);
		
		
		/**--------------------- 建立输出面板 --------------------- **/
		JPanel panel3 = new JPanel();
		panel3.setLayout(new BorderLayout());	
		
		JPanel panel31 = new JPanel();
		JLabel lNumberQuery = new JLabel("请输入学号: ");
		panel31.setLayout(new FlowLayout());
		panel31.add(lNumberQuery);
		panel31.add(tNumberQuery);
		
		JPanel panel32 = new JPanel();
		JLabel lScoreQuery = new JLabel("您的成绩为: ");
		panel32.setLayout(new FlowLayout());
		panel32.add(lScoreQuery);
		panel32.add(tScoreQuery);
		
		bQuery = new JButton("查询");
		panel3.add(panel31, BorderLayout.NORTH);
		panel3.add(panel32, BorderLayout.CENTER);
		panel3.add(bQuery, BorderLayout.SOUTH);
		
		jtab.addTab("成绩查询", null, panel3, null);
		
		bQuery.addActionListener(new QueryActionListener());
		c.setLayout(new GridLayout(1, 1));
		c.add(jtab);
		this.setLocation(500, 500);
		this.setSize(300, 300);
		this.setVisible(true);
	}
	
	public static void main(String[] args) {
		new Test();
	}
	
	/**
	 * 成绩输入
	 * @author ruochen
	 * @version 1.0
	 */
	class InActionListener implements ActionListener{
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			if (e.getSource() == bIn) {
				if (count < stu.length) {
					stu[count].name = tNumberIn.getText();
					int scoreIn = Integer.parseInt(tScoreIn.getText());
					stu[count].score = scoreIn;
					System.out.println(stu[count].score);
					count++;
				}
			}
			tNumberIn.setText("");
			tScoreIn.setText("");
		}
	}
	
	/**
	 * 成绩排序
	 * @author ruochen
	 * @version 1.0
	 */
	class SortActionListener implements ActionListener{
		
		@Override
		public void actionPerformed(ActionEvent e) {
			
			Student temp;
			String str = " ";
			for (int i = 0; i < stu.length; i++) {
				for (int j = i + 1; j < stu.length; j++) {
					if (stu[i].score < stu[j].score) {
						temp = stu[i];
						stu[i] = stu[j];
						stu[j] = temp;
					}
				}
			}
			textArea.setText("学号               成绩\n");
			for (int i = 0; i < stu.length; i++) {
				if (stu[i].name != null) {
					str = str + stu[i].name + "      " + stu[i].score + "\n";
				}
			}
			textArea.append(str);
		}
	}
	
	/**
	 * 查找
	 * @author ruochen
	 * @version 1.0
	 */
	class QueryActionListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			String str = tNumberQuery.getText();
			if (e.getSource() == bQuery) {
				// 遍历stu,查看对应的成绩
				int i;
				for (i = 0; i < stu.length; i++) {
					if (str.equals(stu[i].name)) {
						tScoreQuery.setText(String.valueOf(stu[i].score));
						tScoreQuery.setEditable(false);
						break;
					}
				}
				if (i >= stu.length) {
					// 弹出一个对话框,提示要查找的人不存在
					int mes = JOptionPane.PLAIN_MESSAGE;
					JOptionPane.showMessageDialog(bQuery, "该学生不存在 !", "提示", mes);
				}
			}
			
		}
	}
	
	
}
  
  • 运行结果
    在这里插入图片描述
发布了266 篇原创文章 · 获赞 335 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_29339467/article/details/105666547