?? system1.cpp
字號:
// System1.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
void CMD_MD(void);
void CMD_RD(void);
void CMD_DIR(void);
void CMD_REN(void);
//void CMD_SET(void);
void CMD_HELP(void);
void CMD_COPY(void);
void CMD_TYPE(void);
void CMD_CD(char *flag);
void Init(void);
BOOL IsVolExists(char part);
void SearchVol(void);
void Translate(char *cmd);
char me[]={(char)192,(char)238,(char)206,(char)176,(char)200,(char)187,'\0'};
stack<int> IntStack; //定義int類型的棧
char szSysPath[MAX_PATH+1]; //系統目錄
char szCurrentPath[MAX_PATH+1]; //當前工作目錄
char directory[50]; //記錄臨時文件夾
char Vol[27]; //記錄可用盤符
int main(int argc, char* argv[])
{
cout<<"****操作系統實驗一****模擬DOS系統****03計算機(1)班****";
char cmd[50];
Init();
while(1)
{
cout<<szCurrentPath<<">"; //顯示當前工作路徑
cin>>cmd; //接受用戶命令
strlwr(cmd);
if(strcmp(cmd,"exit")==0)return 0; //退出
if(strcmp(cmd,"quit")==0)return 0; //退出
Translate(cmd); //處理用戶輸入的命令
}
return 0;
}
void Translate(char *cmd)
{
char temp[MAX_PATH];
if(strcmp(cmd,"")==0)return;
if(strcmp(cmd,"cd")==0)
{
strcat(strcpy(temp,"dir /a/w/o:n/d/a:d/b "),szCurrentPath);
system(temp);
cout<<"請輸入目錄名:";
cin>>directory;
strcat(strcat(strcpy(temp,szCurrentPath),"\\"),directory);
if(!PathFileExists(temp)) //判斷目錄是否存在
return;
CMD_CD(directory);
}
else if(strcmp(cmd,"cd..")==0)
{
CMD_CD("cd..");
}
else if(strcmp(cmd,"help")==0)
{
CMD_HELP();
}
else if(strcmp(cmd,"copy")==0)
{
CMD_COPY();
}
else if(strcmp(cmd,"md")==0)
{
CMD_MD();
}
else if(strcmp(cmd,"rd")==0)
{
CMD_RD();
}
else if(strcmp(cmd,"ren")==0)
{
CMD_REN();
}
else if(strcmp(cmd,"dir")==0)
{
CMD_DIR();
}
else if(strcmp(cmd,"type")==0)
{
CMD_TYPE();
}
else if(PathFileExists(cmd))
{
for(int i=1,j=0;cmd[i]!='\0';i++)
if(cmd[i-1]=='\\'&&cmd[i]=='\\')
return;
strcpy(szCurrentPath,strupr(cmd));
}
else
{
system(cmd);
}
}
void SearchVol(void)
{
char c[]="A:\\";
int i,j=0;
for(i=0;i<26;i++,c[0]++)
{
if(PathFileExists(c))
{
Vol[j]=c[0];
j++;
}
}
Vol[j]='\0';
}
BOOL IsVolExists(char part)
{
SearchVol();
int i=0;
strupr(&part);
while(Vol[i]!='\0')
{
if(Vol[i]==part)return true;
i++;
}
return false;
}
void Init(void)
{
cout<<me;
::GetSystemDirectory(szSysPath,MAX_PATH); //獲取系統目錄
::GetCurrentDirectory(MAX_PATH,szCurrentPath); //獲取當前目錄
for(int i=0;i<4;i++)
cout<<(char)0x2A;
cout<<0x776825C6;
for(i=0;i<4;i++)
cout<<(char)0x2A;
cout<<endl;
}
void CMD_CD(char *flag)
{
if(strcmp(flag,"cd..")==0) //模擬cd..命令,切換到上一級目錄
{
for(int i=0;szCurrentPath[i]!='\0';i++)
if(szCurrentPath[i]=='\\')
IntStack.push(i);
szCurrentPath[IntStack.top()]='\0';
IntStack.pop();
}
else //模擬cd 命令,進入下一級目錄
{
for(int j=0;szCurrentPath[j]!='\0';j++);
IntStack.push(j);
strcat(szCurrentPath,"\\");
strcat(szCurrentPath,flag);
}
}
void CMD_DIR(void)
{
char cmd[MAX_PATH];
strcat(strcpy(cmd,"dir /a "),szCurrentPath);
system(cmd);
}
void CMD_COPY(void)
{
char si[MAX_PATH],di[MAX_PATH],name[50],cmd[50];
system("dir/a/w");
cout<<"要復制的文件:";
cin>>name;
strcat(strcat(strcpy(si,szCurrentPath),"\\"),name);
if(!PathFileExists(si))
{
cout<<si<<"不存在"<<endl;
return;
}
cout<<"目標文件路徑:";
cin>>di;
strcat(strcat(strcat(strcpy(cmd,"copy "),si)," "),di);
system(cmd);
}
void CMD_TYPE(void)
{
char si[MAX_PATH],name[50],cmd[50];
system("dir/a/w");
cout<<"要查看的文件:";
cin>>name;
strcat(strcat(strcpy(si,szCurrentPath),"\\"),name);
if(!PathFileExists(si))
{
cout<<si<<"不存在"<<endl;
return;
}
strcat(strcpy(cmd,"type "),si);
system(cmd);
}
void CMD_MD(void)
{
char name[50],cmd[50];
cout<<"請輸入新建文件夾名:";
cin>>name;
strcat(strcpy(cmd,"md "),name);
if(system(cmd)==0)
cout<<"新建文件夾"<<name<<"成功!"<<endl;
}
void CMD_RD(void)
{
char name[50],cmd[50];
cout<<"請輸入文件夾名:";
cin>>name;
strcat(strcpy(cmd,"rd "),name);
if(system(cmd)==0)
cout<<"刪除文件夾"<<name<<"成功!"<<endl;
}
void CMD_REN(void)
{
char si[MAX_PATH],di[MAX_PATH],name[50],cmd[50];
system("dir/a/w");
cout<<"要改名的文件:";
cin>>name;
strcat(strcat(strcpy(si,szCurrentPath),"\\"),name);
if(!PathFileExists(si))
{
cout<<"目標文件不存在"<<endl;
return;
}
cout<<"新文件名:";
cin>>di;
strcat(strcat(strcat(strcpy(cmd,"ren "),si)," "),di);
if(system(cmd)==0)
cout<<"更改"<<name<<"為"<<di<<"成功!"<<endl;
}
/*
void CMD_SET(void)
{
char si[MAX_PATH],cmd[50];
cout<<"請輸入路徑:";
cin>>si;
if(!PathFileExists(si))
{
cout<<si<<"不存在"<<endl;
return;
}
strcat(strcpy(cmd,"set "),si);
system(cmd);
}
*/
void CMD_HELP()
{
cout<<"系統幫助:"<<endl;
cout<<"CD命令:\t輸入cd按回車,輸入目錄名則可進入指定目錄."<<endl;
cout<<"\t\t輸入cd..按回車,則可返回上級目錄目錄."<<endl;
cout<<endl;
cout<<"CLS命令:\t輸入cls按回車,清屏命令."<<endl;
cout<<endl;
cout<<"COPY命令:\t輸入copy按回車,輸入源文件名和目標路徑."<<endl;
cout<<"\t\t按回車,則可將源文件復制到目標路徑下."<<endl;
cout<<endl;
cout<<"DATE命令:\t輸入date按回車,設置日期."<<endl;
cout<<endl;
cout<<"DIR命令:\t輸入dir按回車,顯示當前文件夾的文件."<<endl;
cout<<endl;
cout<<"EXIT命令:\t輸入exit按回車,退出系統."<<endl;
cout<<endl;
cout<<"MD命令:\t輸入md按回車,再輸入新文件夾名,則在當前目錄新建一個文件夾."<<endl;
cout<<endl;
cout<<"PATH命令:\t輸入path按回車,顯示系統環境目錄路徑."<<endl;
cout<<endl;
cout<<"RD命令:\t輸入rd按回車,輸入文件夾名,則此文件夾."<<endl;
cout<<endl;
cout<<"SET命令:\t輸入set按回車,顯示系統環境變量."<<endl;
cout<<endl;
cout<<"TIME命令:\t輸入time按回車,設置時間."<<endl;
cout<<endl;
cout<<"TYPE命令:\t輸入type按回車,輸入文件名,則顯示文件內容."<<endl;
cout<<endl;
cout<<"REN命令:\t輸入ren按回車,再輸入文件夾名,則此文件夾."<<endl;
cout<<endl;
cout<<"VOL命令:\t輸入vol按回車,顯示分區信息."<<endl;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -