C 언어 그룹(GROUP)알고리즘.c

// 그룹(GROUP) 알고리즘
#include <stdio.h>
#include <string.h>

//[!] Input data
struct Record
{
	char ProductName[6];    // 상품명
	int	Quantity;           // 판매량
}record[10];

//[!] Output data
struct Output
{
	char ProductName[6];    // 상품명
	int Quantity;           // 판매량
}output[10];

void main(void)
{
	//[1] Init
	FILE *inData;
	FILE *outData;
	char buffer[10];
	char tempbuff[4];
	int count = 0;
	int i = 0;
    int j = 0;
    struct Record temp;

	int subTotal = 0;		// 그룹소계
	int groupCount = 0;		// 그룹수

	//[2] Input
	inData = fopen("C:\\Temp\\abc1229.txt", "rt");
	outData = fopen("C:\\Temp\\abc1229_.txt", "wt");
	
	if (inData == NULL || outData == NULL)
	{
		perror("파일을 열 수 없습니다.");
		exit(1);
	}

	while (!feof(inData))
	{
        memset(buffer, 0, 10); // 버퍼 초기화 
		fgets(buffer, 10, inData); // 라인 단위 입력 
        if (strlen(buffer) > 2) // 예외처리 : 버퍼에 담기 데이터가 있다면...
        {
            strncpy(record[count].ProductName, buffer + 0, 5); // 상품명
    	    record[count].Quantity = atoi(strncpy(tempbuff, buffer + 5, 3)); // 판매량 
	        count++;
        }
	}

	printf("입력 후 데이터 : \n");
	for(i = 0;i < count;i++)
	{
		printf("%s %d\n", record[i].ProductName, record[i].Quantity);
	}

	//[2] Process
	//[A] Sort
	for(i = 0;i < count - 1;i++)
	{
		for(j = i + 1;j < count;j++)
		{
			if(strcmp(record[i].ProductName, record[j].ProductName) > 0)
			{
				temp = record[i];
				record[i] = record[j];
				record[j] = temp;
			}
		}
	}
	printf("정렬 후 데이터 : \n");
	for(i = 0;i < count;i++)
	{
		printf("%s %d\n", record[i].ProductName, record[i].Quantity);
	}

	//[B] Group
	for(i = 0;i < count;i++)
	{
		subTotal += record[i].Quantity; // 그룹소계
        // 상품명이 다르면, 새로운 상품명으로 이동
		if(strcmp(record[i].ProductName, record[i+1].ProductName) != 0)
		{
			strcpy(output[groupCount].ProductName, record[i].ProductName);
			output[groupCount].Quantity = subTotal; // 그룹소계
			groupCount++;		// 그룹수 증가
			subTotal = 0; // 그룹소계 초기화
		}
	}

	//[3] Output
	printf("처리 후 데이터 : \n");
	for(i = 0;i < groupCount;i++)
	{
		printf("%s %d\n", output[i].ProductName, output[i].Quantity);
        fprintf(outData, "%s %d\n", output[i].ProductName, output[i].Quantity);
	}

	//[4] Dispose
	fclose(inData);
	fclose(outData);
}

/*
abc1229.txt파일의 내용
--------------------
RADIO  5
TV     6
PHONE  3
RADIO  2
PHONE  2
TV    10
PHONE 11
TV     7
PHONE  4
*/

Comments

Be the first to post a comment

Post a comment