面向对象实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面向对象技术
——实验报告
学号:
班级:
姓名:
指导老师:
一、实验目的
1、掌握面向对象技术的基本思路和方法。
2、利用所学的基本知识和技能,解决简单的面向对象系统设计问题。
二、实验内容及要求
学习Java界面开发基础知识。利用所学到的Java编程知识和编程技巧,设计一个实际的应用软件,初步认识软件设计的基本方法,提高进行工程设计的基本技能及分析、解决实际问题的能力,为后续课程和以后的工程实践打下良好的基础。
自行下载自己最喜欢的小说1部。存储为文本文档。要求长篇小说,20万字以上。
任取其中10个人物,考虑他们的姓名、别名等等一系列因素。
(1)统计每个人在小说中出现的次数并排序。
(2)统计每个人在小说中出现的篇幅跨度(第一次出现距最后一次出现的篇幅)并排序。
(3) 如果两人在相距较短的一段文字中出现,我们认为两人有关系,距离越短,关系越近。自行设计统计标准,找出10个人中:
1)关系最紧密的两个人,关系最不紧密的两个人。
2)输入一个人名,列出该人和其他人关系的紧密程度排名。
看与实际是否符合?如果不太符合,说明可能的原因。
三、实验原理
选择一本小说,找出其中十个常见的人物名称,将其设为关键字,然后选择适合的读入文件函数并与关键字进行匹配,将关键字出现的次数和在文中的位置分别保存到两个数组当中。读入完成后,比较各个人物名称出现的次数并用冒泡排序将人物名称按照出现的次数从高到低进行排序并输出;再将每个人物名称出现的最后一次的位置减去第一次出现的位置,得到人物名称的跨度,再使用一次冒泡排序并按照跨度从大到小进行排序并输出。设定两个人物名称出现的第一次
的距离为判断两个人物关系的标准,计算两两之间的距离并保存到一个数组中,判断两两之间的距离并使用冒泡排序将人物名称按照距离从大到小进行排列并输出,再将十个人物名称进行编号,输入任意一个人物名称前面的编号,输出该人物名称与其他人物名称之间的距离。
四、实验步骤
(1)设计思路
由于JAVA刚开始学习,掌握的不是很好,所以我选择用C++进行编程。
首先找一本小说,我找的是《悲惨世界》英文版,然后将文件以TXT格式保存到源程序目录文件夹中,用fstream File函数将文件读入,由于该函数是按单词读入,所以人物名称附近的符号也会一并读入到这个单词中,所以在进行关键字匹配的时候,只有列出人物名称和其附近可能出现的几种符号,这种方法有点笨拙,不过总算是解决了读入的问题。接下来就是统计人物名称出现的次数以及保存每次出现的位置,定义一个一维数组保存每个名字出现的次数和一个二维数组保存每一次名字出现的位置,读入完成后就得到两个数组,对出现次数的数组进行排序并按大到小输出,对应的,将人物名称对换位置后一并输出,这样,统计每个人在小说中出现的次数并排序就完成了。接下来将保存人物名称出现位置的数组中的最后一次减去第一次,得到的就是跨度,再进行一次排序并输出,统计每个人在小说中出现的篇幅跨度就完成了。最后就是找出与其他人的相关程度,这里我是以每个人名字出现的第一次位置为准,两两相减取绝对值就能得出关系最紧密的两个人和最不紧密的两个人。再就是解决输入一个人名,列出该人和其他人关系的紧密程度排名问题。先给每个人物名称一个编号1-10,输入一个任务名称前面的序号后,将该人物名称出现的位置与其他人相减取绝对值然后再进行排序输出,就能得到结果。
(2)源代码
(源代码在DEV--C++中编译通过,悲惨世界(英文版)放置在源程序同一文件夹中)
#include
#include
#include
#include
#include
using namespace std;
const int n =10;
string A,temp,temp6,temp7;
String name[n]={"Marius","Cosette","Jean","Myriel","Monsieur","Javert", "Magloire","Thenardier","Fantine","Enjolras"};
//定义人物名数组
int main()
{
system("color B1");
int count[n] ={0};
int sum =0;
int max1,max2,min1,min2,min =10000,max =100;
int z,n1;
int choice =0;
int temp1,temp2,temp3,temp4,temp5; //temp1保存人物名频率,temp2保存人物名跨度
int a[n][500] ={0};
int rela[n][n] ={0};
int v0 =0,v1 =0,v2 =0,v3 =0,v4 =0,v5 =0,v6 =0,v7 =0,v8 =0,v9 =0,v10 =0,v11 =0; fstream File("悲惨世界(英文版).txt");
while(!File.eof())
{
File>>A;
sum++;
if(A =="Marius"||A =="\"Marius"||A =="Marius,"||A =="Marius."||A =="Marius'"||A =="Marius?"||A =="Marius!") //进行名字匹配
{
count[0]++;
a[0][v0] =sum;
v0++;
}
if(A =="Cosette"||A =="\"Cosette"||A =="Cosette,"||A =="Cosette."||A =="Cosette'"||A =="Cosette?"||A =="Cosette!")
{
count[1]++;
a[1][v1] =sum;
v1++;
}
if(A =="Jean"||A =="\"Jean"||A =="Jean,"||A =="Jean."||A =="Jean'"||A =="Jean?"||A =="Jean!")
{
count[2]++;
a[2][v2] =sum;
v2++;
}
if(A =="Myriel"||A =="\"Myriel"||A =="Myriel,"||A =="Myriel."||A =="Myriel'"||A =="Myriel?"||A =="Myriel!")
{
count[3]++;
a[3][v3] =sum;
v3++;
}
if(A =="Monsieur"||A =="\"Monsieur"||A =="Monsieur,"||A =="Monsieur."||A =="Monsieur'"||A =="Monsieur?"||A =="Monsieur!")
{