【C语言期末】商品管理系统

 本文资源:https://download.csdn.net/download/weixin_47040861/88820155


1.题目要求

商品管理系统

商品信息包括:包括编号、类别、名称、价格、折扣比例、生产时间 、存货数量等要求:
1、信息首先保存在文件中,然后打开文件进行读写操作,信息的改写必须与文件中保存的数据同步。
2、完成以下功能:
1 系统以菜单方式工作
2 增加商品信息
3 删除指定的商品信息
4 修改指定的商品信息
5 能按照多种方式查询(至少两种,如编号、类别、名称等
6 统计功能。按类别统计各种商品的存货数量,平均价格及存货量最多的商品信息
7 按照商品类别进行排序

2.实现效果

1.添加商品

2.修改商品

3.查询商品

4.删除商品

5.统计

6.排序

3.功能介绍

1.添加商品

  1. 创建一个名为newProductProduct结构体,用于存储新商品的信息。结构体的各字段包括编号(id)、类别(category)、名称(name)、价格(price)、折扣比例(discount)、生产日期(productionDate)和库存数量(inventory)。

  2. 通过printfscanf_s函数,向用户展示商品信息的输入提示,并接收用户输入的商品信息。用户需要输入产品编号、类别、名称、价格、折扣比例、生产日期和库存数量。

  3. 将用户输入的新商品(newProduct)添加到商品数组(products)的末尾,即数组的下一个位置。

  4. 打印"修改成功!"的提示消息,表示商品添加操作成功。

  5. 更新商品数组的长度,通过递增len指针所指向的值。

  6. 调用saveToCSV函数,将更新后的商品数组保存到CSV文件中。

  7. 使用system("pause")暂停程序执行,以便用户查看输出信息。这通常用于保持控制台窗口打开,直到用户手动关闭。

2.修改商品

  1. 用户首先被要求输入要修改的商品编号(productId)。

  2. 通过循环遍历商品数组(products),查找与用户输入的商品编号匹配的商品在数组中的位置(index)。

  3. 如果找到对应编号的商品(index != -1),则向用户展示一个菜单,要求用户选择要修改的商品属性。

  4. 用户通过输入菜单编号,选择要修改的商品属性,包括商品类别、商品名称、商品价格、折扣比例、生产时间、存货数量等。

  5. 根据用户的选择,通过switch语句分别执行相应的修改操作。用户输入的新信息将替代原有的商品属性。

  6. 修改完成后,调用saveToCSV函数将更新后的商品数组保存到CSV文件中。

  7. 打印"修改成功"的提示消息,告知用户修改操作成功。

  8. 使用system("pause")暂停程序执行,以便用户查看输出信息。这通常用于保持控制台窗口打开,直到用户手动关闭。

  9. 如果未找到对应编号的商品,打印"未找到该商品编号"的提示消息。

3.查询商品

用户首先选择查询方式(通过商品编号、商品类别、商品名称或生产日期),然后输入相应的信息进行查询。根据用户的选择,函数会遍历商品数组,找到匹配的商品,并打印出相应的详细信息。如果找不到匹配的商品,会提示用户未找到。

4.删除商品

用户首先输入要删除的商品编号,函数会查找该编号对应的商品在数组中的位置。如果找到对应编号的商品,会打印出该商品的详细信息,并将数组中该位置后的所有数据向前移动一位,相当于删除该商品。最后,数组长度减一,表示删除了一个商品。如果未找到匹配的商品,会提示用户未找到。

5.统计

函数首先检查数组中是否存在商品信息,如果数组长度小于等于0,则输出提示信息暂无商品信息并返回。接下来,用户需要输入要统计的商品类别。函数会遍历商品数组,对于每一个匹配输入类别的商品,累加总存货量、总价格,并统计匹配商品数量。同时,函数寻找该类别存货量最多的商品信息。

最后,函数输出该类别的总存货量、平均价格,以及存货量最多的商品信息。如果该类别暂无商品信息,会相应地输出提示。

6.排序

首先,函数会检查数组的长度是否小于等于1,如果是,则表示无需排序,直接返回。接下来,函数使用冒泡排序算法,按照商品的类别进行升序排序。

内层循环比较相邻两个商品的类别,如果前一个商品的类别字符串大于后一个商品的类别字符串(按照字典顺序),则交换它们的位置,以达到升序排序的目的。

最后,函数打印排序后的商品信息,保存到CSV文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2774466.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux操作系统基础(三):虚拟机与Linux系统安装

文章目录 虚拟机与Linux系统安装 一、系统的安装方式 二、虚拟机概念 三、虚拟机的安装 四、Linux系统安装 1、解压人工智能虚拟机 2、找到解压目录中的node1.vmx 3、启动操作系统 虚拟机与Linux系统安装 一、系统的安装方式 Linux操作系统也有两种安装方式&#xf…

以“防方视角”观社工钓鱼攻击

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 案例概述02 攻击路径03 防方思路 01 案例概述 这篇文章来自奇安信攻防社区“小艾”,记录的某师傅通过社工钓鱼诱导企业员工点击含有木马的文件,侵入系统取得了终端控制权。接…

MyBatis之环境搭建以及实现增删改查

MyBatis之环境搭建以及实现增删改查 前言准备工作1.保证数据库已启动2. 创建Person表 MyBatis开发环境搭建1.下载MyBatis jar包2.下载MySQL的JDBC驱动3.新建Java工程(Java8),导入MyBatis的jar包以及JDBC驱动 实现步骤1. 创建Peron类2. 编写Ma…

c语言--指针数组(详解)

目录 一、什么是指针数组?二、指针数组模拟二维数组 一、什么是指针数组? 指针数组是指针还是数组? 我们类比一下,整型数组,是存放整型的数组,字符数组是存放字符的数组。 那指针数组呢?是存放…

SpringCloud-Eureka原理分析

Eureka是Netflix开源的一款用于实现服务注册与发现的工具。在微服务架构中,服务的动态注册和发现是必不可少的组成部分,而Eureka正是为了解决这一问题而诞生的。 一、为何需要Eureka 在微服务架构中,服务之间的协同合作和高效通信是至关重要…

【性能最佳实践】跟着我们一起玩转查询模式与性能分析!

使用最新的驱动程序 MongoDB的官方驱动程序是由负责核心数据库开发的同一个专业团队打造的。这些驱动程序的更新通常比数据库本身更频繁,大概每几个月就会发布一次新版本。我们建议您尽可能使用最新版本的驱动程序,并在您使用的编程语言中安装可用的本地…

蓝桥杯Web应用开发-CSS3 新特性【练习三:文本阴影】

文本阴影 text-shadow 属性 给文本内容添加阴影的效果。 文本阴影的语法格式如下: text-shadow: x-offset y-offset blur color;• x-offset 是沿 x 轴方向的偏移距离,允许负值,必须参数。 • y-offset 是沿 y 轴方向的偏移距离&#xff0c…

OpenMLDB 作为中国唯一的特征平台产品入选 2023 Gartner 研究报告

在国际权威咨询与研究机构 Gartner 发布的重要研究报告《The Logical Feature Store: Data Management for Machine Learning》(《逻辑特征存储:机器学习的数据管理》,下文简称报告)中,OpenMLDB 荣幸作为中国唯一的特征平台代表产…

国产信创领跑者:暴雨信息的创新与实践

随着数字化转型的加速推进,信创产业作为数字经济发展的重要支柱,正日益受到社会各界的广泛关注。在这个大背景下,暴雨信息积极响应国家号召,全面适配国产化,推动信创产业的技术创新和应用拓展,成为了行业的…

Mybatis- plus 基本使用

目录 一. 引入依赖 二.定义Mapper 三.常见注解 3.1TableName 3.2.TableId 3.3TableField 3.4常见配置 一. 引入依赖 由于这个starter包含对mybatis的自动装配&#xff0c;因此完全可以替换掉Mybatis的starter。 <dependency><groupId>com.baomidou</gr…

前端JavaScript篇之数组的遍历方法有哪些?forEach和map方法有什么区别?

目录 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别&#xff1f;forEach()map()filter()for…ofevery() 和 some()find() 和 findIndex()reduce() 和 reduceRight()forEach和map方法有什么区别总结 数组的遍历方法有哪些&#xff1f;forEach和map方法有什么区别…

U3D记录之FBX纹理丢失问题

今天费老大劲从blender建了个模型&#xff0c;然后导出进去unity 发现贴图丢失 上网查了一下 首先blender导出要改设置 这个path mode要copy 然后unity加载纹理也要改设置 这里这个模型的纹理load要改成external那个模式 然后就有了&#xff0c;另外这个导出还有好多选项可…

Spring如何扫描自定义的注解?

目录 一、Spring框架介绍 二、什么是自定义注解 三、如何扫描自定义的注解 一、Spring框架介绍 Spring框架是一个开源的Java应用程序框架&#xff0c;它提供了一种全面的编程和配置模型&#xff0c;用于构建现代化的企业级应用程序。Spring框架的核心原则是依赖注入&#x…

使用Softing edgeConnector模块将云轻松连接到Siemens PLC

一 工业边缘的连接解决方案 云服务提供商 (CSP) 引入了服务和功能&#xff0c;以简化基于云的工业物联网解决方案的实施。Azure Industrial IoT Platform或AWS IoT SiteWise支持标准协议和接口&#xff0c;例如OPC UA或MQTT。但是&#xff0c;如果您希望在典型的旧改项目中连接…

HttpServletResponse接口用于表示状态代码的字段

1. HttpServletResponse接口用于表示状态代码的字段 您已学习了状态代码以及可用于从servlet向客户机发送状态代码的HttpServletResponse接口的字段。下表列出了HttpServletResponse接口表示状态代码的一些其他字段。 字段状态代码描述SC_HTTP_VERSION_NOT_SUPPORTED505服务器…

Midjourney提示词风格调试测评

在Midjourney中提示词及风格参数的变化无疑会对最终的作品产生影响&#xff0c;那影响具体有多大&#xff1f;今天我我们将通过一个示例进行探究。 示例提示词&#xff1a; 计算机代码海洋中的黄色折纸船&#xff08;图像下方&#xff09;风格参考:金色长发的女人&#xff0c…

222. 完全二叉树的节点个数 - 力扣(LeetCode)

题目描述 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干…

20240207-不要用摸鱼打发时间

20240207-不要用摸鱼打发时间 今天是农历年倒数第三天&#xff0c;很多人都已经回家过年了。我有其他出行计划&#xff0c;所以今年没有回家。其实这一点也有违背自己每年都要回家的原则&#xff0c;但相比往年&#xff0c;真的是更愿意出去不愿意回家了。 想家吗&#xff0c;…

FPGA_简单工程_无源蜂鸣器驱动实验

一 理论 蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器2中类型&#xff0c;按其有无信号源&#xff0c;分为有源蜂鸣器和无源蜂鸣器。 有源蜂鸣器&#xff0c;内部装有集成电路&#xff0c;不需要音频驱动电路&#xff0c;就直接能发出声响&#xff0c;而无源蜂鸣器&#…

算法——前缀和算法

1. 什么是前缀和算法 前缀和算法&#xff08;Prefix Sum&#xff09;是一种用于快速计算数组元素之和的技术。它通过预先计算数组中每个位置前所有元素的累加和&#xff0c;将这些部分和存储在一个新的数组中&#xff0c;从而在需要计算某个区间的和时&#xff0c;可以通过简单…