基于ARM的餐厅点餐系统的设计与实现

基于ARM的餐厅点餐系统的设计与实现

系统简介

        本设计主要将 STM32F103ZET6 芯片作为无线订购系统主要控制芯片,分为顾客终端和厨师终端。顾客通过 LCD 显示屏浏览菜单并点击触摸屏选择自己所需菜单,并经过有线连接到 PC 端上位机,将订餐信息上传到餐厅内部数据库,实现数据更新和存储功能。同时点餐信息经过主蓝牙模块 HC-05 无线通信技术发送到厨师终端,厨师终端通过从蓝牙模块将菜单信息汇总到厨师终端显示屏幕上,然后厨师通过语音模块 LD3320 将处理过的菜单通过语音快速清除,完成餐厅点餐操作系统的整体功能。并经过多次测试,该系统的硬件模块功能和软件上位机及数据库数据的更新、存储功能已完成。

系统综述

        整个设计总体流程为:开始将硬件和软件准确连接,上电做准备工作,然后初始化硬件各个模块,顾客端界面打开,触屏点击选择菜单,菜单分上页和下页,选择完毕后,判断是否点击“确认”按钮,如果点击“确认”按钮,则通过主蓝牙发送,厨师端从蓝牙模块接收,将菜单传送到厨师端显示屏上,否则可以重新选择菜单。厨师端接收到菜单后,可以根据原材料的库存选择是否进行处理,如果原材料充足,厨师处理后,可以通过语音模块进行菜单清除,如果厨师选择不处理,可以进行反馈。最后将顾客菜单通过有线连接到点餐信息上位机上,进行菜单信息存储,物料剩余情况对比,更新,修改等操作,最终结束整个设计模块的工作。
在这里插入图片描述

系统流程

        本设计主要由五部分组成,分别为:STM32F103zet6战舰板控制板、TFT-LCD液晶显示器、蓝牙传输模块、语音模块、上位机。其中主控制器以 STM32F103zet6芯片作为主控模块,完成菜单点餐、信息传送和接收、信息确认等功能,保证点餐系统能够完整实现。TFTLCD显示屏运用Ili9341芯片进行管理的,主要是控制TFT-LCD显示屏上面显示点餐菜单信息、菜单确认信息、菜单传送信息(仅限于与蓝牙一定距离内);蓝牙传输模块hc-05实现客户方和厨师方之间的相接,进行点餐信息传达,完成菜单的传送、接收功能。语音模块LD3200是实现厨师端将处理过的菜单,通过语音将其菜单进行取消,更便于厨师端处理菜单,完成菜单处理过程。上位机实现餐厅管理员登录和密码修改功能,连接下位机配置环境、查询历史菜单、消费菜品等功能。
在这里插入图片描述

材料

硬件材料

  • 两块正点原子战舰V3开发板(带显示屏)
  • 两块HC05蓝牙模块
  • LD3320语音模块

软件材料

  • Keil 5
  • VS2017
  • MySQL数据库

展示视频

下位机视频

基于ARM的餐厅点餐系统下位机

上位机视频

基于ARM的餐厅点餐系统的设计与实现上位机

制作

        下位机使用的芯片是STM32F103ZET6,软件使用的是Keil,语言是C。

硬件连接

  1. LD3320语音模块连接
    在这里插入图片描述
  2. 客户端蓝牙连接USART3
  3. 厨师端蓝牙连接USART1
  4. 上位机连接客户端硬件(T口线。跳线帽要插上)

下位机制作

        本系统是以Cortex-M3 STM32F103zet6为主要控制芯片设计的餐厅点餐系统。硬件各个模块连接主要通过 USB串行口连接电脑电源给STM32F103zet6芯片供电,然后运用杜邦线将蓝牙主传输模块HC-05与顾客端控制器进行连接,控制点餐菜单的确认和发送。蓝牙从模块与厨师端控制器进行连接,将传输信息实时显示在TFTLCD液晶显示屏上,同时将语音模块也连接起来,两蓝牙之间可以进行无线菜单通信,并将顾客菜单信息传送到上位机,同时控制实时时钟将菜单点餐时间同步上传,组成完整的模拟餐厅点餐硬件系统。全部体系的硬件和软件系统测试是经由与PC机连线相结合的方法来完成的。软件通过运用Keil5软件进行C语言代码编写,编译完成之后通过USB转TTL串口调试工具,进行一键下载将程序烧录在STM32F103zet6芯片上,从STM32F103zet6派生的引脚连接到硬件外围设备,控制各部件正常工作。

