圖書館系統源碼詳解

本項目是一個基于Scala語言開發的圖書館管理系統。系統主要由以下幾個部分組成:數據訪問層(DAO)、數據模型層(Models)、服務層(Service)以及用戶界面層(UI)。以下是對項目中各個文件和文件夾的詳細解釋。

項目目錄結構

scala_tushu2/
│
├── .idea/               # IntelliJ IDEA的項目配置文件夾
├── out/                 # 編譯輸出文件夾
├── src/                 # 源代碼文件夾
│   ├── dao/             # 數據訪問層
│   ├── models/          # 數據模型層
│   ├── service/         # 服務層
│   └── ui/              # 用戶界面層
├── scripts/             # 腳本文件夾
├── scala_tushu2.iml     # IntelliJ IDEA的模塊文件
├── books.txt            # 圖書信息文件
├── borrow_records.txt    # 借閱記錄文件
└── users.txt            # 用戶信息文件

詳細文件解釋

1. 數據訪問層(DAO)

文件:BookDAO.scala
  • 負責圖書信息的增刪改查操作。

  1. 提供與數據庫交互的方法,如添加新書、刪除書籍、更新書籍信息和查詢書籍。

    package app.org
    package daoimport models.BookModelimport java.io.File
    import scala.collection.mutable.ListBuffer// 圖書,數據操作
    class BookDAO {// 加載圖書,從件中讀入def loadBooks(): ListBuffer[BookModel] = {val books = new ListBuffer[BookModel]()val source = scala.io.Source.fromFile("books.txt")for (line <- source.getLines()) {val Array(id, name, author, available) = line.split(",")// 實例化一本書,保存到List中books += BookModel(id.toInt, name, author, available.toBoolean)}// 關閉連接source.close()books}// 保存圖書,將圖書寫入文件def saveBooks(books: ListBuffer[BookModel]): Unit = {val writer = new java.io.PrintWriter(new File("books.txt"))for (book <- books) {writer.println(book.id + "," + book.name + "," + book.author + "," + book.available)}writer.close()}
    }
    

文件:BorrowRecordDAO.scala
  • 負責借閱記錄的增刪改查操作。

  • 提供與數據庫交互的方法,如添加借閱記錄、刪除記錄、更新記錄和查詢記錄。

  • package app.org
    package daoimport models.BorrowRecordModelimport java.io.PrintWriter
    import scala.collection.mutable.ListBuffer
    import scala.io.Sourceclass BorrowRecordDAO {// 讀出借閱記錄def loadBorrowRecord(): ListBuffer[BorrowRecordModel] = {val borrowRecords =  ListBuffer[BorrowRecordModel]()val lines = Source.fromFile("borrow_records.txt")for (line <- lines.getLines()) {val parts =line.split(",")borrowRecords += BorrowRecordModel(parts(0),parts(1).toInt,parts(2),parts(3),if (parts.length>4) Some(parts(4)) else None)}borrowRecords}// 寫入借閱記錄def saveBorrowRecord(records: ListBuffer[BorrowRecordModel]): Unit = {val writer = new PrintWriter("borrow_records.txt")for (record <- records) {writer.println(record.userName + "," + record.bookID + "," + record.bookName + "," + record.borrowDate + "," + record.returnDate.getOrElse(""))}writer.close()}
    }
    

文件:UserDAO.scala
  • 負責用戶信息的增刪改查操作。

  • 提供與數據庫交互的方法,如添加新用戶、刪除用戶、更新用戶信息和查詢用戶信息。

  • package app.org
    package daoimport models.UserModelimport java.io.File
    import scala.collection.mutable.ListBufferclass UserDAO {//加載所有的用戶def loadUsers(): ListBuffer[UserModel] = {val users = new ListBuffer[UserModel]()val source = scala.io.Source.fromFile("users.txt")for (line <- source.getLines()) {val Array(username,password,role) = line.split(",")// 實例化一用戶,保存到List中users += UserModel(username,password,role)}// 關閉連接source.close()users}//保存用戶// 保存圖書,將圖書寫入文件def saveUsers(users: ListBuffer[UserModel]): Unit = {val writer = new java.io.PrintWriter(new File("users.txt"))for (user <- users) {writer.println(user.username + "," + user.password + "," + user.role)}writer.close()}
    }
    

