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

📄 array.cpp

📁 如题 就是 这东西 为什么非要我 说到 20个 字 呢 看看这回 够 不
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    
    TInt result = iStudents->Find(refElement, aIDKey, foundPos);

    if (result > 0)
        {
        return result;
        }    
    else
        {
        aStudent = (*iStudents)[foundPos];
        aPos = foundPos;
        return result;
        }    
    }

TStudent& CUniversity::Student(const TInt aPos)
    {
    // Return a student which can then be edited.
    // Could be inline but may wish to put some
    // error checking in.    

    return (*iStudents)[aPos];
    }

//*******************************************************************************************************

_LIT(KStudentNamePrompt,    "\nName (Max 20 Chars) \n: ");
_LIT(KStudentAgePrompt,     "Age \n: ");
_LIT(KStudentCoursePrompt,  "Course (Max 30 Chars) \n: ");
_LIT(KStudentIDPrompt,      "\nStudent ID : ");
_LIT(KAddPrompt,            "\nEnter New Student Details.\n");
_LIT(KDeletePrompt,         "\nEnter Details of Student \nto Delete.\n");
_LIT(KFindPrompt,           "\nEnter Details of Student \nto Find.\n");
_LIT(KNewLine,              "\n");

//*******************************************************************************************************

LOCAL_C void doDelete(CUniversity* aPtrUni)
    {
    TBuf<20> stuName;

    CLineEdit* ptrEdit = CLineEdit::NewL(console, 10);
    console->Printf(KDeletePrompt);
    ptrEdit->Edit(KStudentNamePrompt, &stuName);

    aPtrUni->DeleteStudent(stuName);

    delete ptrEdit;
    }

//*******************************************************************************************************

LOCAL_C void doAdd(CUniversity* aPtrUni)
    {
    TBuf<20> stuName;
    TBuf<30> stuCourse;    
    TBuf<3> bufferAge;
    TInt stuAge; 

    CLineEdit* ptrEdit = CLineEdit::NewL(console, 10);

    console->Printf(KAddPrompt);
    
    ptrEdit->Edit(KStudentNamePrompt, &stuName);
    ptrEdit->Edit(KStudentAgePrompt, &bufferAge);
    ptrEdit->Edit(KStudentCoursePrompt, &stuCourse);

    TLex lexAge(bufferAge);     // Convert the descriptor age to TInt    
    lexAge.Val(stuAge);

    aPtrUni->AddStudentL(stuName, stuAge, stuCourse);

    console->Printf(KNewLine);

    delete ptrEdit;
    }

//*******************************************************************************************************

LOCAL_C TBool doFind(CUniversity* aPtrUni, TInt& aPosFound)
    {
    _LIT(KFindCriteria,     "\nBy (n)ame or student (i)d \n: ");
    _LIT(KStudentNotFound,  "\nStudent Not Found!\n");
    CLineEdit* ptrEdit = CLineEdit::NewL(console, 10);

    TBuf<20> stuName;
    TStudent foundStudent;
    TInt foundPos;

    console->Printf(KFindCriteria);

    TChar criteria = console->Getch();
    
    switch(criteria)
        {
    case 'n':   // Find by Name
        {        
        ptrEdit->Edit(KStudentNamePrompt, &stuName);
        TInt result = aPtrUni->FindStudent(stuName, foundStudent, foundPos);    
        if (result > 0)
            {
            console->Printf(KStudentNotFound);
            delete ptrEdit;
            return EFalse;
            }
        else
            {
            aPosFound = foundPos;
            }
        break;
        }
    case 'i':   // Find by ID
        {
        TBuf<10> bufferID;
        TInt stuID;
        ptrEdit->Edit(KStudentIDPrompt, &bufferID);

        TLex lexID(bufferID);   // Convert the descriptor age to TInt    
        lexID.Val(stuID);
        TInt result = aPtrUni->FindStudent(stuID, foundStudent, foundPos);    
        if (result > 0)
            {
            console->Printf(KStudentNotFound);
            delete ptrEdit;
            return EFalse;
            }
        else
            {
            aPosFound = foundPos;
            }
        break;
        }
    default:
        break;    
        }

    delete ptrEdit;
    return ETrue;
    }

//*******************************************************************************************************

LOCAL_C void doEdit(CUniversity* aPtrUni)
    {
    TInt pos;
    if (doFind(aPtrUni, pos))
        {
        TBuf<20> stuName;
        TBuf<30> stuCourse;    
        TBuf<3> bufferAge;
        TInt stuAge; 
    
        CLineEdit* ptrEdit = CLineEdit::NewL(console, 10);

        ptrEdit->Edit(KStudentNamePrompt, &stuName);
        ptrEdit->Edit(KStudentAgePrompt, &bufferAge);
        ptrEdit->Edit(KStudentCoursePrompt, &stuCourse);

        TLex lexAge(bufferAge);     // Convert the descriptor age to TInt    
        lexAge.Val(stuAge);

        TStudent& x = aPtrUni->Student(pos);

        x.SetNameL(stuName);
        x.SetAge(stuAge);
        x.SetCourseL(stuCourse);

        delete ptrEdit;
        }
    }

