基于链表的通信录管理

news2024/12/28 5:20:17

意义:对于一个通信录来说,要管理联系人的信息,包括编号,姓名,性别,电话。开发其系统主要为了帮助用户提高通讯录有管理效率,节约资源,提高信息的精确度

模块:

一级菜单内容

1> 注册模块:完成用户信息的注册用于登录管理系统,将注册信息存入文件

2> 登录模块:使用输入的登录账号和密码与文件存储信息对比

3> 退出系统

二级菜单内容:

3> 创建模块create:创建链表完成对通信录的存储

4> 添加数据add:添加通信录的信息放入链表中

5> 查找信息find:可以通过姓名进行查找

6> 修改信息update:可以修改联系人信息并保存,修改联系人信息有包括了对联系人编号,姓名,性别,电话号码的分别修改,也可以同时对编号,姓名,性别,电话号码修改;

7> 删除信息delete:可根据输入的姓名进行删除

8> 插入信息insert:将给定的信息以及插入位置信息完成插入

9> 展示信息show:将通讯录的所有信息进行展示

10> 导出信息export:将通讯录信息导出到文件中

11> 按照姓名将通讯录排序

12> 返回上一级

辅助功能:

13> 初始化链表init:将链表进行初始化

14> 获取链表长度getLength:

15> 统计性别;

实现的功能效果:

注册和登录:

添加信息:

展示功能:

查找功能:

修改信息:

导出信息:

排序功能:

进入辅助功能:

输出链表长度:

统计男女个数:

初始化链表:

代码:

project.h:

int con_update_name(contacts l,datatype* n,datatype* new_n,char* x,int b,datatype* h);
//按值删除信息(通过姓名删除信息)
int con_delete_value(contacts l,datatype* n);
//按位置插入信息
int con_insert_pos(contacts l,int pos,contacts e);
//展示信息
void con_show(contacts l);
//导出信息
void con_put(contacts l);
//排序
void con_sort(contacts l);
//初始化链表
void con_end(contacts l);
//获取链表长度
int con_len(contacts l);
//统计性别(男有几个女有几个)
void con_count(contacts l);
//头删
int con_delete(contacts l);

project.c:

#include"project.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

//创建链表
contacts con_create()
{
    //给链表申请空间
    contacts l=(contacts)malloc(sizeof(node));
    if(NULL==l)
    {
        printf("申请失败\n");
        return NULL;
    }
    //申请成功则初始化
    l->name[20]=0;
    l->sex[10]=0;
    l->num=0;
    l->phone[20]=0;  //数据域初始化
    l->len=0;           //长度初始化
    l->next=NULL;      //指针域初始化
    printf("链表预创建创建成功\n");
    return l;
}


//申请结点封装数据
contacts con_apply(datatype* n,char* x,int b,datatype *h) 
{
        contacts p=(contacts)malloc(sizeof(node));
        if(NULL==p)
        {
            printf("申请结点失败\n");
            return NULL;
        }
        //将数据封装到结点中
        strcpy(p->name,n);     //将姓名封装到数据域中
        strcpy(p->sex,x);          //将性别封装到数据域中
        p->num=b;           //将编号封装到数据域中
        strcpy(p->phone,h);    //将号码封装到数据域中

        p->next=NULL;           //指针指向空
        
        return p;
    
}


//判空(辅助函数不记录在功能表中)
int con_empty(contacts l)
{
    return l->next==NULL;    //判断头结点的指针域是否指向空 空为1 非空为0
}

//添加信息(头插)
int con_insert(contacts l,datatype* n,char* x,int b,datatype* h)
{
    //判断逻辑
    if(NULL==l)
    {
        printf("所给链表不合法");
        return -1;
    }
    //申请结点封装数据
    contacts p=con_apply(n,x,b,h);
    //头插逻辑
    p->next=l->next;
    l->next=p;
    printf("添加信息成功\n");
    //长度变化
    l->len++;
    return 0;
}

//通过值(姓名)返回元素下标(辅助功能函数不记录在功能表中)
int con_search_value(contacts l,datatype* n)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("链表不合法或者为空无法查找\n");
        return -1;
    }
    //返回下标逻辑
    int pos=1;
    contacts q=l->next;    //定义一个遍历指针从头结点出发
    int flag=0;
    while(q!=NULL&&strcmp(n,q->name)!=0)
    {
        q=q->next;
        pos++;
    }
    if(pos>l->len)
    {
        printf("该员工不在系统中\n");
        return -1;
    }
    return pos;
}


