zoukankan      html  css  js  c++  java
  • 学生信息管理系统(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 =

    源码附上

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

  • 相关阅读:
    VS学习笔记2
    VS学习笔记
    分享几个有趣的小程序
    关于类型的转换(抄来的 ,留着,感觉有用。)
    现在觉得IT还挺有意思
    DataGrid 查出一个列 按要求显示格式 例如:操作人(地点)
    WPF DataGrid 列显示0,-1(作废、删除)状态,1,2(支出、收入)类型,操作人(在其他表中),如何转换格式。
    WPF DataGrid中鼠标双击某一列,弹出窗体作为(增加、修改、详细)按钮的快捷键。
    “指定的参数已超出有效值的范围”在【 parameterUpdate.Add(new OracleParameter("STATUS", 0));】报错
    WPF StoreDataSetPaginator
  • 原文地址:https://www.cnblogs.com/xxhao/p/12598625.html
Copyright © 2011-2022 走看看