在这里插入图片描述

蓝牙连接

        本设计核心就是使用蓝牙完成两个板子的菜单的信息传递功能,顾客进行点餐,与其相连的主蓝牙模块将菜单数据发送出去,然后通过与厨师端连接的从蓝牙模块的接收,将点餐的菜单显示到厨师端显示屏上,完成主从蓝牙模块的菜单通讯功能。

本设计通过AT指令设置将两蓝牙上电自动配对。 参考https://blog.csdn.net/weixin_42320020/article/details/88562539

AT    					进入AT指令模式
AT+RESET   				重启设备
AT+ORGL    				恢复默认状态
AT+ADDR?   			获取模块蓝牙地址(记下来像下边那样 两个)
AT+ROLE?   			查询模块角色
AT+ROLE=1或者AT+ROLE=0  一个设置为主角色  一个设置位从角色
AT+BIND=2018,12,140851  绑定蓝牙地址 注意是逗号  两个设备分别绑定对方地址
AT+CMODE=0   			两个设备都设置为指定蓝牙连接模式
AT+LINK=2018,12,141598  主设备去连接从设备 连接蓝牙地址  注意逗号

模块1+ADDR:2018:12:140851(不同设备ADDR地址不同,此地址为演示地址)
模块2+ADDR:2018:12:141598

按顺序输入以上指令即可。
请务必保证两蓝牙连接成功!!!代码中没有关于蓝牙的设置。

语音模块设计

        LD3320工作时,首先开始语言的ASR识别过程,由微程序控制器发出复位标志RSTB和中断标识。为了防止由于硬件问题导致识别的不正常,需要多次启动ASR识别过程来保证语言模块的识别过程可以正确的运行。然后进行初始化ASRLD_AsrStart()识别模块,初始化每个寄存器。将要识别的菜名词语添加到LD3320芯片识别列表中,发动识别并准备中断回应功能,以开启中断启用程序。若是芯片内部不正常,就重启语音识别芯片,重新初始化LD3320位置寄存器的识别流程。通过BA寄存器存储点餐菜单,并在数字寄存器和C5寄存器中搜索答案与原有寄存器存储的菜名词语进行比对,找到正确答案,完成菜单识别流程。

在这里插入图片描述
语音识别部分代码:

static uint8 LD_AsrAddFixed(void)
{
	uint8 k, flag;
	uint8 nAsrAddLength;
	#define DATE_A 9    //数组二维数值
	#define DATE_B 23		//数组一维数值
	//添加关键词,用户修改
	uint8  sRecog[DATE_A][DATE_B] = {
	 			"qing zheng pang xie",\
				"yang rou chuan",\
				"mu tang dan gao",\
				"la zi ji kuai",\
				"xi hong shi chao ji dan",\
				"qing cai ji dan mian",\
				"fu shou yu",\
				"zi shu zhou"\
		
	};	
	uint8  pCode[DATE_A] = {
	 															CODE_QZ,	\
																CODE_YR,	\
																CODE_MT,\
																CODE_LA,	\
																CODE_XH,		\
																CODE_QC, \
																CODE_FS, \
																CODE_ZS \
	};	//添加识别码,用户修改
	flag = 1;
	for (k=0; k<DATE_A; k++)
	{			
		if(LD_Check_ASRBusyFlag_b2() == 0)
		{
			flag = 0;
			break;
		}

		LD_WriteReg(0xc1, pCode[k] );
		LD_WriteReg(0xc3, 0);
		LD_WriteReg(0x08, 0x04);
		LD3320_delay(1);
		LD_WriteReg(0x08, 0x00);
		LD3320_delay(1);

		for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
		{
			if (sRecog[k][nAsrAddLength] == 0)
				break;
			LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
		}
		LD_WriteReg(0xb9, nAsrAddLength);
		LD_WriteReg(0xb2, 0xff);
		LD_WriteReg(0x37, 0x04);
	}	 
	return flag;
}
下位机整体逻辑软件设计

客户端点餐->厨师端收到->语音消除

整体逻辑部分代码:

void LD3320_main(void)
{
	LD3320_init();	  
	LCD_Clear(WHITE);	
	nAsrStatus = LD_ASR_NONE;//初始状态:没有在作ASR
	while(1)
	{
		sprintf(k_id,"%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d",bz[0],bz[1],bz[2],bz[3],bz[4],bz[5],bz[6],bz[7],bz[8],bz[9],bz[10],bz[11],bz[12],bz[13],bz[14],bz[15],bz[16],bz[17],bz[18],bz[19]);
		//LCD_ShowString(0,5,210,16,16,k_id);//点菜状态
		LCD_ShowString(0,5,210,16,16,"  Welcome come !");
		display();
		switch(nAsrStatus)
		{
			case LD_ASR_RUNING:
			case LD_ASR_ERROR:		
					break;
			case LD_ASR_NONE:
					nAsrStatus=LD_ASR_RUNING;
					if (RunASR()==0)//启动一次ASR识别流程:ASR初始化,ASR添加关键词语,启动ASR运算
					{		
						nAsrStatus = LD_ASR_ERROR;
					}
					break;
			case LD_ASR_FOUNDOK:
					 nAsrRes = LD_GetResult( );//一次ASR识别流程结束,去取ASR识别结果										 
					 //printf("\r\n识别码:%d", nAsrRes);			 
					 switch(nAsrRes)		   			//对结果执行相关操作,客户修改
						{
							case CODE_QZ:					
										if(bz[1]>0)bz[1]--;
															 break;
							case CODE_YR:	 					
										if(bz[2]>0)bz[2]--;
															 break;
							case CODE_MT:				
											if(bz[3]>0)bz[3]--;
															break;
							case CODE_LA:				
											if(bz[4]>0)bz[4]--;
															break;
							case CODE_XH:					
											if(bz[5]>0)bz[5]--;
															break;
							case CODE_QC:					
											if(bz[6]>0)bz[6]--;
															break;
							case CODE_FS:				
											if(bz[7]>0)bz[7]--;
															break;
							case CODE_ZS:				
											if(bz[8]>0)bz[8]--;
															break;
							default:break;
						}	
						LCD_Clear(WHITE);	
					nAsrStatus = LD_ASR_NONE;
					break;
			case LD_ASR_FOUNDZERO:
			default:
					nAsrStatus = LD_ASR_NONE;
					break;
			}//switch
		//开发板测试
		Board_text(nAsrRes );
	}// while
}

数据库制作

        数据库采用的是MySQL数据库。本设计上位机进行的数据更新需要连接名为本地服务器,数据库为“vs”。其中密码登陆界面和修改界面建立表“keytable”,包括数据类型name表示管理员用户名,PASSWORD表示餐厅管理员设置的密码;在工作区更新数据库饭菜品种时建立表“menu”,其中包含数据类型price表示每个对应菜品的价格,name
是菜的名字,Material表示做此菜品需要消耗的主要原材料,num便是该菜品耗损原材料所必要的数目;同时历史点菜记录建立表“Sales”,其中数据类型time表示顾客点餐菜单时间,name表示点餐菜名;建立表“Surplus”表示剩余原料,提供管理员有效的餐厅原材料储存情况,其中数据类型num表示剩余材料数量,name表示剩余材料名称;sumfood表就是餐厅顾客每个菜品点餐的总数量,num表示每个菜品点餐总数量,name表示菜品名称;建立表“shop”表示购物建议,num表示要进材料的数量,即也是消费的总数量,name表示要进材料的名称。同时在点击“已进货”选项时,剩余材料就会更新到初始原材料总的数量表示已进货。当点击“更新数据库”时,全表的数据也会更新,完成数据库数据的修改、存储功能。

数据库
在这里插入图片描述
数据库表
在这里插入图片描述在这里插入图片描述

上位机制作

        软件设计主要通过Visual Studio 2017软件编写餐厅管理系统上位机,连接数据库名字为“vs”。餐厅点餐管理系统上位机的设计首先需要进行闪屏欢迎界面,进行账号密码登陆,如果管理员名称和密码正确,就进入餐厅菜单主界面,而主界面又分为显示区和数据区,显示栏主要包括选择按钮,选择要查询的项目,如查询餐厅最近销售账单、最受欢迎菜品、历史账单等。而数据区主要完成数据的修改、更新操作。即当下位机顾客端进行点菜,消耗了餐厅原材料,通过有线连接到上位机,进行数据库数据的比对,对原有的数据需要进行增加、减少等更新操作,并最终显示出来,这就是上位机的工作区所承担的责任。完成整个系统操作,就结束了上位机软件的设计工作。

在这里插入图片描述

