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

题目:

代码:

#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.rhkb.cn/news/439457.html

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

相关文章

如何快速切换电脑的ip地址

在当今的数字化时代&#xff0c;IP地址作为网络身份的重要标识&#xff0c;其重要性日益凸显。无论是出于保护个人隐私的需要&#xff0c;还是为了访问特定的网络服务等&#xff0c;快速切换电脑的IP地址已成为许多用户的迫切需求。本文将为你介绍几种实用的方法&#xff0c;帮…

草莓成熟度检测数据集 3700张 草莓成熟 带标注voc yolo 3类

草莓成熟度检测数据集 3700张 草莓成熟 带标注voc yolo 草莓成熟度检测数据集 名称 草莓成熟度检测数据集 (Strawberry Maturity Detection Dataset) 规模 图像数量&#xff1a;共3713张图像。类别&#xff1a;分为三个级别&#xff1a;未熟 (raw)、半熟 (turning) 和 成熟…

01_SQLite

文章目录 ** SQLite 存储各类和数据类型 **** SQLite 五种亲缘类型** SQLite 创建数据表删除数据表插入数据信息从数据表中获取数据&#xff0c;以结果表的形式返回数据&#xff08;结果集&#xff09;updatedistinctorder bygroup byhaving触发器删除一个触发器&#xff08;tr…

软件设计师——数据结构

本博文所有内容来自于B站up主zst_2001 目录 时间复杂度 常规数据结构 链表 栈与队列 ​编辑 串 数组 树 卡特兰数&#xff1a; 平衡二叉树 哈夫曼 图 AOV 排序 顺序 折半 哈希 时间复杂度 常规数据结构 链表 栈与队列 串 找i位置前面的字符串&#xff0c…

TIM输入捕获及其应用场景

一&#xff0c;TIM输入捕获介绍&#xff08;IC&#xff08;Input Capture&#xff09;输入捕获&#xff09; 定义&#xff1a;输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变&#xff08;如上升沿或下降沿&#xff09;时&#xff0c;当前定时器的计数值&#xff0…

【Matlab案例】imageJ + matlab 实现物体轨迹追踪及路径彩色上色

我们经常看到一些文献中对细胞或者粒子的运动轨迹进行上色&#xff0c;不同的颜色对应着不同的时间。一纯色的轨迹实现起来很方便&#xff0c;彩色的轨迹如何实现呢&#xff1f;本文使用imageJ获取轨迹数据&#xff0c;使用matlab对轨迹进行上色。结果如下&#xff1a; 1. im…

酒店新科技,飞睿智能毫米波雷达人体存在感应器,智能照明创新节能新风尚

在这个日新月异的时代&#xff0c;科技正以未有的速度改变着我们的生活。从智能手机到智能家居&#xff0c;每一个细微之处都渗透着科技的魅力。而今&#xff0c;这股科技浪潮已经席卷到了酒店行业&#xff0c;为传统的住宿体验带来了翻天覆地的变化。其中&#xff0c;引人注目…

Linux驱动开发(速记版)--设备树

第五十二章 初识设备树 52.1 设备树介绍 设备树&#xff08;Device Tree&#xff09;是嵌入式系统和Linux内核中用于描述硬件的一种机制。 设备树概述 目的&#xff1a;描述硬件设备的特性、连接关系和配置信息。 优势&#xff1a;与平台无关&#xff0c;提高系统可移植性和可…

外贸网站怎么搭建对谷歌seo比较好?

外贸网站怎么搭建对谷歌seo比较好&#xff1f;搭建一个网站自然不复杂&#xff0c;但要想搭建一个符合谷歌seo规范的网站&#xff0c;那就要多注意了&#xff0c;你的网站做的再酷炫&#xff0c;再花里胡哨&#xff0c;但如果页面都是js代码&#xff0c;或者页面没有源代码内容…

相机基础概念

