버스 시간표 프로그램 (파일입출력) 2
title: “버스 시간표 프로그램 (파일입출력) 2” categories:
-
C
#버스 시간표 프로그램 (파일입출력) 2 : 네이버 블로그
저번에는 case2까지 설명했으니 이번엔 끝까지 설명하겠다.
사실 뒤는 쉬운 소스이다. 그렇지만 만들었으니 설명은 해야하지 않겠는가
일단 소스를 보자
#include
#include
#include
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;