国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

通訊錄管理系統(tǒng)

這篇具有很好參考價值的文章主要介紹了通訊錄管理系統(tǒng)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

作者:獅子也瘋狂
專欄:《項目集錦》
堅持做好每一步,幸運之神自然會駕凌在你的身上
通訊錄管理小系統(tǒng),項目集錦,java,開發(fā)語言,數(shù)據(jù)結(jié)構(gòu),gitee

一. ?? 項目描述

該項目是用于日常生活中記錄聯(lián)系人信息的一款智能小工具。實現(xiàn)了對聯(lián)系人的姓名、年齡、性別、電話號碼、住址的添加及修改、查找、刪除、排序等功能。該項目是以 Windows 控制臺為運行平臺,所有的操作都應(yīng)在控制臺上進行。

二. ??編寫目的

通過該項目將平時所學(xué)的內(nèi)容綜合到一起并運用到實際的項目中。并且通過實現(xiàn)自己實現(xiàn)的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)存儲和持久化處理(老師不給用集合,自己實現(xiàn)一個數(shù)據(jù)結(jié)構(gòu)來存儲)
該項目能夠充分的體現(xiàn)出一些簡單的業(yè)務(wù)流程處理,能夠使同學(xué)們掌握基本的業(yè)務(wù)流程處理。進一步理解什么是面相對象設(shè)計(OOD:Object Oriented Design)。充分理解面向?qū)ο笤O(shè)計的精髓。
總的來說,就是要完成作業(yè)。

三. ??技術(shù)說明

3.1 業(yè)務(wù)流程結(jié)構(gòu)圖

通訊錄管理小系統(tǒng),項目集錦,java,開發(fā)語言,數(shù)據(jù)結(jié)構(gòu),gitee

3.2 數(shù)據(jù)存儲結(jié)構(gòu)

id 序號
name 姓名
age 年齡
sex 性別
telNum 電話號碼
address 地址

3.3 技術(shù)要求及開發(fā)環(huán)境

  • JDK 版本為 11
  • 鍵盤輸入 Scanner 類
  • 正則表達式 Pattern 類
  • 自編寫數(shù)據(jù)結(jié)構(gòu)LinkedList
  • Windows 10 & idea 2020

四. ??項目開發(fā)

4.1 創(chuàng)建菜單類

進入每個功能模塊,用戶都有清晰的功能選擇。還有返回上一層,降低了代碼的耦合性。

public class Menus {
        //主界面
        public void mainMenu(){
            System.out.println("--------------?------------");
            System.out.println("**         1 添加記錄        **");
            System.out.println("**         2 查找記錄        **");
            System.out.println("**         3 修改記錄        **");
            System.out.println("**         4 刪除記錄        **");
            System.out.println("**         5 排序記錄        **");
            System.out.println("**         6 退出系統(tǒng)        **");
            System.out.println("--------------?------------");
        }
        //添加界面
        public void addMenu(){
            System.out.println("--------------?------------");
            System.out.println("**         1 添加新記錄     **");
            System.out.println("**         2 查看全記錄     **");
            System.out.println("**         3 返回上一級     **");
            System.out.println("--------------?------------");
        }
        //查找界面
        public void searchMenu(){
            System.out.println("--------------?------------");
            System.out.println("**         1 按姓名查找    **");
            System.out.println("**         2 按年齡查找    **");
            System.out.println("**         3 按性別查找    **");
            System.out.println("**         4 按號碼查找    **");
            System.out.println("**         5 按住址查找    **");
            System.out.println("**         6 查看全記錄    **");
            System.out.println("**         7 返回上一級    **");
            System.out.println("--------------?------------");
        }
        //修改界面
        public void modifyMenu(){
            System.out.println("---------------?------------");
            System.out.println("**         1 查看全記錄    **");
            System.out.println("**         2 修改指定記    **");
            System.out.println("**         3 返回上一級    **");
            System.out.println("--------------?------------");
        }
        //修改子界面
        public void subModifyMenu(){
            System.out.println("--------------?------------");
            System.out.println("**         1 修改姓名    **");
            System.out.println("**         2 修改年齡    **");
            System.out.println("**         3 修改性別    **");
            System.out.println("**         4 修改號碼    **");
            System.out.println("**         5 修改住址    **");
            System.out.println("**         6 返回上一級   **");
            System.out.println("--------------?------------");
        }
        //刪除界面
        public void deleteMenu(){
            System.out.println("--------------?------------");
            System.out.println("**         1 查看全部記錄  **");
            System.out.println("**         2 刪除指定記錄  **");
            System.out.println("**         3 刪除全部記錄  **");
            System.out.println("**         4 返回上一級    **");
            System.out.println("--------------?------------");
        }
        //排序界面
        public void orderMenu(){
            System.out.println("--------------?------------");
            System.out.println("**         1 按姓名排序  **");
            System.out.println("**         2 按年齡排序  **");
            System.out.println("**         3 按性別排序  **");
            System.out.println("**         4 查看全部記錄 **");
            System.out.println("**         5 返回上一級  **");
            System.out.println("--------------?------------");
        }
}

