gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

局域网电脑管理系统之一:信息数据库的架构

局域网电脑管理系统之一

信息数据库的架构

 

使用 postgresql8.1 建立信息数据库。

 

建立三张表:

ü      交换机分布表: net_top

ü      办公室与井道端口对应表: net_port

ü      mac 地址表: net_mac_addr

o_dp.jpg

建立的程序如下:

       create table net_top(

              switch_pos integer,

              floor integer

       );

       create table net_port(

              room integer,

              port1 integer,

              port2 integer

       );

       create table net_mac_addr(

              room integer,

              mac_addr varchar(30),

              ip_addr varchar(30),

              owner varchar(20)

       );

 

建立视图 net_room_port ,将表 1 2 连接起来。

create view net_room_view as

  select * from net_top t left outer join net_port p

on (p,room/100=t.floor);


o_net_room_port.jpg

 

3 张表添加约束,使之能正确得存储。

       net_port 中,将 room 设为主键:

              alter table net_port add constraint room_prim primary key (room);

       net_mac_addr 中将 room 设为 net_port.room 的外键:

              alter table net_mac_addr

add foreign key (room) references net_port;

       net_mac_addr 中设置 mac_addr ip_addr 的检查:

              alter table net_mac_addr add constraint mac_check check

(mac_addr ~ ‘^(00) [0-9A-Z]{10 }$’);

              alter table net_mac_addr add constraint ip_check

                     check (ip_addr ~ ‘[0-9]{3}(\.[0-9]){1,3}$’);

 

表建立以后,就要进行数据输入。

 

1 :输入表 1 的数据:

       新建一个文本文键 e:\switch.txt ,在其中输入数据,如下:

2       1

2       2

2       3

6       4

6       5

6       6

8       7

8       8

8       9

8       10

12     11

12     12

12     13

12     14

12     15

保存后,将该文本内容拷贝至表 1 中。

copy net_top from ‘e:/switch.txt’;


o_net_top.jpg
 

2 :输入表 2 的内容

       新建一个文本文键 e:\room.txt ,编写一个脚本用来输入房间号:

      

open(FILE,'>e:/switch.txt');

 

for($init=1; $init<=15; $init++){

              for($temp=1; $temp<=15; $temp++){

                     $sum=$init*100+$temp;

                     print FILE "$sum"."\n";

              }

}

 

close FILE;

 

       然后根据大楼井道分布图所示,将端口填入,以下是其中的一部分:

       1011040

102   1160

103   1050

104   1030

105   1060

106   0     0

107   1070

108   0     0

109   1080

110   0     0

11     0     0

112   0     0

113   109110

114   0     0

115   0     0

201   2040

202   2010

总共 228 个数据。需要提醒的是,以上所有数据行中的数据都用制表符

分割。保存后,将该文本内容拷贝至表 1 中。

copy net_port from ‘e:/room.txt’;


o_net_port.jpg
 

3 :输入表 3 的内容

这是最艰巨的,需要一台电脑接着一台得打入 ipconfig –all ,然后在逐一输入。为了简化操作,写了一组采集程序。

服务器端的程序如下:

 

$in_buffer=undef;

$PF_INET=2;

$port=2345;

$local_addr=pack('SnC4x8',$PF_INET,$port,192,168,138,105);

$SOCK_DGRAM=2;

 

 

 

socket(UDP_SERVER,$PF_INET,$SOCK_DGRAM,getprotobyname('udp')) or die("$!");

bind(UDP_SERVER,$local_addr) or die("$!");

listen(UDP_SERVER,100);

 

print("waiting for connection...\n");

$count=0;

 

while(1){

  print $count." connection..\n";

  $count++;

  if(recv(UDP_SERVER,$in_buffer,100,0)){

         open(FILE,'>>e:/mac_addr.txt');

         chomp($in_buffer);

         print FILE $in_buffer."\n";

         close FILE;  

  }

  else{next;}

}

 

 

close(UDP_SERVER);


o_net_mgr_serv.jpg
 

 

客户端的程序如下:

@stack=();

$mac_addr=undef;

$ip_addr=undef;

 

print(' 请输入您的办公室门牌号码: ');

$room_num=<STDIN>;

chomp($room_num);

 

print(' 请输入您的姓名拼音: ');

$name=<STDIN>;

chomp($name);

 

open(FOO,'-|',"ipconfig -all");

 

while(<FOO>){

  chomp();

  if($_=~s/(.*)(00(\-[0-9A-Z]{2}){5})(.*)/$2/){

         $mac_addr=join('',split(/-/,$_));

  }

  if($_=~/IP Address/){

         $_=~s/(.*)([0-9]{3}(\.[0-9]{1,3}){3})(.*)/$2/;

         $ip_addr=$_;

  }

}

 

close FOO;

 

push(@stack, $room_num);

push(@stack, $mac_addr);

push(@stack, $ip_addr);

push(@stack, $name);

$out_buffer=join("\t",@stack);

print $out_buffer."\n";

 

$PF_INET=2;

$port=2345;

$remote_addr=pack('SnC4x8',$PF_INET,$port,192,168,138,105);

$SOCK_DGRAM=2;

socket(UDP_CLIENT,$PF_INET,$SOCK_DGRAM,getprotobyname('udp'));

send(UDP_CLIENT,$out_buffer,0,$remote_addr);

close(UDP_CLIENT);

 

exit;

   

 

o_net_mgr_cli.jpg
 

采集的数据被记录到服务器中:

o_mac_addr.jpg 

 

然后将数据导入数据库:

copy net_mac_addr from ‘e:/mac_addr.txt’;

 

o_net_mac_addr.jpg
 

posted on 2006-05-11 21:37 gyn_tadao 阅读(399) 评论(0)  编辑 收藏 引用 所属分类: postgresDatabase

只有注册用户登录后才能发表评论。
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