当前位置: 首页 > news >正文

网络编程9.10

使用数据库完成工人管理系统:

ubuntu@ubuntu:DB$ 
ubuntu@ubuntu:DB$ cat 2.c
#include <myhead.h>
#include <sqlite3.h>
#include <string.h>typedef struct
{int id;char name[20];double salary;
} Worker;int do_insert(sqlite3 *ppDb)
{Worker work;printf("请输入工号:");scanf("%d", &work.id);getchar(); // 清除缓冲区printf("请输入姓名:");fgets(work.name, sizeof(work.name), stdin);work.name[strcspn(work.name, "\n")] = 0; // 移除换行符printf("请输入薪水:");scanf("%lf", &work.salary);char *errmsg = NULL;char sqlite[200];snprintf(sqlite, sizeof(sqlite), "INSERT INTO Work VALUES(%d, '%s', %lf);",work.id, work.name, work.salary);if(sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);printf("错误信息:%s\n", errmsg);sqlite3_free(errmsg);return -1;}printf("添加工人信息成功\n");return 0;
}int do_delete(sqlite3 *ppDb)
{char name[20];printf("请输入要删除工人的姓名:");fgets(name, sizeof(name), stdin);name[strcspn(name, "\n")] = 0; // 移除换行符char *errmsg = NULL;char sqlite[200];snprintf(sqlite, sizeof(sqlite), "DELETE FROM Work WHERE name='%s';", name);if(sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);printf("错误信息:%s\n", errmsg);sqlite3_free(errmsg);return -1;}printf("删除工人信息成功\n");return 0;
}int do_update(sqlite3 *ppDb)
{char name[20];double new_salary;printf("请输入要修改工人的姓名:");fgets(name, sizeof(name), stdin);name[strcspn(name, "\n")] = 0; // 移除换行符printf("请输入新的薪水:");scanf("%lf", &new_salary);getchar(); // 清除缓冲区char *errmsg = NULL;char sqlite[200];snprintf(sqlite, sizeof(sqlite), "UPDATE Work SET salary=%lf WHERE name='%s';", new_salary, name);if(sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);printf("错误信息:%s\n", errmsg);sqlite3_free(errmsg);return -1;}printf("修改工人信息成功\n");return 0;
}int callback(void *arg, int n, char **msgtext, char **msgtable)
{int i;for(i = 0; i < n; i++){printf("%s\t", msgtable[i]);}putchar(10);for(i = 0; i < n; i++){printf("%s\t", msgtext[i] ? msgtext[i] : "NULL");}putchar(10);return 0;
}int do_seek(sqlite3 *ppDb)
{char key[20];printf("请输入你要查找的工人姓名:");fgets(key, sizeof(key), stdin);key[strcspn(key, "\n")] = 0; // 移除换行符char *errmsg = NULL;char sqlite[200];snprintf(sqlite, sizeof(sqlite), "SELECT * FROM Work WHERE name='%s';", key);if(sqlite3_exec(ppDb, sqlite, callback, NULL, &errmsg) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);printf("错误信息:%s\n", errmsg);sqlite3_free(errmsg);return -1;}return 0;
}int show_all(void *arg, int n, char **msgtext, char **msgtable)
{static int row = 0;int i;if (row == 0) {for(i = 0; i < n; i++){printf("%s\t", msgtable[i]);}printf("\n");}for(i = 0; i < n; i++){printf("%s\t", msgtext[i] ? msgtext[i] : "NULL");}printf("\n");row++;return 0;
}int do_showall(sqlite3 *ppDb)
{char *errmsg = NULL;const char *sqlite = "SELECT * FROM Work;";if(sqlite3_exec(ppDb, sqlite, show_all, NULL, &errmsg) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);printf("错误信息:%s\n", errmsg);sqlite3_free(errmsg);return -1;}return 0;
}void menu(sqlite3 *ppDb)
{int n;printf("\n\t\t\t*********肖申克的救赎*********\n");printf("\t\t\t1、插入一个工人信息\n");printf("\t\t\t2、删除一个工人信息\n");printf("\t\t\t3、修改一个工人信息\n");printf("\t\t\t4、查找一个工人信息\n");printf("\t\t\t5、输出所有工人信息\n");printf("\t\t\t0、退出\n");printf("请输入你的选择:");scanf("%d", &n);getchar(); // 清除缓冲区switch(n){case 1:do_insert(ppDb);break;case 2:do_delete(ppDb);break;case 3:do_update(ppDb);break;case 4:do_seek(ppDb);break;case 5:do_showall(ppDb);break;case 0:exit(0);default:printf("输入有误,请重新输入\n");}
}int main(int argc, const char *argv[])
{sqlite3 *ppDb;if(sqlite3_open("./hhh.db", &ppDb) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);return -1;}printf("数据库打开成功\n");char *errmsg = NULL;const char *sqlite = "CREATE TABLE IF NOT EXISTS Work(id INT, name TEXT, salary REAL);";if(sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != SQLITE_OK){printf("错误码:%d 错误信息:%s, 出错行是:%d\n",sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);printf("错误信息:%s\n", errmsg);sqlite3_free(errmsg);sqlite3_close(ppDb);return -1;}while(1){menu(ppDb);}sqlite3_close(ppDb);printf("数据库关闭成功\n");return 0;
}

