【电子量产工具】5.页面系统

news2024/11/16 15:57:52

文章目录

  • 前言
  • 一、页面系统分析
  • 二、页面数据结构抽象
  • 三、底层代码 main_page.c
  • 四、页面管理器
  • 五、测试程序
  • 测试效果
  • 总结

前言

最近看了 电子量产工具 这个项目,本专栏是对该项目的一个总结。


一、页面系统分析

在这里插入图片描述
页面系统是指在软件应用或网站中,将功能和内容划分为不同的页面,并通过页面间的导航和交互来展示信息和实现用户操作的一种组织方式。

页面系统通常由多个页面组成,每个页面都有自己的功能和呈现内容。用户可以通过导航菜单、链接、按钮等方式在不同的页面之间进行切换和操作。

这里主要是编写 main page 主页面。

二、页面数据结构抽象

对于每一个页面,抽象出如下结构体,核心在于其中的 Run 函数
页面结构体中 ,描述了 页面的名字运行函数,以及指针 用于连接链表。

typedef struct PageAction {
	char *name;
	void (*Run)(void *pParams);
	struct PageAction *ptNext;
}PageAction, *PPageAction;

三、底层代码 main_page.c

  1. 实现 PageAction 结构体。
static PageAction g_tMainPage = {
	.name = "main",
	.Run  = MainPageRun,					//主页面的运行函数
};
  1. 运行函数
    我们先在运行函数里 打印行数,为 业务系统做准备。
