2019-01-31

Hyeonu_Chun·2021년 6월 21일
0

HW9

#include <iostream>
#include <time.h>
#pragma warning (disable : 4996)
using namespace std;

struct Goods {
	char item[50];
	int price;
	int year;
	int mon;
	int day;
	int discount;
};

void input(Goods &s);
void selling_price(Goods &s);
void prn(const Goods &s);
int tot_days(int y, int m, int d);
int leap_check(int year);
int errorCheck(int *num);

int main() {

	struct Goods s;
	input(s);
	selling_price(s);
	if (s.discount == -1) return -1;
	prn(s);
	return 0;
}

void selling_price(Goods &s) {
	time_t timer;
	struct tm *cur;
	timer = time(NULL);
	cur = localtime(&timer);

	int cur_year = cur->tm_year + 1900; //현재 해
	int cur_mon = cur->tm_mon + 1; // 현재 달
	int cur_day = cur->tm_mday; // 현재 날짜

	int res = tot_days(s.year, s.mon, s.day) - tot_days(cur_year, cur_mon, cur_day);

	if (res > 10) {
		s.discount = 0;
	}
	else {
		if (res < 0) {
			cout << "유통기한이 지났습니다!" << endl;
			s.discount = -1;
		}
		else if (res >= 0 && res <= 3) {
			s.price /= 2;
			s.discount = 50;
		}
		else if (res >= 4 && res <= 10) {
			s.price = s.price - (s.price / 5);
			s.discount = 20;
		}
	}
	return;
}

void input(Goods &s) {
	int res;
	cout << "품목 입력 : ";
	cin >> s.item;
	cout << "정가 입력 : ";
	cin >> s.price;
	while (1) {
		cout << "유통기한 입력 : ";
		cin >> s.year >> s.mon >> s.day;
		int num[3] = { s.year,s.mon,s.day };
		res = errorCheck(num);
		if (res == 1) break;
		cout << "올바르지 못한 날짜입니다" << endl;
	}
	return;
}

void prn(const Goods &s) {


	cout << "품목 : " << s.item << endl;
	cout << "판매가 : " << s.price << endl;
	cout << "유통기한 : " << s.year << "년 " << s.mon << "월 " << s.day << "일 " << endl;
	cout << "할인율 : " << s.discount << "%" << endl;
	return;
}

int leap_check(int num) {
	if (num % 4 != 0) {
		return 0;
	}
	else {
		if (num % 100 != 0) {
			return 1;
		}
		else {
			if (num % 400 == 0) {
				return 1;
			}
			else {
				return 0;
			}
		}
	}
}

int tot_days(int y, int m, int d) {
	int sum = 0;
	int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	for (int i = 1900; i < y; i++) {
		if (leap_check(i) == 1) {
			sum += 366;
		}
		else {
			sum += 365;
		}
	}
	if (leap_check(y) == 1) {
		if (m <= 2) {
			for (int i = 0; i < (m - 1); i++) {
				sum += month[i];
			}
			sum += d;
		}
		else {
			for (int i = 0; i < (m - 1);i++) {
				sum += month[i];
			}
			sum += d + 1;
		}
	}
	else {
		for (int i = 0;i < (m - 1);i++) {
			sum += month[i];
		}
		sum += d;
	}
	return sum;
}

int errorCheck(int *num) {
	int month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (num[1] >= 1 && num[1] <= 12) {
		if (leap_check(num[0]) == 1) {
			if (num[1] == 2) {
				if (num[2] >= 1 && num[2] <= 29) return 1;
			}
			else {
				if (num[2] >= 1 && num[2] <= month[num[1] - 1]) return 1;
			}
		}
		else {
			if (num[2] >= 1 && num[2] <= month[num[1] - 1]) return 1;
		}
	}
	return 0;
}
profile
Stay hungry, stay foolish

0개의 댓글