【中工开发者】鸿蒙应用 图书管理系统

打印 上一主题 下一主题

主题 1029|帖子 1029|积分 3087

“本学期学习了鸿蒙开发课程,想通过一个小项目检验一下自己所学,下面把该项目总结一下,为学习开发鸿蒙的小伙伴提供一些参考。

  1. import router from '@ohos.router'
  2. @Entry
  3. @Component
  4. struct Login {
  5.   @State userName:string =''
  6.   @State password:string = ''
  7.   build() {
  8.     Column() {
  9.       Text('图书管理系统').margin({ top: 30 }).fontSize(40)
  10.       Image($r('app.media.icon'))
  11.         .height(100).width(100)
  12.         .margin({ top: 100 })
  13.       TextInput().width("80%").height(50).margin(10)
  14.         .onChange((value) =>{
  15.           this.userName =value
  16.         })
  17.       TextInput().width("80%").height(50).margin(10)
  18.         .type(InputType.Password)
  19.         .onChange((value01) =>{
  20.           this.password =value01
  21.         })
  22.       Button("登录").onClick(() => {
  23.         if(this.userName == '001' && this.password == '123'){
  24.           router.pushUrl({ url: 'pages/Main' })
  25.         }else{
  26.           this.userName = ''
  27.           this.password = ''
  28.         }
  29.       })
  30.         .width("60%")
  31.         .height(50)
  32.         .margin(20)
  33.       Button("注册").onClick(() => {
  34.         router.pushUrl({ url: 'pages/Register' })
  35.       })
  36.         .width("60%")
  37.         .height(50)
  38.         .margin(20)
  39.     }.height("100%")
  40.     .width("100%")
  41.   }
  42. }
复制代码
这行代码导入了OpenHarmony的路由模块,使得组件可以跳转到其他页面。
@Entry:表示这个组件是一个页面的入口点。
@Component:标志这个类是一个ArkUI组件。
@State userName: string = '':界说了一个名为userName的状态变量,用于存储用户名,初始值为空字符串。
@State password: string = '':界说了一个名为password的状态变量,用于存储密码,初始值为空字符串。
Column():创建一个垂直布局容器。
Text('图书管理系统'):显示文本“图书管理系统”。
Image($r('app.media.icon')):显示一个图片,图片资源通过$r函数引用。
TextInput():创建两个文本输入框,分别用于输入用户名和密码。用户名输入框绑定到userName状态,密码输入框绑定到password状态。
Button("登录"):创建一个登录按钮,点击时查抄用户名和密码是否正确(这里硬编码为'001'和'123'),假如正确则跳转到pages/Main页面,否则清空用户名和密码。
Button("注册"):创建一个注册按钮,点击时跳转到pages/Register页面。
这段代码实现了一个简朴的登录界面,用户可以输入用户名和密码进行登录,或者点击注册按钮跳转到注册页面。登录乐成后,会跳转到主页面。

这个页面就是应用的home界面
使用private swiperController: SwiperController = new SwiperController():创建了一个SwiperController实例,用于控制轮播图的举动。SwiperController是ArkUI提供的一个系统类,用于实现轮播图的切换等功能。
轮播图内包含三个Text组件,每个Text组件都设置了背景图片(通过$r函数引用资源),并显示了文本“轮播图1”、“轮播图2”和“轮播图3”。这些文本被居中显示,并设置了字体大小。
代码如下:
  1. @Entry
  2. @Component
  3. struct Main {
  4.   @State content: string = ""
  5.   //创建轮播实例对象--SwiperController系统函数
  6.   private swiperController: SwiperController = new SwiperController()
  7.   build() {
  8.     Column() {
  9.       Swiper(this.swiperController) {
  10.         Text("轮播图1")
  11.           .width('98%')
  12.           .height(150)
  13.           .backgroundImage($r('app.media.b1'))
  14.           .backgroundImageSize({"width":"100%","height":"100%"})
  15.           .textAlign(TextAlign.Center)
  16.           .fontSize(30)
  17.         Text("轮播图2")
  18.           .width('98%')
  19.           .height(150)
  20.           .backgroundImage($r('app.media.b2'))
  21.           .backgroundImageSize({"width":"100%","height":"100%"})
  22.           .textAlign(TextAlign.Center)
  23.           .fontSize(30)
  24.         Text("轮播图3")
  25.           .width('98%')
  26.           .height(150)
  27.           .backgroundImage($r('app.media.b3'))
  28.           .backgroundImageSize({"width":"100%","height":"100%"})
  29.           .textAlign(TextAlign.Center)
  30.           .fontSize(30)
  31.       }
  32.       .loop(true)
  33.       .autoPlay(true)
  34.       .interval(3000)
  35.       .indicatorStyle({
  36.         size: 80,
  37.         left: 300,
  38.         color: Color.Red
  39.       }).align(Alignment.Center)
  40.     }.height('100%').width('100%').alignItems(HorizontalAlign.Center)
  41.   }
  42. }