static void MainPageRun(void *pParams)
{
	printf("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
}

四、页面管理器

  1. 中间的 页面管理层,起承上启下的作用:
  • 把下面的各个页面注册进来。
  • 上层可以选择并运行某个界面。
  1. 页面管理器用来管理页面,只需要实现 2 个函数:
  • PagesRegister: 把多个页面注册进链表。
  • Page(name):取出某个页面。
    在这里插入图片描述
  1. 将页面 注册进链表:
    这里由于页面肯定不止一个,可以注册多个页面。
    在这里插入图片描述
  2. 根据 名字 取出某个页面。
PPageAction Page(char *name)
{
	PPageAction ptTmp = g_ptPages;				//临时指针指向 头指针

	while (ptTmp)
	{
		if (strcmp(name, ptTmp->name) == 0)			//比较名字是否相同
			return ptTmp;
		ptTmp = ptTmp->ptNext;					//遍历链表
	}

	return NULL;
}

五、测试程序

int main(int argc, char **argv)
{
	PagesRegister();				//注册界面
	Page("main")->Run(NULL);		//运行 Run 函数
	return 0;	
}

测试效果

效果就是 打印出 Run 函数 的行号。
在这里插入图片描述


总结

总体来说,页面系统的代码并不复杂。 主要是为下面的 业务系统做铺垫。

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

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

相关文章

Linux基础服务8——cobbler批量装机

文章目录 一、基本了解1.1 配置文件1.2 数据目录1.3 日志文件1.4 常用命令 二、普通安装2.1 服务端操作2.2 客户端操作 三、定制安装3.1 手动安装3.2 脚本安装(推荐) 一、基本了解 cobbler简介: Cobbler是一个Linux服务器安装的服务&#xff…

Django_MVT(二)

目录 一、MVT简介 二、M-模型类 1. 定义模型类 2. 迁移 2.1 生成迁移文件命令如下: 2.2 执行迁移命令如下: 3. 数据基础操作 三、V-视图 1.定义视图 2.配置URLconf 访问服务器 四、T-模板 创建模板文件 定义模板 视图调用模板 视图调用模…

vue el-table的每行操作el-button添加单独的loading效果实现

vue el-table的每行操作el-button添加单独的loading效果实现 效果图&#xff1a;实现代码&#xff1a;结语 效果图&#xff1a; 实现代码&#xff1a; <tamplate><el-table :data"list" ><el-table-column fixed"right" label"操作&q…

Application Context的继承关系

Application Context他们关系很复杂&#xff0c;紫色是借口&#xff0c;浅绿色是抽象类&#xff0c;我们要创建继承&#xff0c;要创建实现。第一个class path代表未加载路径&#xff0c;rouces下都是未加载路径.FileSystem代表文件系统&#xff0c;代表则磁盘。 看看文件怎么写…

Gof23设计模式之装饰者模式

1.概述 定义 指在不改变现有对象结构的情况下&#xff0c;动态地给对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 例子 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐&#xff0c;可以额外附加鸡蛋、火腿、培根这些配菜&#xff0c;当然加…

抖音seo矩阵源码*开发搭建*代码打包部署(开源)分享

1一、 抖音seo矩阵源码开发搭建&#xff08;支持二开&#xff09;概述 抖音SEO矩阵指的是一系列通过搜索引擎优化&#xff08;SEO&#xff09;技术和策略来提升抖音账号在搜索结果中排名的方法和工具。在抖音上&#xff0c;用户可以通过搜索关键词来查找与其相关的视频和账号…

网络子系统1

网络子系统 1 ISO/OSI和TCP/IP参考模型 国际标准化组织&#xff09;设计了一种参考模型&#xff0c;定义了组成网络的各个层。该模型由7层组成&#xff0c;称为OSI&#xff08;Open Systems Interconnection&#xff0c;开放系统互连&#xff09;模型&#xff0c;如图所示。其…

Android耗电优化需要注意的要点

作者&#xff1a;小墙程序员 在应用开发中&#xff0c;耗电是我们需要关注的重点。但是&#xff0c;开始进行耗电优化时&#xff0c;我们常常感到无从下手。这篇文章将介绍耗电优化的相关要点&#xff0c;让我们优化时有一个方向。 传感器 大多数Android设备都内置传感器&…

【停用词】NLP中的停用词怎么获取?我整理了6种方法

文章目录 一、停用词介绍二、停用词应用场景2.1 提取高频词2.2 词云图 三、停用词获取方法3.1 自定义停用词3.2 用wordcloud调取停用词3.3 用nltk调取停用词3.3.1 nltk中文停用词3.3.2 nltk英文停用词 3.4 用sklearn调取停用词3.5 用gensim调取停用词3.6 用spacy调取停用词 一、…

select语句与CSP模型~Go进阶

select语句 select 是 Go 中的一个控制结构。select 语句类似于 switch 语句&#xff0c;但是select会随机执行一个可运行的case。如果没有case可运行&#xff0c;它将阻塞&#xff0c;直到有case可运行。 语法结构 select语句的语法结构和switch语句很相似&#xff0c;也有…

【UGUI学习笔记】Rect Transform

文章目录 Rect Transform锚点和轴心轴心点锚点 Rect Transform 锚点和轴心 在上图中&#xff0c;中心位置的蓝色同心圆代表了轴心点&#xff0c;而四角花瓣的图形代表了实体的锚点。 Attribute含义轴心点 Pivot默认实体的几何中心处&#xff0c;轴心代表了对物体在空间上的坐…

安装git工具

下载安装地址&#xff1a; Git - Downloading Package (git-scm.com) 命令安装&#xff1a;创建文件夹下载路径 启动powershell 输入命令&#xff1a;winget install --id Git.Git -e --source winget 等待下载安装

集合面试题--ArrayList数组

介绍数组 数组&#xff08;Array&#xff09;是一种用连续的内存空间存储相同数据类型数据的线性数据结构。数组&#xff08;Array&#xff09;是一种用连续的内存空间存储相同数据类型数据的线性数据结构。 因为int占4个字节&#xff0c;所以也可以理解为占四块内存 数组如何…

600多个人工智能AI工具汇总,资源、教程和讲解免费提供(第二讲)

这里是600多个人工智能AI工具汇总第二讲&#xff0c;每天介绍5个&#xff0c;文章最后会告诉大家获取方式的。现在请大家同我一起进入AIGC的世界。 第一个&#xff1a;Leonardo.Ai&#xff0c;用来创造力、革新为你的创意项目生成质量的资产AI-driven速度和style-consistency。…

代码安全审计

什么是代码安全审计 代码安全审计是指有开发和安全经验的人员,通过阅读开发文档和源代码,以自动化分析工具或者人工分析为手段,对应用程序进行深入分析,高效全面的发现系统代码的编码缺陷以及开发人员不安全的编程习惯,并指导开发人员进行修复,保障应用系统的安全运行。 …

Spring Boot 中的任务调度器是什么,如何使用?

Spring Boot 中的任务调度器是什么&#xff0c;如何使用&#xff1f; 介绍 在开发企业级应用程序时&#xff0c;经常需要执行定时任务或周期性任务。这些任务可以包括清理临时文件&#xff0c;备份数据库&#xff0c;发送电子邮件等等。Spring Boot 提供了一个内置的任务调度…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第一章:设备配网、连接服务器、断网重连、断服务器重接】

第一章开发环境&#xff1a; 主控STM32F103C8T6WIFI模块ESP01S开发语言C开发编译器 KEIL 组网方式WIFI服务器协议MQTT 本章要点&#xff1a; ESP01S的AT指令配网以及服务器连接STM32与ESP01S的usart协议通信断网重连以及断服务器重连STM32向服务器端口发送对应指令 抽象理解…

硬件电路设计--运算放大器(二)选型

文章目录 前言一、运算放大器的工艺决定Vos和Ib二、TI放大器的命名规律三、选型总结 前言 一、运算放大器的工艺决定Vos和Ib 运放的设计工艺对其各种指标有非常重要的影响 常常有三种基本工艺&#xff1a; Bipolar: 低输入阻抗&#xff0c;Ib1-100nA:Vos10-100uV,低至0.1uV/o…

惊艳!全网首份“架构师成长笔记”GitHub狂澜9000星

其实架构师是需要一个相对而言对架构师友善的环境。第一&#xff0c;架构师到底需要什么&#xff1f;一个架构师要成长&#xff0c;首先他需要信任&#xff0c;第二他需要授权&#xff0c;第三他需要时间&#xff0c;第四他需要资源&#xff0c;少一样都很难开展工作。如果一个…

NIO-Selector 网络编程

目录 一、阻塞 & 非阻塞 1、阻塞 2、非阻塞 二、selector 1、连接和读取 2、处理客户端断开 3、处理消息的边界 4、ByteBuffer大小分配 三、多线程优化 四、NIO vs BIO 1、stream vs channnel 2、IO模型 阻塞IO 非阻塞IO 多路复用 异步IO模型 一、阻塞 &am…