用c语言设计菜单程序,求助!!设计一个基于DOS菜单的应用程序

求助!!设计一个基于DOS菜单的应用程序

设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。内容如下:

1.    无向图的基本操作及应用

①    创建无向图的邻接矩阵

②    创建无向图的邻接表

③    无向图的深度优先遍历

④    无向图的广度优先遍历

2.    无向网的基本操作及应用

①    创建无向网的邻接矩阵

②    创建无向网的邻接表

③    求最小生成树

3.    有向图的基本操作及应用

①    创建有向图的邻接矩阵

②    创建有向图的邻接表

③    拓扑排序

4.    有向网的基本操作及应用

①    创建有向网的邻接矩阵

②    创建有向网的邻接表

③    关键路径

④    单源最短路径

⑤    每对顶点之间的最短路径

三.设计指导

第一步:根据设计任务,设计DOS菜单。例如

选择1之后应该类似于

第二步:设计菜单

void ShowMainMenu()

{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

}

void UDG()

{

MGraph MG;

ALGraph ALG;

int n;

do

{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>n;

switch(n){

case 1:

CreatUDG_M(MG);

break;

case 2:

CreatUDG_ALG(ALG);

dispgraph(ALG);

break;

case 3:

break;

case 4:

break;

default:

if (n!=5)

cout<

}

}while(n!=5);

}

void UDN()

{

MGraph MN;

ALGraph ALN;

int n;

do{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>n;

switch(n){

case 1:

CreatUDN_M(MN);

break;

case 2:

CreatUDN_ALG(ALN);

dispgraph_N(ALN);

break;

case 3:

break;

case 4:

break;

default:

if (n!=5)

cout<

}

}while(n!=5);

}

void DG()

{

int n;

do

{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>n;

switch(n){

case 1:

break;

case 2:

break;

case 3:

break;

default:

if (n!=4)

cout<

}

}while(n!=4);

}

void DN()

{

int n;

do{

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cout<

cin>>n;

switch(n){

case 1:

break;

case 2:

break;

case 3:

break;

case 4:

break;

case 5:

break;

default:

if (n!=6)

cout<

}

}while(n!=6);

}

void main()

{

int n;

do{

ShowMainMenu();

cin>>n;

switch(n){

case 1:

UDG();

break;

case 2:

UDN();

break;

case 3:

DG();

break;

case 4:

DN();

break;

default:

if (n!=5)

cout<

}

}while(n!=5);

}

无论多少级菜单,都可以用这种模式实现,并且当前菜单不用担心前面的问题,只需编写当前的功能函数。

第三步:添加功能函数。

对于使用类来做的同学,根据实际使用,我们知道菜单类的主要功能就是显示菜单项与响应用户选项。所以我们可以这样设计一个菜单基类:

class CMenuBase

{

public:

CMenuBase(void);

~CMenuBase(void);

virtual void ShowMenu()=0;

virtual void Event(int EvenID)=0;

protected:

CMenuBase* m_pParent;

};

在此基础上,所有菜单类都继承这个类,以此来实现“显示”与“响应事件”的多态性。例如,主菜单类的设计为:

class CMainMenu:public CMenuBase

{

public:

CMainMenu(void);

~CMainMenu(void);

virtual void ShowMenu();

virtual void Event(int EvenID);

};

和基类基本没有区别。其实现可能为

void CMainMenu::ShowMenu(){

cout<

cout<

cout<

cout<

cout<

}

void CMainMenu::Event(int EvenID){

CMenuBase*tmp;

switch(EvenID){

case ID_LIST:

break;

case ID_STACK_QUEUE:

SUBMENU(CStackAndQueueMenu)

break;

//…………………

case ID_EXIT:

MAIN_EXIT=true;

break;

default:

InvalidateAction();

break;

}

}

注意:这里的关键是如何进入子菜单,我们用了一个宏命令,例如SUBMENU(CListMenu),其定义为:

#define SUBMENU(submenu)            tmp=pBase;\

pBase=new submenu(tmp);\

pBase->ShowMenu();

通过构造函数,将当前菜单对象作为子菜单的父菜单,以后推出子菜单时,子菜单将将显示权让给其父菜单:

#define EXIT_SUBMENU tmp=m_pParent;\

delete pBase;\

pBase=tmp;\

pBase->ShowMenu();

这样设计,无论有多少级菜单,其编程风格都是一样的,只需管理当前的菜单交接,而无需知道它是从哪儿来的。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值