提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 题目描述
  • 一、题目分析
  • 二、难点及解决方案
    • 1.文件读取出的字符串是一整行的数据,包含了学生的姓名、学号和成绩,如何处理数据,使得可以进行后续的排序等操作。
  • 三、程序效果及代码展示
    • 1.程序效果
    • 2.代码展示
  • 总结

题目描述

使用字符流和和GUI类 编程实现以下功能:
(1)设计图形化界面,至少包括文本类控件类。接收从键盘输入姓名、学号、成绩,并保存到文本文件中,重复进行。
(2)从文件中读取各学生的成绩,并计算所有学生成绩的平均值、最大值和最小值,排序后输出到另一文本文件。


一、题目分析

本题需求:
1.接收键盘输入的学生信息
2.保存到文件
3.读取已经保存的文件,对里面内容进行排序,找出最大值,最小值和平均值,并将排序好的内容保存到另一个文件。
实现方法:
1.给文本框添加事件监听,以实现学生信息的获取
2.页面布局采用盒式布局,可让结构更加规整


二、难点及解决方案

1.文件读取出的字符串是一整行的数据,包含了学生的姓名、学号和成绩,如何处理数据,使得可以进行后续的排序等操作。

因为数据之间是由空格隔开,我们可以利用String类的split方法,将数据切分为几个部分,并存在字符串数组中即可。


三、程序效果及代码展示

1.程序效果

