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

📄 basiccmd.cpp

📁 用C实现的本地服务器
💻 CPP
字号:
/***
*
*basiccmd.cpp  - 基本命令各函数
*
*   编写者:杨金锋
*
*   完成时间:2008年11月13日
*
*   修改时间:2008年11月15日
*
****/

#include "StdAfx.h"
#include "Head.h"

/*
* 函数功能: 输入密码
* 输入参数: char *pwd
* 输出参数: int
* 返 回 值:	0 表示成功
*           1 表示失败
*/
int InputPwd(char *pwd)
{
	char pwdch;
	int i;
	
	fflush(stdin);			                    //清除输入流
	for(pwdch=getch(), i=0; pwdch!=13; pwdch=getch())
	{
		if(pwdch == 8)	                        //退格键的ASCII码为 8
		{
			if(i > 0)
			{
				putchar('\b');
				pwd[--i] = '\0';
			}
			putchar(0);
			putchar('\b');
			continue;
		}
			
		putchar('*');
		pwd[i++] = pwdch;
	}
	pwd[i] = 0;
	return 0;
}


/**********登录函数*************/
int Login(char*user_name)
{
	int i,n,pos1,pos2;
	FILE * pFile;	
	user_information inform;
	
	if ( (pFile=fopen("userinformation.txt","r")) == NULL) 
		printf("Error opening file");
	
	for(i=1;;)
	{
		if(fgets(inform.username , MAX_USERNAME , pFile)==NULL)
		{
			printf("该用户名不存在\n是否重新输入,(是按y,其它键退出)\n");
			switch(getchar())
			{
			
			case 'y':
			case 'Y':
				rewind(pFile);
				printf("请再次输入用户名\n");
				fflush(stdin);
				gets(user_name);
				break;
			default:
				printf("已退出\n");
				fclose(pFile);
				return 0;
			}
			fgets(inform.username , MAX_USERNAME , pFile);
		}	
		
		
		fgets(inform.password , MAX_PASSWORD , pFile);
		
		pos1 = strlen(inform.username);
		if(inform.username[pos1-1] == '\n') 
			inform.username[pos1-1] = '\0';
		
		pos2 = strlen(inform.password);
		if(inform.password[pos2-1] == '\n') 
			inform.password[pos2-1] = '\0';

		n=strcmp(user_name,inform.username);
		if(n==0)                                     //如果用户名输入正确,则进入密码输入
		{	
			char password[MAX_PASSWORD];
			if (access(user_name,0)!=-1)             //判断是否有名称为用户名的文件夹
			{
				printf("请输入密码\n");
				while(InputPwd(password));

				while(strcmp(password,inform.password)!=0)
				{
					printf("密码输入错误\n重新输入按y,按其他键退出\n");
					switch(getchar())
					{
					case 'y':
					case 'Y':
						printf("请输入密码\n");
						while(InputPwd(password));
						break;
					default:
						printf("已退出\n");
						fclose(pFile);
						return 0;
					}
					
				}
				printf("\n登录成功\n");
				fclose(pFile);
				return 1;
			}
		}
	}
}	

/****注册函数******************

  * 函数功能: 注册
  * 输入参数: char *useer_name
  * 输出参数: int
  * 返 回 值:	1 表示成功
				0 表示失败

*******************************/

