QQ登录器的分层实现之二(业务实现)‏

昨晚刚写完第一部份,就得到很多朋友的关注,谢谢大家,现在继续第二部份的内容。先说明一下该工程是用VS2005实现的,其实用什么工具都无所谓,实现是一样的。Config.cs是XML文件操作类,我们这里把它定为配置,所以叫config,Account.cn是QQ帐号实体类,包括了QQ的一些属性,下面我们来一起写吧。
        在该软件中,我们主要是为了实现QQ的自动登录,所以实体类中应包括QQ帐号,QQ密码,昵称,是否隐身登录,最后登录时间,启动快捷键等属性,如下代码:
using System;
using System.Collections.Generic;
using System.Text;

namespace Login.BLL.Entity
{
    public class Account
    {
        private string number;
        /**//// <summary>
        /// QQ号码
        /// </summary>
        public string Number
        {
            get { return number; }
            set { number = value; }
        }

        private string password;
        /**//// <summary>
        /// QQ密码
        /// </summary>
        public string Password
        {
            get { return password; }
            set { password = value; }
        }

        private string name;
        /**//// <summary>
        /// 昵称
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        private bool isStealth;
        /**//// <summary>
        /// 是否隐身登录
        /// </summary>
        public bool IsStealth
        {
            get { return isStealth; }
            set { isStealth = value; }
        }


        private string flashKey;
        /**//// <summary>
        /// 快捷键
        /// </summary>
        public string FlashKey
        {
            get { return flashKey; }
            set { flashKey = value; }
        }

        private DateTime lastLoginTime;
        /**//// <summary>
        /// 最后登录时间
        /// </summary>
        public DateTime LastLoginTime
        {
            get { return lastLoginTime; }
            set { lastLoginTime = value; }
        }


        public Account() { }
        public Account(string number, string name, string pwd, bool ischeck, string flashkey)
        {
            this.number = number;
            this.name = name;
            this.password = pwd;
            this.isStealth = ischeck;
            this.flashKey = flashkey;
        }

    }
}

业务实体定下来后,我们开始围绕它来进行增删改查了,就是实现Config.cs类。对于XML的基本知识在这里我就不多加描述了,大家可以到MSDN上查找相关资料。要对XML文件做操作,我们必须引用XML命名空间和文件操作命名空间:

using System.Xml;
using System.IO;
using Login.BLL.Entity;//实体类命名空间

由于该类的方法需要重复调用,故它的方法我们都设为静态的吧。软件初始化时需要读入XML存有的帐号信息以显示给用户看,如果文件不存在怎么办?对了,要创建文件:
/**//// <summary>
        /// 创建XML文件
        /// </summary>
        /// <param name="xmlFilePath">系统启动路径</param>
        public static void CreateXmlFile(string xmlFilePath)
        {
            XmlDocument xmlDoc = new XmlDocument();
            //判断文件是否存在
            if (!File.Exists(xmlFilePath + "data.xml"))
            {
                //装载文件
                xmlDoc.LoadXml("<Account></Account>");
                //获得根节点
                XmlElement root = xmlDoc.DocumentElement;
                //创建QQ路径节点以存放QQ路径
                XmlNode qqPath = xmlDoc.CreateElement("QQpath");
                qqPath.InnerText = "";
                //在根节点上添加子节点
                root.AppendChild(qqPath);
                //保存文件
                xmlDoc.Save(xmlFilePath + "data.xml");
               
            }
           
        }
这时,在系统bin目录下就会创建一个debugdata.xml文件,显示如下:
<Account>
  <QQpath></QQpath>
</Account>
在文件创建后,内容还是空的,这时我们要添加QQ信息,
/**//// <summary>
        /// 添加帐号信息   
        /// </summary>
        /// <param name="xmlFilePath">文件路径</param>
        /// <param name="item">帐号信息</param>
        public static void AddAccount(string xmlFilePath,Account item)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlFilePath + "data.xml");
            XmlElement root = xmlDoc.DocumentElement;
            //创建帐号节点Number
            XmlNode numberNode = xmlDoc.CreateElement("Number");
            XmlAttribute numberAttr = xmlDoc.CreateAttribute("ID");
            numberAttr.Value = item.Number;
            numberNode.Attributes.Append(numberAttr);
            root.InsertAfter(numberNode, root.LastChild);
           
            //在节点Number中创建子节点"昵称"
            XmlNode nameNode = xmlDoc.CreateElement("Name");
            nameNode.InnerText = item.Name;
            numberNode.InsertAfter(nameNode, numberNode.LastChild);

            //在节点Number中创建子节点密码
            XmlNode pwdNode = xmlDoc.CreateElement("Password");
            pwdNode.InnerText = item.Password;
            numberNode.InsertAfter(pwdNode, numberNode.LastChild);

            //在节点Number中创建子节点"是否隐身"
            XmlNode isStealth = xmlDoc.CreateElement("IsStealth");
            isStealth.InnerText = item.IsStealth.ToString();
            numberNode.InsertAfter(isStealth, numberNode.LastChild);

            //在节点Number中创建子节点"快捷键"
            XmlNode flashKey = xmlDoc.CreateElement("FlashKey");
            flashKey.InnerText = item.FlashKey;
            numberNode.InsertAfter(flashKey, numberNode.LastChild);

            //在节点Number中创建子节点"最后登录时间"
            XmlNode lastTime = xmlDoc.CreateElement("LastLoginTime");
            lastTime.InnerText = item.LastLoginTime.ToString(); ;
            numberNode.InsertAfter(lastTime, numberNode.LastChild);

            //保存文件
            xmlDoc.Save(xmlFilePath + "data.xml");
        }
添加信息后,文件显示为:
<Account>
  <QQpath></QQpath>
  <Number ID="32154689">
    <Name>小明</Name>
    <Password>pDJXA+0NT055Scbs38KCDg==</Password>
    <IsStealth>False</IsStealth>
    <FlashKey>Ctrl+Q</FlashKey>
    <LastLoginTime>2008-4-27 22:54:15</LastLoginTime>
  </Number>
</Account>


原文出处:http://www.cnblogs.com/lixg84/