学生信息管理系统

第一次写博客,很多地方应该会做的不太好,海涵海涵。

这次是做一个学生信息管理系统,使用的是Winform进行程序设计。

下面这是这次实验的要求。

 

实现一个小型的学生信息管理系统,实现学生信息的输入,浏览,编辑、查找等基本功能,要求:

1.学生信息包括学 号、姓 名、性别、系别、家庭住址等基本情况,选择合适的控件尽可能方便用户的输入;

2.程序需保证用户的输入有效(即进行必要的验证操作);

3.用户可通过TreeView控件或其他合适的界面进行所有学生信息的浏览,系统能够体现数据的层次化特性,并提供对学生信息的查找、修改和删除功能;

4.数据可永久保存,可保存在数据库或文件中

5.其他任何相关功能,如院系增加、调整、节点拖放等

 

第一步只需要使用splitContainer进行布局分布,左边为treeView,右边为具体信息。具体信息中使用TabControl分为两页分别管理专业信息和学生信息。信息使用简单的Label标签和TextBox,RadioButton进行布局。

界面截图

 

本次实验中,对我来说难度较大的是数据Xml序列化和节点的拖动,以及代码Bug的修改。

先说说Xml的序列化和反序列化。实际上就是使用StringBuilding通过遍历treeView上的节点并且取出其中的Tag元素,将内部数据完整的保存在Node节点中。同理,反序列化就是通过读取Xml中的语句取出数据重新赋值到treeView中实现数据的提取。

节点的拖拽我参考了以为大佬的代码,后面会给出链接供大家参考。

https://www.cnblogs.com/xxhao/p/12598625.html

 

然后这是我的完整代码,仅供参考问题还有很多,本来类要写学院后改成专业,本人也是很后悔,非常的后悔,把整个代码弄乱了。

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using System.Xml.Serialization;
using System.IO;

