前言
其實我覺的學校作業可以稍微少花點時間,把時間放到自己認為重要的地方去。(`・ω・´)
問題描述
實現一個小型的學生信息管理系統,實現學生信息的輸入,瀏覽,編輯、查找等基本功能,要求:
-
學生信息包括學號、姓名、性別、系別、家庭住址等基本情況,選擇合適的控件盡可能方便用戶的輸入;
-
程序需保證用戶的輸入有效(即進行必要的驗證操作);
-
用戶可通過TreeView控件或其他合適的界面進行所有學生信息的瀏覽,系統能夠體現數據的層次化特性,並提供對學生信息的查找、修改和刪除功能;
-
數據可永久保存,可保存在數據庫或文件中
-
其他相關功能,如院系增加、調整、節點拖放等
-
在treeview節點上右鍵同樣可以進行一系列操作
先看個效果吧,想要多了解點直接下載代碼去看吧
解決思路
通過 xml 本地保存treeview 上面的信息
其實我覺的直接連數據庫也是很方便的,你們可以嘗試下(別嘗試xml了,對身體不好),我的xml放在debug文件下,我們先看下xml文件內容
<?xml version="1.0" encoding="UTF-8"?>
<Tree>
<Node Id="" Name="紹興文理學院" Address="" Department="" Sex="">
<Node Id="" Name="計算機系" Address="" Department="" Sex="">
<Node Id="17145129" Name ="陶燁豪" Address ="河西校區" Department ="計算機系" Sex ="True"></Node>
</Node><Node Id="" Name="機械系" Address="" Department="" Sex=""></Node>
<Node Id="" Name="自動化系" Address="" Department="" Sex=""></Node>
</Node>
</Tree>
node代表一個節點,里面id,name,address都是一些內容可以根據自己的需要進行,然后再根據
new_child.Text = node.Attributes["Name"].Value;
代表的意思就是把Name這個數值拿出來賦給這個new_child.Text,通過這種方法可以把xml所有信息拿出來,再通過遞歸生成treeview形式
遞歸方法如下
foreach (XmlNode node in xmlNode.ChildNodes)//循環遍歷當前元素的子元素集合
{
TreeNode new_child = new TreeNode();//定義一個TreeNode節點對象
if(node.Attributes["Id"].Value=="")
{
new_child.Text = node.Attributes["Name"].Value;
}
else
{
Student s = new Student(node.Attributes["Id"].Value, node.Attributes["Name"].Value, node.Attributes["Address"].Value, node.Attributes["Department"].Value, node.Attributes["Sex"].Value=="True"?true:false);
new_child.Tag = s;
new_child.Text = s.Id;
}
nodes.Add(new_child);//向當前TreeNodeCollection集合中添加當前節點
RecursionTreeControl(node, new_child.Nodes);//調用本方法進行遞歸
}
這樣我們就完成了讀取操作,接下來我們來實現保存操作
想法其實很簡單,就是退出的時候把treeview上面的內容通過遞歸的方式再次編程xml的形式
比如
//根據Node屬性生成XML文本
Student s = node.Tag as Student;
string rssText = "";
if (s == null)
//<Node Id="" Name="計算機系" Address="" Department="" Sex="" ></Node>
//<Node Id="" Name="" Address="" Department="" Sex="">
rssText = "<Node Id=\"\" " +"Name=\"" + node.Text + "\" Address=\"\" Department=\"\" Sex=\"\"" + ">";
else
{
rssText = "<Node Id=\""+s.Id + "\" Name =\"" + s.Name + "\" Address =\"" + s.Address + "\" Department =\"" + s.Department + "\" Sex =\"" + s.Sex +"\"" + ">";
}
return rssText;
其中\"代表是一個**引號 ** 的意思(為了解決字符串拼接問題),把所需要的內容拼接成xml的形式,再次存入xml文件中就可以的,所以程序運行的過程中,增刪改查都不會影響xml文件,xml文件只與treeview數據有關,可能這一點比數據庫方便一些。(所以我還是強推使用數據庫)
序列化和反序列化記錄文件內容(serialize)
這個比較方便 = v =,用起來很舒服
- 生成treeview內容
treeView1.Nodes.Clear();
treeView1.Nodes.Add(Deserialize());
- 保存文件內容
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Serialize();
}
menustrip,contextmenustrip菜單欄
就是一個菜單欄,可以添加一些事件,還是比較方便,推薦使用。
其他也沒什么大問題了,百度都能解決,注意問題多考慮一下,少寫點bug代碼就行了 = v =
源碼附上
項目傳送門友情提示,應該有一些小問題,別噴 (`・ω・´)