鸿蒙Next开发-通讯录app,数据库实现添加联系人信息(四)

1. 前言导读

在上集文章中,已经学习了如何创建数据库,如何建表,这集我们将如何通过数据库实现保存(添加)联系人信息

  1. 鸿蒙Next开发-通讯录app,创建数据库(三):https://blog.csdn.net/jky_yihuangxing/article/details/141207750

2. 开发步骤

获取到RdbStore后,调用insert()接口插入数据
注意事项:RdbStore是在UIAbility里面初始化话,在其他页面使用RdbStore实例,则需要导出和导入,具体代码在上集中
在这里插入图片描述

  1. 在CreateContactsPage.ets 页面中,导入storeDb
import { storeDb } from '../entryability/EntryAbility';
  1. 构建ValuesBucket需要插入的字段
    注意:要和建表的字段一一对应
 const valuesBucket: relationalStore.ValuesBucket = {
                'ct_username': this.ct_username,
                'ct_mobile': this.ct_mobile,
                'ct_bg_color': getRandomColor()
              }
  1. 调用insert()接口插入数据

insert(table: string, values: ValuesBucket, callback: AsyncCallback):void
向目标表中插入一行数据,使用callback异步回调。由于共享内存大小限制为2Mb,因此单条数据的大小需小于2Mb,否则会查询失败。

参数:

参数名类型必填说明
tablestring指定的目标表名。
valuesValuesBucket表示要插入到表中的数据行。
callbackAsyncCallback指定回调函数。如果操作成功,返回行ID;否则返回-1。

官方文档指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-data-relationalstore-V5#insert

storeDb.insert('Contacts_Table', valuesBucket, (err: BusinessError, rowId: number) => {
                if (err) {
                  console.error(`------------Failed to insert data. Code:${err.code}, message:${err.message}`);
                  return
                }
                promptAction.showToast({
                  message: '创建成功'
                })

                router.back({
                  url: 'pages/Index',
                  params: {
                    result_code: 200
                  }
                })
              })

3. 具体代码实现全过程

CreateContactsPage.ets 新建联系人页面

import { promptAction, router } from '@kit.ArkUI';
import { relationalStore } from '@kit.ArkData';
import { BusinessError } from '@kit.BasicServicesKit';
import { storeDb } from '../entryability/EntryAbility';

const colors: Array<string> = ['#ff6161', '#ffb120', '#7484fc', '#00cee5']

function getRandomColor():string {
  const randomIndex = Math.floor(Math.random() * colors.length);
  return colors[randomIndex];
}

@Entry
@Component
struct CreateContactsPage {
  @State ct_username: string = ''
  @State ct_mobile: string = ''

  build() {

    Column() {
      Row() {
        Image($r('app.media.img_back')).width(24)
        Text('新建联系人')
          .padding({ left: 16 })
          .fontSize(18)
          .fontWeight(500)
      }
      .width('100%')
      .padding({ left: 16 })
      .onClick(() => {
        router.back()
      })


      Column() {
        TextInput({ placeholder: '请输入联系人姓名'})
          .copyOption(CopyOptions.LocalDevice)
          .onChange((value) => {
            this.ct_username = value
          })

        TextInput({ placeholder: '请输入手机号' })
          .type(InputType.PhoneNumber)
          .margin({ top: 10 })
          .onChange((value) => {
            this.ct_mobile = value
          })

        Button('新建联系人')
          .width('100%')
          .margin({ top: 30 })
          .onClick(() => {
            if (this.ct_username == '' || this.ct_mobile == '') {
              promptAction.showToast({
                message: '联系人姓名或手机号不能为空'
              })

              return
            }

            if (storeDb !== undefined) {
              const valuesBucket: relationalStore.ValuesBucket = {
                'ct_username': this.ct_username,
                'ct_mobile': this.ct_mobile,
                'ct_bg_color': getRandomColor()
              }
              storeDb.insert('Contacts_Table', valuesBucket, (err: BusinessError, rowId: number) => {
                if (err) {
                  console.error(`------------Failed to insert data. Code:${err.code}, message:${err.message}`);
                  return
                }
                promptAction.showToast({
                  message: '创建成功'
                })

                router.back({
                  url: 'pages/Index',
                  params: {
                    result_code: 200
                  }
                })
              })

            } else {
              console.error('------------', `Failed store is undefined`);
            }

          })

      }.alignItems(HorizontalAlign.Start)
      .width('100%')
      .padding(20)
      .margin({ top: 50 })

    }
    .height('100%')
    .width('100%')
  }
}

