📄 menu.cpp
字号:
#include "conio.h"
#include "iostream.h"
#include "fstream.h"
#define KEY_EXIT '-'
typedef struct
{
char ch;
char *label;
void (*pfunc)();
} MenuItemDef;
void clearscr()
{cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";}
int waitakey(){return getch();}
class MenuDef{
public:
int nCount;
MenuItemDef menu[24];
public:
MenuDef()
{nCount=0;}
public:
void display()
{
for (int i=0;i<nCount;i++)
cout<<" "<<menu[i].ch<<"."<<menu[i].label<<endl;
cout<<" "<<KEY_EXIT<<"."<<"Exit"<<endl;
}
void run()
{
int ch;
do {clearscr();
display();
ch = waitakey();
for(int i=0; i<nCount;i++)
if(menu[i].ch==ch)
menu[i].pfunc();
}while (ch!=KEY_EXIT);
}
void add(char ch0,char *plabel, void (* func)())
{
menu[nCount].ch=ch0;
menu[nCount].label=plabel;
menu[nCount].pfunc=func;
nCount++;
}
};
class Page
{
public:
Page(){SetNull();}
public:
enum {kLFU=0,kFCFS,kLRU};
int nCurPage;
int nAlgID;
int pages[128];
int nCountPage;
int nCountFrame;
int nEmpty;
int frames[32];
int counters[32];
int nCount1;
int nCount2;
public:
void Input();
void Run();
int IsFinish() {return nCurPage>=nCountPage;}
void SetAlgorithm(int kAlgId) {nAlgID=kAlgId;}
void SetNull()
{nCurPage=nCountPage=nCountFrame=nCount1=nCount2=nEmpty=0;nAlgID=kLRU;}
double IPercent()
{return nCount1 *1.0/nCurPage;}
double EPercent()
{return nCount2*1.0/nCurPage;}
void FCFS() {}
void LRU() {}
void LFU() {}
void Display() {}
void DispalyAlg() {}
public:
friend istream& operator>>(istream& stream,Page &p)
{return stream;}
friend ostream& operator<<(ostream& stream,Page &p)
{return stream;}
};
void Page::Input()
{cout<<"Count of page-frames:";
cin>>nCountFrame;
nEmpty=nCountFrame;
cout<<"Count of page:";
cin>>nCountPage;
for(int i=0;i<nCountPage;i++)
cin>>pages[i];
nCurPage=0;
}
void Page::Run()
{
while(!IsFinish()){
waitakey();
if(nAlgID==kLFU)
LFU();
else if(nAlgID==kFCFS)
FCFS();
else
LRU();
DispalyAlg();
nCurPage++;
}
}
MenuDef menu;
Page page;
void input()
{
clearscr();
page.SetNull();
page.Input();
}
void display()
{
clearscr();
page.Display();
}
void setalg1()
{
page.SetAlgorithm(Page::kLFU);
}
void setalg2()
{
page.SetAlgorithm(Page::kFCFS);
}
void setalg3()
{
page.SetAlgorithm(Page::kLRU);
}
void run()
{
clearscr();
page.Run();
}
void load()
{
char fname[128];
cout<<"\nLoad From file:";
cin>>fname;
ifstream inFile;
inFile.open(fname);
page.SetNull();
inFile>>page;
}
void save()
{
char fname[128];
cout<<"\nSave to file:";
cin>>fname;
ofstream outFile;
outFile.open(fname);
outFile<<page;
}
void main(int args,char *argv[])
{
menu.add('1',"Input from keyboard", input);
menu.add('3',"Set Algorithm 1:LFU", setalg1);
menu.add('4',"Set Algorithm 2:FCFS", setalg2);
menu.add('5',"Set Algorithm 3: LRU", setalg3);
menu.add('6',"Display", display);
menu.add('7',"Run", run);
menu.add('8',"Load from file", load);
menu.add('9',"Save to file", save);
menu.run();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -