Quality Control软件:Applied Materials二次开发_(11).数据库管理与优化

数据库管理与优化

在质量控制(QC)软件的开发过程中,数据库管理与优化是至关重要的环节。数据库是存储和管理数据的核心组件,对于确保数据的一致性、完整性和高效性具有决定性作用。本节将详细探讨数据库管理与优化的原理和内容,包括数据库设计、性能优化、数据备份与恢复、数据安全等方面。通过具体的示例和代码,我们将展示如何在工业软件中高效地管理和优化数据库。

在这里插入图片描述

数据库设计

1. 数据库规范化

数据库规范化是数据库设计的重要步骤,通过消除数据冗余和确保数据依赖关系的正确性,提高数据的一致性和完整性。常见的规范化形式包括第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和第四范式(4NF)。

第一范式(1NF)

第一范式要求数据库表中的每个字段都是不可再分的基本数据项。例如,假设我们有一个存储产品质量检验结果的表,其中包含以下字段:ProductIDProductNameInspectorNameInspectionDateInspectionResultsInspectionResults字段存储的是多个检验结果的组合,如["合格", "不合格"]。为了满足第一范式,我们需要将InspectionResults字段拆分成多个行,每行存储一个检验结果。


-- 原始表

CREATE TABLE InspectionResults (

    ProductID INT,

    ProductName VARCHAR(255),

    InspectorName VARCHAR(255),

    InspectionDate DATE,

    InspectionResults VARCHAR(255)

);



-- 拆分后的表

CREATE TABLE InspectionResults (

    ProductID INT,

    ProductName VARCHAR(255),

    InspectorName VARCHAR(255),

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

);

2. 第二范式(2NF)

第二范式要求数据库表满足第一范式,并且所有的非主键字段完全依赖于主键。例如,假设我们有一个存储产品信息的表,其中包含以下字段:ProductIDProductNameCategoryIDCategoryNameSupplierIDSupplierNameProductID是主键,但CategoryNameSupplierName也依赖于CategoryIDSupplierID,因此需要将这些字段拆分到单独的表中。


-- 原始表

CREATE TABLE Products (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(255),

    CategoryID INT,

    CategoryName VARCHAR(255),

    SupplierID INT,

    SupplierName VARCHAR(255)

);



-- 拆分后的表

CREATE TABLE Products (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(255),

    CategoryID INT,

    SupplierID INT

);



CREATE TABLE Categories (

    CategoryID INT PRIMARY KEY,

    CategoryName VARCHAR(255)

);



CREATE TABLE Suppliers (

    SupplierID INT PRIMARY KEY,

    SupplierName VARCHAR(255)

);

3. 第三范式(3NF)

第三范式要求数据库表满足第二范式,并且所有的非主键字段不依赖于其他非主键字段。例如,假设我们有一个存储产品质量检验结果的表,其中包含以下字段:ProductIDProductNameInspectorIDInspectorNameInspectionDateInspectionResultInspectorName依赖于InspectorID,因此需要将这些字段拆分到单独的表中。


-- 原始表

CREATE TABLE InspectionResults (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectorName VARCHAR(255),

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

);



-- 拆分后的表

CREATE TABLE InspectionResults (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255),

    FOREIGN KEY (InspectorID) REFERENCES Inspectors(InspectorID)

);



CREATE TABLE Inspectors (

    InspectorID INT PRIMARY KEY,

    InspectorName VARCHAR(255)

);

4. 第四范式(4NF)

第四范式要求数据库表满足第三范式,并且没有多值依赖。例如,假设我们有一个存储产品检验信息的表,其中包含以下字段:ProductIDInspectorIDInspectionTypeInspectionDateInspectorIDInspectionType之间存在多值依赖,因此需要将这些字段拆分到单独的表中。


-- 原始表

CREATE TABLE InspectionInfo (

    ProductID INT PRIMARY KEY,

    InspectorID INT,

    InspectionType VARCHAR(255),

    InspectionDate DATE

);



-- 拆分后的表

