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

📄 main.cpp

📁 C实现模拟与或非门的逻辑电路
💻 CPP
字号:


#include "StdAfx.h"

void main()
{
	int inputnum = 0,outputnum = 0;
	int ifhelp;
	char **cmd;
	LinkList *inputsignal, *outputsignal;
	char order[MAXSIZE], inputfile[MAXSIZE], mapfile[MAXSIZE], outputfile[MAXSIZE], bmpfile[MAXSIZE];
	printf("欢迎使用数字电路模拟系统\n");
	while(1)
	{
		ifhelp = 0;
		printf("请输入命令,如需帮助请键入help\n");
		fflush(stdin);
		gets(order);
		cmd = DevideOrder(order, ifhelp);
		if (ifhelp != 1)
		{
			if(cmd != NULL)
			{
				strcpy(inputfile, *(cmd+1));
				strcpy(mapfile, *(cmd+2));
				strcpy(outputfile, *(cmd+3));
				strcpy(bmpfile, *(cmd+4));
				if(IsFileExist(inputfile, mapfile, outputfile, bmpfile)==1)
					break;                             //跳出for
			}
			else
			{
				printf("命令不合法,重新键入命令请按y,结束程序请按其他键\n");
				switch(getchar())
				{
					case 'y':
					case 'Y':  
						break;                        //跳出switch,继续循环
					default:
						exit(1);
				}
			}
		}
	}
	
	inputsignal = ReadInputSignal(inputfile,inputnum);

	for (int i = 0; i < inputnum; i++)
	{
		GetSumtime(inputsignal[i]);
	}
	outputsignal = DealInputSignal(mapfile, inputsignal, outputnum);
	Output(outputsignal,outputfile,outputnum);
	GetBMP(outputsignal,bmpfile,outputnum);
//	Output(outputsignal, outputfile, outputnum);	
}





//*************检测文件合法性函数********************************************************************
int IsFileExist(char* inputfile, char*mapfile, char*outputfile, char *bmpfile)
{
	//判断inputfile和mapfile是否存在
	if(access(inputfile,0) != 0 || access(mapfile,0) != 0)
	{
		printf("输入文件不存在,重新键入命令请按y,结束程序请按其他键\n");
		switch(getchar())
		{
			case 'y':
			case 'Y':  
				return 0;
				break;
			default:
				exit(1);
		}
	}
	//判断outputfile和bmpfile是否存在
	if(access(outputfile,0)==0 || access(bmpfile,0)==0)
	{
		printf("存在与输出文件同名的文件,是否覆盖?(是按y,否按其它键)\n");
		switch(getchar())
		{
			case 'y':
			case 'Y':  
				return 1;
				break;
			default:
				printf("请重新输入命令\n");
				return 0;
				break;
		}
	}
	else 
		return 1;
}
//*******************************************************************************************




//******拆分命令函数,命令不合法则返回NULL****************************************************
char ** DevideOrder(char *order, int &ifhelp)
{
	unsigned int i, j, n = 0;
	char **temp;
	char *cmd[5];
	char command[5][50];
	
	for (i=0; i <= strlen(order);)	//去掉命令开头的空格
	{
		if(order[0] != ' ')
			break;
		if(order[i] == ' ')
			strcpy(order, order + i + 1);
		else
			i++;
	}
		
	for (i = 0, j = 1; j <= strlen(order);)//去掉中间及末尾的多余空格
	{
		if(order[i] == ' '&&(order[j] == ' ' || order[j] == '\0'))
			strcpy(order+i,order+j);
		else
		{
			i++;
			j++;
		}
	}

	for (int k = 0; k < strlen(command[0]); k++)//第一个关键词变为小写
	{
		command[0][k] = tolower(command[0][k]);
	}

	for (i = 0; i <= strlen(order); i++)//统计空格数并由此判断命令是否合法
	{
		if(order[i] == ' ')
			n++;
	}

	if(n==0&&(strcmp(order,"help")==0))
	{
		printf("程序接收如下命令,以文本形式输出\nSimulator [inputfile] [mapfile] [outputfile]\n\n");
		printf("如有图像输出,命令行形式如下\nSimulator [inputfile] [mapfile] [outputfile] [bmpfile]\n\n");
		ifhelp = 1;
		return NULL;
	}
	if(n != 4)
		return NULL;
	
	for (j = 0; j <= 4; j++)//拆分命令
	{
		i=0;
		while (order[i] != ' ' && i < strlen(order))
		{
			command[j][i] = order[i];
			i++;
		}
		command[j][i] = '\0';
		strcpy(order, order+i+1);
	}
	
//	cout<<command[0]<<endl;

	if(strcmp(command[0], "simulator") != 0)               //判断命令是否以simulator开头
	{
		printf("第一个关键字错误\n");
		return NULL;
	}

	for (i=strlen(command[3])-1;i>0;i--)
	{
		command[3][i] = tolower(command[3][i]);
		if(command[3][i]=='.')
		{
			if(strcmp((command[3]+i+1),"txt")==0)
				break;
			else
			{
				printf("outputfile 后缀名错误,应为txt\n");
				return NULL;
			}
		}
	}
	if(i==0)
	{
		printf("outputfile 后缀名错误,应为txt\n");
		return NULL;
	}
	
	
	for (i=strlen(command[4])-1;i>0;i--)
	{
		command[4][i] = tolower(command[4][i]);
		if(command[4][i]=='.')
		{
			if(strcmp((command[4]+i+1),"bmp")==0)
				break;
			else
			{
				printf("bmpfile 后缀名错误,应为bmp\n");
				return NULL;
			}
		}
	}
	if(i==0)
	{
		printf("bmptfile 后缀名错误,应为bmp\n");
		return NULL;
	}
	

	for (i=0; i <= 4; i++)
	{
		cmd[i] = command[i];
	}
	temp = cmd;
	return temp;
}
//**************************************************************************************************




//************求sumtime函数*************************************************************************
void GetSumtime(const LinkList inputsignal)
{
	LinkList ptr = inputsignal;
	LinkList ptr2 = ptr;	
	ptr->data.sumtime = ptr->data.lasttime;
	while(ptr2->next != 0)
	{
		ptr2 = ptr->next;
		ptr2->data.sumtime = ptr->data.sumtime + ptr2->data.lasttime;
		ptr = ptr->next;
	}	
}
//**************************************************************************************************



⌨️ 快捷键说明

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