/// <summary>
        /// 删除账目记录
        /// </summary>
        /// <param name="record">要删除的账目记录</param>
        public void Delete(Record record)
        {
            XmlOperate  op  = new XmlOperate(System.Environment.CurrentDirectory + "\\Data\\" + record.Date.ToString(@"yyyy/MM") + ".xml", XmlFileOpType.创建, record.Date);
            XmlDocument doc = op.Get();
            XmlNode     xn  = doc.DocumentElement.SelectSingleNode("/datas/data[@id=" + record.Id.ToString() + "]");

            if (xn != null)
            {
                doc.DocumentElement.RemoveChild(xn);
                op.Save();
            }

            Config.CurrentBalance = Config.CurrentBalance + record.Spend - record.Income;
        }
        /// <summary>
        /// 更新账目记录
        /// </summary>
        /// <param name="record">要更新的账目记录</param>
        /// <param name="oldDate">更新前的账目记录副本</param>
        public void Update(Record newRecord, Record oldRecord)
        {
            if (newRecord.Date < Config.StartDate)
            {
                Config.StartDate = newRecord.Date;
            }
            if (newRecord.Date.Year == oldRecord.Date.Year && newRecord.Date.Month == oldRecord.Date.Month)
            {
                XmlOperate  op   = new XmlOperate(System.Environment.CurrentDirectory + "\\Data\\" + newRecord.Date.ToString(@"yyyy/MM") + ".xml", XmlFileOpType.创建, newRecord.Date);
                XmlDocument doc  = op.Get();
                XmlElement  data = (XmlElement)doc.DocumentElement.SelectSingleNode("/datas/data[@id=" + newRecord.Id.ToString() + "]");
                data.RemoveAll();
                data.SetAttribute("id", newRecord.Id.ToString());

                XmlElement date   = doc.CreateElement("date");
                XmlText    datetx = doc.CreateTextNode(newRecord.Date.ToString("yyyy-MM-dd"));
                date.AppendChild(datetx);

                XmlElement spend   = doc.CreateElement("spend");
                XmlText    spendtx = doc.CreateTextNode(newRecord.Spend.ToString("n"));
                spend.AppendChild(spendtx);

                XmlElement income   = doc.CreateElement("income");
                XmlText    incometx = doc.CreateTextNode(newRecord.Income.ToString("n"));
                income.AppendChild(incometx);

                XmlElement type   = doc.CreateElement("type");
                XmlText    typetx = doc.CreateTextNode(newRecord.Type.Id.ToString());
                type.AppendChild(typetx);

                XmlElement      description   = doc.CreateElement("description");
                XmlCDataSection descriptiontx = doc.CreateCDataSection(newRecord.Description);
                description.AppendChild(descriptiontx);

                data.AppendChild(date);
                data.AppendChild(spend);
                data.AppendChild(income);
                data.AppendChild(type);
                data.AppendChild(description);

                op.Save();

                Config.CurrentBalance = Config.CurrentBalance - oldRecord.Income + oldRecord.Spend + newRecord.Income - newRecord.Spend;
            }
            else
            {
                Delete(oldRecord);
                Create(newRecord);
            }
        }
        /// <summary>
        /// 获取指定ID的记录对象
        /// </summary>
        /// <param name="id">记录ID</param>
        /// <param name="date">账目的日期,要求精确到月</param>
        /// <returns>返回的记录对象</returns>
        public Record Get(int id, DateTime date)
        {
            XmlOperate  op  = new XmlOperate(System.Environment.CurrentDirectory + "\\Data\\" + date.ToString(@"yyyy/MM") + ".xml", XmlFileOpType.创建, date);
            XmlDocument doc = op.Get();
            XmlNode     xn  = doc.DocumentElement.SelectSingleNode("/datas/data[@id=" + id.ToString() + "]");

            if (xn != null)
            {
                return(Get((XmlElement)xn));
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        /// 添加记录
        /// </summary>
        /// <param name="record">要添加的账目记录</param>
        public void Create(Record record)
        {
            DirectoryInfo rd = new DirectoryInfo(System.Environment.CurrentDirectory + "\\Data\\" + record.Date.ToString("yyyy"));

            if (!rd.Exists)
            {
                rd.Create();
            }
            XmlOperate  op  = new XmlOperate(System.Environment.CurrentDirectory + "\\Data\\" + record.Date.ToString(@"yyyy/MM") + ".xml", XmlFileOpType.存在则创建, record.Date);
            XmlDocument doc = op.Get();

            record.Id          = ++Config.RecordCount;
            Config.RecordCount = record.Id;
            if (record.Date < Config.StartDate)
            {
                Config.StartDate = record.Date;
            }

            {
                XmlElement data = doc.CreateElement("data");
                data.SetAttribute("id", record.Id.ToString());

                XmlElement date   = doc.CreateElement("date");
                XmlText    datetx = doc.CreateTextNode(record.Date.ToString("yyyy-MM-dd"));
                date.AppendChild(datetx);

                XmlElement spend   = doc.CreateElement("spend");
                XmlText    spendtx = doc.CreateTextNode(record.Spend.ToString("n"));
                spend.AppendChild(spendtx);

                XmlElement income   = doc.CreateElement("income");
                XmlText    incometx = doc.CreateTextNode(record.Income.ToString("n"));
                income.AppendChild(incometx);

                XmlElement type   = doc.CreateElement("type");
                XmlText    typetx = doc.CreateTextNode(record.Type == null ? "0" : record.Type.Id.ToString());
                type.AppendChild(typetx);

                XmlElement      description   = doc.CreateElement("description");
                XmlCDataSection descriptiontx = doc.CreateCDataSection(record.Description);
                description.AppendChild(descriptiontx);

                data.AppendChild(date);
                data.AppendChild(spend);
                data.AppendChild(income);
                data.AppendChild(type);
                data.AppendChild(description);

                XmlNode xn = doc.DocumentElement.SelectSingleNode("/datas/data/date[substring(text(),9,2)>'" + record.Date.ToString("dd") + "']");
                if (xn != null)
                {
                    doc.DocumentElement.InsertBefore(data, xn.ParentNode);
                }
                else
                {
                    doc.DocumentElement.AppendChild(data);
                }
            }

            op.Save();

            Config.CurrentBalance = Config.CurrentBalance - record.Spend + record.Income;
        }
        /// <summary>
        /// 根据日期间隔取得记录
        /// </summary>
        /// <param name="startDate">起始日期(包含起始日期)</param>
        /// <param name="endDate">终止日期(包含终止日期)</param>
        /// <param name="recordTypeId">要查询的记录类型,不限制请传入0</param>
        /// <param name="queryType">查询类型</param>
        /// <returns>取得的记录集</returns>
        public IList <Record> GetByDate(DateTime startDate, DateTime endDate, int recordTypeId, QueryType queryType)
        {
            if (startDate.Date > endDate.Date && startDate.Year > DateTime.Now.Year && queryType == null)
            {
                return(null);
            }

            IList <string> dataFileList = new List <string>();
            IList <Record> recordList   = new List <Record>();

            if (queryType == QueryType.年单位)
            {
                int      iCount     = (endDate.Year - startDate.Year + 1) * 12;
                DateTime QuerySDate = new DateTime(startDate.Year, 1, 1);
                for (int i = 0; i <= iCount; i++)
                {
                    dataFileList.Add(System.Environment.CurrentDirectory + "\\Data\\" + QuerySDate.AddMonths(i).ToString(@"yyyy/MM") + ".xml");
                }
            }
            else if (queryType == QueryType.月单位 || queryType == QueryType.日单位)
            {
                int iCount = startDate.Year == endDate.Year ? endDate.Month - startDate.Month : (12 - startDate.Month + 1) + (endDate.Year - startDate.Year - 1) * 12 + endDate.Month;
                for (int i = 0; i <= iCount; i++)
                {
                    dataFileList.Add(System.Environment.CurrentDirectory + "\\Data\\" + startDate.AddMonths(i).ToString(@"yyyy/MM") + ".xml");
                }
            }

            XmlOperate          op      = new XmlOperate(dataFileList, XmlFileOpType.创建, startDate);
            IList <XmlDocument> doclist = op.GetList();

            if (queryType == QueryType.年单位 || queryType == QueryType.月单位)
            {
                XmlNodeList tempList = null;
                if (recordTypeId == 0)
                {
                    foreach (XmlDocument item in doclist)
                    {
                        tempList = item.DocumentElement.ChildNodes;
                        foreach (XmlElement node in tempList)
                        {
                            recordList.Add(Get(node));
                        }
                    }
                }
                else
                {
                    foreach (XmlDocument item in doclist)
                    {
                        tempList = item.DocumentElement.ChildNodes;
                        Record record = null;
                        foreach (XmlElement node in tempList)
                        {
                            record = Get(node);
                            if (CheckTpye(recordTypeId, record.Type))
                            {
                                recordList.Add(record);
                            }
                        }
                    }
                }
            }
            else //queryType == QueryType.日单位
            {
                XmlNodeList tempList = null;
                if (recordTypeId == 0)
                {
                    foreach (XmlDocument item in doclist)
                    {
                        tempList = item.DocumentElement.ChildNodes;
                        Record record = null;
                        foreach (XmlElement node in tempList)
                        {
                            record = Get(node);
                            if (record.Date.Date >= startDate.Date && record.Date.Date <= endDate.Date)
                            {
                                recordList.Add(Get(node));
                            }
                        }
                    }
                }
                else
                {
                    foreach (XmlDocument item in doclist)
                    {
                        tempList = item.DocumentElement.ChildNodes;
                        Record record = null;
                        foreach (XmlElement node in tempList)
                        {
                            record = Get(node);
                            if (record.Date.Date >= startDate.Date && record.Date.Date <= endDate.Date && CheckTpye(recordTypeId, record.Type))
                            {
                                recordList.Add(Get(node));
                            }
                        }
                    }
                }
            }

            return(recordList);
        }