CREATE TABLE InspectionInfo (

    ProductID INT PRIMARY KEY,

    InspectorID INT,

    InspectionDate DATE,

    FOREIGN KEY (InspectorID) REFERENCES Inspectors(InspectorID)

);



CREATE TABLE InspectorTypes (

    InspectorID INT,

    InspectionType VARCHAR(255),

    PRIMARY KEY (InspectorID, InspectionType),

    FOREIGN KEY (InspectorID) REFERENCES Inspectors(InspectorID)

);

数据库索引

1. 索引的基本原理

索引是一种数据结构,用于提高数据库查询的效率。通过在表的某些字段上创建索引,可以快速定位到所需的数据行,从而减少查询时间。常见的索引类型包括B树索引、哈希索引和全文索引。

B树索引

B树索引是最常用的索引类型,适用于范围查询和排序操作。例如,假设我们有一个存储产品质量检验结果的表,经常需要根据ProductNameInspectionDate进行查询,可以在这两个字段上创建B树索引。


CREATE INDEX idx_product_name ON InspectionResults (ProductName);

CREATE INDEX idx_inspection_date ON InspectionResults (InspectionDate);

哈希索引

哈希索引适用于等值查询,通过哈希函数将键值转换为哈希码,从而快速定位到数据行。例如,假设我们有一个存储产品信息的表,经常需要根据ProductID进行查询,可以创建哈希索引。


CREATE INDEX idx_product_id ON Products (ProductID) USING HASH;

全文索引

全文索引适用于文本搜索,可以快速找到包含特定单词的记录。例如,假设我们有一个存储产品描述的表,经常需要根据产品描述进行全文搜索,可以创建全文索引。


CREATE FULLTEXT INDEX idx_product_description ON Products (ProductDescription);

2. 索引的优化

选择合适的索引类型

根据查询需求选择合适的索引类型可以显著提高查询性能。例如,对于等值查询,哈希索引效率更高;对于范围查询,B树索引更合适。

避免过度索引

过度索引会增加存储开销和写入操作的性能开销。因此,需要根据实际查询需求合理选择索引字段。例如,如果某个字段很少用于查询,可以不为其创建索引。

使用复合索引

复合索引是在多个字段上创建的索引,可以提高多字段查询的性能。例如,假设我们经常需要根据ProductNameInspectionDate进行联合查询,可以创建复合索引。


CREATE INDEX idx_product_name_inspection_date ON InspectionResults (ProductName, InspectionDate);

定期维护索引

定期重建和优化索引可以保持其高效性。例如,可以使用ANALYZEOPTIMIZE命令来维护索引。


ANALYZE TABLE InspectionResults;

OPTIMIZE TABLE InspectionResults;

数据库性能优化

1. 查询优化

使用合适的数据类型

选择合适的数据类型可以减少存储开销和提高查询性能。例如,对于存储日期的字段,应该使用DATE类型而不是VARCHAR类型。


-- 不合适的字段类型

CREATE TABLE Orders (

    OrderID INT PRIMARY KEY,

    OrderDate VARCHAR(255)

);



-- 合适的字段类型

CREATE TABLE Orders (

    OrderID INT PRIMARY KEY,

    OrderDate DATE

);

优化查询语句

合理编写查询语句可以提高查询性能。例如,使用EXISTS代替IN可以减少子查询的执行次数。


-- 使用 IN

SELECT * FROM Products

WHERE CategoryID IN (SELECT CategoryID FROM Categories WHERE CategoryName = '电子');



-- 使用 EXISTS

SELECT * FROM Products p

WHERE EXISTS (SELECT 1 FROM Categories c WHERE c.CategoryID = p.CategoryID AND c.CategoryName = '电子');

使用索引

在查询语句中使用索引可以显著提高查询性能。例如,假设我们有一个存储产品质量检验结果的表,经常需要根据ProductNameInspectionDate进行查询,可以在查询语句中使用索引。


SELECT * FROM InspectionResults

WHERE ProductName = '产品A' AND InspectionDate BETWEEN '2023-01-01' AND '2023-12-31';

2. 存储优化

使用分区表

