?? classscheduledb.cpp
字號:
//INCLUDE
#include "ClassScheduleDB.h"
#include "ClassSchedule.rsg"
#include <s32file.h>
#include <eikenv.h>
CClassScheduleDB::CClassScheduleDB()
{
TTime curTime;
curTime.HomeTime();
iWeekId = curTime.DayNoInWeek(); //得到白天的時間的數據在當前的星期中
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = NULL;
iArray = new(ELeave) CArrayFixFlat<TInt32>(1); //構造數組,間隔大小為1
for(TInt i=EWeek1; i<=EWeek7; i++)
{
arrayDay = new(ELeave) CArrayFixFlat<TClassScheduleDBStruct>(1); // 構造數組間隔大小為1
for(TInt j=ECourse01; j<=ECourse10; j++) //循環從第一節課到第十節課
{
TClassScheduleDBStruct db; //第一變量,其中包含課程名、上課時間等
db.iTime = 0; //初始化時間為0
arrayDay->AppendL(db); //在數組中添加db中的項
}
iArray->AppendL((TInt32)arrayDay); //將數組arrayDay中的項添加到數組iArray 中
}
TRAPD(r, ReadDBL()); //異常退出處理
if(r!=KErrNone)
{
SaveDBL(); //如果沒有異常退出,就保存數據
}
}
CClassScheduleDB::~CClassScheduleDB()
{
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = NULL;
for(TInt i=EWeek1; i<=EWeek7; i++)
{
arrayDay = (CArrayFixFlat<TClassScheduleDBStruct>*)iArray->At(i);
delete arrayDay;
}
delete iArray;
}
void CClassScheduleDB::ReadDBL()
{
RFileReadStream reader;
reader.PushL();
User::LeaveIfError(reader.Open(CEikonEnv::Static()->FsSession(), KClassScheduleFileName, EFileRead)); //打開一個文件
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = NULL; // 構造一個數組初始化為空
TInt32 len = 0;
for(TInt i=EWeek1; i<=EWeek7; i++) //循環從周一到周末
{
arrayDay = (CArrayFixFlat<TClassScheduleDBStruct> *)iArray->At(i); //得到數組中的值(每一天的信息)
for(TInt j=ECourse01; j<=ECourse10; j++) //循環從第一節課到第十節課
{
TClassScheduleDBStruct &db = arrayDay->At(j); //得到數組中的信息(每節課的信息)
len = reader.ReadInt32L();
if(len)
reader.ReadL((TUint16*)db.iAddr.Ptr(), len); //讀取上課地點信息
db.iAddr.SetLength(len);
len = reader.ReadInt32L();
if(len)
reader.ReadL((TUint16*)db.iName.Ptr(), len); //讀取課程名信息
db.iName.SetLength(len);
len = reader.ReadInt32L();
if(len)
reader.ReadL((TUint16*)db.iTeacher.Ptr(), len); //讀取授課教師信息
db.iTeacher.SetLength(len);
len = reader.ReadInt32L();
if(len)
reader.ReadL((TUint16*)db.iRemark.Ptr(), len); //讀取備注信息
db.iRemark.SetLength(len);
TUint32 high = reader.ReadUint32L();
TUint32 low = reader.ReadUint32L();
db.iTime.Set(high, low); //獲得時間信息
}
}
CleanupStack::PopAndDestroy(); //reader
}
void CClassScheduleDB::SaveDBL()
{
RFileWriteStream writer;
writer.PushL();
User::LeaveIfError(writer.Replace(CEikonEnv::Static()->FsSession(), KClassScheduleFileName, EFileWrite)); //向數據庫中寫數據
CArrayFixFlat<TClassScheduleDBStruct>* arrayDay = NULL; //定義一個數組對象,初始化為NULL
TInt32 len = 0;
for(TInt i=EWeek1; i<=EWeek7; i++) //循環從周一到周末
{
arrayDay = (CArrayFixFlat<TClassScheduleDBStruct> *)iArray->At(i); //得到星期的信息
for(TInt j=ECourse01; j<=ECourse10; j++) //循環從第一節課到第十節課
{
TClassScheduleDBStruct &db = arrayDay->At(j); //得到課程的信息
len = db.iAddr.Length();
writer.WriteInt32L(len);
if(len) //寫入上課地點到數據庫
writer.WriteL(db.iAddr.Ptr(), len);
len = db.iName.Length();
writer.WriteInt32L(len);
if(len) //寫入課程名到數據庫
writer.WriteL(db.iName.Ptr(), len);
len = db.iTeacher.Length();
writer.WriteInt32L(len);
if(len) //寫入授課教師信息到數據庫
writer.WriteL(db.iTeacher.Ptr(), len);
len = db.iRemark.Length();
writer.WriteInt32L(len);
if(len) //寫入備注到數據庫
writer.WriteL(db.iRemark.Ptr(), len);
writer.WriteUint32L(db.iTime.High()); //寫時間高位
writer.WriteUint32L(db.iTime.Low()); //寫時間低位
}
}
writer.CommitL(); //提交
CleanupStack::PopAndDestroy(); //writer
}
//----------------------------------------------------
//將時間轉換為字符串的形勢
//----------------------------------------------------
TDesC &GetTimeStringFromTInt64(TInt64 &aInt64)
{
TBuf<32> timeString;
_LIT(KDateString,"%-B%:0%J%:1%T%:3%+B");
TTime time(aInt64);
time.FormatL(timeString,KDateString);
return timeString;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -