文件递归XML递归树图递归.docx

上传人:b****5 文档编号:3405915 上传时间:2022-11-22 格式:DOCX 页数:15 大小:141.42KB
下载 相关 举报
文件递归XML递归树图递归.docx_第1页
第1页 / 共15页
文件递归XML递归树图递归.docx_第2页
第2页 / 共15页
文件递归XML递归树图递归.docx_第3页
第3页 / 共15页
文件递归XML递归树图递归.docx_第4页
第4页 / 共15页
文件递归XML递归树图递归.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

文件递归XML递归树图递归.docx

《文件递归XML递归树图递归.docx》由会员分享,可在线阅读,更多相关《文件递归XML递归树图递归.docx(15页珍藏版)》请在冰豆网上搜索。

文件递归XML递归树图递归.docx

文件递归XML递归树图递归

常见的三种递归介绍:

FileSystem、XML、TreeView2

一、文件系统递归2

★详细代码如下:

2

二、树图递归—数据表多层关系5

★详细代码如下:

6

三、XML文件递归9

★详细代码如下:

11

 

常见的三种递归介绍:

FileSystem、XML、TreeView

面试中经常遇到的三种递归:

文件系统递归、XML递归、树图TreeView递归。

以下代码开发语言:

C#,属于Windows简单应用程序。

希望对初进入职场的求职者有所帮助。

一、文件系统递归

在VisualStudio2005中新建项目Windows应用程序:

命名为RecursionDemo

//在默认的Form1窗体加入三个控件Button:

btnSearch,TreeView:

tvFiles,ImageList:

imageList1

//设置tvFiles.ImageList=imageList1;

//为imageList1添加3个图片

★详细代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.IO;

namespaceRecursionDemo

{

publicpartialclassForm1:

Form

{

publicForm1()

{

InitializeComponent();

}

///

///查询按钮的Click事件绑定TreeView

///

///

///

privatevoidbtnSearch_Click(objectsender,EventArgse)

{

tvFiles.Nodes.Clear();//清空节点

//用户选择文件夹获得选择的文件夹的路径

FolderBrowserDialogfbd=newFolderBrowserDialog();

if(fbd.ShowDialog()==DialogResult.OK)

{

TreeNoderootNode=newTreeNode();

rootNode.Text=Path.GetFileName(fbd.SelectedPath);

rootNode.ImageIndex=0;

rootNode.SelectedImageIndex=1;

tvFiles.Nodes.Add(rootNode);

//SearchFiles(rootNode.Nodes,fbd.SelectedPath);

SearchFilesMutation(rootNode,fbd.SelectedPath);//用上面一行代//码也可以

tvFiles.SelectedNode=rootNode;

}

else

{

MessageBox.Show("没有选择文件夹或目录!

","提示");

}

}

///

///查询文件和所有文件夹(目录)

///思路:

.获得目录path下的所有子文件夹(子目录)、获得目录path下的所有文//件

///2.如果是子目录,添加该子目录路径到TreeNodeCollection,继续递归子目录;

///3.如果是文件,则只需添加文件路径到TreeNodeCollection

///

///树节点集合

///当前文件夹路径

privatevoidSearchFiles(TreeNodeCollectionnodes,stringpath)

{

string[]folders=Directory.GetDirectories(path);//获取path文件夹下//所有的子文件夹

foreach(stringfolderPathinfolders)

{

TreeNodetempNode=newTreeNode();

tempNode.Text=Path.GetFileName(folderPath);

intcurrentIndex=nodes.Add(tempNode);

nodes[currentIndex].ImageIndex=0;//树节点未选中时的图//片

nodes[currentIndex].SelectedImageIndex=1;//树节点处于选中时的//图片

//如果tempNode存在子目录继续遍历

SearchFiles(tempNode.Nodes,folderPath);//这里递归

}

string[]files=Directory.GetFiles(path);//获取path文件夹下所有的文//件

foreach(stringfilePathinfiles)

{

TreeNodenode=nodes.Add(Path.GetFileName(filePath));

node.ImageIndex=2;

node.SelectedImageIndex=2;

}

}

///

///查询文件和文件夹的另一种方法,和SearchFiles方法原理一致

///

///当前树节点

///当前树节点(目录)的路径

privatevoidSearchFilesMutation(TreeNodenode,stringpath)

{

//获取path下的所有文件和目录组成一个string数组数组元素为物理路径

string[]fileAndFolders=Directory.GetFileSystemEntries(path);

foreach(stringfileOrFolderPathinfileAndFolders)

{

if(Directory.Exists(fileOrFolderPath))//如果是目录(文件夹)

{

TreeNodetempNode=newTreeNode();

tempNode.Text=Path.GetFileName(fileOrFolderPath);

intcurrentIndex=node.Nodes.Add(tempNode);

node.Nodes[currentIndex].ImageIndex=0;//树节点未选//中时的图片

node.Nodes[currentIndex].SelectedImageIndex=1;//树节点处于//选中时的图片

//如果tempNode存在子目录继续遍历

SearchFilesMutation(tempNode,fileOrFolderPath);//这里递归

}

else//如果是文件即:

File.Exists(fileOrFolderPath)

{

TreeNodecurrentNode=node.Nodes.Add(Path.GetFileName(fileOrFolderPath));

currentNode.ImageIndex=2;

currentNode.SelectedImageIndex=2;

}

}

}

}

}

运行程序。

点击按钮,选择一个文件夹,效果如下图(文件夹选中和未选中时的图标不同):

二、树图递归—数据表多层关系

以Sqlserver数据库的一张部门表Department为例,查询显示所有的部门,并按从属关系绑定到树图上。

在SqlServer中,新建部门表Department,sql语句如下:

CREATETABLE[Department](

[DepartmentNo][varchar](12)COLLATEChinese_PRC_CI_ASNOTNULL,

[ParentNo][varchar](12)COLLATEChinese_PRC_CI_ASNULL,

[DepartmentName][nvarchar](30)COLLATEChinese_PRC_CI_ASNOTNULL,

[Remark][nvarchar](200)COLLATEChinese_PRC_CI_ASNULL,

CONSTRAINT[PK_Department]PRIMARYKEYCLUSTERED

[DepartmentNo]

)ON[PRIMARY]

)ON[PRIMARY]

