⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classscheduledb.cpp

📁 《基于symbian os的手机开发与应用》
💻 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 + -