使用java.swing制作一个计算综合成绩的桌面程序

1 篇文章 0 订阅

一、程序逻辑

CalculateGPA小程序主要是为了方便Windows用户计算自己的综合成绩。开发的想法源于群里有人用C++或者VB实现了计算综合成绩的小程序,这让自己感觉Java也不能落后。其实,也就是晚上花了一点时间就做出来了,整个程序的代码不多,核心代码只有50行左右。下面简单说明一下程序逻辑。

1、计算综合成绩

实现逻辑:通过 Jsoup 来解析包含成绩的HTML页面,分别获取学分(credit)、成绩(score)两组数据,并分别存储在ArrayList集合(list_credit、list_score)中。当将HTML中的所有有用数据全部解析出来,再对list_credit和list_score中的数据对应取出,计算学分、成绩加权总和(total),同时计算学分总和(total_credit),最后计算total/total_credit即为综合成绩。

2、获取用户名

解析HTML中类名为user name的标签的文本内容即可。

3、窗体界面

这个界面设计比较简单,主要是通过javax.swing包创建JFrame、JtabbedPane、JLabel、JTextField、Jbutton、JFileChooser等。这部分代码直接放在了无参构造函数中,用来初始化小程序。

4、事件监听器

小程序有两个click事件需要监听,一个是选择文件,一个是确定。点击“选择”按钮之后,触发打开文件选择器,同时将选择文件的路径输入到窗体文本中;点击“确定”按钮,触发解析HTML文本,将结果显示在窗口提示界面中。

二、源码

  • 变量定义
private static final long serialVersionUID = 1L;//Java序列化版本号
	JFrame frame = new JFrame("CalculateGPA(航空所专用)");// 框架布局
	JTabbedPane tabPane = new JTabbedPane();// 选项卡布局
	Container con = new Container();// 窗体容器
	JLabel label = new JLabel("选择文件"); //选择
	JTextField text = new JTextField();// 文件的路径
	JButton button1 = new JButton("选择");// 选择
	JFileChooser jfc = new JFileChooser();// 文件选择器
	JButton button2 = new JButton("确定");// 确定
  • 计算总成绩
public calculateGPA(){
		jfc.setCurrentDirectory(new File("d://"));// 文件选择器的初始目录定为d盘
		
		double lx = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		
		double ly = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		
		frame.setLocation(new Point((int) (lx / 2) - 150, (int) (ly / 2) - 150));// 设定窗口出现位置
		frame.setSize(400, 300);// 设定窗口大小
		frame.setContentPane(tabPane);// 设置布局
		
		label.setBounds(30, 35, 70, 20);
		text.setBounds(95, 35, 150, 20);
		button1.setBounds(250, 35, 70, 20);
		button2.setBounds(150, 90, 60, 20);
		
		button1.addActionListener(this); // 添加事件处理
		button2.addActionListener(this); // 添加事件处理
	
		con.add(label);
		con.add(text);
		con.add(button1);
		con.add(button2);
		frame.setVisible(true);// 窗口可见
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 使能关闭窗口,结束程序
		tabPane.add("欢迎使用", con);// 添加布局1
	}
  • 解析用户名
public String getUserName(File input){
		Document doc = null;
		try {
			doc = Jsoup.parse(input, "UTF-8");
		} catch (IOException e) {
			e.printStackTrace();
		}
		Elements content = doc.getElementsByClass("user name");
		String userName = content.get(0).text();
		return userName;
	}
  • 窗体界面
public calculateGPA(){
		jfc.setCurrentDirectory(new File("d://"));// 文件选择器的初始目录定为d盘
		
		double lx = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
		
		double ly = Toolkit.getDefaultToolkit().getScreenSize().getHeight();
		
		frame.setLocation(new Point((int) (lx / 2) - 150, (int) (ly / 2) - 150));// 设定窗口出现位置
		frame.setSize(400, 300);// 设定窗口大小
		frame.setContentPane(tabPane);// 设置布局
		
		label.setBounds(30, 35, 70, 20);
		text.setBounds(95, 35, 150, 20);
		button1.setBounds(250, 35, 70, 20);
		button2.setBounds(150, 90, 60, 20);
		
		button1.addActionListener(this); // 添加事件处理
		button2.addActionListener(this); // 添加事件处理
	
		con.add(label);
		con.add(text);
		con.add(button1);
		con.add(button2);
		frame.setVisible(true);// 窗口可见
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 使能关闭窗口,结束程序
		tabPane.add("欢迎使用", con);// 添加布局1
	}
  • 事件监听
public void actionPerformed(ActionEvent e) {
		
		if (e.getSource().equals(button1)) {
			jfc.setFileSelectionMode(0);// 设定只能选择到文件
			int state = jfc.showOpenDialog(null);// 此句是打开文件选择器界面的触发语句
			if (state == 1) {
				return;// 撤销则返回
			} else {
				File f = jfc.getSelectedFile();// f为选择到的文件
				text.setText(f.getAbsolutePath());
			}
		}
		if (e.getSource().equals(button2)) {
			// 弹出对话框可以改变里面的参数具体得靠大家自己去看,时间很短
			File f = jfc.getSelectedFile();
			double result =  calculate(f);
			String userName = getUserName(f);
			JOptionPane.showMessageDialog(null, userName+",您好!您的综合成绩为:"+result, "提示", 2);
		}
	}
  • 程序入口
public static void main(String[] args){
		
		new calculateGPA();
		
	}

三、小程序效果图

在这里插入图片描述
在这里插入图片描述

四、分析总结

  • 虽然Java代码是“一次编译,处处运行”,但是前提是要在各客户端事先安装有JVM,所以小程序做出来之后其实只能给Java开发用户使用。
  • 代码逻辑在HTML文件解析过程中,只是考虑了自己的成绩HTML页面的DOM结构,解析的逻辑不具备全面性,可能存在部分用户的页面DOM结构不同,导致解析失败或者有误差。
  • 小程序的JDK开发版本是1.7,可能存在其他JDK版本不兼容的问题。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值