#include
#include
#include
typedef struct{
int year;
int month;
}time;
typedef struct node{
int num;
char name[20];
time jin;
time bao;
}node, huowu[20];
int visite(FILE* ft, node huowu[20])// 从文件中将信息读出并保存在数组中
{
int i = 0;
if ((ft = fopen("货物信息.txt", "r")) == NULL)
{
printf("\nCan't open!");
exit(0);
}
while (!feof(ft)) {
fscanf(ft, "%s%d%d%d%d%d", huowu[i].name, &huowu[i].num, &huowu[i].jin.year, &huowu[
i].jin.month, &huowu[i].bao.year, &huowu[i].bao.month);
printf("\n");
printf(" 名称:%-10s 数量: %-5d 生产日期: %d 年 %d 月 截止日期: % d年 %d 月\n", huowu[i].name, huowu[i].num, huowu[i].jin.year, huowu[i].jin.month, huowu[i].bao.year, huowu[i].bao.month);
i++;
}
if (fclose(ft))
{
printf("\nCan't close!");
exit(0);
return i;
}
}
void kuochong(FILE* ft)//追加
{
int a, i;
node kuochong[20];
if ((ft = fopen("货物信息.txt", "a+")) = NULL)
{
printf("\nCan't open!");
exit(0);
}
printf("\n扩充的商品数目: ");
scanf_s("%d", &a);
if (a > 15)
printf("n商品过多,无法保存!");
fflush(stdin);
for (i = 0; i < a; i++)
printf("n扩充的商品名称: ");
scanf_s("%s", kuochong[i].name);
printf("n扩充的商品数量: ");
scanf_s("%d", &kuochong[i].num);
printf("n该商品的生产日期:");
scanf_s("%d%d", &kuochong[i].jin.year, &kuochong[i].jin.month);
printf("n该商品的截止时间:");
scanf_s("%d%d", &kuochong[i].bao.year, &kuochong[i].bao.month);
fflush(stdin);
for (i = 0; i < a; i++)
{
fprintf(ft, "n%s %d %d %d %d %d", kuochong[i].name, kuochong[i].num, kuochong[i].jin.year, kuochong[i].jin.month, kuochong[i].bao.year, kuochong[i].bao.month);
}
if (fclose(ft))
{
printf("\nCan't close!");
exit(0);
}
}
void shanchu(node huowu[20], int n, FILE* ft)//删除
{
int t, j, i;
char s[20];
printf("\n要删除的货物名称: ");
scanf_s("%s", s);
fflush(stdin);
for (i = 0; i < n; i++)
if (!strcmp(s, huowu[i].name))
t = i;
for (j = t; j < n;j++)
huowu[j] = huowu[j + 1];
if ((ft = fopen("货物信息.txt", "w+")) == NULL)
{
printf("\nCan't open!");
exit(0);
}
for (i = 0; i < n - 1; i++)
{
fprintf(ft, "\n%s %d %d %d %d %d", huowu[i].name, huowu[i].num, huowu[i].jin.year, huowu[i].jin.month, huowu[i].bao.year, huowu[i].bao.month);
}
if (fclose(ft))
{
printf("\ncan't close");
exit(0);
}
}
void chaxun(FILE* ft, node huowu[20], int n)//查询
{
char s[20];
int i;
printf("n要查询的货物名称:");
scanf_s("%s", s);
for (i = 0; i < n; i++)
if (!strcmp(s, huowu[i].name))
printf("n 名称:%- 10s数量:%-5d生产日期:%d年%d月 截止日期 : % d 年 % d 月n",huowu[i].name,huowu[i].num,huowu[i].jin.year,huowu[i].jin.month,huowu[i].bao.year,huowu[i].bao.month);
}
//判断
int panduan(time g, time f)
{
if (g.year > f.year)
return 1;
else if (g.month > f.month)
return 1;
return 0;
}
void paixu(node huowu[20], int n)
{
int a, i, j;
node t;
printf("\n 1 数量(从大到小) 2 生产日期 3 截止日期\n");
printf("\n请选择排序的方式: ");
scanf_s("%d", &a);
switch (a)
{
case 1:
for (i = 0; i < n - 1; i++)
for (j = n - 1; j >= i + 1; j--)
if (huowu[j].num < huowu[j - 1].num)
{
t = huowu[j];
huowu[j] = huowu[j - 1];
huowu[j - 1] = t;
}
for (i = 0; i < n; i++)
printf("\n 名称:%-10s数量:%-5d生产日期:%d年%d月 截止日期 : % d 年 % d 月\n", huowu[i].name, huowu[i].num, huowu[i].jin.year, huowu[i].jin.month, huowu[i].bao.year, huowu[i].bao.month);
break;
case 2:
for (i = 0; i < n - 1; i++)
for (j = n - 1; j >= i + 1; j--)
if (panduan(huowu[j - 1].jin, huowu[j].jin))
t = huowu[j];
huowu[j] = huowu[j - 1];
huowu[j - 1] = t;
for (i = 0; i < n; i++)
printf("n 名称:%-10s数量:%-5d生产日期:%d年%d月 截止日期 : % d 年 % d 月 \n", huowu[i].name, huowu[i].num, huowu[i].jin.year, huowu[i].jin.month, huowu[i].bao.year, huowu[i].bao.month);
break;
case 3:
for (i = 0; i < n - 1; i++)
for (j = n - 1; j >= i + 1; j--)
if (panduan(huowu[j - 1].bao, huowu[j].bao))
t = huowu[j];
huowu[j] = huowu[j - 1];
huowu[j - 1] = t;
for (i = 0; i < n; i++)
printf("\n 名称:%-10s数量:%-5d生产日期:%d年%d月 截止日期 : % d 年 % d 月 \n", huowu[i].name, huowu[i].num, huowu[i].jin.year, huowu[i].jin.month, huowu[i].bao.year, huowu[i].bao.month);
break;
}
}
int main()
{
FILE* ft;
int t;
int huowushu;
char ch;
node huowu[20];
printf("\n");
printf(" ***** 欢 迎 进 入 货 物 管 理 系 统***** ");
printf("\n");
printf("\n--------------------------------------------------------------------------------In");
printf(" 1 扩 充 2 查 看 3 删 除 4 排 序 5 查 询 6 退出\n");
printf("\n--------------------------------------------------------------------------------In");
printf("你要进行的操作…");
scanf_s("%d", &t);
fflush(stdin);
switch (t)
{
case 1:
kuochong(ft);
fflush(stdin);
break;
case 2:
huowushu = visite(ft, huowu);
fflush(stdin);
break;
case 3:
shanchu(huowu, huowushu, ft);
fflush(stdin);
break;
case 4:
paixu(huowu, huowushu);
fflush(stdin);
break;
case 5:
chaxun(ft, huowu, huowushu);
break;
case 6:
printf("In谢谢惠顾!\n");
break;
}
}
各函数的ft参数传了个寂寞。还不如传文件名更方便。
kuochong里fopen后面少了个=