2.代码展示

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;//引入程序所要使用到的包class MyFrame extends JFrame{/*** */private static final long serialVersionUID = 1L;JPanel p1;//面板Button bt1 ,bt2 ,bt3;//按钮JLabel l1 ,l2 ,l3 ,l4 ,l5 ,l6 ,l7 ,l8 ,l9;//标签JTextField t1 ,t2 ,t3 ,t4 , t5 ,t6;//文本框JTextArea ta1 ,ta2;//文本区Box boxTop;Box boxH;Box boxV1 ,boxV2 ,boxV3;Box boxHOne, boxHTwo ,boxHThree;Box boxVOne ,boxVTwo ,boxVThree ,boxVFour ,boxVFive ,boxVSix;//BoxLayout布局MyCommandListener listener1 ,listener2 ,listener3;//监听public MyFrame() {this.setBounds(250, 150, 780, 350);//位置及大小this.setTitle("学生管理界面");//窗口名称this.setLayout(new FlowLayout(0));//流式布局init1();init2();init3();//初始化this.setVisible(true);//是否可见}void init1() {//初始化第一部分//用于输入信息 及操作p1 = new JPanel();boxH = Box.createHorizontalBox();boxV1 = Box.createVerticalBox();boxHOne = Box.createHorizontalBox();boxHTwo = Box.createHorizontalBox();boxVOne = Box.createVerticalBox();boxVTwo = Box.createVerticalBox();boxVThree = Box.createVerticalBox();boxVFour = Box.createVerticalBox();//创建一些盒子l1 = new JLabel("姓名:");l2 = new JLabel("学号:");l3 = new JLabel("成绩:");bt1 = new Button("提交数据");bt2 = new Button("查询成绩");bt3 = new Button("清空文件");boxVOne.add(l1);boxVOne.add(l2);boxVOne.add(l3);t1 = new JTextField(10);t2 = new JTextField(10);t3 = new JTextField(10);boxVTwo.add(t1);boxVTwo.add(t2);boxVTwo.add(t3);boxHOne.add(boxVOne);boxHOne.add(Box.createHorizontalStrut(10));boxHOne.add(boxVTwo);boxVThree.add(bt1);boxVThree.add(Box.createVerticalStrut(10));boxVThree.add(bt2);boxVThree.add(Box.createVerticalStrut(10));boxVThree.add(bt3);l4 = new JLabel("状态栏");boxVFour.add(l4);l4.setAlignmentX(Component.CENTER_ALIGNMENT);//设置居中boxVFour.add(Box.createVerticalStrut(10));ta1 = new JTextArea(10,20);ta1.setLineWrap(true);boxVFour.add(ta1);boxHTwo.add(boxVThree);boxHTwo.add(Box.createHorizontalStrut(10));//设置水平距离boxHTwo.add(boxVFour);boxV1.add(boxHOne);boxV1.add(Box.createVerticalStrut(20));//设置竖直距离boxV1.add(boxHTwo);boxH.add(boxV1);//将他们组合起来}void init2(){//第二部分初始化//用于显示排名信息boxV2 = Box.createVerticalBox();l5 = new JLabel("排名");ta2 = new JTextArea(10,20);boxV2.add(l5);l5.setAlignmentX(Component.CENTER_ALIGNMENT);boxV2.add(Box.createVerticalStrut(10));//竖直距离boxV2.add(ta2);boxH.add(Box.createHorizontalStrut(50));//水平距离boxH.add(boxV2);}void init3() {//第三部分初始化//成绩汇总 和成绩情况boxV3 = Box.createVerticalBox();boxVFive = Box.createVerticalBox();boxVSix = Box.createVerticalBox();boxHThree = Box.createHorizontalBox();l6 = new JLabel("汇总信息");boxV3.add(l6);l6.setAlignmentX(Component.CENTER_ALIGNMENT);boxV3.add(Box.createVerticalStrut(10));l7 = new JLabel("平均分:");l8 = new JLabel("最大值:");l9 = new JLabel("最小值:");t4 = new JTextField(10);t5 = new JTextField(10);t6 = new JTextField(10);boxVFive.add(l7);boxVFive.add(Box.createVerticalStrut(100));boxVFive.add(l8);boxVFive.add(Box.createVerticalStrut(100));boxVFive.add(l9);boxVSix.add(t4);boxVSix.add(Box.createVerticalStrut(90));boxVSix.add(t5);boxVSix.add(Box.createVerticalStrut(90));boxVSix.add(t6);boxHThree.add(boxVFive);boxHThree.add(Box.createHorizontalStrut(10));boxHThree.add(boxVSix);boxV3.add(boxHThree);boxH.add(Box.createHorizontalStrut(50));boxH.add(boxV3);boxV1.setBorder(BorderFactory.createLineBorder(Color.cyan));boxV2.setBorder(BorderFactory.createLineBorder(Color.cyan));boxV3.setBorder(BorderFactory.createLineBorder(Color.cyan));p1.add(boxH);this.add(p1);}void setMyCommandListener(MyCommandListener listener1,MyCommandListener listener2,MyCommandListener listener3) {this.listener1 = listener1;//添加事件监听listener1.setJTextField(t1, t2, t3);listener1.setJTextArea(ta1);bt1.addActionListener(listener1);listener2.setJTextArea(ta1);bt3.addActionListener(listener2);listener3.setJTextArea1(ta1,ta2);listener3.setJTextField(t4, t5, t6);bt2.addActionListener(listener3);}
}interface MyCommandListener extends ActionListener{//子接口多给出三个方法 文件 和 数据展示 以及输入信息的获取public void setJTextField(JTextField text1,JTextField text2,JTextField text3);public void setJTextArea1(JTextArea ta1, JTextArea ta2);public void setJTextArea(JTextArea area1);public void OpearationFile() throws IOException;
}class Listen1 implements MyCommandListener{//第一个监视器JTextField textInput1,textInput2,textInput3;JTextArea textShow;File file1 = new File("学生信息1.txt");public void setJTextField(JTextField text1, JTextField text2, JTextField text3) {textInput1 = text1;textInput2 = text2;textInput3 = text3;text1.setText("");text2.setText("");text3.setText("");//用于清空文本框}public void setJTextArea(JTextArea area1) {textShow = area1;}public void OpearationFile() throws IOException {//对文件的操作boolean flag = true;FileWriter fw1 = new FileWriter(file1,flag);BufferedWriter bw = new BufferedWriter(fw1);bw.write(textInput1.getText());bw.write("  ");bw.write(textInput2.getText());bw.write("  ");bw.write(textInput3.getText());bw.newLine();//信息写入文件String str1 = "信息保存成功";textShow.append(str1);//追加bw.close();//关闭文件}public void actionPerformed(ActionEvent e) {//处理事件textShow.setText("");try {this.OpearationFile();} catch (IOException e1) {}textInput1.setText("");textInput2.setText("");textInput3.setText("");//用于清空文本框}@Overridepublic void setJTextArea1(JTextArea ta1, JTextArea ta2) {// TODO Auto-generated method stub}
}class Listen2 implements MyCommandListener{//第二个监视器JTextArea textShow;File file1 = new File("学生信息1.txt");public void actionPerformed(ActionEvent e) {textShow.setText("");try {this.OpearationFile();} catch (IOException e1) {}}public void setJTextField(JTextField text1, JTextField text2, JTextField text3) {}public void setJTextArea(JTextArea area1) {textShow = area1;}public void OpearationFile() throws IOException {//操作文件 主要用于清空文件FileWriter fw1 = new FileWriter(file1);BufferedWriter bw = new BufferedWriter(fw1);bw.write("");textShow.append("清空文件成功");bw.close();//关闭文件}@Overridepublic void setJTextArea1(JTextArea ta1, JTextArea ta2) {// TODO Auto-generated method stub}}class Listen3 implements MyCommandListener{//第三个监视器final int MAXMEMBER = 45;File file1 = new File("学生信息1.txt");File file2 = new File("学生信息2.txt");JTextField textInput1,textInput2,textInput3;JTextArea textShow1 ,textShow2;String str1;String str[][] = new String[MAXMEMBER][3];String str2[] = new String[5];int maxx ,minn ,aver;public void OpearationFile() throws IOException {FileReader fr1 = new FileReader(file1);BufferedReader br1 = new BufferedReader(fr1);str1 =br1.readLine();if(str1==null) {textShow2.setText("");textInput1.setText("暂无");textInput2.setText("暂无");textInput3.setText("暂无");textShow2.setText("文件为空,暂无成绩信息");//文件中无数据是输出的信息}else {int i = 0 ,j ,k;int sum = 0;while(str1 != null) {//处理文件中的字符串str2 = str1.split(" ");str[i][0]=str2[0];str[i][1]=str2[2];str[i][2]=str2[4];str1 = br1.readLine();i++;}br1.close();//System.out.println(str[1][2]);for(j = 0;j < i;j++) {sum += Integer.parseInt(str[j][2]);}aver = sum/i;for(j = 0;j < i;j++) {int t = j;for(k = j + 1;k < i;k++) {if(Integer.parseInt(str[k][2]) > Integer.parseInt(str[j][2])) {t = k;}}if(t != j) {String temp[][] = new String[MAXMEMBER][3];temp[0] = str[t];str[t] = str[j];str[j] = temp[0];}}//成绩排序 找出最大值以及最小值maxx = Integer.parseInt(str[0][2]);minn = Integer.parseInt(str[i-1][2]);FileWriter fw1 = new FileWriter(file2);try (BufferedWriter bw = new BufferedWriter(fw1)) {bw.write("");for(j = 0;j < i;j++) {bw.write(str[j][0]);bw.write("  ");bw.write(str[j][1]);bw.write("  ");bw.write(str[j][2]);bw.newLine();}bw.close();}//写入文件textShow2.setText("");for(j = 0;j < i;j++) {textShow2.append(""+(j+1));textShow2.append("、");textShow2.append(str[j][0]);textShow2.append("  ");textShow2.append(str[j][1]);textShow2.append("  ");textShow2.append(str[j][2]);textShow2.append("\n");}//排名信息textInput1.setText(Integer.toString(aver));textInput2.setText(Integer.toString(maxx));textInput3.setText(Integer.toString(minn));textShow1.append("查询成功");//System.out.println(aver);//System.out.println(maxx);//System.out.println(minn);}}public void setJTextField(JTextField text1, JTextField text2, JTextField text3) {textInput1 = text1;textInput2 = text2;textInput3 = text3;}public void setJTextArea(JTextArea area1) {}public void setJTextArea1(JTextArea area1,JTextArea area2) {textShow1 = area1;textShow2 = area2;}public void actionPerformed(ActionEvent e) {textShow1.setText("");try {this.OpearationFile();} catch (IOException e1) {}}}public class Work0405 {public static void main(String args[]) {MyFrame mf = new MyFrame();Listen1 listener1 = new Listen1();Listen2 listener2 = new Listen2();Listen3 listener3 = new Listen3();//创建监视器mf.setMyCommandListener(listener1,listener2,listener3);//添加监视器}
}

