HarmonyOS應用開發-低代碼開發登錄頁面(超詳細)

本篇文章我來手把手教大家做一個HarmonyOS 應用的登錄頁面,逐步講解,非常細致,百分百能學會,并提供全部源碼。頁面使用 DevEco Studio 的低代碼開發。
通過本文的實踐經驗,我想告訴大家, HarmonyOS 應用開發其實并不難,只要了解具體的開發流程和開發思想,大家都可以很快上手。祝愿大家都可以趕上時代浪潮,讓青春隨鴻蒙千帆飄揚!

下面這張圖是我們的目標實現圖,具體實現流程將由我一步一步講解:

一、項目初始化

1、創建低代碼項目

下載安裝 DevEco Studio,新建一個支持 Super Visual 低代碼模式的項目。

具體過程可以參考我上一篇文章:HarmonyOS應用開發-搭建開發環境


2、低代碼項目結構解讀

初始項目目錄如下:

├──entry/src/main/ets           // 代碼區
│  ├──entryability              
│  │  └──EntryAbility.ets       // 程序入口類
│  └──pages
│     └──Index.ets              // 首頁的邏輯描述文件
├──entry/src/main/resources     // 資源文件
└──entry/src/main/supervisual└──pages└──Index.visual           // 首頁的數據模型

其中.ets文件就是我們正常編寫界面邏輯的文件,語言為ArcTS;
.visual為低代碼項目特有的文件,由系統根據我們對界面的可視化設計自動更新,用寫字板打開能看到是存儲界面設計的Json文本;


二、添加靜態文件

1、新增圖片文件

ets 文件下創建 common\images\icon 文件夾,icon內添加我們需要添加的圖片文件,本教程我們用到了3個“其他登錄方式”的圖標。

添加的圖標圖片如下:

增加完三個圖標后,我們的項目結構更新如下:

├──entry/src/main/ets           // 代碼區
│  ├──common                    
│  │  └──images                 
│  │     └──icon                // 圖標圖片
│  │        ├──csdn.png         // 圖標A
│  │        ├──huawei.png       // 圖標B
│  │        └──openatom.png     // 圖標C
│  ├──entryability              
│  │  └──EntryAbility.ets       // 程序入口類
│  └──pages
│     └──Index.ets              // 首頁的邏輯描述文件
├──entry/src/main/resources     // 資源文件
└──entry/src/main/supervisual└──pages└──Index.visual           // 首頁的數據模型


2、新增常量類

這一步可選,一般意義上,我們會根據系統業務需要把一些固定的參數寫到一個記錄常量的 ArcTS 文件里,比如命名為 Const.ts,本次我們把頁面需要的常量寫到了頁面自帶的 index.ets文件里,所以沒有建立常量類,特此說明。

如果需要添加,我們可以把常量類 Const.ts 放在和 images 文件夾平級的位置,添加 Const.ts 之后的項目結構如下:

├──entry/src/main/ets           // 代碼區
│  ├──common                    
│  │  ├──Const.ts               // 常量類
│  │  └──images                 
│  │     └──icon                // 圖標圖片
│  │        ├──csdn.png         // 圖標A
│  │        ├──huawei.png       // 圖標B
│  │        └──openatom.png     // 圖標C│  ├──entryability              
│  │  └──EntryAbility.ets       // 程序入口類
│  └──pages
│     └──Index.ets              // 首頁的邏輯描述文件
├──entry/src/main/resources     // 資源文件
└──entry/src/main/supervisual└──pages└──Index.visual           // 首頁的數據模型

三、編寫登錄頁界面

1、低代碼設計界面布局

① 放置容器組件

初始話的頁面如圖,Root 根結構下包含一個 Column 的容器,容器里有一個 "Hello World" 的 Text 文本控件。

我們直接復用這個 Column 容器,刪除 Text 控件(左側組件樹或右側可視化屏幕里選中控件然后按Backspace鍵就可以刪除)。