通訊錄管理小系統(tǒng),項目集錦,java,開發(fā)語言,數(shù)據(jù)結(jié)構(gòu),gitee

4.2 創(chuàng)建實體類

import java.io.Serializable;
public class Users implements Serializable {
    private int id;
    private String name;
    private int age;
    private String sex;
    private String telNum;
    private String address;

    public Users() {
    }
    public Users(String name, int age, String sex, String telNum, String address) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.telNum = telNum;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getTelNum() {
        return telNum;
    }

    public void setTelNum(String telNum) {
        this.telNum = telNum;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "id=" + id +
                "\tname: " + name  +
                " age:  " + age  +
                " sex:  " + sex  +
                " telNum:   " + telNum  +
                " address:  " + address  +"\t\t";
    }
}

4.3 創(chuàng)建數(shù)據(jù)校驗類

數(shù)據(jù)校驗類是為了避免在使用過程,用戶輸入錯誤的數(shù)據(jù)又跳轉(zhuǎn)了,導(dǎo)致系統(tǒng)出錯。

import java.util.Scanner;
public class Varify {
    Scanner S = new Scanner(System.in);
    /**
     * 校驗主菜單
     * @param min
     * @param max
     * @return int
     */
    public int menuVarify(int min,int max){         //菜單選項驗證
        String str1 = "\\d";
        while(true){
            System.out.println("最小為"+min+","+"最大為"+max+";"+"請輸入您的選擇:");
            String input = S.nextLine();
            if(input.matches(str1)){
                int num = Integer.parseInt(input);
                if(num >=min&&num<=max){
                    return num;
                }else{
                    System.out.println("請輸入有效數(shù)字!??!");
                }
            }else{
                System.out.println("您的輸入有誤,請重新輸入?。?!");
            }
        }
    }

    /**
     * 校驗名字
     * 漢字或者字母
     * @return name
     */
    public String nameVarity(){
        String str = "[A-Za-z\\u4e00-\\u9fa5]{1,10}";
        while (true){
            System.out.println("請輸入您的名字(中文/英文):");
            String name = S.nextLine();
            if(name.matches(str)){
                return name;
            }else{
                System.out.println("您的輸入有誤,請重新輸入!");
            }
        }
    }

    /**
     *
     * @return
     */
    public int ageVarity(){
        String str = "\\d{0,125}";
        while(true){
            System.out.println("請輸入您的年齡:(0-125)");
            String age = S.nextLine();
            if(age.matches(str)){
                return Integer.parseInt(age);
            }else{
                System.out.println("輸入有誤,請重新輸入!");
            }
        }
    }
    public String sexVarity(){
        String str = "[男|女]{1}";
        while(true){
            System.out.println("請輸入您的性別:(男/女)");
            String sex = S.nextLine();
            if(sex.matches(str)){
                return sex;
            }else{
                System.out.println("輸入有誤,請重新輸入!");
            }
        }
    }
    public String tellNumVarity(){
        String str = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
        while(true){
            System.out.println("請輸入電話號碼或者座機號碼:");
            String inputNum = S.nextLine();
            if(inputNum .matches(str)){
                return inputNum;
            }else{
                System.out.println("您輸入的電話號碼有誤,請重新輸入:");
            }
        }
    }
    public String addressVarity(){
        String str = "[a-zA-Z\\u4e00-\\u9fa5]{1,50}";
        while(true){
            System.out.println("請輸入地址:字母或者漢字");
            String inputName = S.nextLine();
            if(inputName.matches(str)){
                return inputName;
            }else{
                System.out.println("您輸入的地址有誤,請重新輸入:");
            }
        }
    }
}

4.4 創(chuàng)建雙向鏈表

這個是模仿LinkedList的雙向鏈表,里面有基本添加,刪除,清空鏈表功能。

import java.io.Serializable;

public class DoubleLinkedList<E> implements ListInterface<E>, Serializable {
    private Node<E> headNode;       //記錄頭結(jié)點
    private Node<E> tailNode;       //記錄尾結(jié)點
    private int size;               //記錄結(jié)點數(shù)
    public int getSize() {
        return size;
    }

    /**
     * 定義結(jié)點類
     * @param <E>
     */
    class Node<E> implements Serializable{
         Node prevNode;             //前
         E element;                 //記錄元素
         Node next;                 //后

        public Node(Node prevNode, E element, Node next) {
            this.prevNode = prevNode;
            this.element = element;
            this.next = next;
        }

        public Node(E element) {
            this.element = element;
        }
    }

    private void addNode(E element){
        Node t = this.tailNode;
        Node node = new Node(t,element,null);
        this.tailNode = node;
        if(t == null){
            this.headNode = node;
        }else{
            t.next = node;
        }
        this.size++;
    }

    /**
     * 添加元素
     * @param element
     */
    @Override
    public void add(E element) {
        this.addNode(element);
    }
    private Node getNode(int index){
        if(index <= (this.size>>1)){
            Node node = this.headNode;
            for(int i = 0;i<index;i++){
                node = node.next;
            }
            return node;
        }
        else{
           Node node = this.tailNode;
            for(int i = this.size-1;i>index;i--){
                node = node.prevNode;
            }
            return node;
        }
    }

    /**
     * 在指定位置添加元素
     * @param index
     * @param element
     */
    @Override
    public  void add(int index,E element){
        if(index < 0||index >=this.size){
            throw new IndexOutOfBoundsException("下標不合法:"+index);
        }
        Node<E> node = new Node(element);
        if(index == 0){
            node.next = this.headNode;
            this.headNode.prevNode = node;
            this.headNode = node;
        }else if(index+1 == this.size){
            this.tailNode.next = node;
            node.prevNode = tailNode;
            this.tailNode = node;
        }else{
            Node<E> temp = this.getNode(index-1);
            node.next = temp.next;
            temp.prevNode = node;
            temp.next = node;
            node.prevNode = temp;
        }
        this.size++;
    }

    /**
     * 根據(jù)下標添加元素
     * @param index
     * @return
     */
    @Override
    public E get(int index) {
        if(index < 0||index >=this.size){
            throw new IndexOutOfBoundsException("下標不合法:"+index);
        }
      Node<E> node = this.getNode(index);
        return node.element;
    }

    @Override               //刪除元素
    public boolean remove(int index) {
        if(index <0||index >=this.size){
            throw new IndexOutOfBoundsException("下標不合法:"+index);
        }
        Node<E> node = this.getNode(index);
        if(node.prevNode == null){
            this.headNode = node.next;
        }else{
            node.prevNode.next = node.next;
        }

        if(node.next == null){
            this.tailNode = node.prevNode;
        } else{
            node.next.prevNode = node.prevNode;

        }
        node.prevNode = null;
        this.size--;
        return true;
    }
    @Override               //清空所有元素
    public boolean removeAll(){
        this.headNode = null;
        this.tailNode = null;
        this.size = 0;
        return true;
    }
}

