2022-03-12-C-Chap13-문제32
자동차 관리 프로그램
여러 자동차의 정보를 입력 받고 이 리스트를 출력 및 수정할 수 있는, 자동차 관리 프로그램 내지 플랫폼을 개발하고자 한다! 다음 조건에 맞추어 결과화면과 같이 출력이 되도록 프로그램을 작성하십시오.
조건1
- 자동차 정보를 담고있는 구조체를 다음과 같이 정의한다.(struct 및 typedef 필수)
struct datetype{
int year;
int month;
};
struct car{
struct datetype release;
char model[STRING_SIZE];
char maker[STRING_SIZE];
int value;
double mileage;
};
typedef struct car CAR;
- 프로그램을 처음 실행시키면 [메뉴]가 나오며, 이에 각각 ‘신규입력’, ‘리스트’, ‘종료’를 번호로 선택할 수 있게끔 한다.
- ‘신규입력’을 선택 시, ‘모델명’, ‘제조사’, ‘가격(만원)’, ‘연비(km/l)’, ‘출시일(yyyy mm)’을 입력 받아 자동차 정보 구조체 배열 변수에 저장한다.
ex)
CAR cars[size];
- ‘리스트’를 선택 시, 지금까지 입력(저장)했던 자동차 정보를 순차적으로 출력한다.
- ‘종료’ 선택 시 ‘종료합니다’라는 문구가 출력되며 프로그림이 종료된다.
조건2
- [메뉴]에서 ‘리스트’를 선택 시, 내용 출력 후 [메뉴]로 바로 돌아가지 않고, 별도로 ‘정보수정’, ‘조건검색’, ‘메뉴’를 변호로 선택할 수 있게끔 출력시키도록 한다.
- 위 서브메뉴는 출력된 ‘리스트’ 내용 중에서 어떤 정보를 수정하거나 조건을 주고 검색한 내용만을 보기 위함이다.
- ‘정보수정’을 선택 시, 수정할 자동차 정보 번호(자동차 정보 구조체(CAR) 배열 변수의 n번째 배열)를 입력 받은 후, 해당 배열 구조체에 입력되어 있는 정보를 순차적으로 보여주고, 새로이 입력 받아 각 멤버변수에 저장한다.
- ‘조건검색’을 선택 시, ‘가격대(MIN MAX)’, ‘연비(MAX)’, ‘출시연도(yyyy)’를 각각 입력 받는다. 이 때, MIN은 검색하고자 하는 값의 최소를 말하고, MAX는 그 값의 최대를 말한다.
Source
#include<stdio.h>
#define STRING_SIZE 30
#define SIZE 10
struct datetype {
int year;
int month;
};
struct car {
struct datetype release;
char model[STRING_SIZE];
char maker[STRING_SIZE];
int value;
double mileage;
};
typedef struct car CAR;
int main(void) {
CAR cars[SIZE];
int index = 0;
int input1 = 0;
int input2 = 0;
int input3 = 0;
int input_value1 = 0;
int input_value2 = 0;
double input_mileage = 0;
int input_release_year = 0;
printf("[자동차 관리 프로그램]\n\n");
while (1) {
printf("[메뉴]\n");
printf("1) 신규입력\t2) 리스트\t3) 종료\n");
printf("선택 > ");
scanf("%d", &input1);
if (input1 == 1) {
printf("[신규입력]\n\n");
printf("모델명 > ");
scanf("%s", cars[index].model);
printf("제조사 > ");
scanf("%s", cars[index].maker);
printf("가격(만원) > ");
scanf("%d", &cars[index].value);
printf("연비 > ");
scanf("%lf", &cars[index].mileage);
printf("출시일 > ");
scanf("%d %d", &cars[index].release.year, &cars[index].release.month);
index++;
}
else if (input1 == 2) {
printf("[리스트]\n");
printf("======================================================\n");
for (int i = 0; i < index; i++) {
printf("No.%d\t모델명: %s\t제조사: %s\t가격: %d\t연비: %lf (km/l)\t출시일: %d년 %d월\n"
, i, cars[i].model, cars[i].maker, cars[i].value, cars[i].mileage, cars[i].release.year, cars[i].release.month);
}
printf("======================================================\n");
printf("1) 정보수정\t2) 조건검색\t3) 메뉴\n\n");
printf("선택 > ");
scanf("%d", &input2);
if (input2 == 1) {
printf("\n[정보수정]\n");
printf("수정할 자동차 정보 번호(No.) > ");
scanf("%d", &input3);
printf("\n모델명: %s -> ", cars[input3].model);
scanf("%s", cars[input3].model);
printf("\n제조사: %s -> ", cars[input3].maker);
scanf("%s", cars[input3].maker);
printf("\n가격(만원): %d -> ", cars[input3].value);
scanf("%d", &cars[input3].value);
printf("\n연비: %lf -> ", cars[input3].mileage);
scanf("%lf", &cars[input3].mileage);
printf("\n출시일(yyyy mm): %d %d -> ", cars[input3].release.year, cars[input3].release.month);
scanf("%d %d", &cars[input3].release.year, &cars[input3].release.month);
}
else if (input2 == 2) {
printf("\n[조건검색]\n");
printf("가격대(MIN MAX) > ");
scanf("%d %d", &input_value1, &input_value2);
printf("연비(MAX) > ");
scanf("%lf", &input_mileage);
printf("출시년도(yyyy) > ");
scanf("%d", &input_release_year);
printf("======================================================\n");
for (int i = 0; i < index; i++) {
if (input_value1 <= cars[i].value && cars[i].value < input_value2) {
if (cars[i].mileage <= input_mileage) {
if (input_release_year == cars[i].release.year) {
printf("No.%d\t모델명: %s\t제조사: %s\t가격: %d\t연비: %lf (km/l)\t출시일: %d년 %d월\n"
, i, cars[i].model, cars[i].maker, cars[i].value, cars[i].mileage, cars[i].release.year, cars[i].release.month);
}
}
}
}
printf("======================================================\n");
}
}
else if (input1 == 3) {
index = 0;
break;
}
}
return 0;
}