一.源程序代码

1. 头文件 goods.h

#ifndef GOODS_H_INCLUDED
#define GOODS_H_INCLUDED#include<stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>#define MAXSIZE 100typedef struct                         //数据域定义为一个结构体
{char name[30];                     //商品名称char no[30];                       //商品编号int  num;                          //商品数量
}goods;                                //商品结构体typedef struct node                    //定义单链表节点类型
{goods data;                        //数据域struct node *next;                 //指针域,指向后继结点
}LNode;LNode *Init_G();                       //初始化链表
void input(LNode *L);                  //创建链表(尾插法)
void run_over(LNode *L);               //浏览商品信息
LNode* search(LNode *L,goods x);       //查找商品
void goodspai(LNode *L);               //商品信息排序
void insert(LNode *L,goods x);         //插入商品
void storage(LNode *L,goods x);        //商品入库
void goodsChange(LNode *L,goods x);    //以商品编号进行修改
int del(LNode *L,goods x);             //删除
void out(LNode *L,goods x);            //商品出库
void save(LNode *L);                   //保存操作
void menu();                           //功能选择窗口  //#endif // GOODS_H_INCLUDED

2.实现函数功能的cpp文件 goods.cpp

#include "goods.h"
#include <windows.h>
#include <time.h>/************************************
* 功能描述:录入商品信息
* 输入参数:输入录入个数及需要录入的信息
* 输出参数:无
* 备注信息:尾插法创建链表
*************************************/void input(LNode *L)                                //尾插法创建链表
{int i,n;LNode *r=L,*s;goods x;printf("\n请输入商品的种数:");scanf("%d",&n);printf("\n ****   请输入商品的名称、编号、数量   ****\n");printf("\n");for(i=1;i<=n;i++){printf("              o商品名称: ");scanf("%s",x.name);printf("              o商品编号: ");scanf("%s",x.no);printf("              o商品数量: ");scanf("%d",&x.num);s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=NULL;r->next=s;r=s;printf("\n");}printf("\n ****       录入结束,返回上一级      ****\n");}/************************************
* 功能描述:浏览商品信息清单
* 输入参数:无
* 输出参数:所有商品信息
* 备注信息:链表的遍历及输出
*************************************/void run_over(LNode *L)
{LNode *p=L->next;if(p==NULL){printf("--------------该系统还未录入商品信息,请录入后在进行操作--------------\n");menu();}printf("\n-----------下面是商品信息一览表-----------\n");printf("\n");printf("商品名称   商品编号    商品数量\n");printf("\n");while(p!=NULL){printf("%5s%10s%12d\n",p->data.name,p->data.no,p->data.num);p=p->next;}printf("\n");printf("\n");}/************************************
* 功能描述:查找商品信息
* 输入参数:要查找的商品编号
* 输出参数:商品信息
* 备注信息:按元素值在链表中查询
*************************************/LNode* search(LNode *L,goods x)
{LNode *p=L->next;while(p!=NULL&&(strcmp(p->data.no,x.no)!=0)){p=p->next;}if(p!=NULL&&(strcmp(p->data.no,x.no)==0))            //查找到相应商品,返回指针{return p;}else{return NULL;}
}/************************************
* 功能描述:插入新增商品
* 输入参数:新增商品的编号,名称及数量
* 输出参数:无
* 备注信息:链表的插入
*************************************/void insert(LNode *L,goods x)
{LNode *p=L,*s;while(p->next!=NULL&&(strcmp(p->next->data.no,x.no)!=0))               //商品不存在时可插入到已有链表上{p=p->next;}s=(LNode*)malloc(sizeof(LNode));s->data=x;s->next=p->next;p->next=s;
}/************************************
* 功能描述:排序商品信息
* 输入参数:无
* 输出参数:无
* 备注信息:直接插入排序和冒泡排序
*************************************/void goodspai(LNode *L)
{LNode *p,*q,*r;int choose;goods x;printf("请选择排序方式:");printf("1.按商品编号排序   2.按库存数量排序 \n");scanf("%d",&choose);switch(choose){case 1:                            //按商品编号排序为直接插入排序p=L->next->next;                                                     //p指向第一个节点的后继L->next->next=NULL;                                                  //直接插入排序,第一个元素在有序区,从第二元素起依次插入while(p!=NULL){r=p->next;                                                       //r指针暂存p的后继q=L;while(q->next!=NULL&&(strcmp(q->next->data.no,p->data.no)>0))    //查找插入位置q=q->next;                                                   //将p节点链入链表p->next=q->next;q->next=p;p=r;}break;case 2:                          //按商品数量排序为冒泡排序p=L->next;while(p){q=p->next;while(q){if(p->data.num<=q->data.num){x=p->data;p->data=q->data;q->data=x;}q=q->next;}p=p->next;}break;}}/************************************
* 功能描述:商品入库
* 输入参数:入库商品信息
* 输出参数:无
* 备注信息:无
*************************************/void storage(LNode *L,goods x)
{LNode *p;p=search(L,x);if(p==NULL)                                            //链表中没有这个商品时可直接插入{insert(L,x);}else{p->data.num=p->data.num+x.num;                     //链表中中有这个商品时只增加商品的数量}
}/************************************
* 功能描述:商品信息修改
* 输入参数:商品编号
* 输出参数:无
* 备注信息:无
*************************************/void goodsChange(LNode *L,goods x)                           //以商品编号进行修改
{LNode *p;char chname[30];char chno[30];int chnum;p=search(L,x);if(p==NULL){printf("\n仓库中无此商品!\n");}else{printf("\n             o 修改商品编号:         ");scanf("%s",chno);strcpy(p->data.no,chno);printf("\n             o 修改商品名称:         ");scanf("%s",chname);strcpy(p->data.name,chname);printf("\n             o 修改商品数量:         ");scanf("%d",&chnum);p->data.num=chnum;printf("\n                               √成功修改!\n");printf("\n");}}/************************************
* 功能描述:删除商品
* 输入参数:要删除的商品编号
* 输出参数:无
* 备注信息:删除链表元素
*************************************/int del(LNode *L,goods x)                           //删除商品信息
{LNode *p;long n;int flag=0;                                      //flag为判断商品是否删除的标志p=L;for(; p!=NULL; p=p->next){if(p->next!=NULL&&(strcmp(p->next->data.no,x.no)==0)){p->next=p->next->next;               //删除语句flag=1;break;}}if(p==NULL&&flag==0){printf("\n                             不存在此商品!");printf("\n--------------------------------------------------");menu();}return 1;
}/************************************
* 功能描述:商品出库
* 输入参数:出库商品及出库数量
* 输出参数:是否购买成功
* 备注信息:模拟超市实际购买操作,增加系统可用性
*************************************/void out(LNode *L,goods x)
{int j;LNode *p;p=search(L,x);if(p==NULL){printf("\n仓库中无此商品!\n");}else{printf("\n   您要购买的商品为:%s。\n",p->data.name);if(p->data.num>x.num)                                     //购买的商品数量少于库存量时{printf("\n购买成功!欢迎下次光临!\n");p->data.num=p->data.num-x.num;                        //库存数=原库存数-购买数printf("\n");printf("\n该商品还有%d件。\n",p->data.num);           //显示现在的库存}else if(p->data.num==x.num)                               //购买的商品数量等于库存量时{printf("\n购买成功!欢迎下次光临!\n");                del(L,x);                                             //调用删除函数,系统显示已售空printf("\n");printf("\n该商品已售空,请及时补充库存。\n");          }else if(p->data.num<x.num)                                //购买的商品数量多于库存量时{printf("\n该商品数量不足,仅剩%d。是否购买\n",p->data.num);printf("(购买请按1,不购买请按0。)\n");printf("请输入您的的选择:");scanf("%d",&j);if(j==1){del(L,x);                                         //若选择购买,则把剩余的该商品全部买走printf("\n购买成功!欢迎下次光临!\n");printf("\n");printf("\n该商品已售空,请及时补充库存。\n");}else{printf("\n欢迎下次光临!\n");}}}
}/************************************
* 功能描述:保存操作数据
* 输入参数:无
* 输出参数:所有信息
* 备注信息:把数据写入文件
*************************************/void save(LNode *L)                           //保存操作结果
{int i;LNode *p=L->next, *q=L->next;FILE *fp;                                 //文件指针if(p==NULL){printf("现在没有商品信息,请先输入信息再进行操作\n");return;}fp=fopen("goods.txt","w");                 //在当前目录下打开goods.txt文件并设置只允许“写”操作if(!fp){printf("文件不存在\n");return;}//将商品信息写入文件fprintf(fp,"===========================商品信息一览表===========================\n");fprintf(fp,"\n");fprintf(fp,"商品名称\t商品编号\t商品数量\n");while(p!=NULL){fprintf(fp,"%s\t\t%s\t\t%d\t\t",p->data.name,p->data.no,p->data.num);fprintf(fp,"\n");p=p->next;}fclose(fp);                                //把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针printf("数据已成功导入文件goods.txt!\n");
}/************************************
* 功能描述:显示系统功能界面
* 输入参数:无
* 输出参数:无
* 备注信息:无
*************************************/void menu()
{printf("\n\n\n\n\n\n");printf("************************欢迎进入超市商品管理系统************************\n");printf("\n\n");system("color 74");printf("请稍后...\n");for(int k=0;k<75;k++){Sleep(30);printf(">");}system("cls");printf("\n\n\n\n\n\n");printf("                       ┏━━━━━━━━━━━━━━━━━━┓\n");printf("                       ┃                                    ┃\n");printf("                       ┃       请选择您要操作的项目         ┃\n");printf("  ◥◤~~~~◥◤       ┃                                    ┃\n");printf("                       ┃          1 录入商品信息            ┃\n");printf("┃           ┃    ┃                                    ┃\n");printf("                       ┃          2 浏览商品清单            ┃\n");printf("   ≡━ ﹏ ━≡        ┃                                    ┃\n");printf("                       ┃          3 查找商品信息            ┃\n");printf("┗━━┳∞┳━━┛     ┃                                    ┃\n");printf("                       ┃          4 修改商品信息            ┃\n");printf("    ┏┫  ┣┓         ┃                                    ┃\n");printf("                       ┃          5 商品信息排序            ┃\n");printf("                       ┃                                    ┃\n");printf("                       ┃          6 商品入库                ┃\n");printf("                       ┃                                    ┃\n");printf("                       ┃          7 商品出库                ┃\n");printf("                       ┃                                    ┃\n");printf("                       ┃          8 删除商品                ┃\n");printf("                       ┃                                    ┃\n");printf("                       ┃          9 保存操作                ┃\n");printf("                       ┃                                    ┃\n");printf("                       ┃          0 退出系统                ┃\n");printf("                       ┗━━━━━━━━━━━━━━━━━━┛\n");}

3.main函数

#include "goods.h"
#include <windows.h>
#include <time.h>int main()
{goods x;int sel;LNode *L,*p;L=(LNode *)malloc(sizeof(LNode));do{menu();printf("\n");printf("\n");printf("  o 请输入您的选择:\n");scanf("%d",&sel);switch(sel){case 1:printf("\n您选择了录入商品信息功能!\n\n");input(L);Sleep(2000);system("cls");break;case 2:printf("\n您选择了浏览商品清单功能!\n\n");printf("\n");run_over(L);Sleep(2000);system("cls");break;case 3:printf("\n您选择了查找商品信息功能!\n\n");printf("\n");printf("\n请输入要查找的商品的编号:\n");printf("\n");printf("您输入的编号为:");printf("\n");scanf("%s",x.no);p=search(L,x);if(p==NULL){printf("\n该商品不存在。\n");}else{printf("\n商品名称    商品编号    商品数量\n");printf("%5s%10s%12d\n",p->data.name,p->data.no,p->data.num);}Sleep(2000);system("cls");break;case 4:printf("\n您选择了修改商品信息功能!\n\n");printf("\n");printf("\n请输入要修改的商品的编号:\n");printf("\n");printf("              o商品编号: ");scanf("%s",x.no);goodsChange(L,x);Sleep(2000);system("cls");break;case 5:goodspai(L);printf("\n已完成排序,若要查看排序后的结果,请回到初始界面。 \n");Sleep(2000);system("cls");break;case 6:printf("\n您选择了商品入库功能!\n\n");printf("\n");printf("\n请输入要入库的商品的名称、编号及数量:\n");printf("\n");printf("              o商品名称: ");scanf("%s",x.name);printf("              o商品编号: ");scanf("%s",x.no);printf("              o商品数量: ");scanf("%d",&x.num);storage(L,x);printf("\n                              √入库成功! \n");Sleep(2000);system("cls");break;case 7:printf("\n您选择了商品出库功能!\n\n");printf("\n");printf("\n请输入要出库的商品的编号、数量:\n");printf("\n");printf("              o商品编号: ");scanf("%s",x.no);printf("              o商品数量: ");scanf("%d",&x.num);out(L,x);Sleep(2000);system("cls");break;case 8:printf("\n您选择了商品删除功能!\n\n");printf("\n");printf("\n请输入要出库的商品的编号:\n");printf("\n");printf("              o商品编号: ");scanf("%s",x.no);del(L,x);printf("\n                              √成功删除!");printf("\n");printf("\n---------------------------------------------");Sleep(2000);system("cls");break;case 9:printf("\n您选择了保存操作功能!\n\n");printf("\n");save(L);printf("\n                              √保存成功!");break;}}while(sel!=0);printf("感谢您的使用,再见!\n");return 0;
}

二、程序运行截图

1.初始界面

2.录入商品信息

浏览当前商品清单

4.修改商品信息

输入有误时

输入无误时

浏览修改后的商品信息

5.商品信息排序

按编号排序

浏览排序后的信息

按库存量排序

浏览排序后的信息

6.查找商品信息

商品不存在时

商品存在时

7.商品入库

浏览商品入库后的信息

8.商品出库

购买数量小于库存数时

购买数量等于库存数时

购买数量大于库存数时

浏览出库后的商品信息

9.删除商品信息

浏览删除后的信息

11.把商品信息写入文件

12.退出系统

数据结构课程设计 - 超市商品管理系统相关推荐

  1. C++语言课程设计——超市商品管理系统

    一.问题要求 使用C++语言编写程序,模拟超市的商品销售.进货.库存等一些列增删改查的功能 二.源码与安装 源码下载链接 百度网盘链接:点击跳转,提取码:BigG 安装教程 下载上述链接的文件,是一个 ...

  2. c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...

    <数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...

  3. 数据结构课程设计-班级考勤管理系统

    数据结构课程设计-班级考勤管理系统 写这个博客,主要是为了总结一下,之前写过的东西,方便以后回来看看,写得不好,勿喷!!! 题目描述: 设计一个对本班所有人员进行考勤的管理系统,要求系统管理员(班长. ...

  4. c语言超市选址问题实验报告,数据结构课程设计-超市选址问题.doc

    数据结构 课程设计报告 设计题目:学校超市选址问题 专 业 计算机科学与技术 班 级 10计本2班 学 生 朱冬 学 号 联系方式 年 学期 问题描述 对于某一学校超市,其他各单位到其的距离不同,同时 ...

  5. 数据库课程设计超市信息管理系统

    目录 一.需求分析 1.系统需求分析描述 1.1.1系统需求说明: 1.1.2系统可行性分析: 1.1.3系统应用范围: 2.系统功能结构图 3.业务流程图 二.概念结构设计 1.实体描述 2.局部E ...

  6. 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一.设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程.通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择 ...

  7. Java课程设计——仓库商品管理系统

    在现今信息时代,生活速度的加快,使得人们越来越向信息化.数字化发展.随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,尤其是学生的考试成绩数据.面对庞大的学生的成绩,需要有学生 ...

  8. 数据结构课程设计---学生信息管理系统

    1. 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能:      建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息, ...

  9. 数据结构课程设计--学生信息管理系统

    stu.h /********************************************************************** *版权所有:2017,zhangcuipin ...

最新文章

  1. 云原生时代下的12-factor应用与实践
  2. 智能实验室-全能优化(Guardio) 4.0.0.700 新春贺岁版
  3. 【NOI2015】品酒大会【后缀数组】【并查集】
  4. vue-router详尽:编程式导航、路由重定向、动态路由匹配、路由别名、嵌套路由、命名视图
  5. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能
  6. 返璞归真-SOC起源
  7. UNIX高手的10个习惯之一
  8. 2020年全国大学生数学建模竞赛优秀论文
  9. Jetpack Compose - Modifier入门篇
  10. openfiler服务器打不开web管理页面
  11. 头部公司的Robotaxi何时能拿掉安全员?
  12. 依托数网星工业互联网平台构建能源管理平台,助力企业能耗结构优化
  13. 第五篇:uCOS-IInbsp;信号量及其…
  14. printf 中的伪灵异事件
  15. 新闻 | Mapbox 牵手阿里,飞猪旅行上线六大城市地图功能
  16. 课程设计 单项选择题标准化考试系统
  17. 存储调研:BeeGFS并行文件系统体系结构
  18. 后疫情时代,VR购物—零售业的硬核破局之道
  19. win7运行在哪_控制面板在哪,n卡控制面板打不开
  20. 中国式差旅管理的一匹黑马

热门文章

  1. 黑盒测试用例设计 - 判定表法
  2. Android studio 主题设置
  3. 有软件可以测试网线信号衰减吗,福禄克网线测试仪时,网线的四个测试参数
  4. 创新丨想创新?看看谷歌怎么做
  5. python - 啃书 第五章 函数
  6. CLion 使用 clang-cl 工具链时未正确链接 vcpkg 中的 Boost 外部库
  7. c语言注册登录系统代码6,C语言程序设计(图书管理系统)源代码.doc(6)
  8. Java实战—POI操作Excel文档、读取、写入、合并单元格
  9. python pprint 文件,使用pprint模块格式化数据
  10. UML学习笔记(五)--顺序图