fun_delete_expression.cpp

来自「本程序是完成一个函数计算器的功能,通过输入表达式,然输入表达的未知数,则可以计算」· C++ 代码 · 共 98 行

CPP
98
字号
#include "head.h"
extern FILE *fp ;
extern expression expre;

/*按公式序号查找公式 */
int SerchExpression(int no , FILE *fp)
{
	int c = 0 ;
	expression s ;
	if((fp=fopen(FileName ,"r"))==NULL)           // FileName文件不存在,结束本函数
	{
		printf("Can't open file %s.\n",FileName );
		return 0;
	}
	s.p_Expression = (char*)malloc(50);
	while(ReadExpression(fp,&s)!=0)             //读取FileName文件中序号为no的文件内容
	{
		if(s.g_iNumber - no ==0)
		{
			DisplayExpression(&s);           //输出所查找的内容
			expre.g_iNumber = s.g_iNumber ;
			expre.p_Expression = s.p_Expression ;
			c++;
			break;
		}
	}
	fclose(fp);
	if(c==0)                               //查询不到所要查询的内容
	{
		printf("The expression %d is not in the file %s.\n",no,FileName ); 
		return 0 ;
	}
		return 1;
}
/*公式的删除*/
void RemoveExpression()
{
	int l_number = 0 , expression_exist=0;
	char c ;
	expression  sigle_expression;
	listExpression  *head ,*node ,*temp , *p;
	printf("You should select expression number to delete.\n");
	printf("Please input expression number that you want to delete(1-50)\n");
	printf(">");
	scanf("%d" , &l_number); // 输入要删除的序号
	node = MakeList(FileName); //把FileName文件夹内容输入到链表node 中
	head = node ;
	while(head != NULL)                          //while(head->next !=NULL)      
	{
		if(head->g_iNumber == l_number)    //判断链表中是否有要删除的序号,有就删除,没有就退出
		{
			expression_exist = 1 ;
			printf("whether delete the %s expression ? (Y/N)\n",head->p_Expression); // 是否要删除公式
			printf(">") ;
			getchar();
			c = getchar() ;
			if(c == 'Y' || c == 'y')  // 删除所指定号公式,并且把链表中的内容写入到FileName文件夹中
			{
				printf("The expression deleted .");
				p->next = head->next ;
				fp=fopen(FileName ,"w");
				do
					{
						sigle_expression.g_iNumber = node->g_iNumber ;
						sigle_expression.p_Expression = node->p_Expression ;
						WriteExpression(fp,&sigle_expression);//把结构体sigle_expression写入fp所指的文件中
						temp  =  node->next;
						node = temp ;							
					}while(node !=NULL) ; //while(node->next != NULL);
					fclose(fp); 
				printf("Do you want to continue to delete expression.(Y/N)\n");  // 是否继续进行删除
				printf(">");
				getchar();
				c = getchar();
				if(c == 'Y' || c == 'y')  // 若是,则递归调用来进行删除
				{
					RemoveExpression();
				}
				else 
				{
					return ; // 若不想继续删除,则退出
				}
			}
			else 
			{
				return ; // 所指定公式序号在文件中,但不进行删除,则退出
			}
		}
		p = head ;
		head = head->next ;
	}
	if(expression_exist ==0)           // 文件夹中不存在所指定的公式序号
	{
		printf("The number is%d expression is not exist file. \n" , l_number);
		return ;
	}
	
}

⌨️ 快捷键说明

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