2. 數據模型層(Models)

文件:BookModel.scala
  • 定義圖書的數據模型。

  • 包含圖書的屬性,如ID、書名、作者、是否可借等。

  • package app.org
    package models// 圖書類
    // id,書名,作者,狀態
    case class BookModel(id: Int, name: String, author: String, var available: Boolean) {override def toString: String ={val availableStr = if (available) "可外借" else "已借出"s"編號:$id \t 書名: $name \t 作者:$author \t 這本書——$availableStr"}
    }

文件:BorrowRecordModel.scala
  • 定義借閱記錄的數據模型。

  • 包含借閱記錄的屬性,如用戶ID、書籍ID、借閱時間、歸還時間等。

  • package app.org
    package modelscase class BorrowRecordModel(userName:String,               // 借書人bookID:Int,                  // 圖書IDbookName:String,           // 書名borrowDate:String,          // 借閱日期var returnDate:Option[String] =None   // 歸還日期)
    

文件:UserModel.scala
  • 定義用戶的數據模型。

  • 包含用戶的屬性,如ID、用戶名、密碼、用戶類型(管理員或普通用戶)等。

  • package app.org
    package modelscase class UserModel(username:String,password:String,role:String)
    

3. 服務層(Service)

文件:BookService.scala
  • 提供圖書相關的業務邏輯。

  • 調用DAO層的方法,實現圖書的增刪改查等業務操作。

  • package app.org
    package serviceimport models.{BookModel, BorrowRecordModel}
    import dao.{BookDAO, BorrowRecordDAO}import java.time.LocalDateTime
    import scala.collection.mutable.ListBuffer// 圖書業務邏輯層
    class BookService {private val bookDAO = new BookDAO()private val borrowRecordDAO = new BorrowRecordDAO()// 查詢所有的圖書
    //  def searchBooks(query:String): 圖書列表List(Book對象)def searchBooks(query:String): ListBuffer[BookModel] = {// 從文本文件中讀取書本信息,并保存列表中,返回val books = bookDAO.loadBooks()query match {case "" => books  // 沒有條件,就返回全部case _ => books.filter(b => b.name.contains(query) || b.author.contains(query))  // 根據條件過濾}}// 普通用戶,借閱圖書def borrowBook(username:String,bookId:Int): Boolean = {//   (1) 根據圖書的ID,查詢圖書, 判斷圖書是否存在val books = bookDAO.loadBooks()val records = borrowRecordDAO.loadBorrowRecord()val book = books.find(b => b.id == bookId)if (book.nonEmpty) {val b = book.get//   (2) 判斷圖書是否已經被借出if (b.available) {//   (3) 借閱圖書//        更新這本書的狀態b.available = false// 把更新之后的圖書的信息寫回txt文件中bookDAO.saveBooks(books)//    TODO    添加一條借書記錄// 讀出當前全部的記錄// 添加一條記錄records += BorrowRecordModel(username,b.id,b.name,LocalDateTime.now().toString)// 寫回txt文件中borrowRecordDAO.saveBorrowRecord(records)println("借閱成功,已保存借閱記錄!!!")true} else {println("這本書已經被借走了!!!")false}} else {false}}// 普通用戶,查詢自己的借閱記錄def queryBorrowRecords(username: String):ListBuffer[BorrowRecordModel] = {// 讀出全部的借閱記錄val records = borrowRecordDAO.loadBorrowRecord()// 過濾出當前用戶的借閱記錄records.filter(r => r.userName == username)}// 普通用戶,歸還自己借的某一本書def returnBook(username: String, bookId: Int): Boolean = {// 1.確定這本書是他本人借的并歸還處于沒有歸還的狀態queryBorrowRecords(username).find(r => r.bookID == bookId && r.returnDate.isEmpty) match {case Some(record) =>// 2.更新這本書的狀態// 2.1 加載全部的圖書信息val books = bookDAO.loadBooks()// 2.2選擇當前這一本書val b = books.find(_.id == bookId).getb.available = true// 2.3 把更新之后的狀態寫回txt文件中bookDAO.saveBooks(books)// 3.更新借閱記錄的狀態// 3.1 加載全部的借閱記錄val records = borrowRecordDAO.loadBorrowRecord()// 3.2 找到當前這本書的借閱記錄val r = records.find(r => r.bookID == bookId && r.userName ==username && r.returnDate.isEmpty).getr.returnDate = Some(LocalDateTime.now().toString)// 3.3 把更新之后的狀態寫回txt文件中borrowRecordDAO.saveBorrowRecord(records)truecase None => false}}// 添加圖書def addBook(book: BookModel): Unit = {// 1. 生成一個book ID// 查詢所有的圖書,找到最大的ID,+1var id = 1val books = bookDAO.loadBooks()if (books.nonEmpty) {id = books.map(_.id).max + 1}// 2. 更新val newBook = book.copy(id = id)// 3. 把新的圖書添加到books.txt中books += newBook// 4. 把更新之后的狀態寫回txt文件中bookDAO.saveBooks(books)}private def queryBooks(): ListBuffer[BookModel] = {// 1. 加載全部的圖書val books = bookDAO.loadBooks()// 2. 返回books}}
    

文件:UserService.scala
  • 提供用戶相關的業務邏輯。

  • 調用DAO層的方法,實現用戶的增刪改查等業務操作。

  • package app.org
    package serviceimport dao.UserDAOimport models.UserModelclass UserService {private val userDAO = new UserDAO()// 身份校驗def authenticateUser(username: String, password: String): Option[UserModel] = {// 去根據用戶名和密碼查詢,是否有符合要求的用戶val users = userDAO.loadUsers()users.find(user => user.username == username && user.password == password)}// 注冊用戶def addUser(username: String): Boolean = {// 1. 查詢用戶名是否已經存在val users = userDAO.loadUsers()val user =users.find( _.username == username)if (user.isEmpty) {// 可以繼續添加// 2.添加// 2.1 讀取所有的用戶// 2.2 創建新的用戶users += UserModel(username, "[\\d]", "普通用戶")// 2.3 保存用戶userDAO.saveUsers(users)true} else {false}}
    }
    

4. 用戶界面層(UI)

文件:LPT.scala
  • 提供用戶界面的實現。

  • 負責與用戶的交互,如顯示圖書列表、顯示借閱記錄、用戶登錄等。

  • package app.org
    package uiimport models.{BookModel, UserModel}
    import service.{BookService, UserService}import scala.io.StdIn
    import scala.io.StdIn.readLineclass LPT {private val BookService = new BookService()private val UserService = new UserService()// 輔助方法: 輸入圖書的信息,返回一個BookModel對象private def inputBookInfo(): BookModel = {println("請輸入圖書的名稱:")val name = readLine().trimprintln("請輸入圖書的作者:")val author = readLine().trimprintln("請輸入圖書是否可以外借(true/false):")val available = StdIn.readBoolean()// 初始設置編號為0BookModel(0,name, author, available)}// 顯示游客的菜單def showVisitorMenu(): Unit = {var running = truewhile (running) {println("歡迎來到我的圖書管理系統,請選擇:")println("1. 查看所有圖書")println("2. 查詢圖書")println("3. 登錄")println("4. 退出")// 獲取用戶操作val choice = StdIn.readLine().trimchoice match {case "1" =>// 調用業務邏輯層的方法val results = BookService.searchBooks("")if (results.nonEmpty) {results.foreach(println)} else {println("沒有找到圖書")}case "2" =>// 提示用戶輸入查詢關鍵字val query = readLine("請輸入查詢關鍵字:").trim// 根據關鍵字去查詢圖書列表,找到滿足條件的書val results = BookService.searchBooks(query)// 顯示出來if (results.nonEmpty) {println("=================查詢圖書的結果結果====================")results.foreach(println)} else {println("沒有找到圖書")}case "3" =>println("請輸入用戶名:")val username = StdIn.readLine().trimprintln("請輸入密碼:")val password = StdIn.readLine().trim// 調用service的方法,進行登錄val userOPT =UserService.authenticateUser(username, password)if (userOPT.isEmpty) {println("用戶名或密碼錯誤")} else {// 登錄成功,顯示登錄用戶的菜單val user = userOPT.getuser.role match {case "管理員" => showAdminMenu(user)case "普通用戶" => showUserMenu(user)}}case "4" =>running = falseprintln("感謝你的使用,下次再見")case _ => println("無效的選擇,請重新輸入")}}}// 顯示管理員的菜單def showAdminMenu(user: UserModel): Unit = {var running = truewhile (running) {println(s"歡迎管理員${user.username}來到我的圖書管理系統,請選擇:")println("1. 添加圖書")println("2. 查詢圖書")println("3. 添加用戶")println("4. 退出")// 獲取用戶的操作val choice = StdIn.readLine().trimchoice match {case "1" =>// 1.獲取圖書信息-書名,作者,狀態val book = inputBookInfo()// 2. 調用service的方法,做添加到books.txt中操作BookService.addBook(book)println(s"圖書《${book.name}》添加成功")case "2" =>// 提示用戶輸入查詢關鍵字println("請輸入查詢關鍵字:")val query = readLine().trimval results = BookService.searchBooks(query)if (results.nonEmpty) {println("=================查詢圖書的結果====================")results.foreach(println)println("=================以上是查詢圖書的結果!!!!====================")println()} else {println("沒有找到圖書")}case "3" =>// 1.獲取用戶信息-用戶名,密碼,角色val username = StdIn.readLine("請輸入用戶名:")// 2. 調用service的方法,做添加到users.txt中操作if (UserService.addUser(username)) {println(s"用戶${username}添加成功")} else {println("用戶添加失敗")}case "4" => running = falsecase _ => println("無效的選擇,請重新輸入")}}}// 顯示登錄用戶的菜單def showUserMenu(user: UserModel): Unit = {var running = truewhile (running) {println(s"歡迎用戶${user.username}來到我的圖書管理系統,請選擇:")println("1. 借閱圖書")println("2. 查詢借閱圖書")println("3. 還書")println("4. 退出")// 獲取用戶的操作val choice = StdIn.readLine().trimchoice match {case "1" =>// UI : 提示用戶輸入圖書ID。校驗:判斷是否整數try {val id = readLine("請輸入圖書的ID:").toIntprintln(id)BookService.borrowBook(user.username,id)} catch {case e: Exception =>println(e)println("輸入的圖書ID無效,請重新輸入:")}case "2" => println("查詢圖書")val borrowRecords = BookService.queryBorrowRecords(user.username)//if (borrowRecords.isEmpty) {println("您還沒有借閱過任何圖書!!!")} else {// 打印借閱記錄println("查詢結果,一共借了?本,?本已歸還,?本未歸還")for (record <- borrowRecords) {val returnDate = record.returnDate.getOrElse("未歸還")println(s"用戶名:${record.userName},圖書ID:${record.bookID},圖書名稱:${record.bookName},借閱日期:${record.borrowDate},歸還日期:$returnDate")}}case "3" => println("還書")try {val id = readLine("請輸入要歸還的圖書的ID:").toIntif(BookService.returnBook(user.username, id)) {println("歸還圖書成功!!!")} else {println("歸還圖書失敗,請檢查輸入的圖書ID是否正確")}} catch {case e: Exception =>println(e)println("輸入的圖書ID無效,請重新輸入")}case "4" => running = falsecase _ => println("無效的選擇,請重新輸入")}}}def showMenu(): Unit = {showVisitorMenu()}
    }
    

文件:Main.scala

Main.scala 文件是Scala應用程序的入口點,它通常包含 main 函數,該函數是程序執行的起始點。在這個圖書館管理系統中,Main.scala 可能承擔以下職責:

  1. 初始化系統:設置系統運行所需的環境,例如初始化數據庫連接、加載配置文件等。

  2. 啟動服務:啟動系統中的服務層,例如圖書服務、用戶服務等,這些服務可能負責處理業務邏輯。

  3. 用戶界面啟動:啟動用戶界面層,例如命令行界面或圖形用戶界面,允許用戶與系統交互。

  4. 運行主循環:對于需要持續運行的系統,Main.scala 可能包含一個主循環,用于不斷監聽用戶輸入或處理后臺任務。

  5. 錯誤處理:設置全局錯誤處理機制,確保系統在遇到錯誤時能夠優雅地處理并給出用戶友好的反饋。

    package app.orgimport ui.LPTobject Main {def main(args: Array[String]): Unit = {val m = new LPT()m.showMenu()}
    }
    

5. 其他文件

文件:books.txt
  • 存儲圖書信息的文本文件。

  • 每行包含圖書的ID、書名、作者和是否可借的信息。

文件:borrow_records.txt
  • 存儲借閱記錄的文本文件。

  • 每行包含用戶ID、圖書ID、借閱時間和歸還時間的信息。

文件:users.txt
  • 存儲用戶信息的文本文件。

  • 每行包含用戶的用戶名、密碼和用戶類型(管理員或普通用戶)的信息。

總結

本項目通過分層架構實現了一個圖書館管理系統,各層之間職責明確,便于維護和擴展。數據訪問層負責與數據庫的交互,數據模型層定義了系統中使用的數據結構,服務層實現了具體的業務邏輯,用戶界面層負責與用戶的交互。通過這種方式,系統具有良好的可讀性和可維護性。

?# # #本項目并不是完美的項目, 嗨有缺少的功能自行添加!!!!!!!!!!!!

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

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

相關文章

Redis——用戶簽到BitMap,UV統計

目錄 BitMap 使用場景 1. 用戶簽到系統 2. 用戶行為標記 3. 布隆過濾器&#xff08;Bloom Filter&#xff09; BitMap介紹 Redis中的使用 Redis功能示例 添加&#xff1a; 獲取&#xff1a; 批量獲取&#xff1a; java中實現 統計本月連續簽到次數 UV統計 UV 統計…

【數據庫】【MySQL】索引

MySQL中索引的概念 索引&#xff08;MySQL中也叫做"鍵&#xff08;key&#xff09;"&#xff09;是一種數據結構&#xff0c;用于存儲引擎快速定找到記錄。 簡單來說&#xff0c;它類似于書籍的目錄&#xff0c;通過索引可以快速找到對應的數據行&#xff0c;而無需…

【SpringBoot AI 集成DeepSeek 大模型API調用】

當DeepSeek開始盛行&#xff0c;提供強大的大語言模型&#xff0c;界面調用不能滿足我們的需要&#xff0c;同時提供API接口供我們在服務中調用&#xff0c;來實現各種AI場景。 我們通過將DeepSeek的AI能力與SpringBoot AI相結合&#xff0c;實現智能聊天、問答機器人&#xf…

Linux 性能更好的ftp客戶端 lftp 使用詳解

簡介 LFTP 是一個命令行 FTP 客戶端&#xff0c;支持多種文件傳輸協議&#xff0c;包括 FTP、FTPS、HTTP、HTTPS和SFTP 。它以其通過鏡像、后臺操作和腳本支持等特性有效管理復雜傳輸的能力而聞名。 安裝 Ubuntu/Debian sudo apt update sudo apt install lftpCentOS/RHEL/…

汽車智能制造企業數字化轉型SAP解決方案總結

一、項目實施概述 項目階段劃分&#xff1a; 藍圖設計階段主數據管理方案各模塊藍圖設計方案下一階段工作計劃 關鍵里程碑&#xff1a; 2022年6月6日&#xff1a;項目啟動會2022年12月1日&#xff1a;系統上線 二、總體目標 通過SAP實施&#xff0c;構建研產供銷協同、業財一…

【深度學習】矩陣的理解與應用

一、矩陣基礎知識 1. 什么是矩陣&#xff1f; 矩陣是一個數學概念&#xff0c;通常表示為一個二維數組&#xff0c;它由行和列組成&#xff0c;用于存儲數值數據。矩陣是線性代數的基本工具之一&#xff0c;廣泛應用于數學、物理學、工程學、計算機科學、機器學習和數據分析等…

<網絡> UDP協議

目錄 傳輸層 再談端口號 端口號范圍劃分 認識知名端口號 兩個問題 netstat與iostat pidof UDP協議 UDP協議格式 UDP數據封裝&#xff1a; UDP數據分用&#xff1a; UDP協議的特點 面向數據報 UDP的緩沖區 UDP使用注意事項 基于UDP的應用層協 傳輸層 在學習HTTP等應用層協議時&…

大模型面試基礎問題

1.1.1 最主流的開源模型&#xff1f; ChatGLM-6B[1] prefix LM LLaMA-7B[2] causal LM 1.1.2 prefix LM和causal LM的區別&#xff1f; 1.1.2.1 Prefix LM Prefix LM&#xff0c;即前綴語言模型&#xff0c;該結構是Google的T5模型論文起的名字&#xff0c;望文知義來說&…

your HTTP request connection start duration too long

If your HTTP request connection start duration is taking more than 7 seconds, here are some possible causes and troubleshooting steps: Possible Causes: Network Latency – Slow internet or network congestion.DNS Resolution Delay – Slow DNS lookup affecti…

Python天梯賽系統備考-字符串篇

知識點拆解 1. 切片技巧 定義 通過 [start:end:step] 語法截取字符串的子序列 start&#xff1a;起始索引&#xff08;包含&#xff0c;默認0&#xff09; end&#xff1a;結束索引&#xff08;不包含&#xff0c;默認末尾&#xff09; step&#xff1a;步長&#xff0…

國標28181協議在智聯視頻超融合平臺中的接入方法

一. 國標28181介紹 國標 28181 協議全稱是《安全防范視頻監控聯網系統信息傳輸、交換、控制技術要求》&#xff0c;是國內視頻行業最重要的國家標準&#xff0c;目前有三個版本&#xff1a; 2011 年&#xff1a;推出 GB/T 28181-2011 版本&#xff0c;為安防行業的前端設備、平…

深入探究 C 語言內存函數:memcpy、memmove、memset 和 memcmp

一&#xff0c;常見的內存函數 在 C 語言的編程世界里&#xff0c;對內存的高效操作至關重要。C 標準庫為我們提供了一系列強大的內存操作函數&#xff0c;其中 memcpy、memmove、memset 和 memcmp 這四個函數是處理內存數據的得力助手。接下來&#xff0c;讓我們深入了解它們…

Java 集合

Java 集合 在 Java 編程中&#xff0c;集合框架&#xff08;java.util 包&#xff09;是處理一組對象的強大工具。與數組不同&#xff0c;集合提供了更靈活的數據存儲和操作方式。本文將詳細介紹 Java 集合框架的核心接口、常用實現類及其應用場景&#xff0c;幫助你更好地理解…

go基本語法

跟Java比較學習。 hello word 示例代碼 test1.go文件&#xff1a; // 包路徑 package main// 導入模塊&#xff0c;下面兩種都行 import ("fmt" ) import "log"// main方法 func main() {log.Print("hello word !!!")fmt.Print("hello …

【Docker】如何在Linux、Windows、MacOS中安裝Docker

Linux安裝Docker 在終端中執行一鍵安裝腳本命令安裝docker sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun1.1 配置docker鏡像源 在終端執行 一行命令&#xff0c;編輯配置文件 sudo …

2.24力扣-回溯電話號碼的字母組合

17. 電話號碼的字母組合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<String> ans new LinkedList<>();StringBuilder temp new StringBuilder();public List<String> letterCombinations(String digits) {if(digitsnull || digits.leng…

Cocos Creator Shader入門實戰(一):材質和Effect的了解

引擎版本&#xff1a;3.8.5 環境&#xff1a; Windows 簡介 在Cocos Creator中&#xff0c;游戲炫彩繽紛的效果是借助著色器(Shader)來實現的。 Cocos主要基于OpenGL ES&#xff0c;而Shader的編寫則是在可編程渲染管線中基于修改&#xff1a;頂點著色器(Vertex) 和 片段著色…

akka現有的分布式定時任務框架總結

根據你的需求&#xff0c;以下是一些基于 Akka 實現的分布式定時任務框架&#xff0c;以及相關的 GitHub 項目推薦&#xff1a; 1. Openjob Openjob 是一個基于 Akka 架構的新一代分布式任務調度框架&#xff0c;支持多種定時任務、延時任務、工作流設計&#xff0c;采用無中…

微信小程序地圖map全方位解析

微信小程序地圖map全方位解析 微信小程序的 <map> 組件是一個功能強大的工具&#xff0c;可以實現地圖展示、定位、標注、路徑規劃等多種功能。以下是全方位解析微信小程序地圖組件的知識點&#xff1a; 一、地圖組件基礎 1. 引入 <map> 組件 在頁面的 .wxml 文…

Python的PyTorch+CNN深度學習技術在人臉識別項目中的應用

人臉識別技術是一種基于人臉特征進行身份識別的生物識別技術&#xff0c;其核心原理包括人臉檢測、人臉對齊、特征提取、特征匹配、身份識別。 一、應用場景 安防&#xff1a;門禁、監控。 金融&#xff1a;刷臉支付、身份驗證。 社交&#xff1a;自動標注、美顏。 醫療&am…