相关文章:

网络编程9.10

使用数据库完成工人管理系统: ubuntuubuntu:DB$ ubuntuubuntu:DB$ cat 2.c #include <myhead.h> #include <sqlite3.h> #include <string.h>typedef struct {int id;char name[20];double salary; } Worker;int do_insert(sqlite3 *ppDb) {Worker work;pri…...

如何在SQL Server中恢复多个数据库?

一次性恢复多个 SQL数据库吗可以吗&#xff1f; "是的&#xff0c;可以一次性恢复多个 SQL 数据库。通常情况下&#xff0c;只要备份文件的名称与相应的数据库匹配&#xff0c;且没有附加的日期或时间信息&#xff0c;就可以通过有效的 T-SQL 脚本来完成恢复。如果你希望…...

炸裂!新版 SD WebUI Forge 出图速度更快!支持最新Flux 模型!(保姆级安装教程)

大家是不是经常为SD WebUI卡顿、爆显存而苦恼?一启动SD 电脑就开始发烫&#xff0c; 尤其低显存用户屡屡"中招",不得不一遍遍重启。作为AI绘画的必备工具&#xff0c;WebUI却还有这么多"坑"&#xff0c;着实让人不爽!&#x1f620; 好消息是&#xff0c;…...

laserOdometry.cpp源码注释

本博客用于a-loam源码学习&#xff0c;用于和slam初学者一起学习。 #include <cmath>#include <nav_msgs/Odometry.h>#include <nav_msgs/Path.h> //这两行代码是C中包含头文件的指令&#xff0c;它们用于在ROS&#xff08;Robot Operating System&#xf…...

STM32时钟配置图详解

一图概述&#xff1a; 左侧输入时钟源 Input Frequency (LSE/LSI/HSI/HSE) LSE (Low-Speed External)&#xff1a;外部32.768 kHz晶体振荡器&#xff0c;通常用于RTC&#xff08;实时时钟&#xff09;。LSI (Low-Speed Internal)&#xff1a;内部低速时钟&#xff0c;频率为…...

Vscode——调试时,修改变量值

第一步&#xff1a;点击变量&#xff0c;鼠标右键 第二步&#xff1a;点击 设置值...

1. 初识LLM API:环境配置与多轮对话演示

其实AI应用并不是一个什么很高大上的东西&#xff0c;你可以将它当作一个文字的“调库”行为&#xff0c;“调库”只需要知道库名就行了&#xff0c;这里实际也是如此。甚至你只需要知道你想问什么&#xff0c;将你的消息作为输入&#xff0c;就能从大模型得到输出。而这个“库…...

【AI编程助手】VsCode插件--通义灵码

目录 摘要 一、插件安装 二、“通义灵码” 使用 三、官网教程 四、总结 五、参考信息 摘要 通义灵码是一款强大的 AI 编程助手。它能够理解编程相关的复杂逻辑&#xff0c;为开发者提供高效、准确的代码生成与优化建议。在编程过程中&#xff0c;它可以辅助处理各种任务&…...

9月10号的学习

