免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1154 | 回复: 0
打印 上一主题 下一主题

局域网电脑管理系统之一 信息数据库的架构 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-06 08:58 |只看该作者 |倒序浏览

局域网电脑管理系统之一
信息数据库的架构
  
使用 postgresql8.1 建立信息数据库。
  
建立三张表:
ü      交换机分布表: net_top
ü      办公室与井道端口对应表: net_port
ü      mac 地址表: net_mac_addr


建立的程序如下:
       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);


  
给 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’;


  
2 :输入表 2 的内容
       新建一个文本文键 e:\room.txt ,编写一个脚本用来输入房间号:
      
open(FILE,'>e:/switch.txt');
  
for($init=1; $init
              for($temp=1; $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’;


  
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);


  
  
客户端的程序如下:
@stack=();
$mac_addr=undef;
$ip_addr=undef;
  
print(' 请输入您的办公室门牌号码: ');
$room_num=;
chomp($room_num);
  
print(' 请输入您的姓名拼音: ');
$name=;
chomp($name);
  
open(FOO,'-|',"ipconfig -all");
  
while(){
  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;
   
  


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


  
然后将数据导入数据库:
copy net_mac_addr from ‘e:/mac_addr.txt’;
  




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/6088/showart_727976.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP