zoukankan      html  css  js  c++  java
  • Command Operating System by cdsidi (ComSys)首次发布(版本0.1.2)

    #include<iostream>
    #include<string>
    #include<cstdlib> 
    #include<vector>
    #include<windows.h>
    #include<map>
    #include<cstdio>
    using std::cin;
    using std::cout;
    using std::string;
    using std::vector;
    using std::endl;
    using std::map;
    /*未知的问题:
    System_com::comsolve_com::solve1 switch:default会触发:如果只有一个回车,错误id会是99 
    */
    bool is_empty_char(char c){
        return c==' '|| c=='
    ';
    }
    class System_com{
        public:
            class out_com{//字符串输出 
                public:
                    void print(string s);//输出 
                    void print(string s,int from);//从第from开始输出,一直到最后 
                    void println(string s);//输出并换行 
                    void println(string s,int from);//从from开始输出,并换行 
            }out;
            class err_com{//错误处理 
                public:
                    void throwln(string s);//输出错误信息 
                    void throwshut(string s,int timeout);//输出错误信息并且在timeout毫秒后关闭程序 
            }err;
            class in_com{//字符串输入 
                public:
                    void read(string &s);//输入(空白作结尾符号) 
                    void readln(string &s); //输入(换行作结尾符号) 
            }in;
            class systemio_com{ //依赖于Windows io的功能 
                public:                 
                    void windowscmd(string s){//直接在cmd里面执行指令 
                        system(s.c_str());
                    }
                    void progexit(int code){//退出程序并且错误码为code 
                        exit(code);
                    }
                    void cleanscr();//清屏 
                    void sleep(int k){//暂停k毫秒 
                        Sleep(k);
                    } 
            }io,sysio;
            class fileio_com{//文件输入输出(还没写) 
            }fileio;
            class welcome_com{//系统欢迎与用户界面(并不是系统核心) 
                public:
                    void sysinfo();//系统信息 
                    void startsys();//启动和初始化 
                    void startscr();//开启屏幕 
                    void closescr();//关闭屏幕 
                    void closesys();//关闭系统 
                    void closetimeout(int m_secs);//延迟关闭(毫秒) 
                    void sysmain();//系统运行的重要内容 
                    void help();//输出帮助信息
                    void advertisements();//输出广告 
            }welcome,wel;
            class storage_com{//存储管理 
                public:
                    static const int code_void=0,//代号:没有类型 
                                    code_integer=1,//整数 
                                    code_floating=2,//浮点数 
                                    code_string=3;//字符串 
                    struct varinfo{//保存变量信息的数据结构 
                        string name;
                        int type;
                        int address;
                        varinfo(int a=0,int b=0):type(a),address(b){}
                        varinfo(string a,int b,int c):name(a),type(b),address(c){}
                    };
                    typedef long long Integer;//Integer:long long
                    typedef double Floating;//Floating: double
                    typedef string String;//String: string
                    vector<Integer> Ints;//保存Integer 的数组 
                    vector<Floating> Floats;//保存Floating的数组 
                    vector<String> Strings;//保存String的数组 
                    map<string,varinfo> varmap;//string->varinfo的映射 
                public://work for int only
                    storage(){
                        //init();
                    }
                //    void init();
                    int gettype(string name);//获得变量名name的类型 
                    void putvalue(string name,int k);//将变量名name的值改为k 
                    int getInteger(string name);//获得name的int值 
                    void solve0(string command);
            }var,storage;
            class comsolve_com{//指令处理 
                private://static const int code_
                    static const int code_unknown=0;//错误指令 
                    static const int code_print=1; 
                    static const int code_windowscmd=2;
                    static const int code_exit=3;
                    static const int code_sysinfo=4;
                    static const int code_help=5;
                    static const int code_var=6,
                                code_empty=7;
                    static const int Max_basic_command=100;//最大命令数目(现在只有8个指令,还早着呢) 
                    string basic_command[Max_basic_command];//指令代号->指令名的映射 
                    map<string,int> commap;//指令名->指令代号的映射 
                public:
                    comsolve_com(){
                        init();
                    }
                    void init();//初始化 
                    void solve0(string s);//第一步处理 
                    void solve1(string s,int left,int code);//第二步命令处理 
            }comsolve,comwork,coms,comw;
    }System;
    //下面是这个类的成员函数 
    //void System_com::_com::
    void System_com::out_com::print(string s){
        print(s,0);
    }
    void System_com::out_com::println(string s){
        print(s);cout<<endl;
    }
    void System_com::out_com::print(string s,int from){
        int len=s.length();
        string s1=s.substr(from,len-from);
        cout<<s1;
    }
    void System_com::out_com::println(string s,int from){
        print(s,from);cout<<endl;
    }
    void System_com::in_com::read(string &s){
        cin>>s;
    }
    void System_com::in_com::readln(string &s){
        getline(cin,s);
    }
    void System_com::err_com::throwln(string s){
        System.sysio.windowscmd("color 1f"); //1 3 9
        System.wel.sysinfo();
        System.out.println("System Error:There is a problem:");
        System.out.println(s);
    }
    void System_com::err_com::throwshut(string s,int timeout){
        System.err.throwln(s);
        System.wel.closetimeout(timeout);
    } 
    void System_com::welcome_com::sysinfo(){
        System.out.println("[Command Operatoring System]");
        System.out.println("[This system is designed by cdsidi.]");
        System.out.println("[Version:0.1.2]");
        /************更新日志*************************** 
        0.0.1:    基本的框架和命令基础 
        0.0.2: 优化了GUI,添加了启动和关闭画面,为fileio做下早期准备
        0.1.0: 在底层支持了Integer类型 
        0.1.1: 优化了用户交互、完善了代码注释 
        0.1.2: 添加了广告 
        ***********************************************/ 
    }
    void System_com::welcome_com::advertisements(){
        System.out.println("****************以下是广告*************");
        System.out.println("如果喜欢这个系统,请捐助我 ");    
        System.out.println("如果想投放广告,请联系我 ");
        System.out.println("https://www.cnblogs.com/cdsidi");
        System.out.println("51 CSB 派对!");
        System.out.println("****************广告已结束*************");
    }
    void System_com::comsolve_com::solve1(string s,int left,int code){
        int len=s.length(),tmplen=len-left;
        string tmp=s.substr(left,len-left);//从left一直截取到len(下一步处理的tmp) 
        switch(code){
            case code_unknown:
                System.out.println("Bad command. 
     Please enter 'help' for help of commands.");break;
            case code_print:
                System.out.println(tmp);break;
            case code_windowscmd:
                System.sysio.windowscmd(tmp);break;
            case code_exit:
                System.wel.closesys();break;
            case code_sysinfo:
                System.welcome.sysinfo();break;
            case code_help:
                System.welcome.help();break;
            case code_var:
                System.storage.solve0(tmp);break;
            case code_empty:
                System.out.println("EMPTY.");break;
            default://这里有问题! 
                printf("Bad command.
    ");
                //printf("Bad command. id:%d
    ",code);break;
        }
    }
    void System_com::comsolve_com::solve0(string s){
        int len=s.length();
        for(int i=0;i<len;++i){//枚举结尾
            if(is_empty_char(s[i])){//空白[i]
                string tmp=s.substr(0,i);//不算空白([0,i-1]是否达到 )
                if(commap[tmp]!=0){
                    solve1(s,i+1,commap[tmp]);//转交下层处理,[i+1,end]跳过空白 
                    return;//该命令运行完毕 
                }
            }
        }
        //中间没有遇到任何命令, 
        solve1(s,len,commap[s]);
        //left=len:传递一个空串
        //若是正常命令,则执行,否则BADCOMMAND     
    }
    void System_com::comsolve_com::init(){
        basic_command[code_print]=string("print"); 
        basic_command[code_windowscmd]=string("windows");
        basic_command[code_exit]=string("exit");
        basic_command[code_sysinfo]=string("sysinfo");
        basic_command[code_help]="help";
        basic_command[code_var]="var";
        basic_command[code_empty]=""; 
        for(int i=0;i<Max_basic_command;++i){
            commap[basic_command[i]]=i;
        }
    }
    void System_com::systemio_com::cleanscr(){
        system("cls");
    }
    void System_com::welcome_com::startscr(){//启动屏幕 
        int cnt_stars=80,cnt_emptyl=10,waitms=3000;
        System.sysio.cleanscr();
        for(int i=1;i<=cnt_stars;++i)System.out.print("*");
        for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
        System.welcome.sysinfo();
        System.welcome.advertisements();
        for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
        for(int i=1;i<=cnt_stars;++i)System.out.print("*");
        System.out.print("
    ");
        System.out.print("Starting...");
        System.sysio.sleep(waitms);
        System.sysio.cleanscr();
        System.out.println("System has got ready.");
    }
    void System_com::welcome_com::closescr(){
        System.sysio.cleanscr();
        int cnt_stars=80,cnt_emptyl=10,waitms=3000;
        for(int i=1;i<=cnt_stars;++i)System.out.print("*");
        for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
        System.welcome.sysinfo();
        System.welcome.advertisements();
        for(int i=1;i<=cnt_emptyl/2;++i)System.out.print("
    ");
        for(int i=1;i<=cnt_stars;++i)System.out.print("*");
        System.out.print("
    ");
        System.out.println("System is shutting down.");
        System.sysio.sleep(waitms);
        //System.sysio.cleanscr();
    }
    void System_com::welcome_com::help(){
        System.out.println("************Start of help*****************");
        System.out.println("1.    command 'print': ");
        System.out.println("print {string} System will say {string}.");
        System.out.println("eg. print Hello!");
        System.out.println("2.    command 'exit': ");
        System.out.println("System will close.");
        System.out.println("eg. exit");
        System.out.println("3.    command 'sysinfo': ");
        System.out.println("System will show the information of the System.");
        System.out.println("eg. sysinfo");
        System.out.println("4.    command 'help': ");
        System.out.println("System will show the commands of the System.");
        System.out.println("eg. help");
        System.out.println("5.    command 'windows': ");
        System.out.println("windows {string} system will do it in Windows cmd.exe");
        System.out.println("eg. windows echo hello");    
        System.out.println("************End of help*****************");
    }
    void System_com::welcome_com::startsys(){
        System.sysio.windowscmd("color 0f");
        System.wel.startscr(); 
        System_com System;
        System.wel.sysmain();
    } 
    void System_com::welcome_com::closesys(){
        System.wel.closescr();
        System.out.println("Press any key to exit.");
        System.sysio.windowscmd("pause >nul");
        System.sysio.progexit(0);
    }
    void System_com::welcome_com::closetimeout(int m_secs){
        printf("System will shutdown in %d seconds. Please get ready.",m_secs/1000);
        Sleep(m_secs);
        System.wel.closesys();
    }
    void System_com::welcome_com::sysmain(){
        string s;
        while(1){
            System.out.print(">");
            System.in.readln(s);
            System.comsolve.solve0(s);
        }
    }
    int System_com::storage_com::getInteger(string name){
        varinfo var=varmap[name];
        if(var.type==code_integer){
            return Ints[var.address];
        }else{
        //    System.err.throwshut("Error Type.");
            return 0;
        }
    }
    void System_com::storage_com::putvalue(string name,int val){
        varinfo var=varmap[name];
        if(var.type==code_void){
            Ints.push_back(val);
            var=varinfo(name,code_integer,Ints.size()-1);
            varmap[name]=var;
        }else if(var.type==code_integer){//此变量存在 
            Ints[var.address]=val;
        }else{//注意,以下会出现内存泄露 
            Ints.push_back(val);
            var=varinfo(name,code_integer,Ints.size()-1);
            varmap[name]=var;//将之前的存储信息覆盖 
        }    
    }
    int System_com::storage_com::gettype(string name){
        varinfo ret=varmap[name];
        return ret.type;    
    }/*下面这里我没看明白 ,先暂时不用了 */
    void System_com::storage_com::solve0(string s){//s是storage命令处理 
        int len=s.length();
        for(int i=0;i<len;++i){//枚举i,一直到结尾 
            if(!is_empty_char(s[i])){//空白[i]
                string tmp=s.substr(0,i);//不算空白[0,i-1]是否找到变量名
                varinfo tmpinfo=varmap[tmp]; 
                if(tmpinfo.type!=0){//如果这个变量存在 
                    //solve1(s,i+1,tmpinfo);//转交下层处理,[i+1,end]跳过空白 
                    return;//该命令运行完毕 
                }
            }
        }
        System.out.println("Bad type.");
    }
    int main(){
        System_com::welcome_com tmp;tmp.startsys();
        return 0;
    }
    View Code

    ComSys 0.1.2 代码首次发布

    请各位大神不吝赐教。

    目前可用的命令

    print {string}

    windows

    exit

    sysinfo

    help

    程序中间有很多奇怪的bug,暂时无法解决

    程序介绍:

    这个程序的所有功能包含在了class System_com里面,通过class System_com System变量实现操作

    class System_com 包含的目前有用的类:

    class out_com 输出

    class err_com 错误信息

    class in_com 输入

    class systemio_com

    class welcome_com

    class storage_com (目前仅支持Integer 类型)

    class comsolve_com 处理用户输入的命令

    下一次更新预告

    1.可能实现多文件

    2.添加支持隐藏的命令

    3.可能会实现Stoarge

  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/cdsidi/p/12530036.html
Copyright © 2011-2022 走看看