要求
1.输入商品信息并保存至文件(包括商品编号、商品名称、商品型号、商品价格、商品产地、库存数量和已订购数量等,至少包括10种产品供顾客选择)。
2.使用链表实现商品的增、删、改功能,并把更新后的信息保存至文件。
3.查询商品功能,如输入商品名称、商品型号等。
4.选购流程:所选商品编号—列出对应商品的信息—要求顾客输入邮寄地址信息—确认订购,是否继续选购其它商品,列出所有选订商品,再次确认订购。
5.订购信息保存至文件。
6.每天订购统计功能,并能根据输入的数据显示低于或高于此数据的商品信息。
(这里没有计算购买所需的钱数,后续补充上)
代码
shangpin.txt文件(各字段用空格分隔)
100 哇哈哈 矿泉水 1.00 崂山 9996 4
101 农夫山泉 矿泉水 2.00 崂山 10000 0
102 可比克 零食 5.00 福建 9998 2
103 可比克2 零食 5.00 福建 9998 2
104 可比克3 零食 5.00 福建 9998 2
105 可比克 零食 5.00 福建 9998 2
106 牛肉粒 零食 32.00 内蒙古 2000 0
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义商品结构体
typedef struct _shangping
{
int bh; //编号
char name[30]; //名称
char xh[20]; //型号
float price; //价格
char chandi[10]; //产地
int kc; //库存
int ydg; //已订购数量
}ShangpinInfo;
//定义链表节点
typedef struct _stNode
{
ShangpinInfo product;
struct _stNode* next;
}LinkNode;
//保存订购信息
typedef struct _dginfo
{
int bh[20]; //商品编号
int cnt[20]; //商品订购数量
int nmb; //实际订购商品的种类数量
char addr[40]; //订购人地址
char phone[12];//订购人电话
}Dginfo;
Dginfo g_dginfo[100]; //定义全局变量保存订购信息
int g_dgNmb = 0; //定义全局变量,保存订购信息数量
//从文件中读取商品信息
LinkNode* ReadFile(const char* name)
{
LinkNode* head,*p,*t;
FILE* fp = 0;
if ((fp=fopen(name,"r"))==0)
{
printf("读取商品信息失败...\n");
return 0;
}
head = (LinkNode*)malloc(sizeof(LinkNode));
head->next = NULL;
p = head;
//读取文件
while(!feof(fp))
{
//逐行读取文件
t = (LinkNode*)malloc(sizeof(LinkNode));
t->next = NULL;
fscanf(fp,"%d %s %s %f %s %d %d\n",&t->product.bh,t->product.name,t->product.xh,&t->product.price,t->product.chandi,&t->product.kc,&t->product.ydg);
if(t->product.bh > 0) //避免读取到空行
{
p->next = t;
p = t;
}else
{
free(t); //空行,读取错误,释放空间
t = 0;
}
}
return head; //返回链表头
}
//更新商品信息文件
void UpdateFile(const char* name,LinkNode* head)
{
LinkNode*t;
FILE* fp = 0;
if