저번에는 case2까지 설명했으니 이번엔 끝까지 설명하겠다.

사실 뒤는 쉬운 소스이다. 그렇지만 만들었으니 설명은 해야하지 않겠는가

일단 소스를 보자

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int menu();
void search_bus(int list[], int n, int key);
int get_trans_time(void);
int main(void)
{
	FILE *fp = NULL;
	int list[10000] = { 0 };
	int temp[10000] = { 0 };
	int add_temp[10000] = { 0 };

	while (1)
	{
		fp = fopen("bus.txt", "a+");
		int save_size;
		for (save_size = 0; !feof(fp); save_size++)
		{
			fscanf(fp, "%d", &list[save_size]);
		}
		int SIZE = save_size - 1;
		fclose(fp);

		switch (menu())
		{
		case 1:
			printf("버스 시간 찾기\n");
			int h, m, key;
			key = get_trans_time();
			search_bus(list, SIZE, key);
			break;
		case 2:
			fp = fopen("bus.txt", "w");
			for (int i = 0; i < SIZE; i++)
			{
				temp[i] = list[i];
			}
			while (1)
			{
				printf("시간표를 입력합니다(00시00분을 입력하면 종료)\n");
				temp[SIZE] = get_trans_time();
				if (temp[SIZE] == 0) {
					printf("입력을 종료합니다\n");
					break;
				}
				SIZE++;
			}
			int least, i, j, temp_int;

			for (i = 0; i < SIZE - 1; i++)
			{
				least = i;
				for (j = i + 1; j < SIZE; j++)
					if (temp[j] < temp[least])
						least = j;
				temp_int = temp[i];
				temp[i] = temp[least];
				temp[least] = temp_int;
			}

			for (i = 0; i < SIZE; i++)
			{
				fprintf(fp, "%d\n", temp[i]);
			}
			fclose(fp);
			break;
		case 3:
			fp = fopen("bus.txt", "a+");
			for (int i = 0; i < SIZE; i++)
			{
				printf("%d시 %d 분\n", list[i] / 60, list[i] % 60);
			}
			fclose(fp);
			break;
		case 4:
			printf("버스 시간표 삭제");
			int del, del_temp, num = 0;
			del = get_trans_time();
			int del_num;
			for (del_num = 0; del_num < SIZE; del_num++)
			{
				if (del == list[del_num]) {
					num = 1;
					break;
				}
			}
			if (num == 0) {
				printf("\n일치하는 시간이 없습니다\n\n\n");
			}
			else
				list[del_num] = 0;
			for (del_num=del_num; del_num < SIZE - 1; del_num++)
			{
				list[del_num] = list[(del_num+1)];
			}
			SIZE--;
			fp = fopen("bus.txt", "w");
			for (i = 0; i < SIZE; i++)
			{
				fprintf(fp, "%d\n", list[i]);
			}
			fclose(fp);
			break;
		case 5:
			exit(1);
			break;
		default:
			break;
		}
	}
}
int menu() {
	printf("===============================================\n\n");
	printf(" 1 입력된 시간에서 가장 가까운 버스시간 보기\n");
	printf(" 2 버스 시간표 입력하기 \n");
	printf(" 3 버스 시간표 출력하기 \n");
	printf(" 4 버스 시간표 삭제하기 \n");
	printf(" 5 종료 \n\n");
	printf("===============================================\n");
	printf("선택 : ");
	int choice;
	scanf("%d", &choice);
	return choice;
}
int get_trans_time(void) {
	printf("시간을 입력하세요 :  시 분\b\b\b\b\b\b\b");
	int h, m, key;
	scanf("%d %d", &h, &m);
	return key = h * 60 + m;
}
void search_bus(int list[], int n, int key)
{
	int i = 0;
	int o_key=key;
	while (list[i] != key)
	{
		for (i = 0; i < n; i++) {
			if (key == list[i]) {
				printf("가장 가까운 버스는 %d시 %d분입니다\n\n", list[i] / 60, list[i] % 60);
				printf("대기 시간은 %d시 %d 분입니다\n", (key - o_key) / 60, (key - o_key) % 60);
				return 0;
			}
		}
		key = key + 1;
		if (key > 14400) {
			printf("시간 오류!");
			return 0;
		}
	}
}

저번 포스팅에 이어 case 3부터 시작하겠다

		case 3:
			fp = fopen("bus.txt", "a+"); //폴더 오픈!
			for (int i = 0; i < SIZE; i++)
			{
				printf("%d시 %d 분\n", list[i] / 60, list[i] % 60); //리스트를 사이즈만큼 출력!
			}
			fclose(fp); //폴더닫기!
			break;

지금 생각하니깐 list는 선택하기 전에 이미 텍스트 파일에서 불러온 배열이므로

파일 안의 내용을 출력할 때는 파일을 읽어올 필요가 없다. ㅋㅋㅋㅋ 실수이니 가볍게 넘어가주자

case 4: 버스 시간표 삭제

case 4:
			printf("버스 시간표 삭제");
			int del, del_temp, num = 0;
			del = get_trans_time(); //일단 함수로 삭제할 시간을 입력받아 del에 저장한다
			int del_num;
			for (del_num = 0; del_num < SIZE; del_num++)
			{
				if (del == list[del_num]) { //리스트에 일치하는 시간이 있으면 num=1
					num = 1;
					break;
				}
			}
			if (num == 0) { //일치하는 시간이 없으면 종료시킨다
				printf("\n일치하는 시간이 없습니다\n\n\n");
			}
			else //num이 0이 아니면 실행
				list[del_num] = 0; //삭제할 부분을 0으로 만든다
			for (del_num=del_num; del_num < SIZE - 1; del_num++)
			{
				list[del_num] = list[(del_num+1)]; //del_num+1을 del_num에 넣는다(하나씩 밀어서)
			}
			SIZE--; //하나씩 밀기가 끝나면 사이즈를 1 줄인다
			fp = fopen("bus.txt", "w");
			for (i = 0; i < SIZE; i++)
			{
				fprintf(fp, "%d\n", list[i]); //파일을 열고 배열을 파일에 저장시킨다
			}
			fclose(fp);
			break;

이로서 case 4까지 끝났다

간단한 예제지만 찾아 봐줘서 정말 고맙다 ㅎㅎ

그럼 나는 마지막처럼 case 5처럼 끝내겠다

case 5:

exit(1);

break;

카테고리:

업데이트: