功能:
界面友好(良好的人机交互)。
1.输入商品信息并保存至文件(包括商品编号、商品名称、商品型号、商品价格、商品产地、库存数量和已订购数量等,至少包括10种产品供顾客选择)。
2.使用链表实现商品的增、删、改功能,并把更新后的信息保存至文件。
3.查询商品功能,如输入商品名称、商品型号等。
4.选购流程:所选商品编号—列出对应商品的信息—要求顾客输入邮寄地址信息—确认订购,是否继续选购其它商品,列出所有选订商品,再次确认订购。
5.订购信息保存至文件。
6.每天订购统计功能,并能根据输入的数据显示低于或高于此数据的商品信息。

求用c语言设计一个商品订购系统
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2021-12-30 12:51关注
如下:
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(head == 0) return; if ((fp=fopen(name,"w"))==0) { printf("读取商品信息失败...\n"); return ; } t = head->next; while(t) { if(t->next) fprintf(fp,"%d %s %s %.2f %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); else //最后一行不写入回车符 fprintf(fp,"%d %s %s %.2f %s %d %d",t->product.bh,t->product.name,t->product.xh,t->product.price,t->product.chandi,t->product.kc,t->product.ydg); t = t->next; } fclose(fp); } //添加商品 LinkNode* Addshangpin(LinkNode* head) { LinkNode* p,*t; system("cls"); //如果头为空,则创建 if (head == 0) { head = (LinkNode*)malloc(sizeof(LinkNode)); head->next = NULL; } p = head; while(p->next) { p = p->next; } fflush(stdin); //尾插法 t = (LinkNode*)malloc(sizeof(LinkNode)); t->next = NULL; printf("请输入商品编号:"); scanf("%d",&t->product.bh); getchar(); printf("请输入商品名称:"); scanf("%s",t->product.name); getchar(); printf("请输入商品型号:"); scanf("%s",t->product.xh); getchar(); printf("请输入商品价格:"); scanf("%f",&t->product.price); getchar(); printf("请输入商品产地:"); scanf("%s",t->product.chandi); printf("请输入商品库存:"); scanf("%d",&t->product.kc); printf("请输入商品的已订购数量:"); scanf("%d",&t->product.ydg); p->next = t; printf("商品添加成功\n"); system("pause"); return head; } //删除商品 LinkNode* Delshangpin(LinkNode* head) { LinkNode* p,*t; int id; system("cls"); fflush(stdin); printf("请输入需要删除的商品编号:"); scanf("%d",&id); p = head; while (p->next) { if (p->next->product.bh == id) { printf("商品已删除\n"); system("pause"); t = p->next; p->next = t->next; free(t); t = 0; return head; } p = p->next; } printf("未找到该商品\n"); system("pause"); return head; } //修改商品信息 LinkNode* Modshangpin(LinkNode* head) { LinkNode* p; int id; fflush(stdin); system("cls"); printf("请输入需要修改的商品编号:"); scanf("%d",&id); p = head->next; while (p) { if (p->product.bh == id) { printf("请输入商品名称:"); scanf("%s",p->product.name); getchar(); printf("请输入商品型号:"); scanf("%s",p->product.xh); getchar(); printf("请输入商品价格:"); scanf("%f",&p->product.price); getchar(); printf("请输入商品产地:"); scanf("%s",p->product.chandi); printf("请输入商品库存:"); scanf("%d",&p->product.kc); printf("请输入商品的已订购数量:"); scanf("%d",&p->product.ydg); printf("商品信息已修改完成\n"); system("pause"); return head; } p = p->next; } printf("未找到该商品\n"); system("pause"); return head; } //查询商品 LinkNode* Findshangpin(LinkNode* head) { LinkNode* p; char buf[30]={0}; fflush(stdin); system("cls"); if (head == 0) { printf("目前暂无商品\n"); system("pause"); return 0; } printf("请输入要查询的商品名称或者型号:"); scanf("%s",buf); p = head->next; printf("编号 名称 型号 价格 产地 库存 已订购\n"); while (p) { if (strcmp(p->product.name,buf)==0 || strcmp(p->product.xh,buf)==0) { printf("%4d %s %s %.2f %s %d %d\n",p->product.bh,p->product.name,p->product.xh,p->product.price,p->product.chandi,p->product.kc,p->product.ydg); system("pause"); return p; } p = p->next; } printf("未找到该名称或者型号的商品\n"); system("pause"); return 0; } //显示所有商品 void showAll(LinkNode* head) { LinkNode* p; system("cls"); if(head==0) { printf("目前暂无商品\n"); return; } p = head->next; printf("编号 名称 型号 价格 产地 库存 已订购\n"); while (p) { printf("%4d %s %s %.2f %s %d %d\n",p->product.bh,p->product.name,p->product.xh,p->product.price,p->product.chandi,p->product.kc,p->product.ydg); p = p->next; } system("pause"); return ; } //订购信息写入文件 void UpdateDginfo(const char* name) { int i,j; FILE* fp; if((fp = fopen(name,"w")) == 0) { printf("文件打开失败\n"); return; } for (i=0;i<g_dgNmb;i++) { //订购商品编号 for(j=0;j<g_dginfo[i].nmb;j++) { //订购商品编号 if(j< g_dginfo[i].nmb-1) fprintf(fp,"%d,",g_dginfo[i].bh[j]); else fprintf(fp,"%d ",g_dginfo[i].bh[j]); } //对应的数量 for(j=0;j<g_dginfo[i].nmb;j++) { if(j< g_dginfo[i].nmb-1) fprintf(fp,"%d,",g_dginfo[i].cnt[j]); else fprintf(fp,"%d ",g_dginfo[i].cnt[j]); } //收件人信息 fprintf(fp,"%s %s\n",g_dginfo[i].addr,g_dginfo[i].phone); } fclose(fp); } //订购商品 void Shopping(LinkNode* head,const char* name) { LinkNode* p; int id,cnt=0; char ch; char addr[30]; Dginfo dg; dg.nmb = 0; fflush(stdin); system("cls"); if(head==0) { printf("目前暂无商品\n"); return ; } while(1) { printf("请输入需要订购的商品编号:"); scanf("%d",&id); p = head->next; while(p && p->product.bh != id) p = p->next; if(p) { printf("请输入订购数量:"); scanf("%d",&cnt); p->product.ydg += cnt; //订购后是否需要从库存中减去?如果库存小于订购数量怎么处理? //这里暂时不考虑那么复杂,只是单纯的从库存中减去订购数量 p->product.kc -= cnt; //减去订购数量 dg.bh[dg.nmb] = id; dg.cnt[dg.nmb] = cnt; dg.nmb++; }else printf("未找到该商品,"); printf("是否继续订购(Y/N):"); fflush(stdin); ch = getchar(); if(ch == 'Y' || ch == 'y') continue; else break; } fflush(stdin); printf("请输入收件人地址:"); scanf("%s",&dg.addr); getchar(); printf("请输入收件人电话:"); scanf("%s",&dg.phone); getchar();//接收回车符 g_dginfo[g_dgNmb] = dg; g_dgNmb++; //更新订购信息 UpdateFile(name,head); //更新库存文件 //订购信息写入文件 UpdateDginfo("dg.txt"); } //统计每天的订购信息,订购信息保存到了 g_dginfo全局变量中,可以考虑写入到文件 void Tongji() { //按照产品编号统计 int product[100][2] = {0}; int nmb = 0; int i,j,k,id; int op,cnt=0; system("cls"); fflush(stdin); //统计每种商品的订购信息 for (i=0;i<g_dgNmb;i++) { for (j=0;j<g_dginfo[i].nmb;j++) { id = g_dginfo[i].bh[j]; //查找编号是否已经存在 for (k=0;k<nmb;k++) { if(product[k][0] == id) break; } if (k == nmb) { product[nmb][0] = id; product[nmb][1] = g_dginfo[i].cnt[j]; nmb++; }else product[k][1] += g_dginfo[i].cnt[j]; } } //显示所有订购信息 while(1) { system("cls"); printf("1.显示所有订购信息\n"); printf("2.显示特定数量的订购信息\n"); printf("3.退出统计\n"); scanf("%d",&op); if(op == 3) { //system("pause"); return ; } else if(op == 2 || op == 1) { cnt = 0; if(op == 2) { printf("请输入指定数量:"); scanf("%d",&cnt); } printf("编号 数量\n"); for (i=0;i<nmb;i++) { if(product[i][1] > cnt) printf("%d %d\n",product[i][0],product[i][1]); } system("pause"); } } } //释放内存 void Release(LinkNode* head) { LinkNode* p; while (head) { p = head->next; free(head); head = p; } } int main() { int op; LinkNode* head = 0; head = ReadFile("shangpin.txt"); while(1) { system("cls"); printf("1.显示所有商品信息\n"); printf("2.新增商品\n"); printf("3.修改商品信息\n"); printf("4.删除商品\n"); printf("5.订购商品\n"); printf("6.统计订购商品\n"); printf("7.查找商品\n"); printf("0.退出程序\n"); scanf("%d",&op); switch(op) { case 0: printf("谢谢使用,再见\n"); system("pause"); return 0; case 1: showAll(head); break; case 2: head = Addshangpin(head); UpdateFile("shangpin.txt",head); break; case 3: head = Modshangpin(head); UpdateFile("shangpin.txt",head); break; case 4: head = Delshangpin(head); UpdateFile("shangpin.txt",head); break; case 5: Shopping(head,"shangpin.txt"); break; case 6: Tongji(); break; case 7: Findshangpin(head); //可以返回商品的指针 break; } } //释放内存 if(head) { Release(head); head = 0; } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 12无用