---当ParentNo为null时,即没有父部门(上一级部门),我们认为是顶级部门。

添加数据到Department。

如下:

在项目RecursionDemo下,添加Windows窗体Form2,在Form2上添加两个控件

Button:

btnExamineDepartment,TreeView:

tvDepartment

★详细代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Data.SqlClient;

namespaceRecursionDemo

{

publicpartialclassForm2:

Form

{

publicForm2()

{

InitializeComponent();

}

///

///查看所有部门并绑定到树图上

///

///

///

privatevoidbtnExamineDepartment_Click(objectsender,EventArgse)

{

tvDepartment.Nodes.Clear();

try

{

DataTabledtTopDepartment=GetTopDepartemnt();//获得最顶级部门

//调用递归方法

BindTreeView(tvDepartment.Nodes,dtTopDepartment);

}

catch(Exceptionex)

{

MessageBox.Show(ex.Message,"异常信息");

}

}

///

///绑定树图用到的递归方法

///思路:

查看Datatable的所有部门,绑定到树图上,形成多个TreeNode

///2.将生成的每一个TreeNode的Text属性设置为DepartmentName,将TreeNode的///Tag属性设置为DepartmentNo

///3.查看每一个TreeNode,看是否存在子部门(DataTable的数据行大于,父节点///就是当前的Tag)

///4.如果存在子部门继续递归遍历

///

///节点集合

///当前DataTable

privatevoidBindTreeView(TreeNodeCollectionnodes,DataTabledt)

{

foreach(DataRowdrindt.Rows)

{

TreeNodetempNode=newTreeNode();

tempNode.Text=dr["DepartmentName"].ToString();

tempNode.Tag=dr["DepartmentNo"].ToString();

nodes.Add(tempNode);

DataTabletempTable=GetSubDepartment(dr["DepartmentNo"].ToString());

//上一行代码也可写成:

//DataTabletempTable=//GetSubDepartment(tempNode.Tag.ToString());

if(tempTable.Rows.Count>0)//如果存在子部门

{

BindTreeView(tempNode.Nodes,tempTable);//这里进行递归寻找//子部门

}

}

}

///

///获得下一级直属子部门

///

///父部门编号

///

privateDataTableGetSubDepartment(stringparentNo)

{

SqlConnectionconn=newSqlConnection();

//根据实际情况写出自己的SqlServer数据库连接字符串

conn.ConnectionString=@"

DataSource=LENOVO-YANGLQ\YLQTEST;initialcatalog=ICChannels;userid=sa;password=123456";

stringsql="selectDepartmentNo,DepartmentNamefromDepartmentwhereParentNo=@ParentNo";

SqlParameterparameter=newSqlParameter("@ParentNo",SqlDbType.VarChar,12);

parameter.Value=parentNo;

SqlCommandcommand=newSqlCommand(sql,conn);

command.Parameters.Add(parameter);

SqlDataAdapteradapter=newSqlDataAdapter();

adapter.SelectCommand=command;

DataSetds=newDataSet();

conn.Open();

adapter.Fill(ds);

conn.Close();

returnds.Tables[0];

}

///

///获得最顶级部门,即没有父节点(ParentNoisnull)

///

///

privateDataTableGetTopDepartemnt()

{

SqlConnectionconn=newSqlConnection();

conn.ConnectionString=@"

DataSource=LENOVO-YANGLQ\YLQTEST;initialcatalog=ICChannels;userid=sa;password=123456";

stringsql="selectDepartmentNo,DepartmentNamefromDepartmentwhereParentNoisnull";

SqlDataAdapteradapter=newSqlDataAdapter(sql,conn);

DataSetds=newDataSet();

conn.Open();

adapter.Fill(ds);

conn.Close();

returnds.Tables[0];

}

}

}

