📄 array.cpp
字号:
// 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
{
/* TODO
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);
/* TODO
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(/* TODO */);
break;
}
case 'i': // Sort students by student ID
{
aPtrUni->SortStudents(/* TODO */);
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 + -