//*******************************************************************************************************

LOCAL_C void doInsert(CUniversity* aPtrUni)
    {

    TBuf<20> stuName;
    TBuf<30> stuCourse;    
    TBuf<3> bufferAge;
    TInt stuAge; 

    CLineEdit* ptrEdit = CLineEdit::NewL(console, 10);
    
    ptrEdit->Edit(KStudentNamePrompt, &stuName);
    ptrEdit->Edit(KStudentAgePrompt, &bufferAge);
    ptrEdit->Edit(KStudentCoursePrompt, &stuCourse);

    TLex lexAge(bufferAge);     // Convert the descriptor age to TInt    
    lexAge.Val(stuAge);

    TStudent newStudent;
    newStudent.SetNameL(stuName);
    newStudent.SetCourseL(stuCourse);
    newStudent.SetAge(stuAge);

    aPtrUni->AddStudentL(newStudent);

    delete ptrEdit;
    }

//*******************************************************************************************************

LOCAL_C void doShowMenu()
    {
    _LIT(KMenu0, "\n\nMenu Options.\n");
    _LIT(KMenu1, "\n(v)iew students.\nview (u)niversity details.\n(a)dd student.\n(d)elete student.");
    _LIT(KMenu2, "\n(s)ort students by name.\nsort students by (i)d.\n(f)ind student.");
    _LIT(KMenu3, "\n(e)dit a student.\ni(n)sert a student;\n(m)enu options.\n(q)uit.\n");
    console->Printf(KMenu0);                
    console->Printf(KMenu1);            
    console->Printf(KMenu2);            
    console->Printf(KMenu3);            
    }    

//*******************************************************************************************************

LOCAL_C void doProcessCommand(TUint aCommand, CUniversity* aPtrUni)
    {    
    _LIT(KUnrecChar, "\nUnrecognized Option : %s");

    switch(aCommand)
        {
    case 'v':    // View Students                
        {
        aPtrUni->DisplayStudents(); 
        break;
        }
    case 'u':    // View University details                
        {
        aPtrUni->DisplayUniversityDetails(); 
        break;
        }
    case 's':    // Sort students by name
        {
        aPtrUni->SortStudents(CUniversity::ESortName);
        break;
        }
    case 'i':    // Sort students by student ID
        {
        aPtrUni->SortStudents(CUniversity::ESortStudentID);
        break;
        }
    case 'a':    // Add a student
        {
        doAdd(aPtrUni);
        break;
        }
    case 'n':    // Insert a student
        {
        doInsert(aPtrUni);
        break;
        }
    case 'd':    // Delete a student
        {
        doDelete(aPtrUni);
        break;
        }
    case 'f':    // Find a student 
        {
        TInt pos;
        if (doFind(aPtrUni, pos))
            {
            aPtrUni->DisplayStudent(pos);
            }
        break;
        }
    case 'e':    // Edit a student 
        {
        doEdit(aPtrUni);
        break;
        }
    case 'm':    // Show the menu
        {
        doShowMenu();
        break;
        }
    default:
        {
        console->Printf(KUnrecChar, &aCommand);
        doShowMenu();
        break;
        }
        }
    }

//*******************************************************************************************************

LOCAL_C void doExampleL()
    {    

    __UHEAP_MARK;        // Lets keep track of heap usage

    _LIT(KSComment1,    "\nCArrayFixFlat Exercise\n");
    _LIT(KSComment2,    "\n\nEnd of Example\n");
    _LIT(KUniName,      "Nature Springs");
    _LIT(KUniAddress,   "Sunny Village, USA");
    _LIT(KKeyEntered,   "%s");
    _LIT(KPrompt,       "\nCommand<?>:");

    console->Printf(KSComment1);

    CUniversity* ptrUni = CUniversity::NewL();
    CleanupStack::PushL(ptrUni);

    ptrUni->SetConsole(console);
    ptrUni->SetNameL(KUniName);
    ptrUni->SetAddressL(KUniAddress);
    ptrUni->DisplayUniversityDetails();
    console->Printf(_L("Press m for menu."));

    // Simple menu system to test out the functionality of 
    // CUniversity.

    console->Printf(KPrompt);
    TKeyCode userInput = console->Getch();

    while ((userInput != 'Q') && (userInput != 'q'))
        {
        console->Printf(KKeyEntered, &userInput);   // Let user know which 
        doProcessCommand(userInput, ptrUni);        // key they pressed before
        console->Printf(KPrompt);                   // Processing.
        userInput = console->Getch();                
        }

    CleanupStack::PopAndDestroy(ptrUni);

    console->Printf(KKeyEntered, &userInput);
    console->Printf(KSComment2);
    
    __UHEAP_MARKEND;    // Have we left heap as we found it ?        
    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -