• Command Operating System by cdsidi(ComSys) 0.1.x版本陆续更新


    0.1.3版本更新:
    1.架构调整:1.将System_com 类拆分,不再从属于System_com 类

          2.将System_com 类的功能拆分为 System_com (基本功能,无附加存储)和Systemext_com(基本拓展,有附加存储)

          3.所有的Systemext 需要初始化的功能都放在自己的class 的void init() 在System.wel.sysint()系统开启之前调用

    2.bug 修复:解决comsolve_com 类输入空行会报错误id99的问题

    3.功能改善:

    1.现在系统init()完毕之后会提示"System has inited"(很短)

    2.按下回车(输入空命令)不会提示任何信息

    3.改善了系统启动进程

    4.去掉了comsolve_com::code_empty 因为已经在solve0中支持

    5.优化了注释和代码美观

      1 #include<iostream>
      2 #include<string>
      3 #include<cstdlib> 
      4 #include<vector>
      5 #include<windows.h>
      6 #include<map>
      7 #include<cstdio>
      8 using std::cin;
      9 using std::cout;
     10 using std::string;
     11 using std::vector;
     12 using std::endl;
     13 using std::map;
     14 bool is_empty_char(char c){
     15     return c==' '|| c=='
    ';
     16 }
     17 class out_com{//字符串输出
     18     public:
     19         void print(string s);//输出 
     20         void print(string s,int from);//从第from开始输出,一直到最后 
     21         void println(string s);//输出并换行 
     22         void println(string s,int from);//从from开始输出,并换行     
     23 };
     24 class err_com{//错误处理 
     25     public:
     26     void throwln(string s);//输出错误信息 
     27     void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 
     28 };
     29 class fileio_com{    //文件输入输出(还没写) 
     30 };
     31 class in_com{//字符串输入 
     32     public:
     33         void read(string &s);//输入(空白作结尾符号) 
     34         void readln(string &s); //输入(换行作结尾符号) 
     35 };
     36 class systemio_com{ //依赖于Windows io的功能 
     37     public:                 
     38     void windowscmd(string s){//直接在cmd里面执行指令 
     39         system(s.c_str());
     40     }
     41     void progexit(int code){//退出程序并且错误码为code 
     42         exit(code);
     43     }
     44     void cleanscr();//清屏 
     45         void sleep(int k){//暂停k毫秒 
     46             Sleep(k);
     47     } 
     48 };
     49 class welcome_com{//系统欢迎与用户界面(并不是系统核心) 
     50     public:
     51         void sysinfo();//系统信息 
     52         void startsys();//启动和初始化 
     53         void startscr();//开启屏幕 
     54         void closescr();//关闭屏幕 
     55         void closesys();//关闭系统 
     56         void initsys();//数据结构初始化 
     57         void closetimeout(int m_secs);//延迟关闭(毫秒) 
     58         void sysmain();//系统运行的重要内容 
     59         void help();//输出帮助信息
     60         void advertisements();//输出广告 
     61 };
     62 class storage_com{//存储管理 
     63     public:
     64         static const int code_void=0,//代号:没有类型 
     65                         code_integer=1,//整数 
     66                         code_floating=2,//浮点数 
     67                         code_string=3;//字符串 
     68         struct varinfo{//保存变量信息的数据结构 
     69             string name;
     70             int type;
     71             int address;
     72             varinfo(int a=0,int b=0):type(a),address(b){}
     73             varinfo(string a,int b,int c):name(a),type(b),address(c){}
     74         };
     75         typedef long long Integer;//Integer:long long
     76         typedef double Floating;//Floating: double
     77         typedef string String;//String: string
     78         vector<Integer> Ints;//保存Integer 的数组 
     79         vector<Floating> Floats;//保存Floating的数组 
     80         vector<String> Strings;//保存String的数组 
     81         map<string,varinfo> varmap;//string->varinfo的映射 
     82     public://work for int only
     83         storage(){
     84         }
     85         void init();
     86         int gettype(string name);//获得变量名name的类型 
     87         void putvalue(string name,int k);//将变量名name的值改为k 
     88         int getInteger(string name);//获得name的int值 
     89         void solve0(string command);
     90 };
     91 class comsolve_com{//指令处理 
     92     private://static const int code_
     93         static const int code_unknown=0;//错误指令 
     94         static const int code_print=1; 
     95         static const int code_windowscmd=2;
     96         static const int code_exit=3;
     97         static const int code_sysinfo=4;
     98         static const int code_help=5;
     99         static const int code_var=6,
    100         static const int Max_basic_command=100;//最大命令数目(现在只有8个) 
    101         string basic_command[Max_basic_command];//指令代号->指令名的映射 
    102         map<string,int> commap;//指令名->指令代号的映射 
    103     public:
    104         comsolve_com(){
    105             ;
    106         }
    107         void init();//初始化 
    108         void solve0(string s);//第一步处理 
    109         void solve1(string s,int left,int code);//第二步命令处理 
    110 };
    111 class System_com{//基本功能(几乎无需初始化) 
    112     public:
    113         out_com out;
    114         err_com err;
    115         in_com in;
    116         systemio_com sysio;
    117         fileio_com fileio;
    118         welcome_com wel;
    119 }System;
    120 class Systeme_com{//基本拓展功能(可能需要初始化) 
    121     public:
    122         storage_com var;
    123         comsolve_com comsolve;
    124 }Systemext;
    125 void out_com::print(string s){
    126     print(s,0);
    127 }
    128 void out_com::println(string s){
    129     print(s);cout<<endl;
    130 }
    131 void out_com::print(string s,int from){
    132     int len=s.length();
    133     string s1=s.substr(from,len-from);
    134     cout<<s1;
    135 }
    136 void out_com::println(string s,int from){
    137     print(s,from);cout<<endl;
    138 }
    139 void in_com::read(string &s){
    140     cin>>s;
    141 }
    142 void in_com::readln(string &s){
    143     getline(cin,s);
    144 }
    145 void err_com::throwln(string s){
    146     System.sysio.windowscmd("color 1f"); //color 1 3 9是蓝色 
    147     System.wel.sysinfo();
    148     System.out.println("System Error:There is a problem:");
    149     System.out.println(s);
    150 }
    151 void err_com::throwshut(string s,int timeout){
    152     System.err.throwln(s);
    153     System.wel.closetimeout(timeout);
    154 } 
    155 void welcome_com::sysinfo(){
    156     System.out.println("[Command Operatoring System]");
    157     System.out.println("[This system is designed by cdsidi.]");
    158     System.out.println("[Version:0.1.3]");
    159     /************更新日志*************************** 
    160     0.0.1:    基本的框架和命令基础 
    161     0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备
    162     0.1.0: 在底层支持了Integer类型 
    163     0.1.1: 优化了用户交互、完善了代码注释 
    164     0.1.2: 添加了广告
    165     0.1.3:重构代码,将System里面的类 拆分开来,为多文件编程打下基础 
    166     ***********************************************/ 
    167 }
    168 void welcome_com::advertisements(){
    169     System.out.println("****************以下是广告*************");
    170     System.out.println("如果喜欢这个系统,请捐助我 ");    
    171     System.out.println("如果想投放广告,请联系我 ");
    172     System.out.println("https://www.cnblogs.com/cdsidi");
    173     System.out.println("51C SB 派对!");
    174     System.out.println("****************广告已结束*************");
    175 }
    176 void comsolve_com::solve1(string s,int left,int code){
    177     int len=s.length(),tmplen=len-left;
    178     string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 
    179     switch(code){
    180         case code_unknown:
    181             System.out.println("Bad command. 
     Please type 'help' for help of commands.");break;
    182         case code_print:
    183             System.out.println(tmp);break;
    184         case code_windowscmd:
    185             System.sysio.windowscmd(tmp);break;
    186         case code_exit:
    187             System.wel.closesys();break;
    188         case code_sysinfo:
    189             System.wel.sysinfo();break;
    190         case code_help:
    191             System.wel.help();break;
    192         case code_var:
    193             Systemext.var.solve0(tmp);break;
    194         default://这里有问题! 
    195             printf("Bad command.
    ");
    196             //printf("Bad command. id:%d
    ",code);break;
    197     }
    198 }
    199 void comsolve_com::solve0(string s){
    200     int len=s.length();
    201     for(int i=0;i<len;++i){//枚举结尾
    202         if(is_empty_char(s[i])){//空白[i]
    203             string tmp=s.substr(0,i);//不算空白([0,i-1]是否达到 )
    204             if(commap[tmp]!=0){
    205                 solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空白 
    206                 return;//该命令运行完毕 
    207             }
    208         }
    209     }
    210     //中间没有遇到任何命令, 
    211     solve1(s,len,commap[s]);
    212     //left=len:传递一个空串
    213     //若是正常命令,则执行,否则BADCOMMAND     
    214 }
    215 void comsolve_com::init(){
    216     basic_command[code_print]=string("print"); 
    217     basic_command[code_windowscmd]=string("windows");
    218     basic_command[code_exit]=string("exit");
    219     basic_command[code_sysinfo]=string("sysinfo");
    220     basic_command[code_help]="help";
    221     basic_command[code_var]="var";
    222     basic_command[code_empty]=""; 
    223     for(int i=0;i<Max_basic_command;++i){
    224         commap[basic_command[i]]=i;
    225     }
    226 }
    227 void systemio_com::cleanscr(){
    228     system("cls");
    229 }
    230 void welcome_com::startscr(){//启动屏幕 
    231     int cnt_stars=80,cnt_emptyl=10,waitms=3000;
    232     System.sysio.cleanscr();
    233     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    234     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    235     System.wel.sysinfo();
    236     System.wel.advertisements();
    237     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    238     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    239     System.out.print("
    ");
    240     System.out.println("Starting...");
    241     System.sysio.sleep(waitms);
    242 }
    243 void welcome_com::closescr(){
    244     System.sysio.cleanscr();
    245     int cnt_stars=80,cnt_emptyl=10,waitms=3000;
    246     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    247     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    248     System.wel.sysinfo();
    249     System.wel.advertisements();
    250     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    251     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    252     System.out.print("
    ");
    253     System.out.println("System is shutting down.");
    254     System.sysio.sleep(waitms);
    255     //System.sysio.cleanscr();
    256 }
    257 void welcome_com::help(){
    258     System.out.println("************Start of help*****************");
    259     System.out.println("1.    command 'print': ");
    260     System.out.println("print {string} System will say {string}.");
    261     System.out.println("eg. print Hello!");
    262     System.out.println("2.    command 'exit': ");
    263     System.out.println("System will close.");
    264     System.out.println("eg. exit");
    265     System.out.println("3.    command 'sysinfo': ");
    266     System.out.println("System will show the information of the System.");
    267     System.out.println("eg. sysinfo");
    268     System.out.println("4.    command 'help': ");
    269     System.out.println("System will show the commands of the System.");
    270     System.out.println("eg. help");
    271     System.out.println("5.    command 'windows': ");
    272     System.out.println("windows {string} system will do it in Windows cmd.exe");
    273     System.out.println("eg. windows echo hello");    
    274     System.out.println("************End of help*****************");
    275 }
    276 void welcome_com::startsys(){
    277     System.sysio.windowscmd("color 0f");
    278     System.wel.startscr(); 
    279     System.wel.initsys();
    280     System.sysio.cleanscr();
    281     System.out.println("System has got ready.");
    282     System.wel.sysmain();
    283 } 
    284 void welcome_com::initsys(){
    285 
    286     Systemext.comsolve.init();
    287     Systemext.var.init();
    288     System.out.println("System has inited");
    289 }
    290 void welcome_com::closesys(){
    291     System.wel.closescr();
    292     System.out.println("Press any key to exit.");
    293     System.sysio.windowscmd("pause >nul");
    294     System.sysio.progexit(0);
    295 }
    296 void welcome_com::closetimeout(int m_secs){
    297     printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000);
    298     Sleep(m_secs);
    299     System.wel.closesys();
    300 }
    301 void welcome_com::sysmain(){
    302     string s;
    303     while(1){
    304         System.out.print(">");
    305         System.in.readln(s);
    306         if(!s.empty())
    307             Systemext.comsolve.solve0(s);
    308     }
    309 }
    310 int storage_com::getInteger(string name){
    311     varinfo var=varmap[name];
    312     if(var.type==code_integer){
    313         return Ints[var.address];
    314     }else{
    315     //    System.err.throwshut("Error Type.");
    316         return 0;
    317     }
    318 }
    319 void storage_com::putvalue(string name,int val){
    320     varinfo var=varmap[name];
    321     if(var.type==code_void){
    322         Ints.push_back(val);
    323         var=varinfo(name,code_integer,Ints.size()-1);
    324         varmap[name]=var;
    325     }else if(var.type==code_integer){//此变量存在 
    326         Ints[var.address]=val;
    327     }else{//注意,以下会出现内存泄露 
    328         Ints.push_back(val);
    329         var=varinfo(name,code_integer,Ints.size()-1);
    330         varmap[name]=var;//将之前的存储信息覆盖 
    331     }    
    332 }
    333 int storage_com::gettype(string name){
    334     varinfo ret=varmap[name];
    335     return ret.type;    
    336 }/*下面这里我没看明白 ,先暂时不用了 */
    337 void storage_com::solve0(string s){//s是storage命令处理 
    338     int len=s.length();
    339     for(int i=0;i<len;++i){//枚举i,一直到结尾 
    340         if(!is_empty_char(s[i])){//空白[i]
    341             string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名
    342             varinfo tmpinfo=varmap[tmp]; 
    343             if(tmpinfo.type!=0){//如果这个变量存在 
    344                 //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 
    345                 return;//该命令运行完毕 
    346             }
    347         }
    348     }
    349     System.out.println("Bad type.");
    350 }
    351 void storage_com::init(){
    352     vector<Integer>().swap(Ints);
    353     vector<Floating>().swap(Floats);
    354     vector<String>().swap(Strings);
    355     varmap.clear();
    356 }
    357 int main(){
    358     System.wel.startsys();
    359     return 0;
    360 }
    0.1.3

    0.1.4版本更新:
    1.添加了"cls"指令 用于清屏
    2. storage 已经支持Integer/Floating/String全类型
    3. 现在命令首尾如果有空格会自动忽略(trim函数)
    4.支持通过varinfo 或者string name来输出变量的值的字符串

    5. 由于help指令未更新,所以发布0.1.4 patch1 来修复bug

      1 #include<iostream>
      2 #include<string>
      3 #include<cstdlib> 
      4 #include<vector>
      5 #include<windows.h>
      6 #include<map>
      7 #include<ctime>
      8 #include<cstdio>
      9 #include<sstream>
     10 using std::cin;
     11 using std::cout;
     12 using std::string;
     13 using std::vector;
     14 using std::endl;
     15 using std::map;
     16 bool is_empty_char(char c){
     17     return c==' '|| c=='
    ';
     18 }
     19 void trim(string &s){//删除字符串首尾空格 
     20     if(s.empty()) return;
     21     s.erase(0,s.find_first_not_of(" "));
     22     s.erase(s.find_last_not_of(" ") + 1);
     23 } 
     24 class out_com{//字符串输出
     25     public:
     26         void print(string s);//输出 
     27         void print(string s,int from);//从第from开始输出,一直到最后 
     28         void println(string s);//输出并换行 
     29         void println(string s,int from);//从from开始输出,并换行     
     30 };
     31 class err_com{//错误处理 
     32     public:
     33     void throwln(string s);//输出错误信息 
     34     void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 
     35 };
     36 class fileio_com{//文件输入输出(还没写)
     37 };
     38 class in_com{//字符串输入 
     39     public:
     40         void read(string &s);//输入(空白作结尾符号) 
     41         void readln(string &s); //输入(换行作结尾符号) 
     42 };
     43 class systemio_com{ //依赖于Windows io的功能 
     44     public:                 
     45     void windowscmd(string s){//直接在cmd里面执行指令 
     46         system(s.c_str());
     47     }
     48     void progexit(int code){//退出程序并且错误码为code 
     49         exit(code);
     50     }
     51     void cleanscr();//清屏 
     52         void sleep(int k){//暂停k毫秒 
     53             Sleep(k);
     54     } 
     55 };
     56 class welcome_com{//系统欢迎与用户界面(并不是系统核心) 
     57     public:
     58         void sysinfo();//系统信息 
     59         void startsys();//启动和初始化 
     60         void startscr();//开启屏幕 
     61         void closescr();//关闭屏幕 
     62         void closesys();//关闭系统 
     63         void initsys();//数据结构初始化 
     64         void closetimeout(int m_secs);//延迟关闭(毫秒) 
     65         void sysmain();//系统运行的重要内容 
     66         void help();//输出帮助信息
     67         void advertisements();//输出广告 
     68 };
     69 class storage_com{//存储管理 
     70     public:
     71         static const int code_void=0,//空类型 
     72                         code_integer=1,//整数 
     73                         code_floating=2,//浮点数 
     74                         code_string=3;//字符串
     75         
     76         struct varinfo{//保存变量信息的数据结构 
     77             string name;
     78             int type;
     79             int address;
     80             varinfo(int a=0,int b=0):type(a),address(b){}
     81             varinfo(string a,int b,int c):name(a),type(b),address(c){}
     82         };
     83         typedef long long Integer;//Integer:long long
     84         typedef double Floating;//Floating: double
     85         typedef string String;//String: string
     86         vector<Integer> Ints;//保存Integer 的数组 
     87         vector<Floating> Floats;//保存Floating的数组 
     88         vector<String> Strings;//保存String的数组 
     89         map<string,varinfo> varmap;//string->varinfo的映射 
     90     public:
     91         storage(){}
     92         void init();
     93         int gettype(string name);//获得变量名name的类型 
     94         void putvalue(string name,long long val);//将变量名name的值设为val
     95         void putvalue(string name,string val);
     96         void putvalue(string name,double val);
     97         int getInteger(string name);//获得name的int值 
     98         String getString(string name);
     99         double getFloating(string name);
    100         void solve0(string command);
    101         string getvarstr(varinfo var);
    102         string getvarstr(string name);
    103         void printvarstr(string name);
    104         void printvarstrln(string name);
    105 };
    106 class comsolve_com{//指令处理 
    107     private:
    108         static const int 
    109             code_unknown=0,//错误指令 
    110             code_print=1,
    111             code_windowscmd=2,
    112             code_exit=3,
    113             code_sysinfo=4,
    114             code_help=5,
    115             code_var=6,
    116             code_cls=7;
    117         static const int 
    118             code_varflag0='%';//变量出现的标志 
    119         static const int Max_basic_command=100;//最大命令数目(现在只有8个) 
    120         string basic_command[Max_basic_command];//指令代号->指令名的映射 
    121         map<string,int> commap;//指令名->指令代号的映射 
    122     public:
    123         comsolve_com(){}
    124         void init();//初始化 
    125         void solve0(string s);//第一步处理
    126         void solve1(string s,int left,int code);//第二步命令处理 
    127         string varsolve(string s);//把字符串中的变量替换成所代表的的值
    128 };
    129 class System_com{//基本功能(几乎无需初始化) 
    130     public:
    131         out_com out;
    132         err_com err;
    133         in_com in;
    134         systemio_com sysio;
    135         fileio_com fileio;
    136         welcome_com wel;
    137     System_com(){}
    138 }System;
    139 class Systemext_com{//基本拓展功能(可能需要初始化) 
    140     public:
    141         storage_com var;
    142         comsolve_com comsolve;
    143     Systemext_com(){}
    144     init(){
    145         var.init();
    146         comsolve.init();
    147     }
    148 }Systemext;
    149 void out_com::print(string s){
    150     print(s,0);
    151 }
    152 void out_com::println(string s){
    153     print(s);cout<<endl;
    154 }
    155 void out_com::print(string s,int from){
    156     int len=s.length();
    157     string s1=s.substr(from,len-from);
    158     cout<<s1;
    159 }
    160 void out_com::println(string s,int from){
    161     print(s,from);cout<<endl;
    162 }
    163 void in_com::read(string &s){
    164     cin>>s;
    165 }
    166 void in_com::readln(string &s){
    167     getline(cin,s);
    168 }
    169 void err_com::throwln(string s){
    170     System.sysio.windowscmd("color 1f"); //color 1 3 9是蓝色 
    171     System.wel.sysinfo();
    172     System.out.println("System Error:There is a problem:");
    173     System.out.println(s);
    174 }
    175 void err_com::throwshut(string s,int timeout){
    176     System.err.throwln(s);
    177     System.wel.closetimeout(timeout);
    178 } 
    179 void welcome_com::sysinfo(){
    180     System.out.println("[Command Operatoring System]");
    181     System.out.println("[This system is designed by cdsidi.]");
    182     System.out.println("[Version:0.1.4 patch 1]");
    183     /************更新日志*************************** 
    184     0.0.1:    基本的框架和命令基础 
    185     0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备
    186     0.1.0: 在底层支持了Integer类型 
    187     0.1.1: 优化了用户交互、完善了代码注释 
    188     0.1.2: 添加了广告
    189     0.1.3:重构代码,将System里面的类 拆分开来,为多文件编程打下基础 
    190     0.1.4:    1.添加了"cls"指令 用于清屏 
    191             2. storage 已经支持Integer/Floating/String全类型 
    192             3. 现在命令首尾如果有空格会自动忽略(trim函数) 
    193             4.支持通过varinfo string 来输出变量的内容 
    194     0.1.4 patch 1: 1.修复了bug;添加了 cls 指令在help内 
    195     ***********************************************/ 
    196 }
    197 void welcome_com::advertisements(){
    198     System.out.println("****************以下是广告*************");
    199     System.out.println("_______广告 1_________ ");    
    200     System.out.println("如果喜欢ComSys,请捐助我 ");    
    201     System.out.println("如果想投放广告,请联系我 ");
    202     System.out.println("https://www.cnblogs.com/cdsidi");
    203     System.out.println("_______广告 2_________ ");    
    204     System.out.println("现在加入 51C SB 派对!");
    205     System.out.println("****************广告已结束*************");
    206 }
    207 //这里有bug 先不用了 
    208 /* 
    209 string comsolve_com::varsolve(string s){
    210     string ret;
    211     int len=s.length(),
    212         lastplace=-1;//上一个没有配对的varflag位置 
    213     for(int i=0;i<len;++i){
    214     //    printf("lastplace:%d i:%d len:%d 
    ",lastplace,i,len);
    215         if(s.at(i)==code_varflag0){
    216             if(lastplace!=-1) {
    217                 lastplace=i;
    218             }else{
    219                 string varname=s.substr(lastplace+1,i-(lastplace+1));//恰好删除varflag中间的部分 
    220                 if(!varname.empty()){
    221                     string varstr=Systemext.var.getvarstr(varname);
    222                     ret.erase(lastplace,i-lastplace);//删除ret从lastplace开始,一直到i-1的部分 
    223                     continue;
    224                 }
    225                 lastplace=-1;
    226             }
    227         }
    228             ret.push_back(s.at(i));
    229     }
    230     return ret;
    231 }*/
    232 void comsolve_com::solve1(string s,int left,int code){
    233     int len=s.length(),tmplen=len-left;
    234     string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 
    235     switch(code){
    236         case code_unknown:
    237             System.out.println("Bad command.
    Please type 'help' for help of commands.");break;
    238         case code_print:
    239             System.out.println(tmp);break;
    240         case code_windowscmd:
    241             System.sysio.windowscmd(tmp);break;
    242         case code_exit:
    243             System.wel.closesys();break;
    244         case code_sysinfo:
    245             System.wel.sysinfo();break;
    246         case code_help:
    247             System.wel.help();break;
    248         case code_var:
    249             Systemext.var.solve0(tmp);break;
    250         case code_cls:
    251             System.sysio.cleanscr();break;
    252         default:
    253             printf("Bad command.
    ");
    254     }
    255 }
    256 void comsolve_com::solve0(string s){
    257     int len=s.length();
    258     for(int i=0;i<len;++i){//枚举第一级命令的结尾
    259         if(is_empty_char(s[i])){//如果[i]是空格 
    260             string tmp=s.substr(0,i);//不算空格[0,i-1]是否找到一个指令 
    261             if(commap[tmp]!=0){
    262                 solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空格 
    263                 return;
    264             }
    265         }
    266     }
    267     //s没有遇到任何空格,传递整个字符串作为第一级命令,第二级命令是空串 
    268     solve1(s,len,commap[s]);
    269 }
    270 void comsolve_com::init(){
    271     basic_command[code_print]="print";
    272     basic_command[code_windowscmd]="windows";
    273     basic_command[code_exit]="exit";
    274     basic_command[code_sysinfo]="sysinfo";
    275     basic_command[code_help]="help";
    276     basic_command[code_var]="var";
    277     basic_command[code_cls]="cls";
    278     for(int i=0;i<Max_basic_command;++i){
    279         commap[basic_command[i]]=i;
    280     }
    281 }
    282 void systemio_com::cleanscr(){
    283     system("cls");
    284 }
    285 void welcome_com::startscr(){//启动屏幕 
    286     int cnt_stars=80,cnt_emptyl=10,waitms=3000;
    287     System.sysio.cleanscr();
    288     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    289     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    290     System.wel.sysinfo();
    291     System.wel.advertisements();
    292     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    293     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    294     System.out.print("
    ");
    295     System.out.println("Starting...");
    296     System.sysio.sleep(waitms);
    297 }
    298 void welcome_com::closescr(){
    299     System.sysio.cleanscr();
    300     int cnt_stars=80,cnt_emptyl=10,waitms=3000;
    301     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    302     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    303     System.wel.sysinfo();
    304     System.wel.advertisements();
    305     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    306     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    307     System.out.print("
    ");
    308     System.out.println("System is shutting down.");
    309     System.sysio.sleep(waitms);
    310     //System.sysio.cleanscr();
    311 }
    312 void welcome_com::help(){
    313     System.out.println("************Start of help*****************");
    314     System.out.println("1.    command 'print': ");
    315     System.out.println("print {string} System will say {string}.");
    316     System.out.println("eg. print Hello!");
    317     System.out.println("2.    command 'exit': ");
    318     System.out.println("System will close.");
    319     System.out.println("eg. exit");
    320     System.out.println("3.    command 'sysinfo': ");
    321     System.out.println("System will show the information of the System.");
    322     System.out.println("eg. sysinfo");
    323     System.out.println("4.    command 'help': ");
    324     System.out.println("System will show the commands of the System.");
    325     System.out.println("eg. help");
    326     System.out.println("5.    command 'windows': ");
    327     System.out.println("windows {string} system will do it in Windows cmd.exe");
    328     System.out.println("eg. windows echo hello");    
    329     System.out.println("6.    command 'cls': ");
    330     System.out.println("System will clean the screen.");
    331     System.out.println("eg. cls");    
    332     System.out.println("************End of help*****************");
    333 }
    334 void welcome_com::startsys(){
    335     System.sysio.windowscmd("color 0f");
    336     System.wel.startscr(); 
    337     System.wel.initsys();
    338     System.sysio.cleanscr();
    339     System.out.println("System has got ready.");
    340     System.wel.sysmain();
    341 } 
    342 void welcome_com::initsys(){
    343 
    344     Systemext.comsolve.init();
    345     Systemext.var.init();
    346     System.out.println("System has inited");
    347 }
    348 void welcome_com::closesys(){
    349     System.wel.closescr();
    350     System.out.println("Press any key to exit.");
    351     System.sysio.windowscmd("pause >nul");
    352     System.sysio.progexit(0);
    353 }
    354 void welcome_com::closetimeout(int m_secs){
    355     printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000);
    356     Sleep(m_secs);
    357     System.wel.closesys();
    358 }
    359 void welcome_com::sysmain(){
    360     string s;
    361     while(1){
    362         System.out.print(">");
    363         System.in.readln(s);
    364         trim(s);//去掉首尾空格 
    365         if(!s.empty())
    366             Systemext.comsolve.solve0(s);
    367     }
    368 }
    369 int storage_com::getInteger(string name){
    370     varinfo var=varmap[name];
    371     if(var.type==code_integer){
    372         return Ints[var.address];
    373     }else{
    374         System.err.throwln("Wrong Type.");
    375         return 0;
    376     }
    377 }
    378 double storage_com::getFloating(string name){
    379     varinfo var=varmap[name];
    380     if(var.type==code_floating){
    381         return Floats[var.address];
    382     }else{
    383         System.err.throwln("Wrong Type.");
    384         return 0;
    385     }
    386 }
    387 string storage_com::getString(string name){
    388     varinfo var=varmap[name];
    389     if(var.type==code_string){
    390         return Strings[var.address];
    391     }else{
    392         System.err.throwln("Wrong Type.");
    393         return "";
    394     }
    395 }
    396 void storage_com::putvalue(string name,long long val){
    397     varinfo var=varmap[name];
    398     if(var.type==code_void){
    399         Ints.push_back(val);
    400         var=varinfo(name,code_integer,Ints.size()-1);
    401         varmap[name]=var;
    402     }else if(var.type==code_integer){//此变量存在 
    403         Ints[var.address]=val;
    404     }else{//注意,以下会出现在内存池中变量的内存泄露 
    405         Ints.push_back(val);
    406         var=varinfo(name,code_integer,Ints.size()-1);
    407         varmap[name]=var;
    408         //将之前的存储信息覆盖(之前的内存将永远无法用到) 
    409     }    
    410 }
    411 void storage_com::putvalue(string name,string val){
    412     varinfo var=varmap[name];
    413     if(var.type==code_void){
    414         Strings.push_back(val);
    415         var=varinfo(name,code_string,Strings.size()-1);
    416         varmap[name]=var;
    417     }else if(var.type==code_string){
    418         Strings[var.address]=val;
    419     }else{ 
    420         Strings.push_back(val);
    421         var=varinfo(name,code_string,Strings.size()-1);
    422         varmap[name]=var;
    423     }
    424 }
    425 void storage_com::putvalue(string name,double val){
    426     varinfo var=varmap[name];
    427     const int type=var.type;
    428     if(type==code_void){
    429         Floats.push_back(val);
    430         var=varinfo(name,code_floating,Floats.size()-1);
    431         varmap[name]=var;
    432     }else if(type==code_floating){
    433         Floats[var.address]=val;
    434     }else{ 
    435         Floats.push_back(val);
    436         var=varinfo(name,code_floating,Floats.size()-1);
    437         varmap[name]=var;
    438     }
    439 }
    440 int storage_com::gettype(string name){
    441     varinfo ret=varmap[name];
    442     return ret.type;    
    443 }
    444 string storage_com::getvarstr(varinfo var){
    445     const int type=var.type,address=var.address;
    446     string ret;
    447     std::stringstream stream;
    448     if(type==code_integer){
    449         stream<<Ints.at(address);
    450     }else if (type==code_string){
    451         stream<<Strings.at(address);
    452     }else if (type==code_floating){
    453         stream<<Floats.at(address);
    454     }else{
    455         return "VOID";
    456     }
    457     stream>>ret;
    458     return ret;
    459 }
    460 string storage_com::getvarstr(string name){
    461     varinfo var=varmap[name];
    462     return getvarstr(var);
    463 }
    464 void storage_com::printvarstr(string name){
    465     System.out.print(getvarstr(name));
    466 }
    467 void storage_com::printvarstrln(string name){
    468     System.out.println(getvarstr(name));
    469 }
    470 /*下面这里我没看明白 ,先暂时不用了 */
    471 void storage_com::solve0(string s){//s是storage命令处理 
    472     int len=s.length();
    473     for(int i=0;i<len;++i){//枚举i,一直到结尾 
    474         if(!is_empty_char(s[i])){//空白[i]
    475             string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名
    476             varinfo tmpinfo=varmap[tmp]; 
    477             if(tmpinfo.type!=0){//如果这个变量存在 
    478                 //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 
    479                 return;//该命令运行完毕 
    480             }
    481         }
    482     }
    483     System.out.println("Bad type.");
    484 }
    485 void storage_com::init(){
    486     vector<Integer>().swap(Ints);
    487     vector<Floating>().swap(Floats);
    488     vector<String>().swap(Strings);
    489     map<string,varinfo>().swap(varmap);
    490 }
    491 int main(){
    492     System.wel.startsys();
    493     return 0;
    494 }
    0.1.4 patch1

     0.1.5版本更新:

    1.添加了syscore_com 类 拆分了welcome_com的一些功能
    2.整合了开始屏幕和关闭屏幕欢迎信息
    3.添加了"welcome::about()"包含系统信息和广告
    4.更改了版本号系统[x.x.x.x] 最后一位是补丁号

      1 #include<iostream>
      2 #include<string>
      3 #include<cstdlib> 
      4 #include<vector>
      5 #include<windows.h>
      6 #include<map>
      7 #include<ctime>
      8 #include<cstdio>
      9 #include<sstream>
     10 using std::cin;
     11 using std::cout;
     12 using std::string;
     13 using std::vector;
     14 using std::endl;
     15 using std::map;
     16 bool is_empty_char(char c){
     17     return c==' '|| c=='
    ';
     18 }
     19 void trim(string &s){//删除字符串首尾空格 
     20     if(s.empty()) return;
     21     s.erase(0,s.find_first_not_of(" "));
     22     s.erase(s.find_last_not_of(" ") + 1);
     23 } 
     24 class out_com{//字符串输出
     25     public:
     26         void print(string s);//输出 
     27         void print(string s,int from);//从第from开始输出,一直到最后 
     28         void println(string s);//输出并换行 
     29         void println(string s,int from);//从from开始输出,并换行     
     30 };
     31 class err_com{//错误处理 
     32     public:
     33     void throwln(string s);//输出错误信息 
     34     void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 
     35 };
     36 class fileio_com{//文件输入输出(还没写)
     37 };
     38 class in_com{//字符串输入 
     39     public:
     40         void read(string &s);//输入(空白作结尾符号) 
     41         void readln(string &s); //输入(换行作结尾符号) 
     42 };
     43 class systemio_com{ //依赖于Windows io的功能 
     44     public:                 
     45     void windowscmd(string s){//直接在cmd里面执行指令 
     46         system(s.c_str());
     47     }
     48     void progexit(int code){//退出程序并且错误码为code 
     49         exit(code);
     50     }
     51     void cleanscr();//清屏 
     52     void sleep(int k){//暂停k毫秒 
     53             Sleep(k);
     54     } 
     55 };
     56 class welcome_com{//系统欢迎与用户界面(并不是系统核心) 
     57     public:
     58         void sysinfo();//系统信息 
     59         void startsys();//启动和初始化 
     60         void welcomescr(string message);//开始和关闭屏幕
     61         void help();//输出帮助信息
     62         void advertisements();//输出广告 
     63         void about();//输出关于信息 
     64 };
     65 class storage_com{//存储管理 
     66     public:
     67         static const int code_void=0,//空类型 
     68                         code_integer=1,//整数 
     69                         code_floating=2,//浮点数 
     70                         code_string=3;//字符串
     71         
     72         struct varinfo{//保存变量信息的数据结构 
     73             string name;
     74             int type;
     75             int address;
     76             varinfo(int a=0,int b=0):type(a),address(b){}
     77             varinfo(string a,int b,int c):name(a),type(b),address(c){}
     78         };
     79         typedef long long Integer;//Integer:long long
     80         typedef double Floating;//Floating: double
     81         typedef string String;//String: string
     82         vector<Integer> Ints;//保存Integer 的数组 
     83         vector<Floating> Floats;//保存Floating的数组 
     84         vector<String> Strings;//保存String的数组 
     85         map<string,varinfo> varmap;//string->varinfo的映射 
     86     public:
     87         storage(){}
     88         void init();
     89         int gettype(string name);//获得变量名name的类型 
     90         void putvalue(string name,long long val);//将变量名name的值设为val
     91         void putvalue(string name,string val);
     92         void putvalue(string name,double val);
     93         int getInteger(string name);//获得name的int值 
     94         String getString(string name);
     95         double getFloating(string name);
     96         void solve0(string command);
     97         string getvarstr(varinfo var);
     98         string getvarstr(string name);
     99         void printvarstr(string name);
    100         void printvarstrln(string name);
    101 };
    102 class syscore_com{//系统核心 
    103     public: 
    104         void closesys();//关闭系统 
    105         void initsys();//数据结构初始化 
    106         void closetimeout(int m_secs);//延迟关闭(毫秒) 
    107         void sysmain();//系统运行的重要内容 
    108 };
    109 class comsolve_com{//指令处理 
    110     private:
    111         static const int 
    112             code_unknown=0,//错误指令 
    113             code_print=1,
    114             code_windowscmd=2,
    115             code_exit=3,
    116             code_sysinfo=4,
    117             code_help=5,
    118             code_var=6,
    119             code_cls=7;
    120         static const int 
    121             code_varflag0='%';//变量出现的标志 
    122         static const int Max_basic_command=100;//最大命令数目(现在只有8个) 
    123         string basic_command[Max_basic_command];//指令代号->指令名的映射 
    124         map<string,int> commap;//指令名->指令代号的映射 
    125     public:
    126         comsolve_com(){}
    127         void init();//初始化 
    128         void solve0(string s);//第一步处理
    129         void solve1(string s,int left,int code);//第二步命令处理 
    130         string varsolve(string s);//把字符串中的变量替换成所代表的的值
    131 };
    132 class System_com{//基本功能(几乎无需初始化) 
    133     public:
    134         out_com out;
    135         err_com err;
    136         in_com in;
    137         systemio_com sysio;
    138         fileio_com fileio;
    139         welcome_com wel;
    140         syscore_com syscore;
    141     System_com(){}
    142 }System;
    143 class Systemext_com{//基本拓展功能(可能需要初始化) 
    144     public:
    145         storage_com var;
    146         comsolve_com comsolve;
    147     Systemext_com(){}
    148     init(){
    149         var.init();
    150         comsolve.init();
    151     }
    152 }Systemext;
    153 void out_com::print(string s){
    154     print(s,0);
    155 }
    156 void out_com::println(string s){
    157     print(s);cout<<endl;
    158 }
    159 void out_com::print(string s,int from){
    160     int len=s.length();
    161     string s1=s.substr(from,len-from);
    162     cout<<s1;
    163 }
    164 void out_com::println(string s,int from){
    165     print(s,from);cout<<endl;
    166 }
    167 void in_com::read(string &s){
    168     cin>>s;
    169 }
    170 void in_com::readln(string &s){
    171     getline(cin,s);
    172 }
    173 void err_com::throwln(string s){
    174     System.sysio.windowscmd("color 1f"); //color 1 3 9是蓝色 
    175     System.wel.sysinfo();
    176     System.out.println("System Error:There is a problem:");
    177     System.out.println(s);
    178 }
    179 void err_com::throwshut(string s,int timeout){
    180     System.err.throwln(s);
    181     System.syscore.closetimeout(timeout);
    182 } 
    183 void welcome_com::sysinfo(){
    184     int num1=0,num2=1,num3=5,patch=0;
    185     std::stringstream versionstream;
    186     versionstream<<"[Version:"<<num1<<"."<<num2<<"."<<num3<<"."<<patch<<"]";
    187     string versionstring;
    188     versionstream>>versionstring;
    189     System.out.println("[Command Operatoring System]");
    190     System.out.println("[This system is designed by cdsidi.]");
    191     System.out.println(versionstring);
    192     /************更新日志*************************** 
    193     0.0.1:    基本的框架和命令基础 
    194     0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备
    195     0.1.0: 在底层支持了Integer类型 
    196     0.1.1: 优化了用户交互、完善了代码注释 
    197     0.1.2: 添加了广告
    198     0.1.3:重构代码,将System里面的类 拆分开来,为多文件编程打下基础 
    199     0.1.4:    1.添加了"cls"指令 用于清屏 
    200             2. storage 已经支持Integer/Floating/String全类型 
    201             3. 现在命令首尾如果有空格会自动忽略(trim函数) 
    202             4.支持通过varinfo string 来输出变量的内容 
    203     0.1.4 patch 1: 1.修复了bug;添加了 cls 指令在help内 
    204     0.1.5:    1.添加了syscore_com 类 拆分了welcome_com的一些功能
    205              2.整合了开始屏幕和关闭屏幕欢迎信息
    206             3.添加了"welcome::about()"包含系统信息和广告 
    207             4.更改了版本号系统[x.x.x.x] 最后一位是补丁号 
    208     ***********************************************/ 
    209 }
    210 void welcome_com::advertisements(){
    211     System.out.println("****************以下是广告*************");
    212     System.out.println("_______广告 1_________ ");    
    213     System.out.println("如果喜欢ComSys,请捐助我 ");    
    214     System.out.println("如果想投放广告,请联系我 ");
    215     System.out.println("https://www.cnblogs.com/cdsidi");
    216     System.out.println("_______广告 2_________ ");    
    217     System.out.println("现在加入 51C SB 派对!");
    218     System.out.println("****************广告已结束*************");
    219 }
    220 void welcome_com::about(){
    221     sysinfo();
    222     advertisements();
    223 }
    224 //这里有bug 先不用了 
    225 /* 
    226 string comsolve_com::varsolve(string s){
    227     string ret;
    228     int len=s.length(),
    229         lastplace=-1;//上一个没有配对的varflag位置 
    230     for(int i=0;i<len;++i){
    231     //    printf("lastplace:%d i:%d len:%d 
    ",lastplace,i,len);
    232         if(s.at(i)==code_varflag0){
    233             if(lastplace!=-1) {
    234                 lastplace=i;
    235             }else{
    236                 string varname=s.substr(lastplace+1,i-(lastplace+1));//恰好删除varflag中间的部分 
    237                 if(!varname.empty()){
    238                     string varstr=Systemext.var.getvarstr(varname);
    239                     ret.erase(lastplace,i-lastplace);//删除ret从lastplace开始,一直到i-1的部分 
    240                     continue;
    241                 }
    242                 lastplace=-1;
    243             }
    244         }
    245             ret.push_back(s.at(i));
    246     }
    247     return ret;
    248 }*/
    249 void comsolve_com::solve1(string s,int left,int code){
    250     int len=s.length(),tmplen=len-left;
    251     string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 
    252     switch(code){
    253         case code_unknown:
    254             System.out.println("Bad command.
    Please type 'help' for help of commands.");break;
    255         case code_print:
    256             System.out.println(tmp);break;
    257         case code_windowscmd:
    258             System.sysio.windowscmd(tmp);break;
    259         case code_exit:
    260             System.syscore.closesys();break;
    261         case code_sysinfo:
    262             System.wel.sysinfo();break;
    263         case code_help:
    264             System.wel.help();break;
    265         case code_var:
    266             Systemext.var.solve0(tmp);break;
    267         case code_cls:
    268             System.sysio.cleanscr();break;
    269         default:
    270             printf("Bad command.
    ");
    271     }
    272 }
    273 void comsolve_com::solve0(string s){
    274     int len=s.length();
    275     for(int i=0;i<len;++i){//枚举第一级命令的结尾
    276         if(is_empty_char(s[i])){//如果[i]是空格 
    277             string tmp=s.substr(0,i);//不算空格[0,i-1]是否找到一个指令 
    278             if(commap[tmp]!=0){
    279                 solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空格 
    280                 return;
    281             }
    282         }
    283     }
    284     //s没有遇到任何空格,传递整个字符串作为第一级命令,第二级命令是空串 
    285     solve1(s,len,commap[s]);
    286 }
    287 void comsolve_com::init(){
    288     basic_command[code_print]="print";
    289     basic_command[code_windowscmd]="windows";
    290     basic_command[code_exit]="exit";
    291     basic_command[code_sysinfo]="sysinfo";
    292     basic_command[code_help]="help";
    293     basic_command[code_var]="var";
    294     basic_command[code_cls]="cls";
    295     for(int i=0;i<Max_basic_command;++i){
    296         commap[basic_command[i]]=i;
    297     }
    298 }
    299 void systemio_com::cleanscr(){
    300     system("cls");
    301 }
    302 void welcome_com::welcomescr(string message){//启动和关闭屏幕 (通过message传递) 
    303     const int cnt_stars=80,cnt_emptyl=8,waitms=3000;
    304     System.sysio.cleanscr();
    305     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    306     for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
    307     System.wel.about();
    308     System.out.println(message);
    309     for(int i=1;i<=cnt_emptyl-cnt_emptyl/2;++i)System.out.print("
    ");
    310     for(int i=1;i<=cnt_stars;++i)System.out.print("*");
    311     System.sysio.sleep(waitms);
    312 }
    313 void welcome_com::help(){
    314     System.out.println("************Start of help*****************");
    315     System.out.println("1.    command 'print': ");
    316     System.out.println("print {string} System will say {string}.");
    317     System.out.println("eg. print Hello!");
    318     System.out.println("2.    command 'exit': ");
    319     System.out.println("System will close.");
    320     System.out.println("eg. exit");
    321     System.out.println("3.    command 'sysinfo': ");
    322     System.out.println("System will show the information of the System.");
    323     System.out.println("eg. sysinfo");
    324     System.out.println("4.    command 'help': ");
    325     System.out.println("System will show the commands of the System.");
    326     System.out.println("eg. help");
    327     System.out.println("5.    command 'windows': ");
    328     System.out.println("windows {string} system will do it in Windows cmd.exe");
    329     System.out.println("eg. windows echo hello");    
    330     System.out.println("6.    command 'cls': ");
    331     System.out.println("System will clean the screen.");
    332     System.out.println("eg. cls");    
    333     System.out.println("************End of help*****************");
    334 }
    335 void welcome_com::startsys(){
    336     System.sysio.windowscmd("color 0f");
    337     System.wel.welcomescr("Starting...");
    338     System.syscore.initsys();
    339     System.sysio.cleanscr();
    340     System.out.println("System has got ready.");
    341     System.syscore.sysmain();
    342 } 
    343 void syscore_com::initsys(){
    344     Systemext.init();
    345 }
    346 void syscore_com::closesys(){
    347     System.sysio.cleanscr();
    348     System.wel.welcomescr("System is shutting down...");
    349     System.out.println("Press any key to exit.");
    350     System.sysio.windowscmd("pause >nul");
    351     System.sysio.progexit(0);
    352 }
    353 void syscore_com::closetimeout(int m_secs){
    354     printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000);
    355     Sleep(m_secs);
    356     System.syscore.closesys();
    357 }
    358 void syscore_com::sysmain(){
    359     string s;
    360     while(1){
    361         System.out.print(">");
    362         System.in.readln(s);
    363         trim(s);//去掉首尾空格 
    364         if(!s.empty())
    365             Systemext.comsolve.solve0(s);
    366     }
    367 }
    368 int storage_com::getInteger(string name){
    369     varinfo var=varmap[name];
    370     if(var.type==code_integer){
    371         return Ints[var.address];
    372     }else{
    373         System.err.throwln("Wrong Type.");
    374         return 0;
    375     }
    376 }
    377 double storage_com::getFloating(string name){
    378     varinfo var=varmap[name];
    379     if(var.type==code_floating){
    380         return Floats[var.address];
    381     }else{
    382         System.err.throwln("Wrong Type.");
    383         return 0;
    384     }
    385 }
    386 string storage_com::getString(string name){
    387     varinfo var=varmap[name];
    388     if(var.type==code_string){
    389         return Strings[var.address];
    390     }else{
    391         System.err.throwln("Wrong Type.");
    392         return "";
    393     }
    394 }
    395 void storage_com::putvalue(string name,long long val){
    396     varinfo var=varmap[name];
    397     if(var.type==code_void){
    398         Ints.push_back(val);
    399         var=varinfo(name,code_integer,Ints.size()-1);
    400         varmap[name]=var;
    401     }else if(var.type==code_integer){//此变量存在 
    402         Ints[var.address]=val;
    403     }else{//注意,以下会出现在内存池中变量的内存泄露 
    404         Ints.push_back(val);
    405         var=varinfo(name,code_integer,Ints.size()-1);
    406         varmap[name]=var;
    407         //将之前的存储信息覆盖(之前的内存将永远无法用到) 
    408     }    
    409 }
    410 void storage_com::putvalue(string name,string val){
    411     varinfo var=varmap[name];
    412     if(var.type==code_void){
    413         Strings.push_back(val);
    414         var=varinfo(name,code_string,Strings.size()-1);
    415         varmap[name]=var;
    416     }else if(var.type==code_string){
    417         Strings[var.address]=val;
    418     }else{ 
    419         Strings.push_back(val);
    420         var=varinfo(name,code_string,Strings.size()-1);
    421         varmap[name]=var;
    422     }
    423 }
    424 void storage_com::putvalue(string name,double val){
    425     varinfo var=varmap[name];
    426     const int type=var.type;
    427     if(type==code_void){
    428         Floats.push_back(val);
    429         var=varinfo(name,code_floating,Floats.size()-1);
    430         varmap[name]=var;
    431     }else if(type==code_floating){
    432         Floats[var.address]=val;
    433     }else{ 
    434         Floats.push_back(val);
    435         var=varinfo(name,code_floating,Floats.size()-1);
    436         varmap[name]=var;
    437     }
    438 }
    439 int storage_com::gettype(string name){
    440     varinfo ret=varmap[name];
    441     return ret.type;    
    442 }
    443 string storage_com::getvarstr(varinfo var){
    444     const int type=var.type,address=var.address;
    445     string ret;
    446     std::stringstream stream;
    447     if(type==code_integer){
    448         stream<<Ints.at(address);
    449     }else if (type==code_string){
    450         stream<<Strings.at(address);
    451     }else if (type==code_floating){
    452         stream<<Floats.at(address);
    453     }else{
    454         return "VOID";
    455     }
    456     stream>>ret;
    457     return ret;
    458 }
    459 string storage_com::getvarstr(string name){
    460     varinfo var=varmap[name];
    461     return getvarstr(var);
    462 }
    463 void storage_com::printvarstr(string name){
    464     System.out.print(getvarstr(name));
    465 }
    466 void storage_com::printvarstrln(string name){
    467     System.out.println(getvarstr(name));
    468 }
    469 /*下面这里我没看明白 ,先暂时不用了 */
    470 void storage_com::solve0(string s){//s是storage命令处理 
    471     int len=s.length();
    472     for(int i=0;i<len;++i){//枚举i,一直到结尾 
    473         if(!is_empty_char(s[i])){//空白[i]
    474             string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名
    475             varinfo tmpinfo=varmap[tmp]; 
    476             if(tmpinfo.type!=0){//如果这个变量存在 
    477                 //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 
    478                 return;//该命令运行完毕 
    479             }
    480         }
    481     }
    482     System.out.println("Bad type.");
    483 }
    484 void storage_com::init(){
    485     vector<Integer>().swap(Ints);
    486     vector<Floating>().swap(Floats);
    487     vector<String>().swap(Strings);
    488     map<string,varinfo>().swap(varmap);
    489 }
    490 int main(){
    491     System.wel.startsys();
    492     return 0;
    493 }
    0.1.5.0
  • 相关阅读:
    jmeter录制APP脚本
    jmeter的JDBC Request接口测试
    jmeter的webservice接口测试(SOAP/XML-RPC Request)
    jmeter接口测试小结
    jmeter普通的接口测试
    jmeter插件之PerfMon
    jmeter解决中文乱码问题
    session和cookies
    jmeter快速入门
    Python 基础
  • 原文地址:https://www.cnblogs.com/cdsidi/p/12539718.html
Copyright © 2020-2023  润新知