分区表可以将大表分成多个小表,提高查询和管理的效率。例如,假设我们有一个存储产品质量检验结果的表,可以根据InspectionDate进行分区。


CREATE TABLE InspectionResults (

    ProductID INT,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

) PARTITION BY RANGE (YEAR(InspectionDate)) (

    PARTITION p0 VALUES LESS THAN (2020),

    PARTITION p1 VALUES LESS THAN (2021),

    PARTITION p2 VALUES LESS THAN (2022),

    PARTITION p3 VALUES LESS THAN (2023),

    PARTITION p4 VALUES LESS THAN MAXVALUE

);

压缩数据

压缩数据可以减少存储空间和提高查询性能。例如,可以使用MySQL的ROW_FORMAT=COMPRESSED选项来压缩表数据。


CREATE TABLE InspectionResults (

    ProductID INT,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

) ENGINE=InnoDB ROW_FORMAT=COMPRESSED;

使用合适的数据存储引擎

选择合适的数据存储引擎可以提高数据库的性能。例如,InnoDB引擎支持事务和行级锁定,适合高并发的场景;MyISAM引擎不支持事务,但查询性能更高。


-- 使用 InnoDB 引擎

CREATE TABLE InspectionResults (

    ProductID INT,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

) ENGINE=InnoDB;



-- 使用 MyISAM 引擎

CREATE TABLE InspectionResults (

    ProductID INT,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

) ENGINE=MyISAM;

3. 高并发处理

使用连接池

连接池可以管理和重用数据库连接,减少连接和断开连接的开销。例如,可以使用Java的HikariCP连接池来管理数据库连接。


import com.zaxxer.hikari.HikariConfig;

import com.zaxxer.hikari.HikariDataSource;



public class DatabaseConnectionPool {

    private static HikariDataSource dataSource;



    static {

        HikariConfig config = new HikariConfig();

        config.setJdbcUrl("jdbc:mysql://localhost:3306/qc_database");

        config.setUsername("user");

        config.setPassword("password");

        config.setMaximumPoolSize(10);

        config.setIdleTimeout(30000);

        config.setConnectionTimeout(30000);

        dataSource = new HikariDataSource(config);

    }



    public static HikariDataSource getDataSource() {

        return dataSource;

    }

}

读写分离

读写分离可以提高数据库的并发处理能力,通过将读操作和写操作分别路由到不同的数据库实例来实现。例如,可以使用MySQL的主从复制来实现读写分离。


-- 主库

CREATE TABLE InspectionResults (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

) ENGINE=InnoDB;



-- 从库

CREATE TABLE InspectionResults (

    ProductID INT PRIMARY KEY,

    ProductName VARCHAR(255),

    InspectorID INT,

    InspectionDate DATE,

    InspectionResult VARCHAR(255)

) ENGINE=InnoDB;

4. 数据库缓存

使用查询缓存

查询缓存可以缓存查询结果,减少重复查询的开销。例如,可以在MySQL中启用查询缓存。


-- 启用查询缓存

SET GLOBAL query_cache_type = 1;

SET GLOBAL query_cache_size = 1000000;

使用应用程序缓存

应用程序缓存可以在应用层缓存数据,减少数据库的查询压力。例如,可以使用Redis来缓存查询结果。


import redis.clients.jedis.Jedis;



public class RedisCache {

    private static Jedis jedis = new Jedis("localhost", 6379);



    public static void setCache(String key, String value) {

        jedis.set(key, value);

    }



    public static String getCache(String key) {

        return jedis.get(key);

    }

}



public class DataFetcher {

