day06-网路编程

news2024/10/1 23:29:21
#include <myhead.h>

int do_add(sqlite3 *ppDb)
{
    int numb;
    char name[20];
    int age;
    int salary;
    printf("请输入要插入的信息:");
    scanf("%d %s %d %d", &numb, name, &age, &salary);
    char sql[128] = "";
    sprintf(sql, "INSERT INTO worker VALUES(%d,'%s',%d,%d)", numb, name, age, salary);

    char *errmsg = NULL;
    if (sqlite3_exec(ppDb, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    {
        printf("exec error : %s\n", errmsg);
        sqlite3_free(errmsg);
        errmsg = NULL;
        return -1;
    }
}
int do_delete(sqlite3 *ppDb)
{
    char sql[128] = "DELETE FROM worker where name = 'xzh'";
    char *errmsg = NULL;
    if (sqlite3_exec(ppDb, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    {
        printf("exec error : %s\n", errmsg);
        sqlite3_free(errmsg);
        errmsg = NULL;
        return -1;
    }
}
int do_update(sqlite3 *ppDb)
{
    char sql[128] = "UPDATE worker SET salary = 16000 where name = 'ghn'";
    char *errmsg = NULL;
    if (sqlite3_exec(ppDb, sql, NULL, NULL, &errmsg) != SQLITE_OK)
    {
        printf("exec error : %s\n", errmsg);
        sqlite3_free(errmsg);
        errmsg = NULL;
        return -1;
    }
}

int callback(void *arg,int argc, char **argv, char **azColName)
{
    int i; 
    for(i=0; i<argc; i++){ 
       printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
    } 
    printf("\n"); 
    return 0; 

}
int do_search(sqlite3 *ppDb)
{
    struct INFO msg;
    char sql[128] = "SELECT * FROM worker WHERE numb = 1001";
    char *errmsg = NULL;

    if (sqlite3_exec(ppDb, sql,callback,0,&errmsg) != SQLITE_OK)
    {
        printf("exec error : %s\n", errmsg);
        sqlite3_free(errmsg);
        errmsg = NULL;
        return -1;
    }
}
int main(int argc, char const *argv[])
{
    // 1.定义数据库句柄指针
    sqlite3 *ppDb = NULL;

    // 2.打开数据库,如果数据库不存在,则创建数据库并打开数据库
    //  将句柄由参数2返回,
    if (sqlite3_open("./my.db", &ppDb) != SQLITE_OK)
    {
        printf("sqlite3_open error,errcode=%d\n", sqlite3_errcode(ppDb));
        return -1;
    }
    printf("sqlite3_open success\n");
    /*
    // 创建数据库
        // 1.准备sql语句
        char sql[128] = "CREATE TABLE worker(numb int PRIMARY KEY, name char, age int, salary double)";
        //  char *sql = "CREATE TABLE worker(numb int PRIMARY KEY, name char, age int, salary double)";
        char *errmsg = NULL; // 存放执行sql语句的错误信息
        if (sqlite3_exec(ppDb, sql, NULL, NULL, &errmsg) != SQLITE_OK)
        {
            printf("exec error : %s\n", errmsg);
            sqlite3_free(errmsg); // 防止内存泄漏
            errmsg = NULL;
            return -1;
        }
        printf("员工信息表创建成功\n");
    */

    int menu = -1; // 菜单选项
    for (;;)
    {
        system("clear"); // 清空之前的终端信息
        printf("\t\t=======XXX公司员工管理系统=======\n");
        printf("\t\t======1、添加员工信息=========\n");
        printf("\t\t======2、删除员工信息=========\n");
        printf("\t\t======3、修改员工信息=========\n");
        printf("\t\t======4、查询员工信息=========\n");
        printf("\t\t======0、退出=========\n");

        printf("请输入操作码:"); // 提示并输入信息
        scanf("%d", &menu);
        getchar(); // 吸收回车

        switch (menu)
        {
        case 1:
        {
            do_add(ppDb);
        }
        break;
        case 2:
        {
            do_delete(ppDb);
        }
        break;
        case 3:
        {
            do_update(ppDb);
        }
        break;
        case 4:
        {
            do_search(ppDb);
        }
        break;
        case 0:
            goto END;
        default:
            printf("您输入的功能有误,请重新输入!!!\n");
        }

        getchar();
        printf("请输入任意键,按回车清屏\n");
        while (getchar() != '\n');
    }

END:
    // 关闭数据库
    sqlite3_close(ppDb);
    return 0;
}

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

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

相关文章

Python算法(顺序查找/二分查找)

一。顺序查找法&#xff1a; 用途&#xff1a;主要用于查找无序的列表的某个元素 时间复杂度为O(n) 拓展&#xff1a;函数index&#xff08;&#xff09;运用的是顺序查找 二。二分查找法&#xff1a; 前提&#xff1a;被查找的列表顺序一定要是顺序的 用途&#xff1a;对…

java数值运算a/0 ;0/b; 0/0;结果

3/0indinity 无穷大 0/40 0/0NaN 不定值

JVM 常用监控工具介绍和使用

一、JPS 进程查看工具 用于列出当前系统中所有正在运行的 Java 进程。它的主要作用是查看 Java 进程的 PID&#xff08;进程标识符&#xff09;和主类名。可以帮助开发人员快速了解系统中正在运行的 Java 进程&#xff0c;对于监控和调试 Java 应用程序非常有用。 用法&#…

官网:所谓高大上,无非是把核心突出到了极致。

2023-10-30 14:37贝格前端工场 企业官网建设&#xff0c;客户往往要求高大上&#xff0c;但是很多设计师对高大上的解读存在了偏差&#xff0c;以至于设计的网站客户不满意&#xff0c;其实抓住官网所要展现的核心点&#xff0c;把核心点展现到极致&#xff0c;就是高大上。 …

Bee Mobile组件库重磅升级

Bee Mobile组件库重磅升级&#xff01; 丰富强大的组件移动预览快速上手create-bee-mobile Bee Mobile组件库重磅升级&#xff01; Bee Mobile组件库最新 v1.0.0 版本&#xff0c;支持最新的 React v18。 主页&#xff1a;Bee Mobile 丰富强大的组件 一共拥有50多个组件&…

果蔬作物疾病防治系统|基于Springboot的果蔬作物疾病防治系统设计与实现(源码+数据库+文档)

果蔬作物疾病防治系统目录 目录 基于Springboot的果蔬作物疾病防治系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、果蔬百科列表 2、公告信息管理 3、公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推…

Opencv 绘制线段、矩形、圆形、多边形操作

1、前言 OpenCV提供了许多用于绘制图形的方法 包括绘制线段的line()方法、绘制矩形的 rectangle()方法、绘制圆形的 circle()方法、绘制多边形的 polylines()方法和绘制文字的 putText()方法 本章将依次对上述各个方法进行讲解&#xff0c;并作出相应实验。 因为 OpenCV 中的…

ES分页查询的最佳实践:三种方案

Elasticsearch&#xff08;ES&#xff09;中进行分页查询时&#xff0c;最佳实践取决于具体的使用场景和需求。 以下是对每种分页方法的简要分析以及它们适用的情况&#xff1a; 1. From Size 最常见且直观的方法&#xff0c;通过from参数指定跳过多少条记录&#xff0c;si…

服务器-->网站制作-->接口开发,一篇文章一条龙服务(2)

作者&#xff1a;q: 1416279170v: lyj_txd前述&#xff1a;本人非专业&#xff0c;兴趣爱好自学自研&#xff0c;很多没有说清楚的地方见谅&#xff0c;欢迎一起讨论的小伙伴~ 上期回顾&#xff0c;了解 服务器&#xff0c;网站制作&#xff0c;接口开发之见的关系&#xff0c…

UDP与TCP:了解这两种网络协议的不同之处

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

挑战杯 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习机器视觉的…

使用 Python 字典向 SQLite 插入数据

将Python字典数据插入SQLite数据库中其实有很多好处&#xff0c;例如使用字典的结构可以简化插入数据的代码&#xff0c;使其更加紧凑和易于理解。这降低了代码的复杂性&#xff0c;并使代码更易于维护。那么在我们日常使用中会有哪些问题呢&#xff1f;一起看看我是如何解决的…

子类的继承性

继承性 类有两种重要的成员&#xff1a; 成员变量和方法 子类的成员 ① 自己声明定义 ②从父类继承 ① 成员变量的继 把继承来的变量作为 自己的一个成员变量 &#xff08;如同在子类中直接声明一样&#xff09;&#xff1b; 可被子类中自定义的任何实例方法操作 。 ② 方法…

装windows11+centos双系统时遇到问题及解决方法

从u盘启动提示linpus lite has been blocked 首先下载iso镜像文件&#xff0c;制作u盘启动工具&#xff0c;进行启动&#xff0c;这里进入bios界面进行启动项选择后&#xff0c;虽然已经将usb作为首要启动值 却会出现上图所示被“block”情形 需要在bios界面security选项&…

启发式算法:遗传算法

文章目录 遗传算法-引例交叉变异遗传算法遗传算法流程遗传算法应用遗传算法-引例 在一代代演化过程中,父母扇贝的基因组合产生新扇贝,所以遗传算法会选择两个原有的扇贝,然后对这两个扇贝的染色体进行随机交叉形成新的扇贝。迭代演化也会造成基因突变,遗传算法让新产生扇贝…

小程序网页view多行文本超出隐藏或显示省略号

实现效果&#xff1a; 限制两行&#xff0c;超出即显示省略号 实现&#xff1a;话不多说&#xff0c;展示代码 关键代码 .box{ width:100rpx; overflow:hidden; text-overflow: ellipsis;//超出省略号 display:-webkit-box; -webkit-line-clamp: 2;//显…

uniapp让输入框保持聚焦状态,不会失去焦点

使用场景&#xff1a;当输入框还有发送按钮的时候&#xff0c;点击发送希望软键盘不消失&#xff0c;还可以继续输入&#xff0c;或者避免因输入图片标签造成的屏闪问题 多次尝试后发现一个很实用的方法&#xff0c;适用input输入框和editor输入框 解决办法&#xff1a;把cli…

python基础——条件判断和循环【if,while,for,range】

&#x1f4dd;前言&#xff1a; 这篇文章主要讲解一下条件判断语句if和循环语句while&#xff0c;for在python中需要注意的地方。 建议已有一定了解&#xff08;对语句的执行逻辑清楚&#xff09;的读者观看&#xff0c;如果对条件判断和循环的执行逻辑不太清楚&#xff0c;也可…

Elasticsearch架构原理

一. Elasticsearch架构原理 1、Elasticsearch的节点类型 在Elasticsearch主要分成两类节点&#xff0c;一类是Master&#xff0c;一类是DataNode。 1.1 Master节点 在Elasticsearch启动时&#xff0c;会选举出来一个Master节点。当某个节点启动后&#xff0c;然后使用Zen D…

kali当中不同的python版本切换(超简单)

kali当中本身就是自带两个python版本的 配置 update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --install /usr/bin/python python /usr/bin/python3 150 切换版本 update-alternatives --config python 0 1 2编号选择一个即可…