(亿众国际-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("|__________________________________________________________|");
}
}
}
//希望大家多提点意见