数据结构课程设计 - 超市商品管理系统
一.源程序代码
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.退出系统
数据结构课程设计 - 超市商品管理系统相关推荐
- C++语言课程设计——超市商品管理系统
一.问题要求 使用C++语言编写程序,模拟超市的商品销售.进货.库存等一些列增删改查的功能 二.源码与安装 源码下载链接 百度网盘链接:点击跳转,提取码:BigG 安装教程 下载上述链接的文件,是一个 ...
- c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...
<数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...
- 数据结构课程设计-班级考勤管理系统
数据结构课程设计-班级考勤管理系统 写这个博客,主要是为了总结一下,之前写过的东西,方便以后回来看看,写得不好,勿喷!!! 题目描述: 设计一个对本班所有人员进行考勤的管理系统,要求系统管理员(班长. ...
- c语言超市选址问题实验报告,数据结构课程设计-超市选址问题.doc
数据结构 课程设计报告 设计题目:学校超市选址问题 专 业 计算机科学与技术 班 级 10计本2班 学 生 朱冬 学 号 联系方式 年 学期 问题描述 对于某一学校超市,其他各单位到其的距离不同,同时 ...
- 数据库课程设计超市信息管理系统
目录 一.需求分析 1.系统需求分析描述 1.1.1系统需求说明: 1.1.2系统可行性分析: 1.1.3系统应用范围: 2.系统功能结构图 3.业务流程图 二.概念结构设计 1.实体描述 2.局部E ...
- 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)
一.设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程.通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择 ...
- Java课程设计——仓库商品管理系统
在现今信息时代,生活速度的加快,使得人们越来越向信息化.数字化发展.随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,尤其是学生的考试成绩数据.面对庞大的学生的成绩,需要有学生 ...
- 数据结构课程设计---学生信息管理系统
1. 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表 显示链表 查找链表中是否存在某个元素,并显示这个元素的所有信息, ...
- 数据结构课程设计--学生信息管理系统
stu.h /********************************************************************** *版权所有:2017,zhangcuipin ...
最新文章
- 云原生时代下的12-factor应用与实践
- 智能实验室-全能优化(Guardio) 4.0.0.700 新春贺岁版
- 【NOI2015】品酒大会【后缀数组】【并查集】
- vue-router详尽:编程式导航、路由重定向、动态路由匹配、路由别名、嵌套路由、命名视图
- 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能
- 返璞归真-SOC起源
- UNIX高手的10个习惯之一
- 2020年全国大学生数学建模竞赛优秀论文
- Jetpack Compose - Modifier入门篇
- openfiler服务器打不开web管理页面
- 头部公司的Robotaxi何时能拿掉安全员?
- 依托数网星工业互联网平台构建能源管理平台,助力企业能耗结构优化
- 第五篇:uCOS-IInbsp;信号量及其…
- printf 中的伪灵异事件
- 新闻 | Mapbox 牵手阿里,飞猪旅行上线六大城市地图功能
- 课程设计 单项选择题标准化考试系统
- 存储调研:BeeGFS并行文件系统体系结构
- 后疫情时代,VR购物—零售业的硬核破局之道
- win7运行在哪_控制面板在哪,n卡控制面板打不开
- 中国式差旅管理的一匹黑马
热门文章
- 黑盒测试用例设计 - 判定表法
- Android studio 主题设置
- 有软件可以测试网线信号衰减吗,福禄克网线测试仪时,网线的四个测试参数
- 创新丨想创新?看看谷歌怎么做
- python - 啃书 第五章 函数
- CLion 使用 clang-cl 工具链时未正确链接 vcpkg 中的 Boost 外部库
- c语言注册登录系统代码6,C语言程序设计(图书管理系统)源代码.doc(6)
- Java实战—POI操作Excel文档、读取、写入、合并单元格
- python pprint 文件,使用pprint模块格式化数据
- UML学习笔记(五)--顺序图