中南大学Java实验报告.docx
- 文档编号:11334274
- 上传时间:2023-02-27
- 格式:DOCX
- 页数:13
- 大小:57.76KB
中南大学Java实验报告.docx
《中南大学Java实验报告.docx》由会员分享,可在线阅读,更多相关《中南大学Java实验报告.docx(13页珍藏版)》请在冰豆网上搜索。
中南大学Java实验报告
中南大学
JavaSE课程设计实验报告
设计题目:
对小说的人物关系文本分析
学院:
信息科学与工程学院
班级:
信息安全1201班
学号:
0909121615
姓名:
代巍
指导老师:
郭克华
一、实验目的
1、学习Java界面开发基础知识。
利用所学到的Java编程知识和编程技巧,设计一个实际的应用软件,初步认识软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为后续课程和以后的工程实践打下良好的基础。
2、掌握JAVA语言常用类包及其常用方法和JAVA语言基本语法,掌握面向对象程序设计基本要素(封装、继承、多态),解决简单的Java语言与系统设计问题。
3、掌握基于AWT的图形用户界面设计
(1)常用标准控件的使用,如标签、按钮、菜单、文本框、单选按钮、滚动条等。
(2)事件处理机制
4、掌握布局、对话框的使用,掌握事件异常的处理方法
二、实验内容
自行下载自己最喜欢的小说1部。
存储为文本文档。
要求长篇小说,20万字以上。
任取其中10个人物,考虑他们的姓名、别名等等一系列因素。
(1)统计每个人在小说中出现的次数并排序。
(2)统计每个人在小说中出现的篇幅跨度(第一次出现距最后一次出现的篇幅)并排序。
(3)如果两人在相距较短的一段文字中出现,我们认为两人有关系,距离越短,关系越近。
自行设计统计标准,找出10个人中:
1)关系最紧密的两个人,关系最不紧密的两个人。
2)输入一个人名,列出该人和其他人关系的紧密程度排名。
看与实际是否符合?
如果不太符合,说明可能的原因。
三、实验思想
程序中用到了FileInputStream函数,实现了能够读取文本文件中的文字的功能,
程序中用到了setBackground等函数,形成了一个比较不错的windows的窗体外观,除此之外还用到了:
JFrame类中的JPanel,JLabel,Jbutton,…用了大量类库中的函数实现了很多功能。
程序灵活运用了数组的存储和比较功能,实现了将文本中的有效信息转换为字符串并进行比较计数等操作。
1、首先定义了一个读取字符流对象,用来读取文本文件文件中的文字;
2、定义集合类对象来存储读取的字符;
3、当遇到所需的时便存放在临时字符串中,遍历整个文本文件,记录传入名字出现的位置,存在数组。
4、将数组中的其加入集合统计次数,并构造分析函数,分析人物关系;
5、设计图形界面,添加按钮,面板等元素。
实现人物关系分析结果的输出。
四、程序代码及注释
importjava.io.*;//提供系统输入和输出。
importjava.sql.*;//建立连接
importjava.awt.*;//用于创建用户界面和绘制图形图像的所有类
importjava.awt.event.*;//用于操作事件的实现
importjavax.swing.*;
importjava.util.*;
publicclassMyFileextendsJFrameimplementsActionListener{
JLabeljl=newJLabel("文字分析人物关系统计",JLabel.CENTER);//设置标签
JLabelJLName=newJLabel("姓名:
");
JTextFieldJTName=newJTextField();
ButtonGroupBG=newButtonGroup();//设置按钮
JButtonJBSet=newJButton("查询");
JButtonJBNext=newJButton("重置");
JButtonJBExit=newJButton("退出");
JFrameframe=newJFrame();
JTextAreajtextarea=newJTextArea();
publicMyFile()
{
this.setTitle("查询界面");
this.setLayout(null);
jl.setForeground(Color.blue);//设置标签的前景颜色
jl.setBounds(50,30,200,100);//标签的大小,位置
this.add(jl);
JBSet.setBounds(50,200,90,20);
this.add(JBSet);
JBSet.addActionListener(this);
this.add(JBNext);
JBNext.addActionListener(this);
JBExit.setBounds(150,200,90,20);
this.add(JBExit);
JBExit.addActionListener(this);
this.setBounds(10,10,300,300);//设置窗口大小
this.setVisible(true);
jtextarea.setEditable(false);
jtextarea.setLineWrap(true);
frame.add(jtextarea);
frame.setSize(520,660);
frame.setResizable(false);
frame.setLocation(200,100);
frame.setVisible(false);
addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});//通过内部类重写关闭窗体的方法
}
inttrs1(Strings){//传入一个人物的名字,返回一个数字
if(s.equals("刘备"))return0;
if(s.equals("张飞"))return1;
if(s.equals("关羽"))return2;
if(s.equals("赵云"))return3;
if(s.equals("曹操"))return4;
if(s.equals("孙权"))return5;
if(s.equals("周瑜"))return6;
if(s.equals("黄盖"))return7;
if(s.equals("黄忠"))return8;
if(s.equals("荀彧"))return9;
elsereturn-1;
}
//遍历整个文本文件,记录传入名字出现的位置,存在数组arry中
voidfun(Strings,Stringstr,chara,charb,charc,chard,intarry[][]){
inti,j=0;
try{for(i=0;i if(s.charAt(i)==a&&s.charAt(i+1)==b||s.charAt(i)==c&&s.charAt(i+1)==d){ j++; arry[trs1(str)][j]=i; } }}catch(Exceptionex){} arry[trs1(str)][0]=j; } //传入一个数字,返回该数字对应的人物名字 Stringtrs(inti){ Stringstr1="刘备"; Stringstr2="张飞"; Stringstr3="关羽"; Stringstr4="赵云"; Stringstr5="曹操"; Stringstr6="孙权"; Stringstr7="周瑜"; Stringstr8="黄盖"; Stringstr9="黄忠"; Stringstr10="荀彧"; if(i==0)returnstr1; if(i==1)returnstr2; if(i==2)returnstr3; if(i==3)returnstr4; if(i==4)returnstr5; if(i==5)returnstr6; if(i==6)returnstr7; if(i==7)returnstr8; if(i==8)returnstr9; if(i==9)returnstr10; elsereturnstr3; } //统计每两个人之间的关系,存入arry1数组中 voidrela(intarry[][],intarry1[][]){ inti;intk; for(intp=0;p<10;p++) for(intq=0;q<10;q++) for(i=1;i<=arry[p][0];i++) for(k=1;k<=arry[q][0];k++){ if(Math.abs((arry[p][i]-arry[q][k]))<=100){ arry1[p][q]++; } } for(i=0;i<10;i++)arry1[i][i]=0; } voidcompare(intarry[][],intarry1[][]){ inta,b,i,k; intl=0; intc=0; intm=0; intn=0; a=arry1[0][1]; b=arry1[0][1]; for(i=0;i<10;i++) { jtextarea.append(trs(i)+"出现的次数为"+arry[i][0]); jtextarea.append("\n"); } for(i=0;i<10;i++) for(k=0;k<10;k++){ if(i==k)continue; if(arry1[i][k]>=a) {a=arry1[i][k];l=i;c=k;} if(arry1[i][k]<=b) {b=arry1[i][k];m=i;n=k;} } jtextarea.append("周瑜和孙权的关系为: "+arry1[trs1("周瑜")][trs1("孙权")]); jtextarea.append("\n"); jtextarea.append(trs(l)+"和"+trs(c)+"的关系最近"); jtextarea.append("\n"); jtextarea.append(trs(m)+"和"+trs(n)+"的关系最远"); jtextarea.append("\n"); } publicvoidpianfu(intarry[][]){ inti; try{Stringstr=JTName.getText(); i=arry[trs1(str)][arry[trs1(str)][0]]-arry[trs1(str)][1]; jtextarea.append(str+"出现的篇幅为(字节): "+i);}catch(Exceptionex){} } voidshow(intarry1[][]){ inti;intj;intx; intm=0; Stringsname=JTName.getText(); x=arry1[trs1(sname)][0]; jtextarea.append("与"+sname+"关系由近到远的关系为: "); for(i=0;i<9;i++){ for(j=0;j<10;j++){ if(j==trs1(sname))continue; if(arry1[trs1(sname)][j]>=x){ x=arry1[trs1(sname)][j];m=j; jtextarea.append(""); } } jtextarea.append(trs(m)); arry1[trs1(sname)][m]=-1; x=0; } jtextarea.append("\n"); } publicvoidactionPerformed(ActionEvente) { if(e.getSource()==JBExit) { setVisible(false); } if(e.getSource()==JBSet) { frame.setVisible(true); frame.setTitle("结果统计"); jtextarea.append("统计表只有以下简单功能: "+"\n"); jtextarea.append("1: 统计每个人在小说中出现的次数并排序"+"\n"); jtextarea.append("2: 统计每个人在小说中出现的篇幅跨度"+"\n"); jtextarea.append("3: 如果两个人在相距较短的一段文字中出现,则说明他们有关系,距离越近关系越密切。 统计标准自行设计。 "+"\n"); jtextarea.append("4: 找出关系最密切的两个人和关系最不密切的两个人。 "+"\n"); jtextarea.append("5: 输入一个人名,列出该人和其他人的关系紧密程度排名。 "+"\n"); jtextarea.append("\n"); jtextarea.append("\n"); jtextarea.append("\n"); inta; intb; int[][]arry=newint[10][10000]; int[][]arry1=newint[10][10]; try{Filefile=newFile("三国演义全集.txt"); FileInputStreamfis=newFileInputStream(file); byte[]data=newbyte[(int)file.length()]; fis.read(data); fis.close(); Stringmsg=newString(newString(data)); fun(msg,"刘备",'刘','备','玄','德',arry); fun(msg,"张飞",'张','飞','翼','德',arry); fun(msg,"关羽",'关','羽','云','长',arry); fun(msg,"赵云",'赵','云','子','龙',arry); fun(msg,"曹操",'曹','操','孟','德',arry); fun(msg,"孙权",'孙','权','仲','谋',arry); fun(msg,"周瑜",'周','瑜','公','瑾',arry); fun(msg,"黄盖",'黄','盖','公','覆',arry); fun(msg,"黄忠",'黄','忠','汉','升',arry); fun(msg,"荀彧",'荀','彧','文','若',arry);}catch(Exceptionex){} a=arry1[0][1]; b=arry1[0][1]; rela(arry,arry1); compare(arry,arry1); show(arry1); pianfu(arry); } } publicstaticvoidmain(String[]args)throwsException{ newMyFile();//实例化一个对象 } } 五、实验结果 六、实验总结 此次实验让我重新复习了文件和文件输出流、字符流,以及集合类,把老师课堂上讲的理论与实践结合起来,通过实验找到了自己不足之处,对类的方法更有许多不理解,在以后的学习中一定要把知识整理好,综合起来,这样在运用的时候才能得心应手。 通过这门课程的学习,我了解到了java语言的强大功能,作为计算机专业的学生,我对编程很感兴趣,对于java语言,之前还是比较陌生。 通过这次设计,我发现了java语言独特的魅力,第一,代码可用性高,类可以随意调用,这使的编程序省了不少力,第二,代码的可读性好,只要会英语,代码基本能看懂。 第三,不限硬件,几乎兼容所有的计算机,因为它在java虚拟机上运行。 总的来说java是一种趋势,它掀起了一场跨平台的编程革命,还是很不错的。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 Java 实验 报告