    public static String fetchInspectionResults(String productID) {

        String cacheKey = "inspection_results:" + productID;

        String cachedResult = RedisCache.getCache(cacheKey);

        if (cachedResult != null) {

            return cachedResult;

        }



        // 从数据库中查询数据

        String sql = "SELECT * FROM InspectionResults WHERE ProductID = ?";

        try (Connection conn = DatabaseConnectionPool.getDataSource().getConnection();

             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, productID);

            ResultSet rs = pstmt.executeQuery();

            if (rs.next()) {

                String result = rs.getString("InspectionResult");

                RedisCache.setCache(cacheKey, result);

                return result;

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        return null;

    }

}

数据备份与恢复

1. 数据备份

数据备份是确保数据安全的重要措施,可以通过多种方式实现。常见的备份方法包括全量备份、增量备份和差异备份。

全量备份

全量备份是备份整个数据库,适用于数据量较小的场景。例如,可以使用MySQL的mysqldump工具进行全量备份。


mysqldump -u user -p password qc_database > qc_database_backup.sql

增量备份

增量备份是备份自上次备份以来发生变化的数据,适用于数据量较大的场景。例如,可以使用MySQL的mysqlbinlog工具进行增量备份。


mysqlbinlog --start-datetime="2023-01-01 00:00:00" --stop-datetime="2023-01-02 00:00:00" /var/lib/mysql/mysql-bin.000001 > increment_backup.sql

差异备份

差异备份是备份自上次全量备份以来发生变化的数据,适用于数据量较大且变化频繁的场景。例如,可以使用MySQL的mysqlpump工具进行差异备份。


mysqlpump --user=user --password=password --databases qc_database --since-datetime="2023-01-01 00:00:00" > diff_backup.sql

2. 数据恢复

数据恢复是将备份的数据恢复到数据库中,确保数据的完整性和可用性。常见的数据恢复方法包括使用备份文件恢复和使用日志文件恢复。

使用备份文件恢复

使用备份文件恢复是最常见的数据恢复方法。例如,可以使用mysql命令将全量备份文件恢复到数据库中。


mysql -u user -p password qc_database < qc_database_backup.sql

使用日志文件恢复

使用日志文件恢复可以恢复到特定的时间点。例如,可以使用mysqlbinlog工具将增量备份的日志文件恢复到数据库中。


mysqlbinlog increment_backup.sql | mysql -u user -p password qc_database

数据安全

1. 用户权限管理

用户权限管理是确保数据安全的重要措施。通过合理配置用户权限,可以防止未经授权的访问和操作。常见的权限类型包括SELECTINSERTUPDATEDELETE

创建用户并授予权限

可以使用CREATE USERGRANT命令来创建用户并授予权限。例如,假设我们需要为质量控制(QC)部门创建一个用户qc_user,并授予其对qc_database数据库的读写权限。


-- 创建用户

CREATE USER 'qc_user'@'localhost' IDENTIFIED BY 'password';



-- 授予权限

GRANT SELECT, INSERT, UPDATE, DELETE ON qc_database.* TO 'qc_user'@'localhost';

撤销用户权限

如果需要撤销用户的某些权限,可以使用REVOKE命令。例如,假设我们需要撤销qc_userqc_database数据库的删除权限。


-- 撤销权限

REVOKE DELETE ON qc_database.* FROM 'qc_user'@'localhost';

2. 数据加密

数据加密是保护敏感数据的重要手段。通过加密数据,可以防止数据在传输和存储过程中被窃取。常见的加密方法包括对称加密和非对称加密。

对称加密

对称加密使用相同的密钥进行加密和解密。例如,可以使用MySQL的AES_ENCRYPTAES_DECRYPT函数来实现对称加密。假设我们需要对产品质量检验结果进行加密存储。


-- 加密数据

INSERT INTO InspectionResults (ProductID, ProductName, InspectorID, InspectionDate, InspectionResult)

VALUES (1, '产品A', 1, '2023-01-01', AES_ENCRYPT('合格', '密钥'));



-- 解密数据

SELECT ProductID, ProductName, InspectorID, InspectionDate, AES_DECRYPT(InspectionResult, '密钥') AS InspectionResult

FROM InspectionResults;

非对称加密

非对称加密使用公钥和私钥进行加密和解密。例如,可以使用Java的javax.crypto包来实现非对称加密。假设我们需要在Java应用程序中对产品质量检验结果进行非对称加密。


import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.PrivateKey;

import java.security.PublicKey;

import javax.crypto.Cipher;



public class DataEncryption {