② 放置圖標圖片

如圖,我們需要放置一個水平居中的應用圖標:

思路:下面我們來實現登錄頁面的圖標,我們需要創建一個行容器(Row),然后拖一個圖片組件(Imgae)進去,并使圖片居中。

操作:在列容器(Cloumn)里拖一個行容器(Row)過去,寬度(width)設置為 100%,高度(height)設置為 100vp,設置水平居中、垂直居中,位置為絕對定位(Position),距離頁面上方 95vp 距離。

然后我們拖入圖片組件(Imgae),設置圖片寬高均為 100vp(和Row的高相等)。

圖片的Src(圖片存儲路徑)設置為app自帶的默認圖標,至此我們的登錄頁應用圖標就顯示出來了。


③ 放置描述文字

接下來,我們需要放置描述性文本,如圖:

思路:這里用到的是文本組件(Text),我們需要填寫文字內容、定義字體大小和組件的位置。

操作:拖兩個文本組件(Text)到行容器(Row)下面。

設置內容(Content)為 "用戶登錄",字體大小(FontSize)為 26fp,字體對齊(TextAlign)為居中(Center),文字組件框體大小(Size)為寬度 100%,高度 50vp,位置為絕對定位(Position),距離頁面頂部 200vp。效果圖如下:

同理,我們制作 "登錄賬號以使用更多服務" 文本框。

我們設置文本框內容(Content)為 "登錄賬號以使用更多服務",字體大小(FontSize)為 14fp,字體對齊(TextAlign)為居中(Center),文字組件框體大小(Size)為寬度 100%,高度 30vp,位置為絕對定位(Position),距離頁面頂部 250vp,字體顏色(FontColor)為 #8c8c8c(灰色)。效果圖如下:


④ 放置賬號密碼輸入框

接下來,我們要制作賬號密碼的輸入部分,這里用到的是文本輸入組件(TextInput)。
目標實現效果如下:

思路:我們需要兩個文本輸入組件(TextInput)用來實現賬號、密碼的錄入,下方 "短信驗證碼登錄" 和 "忘記密碼",我們使用普通文本組件(Text)實現,讓兩個普通文本組件(Text)并列在一行,然后一個左對齊,一個右對齊。

操作流程:

首先,我們處理賬號和密碼輸入兩個文本輸入框。

拖兩個文本輸入組件(TextInput)在我們之前拖的組件下面。

設置文本輸入組件一(text-input1):

