Linux 基于sqlite3数据库的学生管理系统

一、数据库

        sqlite官网:www.sqlite.org

1.1 数据库的安装

        离线安装:

        sudo dpkg -i sqlite3_3.22.0-1ubuntu0.4_amd64.deb //数据库软件

        sudo dpkg -i libsqlite3-dev_3.22.0-1ubuntu0.4_amd64.deb //数据库的库函数

        在线安装:

        sudo apt-get install sqlite3 libsqlite3-dev

        如何确定自己是否已经安装成功了?

        在终端输入 sqlite3 如果能进入到下面的界面说明安装成功了

代码实现:

01test.c

gcc 01test.c -lsqlite3

编译时,需要链接sqlite3的库 -lsqlite3

#include <stdio.h>
#include <sqlite3.h>
#include <unistd.h>
#include <stdlib.h>
sqlite3 *pro_init()
{
    sqlite3 *my_db = NULL;
    int ret = 0;
    char *errmsg = NULL;
    if (SQLITE_OK != (ret = sqlite3_open("test.db", &my_db)))
    {
        printf("sqlite3_open error:errno = [%d],errstr = [%s]\n", ret, sqlite3_errmsg(my_db));
        exit(-1);
    }
    printf("打开数据库成功...\n");
    // 建表
    // IF NO EXISTS表示如果不存在就新建  如果存在 就直接使用
    char sqlbuff[256] = "CREATE TABLE IF NOT EXISTS student(id INT PRIMARY KEY,name TEXT,score INT)"; // 程序中使用sql语句结尾不必加分号
    printf("%s\n", sqlbuff);
    if (SQLITE_OK != (ret = sqlite3_exec(my_db, sqlbuff, NULL, NULL, &errmsg)))
    {
        printf("sqlite3_exec error:errno = %d,errstr = %s\n", ret, errmsg);
        exit(-1);
    }
    printf("建表成功..\n");
    sqlite3_free(errmsg); // 如果使用了第5个参数需要手动释放空间
    return my_db;
}
void print_menu()
{
    printf("--------------------------------------------\n");
    printf("| 1.添加   2.查找   3.修改   4.删除   5.退出 |\n");
    printf("--------------------------------------------\n");
    printf("请输入您的选择:");
}
// 添加学员信息
void insert_student(sqlite3 *my_db)
{
    int input_id = 0;
    int input_score = 0;
    char input_name[32] = {0};
    int ret = 0;
    printf("请输入学员信息(id(int) name(char) score(int)):");
    scanf("%d%s%d", &input_id, input_name, &input_score);
    // 组装sql语句
    char sqlbuff[256] = {0};
    sprintf(sqlbuff, "INSERT INTO student VALUES(%d,'%s',%d)", input_id, input_name, input_score);
    printf("sqlbuff : [%s]\n", sqlbuff);
    // 执行sql语句
    if (SQLITE_OK != (ret = sqlite3_exec(my_db, sqlbuff, NULL, NULL, NULL)))
    {
        printf("sqlite3_exec error:errno = %d,errstr = %s\n", ret, sqlite3_errmsg(my_db));
        exit(-1);
    }
    printf("学员信息添加成功...\n");
    return;
}
// 查找学员信息 使用sqlite3_get_table实现
void search_student(sqlite3 *my_db)
{
    int ret = 0;
    char **result = NULL;
    int row = 0;
    int column = 0;
    // 组装sql语句
    char sqlbuff[256] = "SELECT *FROM student";
    // 执行sql语句
    if (SQLITE_OK != (ret = sqlite3_get_table(my_db, sqlbuff, &result, &row, &column, NULL)))
    {
        printf("sqlite3_get_table error: errno = [%d],errstr = [%s]\n", ret, sqlite3_errmsg(my_db));
        exit(-1);
    }
    // 先打印字段名
    int i = 0;
    int j = 0;
    for (int i = 0; i < column; i++)
    {
        printf("%16s", result[i]);
    }
    printf("\n");
    int index = i;
    // 再打印字段值
    for (i = 0; i < row; i++)
    {
        for (j = 0; j < column; j++)
        {
            printf("%16s", result[(i + 1) * 3 + j]);
        }
        printf("\n");
    }
    printf("学员信息查询成功...\n");
    return;
}
void modify_student(sqlite3 *my_db)
{
    printf("请输入要修改的学员id:");
    int input_id = 0;
    scanf("%d", &input_id);
    char input_name[32] = {0};
    int input_score = 0;
    printf("请输入新学员的信息(name(char) score(int)):");
    scanf("%s%d", input_name, &input_score);
    int ret = 0;
    char sqlbuff[256] = {0};
    sprintf(sqlbuff, "UPDATE student SET name='%s',score=%d WHERE id=%d", input_name, input_score, input_id);
    // 执行sql语句
    if (SQLITE_OK != (ret = sqlite3_exec(my_db, sqlbuff, NULL, NULL, NULL)))
    {
        printf("sqlite3_exec error:errno = %d,errmsg = %s\n", ret, sqlite3_errmsg(my_db));
        exit(-1);
    }
    printf("修改学员信息成功...\n");
    return;
}