复制代码

这个界面可以进行简朴的动画介绍册本
@State videoSrc: Resource = $rawfile('test.mp4'):界说了一个状态变量videoSrc,用于存储视频文件的资源路径。这里使用了$rawfile函数来引用原始文件目录下的test.mp4视频文件。
@State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X:界说了一个状态变量curRate,用于控制视频的播放速度。初始值设置为正常速度(1倍速)。
@State showControls: boolean = true:界说了一个状态变量showControls,用于控制是否显示视频控制栏(如播放/暂停按钮、进度条等)。初始值设置为true,即显示控制栏。
@State isAutoPlay: boolean = false:界说了一个状态变量isAutoPlay,用于控制视频是否主动播放。初始值设置为false,即不主动播放。
视频播放组件支持多种事件回调,如开始播放、暂停、播放竣事、出错、预备完成、正在跳转、跳转完成和更新等,用户可以通过这些回调来执行相应的逻辑处理。
代码如下:
  1. @Entry
  2. @Component
  3. struct VideoCreateComponent {
  4.   @State videoSrc: Resource = $rawfile('test.mp4')  // 视频源
  5.   @State previewUri: Resource = $r('app.media.pp1') // 预览图片
  6.   @State curRate: PlaybackSpeed = PlaybackSpeed.Speed_Forward_1_00_X // 播放速度
  7.   @State isAutoPlay: boolean = false // 不自动播放
  8.   @State showControls: boolean = true // 显示控制栏
  9.   controller: VideoController = new VideoController()  // 视频控制器
  10.   build() {
  11.     Column() {
  12.       Video({ // Video组件
  13.         src: this.videoSrc,
  14.         previewUri: this.previewUri,
  15.         currentProgressRate: this.curRate,
  16.         controller: this.controller
  17.       }).width("100%").height("66%")
  18.         .autoPlay(this.isAutoPlay)
  19.         .controls(this.showControls)
  20.         .onStart(() => {
  21.           console.info('onStart')
  22.         })
  23.         .onPause(() => {
  24.           console.info('onPause')
  25.         })
  26.         .onFinish(() => {
  27.           console.info('onFinish')
  28.         })
  29.         .onError(() => {
  30.           console.info('onFinish')
  31.         })
  32.         .onPrepared((e) => {
  33.           console.info('onPrepared is ' + e.duration)
  34.         })
  35.         .onSeeking((e) => {
  36.           console.info('onSeeking is ' + e.time)
  37.         })
  38.         .onSeeked((e) => {
  39.           console.info('onSeeked is ' + e.time)
  40.         })
  41.         .onUpdate((e) => {
  42.           console.info('onUpdate is ' + e.time)
  43.         })
  44.       Row() {
  45.         Button('开始').onClick(() => {
  46.           this.controller.start() // 开始播放
  47.         }).margin(5)
  48.         Button('暂停').onClick(() => {
  49.           this.controller.pause() // 暂停播放
  50.         }).margin(5)
  51.         Button('停止').onClick(() => {
  52.           this.controller.stop() // 结束播放
  53.         }).margin(5)
  54.         Button('跳到60秒').onClick(() => {
  55.           this.controller.setCurrentTime(60, SeekMode.Accurate) // 精准跳转到视频的60s位置
  56.         }).margin(5)
  57.       }
  58.       Row() {
  59.         Button('0.75倍速').onClick(() => {
  60.           this.curRate = PlaybackSpeed.Speed_Forward_0_75_X // 0.75倍速播放
  61.         }).margin(5)
  62.         Button('1倍数').onClick(() => {
  63.           this.curRate = PlaybackSpeed.Speed_Forward_1_00_X // 原倍速播放
  64.         }).margin(5)
  65.         Button('2倍数').onClick(() => {
  66.           this.curRate = PlaybackSpeed.Speed_Forward_2_00_X // 2倍速播放
  67.         }).margin(5)
  68.       }
  69.     }.alignItems(HorizontalAlign.Center).padding({ left: 5, right: 5 })
  70.   }
  71. }
复制代码
其他界面不再赘述,以下是一些界面截图:



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

反转基因福娃

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表