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;
}