Skip to content

banber0/expermint_four

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

expermint_four

一、实验目的

1.把选课结果写入文件保存 2.掌握继承的使用

二、业务要求

1.保持实验三的代码和readme版本不变

2.新建代码仓库,在实验三代码的基础上完成本次实验

3.业务过程同实验三,能课程打印功能

4.将课程写入文本文件,并从该文件中读取

三、基本要求

学生可以注册登录选课退课并打印课程

四、解题思路

在实验三上进行改进,使得selected_subjects.txt文件可以解析出来而不出现乱码,并且使得课程输出出来,用FileOperations类来循环读取文件内容,并加入try模块来捕捉异常操作,PrintSubjects类为打印类,并在IndexTest类中加入打印课程按钮,可以将课程打印出来到selected_subjects.txt文本中。

五、流程图

Imange text

六、关键代码

1.选课模块ChoiceSubject类

public ChoiceSubject() {
    // ... (省略部分代码)

    confirmButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            // 获取勾选的课程并将其写入文件
            String selectedSubjects = "选修的课程:";
            for (int i = 0; i < subjects.length; i++) {
                if (checkBoxes[i].isSelected()) {
                    selectedSubjects += subjects[i] + " ";
                }
            }
            // 假设当前登录的学生名字为"张三"
            FileOperations.writeFile("selected_subjects.txt", "张三: " + selectedSubjects);
            JOptionPane.showMessageDialog(null, "选课成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
            dispose();
        }
    });

    // ... (省略部分代码)
}

}'
ChoiceSubject 类允许学生选择课程,将选课结果写入文件,并提供友好的界面交互
2.文件读取FileOperations模块

import java.io.*;
import java.nio.charset.StandardCharsets;

public class FileOperations {
    public static void writeFile(String filename, String data) {
        try {
        FileOutputStream fileOutputStream = new FileOutputStream(filename, true);
        OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);//指定字符编码
            writer.write(data + "\n");
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //异常处理结构
    }

    public static String readFile(String filename) {
        StringBuilder content = new StringBuilder();
        try {
            FileInputStream fileInputStream = new FileInputStream(filename);
            InputStreamReader reader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8);//指定字符编码
            BufferedReader bufferedReader = new BufferedReader(reader);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                content.append(line).append("\n");
            }//循环读取内容  null表示文件结束
            reader.close();//关闭文件读取器
        } catch (IOException e) {
            e.printStackTrace();//文件读取发生异常 捕获异常并打印错误信息
        }
        return content.toString();//以字符串的形式返回文件内容
    }
}

对于文本的写入编码问题,使用指定的UTF-8编码:FileOutputStream fileOutputStream = new FileOutputStream(filename, true); OutputStreamWriter writer = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);这样文本会输出出来而不会出现乱码

3.PrintSubjects打印类

public class PrintSubjects extends JFrame {
    private JTextArea subjectTextArea;

    public PrintSubjects() {
        setTitle("课程打印");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        String selectedSubjects = FileOperations.readFile("selected_subjects.txt");
        //读取file 储存到selectedSubjects 
        subjectTextArea = new JTextArea(selectedSubjects);//开创文本区域内容
        subjectTextArea.setEditable(false);//不能修改文本内容

        JScrollPane scrollPane = new JScrollPane(subjectTextArea);

        add(scrollPane);
    
        // 设置窗口可见
        setVisible(true);
    }
}

String selectedSubjects = FileOperations.readFile("selected_subjects.txt")用于从文 件"selected_subjects.txt"中读取文本内容,并将其存储在selectedSubjects变量中

七、系统运行截图

1.主页面

Image text

2.登录页面,没有注册则会报错

Imange text

3.注册页面,分为学生和教师

Imange text

4.注册成功

Imange text

5.选课

Imange text

6.选课成功

Imange text

7.退课

Imange text

8.课程打印(有乱码)

Imange text Imange text

9.课程打印(无乱码)

Imange text

八、感想与体会

通过本次实验,我体会到了选课的输入输出,了解到了循环文件的读取,对于文本乱码的问题,在写入文本的时候要进行编码输出文本,这样不会有乱码的出现。在文件操作中可能出现问题,添加了异常处理模块,提高程序稳定性。对于Java有了更深刻的认识,学到很多东西,希望在未来更加努力提升自己的代码能力。

About

将选课结果写入文件保存

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages