电信运营支撑系统信息采集系统课程设计报告.docx
《电信运营支撑系统信息采集系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《电信运营支撑系统信息采集系统课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
电信运营支撑系统信息采集系统课程设计报告
吉首大学信息科学与工程学院
10级计算机科学与技术课程设计
电信运营支撑系统-信息采集系统
班级:
二班
指导老师:
小组名称:
姓名
学号
组长
成员
成员
成员
成员
成员
成员
成员
1、设计目的
1.了解java的项目设计过程及思想,以及java项目开发的基本过程。
2.巩固所学的java知识。
3.培养学生分析.解决问题的能力,以及团队的合作能力!
4.实现java跟数据库的链接,制作出一个数据采集系统,将采集到的信息存到相应的数据库中!
2、设计内容
1.采集数据:
以文件流的形式将数据读入程序中,并将数据进行解析,该过程在implementsGather接口类中的gather方法实现
2.
(1)a.文件备份:
用来备份没有下线信息用户的信息和一些其他程序用到的数据,该风发是implementsBackUP接口类中的store方法,一对象流的方式存储
b.文件加载
以文件流的形式将数据读入程序中,并数据进行解析,该过程在implementsGather接口类中的gather方法实现
(2)a.文件备份
用来备份设有下线信息用户的信息和一些其他程序用到的数据,该方法是implements接口的类方法,以对象流的方式保存。
b.文件加载
用来将上次保存的数据以对象流的方法加载到程序中,并以对象object的方式返回给调用段
3.Socket网络编程
(1)客户端:
implementsClient,实现该类的send方法,将数据以流的方式发送到服务器端,之前先建立tcp连接,要设好端口号,服务器ip。
(2)服务器端:
implementsServer,实现receive方法,将数据以流的方式进行接收,并存入数据库。
通过new下一个DBStore对象,并调用store方法。
4.jdbc数据库操作
通过implementsDBStore并实现其中的方法saveToDB
方法:
a.加载驱动
b.得到连链
c.得到PrepareStament语句
d.对数据进行批处理,每1000条送入数据库
e.关闭资源
5.测试
(1)通过建立一个类,在该类的main方法中new一个client对象并调用ClientImpl中的sent()方法。
(2)再建一个类,在该类中的main方法new一个server对象,并调用ServerImpl的receive方法。
(3)先启动ClientImpl,再启动ClientImpl中的Sent方法
6.熟悉在控制终端利用sql语言创建表,建立用户,以及对用户的赋权操作。
以及对表的查询操作
7.程序设计的流程图为:
三.设计平台
1.Oracle工作环境
2.基于Java的可扩展开发平台eclipce
3.控制终端
四.设计过程
1.本系统分五个模块,一个模块对应相应的实验内容。
A.备份模块类BackUpImpl
A.1成员函数store:
用与读取文件中的数据,并且用布尔类型值判断其实追加还是覆盖
Load:
用于收集到的数据暂时存储到文件中,一面数据一次性采集时不成功而丢失
A.2函数的具体实现:
publicvoidstore(Stringkey,Objectdata,booleanflag)throwsException
{
Filefile=newFile(parent);
FileOutputStreamfin=null;
if(!
file.exists())
{
file.mkdir();
}
file=newFile(parent,key);
file.createNewFile();
if(flag==STORE_APPEND)
{
fin=newFileOutputStream(file,true);
}
if(flag==STORE_OVERRIDE)
{
fin=newFileOutputStream(file,false);
}
ObjectOutputStreambop=newObjectOutputStream(fin);
bop.writeObject(data);
if(bop!
=null)
{
bop.close();
}
if(fin!
=null)
{
fin.close();
}
}
B.数据采集模块GatherImpl
B.1将上线相关的数据存储到HashMap类对象中
Mapmap=newHashMap();
B.2将下线数据存储到List类对象中
ArrayListresultBIDR=newArrayList();
B.3实现gather数据采集模块的具体程序:
publicCollectiongather()throwsException
{
Longskip1=null;
BackUpImplim=newBackUpImpl();
Objectobject=im.load("temp",BackUP.LOAD_UNREMOVE);
skip1=(Long)im.load("skip",BackUP.LOAD_UNREMOVE);
if(skip1==null)
{
skip1=0l;
}
MaptempMap=(Map)object;
if(tempMap!
=null)
{
map.putAll(tempMap);
}
Filefile=newFile("Data/radwtmp_test");//?
?
?
?
?
?
FileReaderre=newFileReader(file);
BufferedReaderbr=newBufferedReader(re);
Stringresult="";//?
?
?
?
?
?
?
?
?
?
Stringname="";//?
?
?
Stringip="";//ip?
?
Stringstate="";//?
?
?
?
?
?
?
Stringtime="";//?
?
Stringnsa="";//NAS_IP?
?
br.skip(skip1);
while((result=br.readLine())!
=null)//?
?
?
?
{
skip1+=result.length()+1;
result=result.substring(1,result.length());
String[]st=result.split("[|]");
name=st[0];
nsa=st[1];
state=st[2];
time=st[3];
ip=st[4];
BIDRbidr=newBIDR();//?
?
?
?
?
?
?
?
?
if("7".equals(state))//?
?
?
?
?
?
?
?
?
?
?
{
bidr.setAAA_login_name(name);
bidr.setLogin_date(newTimestamp(Long.parseLong(time)*1000));
bidr.setNAS_ip(nsa);
bidr.setLogin_ip(ip);
map.put(ip,bidr);
}
if("8".equals(state))//?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
{
BIDRbidr1=map.remove(ip);
bidr.setLogin_ip(ip);
bidr.setNAS_ip(nsa);
bidr.setAAA_login_name(bidr1.getAAA_login_name());
bidr.setTime_deration((int)(Long.parseLong(time)*1000-bidr1
.getLogin_date().getTime()));
bidr.setLogout_date(newTimestamp(Long
.parseLong(time)*1000));
bidr.setLogin_date(bidr1.getLogin_date());
resultBIDR.add(bidr);
}
}
BackUpImplbu=newBackUpImpl();
bu.store("temp",map,BackUP.STORE_OVERRIDE);
bu.store("skip",skip1,BackUP.STORE_OVERRIDE);
returnresultBIDR;
}
C.数据入库模块DBStoreImpl:
将采集到的数据入库,saveToDB方法的具体实现:
publicvoidsaveToDB(Collectioncollection)throwsException{
ArrayListlist=(ArrayList)collection;
co=this.getConnection();
System.out.println("?
?
?
?
?
?
?
?
?
?
?
.......");
for(inti=0;i{
BIDRbidr=list.get(i);
Stringname=bidr.getAAA_login_name();
Stringip=bidr.getLogin_ip();
Stringnas=bidr.getNAS_ip();
java.sql.DateloginDate=newjava.sql.Date((bidr.getLogin_date().getTime()));
java.sql.DatelogoutDate=newjava.sql.Date(bidr.getLogout_date().getTime());
inttime=bidr.getTime_deration();
intday=logoutDate.getDate();
if(flag!
=day)
{
if(pre!
=null)
{
pre.executeBatch();
pre.close();
}
flag=day;
Stringsql="insertintotable_"+day+"values(?
?
?
?
?
?
)";
pre=co.prepareStatement(sql);
}
pre.setString(1,name);
pre.setString(2,ip);
pre.setString(3,nas);
pre.setDate(4,loginDate);
pre.setDate(5,logoutDate);
pre.setInt(6,time);
pre.addBatch();
if(i%1000==0||i==list.size()-1)
{
if(pre!
=null)
{
pre.executeBatch();
}
}
}
System.out.println("?
?
?
?
?
:
"+list.size()+"?
");
}
publicConnectiongetConnection()throwsException
{
Class.forName(this.driver);
Connectioncon=DriverManager.getConnection(this.url,this.user,this.password);
returncon;
}
D.客户端模块ClientImpl
D.1客户端和服务端要有相同的port
Stringhost="127.0.0.1";
intport=3567;
D.2客户端给服务端传送数据的send方法具体实现:
publicvoidsend(Collectioncollection)throwsException
{
try{
ArrayListcur1=(ArrayList)back.load("clienback",BackUP.LOAD_REMOVE);
socket=newSocket(host,port);
OutputStreamout=socket.getOutputStream();
ObjectOutputStreamob=newObjectOutputStream(out);
if(cur1!
=null)
{
collection.addAll(cur1);
}
ob.writeObject(collection);
ob.close();
out.close();
socket.close();
}
catch(Exceptione)
{
e.printStackTrace();
back.store("clientback",collection,BackUP.STORE_OVERRIDE);
}
}
E.服务端模块ServerImpl
E.1和客户端有想痛痛的端口号
intport=3567;
E.2实现receiver方法,将数据以流的方式进行接收,并且做入库操作:
publicvoidrevicer()throwsException
{
//TODOAuto-generatedmethodstub
server=newServerSocket(port);
Socketsocket=server.accept();
Objectunfinsh=serverback.load("serverback",BackUP.LOAD_REMOVE);
InputStreamin=socket.getInputStream();
ObjectInputStreamob=newObjectInputStream(in);
ArrayListcur=(ArrayList)ob.readObject();
if(unfinsh!
=null)
{
ArrayListcur1=(ArrayList)unfinsh;
cur.addAll(cur1);
}
try
{
DBStoreImpldb=newDBStoreImpl();
db.saveToDB(cur);
}
catch(Exceptione1)
{
serverback.store("serverback",cur,BackUP.STORE_OVERRIDE);
e1.printStackTrace();
}
ob.close();
in.close();
socket.close();
}
@Override
publicvoidshutdown()
{
try
{
server.close();
}catch(IOExceptione)
{
e.printStackTrace();
}
}
5.设计结果及测试
1.在控制终端建立用户后,建立表
2.在运行ServerImpl类,再运行ClientImpl类。
3.在控制终端查询26和25号表的数据总数,结果为:
4.在Oracle平台上查看库里的数据为:
六.设计总结
这是我们第一次这样大的一个群体合作做一个系统,亲身的感受了团队的力量。
我们知道Java是面向对象的语言,在Java开发平台Eclipce里封装好了大量的类和方法,就Java而言,万物皆对象。
我们写一个程序,只需要不停的调用现成的类库和方法就行了,然后借用已学的Java知识,实现接口类里的方法。
通过这一次课程设计,我们发现好多的做项目的必备要求,具体如下几点:
1.必须理清,了解项目的要求。
分析项目的内在要求,建立需求分析,画出相应的类图,然后理清块与块之间的关系。
2.基础的课程设计语言知识要掌握牢固。
像基本的文件流操作,类的相关调用和导入,还有数据库跟Java建立连接的步骤及操作!
3.当团队合作时,应该多讨论,交换各自的意见,然后分工合作,当你做某一个模块的时候,相应的注释必不可少,为了方便你的队友理解你的代码。
通过这一次的课程设计,我们了解了做项目的简单形式。
和我们平时做的Java程序设计大不一样,可想而知,如果没有这样的简单培训,当我们真正的遇到了一个项目,我们会无从下手。
不管这一次的课程设计结果如何,我们都获益匪浅,感谢指导老师们。