开发上位机软件的语言有很多,为何偏偏选中了.NET呢,主要是因为这个语言开发上位机软件相当方面而且微软提供了大量的类库和API。虽然底层实现代码不像JAVA一样可以开源的,但是这个不影响这门语言的推广,试问有几个人会真正意义上去研究底层的代码呢?再说我们是搞工程的,在保证质量的前提下追求的是速度。而且。NET开发图形界面是相当方便的,不像JAVA一样代码都要自己一笔一笔的写蛮麻烦。对于,NET开发上位机软件,我们应该做到什么程度才算用的比较熟练了呢?我觉得应该是自己会创建类,其实,NET最重要的就是类。每个公司都有自己专门的类库,这就是为何有些公司动不动一个月就出一个新产品了。就是因为人家自己公司的类库相当强大。好多东西已经集成好了就需要调用相应的API就OK了。这次我就专门分享下自己这次做的类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace lesson
{
class userserver
{
///
/// 检验登录是否成功
///
///
public bool CheckeLogin(userinfor user,ref string message)
{
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "file\\UserInfor.xml");
XmlNode root = doc.DocumentElement;
XmlNode target = root.SelectSingleNode(string.Format("//user[@id='{0}']",user.Username));
if (target != null)
{
XmlElement xe = (XmlElement)target;
if (xe.GetAttribute("password") == user.Password)
{
message = "登陆成功";
return true;
}
else
{
message = "密码错误";
return false;
}
}
else
{
message = "用户名不存在";
return false;
}
}
///
/// 修改密码
///
///
public bool changepwd(userinfor user, ref string message)
{
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "file\\UserInfor.xml");
XmlNode root = doc.DocumentElement;
XmlNode target = root.SelectSingleNode(string.Format("//user[@id='{0}'and @password='{1}']", user.Username,user.Password));
if (target != null)
{
XmlElement xe = (XmlElement)target;
xe.SetAttribute("password", user.Newpassword);
doc.Save(AppDomain.CurrentDomain.BaseDirectory + "file\\UserInfor.xml");
message = "修改成功";
return true;
}
else
{
message = "原密码错误";
return false;
}
}
///
/// 添加用户信息
///
///
public bool adduser(userinfor user, ref string message)
{
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "file\\UserInfor.xml");
XmlNode root = doc.DocumentElement;
XmlNode target = root.SelectSingleNode(string.Format("//user[@id='{0}']", user.Username));
if (target == null)
{
XmlElement xe = doc.CreateElement("user");
xe.SetAttribute("id",user.Username);
xe.SetAttribute("password", user.Password);
root.AppendChild(xe);
doc.Save(AppDomain.CurrentDomain.BaseDirectory + "file\\UserInfor.xml");
message = "添加成功";
return true;
}
else
{
message = "用户已存在";
return false;
}
}
}
}
这个你只需要定义一个userserver对象,你就可以调用相应的方法,这样做不仅可以减少冗余的代码而且看起来相当清晰,调试也方便。在这个类中,你可以看到三种方法:检验登录是否成功的方法,密码修改的方法,还有添加用户的方法。
namespace lesson
{
class view
{ //mDocument代表XML文件,mCurrentNode表示选择好的节点。
public XmlDocument mDocument;
public bool addcondition(yaoinfor yao)
{
XmlDocument doc = new XmlDocument();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "yaogan.xml");
XmlNode root = doc.DocumentElement;
XmlNode target = root.SelectSingleNode(string.Format("//message[@times='{0}']", yao.Times));
if (target == null)
{
XmlElement xe = doc.CreateElement("message");
xe.SetAttribute("times",yao.Times);
xe.SetAttribute("condition", yao.Conditions);
root.AppendChild(xe);
doc.Save(AppDomain.CurrentDomain.BaseDirectory + "yaogan.xml");
//message = "添加成功";
return true;
}
else
{
// message = "记录已存在";
return false;
}
}
public bool disp(ref Listcondis ,ref string message)
{
XmlDocument doc = new XmlDocument();
//List condis = new List();
view vies = new view();
yaoinfor yaoconditions = new yaoinfor();
doc.Load(AppDomain.CurrentDomain.BaseDirectory + "yaogan.xml");
XmlNode root = doc.DocumentElement;
try
{
foreach (XmlNode item in root.ChildNodes)
{
XmlElement xe = (XmlElement)item;
switch (item.Name)
{
case "times": yaoconditions.Times = xe.GetAttribute("times"); break;
case "condition": yaoconditions.Conditions = xe.GetAttribute("condition"); break;
default: break;
}
condis.Add(yaoconditions);
}
return true;
}
catch
{
return false;
}
}
public void CreatXmlDocument() //建立新的文件
{
mDocument = new XmlDocument();
//定义XML文档头文件
XmlDeclaration xmlDeclaration = mDocument.CreateXmlDeclaration("1.0", "utf-8", null);
//增加XML文档头
mDocument.AppendChild(xmlDeclaration);
//定义XML的根
XmlElement xmlRoot = mDocument.CreateElement("Modbus");
//添加XML的根
mDocument.AppendChild(xmlRoot);
//添加根的属性
xmlRoot.SetAttribute("Version", "1.00.00");
// XmlElement newtimes = mDocument.CreateElement("times");
//XmlElement newcondition = mDocument.CreateElement("condition");
//XmlText times = mDocument.CreateTextNode(DateTime.Now.ToString());
//XmlText conditions = mDocument.CreateTextNode(yaoin.Conditions);
//newtimes.AppendChild(times);
//newcondition.AppendChild(conditions);
//添加XML根的节点
//xmlRoot.AppendChild(newtimes);
//xmlRoot.AppendChild(newcondition);
// Save the document to a file.
mDocument.Save("yaogan.xml");
}
//public void ReadXmlDocument() //读取Xml文件
//{
// XmlElement xmlRoot = mDocument.DocumentElement;
// //使用SelectSingleNode查找到想要的参数
// mCurrentNode = xmlRoot.SelectSingleNode("times");
// comboBox1.Text = mCurrentNode.InnerText;
//}
//public void SaveXmlDocument() //保存Xml文件
//{
// //XmlElement xmlRoot = mDocument.DocumentElement;
// ////使用SelectSingleNode查找到想要的参数,
// //mCurrentNode = xmlRoot.SelectSingleNode("times");
// //mCurrentNode.InnerText = comboBox1.Text;
// mDocument.Save("ModbusIni.xml");
//}
}
}
这些代码都是在一个类中的,这次开发这个软件我所实现的方法都编写在相应的类中,感觉用起来相当方便,调试时也很方便,如果结果没出来,你只需要进入相应的类方法中调试就行,不会干扰其他代码。对于多人合作相当方便,各自只需要把自己要做的软件模块写成对应的类方法。整合组装在一起就行而不需要知道对方的进度或代码是如何编写的。这次就不截图了,感觉图形截了好多次了。如果要看软件实物,我已经上传了,可以去下载、https://bbs.eeworld.com.cn/thread-341313-1-1.html
有些细心的网友可能看到我保存数据用的是XML格式,可能会问为何不用数据库呢?主要是考虑到大伙基本是搞电子的,好多是没安装数据库。而用这个就不需要安装什么了,只要打开软件就可以对数据进行处理,很方便。其次是因为我当时在搞ASP.NET做网站,当时就弄.XML所以就用个了这个。