學生信息管理系統(Windows程序設計)

前言

  其實我覺的學校作業可以稍微少花點時間,把時間放到自己認爲重要的地方去。(`・ω・´)

問題描述

  實現一個小型的學生信息管理系統,實現學生信息的輸入,瀏覽,編輯、查找等基本功能,要求:

  • 學生信息包括學號、姓名、性別、系別、家庭住址等基本情況,選擇合適的控件儘可能方便用戶的輸入;

  • 程序需保證用戶的輸入有效(即進行必要的驗證操作);

  • 用戶可通過TreeView控件或其他合適的界面進行所有學生信息的瀏覽,系統能夠體現數據的層次化特性,並提供對學生信息的查找、修改和刪除功能;

  • 數據可永久保存,可保存在數據庫或文件中

  • 其他相關功能,如院系增加、調整、節點拖放等

  • 在treeview節點上右鍵同樣可以進行一系列操作

先看個效果吧,想要多瞭解點直接下載代碼去看吧 image.png

解決思路

通過 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 =

源碼附上 項目傳送門

  友情提示,應該有一些小問題,別噴 (`・ω・´)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章