namespace StuMessage
{
    public partial class Form1 : System.Windows.Forms.Form
    {
        public Form1()
        {
            InitializeComponent();
            //BuildFacetTree(this.treeView1, "TreeXml.xml");
        }

       

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node.Level == 2)
            {
                this.college_id.Enabled = false;
                this.college_name.Enabled = true;
                this.college_desc.Enabled = true;
                this.college_id.Text = "";
                this.college_name.Text = "";
                this.college_desc.Text = "";
                this.tabPage.SelectedIndex = 1;

                College college = e.Node.Tag as College;
                if (college == null) return;
                this.college_id.Text = college.Id;
                this.college_name.Text = college.Name;
                this.college_desc.Text = college.Desc;

                this.add.Enabled = true;
                this.edit.Enabled = false;
                this.delete.Enabled = false;
                this.search.Enabled = true;
                this.id.Enabled = true;
                this.name.Enabled = true;
                this.boy.Checked = true;
                this.address.Enabled = true;
                this.prize.Enabled = true;

                this.major_add.Enabled = false;
                this.major_delete.Enabled = true;
                this.major_edit.Enabled = true;

            }
            else if (e.Node.Level == 3)
            {
                this.tabPage.SelectedIndex = 0;
                this.add.Enabled = false;
                this.edit.Enabled = true;
                this.delete.Enabled = true;

                this.id.Enabled = false;


                Student student = e.Node.Tag as Student;
                if (student == null) return;
                this.id.Text = student.Id;
                this.name.Text = student.Name;
                this.address.Text = student.Address;
                this.prize.Text = student.Awards;
                if (student.Sex) this.boy.Checked = true;
                else this.girl.Checked = true;

            }
            else if(e.Node.Level==1)
            {
                this.college_id.Enabled = true;
                this.college_name.Enabled = true;
                this.college_desc.Enabled = true;
                this.college_id.Text = "";
                this.college_name.Text = "";
                this.college_desc.Text = "";
                this.tabPage.SelectedIndex = 1;
                this.major_add.Enabled = true;
                this.major_delete.Enabled = false;
                this.major_edit.Enabled = false;
            }
            else
            {
                this.add.Enabled = false;
                this.edit.Enabled = false;
                this.delete.Enabled = false;
                this.id.Enabled = false;
            }
        }

        private void add_Click(object sender, EventArgs e)
        {
            TreeNode node = new TreeNode(this.name.Text);
            bool sex = this.boy.Checked ? true : false;
            Student student = new Student(this.id.Text, this.name.Text, this.address.Text, this.prize.Text, sex);
            node.Tag = student;
            if (this.treeView1.SelectedNode.Level == 2)
            {
                this.treeView1.SelectedNode.Nodes.Add(node);
                this.treeView1.SelectedNode.Expand();
            }
            else
            {
                MessageBox.Show("必须选中一个系节点");
            }

        }

        private void edit_Click(object sender, EventArgs e)
        {
            if (this.treeView1.SelectedNode.Level == 3)
            {
                Student student = this.treeView1.SelectedNode.Tag as Student;
                if (student.Id == this.id.Text)
                {
                    student.Name = this.name.Text;
                    student.Address = this.address.Text;
                    student.Awards = this.prize.Text;
                    student.Sex = this.boy.Checked;
                }
                this.treeView1.SelectedNode.Tag = student;
            }
        }

        private void delete_Click(object sender, EventArgs e)
        {
            if (this.treeView1.SelectedNode.Level == 3)
            {
                if (MessageBox.Show("Are you sure to delete?", "Confirm", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    this.treeView1.SelectedNode.Nodes.Remove(this.treeView1.SelectedNode);
                }
            }
        }
        private void search_Click(object sender, EventArgs e)
        {
            string strText = string.Empty;
            InputDialog.Show(out strText);
            if (string.IsNullOrEmpty(strText))
            {
                MessageBox.Show("请输入搜索内容!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            foreach (TreeNode node in this.treeView1.Nodes)
                Traverse(node, strText);


        }
        private void Traverse(TreeNode treeView, string strText)
        {
            foreach (TreeNode node in treeView.Nodes)
            {
                Student student = node.Tag as Student;
                if (student != null)
                {
                    if (student.Name.Contains(strText))
                    {
                        this.treeView1.SelectedNode = node;
                        MessageBox.Show("已搜索到结果!");
                        break;
                    }
                }
                else
                {
                    Traverse(node, strText);
                }
            }
        }

        private void college_add_Click(object sender, EventArgs e)
        {
            TreeNode node = new TreeNode(this.college_name.Text);
            College college = new College(this.college_id.Text, this.college_name.Text, this.college_desc.Text);
            node.Tag = college;
            if (this.treeView1.SelectedNode.Level == 1)
            {
                this.treeView1.SelectedNode.Nodes.Add(node);
                this.treeView1.SelectedNode.Expand();
            }
            else
            {
                MessageBox.Show("必须选中一个系节点");
            }
        }

        private void college_edit_Click(object sender, EventArgs e)
        {
            if (this.treeView1.SelectedNode.Level == 2)
            {
                College college = this.treeView1.SelectedNode.Tag as College;
                if (college.Id == this.college_id.Text)
                {
                    college.Name = this.college_name.Text;
                    college.Desc = this.college_desc.Text;

                }
                this.treeView1.SelectedNode.Tag = college;
            }
        }
        private void college_delete_Click(object sender, EventArgs e)
        {
            if (this.treeView1.SelectedNode.Level == 2)
            {
                if (MessageBox.Show("Are you sure to delete?", "Confirm", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                {
                    this.treeView1.SelectedNode.Nodes.Remove(this.treeView1.SelectedNode);
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            //string xmlPath = System.Environment.CurrentDirectory + "\\TreeXml.xml";
            ////1.加载
            //XDocument xDoc = XDocument.Load(xmlPath);
            ////2.把xml的根节点加载到Treeview的根节点上
            //XElement xeRoot = xDoc.Root;
            //TreeNode tnode = treeView1.Nodes.Add(xeRoot.Name.ToString());
            ////3.开始递归
            //LoadXmlToTree(xeRoot, tnode);


            doc.Load("TreeXml.xml");
            RecursionTreeControl(doc.DocumentElement, treeView1.Nodes);//将加载完成的XML文件显示在TreeView控件中
            treeView1.ExpandAll();//展开TreeView控件中的所有项
        }

        private void RecursionTreeControl(XmlNode xmlNode,TreeNodeCollection nodes)
        {
            foreach(XmlNode node in xmlNode.ChildNodes)
            {
                TreeNode treeNode = new TreeNode();
                if (node.Attributes["Id"].Value == "")
                {
                    treeNode.Text = node.Attributes["Name"].Value;
                }
                else if(node.Attributes["Desc"]==null)
                {
                    Student student = new Student(node.Attributes["Id"].Value, node.Attributes["Name"].Value, node.Attributes["Address"].Value, node.Attributes["Prize"].Value, node.Attributes["Sex"].Value == "True" ? true : false);
                    treeNode.Tag = student;
                    treeNode.Text = student.Name;
                }
                else
                {
                    College college = new College(node.Attributes["Id"].Value, node.Attributes["Name"].Value, node.Attributes["Desc"].Value);
                    treeNode.Tag = college;
                    treeNode.Text = college.Name;
                }

                nodes.Add(treeNode);
                RecursionTreeControl(node, treeNode.Nodes);
            }
        }




        private string xmlLine = "";
        private void Form1_Closing(object sender, FormClosingEventArgs e)
        {
            try
            {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
                stringBuilder.Append("<Tree>");
                foreach (TreeNode treeNode in treeView1.Nodes)
                {
                    xmlLine = GetRSSText(treeNode);
                    stringBuilder.Append(xmlLine);
                    if (treeNode.Nodes.Count > 0) parseNode(treeNode, stringBuilder);
                    stringBuilder.Append("</Node>");
                }
                stringBuilder.Append("</Tree>");
                StreamWriter streamWriter = new StreamWriter("TreeXml.xml", false, System.Text.Encoding.UTF8);
                streamWriter.Write(stringBuilder.ToString());
                streamWriter.Close();
            }
            catch
            {

            }
        }

        private void parseNode(TreeNode treeNode, StringBuilder stringBuilder)
        {
            foreach(TreeNode node in treeNode.Nodes)
            {
                xmlLine = GetRSSText(node);
                stringBuilder.Append(xmlLine);
                if (node.Nodes.Count > 0)
                {
                    parseNode(node, stringBuilder);
                }
                stringBuilder.Append("</Node>");
            }
        }

        private string GetRSSText(TreeNode node)
        {
            string str = "";
            Student student = node.Tag as Student;
            College college = node.Tag as College;
            if (college!=null)
            {
                
                str= "<Node Id=\"" + college.Id + "\" Name=\"" + college.Name + "\" Desc=\"" + college.Desc + "\" >";
            }
            else if(student!=null)
            {
                str= "<Node Id=\"" + student.Id + "\" Name=\"" + student.Name + "\" Address=\"" + student.Address + "\" Prize=\"" + student.Awards+ "\" Sex=\"" + student.Sex + "\">";
            }
            else
            {
                str = "<Node Id=\"\" Name=\""+ node.Text + "\" Address=\"\" Prize=\"\" Sex=\"\" >";
            }
            return str;
        }


        private void treeView_ItemDrag(object sender, ItemDragEventArgs e)
        {
            TreeNode dragNode = e.Item as TreeNode;
            if (dragNode.Level == 2 || dragNode.Level == 3)
            {
                DoDragDrop(dragNode, DragDropEffects.Move);
            }
            
            
        }
        private void treeView_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = e.AllowedEffect;
        }
        private void treeView_DragOver(object sender, DragEventArgs e)
        {
            TreeView treeView = sender as TreeView;
            treeView.SelectedNode = treeView.GetNodeAt(treeView.PointToClient(new Point(e.X, e.Y)));
            //this.prize.Text = e.X + " " + e.Y;
        }
        private void treeView_DragDrop(object sender, DragEventArgs e)
        {
            TreeView treeView = sender as TreeView;
            TreeNode dragNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
            if (dragNode.Equals(treeView.SelectedNode))
                return;
            if (treeView.SelectedNode.Level != dragNode.Level - 1) return;
            if (e.Effect == DragDropEffects.Move)
            {
                if (treeView.SelectedNode == null)
                {
                    treeView.Nodes.Add(dragNode.Clone() as TreeNode);
                    dragNode.Remove();
                    return;
                }
                dragNode.Remove();
                treeView.SelectedNode.Nodes.Add(dragNode);
            }
            treeView1.ExpandAll();
        }

        private void tabPage1_Click(object sender, EventArgs e)
        {

        }
    }
}

 

posted @ 2020-04-08 08:59  灯登等灯  阅读(614)  评论(0)    收藏  举报