4. 运行效果

在这里插入图片描述

是的,C语言通讯录管理系统可以实现添加联系人信息、删除联系人信息、修改联系人信息、查找联系人信息和显示所有联系人信息,具体实现方式如下: 1. 添加联系人信息 可以使用结构体来存储联系人信息,然后使用链表来存储多个联系人信息,每次添加联系人时,创建一个新的节点,将联系人信息存储在节点中,然后将该节点插入到链表中即可。 示例代码: ```c typedef struct Contact { char name[20]; char phone[20]; char email[30]; struct Contact *next; } Contact; Contact *head = NULL; // 链表头节点 void addContact() { Contact *newContact = (Contact *)malloc(sizeof(Contact)); printf("请输入姓名:"); scanf("%s", newContact->name); printf("请输入电话:"); scanf("%s", newContact->phone); printf("请输入邮箱:"); scanf("%s", newContact->email); newContact->next = NULL; if (head == NULL) { head = newContact; } else { Contact *p = head; while (p->next != NULL) { p = p->next; } p->next = newContact; } printf("添加联系人成功!\n"); } ``` 2. 删除联系人信息 删除联系人时,需要先查询该联系人是否存在,如果存在则删除该联系人节点,否则提示该联系人不存在。 示例代码: ```c void deleteContact() { char name[20]; printf("请输入要删除的联系人姓名:"); scanf("%s", name); if (head == NULL) { printf("通讯录为空,无法删除联系人!\n"); return; } if (strcmp(head->name, name) == 0) { Contact *temp = head; head = head->next; free(temp); printf("删除联系人成功!\n"); return; } Contact *p = head; while (p->next != NULL) { if (strcmp(p->next->name, name) == 0) { Contact *temp = p->next; p->next = temp->next; free(temp); printf("删除联系人成功!\n"); return; } p = p->next; } printf("该联系人不存在,无法删除!\n"); } ``` 3. 修改联系人信息 修改联系人信息时,需要先查询该联系人是否存在,如果存在则修改联系人信息,否则提示该联系人不存在。 示例代码: ```c void editContact() { char name[20]; printf("请输入要修改的联系人姓名:"); scanf("%s", name); Contact *p = head; while (p != NULL) { if (strcmp(p->name, name) == 0) { printf("请输入新的电话:"); scanf("%s", p->phone); printf("请输入新的邮箱:"); scanf("%s", p->email); printf("修改联系人信息成功!\n"); return; } p = p->next; } printf("该联系人不存在,无法修改!\n"); } ``` 4. 查找联系人信息 查找联系人信息时,可以根据姓名、电话、邮箱等信息进行查找。如果找到符合条件的联系人,则输出该联系人的详细信息,否则提示查无此人。 示例代码: ```c void searchContact() { char keyword[20]; printf("请输入要查找的关键词:"); scanf("%s", keyword); Contact *p = head; int count = 0; while (p != NULL) { if (strstr(p->name, keyword) != NULL || strstr(p->phone, keyword) != NULL || strstr(p->email, keyword) != NULL) { printf("姓名:%s\t电话:%s\t邮箱:%s\n", p->name, p->phone, p->email); count++; } p = p->next; } if (count == 0) { printf("查无此人!\n"); } } ``` 5. 显示所有联系人信息 显示所有联系人信息时,只需遍历整个链表,输出每个联系人的详细信息即可。 示例代码: ```c void displayAllContacts() { Contact *p = head; while (p != NULL) { printf("姓名:%s\t电话:%s\t邮箱:%s\n", p->name, p->phone, p->email); p = p->next; } } ``` 以上是C语言通讯录管理系统的实现方式,可以根据自己的需求进行修改和完善。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩宇软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值