void del_student(sqlite3 *my_db)
{
    printf("请输入要删除的学员id:");
    int input_id = 0;
    scanf("%d", &input_id);
    // 组装sql语句
    char sqlbuff[256] = {0};
    int ret = 0;
    sprintf(sqlbuff, "DELETE FROM student where id=%d", input_id);
    // 执行sql语句
    if (SQLITE_OK != (ret = sqlite3_exec(my_db, sqlbuff, NULL, NULL, NULL)))
    {
        printf("sqlite3_exec error:errno = %d,errmsg = %s\n", ret, sqlite3_errmsg(my_db));
        exit(-1);
    }
    printf("学员信息删除成功...\n");
    return;
}
int main(int argc, char const *argv[])
{
    printf("欢迎使用..\n");
    sqlite3 *my_db = NULL;
    my_db = pro_init();
    int choose = 0;
    while (1)
    {
        print_menu();
        scanf("%d", &choose);
        switch (choose)
        {
        case 1:
            insert_student(my_db);
            break;
        case 2:
            search_student(my_db);
            break;
        case 3:
            modify_student(my_db);
            break;
        case 4:
            del_student(my_db);
            break;
        }
        if (5 == choose)
        {
            printf("退出成功..\n");
            break;
        }
    }
    sqlite3_close(my_db);
    printf("欢迎下次使用...\n");
    return 0;
}

 效果图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Linux下使用套接字进行网络编程

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ 用于网络应用开…

知识图谱——Neo4j数据库实战

数据与代码链接见文末 1.Neo4j数据库安装 JDK 安装:https://www.oracle.com/java/technologies/javase-downloads.html Neo4j 安装:https://neo4j.com/download-center/ 配置好 JDK 和 Neo4j 的环境变量

嵌入式Linux系统编程 — 4.1 字符串输入输出

目录 1 字符串输出 1.1 字符串输出函数简介 1.2 示例程序 2 字符串输入 2.1 字符串输入简介 2.2 示例程序 程序运行时&#xff0c;需打印信息至标准输出 stdout 设备 或标准错误 stderr设备&#xff08;譬如屏幕&#xff09;&#xff0c;如调试信息、报错信息、中间产生的…

数据库课程知识点总结

数据库概述 数据库基本特点&#xff1a;数据结构化&#xff0c;数据独立性&#xff0c;数据冗余小&#xff0c;易扩充&#xff0c;统一管理和控制&#xff0c;永久存储&#xff0c;有组织&#xff0c;可共享 三级模式 模式&#xff1a;一个数据库只有一个模式&#xff0c;是对…

将idea项目代码部署到Linux系统中

目录 1. 将idea与虚拟机建立连接 2. 设置上传到虚拟机的目录 3.上传项目代码 1. 将idea与虚拟机建立连接 打开idea要上传的项目,找到Tools -> Development -> Configuration 设置一个连接的名称,我这里设置为centos 将Type设置为SFTP,点击SSH configuration 开始配…

数据库物理结构设计-定义数据库模式结构(概念模式、用户外模式、内模式)、定义数据库、物理结构设计策略

一、引言 如何基于具体的DBMS产品&#xff0c;为数据库逻辑结构设计的结果&#xff0c;即关系数据库模式&#xff0c;制定适合应用要求的物理结构 1、在设计数据库物理结构前&#xff0c;数据库设计人员首先 要充分了解所用的DBMS产品的功能、性能和特点&#xff0c;包括提供…

抖音集成:通过MessageBox引领数字化营销新潮流

抖音集成&#xff1a;通过MessageBox引领数字化营销新潮流 在数字化营销的大潮中&#xff0c;企业需要不断探索新的方式来优化其营销策略&#xff0c;以抓住更多的市场机会。抖音作为一款全球知名的短视频社交平台&#xff0c;凭借其庞大的用户群体和高度互动的特性&#xff0…

亿发进销存管理系统+:多终端无缝协同,实现经营销售场景全覆盖

亿发软件凭借产品、市场、业务的深入理解&#xff0c;在进销存基础上进行了延伸&#xff0c;推出多终端、一体化的“进销存管理系统”多元产品矩阵。对企业经营中进货、出货、销售、付款等进行全程跟踪管理。有效辅助企业解决业务管理、销售管理、库存管理、财务管理等一系列问…