int Register(char*user_name)
{

//读取已经存在的用户名的信息并与新用户名比较
	int i,n,pos,k;
	unsigned j;
	char a;
	FILE * pFile;	
	user_information inform;

	if ( (pFile=fopen("userinformation.txt","at+")) == NULL) 
		printf("Error opening file"); 
	
	for(i=1;;)
		{
			if(fgets(inform.username , MAX_USERNAME , pFile)==NULL) 
				break;
			
			fgets(inform.password , MAX_PASSWORD , pFile);
			pos = strlen(inform.username);
			if(inform.username[pos-1] == '\n') 
				inform.username[pos-1] = '\0';
			
			n=strcmp(user_name,inform.username);
			if(n==0)
			{
				//注册过程中若因用户名冲突可选择退出注册
				printf("该用户名已存在\n重新输入注册按y,退出注册按其他键\n");
				switch (getchar())
				{
				case'y':
					printf("请重新输入用户名\n");
					fflush(stdin);
					gets(user_name);
					rewind(pFile);
					break;
				default:
					printf("已退出注册\n");
					fclose (pFile);
					return 0;

				}
			}
		}

    //输入密码并验证
	char password[2][MAX_PASSWORD];
	for(i=1;;)
	{
		for(i=1;;)
		{
			printf("\n请输入密码(6到18位)\n");	      //第一次输入密码
			while(InputPwd(password[0]));

			for (j=0;j<strlen(password[0]);j++)       //验证密码中是否有不合法字符
			{
				a=password[0][j];
				if (!((a>=48&&a<=57)||(a>=65||a<=90)||(a>=97&&a<=122)))
				{
					k=1;                              //表示密码中包含不合法字符
				}
			}
			
			if(!strcmp(password[0],""))		       	  //限制密码不能为空
				printf("\n密码不能为空");
			else if (k==1)
			{
				printf("密码只能包括数字和字母\n");
			}
			else if (strlen(password[0])<6||strlen(password[0])>18)
			{
				printf("密码长度为6~18字符!\n");
				printf("请重新输入密码.\n");
			}
			else
				break;
		}

		printf("\n请再次输入密码(6到18位)\n");        //重复输入密码
		while(InputPwd(password[1]));
	
		if(strcmp(password[0],password[1])==0)
		{
			break;
		}
		else
			printf("\n密码输入不正确,请重新输入\n");
	}
	printf("\n注册成功\n");

// 将新用户信息写入文件
	
	rewind(pFile);
	fputs(user_name,pFile);
	fputs("\n",pFile);
	fputs(password[0],pFile);
	fputs("\n",pFile);
	fclose (pFile);
	return 1;
	
}

//退出系统
void Quit()
{
	exit(1);
}


void Help()
{
	
}

/***********帮助函数************
*功能:显示相关命令的帮助信息
*输入:char * order
*******************************/
void HelpA(char*order)
{

	if (strcmp(order,"login")==0)
	{
		printf("功能:登录文件服务器\n");
		printf("用法:login 用户名\n");
		printf("举例:login user\n");
		return;
	}

	if (strcmp(order,"register")==0)
	{
		printf("功能:在文件服务系统中注册一个新用户\n");
		printf("用法:register 新用户名\n");
		printf("举例:register user\n");
		return;
	}

	if (strcmp(order,"logout")==0)
	{
		printf("功能:用于登录文件服务器后退出登录,并未退出程序\n");
		printf("用法:logout\n");
		printf("举例:logout\n");
		return;
	}

	if (strcmp(order,"quit")==0)
	{
		printf("功能:退出文件服务器程序\n");
		printf("用法:quit\n");
		printf("举例:quit\n");
		return;
	}
	if (strcmp(order,"help")==0)
	{
		printf("功能:调出命令的帮助信息\n");
		printf("用法一:help 命令\n此用法即显示相关命令的帮助信息\n");
		printf("用法二:help\n此用法即显示当前可用命令的帮助信息\n");
		printf("举例:\n");
		printf("\t用法一:help order\n");
		printf("\t用法二:help\n");
		return;
	}

	if (strcmp(order,"upload")==0)
	{
		printf("功能:上传文件\n");
		printf("用法:upload 源文件路径 目标路径\n");
		printf("举例:将D盘根目录下的wenjian.cpp上传到文件服务器根目录的source目录下,命令如下:\n");
		printf("\tupload D:\\wenjian.cpp\\source\n");
		printf("注意:目标路径中若有同名文件,则会被覆盖\n");
		return;
	}

	if (strcmp(order,"download")==0)
	{
		printf("功能:下载文件\n");
		printf("用法:download 源文件路径 目标路径\n");
		printf("举例:将文件服务器上的wenjian.cpp文件下载到D盘根目录下,命令如下:\n");
		printf("\tdownload wenjian.cpp D:\\\n");
		printf("注意:目标路径中若有同名文件,则会被覆盖\n");
		return;
	}

	if (strcmp(order,"delete")==0)
	{
		printf("功能:删除文件\n");
		printf("用法:delete 文件名\n");
		printf("举例:delete wenjian.cpp\n");
		printf("注意:若文件不存在,则删除失败\n");
		return;
	}

	if (strcmp(order,"list")==0)
	{
		printf("功能:罗列该用户在当前目录上的所有文件和目录,包含文件名、文件大小、建立时间\n");
		printf("用法一:list\n");
		printf("用法二:list -r(递归显示)\n");
		printf("举例一:list\n");
		printf("举例二:list -r\n");
		return;
	}

	if (strcmp(order,"find")==0)
	{
		printf("功能:查找文件(根据关键字查找文件服务器的所有文件)\n");
		printf("用法:find 关键字\n");
		printf("举例:find file\n");
		return;
	}

	if (strcmp(order,"mkdir")==0)
	{
		printf("功能:建立目录\n");
		printf("用法:mkdir 目标目录名\n");
		printf("举例:mkdir user\n");
		printf("注意:若目标目录名和已有目录名或文件名冲突,则失败\n");
		return;
	}

	if (strcmp(order,"rmdir")==0)
	{
		printf("功能:删除目录\n");
		printf("用法:rmdir 目标目录名\n");
		printf("举例:rmdir user\n");
		printf("注意:若目标目录不存在,则失败\n");
		return;
	}

	if (strcmp(order,"cd")==0)
	{
		printf("功能: 进入目录\n");
		printf("用法:cd 目标地址\n");
		printf("举例:cd sourse\n");
		return;
	}

	if (strcmp(order,"rm")==0)
	{
		printf("功能: 重命名文件或文件夹\n");
		printf("用法:rm 文件名或文件夹名\n");
		printf("举例:rm text.txt或rm sourse\n");
		return;
	}

	if (strcmp(order,"cp")==0)
	{
		printf("功能: 复制文件\n");
		printf("用法:cp 文件名 目标地址\n");
		printf("举例:cp text.txt sourse\n");
		return;
	}
	if (strcmp(order,"mv")==0)
	{
		printf("功能: 移动文件\n");
		printf("用法:mv 文件名 目标地址\n");
		printf("举例:mv text.txt sourse\n");
		return;
	}

	if (strcmp(order,"pwd")==0)
	{
		printf("功能: 显示当前目录\n");
		printf("用法:pwd\n");
		printf("举例:pwd\n");
		return;
	}

	if (strcmp(order,"type")==0)
	{
		printf("功能: 显示文本文件的内容\n");
		printf("用法:type 文本文件名\n");
		printf("举例:type text.txt\n");
		return;
	}

	if (strcmp(order,"attr")==0)
	{
		printf("功能: 显示文件或文件夹属性\n");
		printf("用法:attr 文件名或文件夹名\n");
		printf("举例:cd text.txt或cd sourse\n");
		return;
	}

	if (strcmp(order,"fupload")==0)
	{
		printf("功能: 上传文件夹\n");
		printf("用法:fupload 要上传的文件夹地址 目标地址\n");
		printf("举例:fupload D:\\testdir sourse\n");
		return;
	}
	printf("\n不是文件服务器的命令,输入“help”查看可用命令\n");
		
}

