fun.c
#include "head.h"void InitHouse(house* ph)   //初始化仓库
{assert(ph);ph->arr = (Data*)malloc(sizeof(Data) * DafaultSize);ph->capacity = 4;ph->sz = 0;
}void CheckCapacity(house* ph)
{assert(ph);if (ph->sz == ph->capacity)   // 说明{int newcapacity = 2 * ph->capacity;Data* tmp = (Data*)realloc(ph->arr, newcapacity * sizeof(Data));assert(tmp);   //tmp为空则表示扩容失败,直接退出ph->arr = tmp;ph->capacity = newcapacity;}
}void Add(house* ph)
{assert(ph);CheckCapacity(ph);int sz = ph->sz;printf("请依次输入以下基本信息:>\n");printf("id:\t");scanf("%s", ph->arr[sz].id);printf("种类:\t");scanf("%s", ph->arr[sz].type);printf("名称:\t");scanf("%s", ph->arr[sz].name);printf("价格:\t");scanf("%f", &ph->arr[sz].price);printf("数量:\t");scanf("%d", &ph->arr[sz].num);ph->sz++;printf("信息录入成功! 即将跳转回主界面\n");Sleep(1000);system("cls");
}int Search(house* ph, char* id)
{assert(ph);for (int i = 0; i < ph->sz; i++){if (strcmp(id, ph->arr[i].id) == 0)return i;}return -1;            //  说明没有找到
}void Del(house* ph)
{printf("请输入待删除商品的id值:>");char id[10];scanf("%s", id);int ret = Search(ph, id);if (ret == -1)printf("目标商品不存在,删除失败!");else{for (int i = ret; i < ph->sz - 1; i++){ph->arr[i] = ph->arr[i + 1];}ph->sz--;printf("删除成功!即将返回主菜单!");}Sleep(2000);system("cls");
}void Find(house* ph)
{printf("请输入待查找商品id值:");char tmp[10] = { 0 };scanf("%s", tmp);int ret = Search(ph, tmp);if (ret == -1)printf("该商品不存在!即将跳转回主菜单\n");else{printf("id\t种类\t名字\t数量\t价格\t \n");printf("%s\t%s\t%s\t%d\t%.2lf¥\t \n",ph->arr[ret].id, ph->arr[ret].type, ph->arr[ret].name,ph->arr[ret].num, ph->arr[ret].price);printf("查找成功! 按任意键跳转回主界面\n"),system("pause");}system("cls");
}int CmpPrice(void* a, void* b)
{Data* aa = (Data*)a;Data* bb = (Data*)b;return aa->price > bb->price;
}int CmpNum(void* a, void* b)
{Data* aa = (Data*)a;Data* bb = (Data*)b;return aa->num > bb->num;
}void Sort(house* ph)
{printf("********************\n");printf("**[请选择排序依据]**\n");printf("**----------------**\n");printf("** 0.价格         **\n");printf("** 1.数量         **\n");printf("********************\n");int input = 0;while (1){scanf("%d", &input);if (input >= 0 && input <= 1)break;elseprintf("输入错误请重新输入:\n");}int(*arr[4])(void*, void*) = { CmpPrice, CmpNum};   //函数指针数组qsort(ph->arr, ph->sz, sizeof(Data), arr[input]);printf("排序成功! 即将跳转回主界面\n");Sleep(1000);system("cls");
}void Show(house* ph)
{printf("id\t种类\t名字\t数量\t价格\t \n");for (int i = 0; i < ph->sz; i++)printf("%s\t%s\t%s\t%d\t%.2lf¥\t \n",ph->arr[i].id, ph->arr[i].type, ph->arr[i].name,ph->arr[i].num, ph->arr[i].price);system("pause");system("cls");
}head.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <windows.h>#define DafaultSize 4typedef struct Data
{char id[10];          // idchar type[20];       // 种类char name[20];       // 名字int num;             // 数量float price;         // 价格}Data;typedef struct warehouse
{Data* arr;        // 存储数据int capacity;     // 数组的容量int sz;           // 当前数据的个数
}house;void menu();void InitHouse(house* ph);void CheckCapacity(house* ph);void Add(house* ph);int Search(house* ph, char* id);void Del(house* ph);void Find(house* ph);void Sort(house* ph);void Show(house* ph);mian.c#include "head.h"void menu()
{printf("***********************\n");printf("**    仓库管理系统   **\n");printf("**-------------------**\n");printf("**      1. Add       **\n");  // 增加数据printf("**      2. Del       **\n");  // 删除数据printf("**      3. Find      **\n");  // 排序数据printf("**      4. Sort      **\n");  // 查找数据printf("**      5. Show      **\n");  // 展示所有数据printf("**      0. Exit      **\n");  // 退出程序printf("**-------------------**\n");printf("***********************\n");
}void Login(house* ph)   // 从文本中读出之前的仓库货物数据
{printf("原数数据加载中...\n");FILE* fr = fopen("warehouse.txt", "ab+");   //使用a是为了防止原先该文件不存在fseek(fr, 0, SEEK_SET);                     //是文件指针指向开头int ret = 1;while (1){CheckCapacity(ph);ret = fread(ph->arr + ph->sz, sizeof(Data), 1, fr); //返回值为0表示读取结束if (ret == 0){break;}ph->sz++;}Sleep(1000);                        // 延时是为了防止按太快导致输入bugprintf("原始数据加载成功!\n");system("pause");system("cls");
}void SaveData(house* ph)
{printf("文件保存中...\n");FILE* fw = fopen("warehouse.txt", "w");fwrite(ph->arr, sizeof(Data), ph->sz, fw);Sleep(1000);printf("文件保存成功!\n");
}int main()
{house* ph = (house*)malloc(sizeof(house));InitHouse(ph);Login(ph);int input = 0;do{menu();printf("请选择即将执行的操作:>\n");scanf_s("%d", &input);switch (input){case 0: SaveData(ph); break;case 1: Add(ph); break;case 2: Del(ph); break;case 3: Find(ph); break;case 4: Sort(ph); break;case 5: Show(ph); break;}} while (input);return 0;
}

设计报告下载:https://download.csdn.net/download/MarkTang3/87384290?spm=1001.2014.3001.5503

基于C++的仓库管理系统相关推荐

  1. 基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告)

    基于javaweb的仓库管理系统(java+springboot+layui+html+thymeleaf+mysql+实训报告) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse ...

  2. 基于servlet的仓库管理系统

    ** 基于Servlet的仓库管理系统 ** 一.简介 1.1 项目简介 第一次写博客,简单的记录一下自己刚开始写的一个简易的仓库管理系统.仓库管理系统是一个基于Servlet的管理系统,主要包括登录 ...

  3. 课程设计——基于JAVA的仓库管理系统

    要求如下: 系统总需求分析: "仓库管理系统"包括七大功能,一:进仓管理:通过管理员输入货物进仓的时间,系统自动分配进仓编号:二:出仓管理:通过管理员输入货物出仓的时间,实现出仓: ...

  4. 基于php的仓库管理系统

    本仓库管理系统的前台选用了PHP.AppServ等作为主要的编程语言,后台选用MYSQL作为数据库服务器.利用PHP动态网页编程技术实现前后台的数据交互.本系统实现了以下功能:管理企业的员工基本数据: ...

  5. 基于javaweb的仓库管理系统

    一.系统简介 本项目采用eclipse工具开发,jsp+servlet技术编写,样式采用了layui前段框架,数据库采用的是mysql,navicat开发工具. 系统一共分为3个角色分别是:管理员,仓 ...

  6. 基于linux的银行管理,课内资源 - 基于Linux的仓库管理系统

    1 需求分析 要求的仓库管理系统的功能如下: 查看仓库库存列表功能 查询功能:可以随时查看当前仓库的库存中的某些商品的一系列信息,包括商品名,剩余量 进货功能:(以下两个功能是根据输入自动选择的) 在 ...

  7. 基于springboot的仓库管理系统

    博主主页:猫头鹰源码 博主简介:Java领域优质创作者.CSDN博客专家.公司架构师.全网粉丝5万+.专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等).简历模 ...

  8. 基于Android的仓库管理系统APP设计与实现

    目 录 目 录 III 1 引言 1 1.1小型仓库管理系统开发背景 1 1.1.1 Android移动应用开发产业的现状分析 2 1.1.2 Android平台的市场优势 3 1.2 课题开发内容与 ...

  9. ssm+java计算机毕业设计基于java的仓库管理系统9rew6(程序+lw+源码+远程部署)

    项目运行 项目含有源码(见文末).文档.程序.数据库.配套开发软件.软件安装教程 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ E ...