設置文本占位符(Placeholder)為 "郵箱/手機號/用戶名",類型(Type)為 Normal;
組件框體大小(Size)為寬度(Width)為 100%,高度(Height)為?50vp;
背景顏色(BackgroundColor)為白色(#ffffff);
邊框(Border)只要底邊框,底邊框寬度(BorderBottomWidth)為 1vp,邊框顏色(BorderColor)為深灰色(#4a4a4a);
位置為絕對定位(Position),距離頁面頂部 328vp。

效果圖如下:

設置文本輸入組件二(text-input2):

設置文本占位符(Placeholder)為 "郵箱/手機號/用戶名",類型(Type)為 Password;
組件框體大小(Size)為寬度(Width)為 100%,高度(Height)為?50vp;
背景顏色(BackgroundColor)為白色(#ffffff);
邊框(Border)只要底邊框,底邊框寬度(BorderBottomWidth)為 1vp,邊框顏色(BorderColor)為深灰色(#4a4a4a);
位置為絕對定位(Position),距離頁面頂部 380vp。

效果圖如下:

下一步,我們來制作兩個輸入框下面的 "短信驗證碼登錄" 和?"忘記密碼"。

拖一個行容器(Row)到文本輸入框組件下面,設置行容器(Row)的屬性。
設置組件居中;
設置組件的尺寸(Size),寬度(Width)為 94%,高度(Height)為 30vp;
設置組件位置為絕對定位(Position),距離頁面頂部 430vp,距離左側為 3%;

接著,我們往容器里拖兩個文本組件(Text)。

設置組件屬性如下:
組件一(text5)內容為 "短信驗證碼登錄",字體居左,字體大小為 14fp;
定義尺寸(Size),寬度(Width)為 50%,高度(Height)為 30vp;
組件位置為絕對定位(Position),距離左側為 0%;

組件二(text6)內容為 "忘記密碼",字體居右,字體大小為 14fp;
定義尺寸(Size),寬度(Width)為 50%,高度(Height)為 30vp;
組件位置為絕對定位(Position),距離左側為 50%;


⑤ 放置登錄按鈕

這一步是最簡單的,制作登錄按鈕部分,只需要一個按鈕組件(Button)和一個文本組件(Text)。
目標實現效果如下:

思路:我們拖一個按鈕組件(Button),再在按鈕下方拖一個文本組件(Text)即可。

操作流程:

首先,我們拖一個按鈕組件。

定義組件的屬性:
設置組件寬度(Width)為 90%,高度(Height)為 40vp;
內容為"登錄",字體默認居中,字體大小為 20fp;
組件位置為絕對定位(Position),距離左側為 5%,距離頂部 530vp;

下方再拖一個文本組件(Text),設置組件屬性:
文本組件內容為 "注冊賬號",字體居中,字體大小為 14fp;
定義尺寸(Size),寬度(Width)為 100%,高度(Height)為 30vp;
組件位置為絕對定位(Position),距離頂部為 570vp;


⑥ 放置Grid網格控件

最后,我們來制作其他登錄方式的選擇部分,這里用到的是網格組件(Grid)、網格內單個元素(GridItem)、其他常見組件(圖片、文字、行/列等)。
目標實現效果如下:

思路:我們需要一個網格組件(Grid),組件內包含若干個子元素,這個用Grid內對象組件(GridItem)可以實現,這樣我們就可以根據我們后端傳值的數目來動態顯示登錄方式,而不是把三種登錄方式固定寫死。每個Grid內子元素(GridItem)里放置一個行容器(Row),行容器(Row)里上方放一個圖片組件(Image),下方放一個文本組件(Text)。

操作流程:

首先,我們拖一個網格組件(Grid),設置組件屬性:
組件寬度(width)設置為 100%,高度(height)設置為 10%;
內容居中,絕對定位,距離頂部 90%;

往網格組件(Guid)里拖一個GuidItem組件,這是一個動態顯示的子元素組件,會根據我們提供的參數動態進行內容顯示,由于我們在設計上固定為行內顯示3個,所以寬度就直接定為33.3%了。

設置GridItem組件屬性:
組件寬度(width)設置為 33.3%,高度(height)設置為 100%(因為是相對于Grid);

往GridItem里拖入一個行容器(Row),設置組件屬性:
高度和寬度均為 100%;

然后再往行容器(Row)里拖一個圖片組件(Image)和一個文本組件(Text);

設置組件屬性:

圖片(Image)組件:
圖片路徑(Src),我們使用編譯器自帶的 Logo;
對象適應方式(ObjectFit) 為包含(Contain);
組件寬度(width)設置為 70%,高度(height)設置為 56%;
距離上邊距(MarginTop) 10%;
絕對定位,距離左側 15%;

文字(Text)組件:
文字內容(Content),我們先隨便填個 "測試";
文本居中;
組件寬度(width)設置為 100%,高度(height)設置為 24%;
絕對定位,距離頂部 60%(60%~70%均可);

做到這里,我們的ArcUI的設計就完成了,是不是覺得和下面三個圖標的目標效果還有點差距,別急,我們接下來就來實現GridItem數據的動態渲染。


2、實現數據動態渲染

下一步,我們來實現數據的動態渲染,在這個登錄頁面,我們需要對GridItem組件及其內部組件的屬性進行動態賦值。

① 創建數據源

我們先創建數據源,打開頁面對應的 ArcTS 文件(比如你現在編輯的可視化低代碼界面是Index.visual,那么對應的 ArcTS?文件就是 Index.ets)

默認的頁面 .ets 文件內容如下:

@Entry
@Component
struct Index {@State message: string = 'Hello World'build() {}
}

我們在這里創建 FunctionType 對象,用來裝配我們需要顯示的圖片路徑和文字內容。

然后再定義狀態變量 avenues,數組類型,用來包含我們裝配圖片路徑和文字內容的 FunctionType 對象。

更新后的代碼如下:

class FunctionType {name: string;icon: string;
}@Entry
@Component
struct Index {@State avenues: Array<FunctionType> = [{name: 'HuaWei', icon: "common/images/icon/huawei.png"},{name: 'CSDN', icon: "common/images/icon/csdn.png"},{name: 'OpenAtom', icon: "common/images/icon/openatom.png"}]build() {}
}

② 更新動態渲染組件屬性

回到我們低代碼頁面?Index.visual,修改網格子元素組件(GridItem)的Render里的ForEach屬性為this.avenues,其他默認;

然后我們再分別選中GridItem里的圖片組件和文本組件,對其勾選動態值。

圖片組件(Image)的圖片路徑(Src)選擇 item1.icon;

文本組件(Text)的內容(Content)選擇 item1.name;

然后我們到預覽器(Preview)的窗口里就可以看到已經完成的效果了。

至此,我們的低代碼開發部分已全部完成!?


3、低代碼頁面轉為ArcTs文件

這步是可選步驟,根據實際需要決定是否要轉,低代碼和 ArcTs 在開發頁面上各有優勢。低代碼開發迅速、改動簡單,ArcTS 則更方便自定義一些事件,擁有更好的擴展性。一般對于涉及交互業務的頁面,頁面的功能會相對比較復雜,推薦使用 ArcTS,如果是登錄頁這種簡單業務邏輯頁面,可以保留低代碼版本,不必轉化為 ArcTS 版本。

如果有需要將 .visual 頁面轉換為 .ets 文件,我們可以點擊右上角的轉換按鈕。

此操作能夠將低代碼界面轉換為 ArcTS 的代碼。
注意:轉換完之后原有的 .visual 文件會被刪除!這個過程不可逆!
目前編譯器點擊轉換按鈕后會有 ArcTS 的預覽代碼,需要點擊 Convert 來確認此次操作,本次界面轉換結果的預覽代碼如下:

Index.ets

class FunctionType {name: string;icon: string;
}@Entry
@Component
struct Index {@State avenues: Array<FunctionType> = [{name: 'HuaWei', icon: "common/images/icon/huawei.png"},{name: 'CSDN', icon: "common/images/icon/csdn.png"},{name: 'OpenAtom', icon: "common/images/icon/openatom.png"}]build() {Column() {Column() {Row() {Image($r('app.media.icon')).width("100vp").height("100vp").align(Alignment.Center).offset({ x: "0%", y: "0vp" }).backgroundImageSize(ImageSize.Auto)}        .width("100%").height("100vp").position({ x: "0", y: "95vp" }).displayPriority(0).alignItems(VerticalAlign.Center).justifyContent(FlexAlign.Center)Text("用戶登錄").width("100%").height("50vp").position({ x: "0vp", y: "200vp" }).borderRadius({ topRight: "0vp" }).textAlign(TextAlign.Center).textOverflow({ overflow: TextOverflow.Clip }).fontSize("26fp").fontWeight(FontWeight.Medium).fontFamily("sans-serif")Text("登錄帳號以使用更多服務").width("100%").height("30vp").position({ x: "0vp", y: "250vp" }).fontColor("#8c8c8c").textAlign(TextAlign.Center).fontSize("14fp")TextInput({ placeholder: "郵箱/手機號/用戶名" }).width("100%").height("50vp").position({ x: "0vp", y: "328vp" }).borderWidth({ bottom: "1vp" }).borderColor({ bottom: "#4a4a4a" }).backgroundColor("#ffffff").margin({ bottom: "0vp" }).padding({ top: "0vp" }).type(InputType.Normal)TextInput({ placeholder: "密碼" }).width("100%").height("50vp").position({ x: "0vp", y: "380vp" }).borderWidth({ bottom: "1vp" }).borderColor({ bottom: "#4a4a4a" }).backgroundColor("#ffffff").type(InputType.Password)Row() {Text("忘記密碼").width("50%").height("30vp").position({ x: "50%", y: "0px" }).textAlign(TextAlign.End).fontSize("14fp")Text("短信驗證碼登錄").width("50%").height("30vp").position({ x: "0%", y: "0vp" }).textAlign(TextAlign.Start).fontSize("14fp")}        .width("94%").height("30vp").position({ x: "3%", y: "430vp" })Grid() {if (true) {ForEach(this.avenues,(item1: any, idx1: number) => {GridItem() {Row() {if (true) {Text(`${item1.name}`).width("100%").height("24%").position({ x: "0%", y: "60%" }).textAlign(TextAlign.Center).fontSize("14fp")                }Image($r('app.media.icon')).width("70%").height("56%").position({ x: "15%", y: "0vp" }).margin({ top: "10%", bottom: "0vp", left: "0%", right: "0%" }).objectFit(ImageFit.Contain)}              .width("100%").height("100%")}            .width("33.3%").height("100%").align(Alignment.Start).offset({ x: "0vp", y: "0" })})          }}        .width("100%").height("10%").align(Alignment.Center).position({ x: "0vp", y: "90%" }).backgroundImageSize(ImageSize.Auto).opacity(0.99).margin({ top: "0vp", bottom: "0vp", left: "0vp", right: "0vp" }).padding({ top: "0vp", bottom: "0vp" }).scrollBar(BarState.Off)Button("登錄").width("90%").height("40vp").position({ x: "5%", y: "530vp" }).fontSize("20fp")Text("注冊賬號").width("100%").height("30vp").position({ x: "0vp", y: "570vp" }).textAlign(TextAlign.Center).fontSize("14fp")Text("其他方式登錄").width("100%").height("4%").align(Alignment.Center).position({ x: "0vp", y: "85%" }).textAlign(TextAlign.Center).fontSize("14fp")}      .width("100%").height("100%").position({ x: "0vp", y: "0vp" }).borderWidth({ bottom: "1vp" }).borderColor({ bottom: "#4a4a4a" }).justifyContent(FlexAlign.Center)}    .width("100%").height("100%")}
}

四、測試應用

1、啟動仿真器

右上角選擇設備,點擊進入設備管理器,如果沒有對應的仿真設備,需要下載安裝,如果已經有,選擇 Huawei_Phone 作為調試的仿真設備,點擊啟動。


2、界面測試

點擊右上角啟動鍵,啟動項目。

有的時候會因為頁面刪除但是頁面配置沒清除完全導致運行失敗,這個需要到項目啟動類的配置文件里手動刪除多出來的頁面,啟動類配置文件的路徑是 DevEco-Studio\Test-Project\Harmony\entry\src\main\resources\base\profile\main_pages.json;

程序啟動成功,運行效果如圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918303.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918303.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918303.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AJAX與axios框架

文章目錄前言案例跨域訪問總結?前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 通過 ajax 進行前后端交互 案例 此項目用到了javaweb知識 首先創建JavaWeb項目編寫代碼&#xff1a; package ajax;import java.io.IOException; import java.util.Arr…

智能創造的幕后推手:AIGC浪潮下看AI訓練師如何塑造智能未來

文章目錄一、AIGC時代的算法與模型訓練概覽二、算法與模型訓練的關鍵環節三、AI訓練師的角色與職責四、AI訓練師的專業技能與素養五、AIGC算法與模型訓練的未來展望《AI訓練師手冊&#xff1a;算法與模型訓練從入門到精通》亮點內容簡介作者簡介谷建陽目錄《醫學統計學從入門到…

Python設計模式 - 裝飾模式

定義 裝飾模式&#xff08;Decorator Pattern&#xff09;是一種結構型設計模式&#xff0c;用于在不修改原有類的情況下動態地擴展對象的功能。 結構抽象組件&#xff08;Component&#xff09;&#xff1a;定義對象的公共接口&#xff0c;使得客戶端能以一致的方式處理未被裝…

MySQL(188)如何使用MySQL的慢查詢工具?

使用MySQL的慢查詢工具可以幫助開發者識別和優化性能不佳的SQL查詢。以下是詳細深入的步驟和代碼示例&#xff0c;幫助你使用MySQL的慢查詢工具來進行查詢分析和優化。 一、啟用慢查詢日志 首先&#xff0c;你需要確保MySQL的慢查詢日志功能是啟用的。慢查詢日志記錄了所有執行…

如何培養自己工程化的能力(python項目)

培養 Python 項目的工程化能力需要系統性訓練&#xff0c;以下從基礎到高階的實踐路徑&#xff0c;結合具體案例和工具鏈&#xff0c;幫助你逐步進階&#xff1a;一、夯實工程化基礎能力?1. 規范代碼與項目結構??項目模板化?使用 cookiecutter生成標準項目結構&#xff0c;…

AI編程插件對比分析:CodeRider、GitHub Copilot及其他

AI編程插件對比分析:CodeRider、GitHub Copilot及其他 隨著人工智能技術的快速發展,AI編程插件已成為提升開發者生產力的重要工具。CodeRider和GitHub Copilot作為市場上的領先者,分別以其獨特的特性和生態系統吸引了大量開發者。本文將從功能特性、性能表現、集成性、用戶…

uniapp/uniappx實現圖片或視頻文件選擇時同步告知權限申請目的解決華為等應用市場上架審核問題

在UNIAPP支持vue和nvue,在UNIAPPX支持uvue&#xff0c;安卓支持在選擇圖片或視頻文件權限申請的時候自動同步告知權限申請目的。輕松解決在華為應用市場審核&#xff0c;要求告知權限申請目的或說明的問題。 UNIAPP相冊圖片視頻選擇器(安卓可以自定義界面樣式)功能介紹&#x…

jupyter notebook如何打開其他盤目錄

問題描述Jupyter Notebook 相信是我們學習 Python 避不開的一個工具。當我們使用 pip install notebook 安裝 Notebook 之后&#xff0c;使用命令 jupyter notebook 啟動服務&#xff0c;啟動之后默認會在瀏覽器打開界面。我們會發現&#xff0c;這個界面默認在 C 盤下&#xf…

C語言深度剖析

一、關鍵字 1.1 最快的關鍵字-register register 這個關鍵字請求編譯器盡可能將變量存在CPU內部寄存器中,而不是通過內存尋址以提高效率。 注意是:盡可能、而不是絕對 1.1.1 皇帝身邊的小太監-寄存器 不知道什么是寄存器,那見過太監沒有其實寄存器就是相當于。一個cpu的…

電腦使用“碎片整理”程序的作用

1.解決文件碎片化問題碎片整理的作用&#xff1a;將這些分散的文件片段重新整理、拼接&#xff0c;使其連續存儲在硬盤的某個區域&#xff0c;減少文件的 “碎片化” 程度。2. 提升硬盤讀寫速度機械硬盤的特殊性&#xff1a;機械硬盤依賴磁頭的物理移動來讀取數據&#xff0c;若…

AI 軟件工程開發 AI 算法 架構與業務

AI 軟件工程開發 & AI 算法 & 架構與業務前言1.AI 軟件工程開發1.1. AI Developer Studio &#xff08;playground級&#xff09;1.2. Agent & RAG1.3. LangChain & LangGraph1.4. MCP, Model Context Protocol1.5. Ollama1.6. Coze & Dify2.AI 算法2.1. G…

uniapp實現的圓形滾盤組件模板

采用 uniapp 實現的一款圓形滾盤示例組件模板, 支持 vue2、vue3&#xff0c;適配H5、微信小程序&#xff08;其他小程序未試過&#xff0c;可自行嘗試&#xff09; 代碼實現簡約易懂&#xff0c;用戶可根據自身需求下載模板&#xff0c;并進行擴展開發可到插件市場下載嘗試&…

無須炮解,打開即是Pro版

聊一聊 文檔或文件轉圖片&#xff0c;這個我有段時間沒有推薦了。 今天發現了一款非常好用的圖像格式轉換編輯軟件。 有需要的小伙伴請及時收藏&#xff0c;防止下次找不到。 軟件介紹 全能圖像格式轉換工具 這是一款全能的圖像轉換軟件&#xff0c;支持幾乎所有的圖像格式…

企業高性能web服務器——Nginx

Nginx介紹 Nginx是一個高性能的HTTP和反向代理服務器&#xff0c;也是一個郵件代理服務器。由俄羅斯的程序設計師Igor Sysoev所開發&#xff0c;官方測試nginx能夠支撐5萬并發鏈接&#xff0c;并且cpu、內存等資源消耗卻非常低&#xff0c;運行非常穩定。所以其特點是占有內存…

MCU控制ADAU1701,用System Workbench for STM32導入工程

作者的話 MCU控制ADAU1701&#xff0c;我有寫一個文檔詳細講步驟&#xff0c;里頭用到了System Workbench for STM32這個軟件&#xff0c;他是基于eclips內核的開發軟件&#xff0c;一般來講&#xff0c;設置好workspce工程就會出來&#xff0c;但是架不住就有設置好工程不出來…

SQL176 每個題目和每份試卷被作答的人數和次數

描述現有試卷作答記錄表exam_record&#xff08;uid用戶ID, exam_id試卷ID, start_time開始作答時間, submit_time交卷時間, score得分&#xff09;&#xff1a;iduidexam_idstart_timesubmit_timescore1100190012021-09-01 09:01:012021-09-01 09:41:01812100290022021-09-01 …

構建第三方軟件倉庫

1 下載第三方軟件到指定目錄[rootServer_b ~]# mkdir software [rootServer_b software]# wget https://dldir1v6.qq.com/qqfile/qq/QQNT/Linux/QQ_3.2.18_250724_x86_64_01.rpm2 安裝軟件信息采集工具[rootServer_b software]# yum install createrepo -y [rootServer_b softw…

Linux 管道命令及相關命令練習與 Shell 編程、Tomcat 安裝

2.實驗目的掌握 Linux 管道命令及相關命令&#xff08;cut、sort、wc、uniq、tee、tr、split&#xff09;的使用方法。學會使用 Shell 編程實現基本的計算器功能。掌握在 CentOS 7 系統中安裝 Tomcat 的方法。實驗內容1. Linux 管道命令及相關命令練習1.1 管道命令定義&#xf…

藍牙基礎:FIFO(First-In-First-Out)緩存區

在藍牙通信中&#xff0c;FIFO&#xff08;First-In-First-Out&#xff0c;先進先出&#xff09;緩存區是解決數據傳輸中“速度不匹配”和“時序異步”問題的核心機制&#xff0c;廣泛應用于藍牙芯片內部、協議棧各層級及主從設備交互中。其核心作用是臨時存儲數據&#xff0c;…

國內外主流源代碼平臺與高效開發指南

摘要 本文旨在為您提供一份實用的源代碼獲取與開發指南。我們將首先梳理國內外最主流的源代碼托管平臺&#xff0c;并重點介紹如何利用這些平臺上的開源項目。接著&#xff0c;本文將為您規劃一條針對初學者的“最快最性價比”的開發路徑&#xff0c;從環境配置、項目管理到實…