课设实验-数据结构-线性表-手机销售

题目:

代码:

#include<stdio.h>
#include<string.h>
#define MaxSize 10 //定义顺序表最大长度 //定义手机结构体类型
typedef struct
{char PMod[10];//手机型号int PPri;//价格int PNum;//库存量 
}PhoType; //手机类型 //记录手机的顺序表 
typedef struct
{PhoType p[MaxSize];//静态存储手机的对象 int length;//当前顺序表的长度 
}SeqList; //顺序表类型 //初始化顺序表
void InitList(SeqList &L) //最终的结果要返回,所以需要&,不然会出现脏数据 
{//L.p[0].PMod[10]='OPPOR30';这么赋值不对:L.p[0].PMod是地址值,是常量,"OPPOR30"字符串不能直接赋给常量 strcpy(L.p[0].PMod,"OPPOR30");//不是L.p[0].PMod[10],不是'OPPOR30' L.p[0].PPri=1000;L.p[0].PNum=20;//分隔 strcpy(L.p[1].PMod,"OPPOR15");L.p[1].PPri=1200;L.p[1].PNum=30;//分隔 strcpy(L.p[2].PMod,"OPPOR10");L.p[2].PPri=1800; L.p[2].PNum=40;//分隔 L.length=3;     	
} //查找手机型号的函数:需要顺序表即对象,要查找的型号,顺序表的长度 
bool findPMod(SeqList &L,char inputPMod[10],int len)
{//记录索引int index; //1.遍历顺序表 for(int i=0;i<len;i++){//2.将要查找的型号与顺序表里的型号进行对比int result=strcmp(inputPMod,L.p[i].PMod);//3.判断:result==0代表找到了 if(result==0){//记录索引	index=i;	printf("手机型号为OPPOR30的手机存在 \n");L.p[index].PPri=L.p[index].PPri+100;printf("手机型号为OPPOR30的手机价格增加100元为%d元 \n",L.p[index].PPri);return true;//找到了直接跳出函数 }}//4.走到这儿说明没找到printf("手机型号为OPPOR30的手机不存在 \n");return false;} //插入商品的函数:需要顺序表,顺序表长度,商品的价格 
/*思路:商品已经按照递增排好序了,新增的商品插入后也要满足升序,只需要找到第一个比新增的商品价格大的商品,然后在这个商品前一个位置插入这个新增的商品即可*/
void insertList(SeqList &L,int len,double price) //最后长度发生改变 
{if(len<0||len>=MaxSize) //越界判断 {printf("长度会越界,无法插入商品");return;} //1.定义一个变量,记录新增的商品要插入的位置(初始值赋值顺序表最后的位置-->加长后最后的位置)int place=len;//2.遍历顺序表,找第一个比新增的商品价格大的商品for(int i=0;i<len;i++){if(L.p[i].PPri>price) //没走if代表新手机价格不小于已有手机的价格,无需改变位置 {//2.1找到了第一个比新增的商品价格大的商品,该位置就是新手机要插入的位置 place=i;//2.2找到了第一个即可。就可以跳出循环 break; }} //3.把place后面的元素后移一个位置//j>place->不带等号,带等号的话当j为place时就会被j-1(上一个)的覆盖,place上就不是空的了 for(int j=len;j>place;j--){L.p[j]=L.p[j-1];}//4.place上的位置进行赋值strcpy(L.p[place].PMod,"OPPOR20");L.p[place].PPri=1350;L.p[place].PNum=20;//5.顺序表长度加1L.length++; //加一后要在MaxSize 10内,可以做判断防止长度越界 
}     //修改商品的函数:需要顺序表,顺序表长度,商品的价格 
void changeList(SeqList &L,int len,double price)
{//1.遍历顺序表 for(int i=0;i<len;i++){//2.如果有与查找的价格一样,走if语句 if(L.p[i].PPri==price){//3.修改库存量 L.p[i].PNum=20;printf("手机型号为%s,价格为%d元,库存量为%d个 \n", L.p[i].PMod , L.p[i].PPri , L.p[i].PNum);//4.跳出函数 return;}}//5.走到这儿说明顺序表中没有要查找的价格->插入printf("价格为%.2f元的手机不存在,随后添加致库存 \n",price); //注:price为浮点型,输出要用%f,不是%d,不然输出有误 //6.插入手机信息insertList(L,len,price); 
}  //遍历手机信息的函数
void ouputPhoInfo(SeqList L)
{printf("手机具体信息如下(按照价格升序排序):\n");for(int i=0;i<L.length;i++) //别用len ???{printf("手机型号为%s,价格为%d元,库存量为%d个 \n", L.p[i].PMod , L.p[i].PPri , L.p[i].PNum);	}
} //求总价格的函数
double price(SeqList L,double &charge)
{printf("请输入要购买的手机型号的标号:");int number; //记录手机型号 scanf("%d",&number);switch(number){case 1 : charge=charge+L.p[0].PPri; break;case 2 : charge=charge+L.p[1].PPri; break;case 3 : charge=charge+L.p[2].PPri; break;case 4 : charge=charge+L.p[3].PPri; break;default : printf("输入的手机型号不存在"); break;}return charge;
} //结算最终总价格的函数
double allPrice(SeqList L,double &charge)
{//1.输出手机型号对应的标号printf("OPPOR30的标号为1,OPPOR15的标号为2,OPPOR20的标号为3,OPPOR10的标号为4 \n"); //2.输入要购买的手机型号对应的标号,由于不知道要输入几个while(true){//3.判断是否继续购买int count;//记录是否购买 printf("请问是否继续购买? 1.是 2.否(输入标号即可) \n");scanf("%d",&count);if( count==1 ){//4.走这儿说明继续买,调用求总价格的函数charge=price(L,charge); }else if( count==2){//5.走这儿说明不买了,跳出循环break; }else{//6.输入有误printf("输入的标号有误 \n"); }} //7.返回最终总价格return charge; 
} //主函数 
int main()
{//1.创建一个顺序表SeqList L;//2.初始化一个顺序表InitList(L);//printf("手机型号为%s,价格为%d元,库存量为%d个 \n", L.p[0].PMod , L.p[0].PPri , L.p[0].PNum);//不是L.p[0].PMod[10]//3.记录顺序表的长度int len=L.length;//4.输出初始手机的全部信息 ouputPhoInfo(L);printf("------------------------------------------------------------- \n"); //分隔线 //5.录入型号char inputPMod[10]="OPPOR30";//6.调用方法判断该手机型号是否存在findPMod(L,inputPMod,len);printf("------------------------------------------------------------- \n"); //分隔线//7.处理价格为1350的商品double price=1350;changeList(L,len,price);//8.调用遍历手机信息的函数 ouputPhoInfo(L);printf("------------------------------------------------------------- \n"); //分隔线//9.调用结算最终总价格的函数 double charge=0; //记录最终价格,一开始为0 charge=allPrice(L,charge); printf("最终总价格为%.2f元",charge); return 0;
}
/*只有编译成功了,运行结果才会按照新的代码进行,否则按照未编译前的进行*/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTTP(3)】(状态码,https)

【认识状态码】 状态码最重要的目的&#xff0c;就是反馈给浏览器:这次请求是否成功&#xff0c;若失败&#xff0c;则出现失败原因 常见状态码: 200:OK&#xff0c;表示成功 404:Not Found&#xff0c;浏览器访问的资源在服务器上没有找到 403:Forbidden&#xff0c;访问被…

springboot系列--web相关知识探索三

一、前言 web相关知识探索二中研究了请求是如何映射到具体接口&#xff08;方法&#xff09;中的&#xff0c;本次文章主要研究请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、…

【案例】距离限制模型透明

开发平台&#xff1a;Unity 2023 开发工具&#xff1a;Unity ShaderGraph   一、效果展示 二、路线图 三、案例分析 核心思路&#xff1a;计算算式&#xff1a;透明值 实际距离 / 最大距离 &#xff08;实际距离 ≤ 最大距离&#xff09;   3.1 说明 | 改变 Alpha 值 在 …

stm32f103调试,程序与定时器同步设置

在调试定时器相关代码时&#xff0c;注意到定时器的中断位总是置1&#xff0c;怀疑代码有问题&#xff0c;经过增大定时器的中断时间&#xff0c;发现定时器与代码调试并不同步&#xff0c;这一点对于调试涉及定时器的代码是非常不利的&#xff0c;这里给出keil调试stm32使定时…

自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)

