C 언어 - 실습 - 학생관리 프로그램 Ver4.1(파일로 저장하기)

컴퓨터/C

728x90
반응형

실습해보기 

학생관리 프로그램에 파일 스트림을 생성하고 파일의 형태로 저장을 해보도록 하겠습니다.

 

구현 부분

  • 프로그램 종료 시에 저장여부 확인
  • 저장을 원할 시 파일 스트림 생성 
    • 생성된 파일 스트림을 통해 '학생저장목록파일. txt에 일정한 형태로 저장
printf("프로그램을 종료합니다.\n");
			printf("저장 하시겠습니까 ? 1. 네 \t 2. 아니오 :");
			input = inputInt(1, 2);
			if (input == 1)
			{
				FILE* file = fopen("학생저장목록파일.txt", "wt");
				if (file != NULL)
				{
					for (int i = 0; i < count; i++)
					{
						fprintf(file,"%s\t",student[i].name);
						fprintf(file, "%d\t", student[i].Kor);
						fprintf(file, "%d\t", student[i].Eng);
						fprintf(file, "%d\t", student[i].Math);
						fprintf(file, "%f\t", student[i].Avg);
						fprintf(file, "\n");

					}
					printf("저장이 성공적으로 완료 됬습니다\n");
					fclose(file);
				}
				else
				{
					printf("파일 저장에 실패 했습니다.");
				}

 

전체 소스코드 보기

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct _Student
{
	char name[20];
	int Kor;
	int Eng;
	int Math;
	float Avg;

}Student;

int inputInt(int min, int max)
{
	int num;
	while (1)
	{

		scanf("%d", &num);
		if (num >= min && num <= max)
		{
			return num;
		}
		printf("범위에서 벗어난 값 입니다. 다시 입력해 주세요 (%d ~ %d)\n", min, max);
		system("pause");
		printf("재 입력 : ");

	}
}

void printAll(int count, Student* student)
{
	printf("===== 학생 정보 전체 출력하기 =====\n");
	for (int i = 0; i < count; i++)
	{
		printf("학생 [%d/30]\n", i + 1);
		printf("이름 : %s \t 국어 : %d \t 영어 : %d \t 수학 : %d \t [평균 점수 : %f] \n\n",
			student[i].name, student[i].Kor, student[i].Eng, student[i].Math, student[i].Avg);
	}
	if (count == 0)
	{
		printf("등록된 학생 정보가 존재하지 않습니다.\n");
		system("pause");
	}
}

void printName(int count, Student* student, char name[20])
{
	printf("===== 학생 정보 선택 출력하기(%s) =====\n", name);
	for (int i = 0; i < count; i++)
	{
		if (strcmp(name, student[i].name) == 0)
		{
			printf("이름 : %s \t 국어 : %d \t 영어 : %d \t 수학 : %d \t [평균 점수 : %f] \n\n",
				student[i].name, student[i].Kor, student[i].Eng, student[i].Math, student[i].Avg);
			return;
		}
	}
	printf("찾는 학생이 존재하지 않습니다.\n");
	system("pause");
}

int main()
{
	Student student[30];
	int count = 0;


	while (1)
	{
		system("cls");
		printf("===== 학생 성적 관리 프로그램 =====\n");
		printf("1. 학생 정보 입력하기 \t 2. 학생 정보 출력하기 \t 3. 프로그램 종료하기 \n");
		printf("원하는 메뉴를 입력하세요 : ");

		int input = inputInt(1, 3);
		printf("\n\n");

		if (input == 1)
		{

			if (count == 30)
			{
				printf("이미 30명의 학생의 정보를 모두 추가 했습니다.\n");
				printf("더 이상 추가 할 수 없습니다.\n\n");
				system("pause");
			}
			else
			{
				system("cls");
				printf("===== 학생 정보 입력하기 [%d / 30] =====\n", count + 1);
				printf("이름 : ");
				scanf("%s", &student[count].name);
				printf("국어 : ");
				student[count].Kor = inputInt(0, 100);
				printf("영어 : ");
				student[count].Eng = inputInt(0, 100);
				printf("수학 : ");
				student[count].Math = inputInt(0, 100);

				student[count].Avg = (float)(student[count].Kor + student[count].Eng + student[count].Math) / 3.0f;
				count++;
			}
		}
		else if (input == 2)
		{
			system("cls");
			printf("===== 학생 정보 출력하기 =====\n");
			printf("1. 전체 출력하기 \t 2. 선택 출력하기 \n");
			printf("원하는 메뉴를 입력하세요 : ");
			input = inputInt(1, 2);
			if (input == 1)
			{
				printAll(count, student);
			}
			else
			{
				printf("찾을 이름을 입력 하세요 : ");
				char name[20];
				scanf("%s", name);
				printName(count, student, name);
			}
		}
		else if (input == 3)
		{
			printf("프로그램을 종료합니다.\n");
			printf("저장 하시겠습니까 ? 1. 네 \t 2. 아니오 :");
			input = inputInt(1, 2);
			if (input == 1)
			{
				FILE* file = fopen("학생저장목록파일.txt", "wt");
				if (file != NULL)
				{
					for (int i = 0; i < count; i++)
					{
						fprintf(file,"%s\t",student[i].name);
						fprintf(file, "%d\t", student[i].Kor);
						fprintf(file, "%d\t", student[i].Eng);
						fprintf(file, "%d\t", student[i].Math);
						fprintf(file, "%f\t", student[i].Avg);
						fprintf(file, "\n");

					}
					printf("저장이 성공적으로 완료 됬습니다\n");
					fclose(file);
				}
				else
				{
					printf("파일 저장에 실패 했습니다.");
				}
			}
			system("pause");
			break;
		}
	}
	return 0;
}
728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :