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命名空间和文件操作命名空间:
由于该类的方法需要重复调用,故它的方法我们都设为静态的吧。软件初始化时需要读入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>
由于篇幅太长,我还是另开一个标题吧,见谅!
在该软件中,我们主要是为了实现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");
}
}<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>
由于篇幅太长,我还是另开一个标题吧,见谅!


浙公网安备 33010602011771号