输入一个日期与超市系统中已经录入的商品生产日期作比较,找出过期商品,并输出过期商品的信息
不知道你这个问题是否已经解决, 如果还没有解决的话:#include <stdio.h>
void MonthDay(int year, int yearDay, int *pMonth, int *pDay);
int dayTab[2][13] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, yearDay:");
scanf("%d,%d", &year, &yearDay);
MonthDay(year, yearDay, &month, &day);
printf("month = %d, day = %d\n", month, day);
return 0;
}
/* 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 */
void MonthDay(int year, int yearDay, int *pMonth, int *pDay)
{
int i, leap;
leap = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
for (i = 1; yearDay > dayTab[leap][i]; i++)
{
yearDay = yearDay - dayTab[leap][i];
}
*pMonth = i; /* 将计算出的月份值赋值给pMonth所指向的变量 */
*pDay = yearDay; /* 将计算出的日号赋值给pDay所指向的变量 */
}
问题解答:
实现输入一个日期并与超市系统中已经录入的商品生产日期进行比较,以找出过期商品并输出过期商品的信息,可以按照以下步骤进行操作:
1.定义一个结构体来存储商品信息,包括商品名、生产日期和保质期等信息。
2.定义一个存储超市商品信息的数组,里面存储多个商品的具体信息。
3.输入一个商品的生产日期,可以用字符数组来实现,例如:
char date[20]; printf("请输入商品的生产日期:"); gets(date);
4.将输入的字符类型的日期转换成可比较的日期类型,以便于后续比较。可以采用时间戳(time_t)来实现,例如:
time_t prod_date = strtotime(date);
5.遍历超市商品信息的数组,比较每个商品的生产日期和保质期和输入的商品日期的关系,判断出是否过期,如过期则输出商品的信息。
示例代码如下:
#include <stdio.h>
#include <string.h>
#include <time.h>
#define MAX_GOODS 100 //最大商品数
#define MAX_NAME 20 //商品名最大长度
//创建一个结构体,用来存储商品的信息
typedef struct {
char name[MAX_NAME];
time_t prod_date;
int valid_period;
} Goods;
int main(){
Goods goodsList[MAX_GOODS]; //定义商品信息数组
int goods_num; //记录商品数量
char date[20]; //输入的商品生产日期
//获取商品的信息,将商品的信息存放到数组中
printf("请输入商品的数量:");
scanf("%d", &goods_num);
for(int i=0; i<goods_num; i++){
printf("请输入第%d个商品的信息:\n", i+1);
printf("商品名:");
scanf("%s", goodsList[i].name);
printf("生产日期:");
scanf("%s", date);
goodsList[i].prod_date = strtotime(date);
printf("保质期(天):");
scanf("%d", &goodsList[i].valid_period);
}
//输入一个商品的生产日期
printf("请输入商品的生产日期:");
gets(date);
time_t input_date = strtotime(date);
//遍历商品信息数组,比较每个商品的生产日期和保质期和输入的商品日期的关系,并输出符合条件的商品
printf("以下商品已经过期:\n");
for(int i=0; i< goods_num; i++){
//计算商品的过期日期
time_t expire_date = goodsList[i].prod_date + goodsList[i].valid_period * 24 * 60 * 60;
//比较商品的过期日期和输入的日期
if(expire_date < input_date){
printf("%s\n", goodsList[i].name);
}
}
return 0;
}
以下是一个简单的 C 代码示例,用于比较输入的日期和商品生产日期,并找出过期商品:
c
Copy
#include <stdio.h>
#include <string.h>
struct Product {
char name[50];
char production_date[11]; // 格式为 yyyy-mm-dd
};
int compare_dates(char date1[], char date2[]) {
// 比较两个日期的大小,如果 date1 > date2,返回 1;如果 date1 == date2,返回 0;如果 date1 < date2,返回 -1。
int year1, month1, day1, year2, month2, day2;
sscanf(date1, "%d-%d-%d", &year1, &month1, &day1);
sscanf(date2, "%d-%d-%d", &year2, &month2, &day2);
if (year1 > year2) {
return 1;
} else if (year1 < year2) {
return -1;
} else {
if (month1 > month2) {
return 1;
} else if (month1 < month2) {
return -1;
} else {
if (day1 > day2) {
return 1;
} else if (day1 < day2) {
return -1 } else {
return 0;
}
}
}
}
int main() {
int num_products;
printf("请输入超市系统中已经录入的商品数量:");
scanf("%d", &num_products);
struct Product products[num_products];
for (int i = 0; i < num_products; i++) {
printf("请输入第 %d 个商品的名称和生产日期(格式为 yyyy-mm-dd):", i+1);
scanf("%s %s", products[i].name, products[i].production_date);
}
char input_date[11];
printf("请输入当前日期(格式为 yyyy-mm-dd):");
scanf("%s", input_date);
printf("以下商品已经过期:\n");
for (int i = 0; i < num_products; i++) {
if (compare_dates(products[i].production_date, input_date) < 0) {
printf("%s\n", products[i].name);
}
}
return 0;
}
在这个示例代码中,我们定义了一个结构体 Product,用于表示商品的名称和生产日期。首先,我们从用户输入中读取已经录入的商品数量以及每个商品的名称和生产日期。然后,我们从用户输入中读取当前日期,并将其与每个商品的生产日期进行比较。如果某个商品的生产日期早于当前日期,就说明它已经过期了,我们就将其名称输出到屏幕上。
在这个示例代码中,我们使用了一个 compare_dates 函数来比较两个日期的大小。该函数将两个日期字符串作为输入,然后将其解析为年、月、日三个整数值,最后比较它们的大小。如果第一个日期大于第二个日期,函数返回 1;如果两个日期相等,函数返回 0;如果第一个日期小于第二个日期,函数返回 -1。
需要注意的是,这个示例代码并没有考虑到日期格式不正确、输入数据不足、数组越界等异常情况。在实际开发中,需要对这些异常情况进行处理,以保证程序的健壮性和稳定性。