串口配置连接设计

        PC端和单片机数据传输需要通过串口连接。首先需要通过函数 toolstripTextBox1.Text 进行串口连接设置,检测串口连接所需的端口,可以进行端口选择,本设计连接的端口为“COM8”端口,设置的波特率与主顾客点餐端的波特率保持一致,为115200。当进行串口连接时,点击“打开串口”,如果连接成功,就提示“串口连接成功”,若是连接失败,就会提示“连接失败”,需要重新连接。假如连接出错,点击“断开连接”,窗口会提示“确定断开连接”如果确定,点击“是”,如果不确定,点击“否”就可以完成串口配置过程。
串口设计部分代码:

private void toolStripTextBox1_Click(object sender, EventArgs e)
{
    if (toolStripTextBox1.Text == "打开串口")
    {
        try
        {
            serialPort1.PortName = toolStripComboBox1.Text;
            serialPort1.BaudRate = Convert.ToInt32(toolStripComboBox2.Text);
            serialPort1.Open();
            toolStripTextBox1.Text = "关闭串口";
            MessageBox.Show("串口连接成功!");
        }
        catch
        {
            MessageBox.Show("连接串口失败!请检查端口!", "错误!");
        }                
    }
    else
    {
        if (MessageBox.Show("确认断开连接?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
        {
            try
            {
                serialPort1.Close();
                toolStripTextBox1.Text = "打开串口";
            }
            catch
            {
                MessageBox.Show("连接关闭失败!请检查端口!", "错误!");
            }
        }
    }                
}
连接数据库

连接数据库部分代码:

string Connectstr = "Data Source=.;Initial Catalog=vs;Integrated Security=True";
mysql = new SqlConnection(Connectstr);
SqlCommand Mycomm = new SqlCommand("Select * From keytable", mysql);
mysql.Open();
int intcont = Convert.ToInt32(Mycomm.ExecuteScalar());
mysql.Close();
if (intcont > 0)
{
    mysql.Open();
    SqlDataReader dr = Mycomm.ExecuteReader();
    if (dr.Read())
    {
        f1.Password = dr["password"].ToString().Trim();
        //label5.Text = f1.Password;
    }
    dr.Close();
    mysql.Close();
}

更新数据库部分代码:

SqlCommand Mycomm1 = new SqlCommand("update Surplus set num = 20 where name = '" + name + "'", mysql);
mysql.Close();
mysql.Open();
int i = Mycomm1.ExecuteNonQuery();
mysql.Close();
Mycomm1 = new SqlCommand("update Surplus set num = 5 where name ='鱼'", mysql);
mysql.Open();
Mycomm1.ExecuteNonQuery();
mysql.Close();
Mycomm1 = new SqlCommand("update Surplus set num = 5 where name = '紫薯'", mysql);
mysql.Open();
Mycomm1.ExecuteNonQuery();
mysql.Close();
上位机整体逻辑

        软件上位机功能实现有餐厅点餐管理员密码登陆,同时也能够进行密码更改。完成管理员密码登陆后,进行串口配置,连接成功后,才算完成了PC端与单片机的连接。然后进行剩余材料,历史菜单记录,购物建议,点菜总量、销售记录五个项目的查询,更新数据库操作。在此过程中,由于有历史菜单的记录,导致近期菜单记录需要进行搜索才能看到,因此在管理中加入了清空历史记录功能,可以更明确地看到最近餐厅的消费情况。最终完成数据库修改、增添、更新功能。

整体逻辑部分代码:

if (comboBox1.Text == "购物建议")
{
    int[] nd = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 };
    for (int m = 0; m < 8; m++)
    {
        string name = "青青子衿";
        if (m == 0) { name = "螃蟹"; }
        else if (m == 1) { name = "羊肉"; }
        else if (m == 2) { name = "鸡蛋"; }
        else if (m == 3) { name = "鸡肉"; }
        else if (m == 4) { name = "西红柿"; }
        else if (m == 5) { name = "面"; }
        else if (m == 6) { name = "鱼"; }
        else if (m == 7) { name = "紫薯"; }
        
        SqlCommand Mycomm = new SqlCommand("Select * From shop where name = '" + name + "'", mysql);
        mysql.Close();
        mysql.Open();
        int intcont = Convert.ToInt32(Mycomm.ExecuteScalar());
        mysql.Close();
        if (intcont >= 0)
        {
            mysql.Open();
            SqlDataReader dr = Mycomm.ExecuteReader();
            if (dr.Read())
            {
                nd[m] = Convert.ToInt16(dr["num"]);
                nd[m] = nd[m] + id2[m];
                id2[m] = 0;
                //textBox2.AppendText(nd[m].ToString() + " ");
            }
            dr.Close();
            mysql.Close();
            //textBox1.Text = "update shop set num = " + nd[m] + " where name = '" + name + "'";
            SqlCommand Mycomm1 = new SqlCommand("update shop set num = " + nd[m] + " where name = '" + name + "'", mysql);
            //label6.Text = textBox3.Text.Trim();
            mysql.Open();
            int i = Mycomm1.ExecuteNonQuery();
            mysql.Close();
        }
        else
        {
            MessageBox.Show("查询失败", "错误!");
        }
    }
}

总结

        在本设计中,完成了顾客通过LCD显示屏浏览菜单,并通过手指触摸点击屏幕选择菜单点餐,将点餐菜单消息传送到上位机,进行上位机连接,查询餐厅历史点餐记录,餐厅原材料的存储以及余额情况,根据餐厅销售状况,提供购买原材料建议完成数据库的数据更新和储存功能。同时顾客点餐信息通过主蓝牙模块发送到厨师端,厨师终端通过从蓝牙模块的接收,将点餐信息汇总到显示屏上,并通过语音模块将处理的菜单报出菜名进行清除,完成顾客菜单处理过程。本设计完成了该餐厅点餐系统简单的基础功能,还存在着需要完善提高的地方。例如,顾客终端的选择菜单界面,需要通过更精密的计算,将选择菜单按钮进行优化,实现点击菜名就可以完成菜名选择功能。同时顾客终端和厨师终端菜单的显示也有限,不能进行超过两页菜名的显示,需要进一步完善菜名显示,达到能够多页显示菜名,丰富餐厅菜单的选择。餐厅两终端的通讯距离也需要进一步改善,需要通过选择WIFI或者nrf2401增大通讯距离,能够使该系统应用到大型餐厅,确保菜单传输通信快速、高效。同时在软件设计中,界面只完成了简单的基本连接、查询功能,只有餐厅信息,没有与顾客的互动。在这里可以添加餐厅与客户的信息交流平台,提供客户反馈平台,接收客户对餐厅合理性意见等问题。该系统还存在着一些其它需要完善改进的地方,在今后的学习过程中,需要更全面、更细致的去完善。

资料源码地址https://download.csdn.net/download/weixin_42320020/88790551

禁止转载!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

80.如何评估一台服务器能承受的最大TCP连接数

文章目录 一、一个服务端进程最多能支持多少条 TCP 连接&#xff1f;二、一台服务器最大最多能支持多少条 TCP 连接&#xff1f;三、总结 一个服务端进程最大能支持多少条 TCP 连接&#xff1f; 一台服务器最大能支持多少条 TCP 连接&#xff1f; 很多朋友可能第一反应就是端…

vue3页面跳转产生白屏,刷新后能正常展示的解决方案

可以依次检查以下问题&#xff1a; 1.是否在根组件标签最外层包含了个最大的div盒子包裹内容。 2.看看是否在template标签下面直接有注释&#xff0c;如果有需要把注释写到div里面。&#xff08;即根标签下不要直接有注释&#xff09; 3.在router-view 中给路由添加key标识。 …

DevOps落地笔记-06|代码预检查:提高入库代码质量的神兵利器

上一讲主要介绍了从软件开发的需求阶段就要关注非功能需求以及如何有效关注非功能需求&#xff0c;希望你对非功能需求引起重视&#xff0c;对软件的质量引起重视。除了对非功能需求的关注&#xff0c;代码本身的质量也是决定软件质量的关键因素&#xff0c;比如&#xff1a;代…

Docker中配置MySql环境

目录 一、简单安装 1. 首先从Docker Hub中拉取镜像 2. 启动尝试创建MySQL容器&#xff0c;并设置挂载卷。 3. 查看mysql8这个容器是否启动成功 4. 如果已经成功启动&#xff0c;进入容器中简单测试 4.1 进入容器 4.2 登录mysql中 4.3 进行简单添加查找测试 二、主从复…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

【操作系统·考研】文件系统

1.概述 文件系统(File System)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 严格来说&#xff0c;VFS并不是一种实际的FS&#xff0c;它只存在于内存中&#xff0c;不存在与任何外存空间中。 VFS在系统启动时建立&#xff0c;在系统关闭时消亡。 2.结…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容&#xff0c;需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具&#xff0c;用于检测vSphere环境中的潜在问题。当警报触发时&#xff0c;通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

2024斋月大促提前,跨境卖家请收好这份准备指南与大促策略

市场覆盖西欧、中东、东南亚、北非地区的跨境电商卖家注意了&#xff0c;2024年的斋月即将开启&#xff0c;较往年日期&#xff0c;今年提前了10天左右&#xff0c;斋月的第一天预测在3月11日星期一到来。 根据Google搜索数据可知&#xff0c;目前已经进入高频“斋月”搜索期&…

nginx刷新404问题

问题分析 在配置好 nginx 转发之后&#xff0c;发现页面能正常打开&#xff0c;但只要按 F5 刷新之后就会报 404。这是因为 web 单页面开发模式&#xff0c;只有一个 index.html 入口&#xff0c;其他路径是前端路由去跳转的&#xff0c;nginx 没有对应这个路径&#xff0c;然后…

安装GPU版本Pytorch(全网最详细过程)

目录 一、前言 二、安装CUDA 三、安装cuDNN 四、安装Anacanda 五、安装pytorch 六、总结 一、前言 最近因为需要安装GPU版本的Pytorch&#xff0c;所以自己在安装过程中也是想着写一篇博客&#xff0c;把整个过程记录下来&#xff0c;在整个过程中也遇到了不少的问题&a…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章&#xff1a;数据仓库概念 数据仓库&#xff0c;是为企业指定决策&#xff0c;提供数据支持的&#xff0c;可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

【Linux C | I/O模型】IO复用 | select、pselect函数详解(看完就会用了)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【Eclipse平台】2 Eclipse Workbench工作台介绍

Eclipse Workbench工作台介绍 本文介绍Eclipse工作台Workbench。 当工作台启动时&#xff0c;首先看到的是一个对话框&#xff0c;该对话框允许我们选择工作区的位置。工作区是存储工作的目录。现在&#xff0c;只需单击“确定”即可选择默认位置。 选择工作区位置后&#x…

LVGL部件4

一.列表部件 1.知识概览 2.函数接口 1.lv_list_add_btn lv_list_add_btn 是 LittlevGL&#xff08;LVGL&#xff09;图形库中的一个函数&#xff0c;用于向列表&#xff08;list&#xff09;对象中添加一个按钮&#xff08;button&#xff09;。 函数原型为&#xff1a;lv_ob…

数据库复试-SQL数据定义与数据查询语句

数据库复试-SQL数据定义与数据查询语句 使用mysql数据库代替之前的sqlserver (完全使用命令行进行操作) 一&#xff1a;登录数据库登录与创建 mysql -uroot -p 123456 CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY, /*主键约束*/Sname CHAR(20) UNIQUE, /*唯一值*/Ssex …

关于标准那些事——第十篇 符号标准

“符号”几乎是无处不在的&#xff0c;无论是生活、学习还是工作中&#xff0c;每个人每天都会碰到&#xff0c;只是我们没有意识到她的存在。正因如此&#xff0c;符号标准在不同场景、不同领域都发挥着统一认知&#xff0c;规范行为的作用&#xff0c;其简约、易用和一致性的…

分布式事务(四)——TCC补偿模式解决方案

系列目录&#xff1a; 《分布式事务&#xff08;一&#xff09;—— 事务的基本概念》 《分布式事务&#xff08;二&#xff09;—— CAP和Base理论》 《分布式事务&#xff08;三&#xff09;—— 两阶段提交解决方案&#xff08;2PC&#xff09;》 一、常见分布式事务解决…

轻型民用无人机驾驶航空器安全操控——理论考试多旋翼部分笔记

今天已经可以在线考取轻型民用无人机驾驶航空器执照了&#xff0c;所以我也在在线观看完视频之后整理了如下的知识点&#xff0c;所有知识点全部来自UOM平台。 目录 航空器知识 &#xff08;1&#xff09;多旋翼民用无人驾驶航空器螺旋桨的作用 &#xff08;2&#x…

仰暮计划|“从米票、肉票、糖果票到肥皂票、煤票、棉花票等,生活里头的方方面面都能用粮票买到”

口述人&#xff1a;牛翠英(女) 整理人&#xff1a;霍芝冉 口述人基本信息&#xff1a;现68岁&#xff0c;河南省安阳市北关区霍家村人&#xff0c;现居河南安阳市区。 奶奶一生辛劳&#xff0c;操持家务&#xff1b;亲眼见证了时代变迁&#xff0c;社会发展&#xff0c;…