⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system1.cpp

📁 模拟DOS的小实验的程序
💻 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 + -