//界面1 头文件 signals://界面1的自定义信号void my_signal(); private slots:void on_pushButton_2_clicked();void on_pushButton_clicked(); //界面1 .cpp文件 void Widget::on_pushButton_2_clicked() {QMessageBox msg(QMessageBox::Warning,"警告","是否…...

QtC++截图支持窗口获取

介绍 在截图工具中你会发现&#xff0c;接触到窗口后会自动圈出目标窗口,个别强大一点的还能进行元素识别可以自动圈出元素&#xff0c;那么今天简单分析一下QTc如何获取窗口并圈出当前鼠标下的窗口。 介绍1.如何获取所有窗口2.比较函数3.实现窗口判断 结尾 1.如何获取所有窗口…...

料品档案没有配置主供应商信息

这个问题经常会出现在普通用户的面前。没有合适的工程人员去打理料品档案。信息是缺漏的。用友给出来的提示&#xff0c;也让人摸不着头脑。只能是记下来备用吧。...

springboot属性加载优先级和常见命令行属性

属性加载优先级&#xff1a; 1.SpringApplication&#xff1a;启动的main方法里注入的属性 2.PropertySource&#xff1a;通过注解 加载的数据配置文件 3.Config data file&#xff1a;application.yml/.properties 4.OS environment variable&#xff1a;环境变量 5.Command l…...

Math Reference Notes: 因式定理

文章目录 1. 因式定理的定义2. 因式定理的数学表达&#xff1a;3. 因式定理的推导4. 因式定理的含义5. 因式定理的应用6. 因式定理与余式定理的关系7. 因式定理的应用领域8.因式定理的局限性 因式定理是多项式代数中的一个重要工具&#xff0c;帮助我们通过多项式的根来因式分解…...

Kubernetes------Service

目录 一、属性说明 二、定义和基本配置 1、定义 2、创建Service 2.1、typeClusterIP 2.2、typeNodePort 2.3、固定IP访问 三、Service、EndPoint、Pod之间的关系 四、服务发现 1、基于Service中IP访问外部服务 2、基于Service中域名访问外部服务 五、Ingress的安装和使…...

C#的LINQ语句

在 C# 中&#xff0c;LINQ&#xff08;Language Integrated Query&#xff09;是一种强大的查询技术&#xff0c;它允许你使用熟悉的 C# 语法来查询数据集合。LINQ 可以用于查询各种数据源&#xff0c;包括数组、列表、数据集、SQL数据库等。 以下是一些基本的 LINQ 语句示例&…...

项目实战系列三: 家居购项目 第三部分

文章目录 &#x1f343;后台分页&#x1f345;后台分页导航 &#x1f343;首页分页&#x1f345;首页分页导航&#x1f345;首页搜索&#x1f345;两个奇怪的问题&#x1f345;会员显示登录名&#x1f345;注销登录&#x1f345;验证码 &#x1f343;后台分页 程序框架图 1.…...

【WPF】Border的使用

在 WPF 中&#xff0c;Border 控件是一个非常实用的容器控件&#xff0c;它可以用来为其他控件添加边框、背景颜色、边距等样式。Border 本身没有内置的行为&#xff0c;但是它可以包含一个子元素&#xff0c;并且可以通过各种属性来自定义外观。 Border基本属性 Child: 表示…...

机器学习(西瓜书)第 4 章 决策树

4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下&#xff0c;我们把当前结点标记为叶结点&#xff0c;并将其类别设定为该结点所含样本最多的类别&#xff1b;在第⑶种情形下&#xff0c;同样把当前结点标记为叶结点&#xff0c;但将其类别设定为其父结点所含样本最多…...

8、值、指针、引用作为参数或返回值

一、作为参数 1、值传递 #include <iostream> using namespace std;void swap(int a, int b) {cout << __FUNCTION__ << "交换前a:" << a << " b:" << b << endl;int tmp a;a b;b tmp;cout << __FUN…...

向量——通俗地解释

1. 向量 向量是一个既有大小(模)又有方向的对象&#xff0c;它可以用来描述空间中的位置、力或速度等量。我们可以从物理、数学和计算机的角度来看待向量&#xff0c;这三种观点看似不同却有关联。 &#xff08;1&#xff09;在物理专业视角下&#xff0c;向量是空间中的箭头&a…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...