4.5 創(chuàng)建持久層文件處理

創(chuàng)建一個IoUtil包,封裝好了讀取文件方法,和將數(shù)據(jù)寫入文件的方法,專門進行文件的讀取和寫入,簡化了在使用過程中,創(chuàng)建輸入輸出流的繁瑣步驟,加快了生產(chǎn)效率。

import java.io.*;

/**
 * 文件讀取
 */
public class IoUtil {
    /**
     * 讀取文件
     * @param fileName
     * @return
     * @throws IOException
     */
  	public static  Object readFile(String fileName) throws IOException, ClassNotFoundException {
            FileInputStream fileInputStream = new FileInputStream(fileName);
            ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
            return objectInputStream.readObject();
        }
  	public static void writeFile(Object obj,String fileName) throws IOException {
      		ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(fileName));
      		objectOutputStream.writeObject(obj);
  }
}

4.6 創(chuàng)建正則表達式

tips:
正則表達式是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達對字符串的一種過濾邏輯。使用特殊語法來表示字符類、數(shù)量限定符和位置關(guān)系,然后用這些特殊語法和普通字符一起表示一個模式。

這里的校驗類有很多種,分別有主菜單的校驗,名字的校驗,年齡輸入的校驗,電話號碼是否輸入正確的校驗,還有地址的校驗。實現(xiàn)詳情請看以下代碼:

import java.util.Scanner;
public class Varify {
    Scanner S = new Scanner(System.in);
    /**
     * 校驗主菜單
     * @param min
     * @param max
     * @return int
     */
    public int menuVarify(int min,int max){         //菜單選項驗證
        String str1 = "\\d";
        while(true){
            System.out.println("最小為"+min+","+"最大為"+max+";"+"請輸入您的選擇:");
            String input = S.nextLine();
            if(input.matches(str1)){
                int num = Integer.parseInt(input);
                if(num >=min&&num<=max){
                    return num;
                }else{
                    System.out.println("請輸入有效數(shù)字?。。?);
                }
            }else{
                System.out.println("您的輸入有誤,請重新輸入!??!");
            }
        }
    }

    /**
     * 校驗名字
     * 漢字或者字母
     * @return name
     */
    public String nameVarity(){
        String str = "[A-Za-z\\u4e00-\\u9fa5]{1,10}";
        while (true){
            System.out.println("請輸入您的名字(中文/英文):");
            String name = S.nextLine();
            if(name.matches(str)){
                return name;
            }else{
                System.out.println("您的輸入有誤,請重新輸入!");
            }
        }
    }

    /**
     *
     * @return
     */
    public int ageVarity(){
        String str = "\\d{0,125}";
        while(true){
            System.out.println("請輸入您的年齡:(0-125)");
            String age = S.nextLine();
            if(age.matches(str)){
                return Integer.parseInt(age);
            }else{
                System.out.println("輸入有誤,請重新輸入!");
            }
        }
    }
    public String sexVarity(){
        String str = "[男|女]{1}";
        while(true){
            System.out.println("請輸入您的性別:(男/女)");
            String sex = S.nextLine();
            if(sex.matches(str)){
                return sex;
            }else{
                System.out.println("輸入有誤,請重新輸入!");
            }
        }
    }
    public String tellNumVarity(){
        String str = "(\\d{3,4}-\\d{7,8})|([1]{1}\\d{10})";
        while(true){
            System.out.println("請輸入電話號碼或者座機號碼:");
            String inputNum = S.nextLine();
            if(inputNum .matches(str)){
                return inputNum;
            }else{
                System.out.println("您輸入的電話號碼有誤,請重新輸入:");
            }
        }
    }
    public String addressVarity(){
        String str = "[a-zA-Z\\u4e00-\\u9fa5]{1,50}";
        while(true){
            System.out.println("請輸入地址:字母或者漢字");
            String inputName = S.nextLine();
            if(inputName.matches(str)){
                return inputName;
            }else{
                System.out.println("您輸入的地址有誤,請重新輸入:");
            }
        }
    }
}

4.7 創(chuàng)建用戶業(yè)務(wù)層

功能太多,但是較為簡單,就不一一闡述。

五. ??總結(jié)

一個跟數(shù)據(jù)結(jié)構(gòu)掛鉤的期末實驗,功能實現(xiàn)并不復(fù)雜,接近crud,但是構(gòu)造整體框架很復(fù)雜,花費了很多精力去打磨。唯一一個難點就是雙向鏈表的編寫;還有就是正則表達式的使用不夠熟練,查詢了很多資料,才知道如何去使用。給大家介紹了一個很簡單的Java小項目入門,希望大家喜歡。
項目已經(jīng)開源到git,感興趣的小伙伴點擊:下載文章來源地址http://www.zghlxwxcb.cn/news/detail-742706.html

到了這里,關(guān)于通訊錄管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C語言】實現(xiàn)通訊錄管理系統(tǒng)

