资源描述
软 件 学 院
课程设计汇报书
课程名称 面向对象程序设计
设计题目 敏感词汇分析程序
专业班级
学 号
姓 名
指导老师
6 月
目录
1 设计时间 2
2 设计目标 2
3设计任务 2
4 设计内容 2
4.1 需求分析 2
4.1.1 问题描述 2
4.1.2 基础要求 2
4.2 总体设计 2
4.2.1 包描述 3
4.2.2 类描述 4
4.2.3 类之间关系 6
4.3 具体设计 6
4.3.1 类图 6
4.4 测试和分析 8
4.5 程序代码 12
5总结和展望 18
参考文件 19
课程设计成绩评定 19
1 设计时间
6月13日-6月19日
2 设计目标
《面向对象程序设计》是一门实践性很强计算机专业基础课程,课程设计是学习完该课程后进行一次较全方面综合练习。其目标在于经过实践加深学生对面向对象程序设计理论、方法和基础知识了解,掌握使用Java语言进行面向对象设计基础方法,提升利用面向对象知识分析实际问题、处理实际问题能力,提升学生应用能力。此次课程设计,重温了java界面生成、字节流输入输出、循环语句应用等等。
3设计任务
敏感词汇分析程序。要求以下:
(1)使用图形用户界面实现。
(2)任意选择一个文本文件,分析该文件,假如存在敏感词汇,汇报每个词出现次数。
(3)敏感词汇保留在sentive.txt文件中,每个词占一行,最少设置10个敏感词汇。
(4)系统使用GUI组件不得少于5种,越全方面越好,但要适宜(友好界面)。
4 设计内容
4.1需求分析
4.1.1问题描述
(1)实现一个图形用户界面;
(2)敏感词汇文件;
(3)能够输入任意文本,然后进行分析,找出敏感词汇出现次数;
(4)也能够打开已存在文本文件,一样进行分析;
4.1.2基础要求
(1)使用图形用户界面实现;
(2)任意选择一个文本文件,分析该文件,假如存在敏感词汇,汇报每个词出现次数;
(3)任意编辑一个文本文件,分析该文件,假如存在敏感词汇,汇报每个词出现次数;
(4)敏感词汇保留在sentive.txt文件中,每个词占一行,最少设置10个敏感词汇;
(5)系统使用GUI组件不得少于5种,越全方面越好,但要适宜(友好界面);
4.2总体设计
4.2.1 包描述
主程序:MinGanCiHui.java
import java.awt.Button; //创建一个标签按钮
import java.awt.Color; //用于封装默认 sRGB 颜色空间中颜色
import java.awt.GridLayout; //布局处理器,它以矩形网格形式对容器组件进行部署。
import java.awt.Label; //Label 对象是一个可在容器中放置文本组件。
import java.awt.Panel; //Panel 是最简单容器类,面板。
import java.awt.event.ActionEvent; // 用于激活组件
import java.awt.event.ActionListener; //时间监听器
import javax.swing.JFrame; //java.awt.Frame扩展版本
分析程序:Fenx.java
Import java.io.BufferedReader; //从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行高效读取。
import java.io.FileReader; //用来读取字符文件便捷类。
import java.util.ArrayList; //是List接口一个可变长数组实现,实现了全部List接口操作,并许可存放null值。
import java.util.List; //让集合长度能自动改变,能够增加/删除元素
它是JAVA自带接口。
import java.util.regex.Matcher; // Matcher 类实例用于匹配字符序列和给定模式。
import java.util.regex.Pattern; // Pattern 类实例采取类似于 Perl 语法来表示以字符串形式指定正则表示式。
显示敏感词汇文件:Shows.java
import java.io.BufferedReader; ////从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行高效读取。
import java.io.FileReader; //用来读取字符文件便捷类。
import java.io.IOException; //当发生某种 I/O 异常时,抛出此异常。
import javax.swing.JFrame; // java.awt.Frame扩展版本。
import javax.swing.JTextArea; //一个显示纯文本多行区域。
测试菜单程序:TestJMenu.java
import java.awt.event.ActionEvent; //用于激活组件。
import java.awt.event.ActionListener; //时间监听器。
import java.io.File; //文件和目录路径名抽象表示形式。
import java.io.FileInputStream; // FilterInputStream 包含其它部分输入流,它将这些流用作其基础数据源,它能够直接传输数据或提供部分额外功效。
import javax.swing.JFileChooser; //为用户选择文件提供了一个简单机制。
import javax.swing.JFrame; // java.awt.Frame 扩展版本,该版本添加了对 JFC/Swing 组件架构支持。
import javax.swing.JMenu; //菜单该实现是一个包含 JMenuItem 弹出窗口,用户选择 JMenuBar 上项时会显示该 JMenuItem。
import javax.swing.JMenuBar; //菜单栏实现。
import javax.swing.JMenuItem; //菜单中项实现。
import javax.swing.JTextArea; // JTextArea 是一个显示纯文本多行区域。
4.2.2 类描述
1、MinGanCiHui
(1)类名:MinGanCiHui
作用:主类
(2)关键组员变量说明:
Button b1=new Button("我要查看"); //点击能够查看敏感词汇文件
Button b2=new Button("确定"); //点击输入文本,进行敏感词汇分析
(3)关键组员方法说明:
b1.addActionListener(); //对 “我要查看”按钮进行事件监听
b2.addActionListener(); //对 “确定”按钮进行事件监听
2、Fenx
(1)类名:Fenx
作用:对输入文本进行敏感词汇分析,或对打开文本文件进行词汇分析。
(2)异常处理:处理文件读取异常。
(3)关键组员变量说明:
String filterText = new String(); //创建一个字符串
BufferedReader br = new BufferedReader(reader); //以字符形式获取打开文件内容
List listWord = new ArrayList(); //设为敏感词汇数组,匹配使用
(4)关键组员方法说明:
Ppile(regex, flags) //进行匹配
3、Shows
(1)类名:Shows
作用:经过JFrame显示敏感词汇文本
继承父类:JFrame
(2)异常处理:文件读取异常处理
(3)关键组员变量说明:
static JTextArea ss; //文本显示
(4)关键组员方法说明:
public static String filein() //获取文件中字符
4、TestJMenu
(1)类名:TestJMenu
作用:分析文本或文本文件中敏感词汇出现次数
继承父类:JFrame
(2)实现接口:ActionListener
(3)关键组员变量说明:
JTextArea jta=new JTextArea(); //多行纯文本区域
JMenuItem jmiOpen=new JMenuItem("打开"); //打开已存在文本文件
JMenu jmFenxi=new JMenu("分析"); //分析目前文本中敏感词汇出现
(4)关键组员方法说明:
jmiSure.addActionListener(new ActionListener()) //对分析按钮进行事件监听
public void actionPerformed(ActionEvent e) //对打开按钮进行事件监听
4.2.3类之间关系
MinGanCiHui
Shows
Fenx
TestJMenu
4.3具体设计
4.3.1类图
(1)主类 MinGanCiHui
图4.3.1-1
(2)TestJMenu
图4.3.1-2
(3)Fenx
图4.3.1-3
(4)Shows
图4.3.1-4
4.4测试和分析
(1)主程序面板
图4.4-1
(2)点击 我要查看,查看敏感词汇
图4.4-2
(3)点击主面板确实定,进入分析主程序
图4.4-3
(4)在文本框中输入文本
图4.4-4
(5)点击分析中确实定按钮
图4.4-5
(6)显示分析结果
图4.4-6
(7)从文件中选择以存在文本文件进行分析
图4.4-7
(8)显示打开文本文件
图4.4-8
(9)进行分析
图4.4-9
4.5 程序代码
import java.awt.Button;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
public class MinGanCiHui {
public static void main(String args[]) {
JFrame f1 = new JFrame("敏感词分析程序");
f1.setBounds(100, 100, 500, 400);
f1.setBackground(Color.lightGray);
f1.setLayout(new GridLayout(2, 1));
Panel p1 = new Panel();
f1.add(p1);
Panel p2 = new Panel();
f1.add(p2);
f1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Label l2 = new Label("敏感词汇保留在sensitive.txt文件中,查看敏感词汇请点击:");
p1.add(l2);
Button b1 = new Button("我要查看");
p1.add(b1);
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Shows s = new Shows();
}
});
Label l1 = new Label("请输入含有敏感词文本文件,点确定进入:");
p2.add(l1);
Button b2 = new Button("确定");
p2.add(b2);
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TestJMenu jmFrame = new TestJMenu();
}
});
f1.setVisible(true);
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
public class TestJMenu extends JFrame implements ActionListener {
JTextArea jta = new JTextArea();
TestJMenu() {
this.setSize(400, 300);
JMenuBar jmb = new JMenuBar();
this.setTitle("分析程序");
// 创建菜单栏
JMenu jmFile = new JMenu("文件");
JMenuItem jmiNew = new JMenuItem("新建");
JMenuItem jmiOpen = new JMenuItem("打开");
jmiOpen.addActionListener(this);
jmFile.add(jmiNew);
jmFile.add(jmiOpen);
JMenu jmFenxi = new JMenu("分析");
JMenuItem jmiSure = new JMenuItem("确定");
JMenuItem jmiCancel = new JMenuItem("取消");
jmFenxi.add(jmiSure);
jmFenxi.add(jmiCancel);
JMenu jmHelp = new JMenu("帮助");
jmb.add(jmFile);
jmb.add(jmFenxi);
jmb.add(jmHelp);
this.setJMenuBar(jmb);
this.getContentPane().add(jta);
this.setVisible(true);
// 设置事件监听,假如点击了分析中确实定,表明要进行分析测试
jmiSure.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String filterText = jta.getText();
try {
jta.setText(Fenx.getFilterText(filterText));
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
}
// 对 打开 按钮进行事件监听
public void actionPerformed(ActionEvent e) {
JFileChooser jc = new JFileChooser();
if (jc.showOpenDialog(this) != 1) {
try {
File file = jc.getSelectedFile();
FileInputStream fis = new FileInputStream(file);
byte[] buf = new byte[10 * 1024];
int len = fis.read(buf);
jta.append(new String(buf, 0, len));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static void main(String[] args) {
MinGanCiHui m = new MinGanCiHui();
TestJMenu jmFrame = new TestJMenu();
// jmFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Fenx {
public static void main(String[] args) throws Exception {
String filterText = new String();
System.out.println(getFilterText(filterText));
}
public static String getFilterText(String filterText) throws Exception {
List listWord = new ArrayList();
FileReader reader = new FileReader("d:/sensitive.txt");
BufferedReader br = new BufferedReader(reader);
String s = null;
while ((s = br.readLine()) != null) {
listWord.add(s.trim());
}
br.close();
reader.close();
Matcher m = null;
String str1 = new String();
for (int i = 0; i < listWord.size(); i++) {
int num = 0;
Pattern p = Ppile(listWord.get(i).toString(),
Pattern.CASE_INSENSITIVE);
StringBuffer sb = new StringBuffer();
m = p.matcher(filterText);
while (m.find()) {
m.appendReplacement(sb, "*");
num++;
}
str1 = '\n' + "敏感词 " + p.toString() + " 出现:" + num + "次";
m.appendTail(sb);
filterText = sb.toString();
filterText += str1;
}
return filterText;
}
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class Shows extends JFrame {
static JTextArea ss;
JFrame j1;
Shows() {
ss = new JTextArea();
j1 = new JFrame("敏感词汇文本显示窗口");
String ss1 = filein();
j1.add(ss);
j1.setSize(500, 400);
j1.setVisible(true);
}
public static String filein() {
String f = "d:/sensitive.txt";
String str = "";
int i = 0;
try {
BufferedReader br = new BufferedReader(new FileReader(f));
while ((str = br.readLine()) != null) {
i++;
str = str + "\n";
ss.append(str);
}
} catch (IOException e) {
e.getStackTrace();
}
return str;
}
}
5总结和展望
经过java课程学习以后,对于java这门优异编程语言有了更深层次认识,在学习过程中,经过老师教学指导、课外对相关知识阅读和上机实际操作,对于它含有面向对象、和平台无关、安全、稳定和多线程等特点,有了更深刻更直观认识和了解。
这次课程设计因为时间不长,对相关知识了解还不是很透彻,致使在这次课程设计过程中,碰到了很多问题。诸如,监控定义:是否能够在一个监控器里再次添加一个监控器,和在分析过程中怎样匹配等。
能够说,这次课程设计过程中,我收获了很多。从接到课程设计题目开始,到需求分析,开发工具选择,最终到系统设计思绪,关键代码设计,每一步全部认真思索分析完成。有点遗憾是,起初在设计时原本计划能愈加完善部分功效设计,但因为确实有些难度就此作罢。在以后学习中,我会深入加深对于java了解和使用,经过阅读相关致使拓宽自己对于java了解。
参考文件
[1] 刘万军,梁清华,王松波,宋强等编著.java程序设计[M].北京:清华大学出版社
[2] 赵玉阳.java从入门到精通[M].北京:清华大学出版社,
[3] 钱慎一.java程序设计实用教程[M].北京:科学出版社,
课程设计成绩评定
出勤
情况
缺勤次数:
课程
设计
评定
设计成绩
老师签字
展开阅读全文