前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛逼!再也不用长长的Switch语句了

牛逼!再也不用长长的Switch语句了

作者头像
用户9831583
发布2022-06-16 14:47:18
2880
发布2022-06-16 14:47:18
举报
文章被收录于专栏:码出名企路

一提到switch,难免出来许多case,代码长而不爽,工程效率也大大下降

举例说明:

一个学生管理系统,定义各种菜单栏,用户在控制台进行输入,由输入自主选择菜单。

1. 菜单栏声明如下,具体实现略去

代码语言:javascript
复制
class Menu
{
    public:
        void Welcome();
        void TypeIn(Data *&d);
        void DeletaData(Data *&d);
        void ADDData(Data *&d);
        void FindData(Data *&d);
        void SortData(Data *&d);
        void Statistics(Data *&d);
        void Modification(Data *&d);
        bool Modification_data(Data *&h,int i);
        void DisplyData(Data *&d);
        void Save(Data *&d);
     }

2. 用户进行菜单选择

Switch-Case常规写法:

代码语言:javascript
复制
Menu MM;
void MenuSelect(Data *&d)
{
    int input=0;
    while(scanf("%d",&input)!=EOF)
    {
        if(input <1 || input>9)
        {
            cout<<"输入范围在1~9,请重新输入"<<endl;
            continue;
        }
        //进行菜单选择
        switch(input)
        {
            case 1:
            {
                MM.TypeIn(d);
                break;
            }
            case 2:
            {
                MM.SortData(d);
                break;
            }
            case 3:
            {
                MM.ADDData(d);
                break;
            }
            case 4:
            {
                MM.FindData(d);
                break;
            }
            case 5:
            {
                MM.DeletaData(d);
                break;
            }
            case 6:
            {
               MM.Statistics(d);
                break;
            }
            case 7:
            {
               MM.Modification(d);
                break;
            }
            case 8:
            {
                MM.DisplyData(d);
                break;
            }
             case 9:
            {
                MM.Save(d);
                return;//退出
            }
        }
       MM.Welcome();
    }
}

再也不用Switch之一:

代码语言:javascript
复制
//定义的函数类型,返回值与形参与Menu中一致
typedef void(Menu::*Fun_Name)(Data*&);
typedef struct Selet
{
    int choice_input;
    Fun_Name fun_name;

}_Select;

_Select SS[9]=
{
    {1,&Menu::TypeIn},
    {2,&Menu::SortData},
    {3,&Menu::ADDData},
    {4,&Menu::FindData},
    {5,&Menu::DeletaData},
    {6,&Menu::Statistics},
    {7,&Menu::Modification},
    {8,&Menu::DisplyData},
    {9,&Menu::Save}
};
int _leng=sizeof(SS)/sizeof(SS[0]);

void MenuSelect(Data *&d)
{
    int input=0;
    while(scanf("%d",&input)!=EOF)
    {
        if(input <1 || input>9)
        {
            cout<<"输入范围在1~9,请重新输入"<<endl;
            continue;
        }
      for(int i=0;i<_leng;i++)
        {
            if(input  == SS[i].choice_input)
            {   
                (MM.*SS[i].fun_name)(d);
            }   
        }
       MM.Welcome();
    }
}

再也不用Switch之二:

代码语言:javascript
复制
typedef void (Menu::*Select_Fun)(Data *&d);
Select_Fun  _SSL[]=
{   
    &Menu::TypeIn,
    &Menu::TypeIn,//从0开始,输入从1开始
    &Menu::SortData,
    &Menu::ADDData,
    &Menu::FindData,
    &Menu::DeletaData,
    &Menu::Statistics,
    &Menu::Modification,
    &Menu::DisplyData,
    &Menu::Save
};

void _Fun(Data *&d,int flag)
{
  Select_Fun  _funselect = _SSL[flag];
   (MM.*_funselect)(d);
}

void MenuSelect(Data *&d)
{
    int input=0;
    while(scanf("%d",&input)!=EOF)
    {
        if(input <1 || input>9)
        {
            cout<<"输入范围在1~9,请重新输入"<<endl;
            continue;
        }
        _Fun(d,input);
        MM.Welcome();
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档