总结

希望对大家有帮助

合工大Java第四次作业第五题相关推荐

  1. 合工大JAVA实验四web_合工大JAVA实验报告.doc

    专业整理 WORD完美格式 <Java技术>实验报告 实验一: 2016 年10 月 11 日 学院 计算机与信息学院 专业班级 姓名 成绩 课程 名称 Java技术 实验项目 名 称 实 ...

  2. 2021年人工神经网络第四次作业-第五题:危险品识别

    简 介: 通过对于物品X射线数据集合的整理,挑选出15类体积比较大的物品,训练LeNet网络进行识别. 关键词: X射线,危险品识别,LeNet,Paddle #mermaid-svg-wZUMACG ...

  3. 合工大路强java第四次作业第5题

    题目: 5. 使用 字符流和和GUI类 编程实现以下功能: (1)设计图形化界面,至少包括文本类控件类.接收从键盘输入姓名.学号.成绩,并保存到文本文件中,重复进行.(2)从文件中读取各学生的成绩,并 ...

  4. 合工大路强java第四次作业第2题

    题目:2. 编写一个测试程序,用多线程计算1万以内素数之和与完全数之和的乘积. package javahomework42; import java.util.concurrent.*; impor ...

  5. 重装了java然后说找不到路径,Java第三次作业第五题

    5. [问题描述]Fibonacci序列处理 ###从文件in.txt中读取第一个数作为Fibonacci数列的开始数n,读取第二个数,作为需要写入的数的个数m.### 将从n开始的m个Fibonac ...

  6. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  7. Java第四次作业,面向对象高级特性(继承和多态)

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  8. 尚学堂Java第四章作业编码题+个人想法

    尚学堂Java第四章作业编码题+个人想法 编码题一: 编码题二: 编码题三: 终于到我想说的地方了 刚开始学习Java,刚开始学会做笔记,觉悟的可能比较晚,但没关系,我会努力的! 由于每次做作业都难理 ...

  9. 2021年人工神经网络第四次作业 - 第三题Cifar10

    简 介: 在Paddle下使用最基本的BP网络以及LeNet网络结构,测试了Cifar10数据集合.但实际运行在测试集合上的效果始终没有突破0.3,具体原因还需要进行查找. 后来经过测试,发现问题出现 ...