    【C語言】實現(xiàn)通訊錄管理系統(tǒng)

    大家好,我是蘇貝,本篇博客帶大家實現(xiàn)通訊錄,如果你覺得我寫的還不錯的話,可以給我一個贊??嗎,感謝?? 本文將使用C語言來實現(xiàn)通訊錄管理系統(tǒng),該通訊錄包括若干聯(lián)系人,和每個聯(lián)系人的姓名、年齡、性別、電話、地址。此通訊錄的功能包括:增加聯(lián)系人信息,

    2024年02月08日
    瀏覽(95)
  • c++手機通訊錄管理系統(tǒng)280

    定制魏:QTWZPW,獲取更多源碼等 目錄 軟件達到的目的 功能分析說明圖? 各項功能說明? 主要數(shù)據(jù)結(jié)構(gòu)類型? 各個模塊之間的調(diào)用關(guān)系和數(shù)據(jù)儲存格式說明? 各軟件模塊之間的調(diào)用方式? 軟件中實現(xiàn)各項功能的函數(shù)與程序主要代碼? 軟件使用結(jié)果? 添加聯(lián)系人 顯示聯(lián)系人 撥

    2024年04月12日
    瀏覽(103)
  • 數(shù)據(jù)結(jié)構(gòu)--學(xué)生通訊錄管理系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)--學(xué)生通訊錄管理系統(tǒng)

    文章目錄 一、問題描述 二、系統(tǒng)功能設(shè)計 三、各個代碼部分 四、整體代碼及其運行 五、總結(jié) 學(xué)生通訊錄管理系統(tǒng)--C語言實現(xiàn) 在現(xiàn)實中,用學(xué)號和姓名來記錄學(xué)生需要花費大量的紙質(zhì)材料,并且出現(xiàn)容易丟失、查找困難等問題。 “學(xué)生通訊管理系統(tǒng)”是為了幫助老師、同

    2024年02月11日
    瀏覽(98)
  • 【C語言】優(yōu)化通訊錄管理系統(tǒng)

    【C語言】優(yōu)化通訊錄管理系統(tǒng)

    大家好,我是蘇貝,本篇博客帶大家優(yōu)化上一篇的通訊錄,如果你覺得我寫的還不錯的話,可以給我一個贊??嗎,感謝?? 在上一篇博文 實現(xiàn)通訊錄管理系統(tǒng) 的最后,我們了解了那段代碼的問題:通訊錄的大小是固定的100個元素,如果想要存放1000個人的信息,那么空間就

    2024年02月06日
    瀏覽(97)
  • 通訊錄管理系統(tǒng)(個人學(xué)習(xí)筆記黑馬學(xué)習(xí))

    通訊錄管理系統(tǒng)(個人學(xué)習(xí)筆記黑馬學(xué)習(xí))

    通訊錄是一個可以記錄親人、好友信息的工具。 本教程主要利用C++來實現(xiàn)一個通訊錄管理系統(tǒng)系統(tǒng)中需要實現(xiàn)的功能如下: 添加聯(lián)系人:向通訊錄中添加新人,信息包括(姓名、性別、年齡、聯(lián)系電話、家庭住址)最多記錄1000人 顯示聯(lián)系人:顯示通訊錄中所有聯(lián)系人信息 刪除聯(lián)系

    2024年02月10日
    瀏覽(778)
  • Java、JSP等通訊錄管理系統(tǒng)

    技術(shù): Java、JSP 等 摘要: 1.1 選題背景 隨著市場經(jīng)濟的發(fā)展和人們生活水平的提高,隨著科學(xué)技術(shù)的發(fā)展,計算機領(lǐng)域不斷取得新的研究成果。計算機在代替和延伸腦力勞動方面發(fā)揮越來越重要的作用,不僅在工業(yè)方面而且在日常生活中也越來越離不開計算機。人們已經(jīng)不滿

    2024年02月04日
    瀏覽(29)
  • C++課程設(shè)計,題目:通訊錄管理系統(tǒng)

    ? ? ? ? ? 1、題目。 ? ? ? ? ? ?2、設(shè)計分析。 ? ? ? ? ? ?3、分模塊分析。 ? ? ? ? ? ?4、代碼實現(xiàn)。 一、題目。 通訊錄管理系統(tǒng) 手機通訊錄中的聯(lián)系人的信息既可以存儲在手機中,也可以存儲在手機卡中,也可以同時存儲在兩個位置上(每個位置上的存儲容量為10

    2024年02月11日
    瀏覽(93)
  • 學(xué)生通訊錄管理系統(tǒng)的設(shè)計與實現(xiàn)

    學(xué)生通訊錄管理系統(tǒng)的設(shè)計與實現(xiàn)

    1.1 問題的描述 學(xué)生通訊錄管理系統(tǒng)是為了幫助老師、同學(xué),或者其他一些需要使用通訊錄的人員進行管理和分析的一種應(yīng)用程序。 1.2 問題分析和任務(wù)定義 (1)輸入數(shù)據(jù)建立通訊錄; (2)查詢通訊錄中滿足要求的信息; (3)插入新的通訊錄信息; (4)刪除不需要的通訊

    2024年02月10日
    瀏覽(96)
  • c語言:通訊錄管理系統(tǒng)(文件版本)

    c語言:通訊錄管理系統(tǒng)(文件版本)

    前言: 本通訊錄管理系統(tǒng)一共三個版本,除此文章以外還有如下倆個版本,大家可以根據(jù)需求自?。?基礎(chǔ)增刪查改功能版本 :c語言:通訊錄管理系統(tǒng)(增刪查改)-CSDN博客 動態(tài)分配內(nèi)存版本 :c語言:通訊錄管理系統(tǒng)(動態(tài)分配內(nèi)存版)-CSDN博客 ? ? ? ? 本文是在基礎(chǔ)的通

    2024年02月07日
    瀏覽(90)
  • 【C語言】優(yōu)化通訊錄管理系統(tǒng)2

    【C語言】優(yōu)化通訊錄管理系統(tǒng)2

    本篇博客是基于上一篇博客寫出來的,了解上一篇博客 大家好,我是蘇貝,本篇博客帶大家再次優(yōu)化上一篇的通訊錄,實現(xiàn)將錄入的數(shù)據(jù)在程序退出后存儲到文件中,在下一次程序開始時打開文件獲取數(shù)據(jù),如果你覺得我寫的還不錯的話,可以給我一個贊??嗎,感謝?? 既

    2024年02月04日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包