/****************************
*    登录后的帮助函数
*罗列登陆后可用命令的帮助信息
*****************************/
void Help_login()
{
	printf("logout\t");
	printf("logout用于登录文件服务器后退出登录\n");
	
	printf("upload\t");
	printf("上传文件\n");
		
	printf("download\t");
	printf("下载文件\n");
	
	printf("delete\t");	
	printf("删除文件\n");	
	
	printf("list\t");
	printf("罗列该用户在当前目录上的所有文件和目录\n");
		
	printf("find\t");
	printf("查找文件(根据关键字查找文件服务器的所有文件)\n");
	
	printf("mkdir\t");
	printf("建立目录\n");
		
	printf("rmdir\t");	
	printf("删除目录\n");
	
	printf("cd\t");	
	printf("进入目录\n");

	printf("rm\t");
	printf(" 重命名文件或文件夹\n");

	printf("cp\t");
	printf(" 复制文件\n");

	printf("mv\t");
	printf("移动文件\n");

	printf("pwd\n");
	printf("功能: 显示当前目录\n");

	printf("type\t");
	printf("显示文本文件的内容\n");

	printf("attr\t");
	printf("显示文件或文件夹属性\n");

	printf("fupload\t");
	printf("上传文件夹\n");

	printf("输入“help 命令名称”查看命令的具体用法\n");
	
}



/*****************************
*     登录前的帮助函数
*罗列登陆前可用命令的帮助信息
*****************************/
void Help_unlogin()
{
	printf("login\t");
	printf("登录文件服务器\n");
	
	printf("register\t");
	printf("在文件服务系统中注册一个新用户\n");

	printf("help\t");
	printf("调出命令的帮助信息\n");
	
	printf("quit\t");
	printf("退出文件服务器程序\n");

	printf("输入“help 命令名称”查看命令的具体用法\n");

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -