学生信息管理系统(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();
        }

  就是一个菜单栏,可以添加一些事件,还是比较方便,推荐使用。
其他也没什么大问题了,百度都能解决,注意问题多考虑一下,少写点bug代码就行了 = v =

源码附上

  项目传送门友情提示,应该有一些小问题,别喷 (`・ω・´)

原文地址:https://www.cnblogs.com/xxhao/p/12598625.html