📄 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 + -