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

📄 quotation_ analyser.c

📁 会计管理
💻 C
字号:
//in.txt:存放所有报价
//out.txt:存放10个子报价分析结果
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<time.h>
#define CN   22 //单位个数
#define RN 10  //随机选取的子报价个数
#define QN   13 //报价子项数
void sort(float rn[][CN])  //对报价进行排序
{

	int i,j,k;
    float swap;
	for(k=0;k<RN;k++)
	{
		 for(i=1;i<CN-1;i++)
		{
			for(j=1;j<CN-i;j++)
			{
				if(rn[k][j]>rn[k][j+1])
				{
					swap=rn[k][j];
					rn[k][j]=rn[k][j+1];
					rn[k][j+1]=swap;
				}
			}
		}
	}
	//for(i=0;i<RN;i++)

}
float getb(float rn[][CN],int n) //获得B值
{
	float sum=0;
	int i;

	for(i=1;i<CN;i++)
		sum+=rn[n][i];
//	printf("%d  ",sum);
	if(CN>10 && CN<=15)  //10<num<=15的情况
	{
		sum-=rn[n][1]-rn[n][2]-rn[n][CN-2]-rn[n][CN-1];
		return sum/(float)(CN-5);
	}
	if(CN>15)             // num>15的情况
	{
		sum=sum-rn[n][1]-rn[n][2]-rn[n][CN-2]-rn[n][CN-1]-rn[n][3]-rn[n][CN-1]; 
		return sum/(float)(CN-7);  
	}
	return 0;            
}
void getrandomnum(float rn[][CN],float an[][CN],float result[][CN]) //获得10个随机不重复的子报价
{
	int i,j,random;
	srand((unsigned)time(NULL));
	for(i=0;i<RN;i++)
	{
		random=rand()%(QN-1)+1;
		while(1)    //避免重复选取
		{
			if(an[random][0]==0)
			{	
				rn[i][0]=(float)random;
				result[i][0]=(float)random;
			
				for(j=1;j<CN;j++)
					rn[i][j]=an[random][j];
				
				an[random][0]=1;
				break;
			}
			random=rand()%(QN-1)+1;
		}
	

	}
}
void getresult(float rn[][CN],float result[][CN],float an[][CN]) //获得分析结果
{
	int i,j,k;
	float	b;
    for(i=0;i<RN;i++)
    {  
        b=getb(rn,i);
		j=(int)rn[i][0];
		for(k=1;k<CN;k++)
		{
			if(an[j][k]<0.95*b)
				result[i][k]-=(float)((0.95*b-an[j][k])/b*100*0.05);
			else
			 {
				 if(an[j][k]>1.05*b)
					result[i][k]-=(float)((an[j][k]-1.05*b)/b*100*0.1);
			 } 
			 if(result[i][k]<0)
				result[i][k]=0;
		}
    }
}
void main()
{

	int i,j;   
	float allnum[QN][CN];      //存放所有报价,第一列为标志位
	float randomnum[RN][CN]; 
	float result[RN][CN];  //存放得分,第一列为随机选取的子报价项
	FILE *fp;
	for(i=0;i<RN;i++)
		for(j=1;j<CN;j++)
			result[i][j]=2.00;
    
	 fp=fopen("in.txt","r");
	if( !fp)
	{
		printf("can't open file ,exiting ...\n");
		 exit(1);
	}
	for(i=1;i<QN;i++)
	{
		for(j=1;j<CN;j++)
			fscanf(fp,"%f " ,&allnum[i][j]);
		allnum[i][0]=0;
	}
	fclose(fp);

	getrandomnum(randomnum,allnum,result);
	sort(randomnum);
	
	getresult(randomnum,result,allnum);

	fp=fopen("out.txt","w");
	if( !fp)
	{
		printf("can't open file ,exiting ...\n");
		exit(1);
	}
	for(i=65;i<=85;i++)
       fprintf(fp,"  %3c",i);
	 fprintf(fp,"\n");
	for(i=0;i<RN;i++)
	{
		fprintf(fp," %2.0f:",result[i][0]);
		for(j=1;j<CN-1;j++)
			fprintf(fp,"%3.2f ",result[i][j]);
		fprintf(fp,"%3.2f\n",result[i][CN-1]);

	}
	fclose(fp);
}

⌨️ 快捷键说明

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