中南大学Java实验报告.docx

上传人:b****7 文档编号:11334274 上传时间:2023-02-27 格式:DOCX 页数:13 大小:57.76KB
下载 相关 举报
中南大学Java实验报告.docx_第1页
第1页 / 共13页
中南大学Java实验报告.docx_第2页
第2页 / 共13页
中南大学Java实验报告.docx_第3页
第3页 / 共13页
中南大学Java实验报告.docx_第4页
第4页 / 共13页
中南大学Java实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

中南大学Java实验报告.docx

《中南大学Java实验报告.docx》由会员分享,可在线阅读,更多相关《中南大学Java实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

中南大学Java实验报告.docx

中南大学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是一种趋势,它掀起了一场跨平台的编程革命,还是很不错的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1