文章目录 一、 前言二、新建工程&#xff08;以51单片机流水灯为例&#xff09;2.1 打开软件2.2 建立新工程2.3 创建原理图2.4 不创建PCB布版设计2.5 创建成功2.6 添加元器件2.7 原理图放置完成2.8 编写程序&#xff0c;进行仿真2.9 仿真 三、常用元器件图示和功能介绍3.1 元件…

【回眸】Tessy 单元测试软件使用指南(四)常见报错及解决方案与批量初始化的经验

前言 分析时Tessy的报错 1.fatal error: Tricore/Compilers/Compilers.h: No such file or directory 2.error: #error "Compiler unsupported" 3.warning: invalid suffix on literal;C11 requires a space between literal and string macro 4.error: unknown…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习01(环境准备)

1 准备工作 由于创建数据中心需要安装很多服务器&#xff0c;这些服务器要耗费很所物理物理计算资源、存储资源、网络资源和软件资源&#xff0c;作为穷学生只有几百块的n手笔记本&#xff0c;不可能买十几台服务器来搭建数据中心&#xff0c;也不愿意跑实验室&#xff0c;想躺…

文件上传之%00截断(00截断)以及pikachu靶场

pikachu的文件上传和upload-lab的文件上传 目录 mime type类型 getimagesize 第12关%00截断&#xff0c; 第13关0x00截断 差不多了&#xff0c;今天先学文件上传白名单&#xff0c;在网上看了资料&#xff0c;差不多看懂了&#xff0c;但是还有几个地方需要实验一下&#…

