首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于用vector记录查询时间段内的月份,该怎么处理

2012-05-11 
关于用vector记录查询时间段内的月份用4个ComboBox分别记录查询的起止年月,想用向量记录起止年月之间的所

关于用vector记录查询时间段内的月份
用4个ComboBox分别记录查询的起止年月,想用向量记录起止年月之间的所有月份,比如选择查询时间从2008年3月到2009年5月,则在向量里记录下200803,200804,200805……200904,200905。请问怎么实现呢?


[解决办法]
这个不难,自己做个逐月递增函数,如:

AnsiString end = "200905", start = "200803";

while (start < end) {
添加start到vector;
start = next(start);
}

添加end到vector;

AnsiString next(AnsiString p)
{
处理逐月递增;
}
[解决办法]

C/C++ code
void __fastcall TForm1::FormCreate(TObject *Sender){  ComboBox1->Clear();  for(int i=2000;i<=2010;i++)    ComboBox1->Items->Add(i);  ComboBox1->ItemIndex = 0 ;  ComboBox2->Clear();  for(int i=1;i<=12;i++)    ComboBox2->Items->Add(i);  ComboBox2->ItemIndex = 0 ;  ComboBox3->Clear();  for(int i=2000;i<=2010;i++)    ComboBox3->Items->Add(i);  ComboBox3->ItemIndex = 0 ;  ComboBox4->Clear();  for(int i=1;i<=12;i++)    ComboBox4->Items->Add(i);  ComboBox4->ItemIndex = 0 ;}//---------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender){   String ls_BeginDate  = ComboBox1->Text + "-"+ ComboBox2->Text +"-01 00:00:000";   String ls_EndDate    = ComboBox3->Text + "-"+ ComboBox4->Text +"-01 00:00:000";;   int a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ;   while(a>0)   {      ls_BeginDate = IncMonth(TDateTime(ls_BeginDate),1) ;      ListBox1->Items->Add(TDateTime(ls_BeginDate).FormatString("YYYYMM"));      a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ;   }}
[解决办法]
C/C++ code
void __fastcall TForm1::Button1Click(TObject *Sender){   vector <String> vec ; //Add   String ls_BeginDate  = ComboBox1->Text + "-"+ ComboBox2->Text +"-01 00:00:000";   String ls_EndDate    = ComboBox3->Text + "-"+ ComboBox4->Text +"-01 00:00:000";;   int a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ;   while(a>0)   {      ls_BeginDate = IncMonth(TDateTime(ls_BeginDate),1) ;      //ListBox1->Items->Add(TDateTime(ls_BeginDate).FormatString("YYYYMM"));      vec.push_back(TDateTime(ls_BeginDate).FormatString("YYYYMM")); //Add      a = TDateTime(ls_EndDate)-TDateTime(ls_BeginDate) ;   }}
[解决办法]
inline void IncMonth(int &Y,int &M) { if(++M > 12) {++Y ;M = 1 ;} }
inline AnsiString FormatMonth(int M)( M > 9 ? IntToStr(M) : "0"+IntToStr(M) ; )
void TForm1::MyFunGetVector(vector <AnsiString> &Date1)
{
int Y1 = ComboBox->Text.ToInt();
int M1 = ComboBox->Text.ToInt();
int Y2 = ComboBox->Text.ToInt();
int Y2 = ComboBox->Text.ToInt();
int size = Y2*12+M2 -Y1*12-M1 + 1; 
if(size < 0)
date1.clear();
else
date1.resize(size);
for( vector <AnsiString>::iterator pos = date1.begin();
pos != date1.end();
++pos,IncMonth(Y1,M1))
*pos = IntToStr(Y1)+FormatMonth(M1) ; 
};
[解决办法]
写好后检查,发现错误
1、少了一个括号:
inline AnsiString FormatMonth(int M)( M > 9 ? IntToStr(M) : ("0"+IntToStr(M)) ; )
2、把Y1Y2M1M2与对应的ComboBox1234 改一改。
int Y1 = ComboBox1->Text.ToInt(); 
int M1 = ComboBox2->Text.ToInt(); 
int Y2 = ComboBox3->Text.ToInt(); 
int M2 = ComboBox4->Text.ToInt(); 
3、if(size < 0) 应为 if(size <= 0) 


(CSDN经常让写好的东西丢失,现在一般一写完我就回复,然后再检查。要不检查时间久了,回复失败就什么都没有了。)

热点排行