(亿众国际-004)[原创]基于XML-DOM技术的MIS系统(学生管理系统-精简版)
/////////////////////////////////////////////////////////
//Author: stardicky //
//E-mail: stardicky@hotmail.com //
//QQNumber: 9531511 //
//CompanyName: Ezone International //
//Class: HBS-0308 //
//title: 基于XML-DOM技术的MIS系统(学生管理系统-精简版) //
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
//注:可能有人会问我为什么不用数据库技术来实现当前代码,有以下几个原因
//1.有少量的数据需要存储
//2.速度非常快(主要原因),尤其是在网络上非常适用
//3.能进行串行化
//4.便于企业级应用
////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
//源文件数量:2 //
///////////////////////////////////////////////////////
////////////////////////////////文件1 EzoneInfo.xml/////////////////////////////////
<?xml version="1.0" encoding="utf-8"?>
<!-- 文档声明 -->
<!-- 文档根元素 -->
<亿众国际>
<!-- '千人软件工程' 是 '亿众国际' 的子元素 -->
<千人软件工程>
<班级 学号流水号="6">
<!-- '学号' 是 '学员' 的属性 -->
<学员 学号="1">
<姓名>章程</姓名>
<性别>男</性别>
<出生日期>1984-10-01</出生日期>
<班级>HBS-0308</班级>
</学员>
<学员 学号="2">
<姓名>彭超</姓名>
<性别>男</性别>
<出生日期>1981年3月8日</出生日期>
<班级>HBS-0308</班级>
</学员>
<学员 学号="5">
<姓名>dicky</姓名>
<性别>男</性别>
<出生日期>1984-10-01</出生日期>
<班级>HBS-0308</班级>
</学员>
<学员 学号="6">
<姓名>new</姓名>
<性别>男</性别>
<出生日期>1984-11-11</出生日期>
<班级>HBS-0308</班级>
</学员>
</班级>
</千人软件工程>
</亿众国际>
//////////////////////////////////文件2 EzoneMgrSys.cs ////////////////////////////////
using System;
using System.Xml;
namespace EzoneMgrSys
{
class MgrSysClass
{
//文档对象模型(DOM),这是核心对象!
public static XmlDocument MyDoc;
[STAThread]
public static void Main(string[] args)
{
//初始化对象模型
MyDoc=new XmlDocument();
Console.WriteLine("正在加载 EzoneInfo.xml 文件......");
//加载XML文件到文档对象模型(DOM)中
MyDoc.Load("..\\..\\EzoneInfo.xml"); //注意文件位置
Console.WriteLine("DOM(Data Object Modal)数据对象模型在内存中创建完毕!");
//保存用户输入的命令字符串
string Command=string.Empty;
//打印菜单
PrintMenu();
while(true)
{
Command=Console.ReadLine();
int i=0;
try
{
//如果用户没有输入数字,则这里的转换*作会抛出一个异常!
i=int.Parse(Command);
}
catch
{
PrintMenu();
continue;
}
switch(i)
{
case 1:
//查看所有学员信息
MgrSysClass.DisplayAll();
break;
case 2:
//插入新学员信息
MgrSysClass.InsertModule();
break;
case 3:
//更新学员信息
MgrSysClass.UpdateModule();
break;
case 4:
//删除学员信息
MgrSysClass.DeleteModule();
break;
case 5:
//退出系统
goto CloseLabel;
default:
Console.WriteLine("输入错误命令!");
break;
}
PrintMenu();
}
CloseLabel:
Console.WriteLine("正在读取内存中DOM对象,准备向 EzoneInfo.xml 文件更新数据......");
//保存XML文件
MgrSysClass.MyDoc.Save("..\\..\\EzoneInfo.xml");
Console.WriteLine("文件保存完毕!");
Console.WriteLine("程序正常退出!");
//系统信息
MgrSysClass.SystemAbout();
Console.Write("按任意键退出.....");
}
/// <summary>
/// 打印菜单模块
/// </summary>
public static void PrintMenu()
{
Console.WriteLine(" __________________________________________________________ ");
Console.WriteLine("|______________ 亿众国际 学生管理系统(精简版) _____________|");
Console.WriteLine("| |");
Console.WriteLine("| 1.查看信息 |");
Console.WriteLine("| 2.插入信息 |");
Console.WriteLine("| 3.修改信息 |");
Console.WriteLine("| 4.删除信息 |");
Console.WriteLine("| 5.退出系统 |");
Console.WriteLine("|----------------------------------------------------------|");
Console.WriteLine("| 注:只有正常退出,才能保证将内存中数据保存到 XML 文件! |");
Console.WriteLine(" ---------------------------------------------------------- ");
Console.Write("命令:");
}
/// <summary>
/// 插入新学员信息模块
/// </summary>
public static void InsertModule()
{
//保存用户的输入
MyLabel1:Console.Write("请输入你的姓名:");
string name=Console.ReadLine();
if(name.Trim()==string.Empty)
goto MyLabel1;
MyLabel2:Console.Write("请输入你的性别:");
string sex=Console.ReadLine();
if(sex.Trim()==string.Empty)
goto MyLabel2;
MyLabel3:Console.Write("请输入你的出生日期:");
string birthday=Console.ReadLine();
if(birthday.Trim()==string.Empty)
goto MyLabel3;
MyLabel4:Console.Write("请输入你的班级:");
string classid=Console.ReadLine();
if(classid.Trim()==string.Empty)
goto MyLabel4;
//创建当前DOM对象的代码片段
XmlDocumentFragment MyDocFrag=MyDoc.CreateDocumentFragment();
//获得具有[学号流水号]属性的[班级]节点
XmlNode MyNode=MyDoc.SelectSingleNode("//班级[@学号流水号]");
//获取当前[学号流水号]的值
int StuId=int.Parse(MyNode.Attributes["学号流水号"].Value);
//修改[学号流水号]
StuId++;
MyNode.Attributes["学号流水号"].Value=StuId.ToString();
//创建一个<学员>节点
XmlElement MyElementRoot=MyDoc.CreateElement("学员");
//创建一个<学号>属性,并把他绑定到<学员>节点
XmlAttribute MyAttribute=MyDoc.CreateAttribute("学号");
MyAttribute.Value=StuId.ToString();
MyElementRoot.SetAttributeNode(MyAttribute);
//创建一个<姓名>节点
XmlElement MyElementName=MyDoc.CreateElement("姓名");
MyElementName.InnerText=name;
//创建一个<性别>节点
XmlElement MyElementSex=MyDoc.CreateElement("性别");
MyElementSex.InnerText=sex;
//创建一个<出生日期>节点
XmlElement MyElementBirthday=MyDoc.CreateElement("出生日期");
MyElementBirthday.InnerText=birthday;
//创建一个<班级>节点
XmlElement MyElementClassId=MyDoc.CreateElement("班级");
MyElementClassId.InnerText=classid;
//把以上的节点添加到<学员>的子节点中
MyElementRoot.AppendChild(MyElementName);
MyElementRoot.AppendChild(MyElementSex);
MyElementRoot.AppendChild(MyElementBirthday);
MyElementRoot.AppendChild(MyElementClassId);
//添加<学员>节点到 MyDocFrag 对象中
MyDocFrag.AppendChild(MyElementRoot);
//获得具有[学号流水号]属性的[班级]节点
XmlNode TempNode=MyDoc.SelectSingleNode("//班级[@学号流水号]");
//把代码片段添加到DOM对象中
TempNode.AppendChild(MyDocFrag);
Console.WriteLine("成功添加学员记录!");
Console.Write("按任意键继续...");
Console.ReadLine();
}
/// <summary>
/// 更新学员信息模块
/// </summary>
public static void UpdateModule()
{
Console.Write("请输入你将要修改学员的学生学号:");
int StuId;
try
{
StuId=int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("你输入了非法字符!");
return;
}
//搜索你要修改学员的学生学号
XmlNode MyNode=MyDoc.SelectSingleNode("//学员[@学号='"+StuId.ToString()+"']");
//如果没有搜索到,对象值就为 null
if(MyNode==null)
Console.WriteLine("对不起,没有找到你想要修改的学员记录!");
else
{
//保存用户的输入
MyLabel1:Console.Write("请输入姓名:");
string name=Console.ReadLine();
if(name.Trim()==string.Empty)
goto MyLabel1;
MyLabel2:Console.Write("请输入性别:");
string sex=Console.ReadLine();
if(sex.Trim()==string.Empty)
goto MyLabel2;
MyLabel3:Console.Write("请输入出生日期:");
string birthday=Console.ReadLine();
if(birthday.Trim()==string.Empty)
goto MyLabel3;
MyLabel4:Console.Write("请输入班级:");
string classid=Console.ReadLine();
if(classid.Trim()==string.Empty)
goto MyLabel4;
//克隆原来节点
XmlNode MyNewNode=MyNode.CloneNode(true);
//进行赋值*作
MyNewNode.ChildNodes[0].InnerText=name;
MyNewNode.ChildNodes[1].InnerText=sex;
MyNewNode.ChildNodes[2].InnerText=birthday;
MyNewNode.ChildNodes[3].InnerText=classid;
//进行替换节点的*作
MyNode.ParentNode.ReplaceChild(MyNewNode,MyNode);
Console.WriteLine("成功修改学员记录!");
}
Console.Write("按任意键继续...");
Console.ReadLine();
}
/// <summary>
/// 删除学员信息模块
/// </summary>
public static void DeleteModule()
{
Console.Write("请输入你将要删除学员的学生学号:");
int StuId;
try
{
StuId=int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("你输入了非法字符!");
return;
}
//搜索你要删除学员的学生学号
XmlNode MyNode=MyDoc.SelectSingleNode("//学员[@学号='" + StuId.ToString() + "']");
//如果没有搜索到,对象值就为 null
if(MyNode==null)
Console.WriteLine("对不起,没有找到你想要删除的学员记录!");
else
{
//进行删除节点*作
MyNode.ParentNode.RemoveChild(MyNode);
Console.WriteLine("成功删除学员记录!");
}
Console.Write("按任意键继续...");
Console.ReadLine();
}
/// <summary>
/// 查看所有学员信息模块
/// </summary>
public static void DisplayAll()
{
//搜索所有的<学员>节点,并赋给一个节点列表对象
XmlNodeList MyNodeList=MyDoc.SelectNodes("//学员");
//如果<学员>节点的数量不为0,就遍历节点列表对象进行打印
if(MyNodeList.Count!=0)
{
Console.WriteLine(" ---------------------------------------------------------- ");
Console.WriteLine("|学号\t姓名\t性别\t出生日期\t班级 |");
Console.WriteLine(" ---------------------------------------------------------- ");
foreach(XmlNode MyNode in MyNodeList)
{
string strTemp=string.Empty;
strTemp+=MyNode.Attributes["学号"].Value+"\t"+ //获取学号
MyNode.ChildNodes[0].InnerText +"\t"+ //获取姓名
MyNode.ChildNodes[1].InnerText+"\t"+ //获取性别
MyNode.ChildNodes[2].InnerText+"\t"+ //获取出生日期
MyNode.ChildNodes[3].InnerText; //获取班级
Console.WriteLine(strTemp);
}
Console.WriteLine(" ---------------------------------------------------------- ");
}
else
Console.WriteLine("当前DOM中没有学员记录!");
Console.Write("按任意键继续...");
Console.ReadLine();
}
/// <summary>
/// 系统模块
/// </summary>
public static void SystemAbout()
{
Console.WriteLine(" __________________________________________________________ ");
Console.WriteLine("|______________ 亿众国际 学生管理系统(精简版) _____________|");
Console.WriteLine("| |");
Console.WriteLine("| 作者:章程 电邮:stardicky@hotmail.com |");
Console.WriteLine("| OICQ:9531511 版本:1.0 |");
Console.WriteLine("|__________________________________________________________|");
}
}
}
//希望大家多提点意见