//按值查找信息(通过姓名进行查找)
int con_search_name(contacts l,datatype* n)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("所给链表为空或者不合法查找失败\n");
        return -1;
    }
    //查找信息返回元素下标
    int pos=con_search_value(l,n);
    //定义一个遍历指针
    contacts p=l->next;  //定义一个遍历指针从第一个元素出发
    //将指针移动到返回的元素下标位置上
    for(int i=0;i<pos-1;i++)
    {
        p=p->next;
    }
    char x[10];
    strcpy(x,p->sex);
    int b;
    b=p->num;
    datatype h[20];
    strcpy(h,p->phone);
    printf("已查到员工信息->性别:%s 员工编号:%d 员工电话号码:%s",x,b,h);
    printf("\n");
    return 0;
}
//按值修改信息(通过姓名)
int con_update_name(contacts l,datatype* n,datatype* new_n,char* x,int b,datatype* h)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("所给链表为空或者不合法查找失败\n");
        return -1;
    }
    //查找逻辑
    int pos=con_search_value(l,n);
    //修改逻辑
    //将指针移动到对应元素下标上
    contacts p=l->next;     //定义一个遍历结点从第一个结点出发
    for(int i=0;i<pos-1;i++)
    {
        p=p->next;
    }
    strcpy(p->name,new_n);
    strcpy(p->sex,x);
    p->num=b;
    strcpy(p->phone,h);
    printf("员工信息已经修改完成\n");
    return 0;
}

//按照值删除信息(通过姓名删除信息)
int con_delete_value(contacts l,datatype* n)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("链表为空或者不合法无法进行删除操作\n");
        return -1;
    }
    //找到结点返回下标
    int pos=con_search_value(l,n);
    //定义一个结点从第一个结点出发找到要删除的前一个结点
    contacts q=l->next;
    for(int i=0;i<pos-2;i++)
    {
        q=q->next;
    }
    //定义删除节点三原则删除
    contacts p=q->next;    //标记
    q->next=p->next;       //孤立
    //删除
    free(p);
    p=NULL;
    //长度变化
    l->len--;
    return 0;
}

//按照位置插入信息
int con_insert_pos(contacts l,int pos,contacts e)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("所给链表不合法或者为空无法插入\n");
        return -1;
    }
    //定位逻辑
    //定义一个遍历结点从第一个结点出发找到pos前一个位置
    contacts q=l->next;
    for(int i=0;i<pos-2;i++)
    {
        q=q->next;
    }
    //插入逻辑
    e->next=q->next;
    q->next=e;
    //长度变化
    l->len++;
    printf("插入成功\n");
    return 0;
}

//展示信息函数定义
void con_show(contacts l)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("所给链表不合法或者为空遍历无效\n");
        return ;
    }
    //定义一个遍历指针从第一个结点出发
    contacts p=l->next;
    //循环遍历逻辑
    while(p!=NULL)
    {
        printf("%s\t %s\t %d\t %s\t",p->name,p->sex,p->num,p->phone);
        printf("\n");
        p=p->next;
    }
}

//导出信息函数
void con_put(contacts l)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("所给链表不合法或者为空无法导出\n");
        return ;
    }
    //导出逻辑
    //定义一个遍历指针从第一个结点出发
    contacts p=l->next;
    //定义一个流指针打开文件
    FILE *FP=fopen("./projectnews.txt","a+");
    if(NULL==FP)
    {
        printf("文件打开失败\n");
        return ;
    }
    //对文件进行操作
    while(p!=NULL)
    {
        fprintf(FP,"%s %s %d %s\n",p->name,p->sex,p->num,p->phone);
        p=p->next;
    }
    printf("导出成功\n");
    //关闭文件
    fclose(FP);
}

//排序
void con_sort(contacts l)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("链表不合法或者为空无法排序\n");
        return ;
    }
    //按名字排序逻辑
    //定义一个遍历指针从第一个结点开始
    contacts p;
    //定义第二个指针从指针p后面开始
    contacts q;
    //定义一个指针记录最小结点
    contacts min;
    for(p=l->next;p!=NULL;p=p->next)
    {
        min=p;           //将待排序的一个结点定义为最小结点
        for(q=p->next;q!=NULL;q=q->next)
        {
            if(strcmp(min->name,q->name)<0)
            {
                min=q;
            }
        }
        if(min!=p)
        {
            //交换姓名
            datatype temp_name[20];
            strcpy(temp_name,p->name);
            strcpy(p->name,min->name);
            strcpy(min->name,temp_name);
            //交换性别
            char temp_sex[10];
            strcpy(temp_sex,p->sex);
            strcpy(p->sex,min->sex);
            strcpy(min->sex,temp_sex);
            //交换编号
            int temp_num=p->num;
            p->num=min->num;
            min->num=temp_num;
            //交换号码
            datatype temp_phone[20];
            strcpy(temp_phone,p->phone);
            strcpy(p->phone,min->phone);
            strcpy(min->phone,temp_phone);

        }
    }
    printf("排序成功\n");
}