    public static void main(String[] args) {

        try {

            // 生成公钥和私钥对

            KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");

            keyGen.initialize(2048);

            KeyPair keyPair = keyGen.generateKeyPair();

            PublicKey publicKey = keyPair.getPublic();

            PrivateKey privateKey = keyPair.getPrivate();



            // 加密数据

            String data = "合格";

            Cipher cipher = Cipher.getInstance("RSA");

            cipher.init(Cipher.ENCRYPT_MODE, publicKey);

            byte[] encryptedData = cipher.doFinal(data.getBytes());

            System.out.println("加密后的数据: " + new String(encryptedData));



            // 解密数据

            cipher.init(Cipher.DECRYPT_MODE, privateKey);

            byte[] decryptedData = cipher.doFinal(encryptedData);

            System.out.println("解密后的数据: " + new String(decryptedData));

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}

3. 数据脱敏

数据脱敏是在不影响数据使用的情况下,对敏感数据进行处理,以保护用户隐私。常见的数据脱敏方法包括屏蔽、替换和哈希。

屏蔽

通过屏蔽部分数据来保护敏感信息。例如,假设我们需要屏蔽用户的手机号码。


-- 屏蔽手机号码

SELECT CONCAT(SUBSTRING(PhoneNumber, 1, 3), '****', SUBSTRING(PhoneNumber, 8, 4)) AS MaskedPhoneNumber

FROM Users;

替换

通过替换敏感数据来保护用户隐私。例如,假设我们需要将用户的邮箱地址替换为匿名邮箱地址。


-- 替换邮箱地址

UPDATE Users

SET Email = CONCAT('user', UserID, '@example.com');

哈希

通过使用哈希函数将敏感数据转换为固定长度的字符串来保护用户隐私。例如,假设我们需要对用户的密码进行哈希处理。


import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;



public class DataMasking {

    public static String hashPassword(String password) {

        try {

            MessageDigest md = MessageDigest.getInstance("SHA-256");

            byte[] hashedBytes = md.digest(password.getBytes());

            StringBuilder sb = new StringBuilder();

            for (byte b : hashedBytes) {

                sb.append(String.format("%02x", b));

            }

            return sb.toString();

        } catch (NoSuchAlgorithmException e) {

            e.printStackTrace();

        }

        return null;

    }



    public static void main(String[] args) {

        String password = "password123";

        String hashedPassword = hashPassword(password);

        System.out.println("哈希后的密码: " + hashedPassword);

    }

}

4. 审计日志

审计日志记录了数据库的所有操作,用于追踪和审计数据的访问和修改。通过配置审计日志,可以增强数据的安全性和合规性。

启用审计日志

可以使用MySQL的审计插件来启用审计日志。例如,可以使用mysql_audit插件。


-- 安装审计插件

INSTALL PLUGIN mysql_audit SONAME 'mysql_audit.so';



-- 启用审计日志

SET GLOBAL audit_log_policy = ALL;

SET GLOBAL audit_log_format = NEW;

查看审计日志

审计日志文件通常保存在MySQL的配置目录中,可以通过查看日志文件来追踪数据库操作。


# 查看审计日志文件

cat /var/log/mysql/audit.log

数据库监控

1. 性能监控

性能监控是确保数据库高效运行的重要手段。通过监控数据库的性能指标,可以及时发现和解决问题。常见的性能监控指标包括CPU使用率、内存使用率、磁盘I/O和查询性能。

使用性能监控工具

可以使用多种工具来监控数据库性能,例如MySQL的Perfomance Schema和第三方工具如PrometheusGrafana


-- 查询 Performance Schema 中的性能指标

SELECT * FROM performance_schema.events_statements_summary_by_digest

ORDER BY SUM_TIMER_WAIT DESC

LIMIT 10;

2. 安全监控

安全监控是确保数据库安全的重要手段。通过监控数据库的安全事件,可以及时发现和防止安全威胁。常见的安全监控指标包括登录失败次数、SQL注入尝试和数据访问异常。

使用安全监控工具

可以使用多种工具来监控数据库安全,例如MySQL的Audit Plugin和第三方工具如OSSECSIEM


-- 查询 Audit Plugin 中的安全事件

SELECT * FROM mysql.audit_log

WHERE event_type = 'CONNECT' AND status = 'Failure';

数据库维护

1. 定期检查和优化

定期检查和优化数据库可以保持其高效性和稳定性。常见的维护任务包括检查表结构、优化查询和清理无用数据。

检查表结构

可以使用CHECK TABLE命令来检查表的结构和数据完整性。


-- 检查表结构

CHECK TABLE InspectionResults;

优化查询

定期优化查询可以提高数据库的查询性能。可以使用EXPLAIN命令来分析查询的执行计划。


-- 分析查询执行计划

EXPLAIN SELECT * FROM InspectionResults

WHERE ProductName = '产品A' AND InspectionDate BETWEEN '2023-01-01' AND '2023-12-31';

清理无用数据

定期清理无用数据可以减少存储开销和提高查询性能。可以使用DELETE命令来删除无用的数据。


-- 删除无用数据

DELETE FROM InspectionResults

WHERE InspectionDate < '2022-01-01';

2. 升级和迁移

升级和迁移数据库是确保其兼容性和性能的重要措施。常见的升级和迁移任务包括升级数据库版本、迁移数据和优化表结构。

升级数据库版本

可以使用数据库管理工具来升级数据库版本。例如,可以使用MySQL的mysql_upgrade工具。


# 升级数据库版本

mysql_upgrade -u user -p password

迁移数据

可以使用多种工具来迁移数据,例如MySQL的mysqldumpmysql命令。


# 导出数据

mysqldump -u user -p password old_database > old_database.sql



# 导入数据

mysql -u user -p password new_database < old_database.sql

优化表结构

在迁移过程中,可以优化表结构以提高性能。例如,可以在迁移后对表进行分析和优化。


-- 分析表

ANALYZE TABLE InspectionResults;



-- 优化表

OPTIMIZE TABLE InspectionResults;

结论

在质量控制(QC)软件的开发过程中,数据库管理与优化是确保系统性能和数据安全的关键环节。通过合理的数据库设计、索引优化、性能监控、安全监控和定期维护,可以显著提高数据库的效率和稳定性。希望本节的内容能够帮助读者更好地理解和应用数据库管理与优化的原理和方法。

校园失物招领微信小程序源码, 失物招领小程序主要为解决大学生时常丢失物品而且很难找回以及归还过程繁琐不方便的问题, 传统的失物招领方式不同,该款校园失误招领小程序拥有快捷发布寻物启事和失误找领功能, 快速查找、极速归还、高效沟通、防误领冒领等功能, 在开发校园失物招领小程序前用户访谈发现有近40的同学校园内频繁丢失物品、证件、校园卡等, 数码产品、日用品等,丢失区域主要发生在教学楼、图书馆和食堂。 拾领校园失物招领小程序继承了寻物启事和失物招领,丢失物品或拾取物品都可发布帖子, 首页的横幅滚动公告展示通知公告等,banner图片化的方式更具有视觉吸引力, 最新信息可显示最近发布的招领信息或寻物信息,更加方便快捷的展示信息, 用户可通过首页的发布按钮发布帖子,发布者只需填写物品的相关信息,类别、地点等相关信息, 并且可以填写手机号开启认领验证,并可以一键生成二维码分享或分享至群聊和朋友圈。 列表内可以筛选物品类别或精确搜索,物品详情里可展示物品的相关信息, 确认是自己的物品后可点击认领,然后验证信息,需填写物品的关键信息以作辨认, 防止冒领误领,物品详情页可生成二维码海报分享,还有即时的消息联系功能以提高沟通效率, 发布者还可选择放置在代收处,双方还可以通过拨打电话紧急联系,用于紧急情况,让失物找到主人, 个人中心可以管理发布的物品帖子,管理个人信息,包括昵称、默认学校、手机号的修改、 编辑发布的物品帖子、获取帮助等。帮助用户流畅的使用该小程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值