#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct xinxi
{
int id;
char name[10];
char produce[10];
float price;
int number;
}; struct Product {
char mingzi[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;
scanf(date1, "%d-%d-%d", &year1, &month1, &day1);
scanf(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;
}
}
}
}
void LOOK() {
int num_products;
printf("请输入超市系统中已经录入的商品数量:");
scanf("%d", &num_products);
struct Product products[10000];
for (int i = 0; i < num_products; i++) {
printf("请输入第 %d 个商品的名称和保质期(格式为 yyyy-mm-dd):", i + 1);
scanf("%s %s", products[i].mingzi, 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].mingzi);
}
}
}
void Endprogram()
{
char choice;
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t您确定要退出系统吗?\n\n\n\t\t\t如果您想退出请按'y',其它键将返回主菜单.....");
scanf(" %c",&choice);
if(choice=='Y'||choice=='y')
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢您的使用!!!");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
exit(0);
}
else
{
system("cls");
}
}
void ruku(struct xinxi a[]) //只是输入还需要创建一个文档保留,若不保留则程序结束就不在了
{
struct xinxi b[100];
FILE *fp;
int k=0,t,i=0,j,m=0;
printf(" 输入您要入库物品:请按1 ");
printf("\n") ;
scanf("%d",&j);
printf("\n");
printf(" 请按照以下格式输入:物品编号 物品名称 物品产地 物品价格 物品数量\n");
printf(" 例:1 奶粉 湖南 49.9 100\n\n");
/* for(i=0;i<j;i++)
{
scanf("%d%s%*c%s%*c%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number);
}*/
fp=fopen("C:\\store.txt","r");
while(!feof(fp))
{
fread(&b[k],sizeof(struct xinxi),1,fp);
k++;
}
fclose(fp);
fp=fopen("C:\\store.txt","a");
for(i=0;i<j;i++)
{
scanf("%d%s%*c%s%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number);
for(t=0;t<k;t++)
{
if(a[i].id==b[t].id)
{
printf("物品编号:%d在数据库中已存在,请重新输入",a[i].id);
m=2;
}
}
//printf("\nm=%d",m);
if(m==0)
{
fwrite(&a[i],sizeof(struct xinxi),1,fp);
printf("\n入库成功");
printf("\n");
}
}
getchar();
fclose(fp);
}
void liulan(struct xinxi a[])//修改后会出现神秘字符
{
int j=1;//j=0会多输入一行
FILE *fp;
fp=fopen("C:\\store.txt","r");
while(!feof(fp))
{
fread(&a[j],sizeof(struct xinxi),1,fp);
if(a[j].id!=0)
//for(j=0;j<i-1;j++)
{
printf("%d %s %s %.2f %d\n",a[j].id,a[j].name,a[j].produce,a[j].price,a[j].number);
printf("\n");
}
j++;
}
}
void chaxun(struct xinxi a[])
{
int i=0,k,flag=0,n;
char b[100];
FILE *fp;
fp=fopen("C:\\store.txt","r");
printf(" 请输入要查询商品的商品名称:");
scanf("%s",b);
printf("\n");
printf(" 物品编号 名称 产地 价格 数量\n");
while(!feof(fp))
{
fread(&a[i],sizeof(struct xinxi),1,fp);
//fread(&b[i],sizeof(struct zhigong),1,fp);
if(strcmp(a[i].name,b)==0)
{
printf(" %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
flag=1;
n=i;
}
i++;
}
fclose(fp);
}
void xiugai (struct xinxi a[])
{
int i=0,k,flag=0,n;
char b[100];
char panduan='Y';
FILE *fp;
fp=fopen("C:\\store.txt","r");
printf(" 请输入要修改信息的商品名称:");
scanf("%s",b);
printf("\n");
system("cls");
printf(" 物品编号 物品名称 物品产地 物品价格 物品数量\n");
while(!feof(fp))
{
fread(&a[i],sizeof(struct xinxi),1,fp);
//fread(&b[i],sizeof(struct zhigong),1,fp);
if(strcmp(a[i].name,b)==0)
{
printf(" %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
flag=1;
n=i;
}
i++;
}
/*printf("\n%d",i);
printf("\n");*/
fp=fopen("C:\\store.txt","w");
printf("\n");
if(flag==1)
{
do{
switch(panduan)
{case'Y':
printf("\n 1.修改物品编号\n");
printf(" 2.修改物品名称\n");
printf(" 3.修改物品产地\n");
printf(" 4.修改物品价格\n");
printf(" 5.修改物品数量\n");
printf(" 请选择要修改的信息:");
scanf("%d",&k);
if(k==1)
{
printf("\n 请选择修改后的物品编号:");
scanf("%d",&a[n].id);
}
if(k==2)
{
printf("\n 请选择修改后的物品名称:");
scanf("%s",a[n].name);
}
if(k==3)
{
printf("\n 请选择修改后的物品产地:");
scanf("%s",a[n].produce);
}
else if(k==4)
{
printf("\n 请选择修改后的物品价格:");
scanf("%f",&a[n].price);
}
else if(k==5)
{
printf("\n 请选择修改后的物品数量:");
scanf("%d",&a[n].number);
}
fp=fopen("C:\\store.txt","w");
for(k=0;k<i-1;k++)
{
fwrite(&a[k],sizeof(struct xinxi),1,fp);
}
fclose(fp);
printf(" 是否继续修改,是:Y,否:N");
}
printf("\n");
printf("------------------------------------------------------------------------------------------------------------------------");
printf("\n");
printf(" ");
scanf("%c",&panduan);
}
while(panduan!='N');
}//if的后括号
if(flag==0)
{
printf(" 查无此商品");
}
printf("\n");
}
void shanchu(struct xinxi a[])
{
int i=0,k,flag=0,n;
char b[100];
FILE *fp;
fp=fopen("C:\\store.txt","r");
printf(" 请输入要删除商品的商品名称:");
scanf("%s",b);
printf("\n");
system("cls");
printf(" 物品编号 物品名称 物品产地 物品价格 物品数量\n");
while(!feof(fp))
{
fread(&a[i],sizeof(struct xinxi),1,fp);
//fread(&b[i],sizeof(struct zhigong),1,fp);
if(strcmp(a[i].name,b)==0)
{
printf(" %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
flag=1;
n=i;
}
i++;
}
fp=fopen("C:\\store.txt","w");
for(k=0;k<i-1;k++)
{
if(k!=n)
{
fwrite(&a[k],sizeof(struct xinxi),1,fp);
}
}
fclose(fp);
printf("\n 删除成功\n\n");
}
main()
{
struct xinxi a[100];
int m,i=0;
while(m!=7)
{
printf(" 欢迎使用超市管理系统\n");
printf(" 1.新购物品入库 ");
printf(" 2.物品信息删除\n");
printf(" 3.物品信息修改 ");
printf(" 4.物品信息查询\n");
printf(" 5.物品信息浏览 ");
printf(" 8.过期商品查询\n");
printf(" 7.退出\n");
printf("\n\n");
printf(" 请输入你想要操作的编号:");
scanf("%d",&m);
printf("\n");
if(m==1)
{
ruku(a);
}
else if(m==5)
{
liulan(a);
}
else if(m==3)
{
xiugai(a);
}
else if(m==4)
{
chaxun(a);
}
else if(m==2)
{
shanchu(a);
}
else if(m==8)
{
LOOK();
}
printf("------------------------------------------------------------------------------------------------------------------------");
printf("\n");
printf("------------------------------------------------------------------------------------------------------------------------");
printf("\n");
}
printf(" 感谢使用,祝你天天开心");
return 0;
}
TechWhizKid参考GPT回答:
已修改
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct xinxi
{
int id;
char name[10];
char produce[10];
float price;
int number;
};
struct Product {
char mingzi[50];
char production_date[11]; // 格式为 yyyy-mm-dd
};
int compare_dates(char date1[], char date2[]) {
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;
}
}
}
}
void LOOK() {
int num_products;
printf("请输入超市系统中已经录入的商品数量:");
scanf("%d", &num_products);
struct Product products[10000];
for (int i = 0; i < num_products; i++) {
printf("请输入第 %d 个商品的名称和保质期(格式为 yyyy-mm-dd):", i + 1);
scanf("%s %s", products[i].mingzi, 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].mingzi);
}
}
}
void Endprogram()
{
char choice;
system("cls");
printf("\n\n\n\n\n\n\n\t\t\t您确定要退出系统吗?\n\n\n\t\t\t如果您想退出请按'y',其它键将返回主菜单.....");
scanf(" %c",&choice);
if(choice=='Y'||choice=='y')
{
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢您的使用!!!");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
exit(0);
}
else
{
system("cls");
}
}
void ruku(struct xinxi a[]) //只是输入还需要创建一个文档保留,若不保留则程序结束就不在了
{
struct xinxi b[100];
FILE *fp;
int k=0,t,i=0,j,m=0;
printf(" 输入您要入库物品:请按1 ");
printf("\n") ;
scanf("%d",&j);
printf("\n");
printf(" 请按照以下格式输入:物品编号 物品名称 物品产地 物品价格 物品数量\n");
printf(" 例:1 奶粉 湖南 49.9 100\n\n");
/* for(i=0;i<j;i++)
{
scanf("%d%s%*c%s%*c%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number);
}*/
fp=fopen("C:\\store.txt","r");
while(!feof(fp))
{
fread(&b[k],sizeof(struct xinxi),1,fp);
k++;
}
fclose(fp);
fp=fopen("C:\\store.txt","a");
for(i=0;i<j;i++)
{
scanf("%d%s%*c%s%f%d",&a[i].id,a[i].name,a[i].produce,&a[i].price,&a[i].number);
for(t=0;t<k;t++)
{
if(a[i].id==b[t].id)
{
printf("物品编号:%d在数据库中已存在,请重新输入",a[i].id);
m=2;
}
}
//printf("\nm=%d",m);
if(m==0)
{
fwrite(&a[i],sizeof(struct xinxi),1,fp);
printf("\n入库成功");
printf("\n");
}
}
getchar();
fclose(fp);
}
void liulan(struct xinxi a[])//修改后会出现神秘字符
{
int j=1;//j=0会多输入一行
FILE *fp;
fp=fopen("C:\\store.txt","r");
while(!feof(fp))
{
fread(&a[j],sizeof(struct xinxi),1,fp);
if(a[j].id!=0)
//for(j=0;j<i-1;j++)
{
printf("%d %s %s %.2f %d\n",a[j].id,a[j].name,a[j].produce,a[j].price,a[j].number);
printf("\n");
}
j++;
}
}
void chaxun(struct xinxi a[])
{
int i=0,k,flag=0,n;
char b[100];
FILE *fp;
fp=fopen("C:\\store.txt","r");
printf(" 请输入要查询商品的商品名称:");
scanf("%s",b);
printf("\n");
printf(" 物品编号 名称 产地 价格 数量\n");
while(!feof(fp))
{
fread(&a[i],sizeof(struct xinxi),1,fp);
//fread(&b[i],sizeof(struct zhigong),1,fp);
if(strcmp(a[i].name,b)==0)
{
printf(" %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
flag=1;
n=i;
}
i++;
}
fclose(fp);
}
void xiugai (struct xinxi a[])
{
int i=0,k,flag=0,n;
char b[100];
char panduan='Y';
FILE *fp;
fp=fopen("C:\\store.txt","r");
printf(" 请输入要修改信息的商品名称:");
scanf("%s",b);
printf("\n");
system("cls");
printf(" 物品编号 物品名称 物品产地 物品价格 物品数量\n");
while(!feof(fp))
{
fread(&a[i],sizeof(struct xinxi),1,fp);
//fread(&b[i],sizeof(struct zhigong),1,fp);
if(strcmp(a[i].name,b)==0)
{
printf(" %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
flag=1;
n=i;
}
i++;
}
/*printf("\n%d",i);
printf("\n");*/
fp=fopen("C:\\store.txt","w");
printf("\n");
if(flag==1)
{
do{
switch(panduan)
{case'Y':
printf("\n 1.修改物品编号\n");
printf(" 2.修改物品名称\n");
printf(" 3.修改物品产地\n");
printf(" 4.修改物品价格\n");
printf(" 5.修改物品数量\n");
printf(" 请选择要修改的信息:");
scanf("%d",&k);
if(k==1)
{
printf("\n 请选择修改后的物品编号:");
scanf("%d",&a[n].id);
}
if(k==2)
{
printf("\n 请选择修改后的物品名称:");
scanf("%s",a[n].name);
}
if(k==3)
{
printf("\n 请选择修改后的物品产地:");
scanf("%s",a[n].produce);
}
else if(k==4)
{
printf("\n 请选择修改后的物品价格:");
scanf("%f",&a[n].price);
}
else if(k==5)
{
printf("\n 请选择修改后的物品数量:");
scanf("%d",&a[n].number);
}
fp=fopen("C:\\store.txt","w");
for(k=0;k<i-1;k++)
{
fwrite(&a[k],sizeof(struct xinxi),1,fp);
}
fclose(fp);
printf(" 是否继续修改,是:Y,否:N");
}
printf("\n");
printf("------------------------------------------------------------------------------------------------------------------------");
printf("\n");
printf(" ");
scanf("%c",&panduan);
}
while(panduan!='N');
}//if的后括号
if(flag==0)
{
printf(" 查无此商品");
}
printf("\n");
}
void shanchu(struct xinxi a[])
{
int i=0,k,flag=0,n;
char b[100];
FILE *fp;
fp=fopen("C:\\store.txt","r");
printf(" 请输入要删除商品的商品名称:");
scanf("%s",b);
printf("\n");
system("cls");
printf(" 物品编号 物品名称 物品产地 物品价格 物品数量\n");
while(!feof(fp))
{
fread(&a[i],sizeof(struct xinxi),1,fp);
//fread(&b[i],sizeof(struct zhigong),1,fp);
if(strcmp(a[i].name,b)==0)
{
printf(" %d %s %s %.2f %d\n",a[i].id,a[i].name,a[i].produce,a[i].price,a[i].number);
flag=1;
n=i;
}
i++;
}
fp=fopen("C:\\store.txt","w");
for(k=0;k<i-1;k++)
{
if(k!=n)
{
fwrite(&a[k],sizeof(struct xinxi),1,fp);
}
}
fclose(fp);
printf("\n 删除成功\n\n");
}
int main() {
{
struct xinxi a[100];
int m,i=0;
while(m!=7)
{
printf(" 欢迎使用超市管理系统\n");
printf(" 1.新购物品入库 ");
printf(" 2.物品信息删除\n");
printf(" 3.物品信息修改 ");
printf(" 4.物品信息查询\n");
printf(" 5.物品信息浏览 ");
printf(" 8.过期商品查询\n");
printf(" 7.退出\n");
printf("\n\n");
printf(" 请输入你想要操作的编号:");
scanf("%d",&m);
printf("\n");
if(m==1)
{
ruku(a);
}
else if(m==5)
{
liulan(a);
}
else if(m==3)
{
xiugai(a);
}
else if(m==4)
{
chaxun(a);
}
else if(m==2)
{
shanchu(a);
}
else if(m==8)
{
LOOK();
}
printf("------------------------------------------------------------------------------------------------------------------------");
printf("\n");
printf("------------------------------------------------------------------------------------------------------------------------");
printf("\n");
}
printf(" 感谢使用,祝你天天开心");
return 0;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:为了方便弄个printfArray输出
void printfArray(int a[])
{
int i;
for (i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
putchar('\n');
}
void disorderSort(int a[])
{
int i, j, k;
for (i = 0, j = 9; i < j; i++, j--) //相遇退出循环
{
while (a[i] % 2) i++; //从左到右找偶数
while (!(a[j] % 2)) j--; //从右到左找奇数
k = a[i];
a[i] = a[j];
a[j] = k; //交换
printfArray(a);
}
}
LOOK函数输入 %s之前 和 之后 都 用 getchar() 接收一下换行符
void LOOK() {
int num_products;
printf("请输入超市系统中已经录入的商品数量:");
scanf("%d", &num_products);
getchar(); // 接收一下换行符
struct Product products[10000];
for (int i = 0; i < num_products; i++) {
printf("请输入第 %d 个商品的名称和保质期(格式为 yyyy-mm-dd):", i + 1);
scanf("%s %s", products[i].mingzi, products[i].production_date);
getchar(); // 接收一下换行符
}
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].mingzi);
}
}