要求

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(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]);elsefprintf(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]);elsefprintf(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++;}elseprintf("未找到该商品,");printf("是否继续订购(Y/N):");fflush(stdin);ch = getchar();if(ch == 'Y' || ch == 'y')continue;elsebreak;}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++;}elseproduct[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;
}

C语言商品订购系统(跟购物系统有些差别)相关推荐

  1. javaweb JAVA JSP购物系统购物商城系统源码(jsp电子商务系统)购物系统mvc

    javaweb JAVA JSP购物系统购物商城系统源码(jsp电子商务系统)购物系统mvc protected void doGet(HttpServletRequest req, HttpServ ...

  2. javaweb JAVA JSP药品销售管理系统JSP医药销售管理系统JSP购物商城系统JSP电子商务系统JSP购物系统

    javaweb JAVA JSP药品销售管理系统JSP医药销售管理系统JSP购物商城系统JSP电子商务系统JSP购物系统 protected void doGet(HttpServletRequest ...

  3. javaweb JAVA JSP手机销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上手机店在线销售

    JSP手机销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上手机店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租 ...

  4. javaweb JAVA JSP水果销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上水果店在线销售

    javaweb JAVA JSP水果销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上水果店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情 ...

  5. javaweb JAVA JSP书店销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上书店在线销售

    JSP书店销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上书店在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租赁 ...

  6. javaweb JAVA JSP零食销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上零食在线销售

    JSP零食销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上零食在线销售 大家好,很高兴和大家分享Java项目和经验.不管同学们是出于什么需求.都希望各位计算机专业的同学有一个提 ...

  7. JSP眼镜销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上眼镜在线销售

    JSP眼镜销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上眼镜在线销售

  8. javaweb JAVA JSP婴幼儿用品销售系统jsp购物系统购物商城系统源码(电子商务系统)网上在线销售

    javaweb JAVA JSP婴幼儿用品销售系统jsp购物系统购物商城系统源码(电子商务系统)网上在线销售 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线 ...

  9. javaweb JAVA JSP汽车销售系统商城购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上汽车

    JSP汽车销售系统商城购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上汽车

  10. c语言商品订购系统总结报告,c语言课程设计报告-商业销售管理系统

    c语言课程设计报告-商业销售管理系统 (14页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 C语言课程设计商业销售管理系统学号姓名班级软 ...

最新文章

  1. 【Qt】Q_PROPERTY():属性系统
  2. 史上最强最贵Mac Pro诞生,iPadOS和iOS分家!WWDC19全面总结
  3. 《Java虚拟机原理图解》5. JVM类加载器机制与类加载过程
  4. php读取excel类——PHP-ExcelReader
  5. 李开复:AlphaGo 若打败了世界冠军,意味着什么?
  6. python(numpy,pandas6)——pandas数据形式的简介,排序方式sort_index,sort_values
  7. 永不消逝的缓存数据:Adaptec 5445Z RAID卡评测(连载之一)
  8. kubernetes kubeadm init kube-apiserver.yaml already exists
  9. WPE实际经验和实例
  10. HTML页面乱码怎么解决?
  11. 微软office Excel 2013 2016 如何启用宏功能的图文教程
  12. 通过新版阿里ACE认证,实验操作题你来解一下
  13. 关于笔记本安装Deepin 或者ubuntu操作系统,无法进入界面。
  14. python+qqbot实现qq聊天机器人
  15. spring-test部分翻译
  16. 程序员增加收入的几种方法
  17. html双击变成可编辑状态,JS实现双击编辑可修改状态的方法
  18. 再续!一篇带你了解那些适合日常使用的开源工具和应用(设计篇)
  19. Github项目(克隆,上传)简单git命令流程使用记录
  20. 到底什么是5G LAN?

热门文章

  1. wordpress主题 Cosy主题3.X下载
  2. Ubuntu系统中清理DNS缓存
  3. 小米Max详细刷成开发版开启Root超级权限的经验
  4. 无法使用安全密码身份验证登录到服务器,使用安全密码验证登录(SPA)”后为什么登录失败...
  5. LWN:终于能够防护 straight-line 预测执行漏洞了!
  6. [MySQL系列] 使用STRAIGHT_JOIN 优化inner join查询排序索引问题
  7. Struts 官方下载地址
  8. c语言倒直角梯形,请问一下大佬们这段代码问题在哪里?
  9. 华为大数据客户端安装步骤
  10. 程序员都是段子手,注释都带魔性