学生信息管理系统
第一次写博客,很多地方应该会做的不太好,海涵海涵。
这次是做一个学生信息管理系统,使用的是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) { } } }

                
            
        
浙公网安备 33010602011771号