您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 树型结构模拟因特网域名查询实验报告
一、问题描述1.题目描述在Internet的域名系统中,以树型结构实现域名的搜索。即输入某站点的域名,在域名系统的树型结构中进行搜索,直至域名全部匹配成功或匹配失败;若成功则给出该站点的IP地址166.111.9.22.基本要求首先实现一个反映域名结构的树,例如清华大学站点、cn、edu、tsinghua、。叶子结点另外有一个数据域、存放清华大学站点的IP地址166.111.9.2。3.测试数据可以取常用到的著名站点的域名和IP地址为例构建域名结构的树,一般应有30个左右的站点域名。当输入时,输出为“166.111.9.2”;而输入时,输出应为“找不到服务器或发生DNS错误”二、需求分析1.本程序用来模拟因特网域名的查询,需要用文件存储域名及IP地址数据作为数据库以供查询。2.本程序还实现因特网域名数据添加,扩充数据库。三、单元设计1.抽象数据类型:typedefstructCSNode{chardata[50];//存储域名charip[20];//存储IPstructCSNode*firstchild,*nextsibling;}CSNode,*CSTree;typedefstructPointer{CSNode*point[30];//辅助指针数组intlast;//记录数组最后一个元素}Pointer;2.包含模块①实现因特网域名存储模块:树的孩子-兄弟二叉链表四、源代码#includeiostream#includestdlib.h#includestring.h#includestdio.h#includewindows.h#includeconio.husingnamespacestd;typedefstructCSNode{chardata[50];charip[20];structCSNode*firstchild,*nextsibling;}CSNode,*CSTree;typedefstructPointer{CSNode*point[30];intlast;}Pointer;CSTreeT;PointerP;voidWriteToFile(CSTreeT,FILE*fp);voidReadFromFile(CSTree&T,FILE*fp);voidCreateTree(CSTree&T);voidSearchTree(CSTreeT);voidCreateTree(CSTree&T){chardata[50]={'\0'};charip[20];while(1){memset(P.point,'\0',sizeof(P));system(cls);cout\n\t******|tip:enter'N'tostop!|******endl;cout\n\t*putinthedomainname:;cindata;if(!strcmp(data,N)){break;}cout\n\t*putinIP:;cinip;inti=0,j=0,k=0;chartransient[20]={'\0'};while(data[i]!='\0'){transient[j++]=data[i++];if(data[i]=='.'||data[i]=='\0'){CSNode*p=newCSNode;strcpy(p-data,transient);strcpy(p-ip,NULL);p-firstchild=p-nextsibling=NULL;P.point[k]=p;P.last=k;k++;for(intm=0;m20;m++)transient[m]='\0';j=0;i++;}}CSNode*t=T,*q;while(P.last=0){CSNode*p=P.point[P.last];if((t-firstchild)==NULL){t-firstchild=p;t=p;}else{t=t-firstchild;while(t!=NULL&&strcmp(t-data,p-data)!=0){q=t;t=t-nextsibling;}if(t==NULL){q-nextsibling=p;t=p;}}P.last--;}strcpy(t-ip,ip);system(cls);cout\n\n\tLoading¡¤¡¤¡¤¡¤¡¤¡¤endl;Sleep(1000);}FILE*fp=fopen(data.txt,w);WriteToFile(T-firstchild,fp);fclose(fp);}voidSearchTree(CSTreeT){chardata[50]={'\0'};FILE*fp=fopen(data.txt,r);ReadFromFile(T-firstchild,fp);fclose(fp);while(1){memset(P.point,'\0',sizeof(P));system(cls);cout\n\t******|tip:enter'N'tostop!|******endl;cout\n\t*putinthedomainname:;cindata;if(!strcmp(data,N)){break;}inti=0,j=0,k=0;chartransient[20]={'\0'};while(data[i]!='\0'){transient[j++]=data[i++];if(data[i]=='.'||data[i]=='\0'){CSNode*p=newCSNode;strcpy(p-data,transient);strcpy(p-ip,NULL);p-firstchild=p-nextsibling=NULL;P.point[k]=p;P.last=k;k++;for(intm=0;m20;m++)transient[m]='\0';j=0;i++;}}CSNode*t=T,*q;while(P.last=0){CSNode*p=P.point[P.last];t=t-firstchild;if(!t&&strcmp(t-data,p-data)!=0)t=t-nextsibling;if(t==NULL){cout\n\tDNSwrong!endl;break;}P.last--;}if(t!=NULL)cout\n\tTheIPis:t-ipendl;cout\n\n\tPressanykeytocontinue...endl;getch();}}voidWriteToFile(CSTreeT,FILE*fp){charLtag='0',Rtag='0';if(T){fputs(T-data,fp);fputs(\t,fp);fputs(T-ip,fp);fputs(\t,fp);if(T-firstchild!=NULL){Ltag='1';}fwrite(&Ltag,sizeof(char),1,fp);fputs(\t,fp);if(T-nextsibling!=NULL){Rtag='1';}fwrite(&Rtag,sizeof(char),1,fp);fputs(\n,fp);WriteToFile(T-firstchild,fp);WriteToFile(T-nextsibling,fp);}}voidReadFromFile(CSTree&T,FILE*fp){CSTreep;charLG='0',RG='0';p=newCSNode;p-firstchild=p-nextsibling=NULL;fscanf(fp,%s\t%s\t%c\t%c,p-data,p-ip,&LG,&RG);T=p;if(LG=='1')ReadFromFile(T-firstchild,fp);if(RG=='1')ReadFromFile(T-nextsibling,fp);}voidWelecome(){cout\n\n\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\t\t**\n\t\t**\n\t\t**\n\t\t*Welecometouse*\n\t\t**\n\t\t*thedomainnameinquirysystem*\n\t\t**\n\t\t*(^_^)*\n\t\t**\n\t\t**\n\t\t**\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nendl;Sleep(2000);}voidMenu(){system(cls);cout\n\n\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\t\t**\n\t\t**InternetSearchingPrograming**\n\t\t**\n\t\t*^_^*\n\t\t**\n\t\t**\n\t\t*[1]Originaldomainnameinformationinput*\n\t\t**\n\t\t*[2]Internetdomainnamesearching*\n\t\t**\n\t\t*[3]exit*\n\t\t**\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nendl;}intmain(){intn;T=newCSNode;T-firstchild=T-nextsibling=NULL;Welecome();while(1){Menu();cinn;system(cls);switch(n){case1:{CreateTree(T);break;}case2:{SearchTree(T);break;}case3:{exit(0);}}}return0;}五、使用说明1.选择查询,输入域名查询IP地址。2.选择添加,输入域名及IP地址。六、改进分析1.可以添加域名修改IP地址修改功能。2.可以添加该网址的信息介绍功能。
本文标题:树型结构模拟因特网域名查询实验报告
链接地址:https://www.777doc.com/doc-3673203 .html