#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct //商品结构体
{
char name[10]; //商品名称
int time;//进货时间
int year;//生产日期
int no;//保质期
}goodstype;
typedef struct node
{
goodstype data; //存放商品信息
struct node* next; //指向下一个节点的指针
}goodslist;
int menu_select() //菜单函数
{
char c;
do {
system("cls"); //运行前清屏
printf("商店存货管理系统\n"); //菜单选择
printf(" 1. 输入数据\n");
printf(" 2. 显示数据\n");
printf(" 3. 插入数据\n");
printf(" 4. 删除数据\n");
printf(" 5. 查找数据\n");
printf(" 6. 排序\n");
printf(" 7. 写入文件\n");
printf(" 8. 删除所有商品\n");
printf(" 0. 退出\n");
printf("\n");
printf(" 请选择(0-8):");
c = getchar(); //读入选择
} while (c < '0' || c>'8');
return(c - '0'); //返回选择
}
void delall(goodslist*& l) //删除商品的全部记录
{
FILE* fp;
goodslist* p, * q;
if ((fp = fopen("goods.dat", "wb")) == NULL)
{
printf(" 提示:不能打开商品信息文件\n");
return;
}
fclose(fp);
p = l->next;
if (p != NULL)
{
q = p->next;
while (q != NULL)
{
free(p);
p = q;
q = q->next;
}
free(p);
l->next = NULL;
}
else
printf(" 提示:不存在任何商品信息记录\n");
printf(" 提示:商品信息删除完毕\n");
printf("\t\t\t");
system("pause");
}
void readfile(goodslist*& l) //读goods.dat文件建立商品信息单链表l
{
FILE* fp;
goodstype goods;
goodslist* p, * r;
int n = 0;
l = (goodslist*)malloc(sizeof(goodslist));
r = l;
if ((fp = fopen("goods.dat", "rb")) == NULL)
{
if ((fp = fopen("goods.dat", "wb")) == NULL)
printf(" 提示:不能创建goods.dat文件\n");
printf("\t\t\t");
system("pause");
}
else
{
while (fread(&goods, sizeof(goodstype), 1, fp) == 1)
{
p = (goodslist*)malloc(sizeof(goodslist));
p->data = goods;
r->next = p;
r = p;
n++;
}
}
r->next = NULL;
printf(" 提示:商品信息单链表l建立完毕,有%d个记录\n", n);
fclose(fp);
printf("\t\t\t");
system("pause");
}
void savefile(goodslist* l) //将商品信息单链表存入数据文件
{
goodslist* p = l->next, * q;
FILE* fp;
if ((fp = fopen("goods.dat", "wb")) == NULL)
{
printf(" 提示:不能创建文件goods.dat\n");
printf("\t\t\t");
system("pause");
return;
}
while (p != NULL)
{
fwrite(&p->data, sizeof(goodstype), 1, fp);
p = p->next;
}
fclose(fp);
p = l;
q = p->next;
while (q != NULL)
{
free(p);
p = q;
q = q->next;
}
free(p);
printf(" 提示:所有商品信息记录成功写入到goods.dat文件中\n");
printf("\t\t\t");
system("pause");
}
void inputgoods(goodslist*& l) //插入一条商品信息记录
{
char x[10];
goodslist* p;
p = (goodslist*)malloc(sizeof(goodslist));
printf(" 商品名称:"); //交互输入
scanf_s("%s", &p->data.name);
printf(" 进货时间(例20070201):");
scanf_s("%d", &p->data.time);
printf(" 生产日期(例20070201):");
scanf_s("%d", &p->data.year);
printf(" 保质期(年):");
scanf_s("%d", &p->data.no);
//gets(x); //清除多余的输入
p->next = l->next;
l->next = p;
printf("商品信息插入成功!\n");
printf("\t\t\t");
system("pause");
}
int inputall(goodslist*& l, int n) //最初输入若干条商品信息记录
{
int i = 0;
goodslist* p;
char sign, x[10];
while (sign != 'n' && sign != 'N')
{
p = (goodslist*)malloc(sizeof(goodslist));
printf(" 商品名称:"); //交互输入
scanf_s("%s", &p->data.name);
printf(" 进货时间(例20070201):");
scanf_s("%d", &p->data.time);
printf(" 生产日期(例20070201):");
scanf_s("%d", &p->data.year);
printf(" t保质期(年):");
scanf_s("%d", &p->data.no);
//gets(x); //清除多余的输入
p->next = l->next;
l->next = p;
printf(" 继续输入?(Y/N)");
scanf_s("%c", &sign); //输入判断
i++;
}
printf(" 商品信息输入成功!\n");
printf("\t\t\t");
system("pause");
return(n + i);
}
void sorttime(goodslist*& l) //采用直接插入法对单链表l按进货时间递增有序排序
{
goodslist* p, * pre, * q;
p = l->next->next;
if (p != NULL)
{
l->next->next = NULL;
while (p != NULL)
{
q = p->next;
pre = l;
while (pre->next != NULL && pre->next->data.time < p->data.time)
{
pre = pre->next;
}
while (pre->next != NULL && pre->next->data.time == p->data.time &&
(pre->next->data.year + (pre->next->data.no) * 10000) < (p->data.year + (p->data.no) * 10000))
{
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = q;
}
}
printf(" 提示:按进货时间递增排序完毕\n");
printf("\t\t\t");
system("pause");
}
/*int locategoods(goodslist *l,char a[]) //按商品名称查询返回商品位置
{
int i=1;
goodslist *p=l->next;
printf(" 请输入商品名称:");
scanf("%s",a);
while(p!=NULL&&strcmp(p->data.name,a)!=0)
{
p=p->next;
i++;
}
if(p==NULL)
return (0);
else
return(i);
}*/
void onlydisplay(goodslist* l, char a[]) //根据商品名称显示商品所有信息
{
int i = 1;
goodslist* p = l->next;
printf(" 请输入商品名称:");
scanf_s("%s", a);
while (p != NULL && strcmp(p->data.name, a) != 0)
{
p = p->next;
i++;
}
if (p == NULL)
printf("不存在该商品!\n ");
else
{
printf(" 名称 进货时间 生产日期 保质期\n");
printf(" --------------------------------------------------\n");
printf(" >> %s %d %d %d\n", p->data.name, p->data.time, p->data.year, p->data.no);
printf(" --------------------------------------------------\n");
}
printf("\t\t\t");
system("pause");
}
void deletegoods(goodslist* l, char a[]) //根据商品名称删除商品所有信息
{
int i = 1;
int j = 0;
goodslist* q = l, * s;
goodslist* p = l->next;
printf(" 请输入要删除的商品名称:");
scanf_s("%s", a);
while (p != NULL && strcmp(p->data.name, a) != 0)
{
p = p->next;
i++;
}
if (p == NULL)
printf("不存在该商品!\n");
else
{
while (j < i - 1 && q != NULL)
{
j++;
q = q->next;
}
if (q == NULL)
printf("不存在该商品!\n");
else
{
s = q->next;
if (s == NULL)
printf("不存在该商品!\n");
q->next = s->next;
free(s);
printf("商品删除成功!\n");
}
printf("\t\t\t");
system("pause");
}
/*if(p==NULL)
printf("不存在该商品!\n ");
else
{
printf(" 名称 进货时间 生产日期 保质期\n");
printf(" --------------------------------------------------\n");
printf(" >> %s %d %d %d\n",p->data.name,p->data.time,p->data.year,p->data.no);
printf(" --------------------------------------------------\n");
}*/
}
void display(goodslist* l) //输出所有商品信息
{
goodslist* p = l->next;
if (p == NULL)
printf(" 提示:没有任何商品信息记录\n");
else
{
printf(" 名称 进货时间 生产日期 保质期\n");
printf(" --------------------------------------------------\n");
while (p != NULL)
{
printf(" >> %s %d %d %d\n", p->data.name, p->data.time, p->data.year, p->data.no);
p = p->next;
}
printf(" --------------------------------------------------\n");
}
printf("\t\t\t");
system("pause");
}
void main()
{
goodslist* l;
char a[10];
printf("由goods.dat文件建立商品信息单链表l\n");
readfile(l);
int n = 0;
for (;;)
{
switch (menu_select()) //选择判断
{
case 1:
printf("输入最初商品\n"); //输入若干条记录
n = inputall(l, n);
break;
case 2:
display(l);
break;
case 3:inputgoods(l);
break;
case 4:deletegoods(l, a);
break;
case 5:onlydisplay(l, a);
break;
case 6: sorttime(l);
break;
case 7: savefile(l);
break;
case 8:delall(l);
break;
case 0:
printf("\t\t\t结束退出!\n"); //结束程序
printf("\t\t\t");
system("pause");
exit(1);
}
}
}

出现此类问题该怎么解决呢?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 赵4老师 2022-10-09 13:21关注
#pragma warning(disable:4996) //开头加这句或项目、属性、配置属性、C/C++、预处理器、预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报