C语言商品打折

C语言商品打折

【问题描述】超市对快要过期的食品,进行统一的打折促销,食品信息包括:食品名称,生产日期,保质期,单价,其中生产日期使用日期结构体定义。距离保质期20天到10天的打5折,距离保质期10天以内的打3折。请将输入的食品单价进行修改,输出新的食品信息。对于已经过期食品,输出:食品名称,过去天数(负数),单价(0)
【输入形式】食品名称 生产日期 保质期(天数) 单价当前日期
当输入食品名称为"#"时表示输入结束。
【输出形式】食品名称 还有几天过期 修改后单价
【样例输入】
pm 2018.1.30 30 45
mb 2018.2. 6 25 30
gz 2018.2.15 25 20
0.0.0 0 02018.2.24
【样例输出】
pm 5 13.5
mb 7 9.0
gz 16 10.0

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct Date
{
 int year, month, day;                      //年,月,日
};
struct Food_information
{
 char name[12];                             //名称
 struct Date time;                          //生产日期
 int days;                                  //保质期
 float price;                               //单价
 float final_price = 0;                     //打折后的价格
 int space_days = 0;                        //时间差(生产日期与当前日期)
 int space_time;                            //距离过期的时间
};
int main()
{
 int calculate(struct Date now, struct Food_information food);                         //函数声明,计算时间差
 struct Food_information food[36];                                                     //food数组,存放商品信息
 struct Date now;                                                                      //当前日期
 int i, n;
 char *str = "#";
 for (i = 0, n = 0;; i++, n++)
 {
  scanf_s("%s %d.%d.%d %d %f", food[i].name, 12, &food[i].time.year, &food[i].time.month, &food[i].time.day, &food[i].days, &food[i].price);
  if (strcmp(food[i].name, str) == 0)
   break;
 }
 /*i = n = 0;
 do
 {
  scanf_s("%s %d.%d.%d %d %f", food[i].name, 12, &food[i].time.year, &food[i].time.month, &food[i].time.day, &food[i].days, &food[i].price);
  i++;
  n++;
 } while (strcmp(food[i].name, str) != 0);*/
 scanf_s("%d.%d.%d", &now.year, &now.month, &now.day);
 for (i = 0; i < n; i++)
 {
  food[i].space_days = calculate(now,food[i]);
  food[i].space_time = food[i].days - food[i].space_days;                         //距离过期的时间(可能是负数)
  if (food[i].space_time >= 10 && food[i].space_time <= 20)
   food[i].final_price = food[i].price*0.5;
  if (food[i].space_time >= 0 && food[i].space_time < 10)
   food[i].final_price = food[i].price*0.3;
  if (food[i].space_time < 0)
   food[i].final_price = 0;
  //printf("打折后的价格:%.1f \n", food[i].final_price);
 }
 for (i = 0; i < n; i++)
 {
  printf("%s %d %.1f \n", food[i].name, food[i].space_time, food[i].final_price);
 }
 system("pause");
 return 0;
}
int calculate(struct Date now, struct Food_information food)                            //计算时间差(生产日期与当前日期)
{
 int Days(int y, int m, int d);                                                      //函数声明,计算该天在该年中的天数
 int z, m, n;
 m = Days(now.year, now.month, now.day);
 n = Days(food.time.year, food.time.month, food.time.day);
 z = m - n;
 //printf("生产日期与当天的天数差:%d天 \n", z);
 return z;
}
int Days(int y, int m, int d)                                                           //计算该天在该年中的天数
{
 int z, n;
 switch (m)
 {
 case 1:n = d; break;
 case 2:n = 31 + d; break;
 case 3:n = 59 + d; break;
 case 4:n = 90 + d; break;
 case 5:n = 120 + d; break;
 case 6:n = 151 + d; break;
 case 7:n = 181 + d; break;
 case 8:n = 212 + d; break;
 case 9:n = 243 + d; break;
 case 10:n = 273 + d; break;
 case 11:n = 304 + d; break;
 case 12:n = 334 + d; break;
 default:printf("Input error(month)!\n");
 }
 if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) && n > 2)
  z = n + 1;
 else
  z = n;
 //printf("%d年%d月%d日是该年的%d天 \n", y, m, d, z);
 return z;
}

运行结果:
在这里插入图片描述
说明:
1.程序在计算间隔天数是需保证是同一年,否则会出错;可自行添加相关语句以完善程序功能。
2.简述思路:
判断当前日期与生产日期间的间隔天数,与保质期对比,
若间隔<保质期,则未过期;
若间隔>保质期,则已过期。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值