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

📄 menu.cpp

📁 操作系统
💻 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 + -