Menu



Manage

Study_C > 14-reserv.c Lines 244 | 5.8 KB
다운로드

                        #define _CRT_SECURE_NO_WARNINGS		// scanf오류 제거를 위한 코드
#include "reserv.h"		// 제작 헤더파일 불러오기
#include <stdio.h>		// 표준 입출력 함수 라이브러리 추가
#include <string.h>		// 문자열 비교, 복사를 위한 함수 라이브러리 추가
// #include <stdlib.h>	malloc 사용 안함

int menu(int a)		// 메뉴 함수
/*****************************************************************

 *  본 menu 함수는 메뉴를 보여주고 다음 과정을 가기 위한 함수.

 *

 * 함수 입력 내용 : 없음

 * 함수 출력 내용 :	switch case로 쓸 a를 숫자로 산출

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	printf("\n========================================\n");
	print("1 - 예약 하기\n");
	print("2 - 예약 해지\n");
	print("3 - 예약 확인(개인)\n");
	print("4 - 예약 확인(전체)\n");
	print("5 - 프로그램 종료\n");
	printf("\n========================================\n");
	printf("이용할 항목의 번호를 입력해주세요 :");
	scanf("%d%*c", &a);
	return a;
}

void booking(Book s[])		// 예약 함수
/*****************************************************************

 *  본 booking 함수는 예약을 하기 위한 함수.

 *

 * 함수 입력 내용 : 없음

 * 함수 출력 내용 :	배열에 입력받은 내용을 저장하는 함수

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	char z = "";
	int num = 0;
	int i = 0;
	
	printf("\n 비어있는 객실입니다.");
	for (i = 0; i < SIZE; i++) {
		if (s[i].room_num != i+101) {
			if (i < 9)
				printf("10%d호 ", i + 1);
			else
				printf("110호");
		}
		else
			printf("");
	}
	printf("\n");

	printf("예약하시겠습니까? y / n : ");
	scanf("%s%*c", stript(z));
	if (z != "n") {
		printf("초기 화면으로 돌아갑니다.\n");
		return;
	}

	Book data;

	data = r_get();
	for (int i = 0; i < SIZE; i++) {
		if (strcmp(data.room_num, s[i].room_num) == 0) {
			printf("이미 예약자가 존재하는 방 입니다. 처음 화면으로 돌아갑니다.");
			return;
		}
	}

	num = data.room_num - 101;
	s[num].room_num = data.room_num;
	strcpy(s[num].name, data.name);
	strcpy(s[num].monum, data.monum);
	strcpy(s[num].mail, data.mail);
}

Book r_get()		// 입력을 구조체로 반환하는 함수
/*****************************************************************

 *  본 r_get 함수는 입력받은 구조체를 전달하기 위한 함수.

 *

 * 함수 입력 내용 : 없음

 * 함수 출력 내용 : 이용자로부터 받은 data 구조체를 넘김

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	Book data;
void shutdown(FILE *fp);

	getchar(); //줄바꿈 문자 없애기
	printf("원하시는 호실을 입력하세요 : "); scanf("%d%*c", &data.room_num);
	printf("이름을 입력하세요 : "); gets(data.name);
	printf(""); gets(data.monum);
	printf(""); gets(data.mail);
	return data;
}

void cancle(Book s[])		// 예약 취소 함수 
/*****************************************************************

 *  본 cancle 함수는 예약을 취소 하기 위한 함수.

 *

 * 함수 입력 내용 : 없음

 * 함수 출력 내용 : 지정된 이름과 같은 이름을 갖는 s의 i번째 배열 요소 초기화

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	int i = 0;
	char name[30] = {0};
	char a = 'y';
	char c = "";
	printf("예약자의 성함을 입력해주세요!");
	getchar();
	gets(name);
	
	for (int i = 0; i < SIZE; i++) {
		if (strcmp(name, s[i].name) == 0) {
			printf("%d 호실 예약을 해지하시겠습니까?", i+101);
			printf("y/n\n");
			scanf("%s", &a);
			if (a != "y")
				printf("지우지 않습니다.\n");
			else {
				s[i].room_num = 0;
				strcpy(s[i].name, c);
				strcpy(s[i].monum, c);
				strcpy(s[i].mail, c);
			}
		}
	}
	printf("요청된 작업을 완료하였습니다.\n");
}

void find(Book s[])		// 예약자 검색 함수
/*****************************************************************

 *  본 find 함수는 예약자 이름으로 검색 하기 위한 함수.

 *

 * 함수 입력 내용 : 없음

 * 함수 출력 내용 :	name과 같은 s[i].name을 갖는 s[i]의 내용 출력

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	int i = 0;
	char name[30] = { 0 };
	printf("예약자의 성함을 입력해주세요!");
	getchar();
	gets(name);

	for (int i = 0; i < SIZE; i++) {
		if (strcmp(name, s[i].name) == 0) {
			printf("- 예약 내용\n");
			printf("  - 객실 번호 : %d\n", s[i].room_num);
			printf("  - 성 명 : %s\n", s[i].name);
			printf("  - 연락처 : %s\n", s[i].monum);
			printf("  - 메일 : %s\n", s[i].mail);
		}
	}
	return;
}

void find_all(Book s[])		// 예약자 전체보기 함수
/*****************************************************************

 *  본 find_all 함수는 전체 예약자 내역을 보기 위한 함수.

 *

 * 함수 입력 내용 : 없음

 * 함수 출력 내용 : s[0~9]까지의 내용 출력

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	int i = 0;
	for (int i = 0; i < SIZE; i++) {
		if (s[i].room_num == i + 101) {
			printf("- 예약 내용\n");
			printf("  - 객실 번호 : %d\n", s[i].room_num);
			printf("  - 성 명 : %s\n", s[i].name);
			printf("  - 연락처 : %s\n", s[i].monum);
			printf("  - 메일 : %s\n", s[i].mail);
		}
	}
	return;
}

void shutdown(FILE *fp, Book s[])		// 종료 함수
/*****************************************************************

 *  본 shutdown 함수는 s[]의 내용을 파일로 저장 하기 위한 함수.

 *

 * 함수 입력 내용 : FILE *fp

 * 함수 출력 내용 : reservation.txt로 저장

 * 변경 이력 : 해당 사항 없음

 ********************************************************************/
{
	int i = 0;
	fclose(fp);
	if ((fp = fopen("reservation.txt", "w")) == NULL) {
		fprintf(stderr, "저장에 실패하였습니다. 프로그램을 종료합니다.\n");
		exit(1);
	}
	for (i = 0; i < SIZE; i++) {
		fprintf(fp, "%d %s %s %s\n", s[i].room_num, s[i].name, s[i].monum, s[i].room_num);
	}
	fclose(fp);
	return;
}