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>

由于篇幅太长,我还是另开一个标题吧,见谅!


posted on 2008-04-29 11:23  [刚子]  阅读(1973)  评论(8)    收藏  举报

导航