最新文章

  1. Spring Cloud 微服务开发系列整理
  2. vmware虚拟机redhat7.2下docker容器安装hadoop
  3. leetcode-242-有效的字母异位词
  4. OC-NSArray
  5. 【C++ Primer | 08】IO库
  6. solaris linux nfs,solaris 10 nfs服务配置
  7. java数组 规定数量_java – 如何在数组中保持不同事物的数量?
  8. 建立RHELAS4下面的Yum本地源
  9. (day 47 - 位运算 ) 剑指 Offer 65. 不用加减乘除做加法
  10. 用户空间缺页异常pte_handle_fault()分析--(上)【转】
  11. laravel validate
  12. DHCP Snooping,Dynamic ARP Inspection实现
  13. django 搭建上传文件系统——细说Form Validation(二)
  14. iOS数据恢复工具PhoneRescue for Mac中文破解版
  15. FOTOO-疫情下,企业如何线上组织活动,输出企业文化
  16. [零基础学JAVA]Java SE实战开发-37.MIS信息管理系统实战开发[文件保存](1)
  17. 嵌入式linux安装dropbear
  18. 这么简单,抄抄,改改就行啦
  19. 计算机基础——3.3 算法与程序设计语言
  20. 我们的天空 - BEYOND

热门文章

  1. 逆向世界杯直播App 央视影音-iOS客户端
  2. Nature子刊:一个从大脑结构中识别阿尔茨海默病维度表征的深度学习框架
  3. 如何Tomcat部署web应用
  4. 阿里腾讯还做不到,这30%的市场,雷军眼光更胜一筹!
  5. 众安在线荣获第十届中国证券金紫荆“最佳投资者关系上市公司”奖
  6. 在配置Intel realsense (D435i)时遇到的问题
  7. 计算机设置定时原理,可编程定时和计数器-微计算机原理-电子发烧友网站
  8. 学生台灯用led灯好还是荧光灯好?推荐几款高品质的LED灯
  9. Gerrit代码审查使用教程
  10. java硬币兑换_java程序题:把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法...