点击按钮,运行效果如下图:

三、XML文件递归

查看一个XML文件,并按父节点与子节点的归属关系绑定到树图上。

(XML文件有且只有一个根节点)

一个xml文件(命名为test.xml)的内容如下:

xmlversion="1.0"encoding="gb2312"?

>

流水号

企业编码

认证码

时间戳

用户开户

流水号1

开户卡号1

手机号1

工单处理结果:

1

操作成功

流水号2

开户卡号2

手机号2

工单处理结果:

99

操作失败

流水号3

开户卡号3

手机号3

工单处理结果:

0

操作失败

字段1

卡号

字段2

古剑奇谭

XML解析响应码

响应码

在项目RecursionDemo下,添加Windows窗体Form3,在Form3上添加两个控件

Button:

btnExamineXml,TreeView:

tvXml

 

★详细代码如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

usingSystem.Xml;

namespaceRecursionDemo

{

publicpartialclassForm3:

Form

{

publicForm3()

{

InitializeComponent();

}

privatevoidbtnExamineXml_Click(objectsender,EventArgse)

{

tvXml.Nodes.Clear();

XmlDocumentdocument=newXmlDocument();

//填写自己所建的test.xml的路径

stringfileName=@"D:

\test.xml";

try

{

document.Load(fileName);

}

catch(Exceptionex)

{

MessageBox.Show(ex.Message,"异常信息");

return;

}

//XmlElement继承于类XmlNode

TreeNoderootNode=newTreeNode();

rootNode.Text=document.DocumentElement.Name;

tvXml.Nodes.Add(rootNode);

BindXml(rootNode.Nodes,document.DocumentElement);

}

///

///递归方法

///思路:

1.查看node下的所有子节点

///2.将子节点绑定到TreeNode上,如果子节点存在属性,将属性页显示出来

///3.如果subNode存在子节点继续递归遍历

///

///树节点集合

///XML的一个节点

privatevoidBindXml(TreeNodeCollectionnodes,XmlNodenode)

{

foreach(XmlNodesubNodeinnode.ChildNodes)

{

stringtext="";

if(subNode.Value==null)//如果节点值不存在

{

if(subNode.Attributes!

=null&&subNode.Attributes.Count>0)

{

text+=subNode.Name+"--属性有:

";

for(inti=0;i

{

text+=subNode.Attributes[i].Name+":

"+subNode.Attributes[i].Value+"";

}

}

else

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1