景深&#xff1a; 景深的定义 DOF:depth of filed 是指在摄影机镜头或其他成像器前沿能够取得清晰图像的成像所测定的被摄物体前后距离范围。光圈、镜头、及焦平面到拍摄物的距离是影响景深的重要因素。定义3&#xff1a;在镜头前方&#xff08;焦点的前、后&#xff09;有一…

【RISCV指令集手册】向量扩展v1.0

概述 从rvv 0.9说起 此前写过向量扩展0.9的阅读记录&#xff0c;三年已过&#xff0c;本以为不再参与RVV的相关开发&#xff0c;奈何造化弄人&#xff0c;旧业重操&#xff0c;真就世事难料呀。 总的来说1.0版本相比0.9版本的扩充了较多内容&#xff0c;但大部分为指令功能的…

Qt中使用QPainter绘制阴影

困扰了很久的问题&#xff0c;今天终于明白了如何绘制QGraphicDropShadowEffect同样效果的阴影&#xff0c;故写下这篇文章分享给大家。其方法是复制Qt源代码中QGraphicDropShadowEffect绘制实现的核心代码然后稍作修改实现&#xff0c;先看效果和封装过后的源代码&#xff1a;…

深度探索Kali Linux的精髓与实践应用

Kali Linux简介 Kali Linux作为全球网络安全领域的首选操作系统之一&#xff0c;其强大的功能性及广泛的适用范围令人瞩目。除了上述基础介绍外&#xff0c;让我们深入探究Kali Linux的几个关键特性及其在实际操作中的具体应用案例。 Kali工具集成&#xff1a;全面的安全工具…

计算机视觉——图像修复综述篇

目录 1. Deterministic Image Inpainting 判别器图像修复 1.1. sigle-shot framework (1) Generators (2) training objects / Loss Functions 1.2. two-stage framework 2. Stochastic Image Inpainting 随机图像修复 2.1. VAE-based methods 2.2. GAN-based methods …

【C++】“list”的介绍和常用接口的模拟实现

【C】“list”的介绍和常用接口的模拟实现 一. list的介绍1. list常见的重要接口2. list的迭代器失效 二. list常用接口的模拟实现&#xff08;含注释&#xff09;三. list与vector的对比 一. list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xf…

国庆普及模拟赛-5

题目链接&#xff1a; file:///C:/Users/Administrator/Desktop/%E4%B8%8B%E5%8F%91%E6%96%87%E4%BB%B61005/20241005.pdf T1&#xff1a; 题目分析&#xff1a;不需要进行模拟&#xff0c;想要获得分数最大化&#xff0c;只需要将大的数据相加&#xff0c;再减去小的数据。 …

C语言进阶版第16课—自定义类型:结构体

文章目录 1. 结构体类型的声明和初始化2. 结构体自引用3. 结构体内存对齐3.1 结构体内存对齐规则3.2 修改默认对齐数 4. 结构体传参4. 结构体实现位段5. 位段使用的注意事项 1. 结构体类型的声明和初始化 结构体在使用之前都要对其类型进行声明&#xff0c;关键字是struct&…

Pandas -----------------------基础知识(主要matplotlib知识)(七)

Dataframe变形 转置 T import pandas as pddata {2022: [10, 30, 15, 20], 2023: [40, 50, 36, 21]} df1 pd.DataFrame(data, index[q1, q2, q3, q4]) print("原始数据框&#xff1a;") print(df1)df2 df1.Tprint("转换后数据框&#xff1a;") print(df…

计算机视觉算法知识详解(含代码示例)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

FRP搭建内网穿透:云服务端 + 家用Linux/Windows主机【2024】

介绍 FRP是一个可以自己搭建内网穿透服务的开源项目&#xff0c;开源地址直达&#xff1a; FRP-GitHub 实际上frp由两个程序组成 ①frps:在服务端运行的程序 ②frpc:在客户端运行的程序 运作方式示意图如下 服务端 因为服务上使用了1Panel面板&#xff0c;直接在应用商店安…