SpringBoot整合异步任务执行

同步任务&#xff1a; 同步任务是在单线程中按顺序执行&#xff0c;每次只有一个任务在执行&#xff0c;不会引发线程安全和数据一致性等 并发问题 同步任务需要等待任务执行完成后才能执行下一个任务&#xff0c;无法同时处理多个任务&#xff0c;响应慢&#xff0c;影响…

VirtualBox+Vagrant快速搭建Centos7系统【最新详细教程】

VirtualBoxVagrant快速搭建Centos7系统 &#x1f4d6;1.安装VirtualBox✅下载VirtualBox✅安装 &#x1f4d6;2.安装Vagrant✅下载Vagrant✅安装 &#x1f4d6;3.搭建Centos7系✅初始化Vagrantfile文件生成✅启动Vagrantfile文件✅解决 vagrant up下载太慢的问题✅配置网络ip地…

咸鱼sign逆向分析与爬虫实现

目标&#xff1a;&#x1f41f;的搜索商品接口 这个站异步有点多&#xff0c;好在代码没什么混淆。加密的sign值我们可以通过搜索找到位置 sign值通过k赋值&#xff0c;k则是字符串拼接后传入i函数加密 除了开头的aff…&#xff0c;后面的都是明文没什么好说的&#xff0c;我…

SysML案例-电磁轨道炮

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 图片示例摘自intercax.com&#xff0c;作者是Intercax公司总裁Dirk Zwemer博士。

C题(六) 1到 100 的所有整数中出现多少个数字9

场景&#xff1a;编写程序数一下 1到 100 的所有整数中出现多少个数字9 控制循环的变量不可以随意改动&#xff01;&#xff01;&#xff01; 控制循环的变量不可以随意改动&#xff01;&#xff01;&#xff01; 控制循环的变量不可以随意改动&#xff01;&#xff01;&#x…

看480p、720p、1080p、2k、4k、视频一般需要多大带宽呢?

看视频都喜欢看高清&#xff0c;那么一般来说看电影不卡顿需要多大带宽呢&#xff1f; 以4K为例&#xff0c;这里引用一位网友的回答&#xff1a;“视频分辨率4092*2160&#xff0c;每个像素用红蓝绿三个256色(8bit)的数据表示&#xff0c;视频帧数为60fps&#xff0c;那么一秒…

数据结构--二叉树的顺序实现(堆实现)

引言 在计算机科学中&#xff0c;二叉树是一种重要的数据结构&#xff0c;广泛应用于各种算法和程序设计中。本文将探讨二叉树的顺序实现&#xff0c;特别是堆的实现方式。 一、树 1.1树的概念与结构 树是⼀种⾮线性的数据结构&#xff0c;它是由 n(n>0) 个有限结点组成…

C#串口温度读取

背景&#xff1a;每天学点&#xff0c;坚持 要安装好虚拟串口和modbus poll&#xff0c;方便调试&#xff08;相关资源在文末&#xff0c;也可以私信找我要&#xff09; 传感器部分使用的是达林科技的DL11B-MC-D1&#xff0c;当时42软妹币买的&#xff08;官网上面有这个传感…

若依--文件上传前端

前端 ry的前端文件上传单独写了一个FileUpload.Vue文件。在main.js中进行了全局的注册&#xff0c;可以在页面中直接使用文件上传的组件。全局导入 在main.js中 import 组件名称 from /components/FileUpLoadapp.compoent(组件名称) //全局挂载组件在项目中使用 组件命令 中…

828华为云征文|华为云 Flexus X 实例之家庭娱乐中心搭建

话接上文《828华为云征文&#xff5c;华为云Flexus X实例初体验》&#xff0c;这次我们利用手头的 Flexus X 实例来搭建家庭影音中心和密码管理环境。 前置环境 为了方便小白用户甚至运维人员&#xff0c;我觉得现阶段的宝塔面板 和 1Panel 都是不错的选择。我这里以宝塔为例…

GPTQ vs AWQ vs GGUF(GGML) 速览和 GGUF 文件命名规范

简单介绍一下四者的区别。 参考链接&#xff1a;GPTQ - 2210.17323 | AWQ - 2306.00978 | GGML | GGUF - docs | What is GGUF and GGML? 文章目录 GPTQ vs AWQ vs GGUF&#xff08;GGML&#xff09; 速览GGUF 文件命名GGUF 文件结构文件名解析答案 附录GGUF 文件命名GGUF 文件…

Resdis中关于字符串类型的基础命令

本文主要详解key-value中vaule为字符串类型的情况&#xff0c;value属于其他的数据类型不适应&#xff1b;有几个命令是通用命令 目录 1.set和get 2.keys 3.exists 4.del 5.expire 6.ttl 7.type 8.object encoding key 9.加减操作 10.字符串操作 11.命令小结 1.se…