//定义头删
int con_delete(contacts l)
{
    if(NULL==l||con_empty(l))
    {
        printf("头删失败\n");
        return -1;
    }
    contacts p=l->next;
    l->next=p->next;
    free(p);
    p=NULL;
    l->len--;
    return 0;
}


//初始化链表
void con_end(contacts l)
{
    //判断逻辑
    if(NULL==l||con_empty(l))
    {
        printf("链表为空或者不合法无需初始化\n");
        return ;
    }
    //初始化循环头删逻辑
    while(l->next!=NULL)
    {
        con_delete(l);
    }
    //释放头结点
    free(l);
    l=NULL;
    printf("链表初始化成功\n");
}

//获取链表的长度
int con_len(contacts l)
{
    int count=0;
    if(NULL==l||con_empty(l))
    {
        return 0;
    }
    //定义遍历指针指向第一个结点
    contacts q=l->next;
    while(q!=NULL)
    {
        count=count+1;
        q=q->next;
    }
    printf("获取链表长度完成\n");
    return count;
}

//统计性别
void con_count(contacts l)
{
    int count =0;
    if(NULL==l||con_empty(l))
    {
        printf("链表不存在或者为空无法统计性别\n");
        return;
    }
    //定义一个遍历指针从第一个结点开始
    contacts q=l->next;
    while(q!=NULL)
    {
        if(strcmp(q->sex,"man")==0)
        {
            count++;
        }
        q=q->next;
    }
        printf("性别为男的有%d个",count);
        printf("性别为女的有%d个",l->len-count);
        printf("\n");
}

main.c:

#include"project.h"
#include<stdlib.h>
#include <stdio.h>
#include<string.h>
int main(int argc, const char *argv[])
{
    int menu1;       //一级功能菜单
    int menu2;       //二级功能菜单
    int menu3;       //辅助功能菜单
    char username[20];     //用户名
    char pwd[20];          //密码
    //调用创建链表函数
    contacts l=con_create();
    if(NULL==l)
    {
        return -1;
    }
    while(1)
    {
start:
        printf("******************用户登录界面*********************\n");
        printf("******************1.用户注册***********************\n");
        printf("******************2.用户登录***********************\n");
        printf("******************0.用户退出***********************\n");
        printf("请输入功能选项:");
        scanf("%d",&menu1);
        switch(menu1)
        {
        case 1:
            {
                for(;;)
                {
                    printf("请输入注册账号:");
                    scanf("%s",username);
                    printf("请输入注册密码:");
                    scanf("%s",pwd);
                    if(strlen(pwd)<6||strlen(pwd)>6)
                    {
                        printf("您输入的密码不规范,请您输入的6位数密码\n");
                    }
                    else
                    {
                        printf("注册成功\n");
                        break;
                    }
                }
                //记录用户注册的账号和密码到新的文件中
                FILE *fp=fopen("./project.txt","a+");
                if(NULL==fp)
                {
                    printf("文件打开失败\n");
                    return -1;
                }
                //将信息保存到文件中
                fprintf(fp,"%s %s\n",username,pwd);
                //关闭文件
                fclose(fp);

            }
            break;
            /*********************************************************************************/
        case 2:
            {
                char name[20];
                char password[20];
                printf("请输入用户名:");
                scanf("%s",name);
                printf("请输入用户密码:");
                scanf("%s",password);
                //打开文件进行用户名密码比对
                //打开记录用户信息的文本
                FILE *fp=fopen("./project.txt","r");
                if(NULL==fp)
                {
                    printf("打开账号文本失败\n");
                    return -1;
                }
                //开始进行比对
                while(!feof(fp))
                {
                    //读取信息
                    fscanf(fp,"%s %s",username,pwd);
                    if(strcmp(username,name)==0&&strcmp(pwd,password)==0)
                    {
                        printf("登陆成功\n");
                        printf("进入二级功能菜单,请进行功能选择\n");
                        while(1)
                        {
two:
                            printf("*************功能选择界面*************\n");
                            printf("*************1.创建模块***************\n");
                            printf("*************2.添加信息***************\n");
                            printf("*************3.查找信息***************\n");
                            printf("*************4.修改信息***************\n");
                            printf("*************5.删除信息***************\n");
                            printf("*************6.插入信息***************\n");
                            printf("*************7.展示信息***************\n");
                            printf("*************8.导出信息***************\n");
                            printf("*************9.按照姓名将通讯录排序***\n");
                            printf("*************0.返回上一级*************\n");
                            printf("*************11.辅助功能***************\n");

                            printf("请输入功能选项:");
                            scanf("%d",&menu2);
                            switch(menu2)
                            {
                            case 1:
                                {
                                    printf("已成功创建员工管理系统模块\n");
                                    break;
                                }

                            case 2:
                                {
                                    //添加信息模块
                                    datatype n[20];
                                    char x[10];
                                    int b;
                                    datatype h[20];

                                    printf("请输入需要添加的员工姓名\n");
                                    scanf("%s",n);
                                    printf("请输入该员工的性别\n");
                                    scanf("%s",x);
                                    printf("请输入该员工的编号\n");
                                    scanf("%d",&b);
                                    printf("请输入该员工的电话号码\n");
                                    scanf("%s",h);
                                    con_insert(l,n,x,b,h);
                                    break ;
                                }

                            case 3:
                                {
                                    //按照姓名查找信息功能模块
                                    datatype n[20];
                                    printf("请输入需要查找的员工姓名\n");
                                    scanf("%s",n);
                                    con_search_name(l,n);
                                    break;
                                }
                            case 4:
                                {
                                    //按找名字修改信息功能模块
                                    datatype n[20];
                                    datatype new_n[20];
                                    char x[10];
                                    int b;
                                    datatype h[20];
                                    printf("请输入需要修改员工信息的员工姓名\n");
                                    scanf("%s",n);

                                    printf("请输入修改之后该员工姓名\n");
                                    scanf("%s",new_n);
                                    printf("请输入该员工的性别\n");
                                    scanf("%s",x);
                                    printf("请输入该员工的编号\n");
                                    scanf("%d",&b);
                                    printf("请输入该员工的电话号码\n");
                                    scanf("%s",h);
                                    con_update_name(l,n,new_n,x,b,h);
                                    break;
                                }
                            case 5:
                                {
                                    //删除员工信息功能模块
                                    datatype n[20];
                                    printf("请输入需要删除的员工姓名\n");
                                    scanf("%s",n);
                                    con_delete_value(l,n);
                                    break;
                                }
                            case 6:
                                {
                                    //按照位置插入员工信息功能
                                    int pos=0;
                                    printf("请输入需要插入的位置\n");
                                    scanf("%d",&pos);
                                    datatype n[20];
                                    char x[10];
                                    int b;
                                    datatype h[20];

                                    printf("请输入需要添加的员工姓名\n");
                                    scanf("%s",n);
                                    printf("请输入该员工的性别\n");
                                    scanf("%s",x);
                                    printf("请输入该员工的编号\n");
                                    scanf("%d",&b);
                                    printf("请输入该员工的电话号码\n");
                                    scanf("%s",h);

                                    //调用申请结点封装函数将想要的信息放进去
                                    contacts e=con_apply(n,x,b,h); 
                                    //调用插入信息函数
                                    con_insert_pos(l,pos,e);
                                    break;
                                }
                            case 7:
                                {
                                    //展示信息功能函数
                                    con_show(l);
                                    break;
                                }
                            case 8:
                                {
                                    //导出信息功能
                                    con_put(l);
                                    break;
                                }
                            case 9:
                                {
                                    //按姓名排序功能
                                    con_sort(l);
                                    printf("通讯录已经排序完成如下所示\n");
                                    con_show(l);
                                    break;
                                }
                            case 0:
                                {
                                    goto start;
                                }
                            case 11:
                                {
                                    while(1)
                                    {    
                                        printf("****************辅助功能选择界面****************\n");
                                        printf("****************1.初始化链表********************\n");
                                        printf("****************2.获取链表长度******************\n");
                                        printf("****************3.统计性别**********************\n");
                                        printf("****************0.返回上一级********************\n");

                                        printf("请输入辅助功能选择项:");
                                        scanf("%d",&menu3);
                                        switch(menu3)
                                        {
                                        case 1:
                                            {
                                                //初始化链表功能模块
                                                con_end(l);
                                                break;
                                            }
                                        case 2:
                                            {
                                                //获取链表长度功能
                                            int i=con_len(l);
                                            printf("链表长度为:%d\n",i);
                                                break;
                                            }
                                        case 3:
                                            {
                                                //统计性别功能
                                                con_count(l);
                                                break;
                                            }
                                        case 0:
                                            {
                                                goto two;
                                            }
                                        }
                                    }

                                }
                            }            
                        }
                        //关闭账号文本
                        fclose(fp);
                        break;
                    }        //case2结束
                    else{
                    printf("登录失败\n");
                    }
                    /****************************************************************************************/
                }
            }
        case 0:
            {
                break;
            }

        }



    }



    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/140293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Go基础】数据类型

文章目录1. 数据类型1.1 基本数据类型1.2 复合数据类型1.3 自定义数据类型2. 数组3. 切片4. 字符串5. 数据类型转换6. Map7. Channel1. 数据类型 1.1 基本数据类型 类型长度(字节)默认值说明bool1falsebyte10uint8&#xff0c;取值范围[0,255]rune40Unicode Code Point, int3…

电脑解压文件丢失怎么找回来?四种恢复方法

您在使用电脑过程中&#xff0c;有没有解压过文件呢&#xff1f;如果有的话&#xff0c;是否出现过解压文件丢失的情况呢&#xff1f;解压文件通俗易懂地讲就是把压缩好了的文件解开。而有些小伙伴在解压文件以后发现丢失了&#xff0c;这些丢失的文件或许是您重要的img解压文件…

数学建模学习笔记-算法(求解整数规划-2.割平面算法)

基本思想 松弛问题无解&#xff0c;则整数规划无解 松弛问题的最优解是整数解&#xff0c;则他也是整数规划的最优解 如果松弛问题的解是非整数解&#xff0c;则对其增加割平面条件。 割平面条件&#xff1a;增加一个线性条件&#xff0c;通过不等式将可行区域割掉一部分&a…

如何使用ebpf统计某个端口的流量

前言 上篇文章我们已经初步使用kprobe来探测内核函数了, 这篇文章就在上篇文章的基础上做个修改, 通过kprobe探测内核函数tcp_sendmsg来统计tcp服务端的发送流量. 废话不多说, 直接上正文. 环境 tcp服务端运行在ubuntu22, 监听端口为6230, 其内核为5.19.0-26-generic, ebpf程序…

LSA、pLSA、LDA、NMF、BERTopic、Top2Vec进行主题建模

在自然语言处理(NLP)中,主题建模是一种技术,用于从文本数据中发现隐藏的语义主题(或主题)。这是一个无监督机器学习问题,即在没有标签或标签的情况下学习模式。主题建模的应用非常广泛,可用于搜索引擎、情感分析、新闻聚类和摘要生成等许多任务。 在这里将探讨主题建模…

一屏统管 智慧交管Web3D可视化大屏云控系统

交通是城市发展的基础&#xff0c;体现着社会文明程度&#xff0c;彰显着城市治理水平。今天给大家分享一个基于 数维图 的 Sovit3D编辑器 构建轻量化 3D 可视化场景的案例——智慧交管三维可视化系统。多维度呈现城市交通情况&#xff0c;赋能“安全管控、缓堵保畅、出行服务”…

硬件系统工程师宝典(2)-----硬件电路的概要设计启动

今天我们继续来读这本书&#xff0c;硬件系统工程师宝典。作者提到&#xff0c;产品需求分析之后就进入概要设计阶段。在这个阶段&#xff0c;ID&#xff08;Industrial Design&#xff09;工业设计及结构工程师、软件系统开发工程师和硬件系统开发工程师等开始分头工作。 工业…

头条百科词条怎么编辑?送你一份超详细指南

头条百科其实就是之前的互动百科&#xff0c;后面被今日头条收购之后&#xff0c;改为头条百科&#xff0c;也叫快懂百科。 百度百科在百度上的权重很高&#xff0c;而头条百科在今日头条和抖音上的权重很高。 现在我们遇到什么问题或是不知道什么人物、品牌的时候&#xff0…

xxljob 的 阻塞处理策略的逻辑是什么(小白)

目录 1 需求2 单机串行3 丢弃后续调整4 覆盖之前的调整1 需求 每一个任务都有一个阻塞处理策略,我们在创建任务的时候可以自己设置,那么不同的设置,后端的逻辑是什么呢》 xxljob 调度中心项目 调度我们自己的项目,到了我们项目里面,最先到的文件是 就在首次到的这个文件的…

Springboot-数据库操作(Mybatis)-初级入门

一、Mybatis-plus介绍 官方文档&#xff1a;简介 | MyBatis-Plus (baomidou.com) 他只增强了单表查询&#xff0c;没增强多表查询等复杂的查询。 二、配置 引入依赖 <!-- MyBatisPlus依赖--><dependency><groupId>com.baomidou</groupId><a…

UBUNTU 22.04 使用 SUNSHINE 和 MOONLIGHT 进行串流

参考 【ubuntu22.04】sunshine安装使用总结&#xff0c;远程游戏。_哔哩哔哩_bilibili sunshine/README.md at master loki-47-6F-64/sunshine GitHub GitHub - LizardByte/Sunshine: Sunshine is a Gamestream host for Moonlight. Installation - Sunshine documentati…

基于Java+SpringBoot+vue实现图书借阅和销售商城一体化系统

基于JavaSpringBootvue实现图书借阅和销售商城一体化系统 &#x1f680; 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 &#x1f345; 作者主页 超级帅帅吴 &#x1f345; 欢迎点赞 &#x1f…

2023年江苏专转本志愿填报辅导(22上岸南工程学长辅导手册)

文章目录公告链接一、23年专转本与22年的变化二、专转本志愿填报2.1、填报流程2.2、志愿填报院校顺序选择参考三、专转本考试分值及时间节点四、专转本录取投档原则及办法&#xff08;平行、征求平行志愿、服从志愿、降分录取&#xff09;五、考前冲刺辅导不同大类填报计算机大…

面试官问我TCP三次握手和四次挥手,我真的是

候选者&#xff1a;面试官你好&#xff0c;请问面试可以开始了吗 面试官&#xff1a;嗯&#xff0c;开始吧 面试官&#xff1a;今天来聊聊TCP吧&#xff0c;TCP的各个状态还有印象吗&#xff1f; 候选者&#xff1a;还有些许印象的&#xff0c;要不我就来简单说下TCP的三次握…

【Kotlin】函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )

文章目录一、匿名函数变量类型推断二、匿名函数参数类型自动推断三、Lambda 表达式一、匿名函数变量类型推断 定义变量 时 , 如果将变量值 直接赋值给该变量 , 那么就可以 不用显示声明该变量的类型 ; 下面的代码中 , 定义 name 变量 , 为其 赋值 “Tom” 字符串 String 类型变…

2023年山东食品安全管理员模拟试题及答案

百分百题库提供食品安全管理员考试试题、食品安全管理员考试预测题、食品安全管理员考试真题、食品安全管理员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 一、单选题 1.餐饮具消毒的目的是: A.去除表面的污垢 B.杀灭…

【个人博客】Hexo个人博客搭建与配置详细教程 + Fluid主题 + Gitee发布

文章目录一、环境准备1.1 安装 NodeJs1.2 安装 Git1.3 安装 Hexo二、Gitee仓库搭建2.1 Gitee账号注册2.2 仓库搭建三、Hexo博客搭建3.1 基础环境搭建3.2 启动 Hexo3.3 更换 Fluid 主题四、自定义配置4.1 全局设置4.1.1 页面顶部大图4.1.2 博客标题4.1.3 导航菜单4.1.4 懒加载4.…

路由器连接实验

使用静态路由实现全网连通 R1 [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip address 12.1.1.1 24 [r1]interface GigabitEthernet 0/0/1 [r1-GigabitEthernet0/0/1]ip ad [r1-GigabitEthernet0/0/1]ip address 14.1.1.1 24 [r1]interface LoopBack 0 [r1…

搞懂MyBatis?这篇文章就够了~

哈喽呀~你好呀~欢迎呀~一起来看看这篇宝藏文章吧~ 目录 1.什么是MyBatis 2.配置MyBatis开发环境 3.使用MyBatis框架去操作数据库 3.1 实现MyBatis查询功能. 3.1.1 创建一个接口(该接口一定要加上Mapper注解): 3.1.2 创建上面接口对应的 xml 文件 (此文件会实现接口中的…

易基因|METTL3 通过调节m6A 修饰抑制口腔鳞状细胞癌安罗替尼敏感性| 肿瘤研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。2022年9月27日&#xff0c;中山大学附属第一医院口腔颌面外科王安训和何倩婷课题组在《Cancer Cell International》杂志发表了《METTL3 suppresses anlotinib sensitivity by regulating …