是否可以对控制台用户界面进行分页?假设我有30个员工记录,我只想显示10.用户按箭头按钮,他们可以看到下一个10个列表。有可能吗?
EXEC SQL DECLARE EmployeeReportCursorJawatan CURSOR FOR
SELECT EMP_ID, NAMA, IC, JAWATAN, GAJI_ASAS, TEL_RUMAH, TEL_BIMBIT, ALAMAT FROM PEKERJA WHERE upper(JAWATAN) LIKE upper(:str);
EXEC SQL OPEN EmployeeReportCursorJawatan;
/* loop through the cursor and break the loop when end*/
EXEC SQL WHENEVER NOT FOUND DO break;
while (1)
{
/* fetch the data from cursor and display*/
EXEC SQL FETCH EmployeeReportCursorJawatan INTO :emp_idSearch, :namaSearch, :icSearch, :jawatanSearch, :gajiSearch, :homeSearch, :mobileSearch, :alamatSearch;
cout<<"\nID\t\t: " << emp_idSearch;
cout<<"\nName\t\t: " << namaSearch;
cout<<"\nIC\t\t: " << icSearch;
cout<<"\nPost\t\t: " << jawatanSearch;
cout<<"\nSalary\t\t: RM " << gajiSearch;
cout<<"\nPhone number (H): " << homeSearch;
cout<<"\nPhone number (M): " << mobileSearch;
cout<<"\nAddress\t: " << alamatSearch;
cout<<"\n---------------------------------------------------------\n";
totalCustomer++;
}
答案 0 :(得分:0)
是的,它实际上比你想象的容易得多。这是我编写的程序中的一段代码,正是这样做,最重要的是创建一个静态变量来表示&#39; page&#39;用户已开启。破败
void ExList::Display()
{
using std::setw; //save time
//begin iter starts at page number * 10 since each page has 10 elements
list<Workout>::iterator PageNum = wrkout.begin(); std::advance(PageNum, AdvanceVar * 10);
//advance the iter 10 places past PageNum so the loop will run 10 times
list<Workout>::iterator iterEnd = PageNum; std::advance(iterEnd, 10);
//formatting for my 'exercise tracker' program
std::cout << setw(20) << "Page: " << AdvanceVar + 1 << "/" << (((int) wrkout.size()) / 10) + 1
<< std::endl << std::endl;
std::cout << std::left //left justified
<< setw(TAB) << "Date" //print titles
<< setw(TAB) << "Type"
<< setw(TAB) << "Distance"
<< setw(TAB) << "Units"
<< setw(TAB) << "Additional Comments\n"
<< "---------------------------------------------------------------------\n";
//loop through 10 times displaying the proper elements
for(PageNum; PageNum != iterEnd && PageNum != wrkout.end(); PageNum++)
{
std::cout << std::left
<< setw(TAB) << PageNum->Date
<< setw(TAB) << ConvertEnum(PageNum->TYPE)
<< setw(TAB) << PageNum->distance
<< setw(TAB) << PageNum->units
<< setw(TAB) << "Select to review\n";
}
std::cout << "---------------------------------------------------------------------\n";
}
如果您希望查看整个程序以获得更深入的程序,请向我发送电子邮件
答案 1 :(得分:0)
逻辑解决方案是在机器上安装more
,并且
让用户通过它管道输出。但事实并非如此
难以实施。基本上,你决定了多少行或
您将放在一个页面上的条目,然后跟踪索引
目前的页面顶部。然后输出如下内容:
int currentTop = 0;
bool finished = false;
while ( !finished ) {
clearScreen();
for ( int i = 0; i < maxOnPage && i + currentTop < entryCount; ++ i ) {
displayEntry( i + currentTop );
}
std::cout << "Continue: ";
std::string command;
std::cin >> command;
switch ( parseCommand( command ) ) {
case advanceOneLine:
++ currentTop;
break;
case advanceOnePage:
currentTop += maxOnPage;
break;
case finish:
finished = true;
break;
default:
// ???
break;
}
}