最新文章

  1. 25张图解Redis连环面试!击溃面试官!
  2. (多图) 基于并行流水线结构的可重配FIR滤波器的FPGA实现
  3. python入门编程之mysql编程
  4. 小数位数_圆周率的小数位是否包含了所有的数字组合?
  5. 一年级下册计算机教学计划,【实用】一年级下册教学计划4篇
  6. CF280C-Game on Tree【数学期望】
  7. 如何用word写书_如何用vba在word中添加打勾的方框?
  8. 《SolidWorks 2017中文版机械设计从入门到精通)》——1.6 参考基准轴
  9. 在HTML中使用WCF RESTful上传文件
  10. Spring AOP与拦截器的区别
  11. python构造一个二叉树_二叉树-链表存储,用二叉树构造表达式(Python实现)
  12. centos rpm安装mysql5.6_CentOS 7下使用RPM安装MySQL 5.6
  13. 从零开始学习鸿蒙系统
  14. openwrt折腾记2-广告拦截adbyby与pass
  15. java长连接转短连接_HTTP的长连接和短连接转换接口(API)
  16. 解决python在linux上导包出现no module named ...的问题
  17. DSP TMS320C6455 芯片支持库CSL API参考
  18. 苹果系统 如何快速访问服务器,mac下的finder怎么使用技巧 苹果系统如何快速打开Finder...
  19. Java8 - 定制归一化收集器(reducing)得到自定义结果集
  20. 工业无线客户端服务器,基于4G工业路由器光伏发电无线远程监控解决方案

热门文章

  1. android中国象棋游戏源码,经典的android 象棋源码,象棋规则完整。
  2. 面试真题总结:Faster Rcnn,目标检测,卷积,梯度消失,Adam算法
  3. 「Emacs org-mode(一)」用Org-mode实现GTD
  4. N-Case 律师事务所管理软件 免费在线试用
  5. H.266/VVC、VTM、YUV中的各种参数(函数):slice、sps、pps、ss、vps、luma、chroma等
  6. linux进程线程视频百度云,linux 进程线程时间片
  7. 实战功能1.标准图幅分幅
  8. ITunes传输视频
  9. 2021-2027全球及中国代谢笼行业研究及十四五规划分析报告
  10. python爬虫系列--小练爬取花田首页源码