【论文阅读】-- TSR-TVD:时变数据分析和可视化的时间超分辨率

TSR-TVD: Temporal Super-Resolution for Time-Varying Data Analysis and Visualization 摘要1 引言2 相关工作3 我们的循环生成方法3.1 损失函数3.2 网络架构 4 结果与讨论4.1 数据集和网络训练4.2 结果4.3 讨论 5 结论和未来工作致谢参考文献附录1 训练算法及优化2 网络分析…

02.Ambari自定义服务开发-metainfo.xml介绍

文章目录 metainfo.xml 介绍配置说明Hbase metainfo.xml配置说明配置参数详细介绍配置文件样例DORIS metainfo.xml 介绍 ​ 在Ambari自定义开发中&#xff0c;metainfo.xml 配置文件起着至关重要的作用。它用于定义服务的元数据信息&#xff0c;包括服务的版本、组件、执行脚本…

RabbitMQ基本概念

RabbitMQ是AMQP协议的一个开源实现&#xff0c;所以其基本概念也就是的 AMQP 协 议中的基本概念。如图3-1所示是 RabbitMQ 的整体架构图。 Message(消息):消息是不具名的&#xff0c;它由消息头和消息体组成。消息体是不透明的&#xff0c; 而消息头则由一系列可选属性组成&…

六西格玛绿带可以跳过,直接学六西格玛黑带吗?真实情况告诉你

在现代企业管理中&#xff0c;六西格玛&#xff08;Six Sigma&#xff09;已经成为提升质量和效率的重要工具。对于很多企业而言&#xff0c;培养内部的六西格玛专家&#xff0c;特别是黑带&#xff08;Black Belt&#xff09;&#xff0c;是推动持续改进的关键。然而&#xff…

如何用Vue3和Plotly.js实现一个交互式世界地图动画

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 利用 Plotly.js 创建交互式世界生命预期地图 应用场景 本代码展示了如何使用 Plotly.js 创建一个交互式世界生命预期地图&#xff0c;允许用户按年份浏览不同国家和地区的生命预期数据。该地图可以用于研究世…

电脑文件concrt140.dll丢失要怎么恢复?靠谱修复方法分析

电脑文件concrt140.dll丢失这种情况&#xff0c;相对来说还是比较少见的&#xff01;但是不代表没有&#xff0c;既然有人出现这种情况了&#xff0c;那么小编势必要给大家详细的讲解一下concrt140.dll这个文件&#xff0c;以及我们要怎么去解决concrt140.dll文件丢失的问题。下…

技术贴 | RNA甲基化修饰m6A的检测——MeRIP-seq

01 m6A是什么 目前在细胞RNA中已经识别到了超过100种化学修饰&#xff0c;其中RNA甲基化修饰在生命活动中有着非常重要的作用(Xu et al 2020)。RNA甲基化是指在甲基转移酶的催化下&#xff0c;在RNA分子上的某一个原子上添加一个甲基基团(CH3)。RNA甲基化修饰类型有很多&#…

架构师篇-5、架构语言-ArchiMate

内容摘要&#xff1a; TOGAF内容元模型TOGAF架构语言ArchiMate3ArchiMate实践案例分享 TOGAF内容框架【核心内容元模型】 作为一个通用且开放式的标准&#xff0c;TOGAF需要采用一种非常灵活的方式来对其内容元模型进行定义&#xff0c;从而使得不同的企业可以根据自身需要对…

Swagger2及常用校验注释说明

Api(value "后台用户管理") RestController RequestMapping("bossuser") public class BossUserController {ApiOperation(value "测试接口")PostMapping("test")public String testUser(Valid RequestBody TestUser user) {LOG.inf…

vue表头字段添加鼠标悬浮提示

<el-table-column prop"jfScore" align"center" min-width"100px"><template slot"header" slot-scope"scope"><div><span>信用积分</span><el-tooltip:aa"scope"class"it…

nodepad 中换行符、tab替换

1 nodepad 主要符号 换行符: \r\n&#xff08;windows&#xff09; tab: \t 2 展示符号 3 相互替换 tip:需要点击扩展 参考&#xff1a; https://blog.csdn.net/lijing742180/article/details/85174564

服务器出现意外情况。(Exception from HRESULT: 0x80010105(RPC E SERVERFAULT))

这种情况一般出现在excel2007版本&#xff0c;下载了什么阅读器之类的 2007改不了这个加载项&#xff0c;需要重装一个其他版本&#xff08;2010版本可以&#xff09; 然后如下操作修改为COM加载项