#include "stdafx.h" #include "BookFilter.h" #include <algorithm> CBookFilter::CBookFilter(ListBookInfo m_booklists) { m_BookList =m_booklists; m_nGradeIndex =-1; m_nTermIndex =-1; m_resource_note=0; } CBookFilter::~CBookFilter(void) { } int SplitString(LPCTSTR lpszStr, LPCTSTR lpszSplit, CStringArray& rArrString, BOOL bAllowNullString) { rArrString.RemoveAll(); CString szStr = lpszStr; szStr.TrimLeft(); szStr.TrimRight(); if(szStr.GetLength()==0) { return 0; } CString szSplit = lpszSplit; if(szSplit.GetLength() == 0) { rArrString.Add(szStr); return 1; } CString s; int n; do { n = szStr.Find(szSplit); if(n > 0) { rArrString.Add(szStr.Left(n)); szStr = szStr.Right(szStr.GetLength()-n-szSplit.GetLength()); szStr.TrimLeft(); } else if(n==0) { if(bAllowNullString) rArrString.Add(_T("")); szStr = szStr.Right(szStr.GetLength()-szSplit.GetLength()); szStr.TrimLeft(); } else { if((szStr.GetLength()>0)||bAllowNullString) rArrString.Add(szStr); break; } } while(1); return rArrString.GetSize(); } bool CBookFilter::ComparPdfInfoByUpdateTime(History_Book_Filter_Grade lhs,History_Book_Filter_Grade rhs) { int n = (rhs).strGradeID.Compare((lhs).strGradeID); if(n <= 0) return false; else return true; }; void CBookFilter::AddHistoryBookCondition() { if(m_BookList.size()==0)//û�� { return; } //Make Vector for(int nNum =0;nNum<m_BookList.size();nNum++) { CBookInfo BookInfo =m_BookList.at(nNum); //�鼮ѶϢ //����Grade CString szSplit = _T(","); CStringArray szList; int Count = ::SplitString(BookInfo.strGrade, szSplit, szList, FALSE); // std::vector<CString> strGrade; // // BookInfo.strGrade;//(01,03) //�ж�Grade�Ƿ���� for(int nNum1=0;nNum1<Count;nNum1++) { if(m_Condition.size() ==0) { if(BookInfo.bookId!="") { //ֱ������ //�������趨ѧ��Flag History_Book_Filter_Grade GradeTemp; GradeTemp.bTerm_one =FALSE; GradeTemp.bTerm_Two =FALSE; GradeTemp.strGrade =Book_Grade_Name[_ttoi(szList[nNum1])]; GradeTemp.strGradeID =szList[nNum1]; CString szSplit = _T(","); CStringArray szList; int Count = ::SplitString(BookInfo.applicableTerm, szSplit, szList, FALSE); for(int nNum3=0;nNum3<Count;nNum3++) { int nTerm=_ttoi(szList[nNum1]); GradeTemp.strTerm_one =Book_Term_Name[1]; GradeTemp.strTerm_Two =Book_Term_Name[2]; switch (nTerm) { case 1: //GradeTemp.strTerm_one =Book_Term_Name[_ttoi(szList[nNum3])]; GradeTemp.bTerm_one =TRUE; break; case 2: //GradeTemp.strTerm_Two =Book_Term_Name[_ttoi(szList[nNum3])]; GradeTemp.bTerm_Two =TRUE; break; } } m_Condition.push_back(GradeTemp); continue; }else { continue; } } if(BookInfo.bookId=="") { continue; } // for(int nNum2=0;nNum2<m_Condition.size();nNum2++) // { BOOL bExist=FALSE; History_Book_Filter_Grade Condition; for(int nDetect=0;nDetect<m_Condition.size();nDetect++) { Condition=m_Condition.at(nDetect); if(Book_Grade_Name[_ttoi(szList[nNum1])] ==Condition.strGrade) { bExist =TRUE; break; } } if(bExist)//�Ѵ��ڣ��趨ѧ����Ϣ { CString szSplit = _T(","); CStringArray szList; int Count = ::SplitString(BookInfo.applicableTerm, szSplit, szList, FALSE); for(int nNum3=0;nNum3<Count;nNum3++) { int nTerm=_ttoi(szList[nNum1]); switch (nTerm) { case 1: Condition.strTerm_one =Book_Term_Name[_ttoi(szList[nNum3])]; Condition.bTerm_one =TRUE; break; case 2: Condition.strTerm_Two =Book_Term_Name[_ttoi(szList[nNum3])]; Condition.bTerm_Two =TRUE; break; } } }else { //�������趨ѧ��Flag History_Book_Filter_Grade GradeTemp; GradeTemp.bTerm_one =FALSE; GradeTemp.bTerm_Two =FALSE; GradeTemp.strGrade =Book_Grade_Name[_ttoi(szList[nNum1])]; GradeTemp.strGradeID =szList[nNum1]; CString szSplit = _T(","); CStringArray szList; int Count = ::SplitString(BookInfo.applicableTerm, szSplit, szList, FALSE); for(int nNum3=0;nNum3<Count;nNum3++) { int nTerm=_ttoi(szList[nNum1]); switch (nTerm) { case 1: GradeTemp.strTerm_one =Book_Term_Name[_ttoi(szList[nNum3])]; GradeTemp.bTerm_one =TRUE; break; case 2: GradeTemp.strTerm_Two =Book_Term_Name[_ttoi(szList[nNum3])]; GradeTemp.bTerm_Two =TRUE; break; } } m_Condition.push_back(GradeTemp); } //} } } sort(m_Condition.begin(), m_Condition.end(), ComparPdfInfoByUpdateTime); } void CBookFilter::HistoryBookCondition(int nGradeIndex,int nTerm) { m_ConditionList.clear(); m_nGradeIndex =nGradeIndex; m_nTermIndex =nTerm; if(nGradeIndex ==-1&&nTerm ==-1 && m_resource_note==0) { //ȫ����ʾ m_ConditionList =m_BookList; }else { for(int nNum=0;nNum<m_BookList.size();nNum++) { CBookInfo BookInfo =m_BookList.at(nNum); //�鼮ѶϢ if(nGradeIndex==-1) { //�ж�ѧ������ int nResult=-1; if(nTerm==0) { nResult =BookInfo.applicableTerm.Find(L"01"); }else if(nTerm==1)//�ڶ�ѧ�� { nResult =BookInfo.applicableTerm.Find(L"02"); }else if(nTerm==-1) { nResult =1; } if(nResult !=-1) { if(m_resource_note==1) { if(BookInfo.nNoteNum>0) m_ConditionList.push_back(BookInfo); } else if(m_resource_note==2) { if(BookInfo.resCount>0) m_ConditionList.push_back(BookInfo); } else m_ConditionList.push_back(BookInfo); } }else { History_Book_Filter_Grade DataTemp = m_Condition.at(nGradeIndex); int nResult =BookInfo.strGrade.Find(DataTemp.strGradeID); if(nResult!=-1)//�����������鼮 { //�ж�ѧ������ int nResult=-1; if(nTerm==0) { nResult =BookInfo.applicableTerm.Find(L"01"); }else if(nTerm==1)//�ڶ�ѧ�� { nResult =BookInfo.applicableTerm.Find(L"02"); }else if(nTerm==-1) { nResult =1; } if(nResult !=-1) { if(m_resource_note==1) { if(BookInfo.nNoteNum>0) m_ConditionList.push_back(BookInfo); } else if(m_resource_note==2) { if(BookInfo.resCount>0) m_ConditionList.push_back(BookInfo); } else m_ConditionList.push_back(BookInfo); } } } } } } void CBookFilter::SetList( ListBookInfo list ) { m_BookList.clear(); m_BookList = list; } // int CBookFilter::GetGradeIndex(CString strGradeName) // { // int nInex=-1; // for(int nNum=0;nNum<m_Condition.size();nNum++) // { // if(strGradeName==Book_Grade_Name[nNum]) // { // nInex =nNum+1; // break; // } // } // return nInex; // }