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

news2024/12/25 12:42:36

一、数据库

        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;
}

 效果图:

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

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

相关文章

绘唐3是免费的吗?

绘唐科技是一家中国电子信息产品制造商和供应商&#xff0c;成立于2005年。公司主要经营智能硬件、智能穿戴设备、智能家居设备和智能交通设备等领域的产品开发和销售。绘唐科技拥有强大的研发团队和制造能力&#xff0c;能够为客户提供定制化的产品解决方案。 绘唐科技的产品种…

diffusion model(十八):diffusion model中negative prompt的工作机制

info个人博客主页http://myhz0606.com/article/ncsn 前置阅读&#xff1a; DDPM&#xff1a; http://myhz0606.com/article/ddpm classifier-guided&#xff1a;http://myhz0606.com/article/guided classifier-free guided&#xff1a;http://myhz0606.com/article/classi…

多协议网关BL110钡铼6路RS485转MQTT协议云网关

在工业自动化的现代化进程中&#xff0c;物联网技术的应用日益广泛&#xff0c;特别是工业物联网网关作为连接传感器、控制器和云端平台的关键枢纽&#xff0c;发挥着至关重要的作用。BL110钡铼多协议网关作为一款专为工业环境设计的先进设备&#xff0c;不仅支持多种下行采集协…

创新实训博客(十三)——admin前端工作效果

管理/教师端前端工作汇总education-admin&#xff1a; 首先是登录注册页面的展示 管理员 首页 管理员登录后的首页如下图所示 管理员拥有所有的权限 课程管理 1、可以查看、修改、增添、删除课程列表内容 2、可以对课程资源进行操作 3、可以对课程的类别信息进行管理&…

数据产品赋能数字化转型

数据产品赋能数字化转型 引言:数据产品的创新与发展:赋能决策智能化的钥匙一、数据产品的定义与特征二、数据产品的核心功能三、应用实践与案例分析四、未来展望引言:数据产品的创新与发展:赋能决策智能化的钥匙 在数字化转型的浪潮下,数据已成为企业核心竞争力的关键要素…

自动驾驶水泥搅拌车在梁场的应用(上)

北京渡众机器人科技有限公司的自动驾驶水泥搅拌车在梁场的应用可以极大地提升生产效率和安全性。通常情况下&#xff0c;梁场是用于预制混凝土梁的生产和装配的场地&#xff0c;传统上需要大量的人工操作和搅拌车的驾驶。引入自动驾驶技术可以带来以下几个显著的优势&#xff1…

【C++:list】

list概念 list是一个带头的双向循环链表&#xff0c;双向循环链表的特色&#xff1a;每一个节点拥有两 个指针进行维护&#xff0c;俩指针分别为prev和next,prev指该节点的前一个节点&#xff0c;next为该节点的后一个节点 list的底层实现中为什么对迭代器单独写一个结构体进行…

<电力行业> - 《第6课:电力企业》

1 电力行业 电力是个庞大的行业&#xff0c;企业众多&#xff0c;这里重点介绍下行业的巨头。 2 输配电企业&#xff08;电网&#xff09; 老百姓最熟悉的电力企业&#xff0c;两大电网公司&#xff1a;国家电网、南方电网&#xff0c;行业内最大的甲方。 3 电力基础设施建…

解决2021版IDEA新建没有Server问题

2024-06-27可用 我是这样解决的&#xff0c;仅供参考 IDEA软件是2021.1.1版 导入Tomcat的Servlet包&#xff0c;就解决了&#xff0c;详见下图操作 1. 打开项目结构 2. 选Libraries 3. 找到Tomcat安装路径 比如我安装在了“C:\soft”目录&#xff0c;就去这个目录找 然后记得…

22、24年--项目管理概论——价值驱动的项目管理知识体系

1、项目管理原则 1.1 勤勉、尊重和关心他人 1)项目管理者在遵守内部和外部准则的同时,应该以负责任的方式行事,以正值、关心和可信的态度开展活动,同时对其所负责的项目的财务、社会和环境影响做出承诺 2)关键点。项目管理者在坚持“勤勉、尊重和关心他人”原则时,应该关…

[MySQL]购物管理系统—简略版

本文内容需以MySQL支持 特别感谢baidu comate AI提供的少量虚拟数据 0.建库(建立数据库——utf8字符集&#xff0c;utf8_general_ci排序规则) 1.此项目ER图如下 2.DDLDML(共九表&#xff0c;27数据) SET FOREIGN_KEY_CHECKS 0;DROP TABLE IF EXISTS goods; CREATE TABLE g…

定制型汽车传感器在汽车中的应用

定制型汽车霍尔传感器在汽车中的应用及功能 曲轴和凸轮轴位置传感器&#xff1a; 这些传感器用于监测发动机的曲轴和凸轮轴的位置&#xff0c;帮助发动机管理系统精确控制点火时机和燃油喷射&#xff0c;提高发动机效率。 变速器控制系统&#xff1a; 在自动变速器中&#xf…

Spring Boot中获取请求参数的几种方式

前言 在构建现代 Web 应用时&#xff0c;处理来自客户端的请求参数是不可或缺的一部分。Spring Boot作为构建微服务应用的领先框架&#xff0c;提供了多种灵活高效的方式来获取请求参数&#xff0c;满足各种应用场景。 无论您是Spring Boot的初学者&#xff0c;还是希望更深入…

Python私教张大鹏 PyWebIO通过事件回调实现表格的编辑和删除功能

从上面可以看出&#xff0c;PyWebIO把交互分成了输入和输出两部分&#xff1a;输入函数为阻塞式调用&#xff0c;会在用户浏览器上显示一个表单&#xff0c;在用户提交表单之前输入函数将不会返回&#xff1b;输出函数将内容实时输出至浏览器。这种交互方式和控制台程序是一致的…

PY32F003系列单片机,超值国产32位单片机,资料齐全 易于开发

PY32F003 系列微控制器是采用高性能的 32 位 ARM Cortex-M0 内核&#xff0c;宽电压工作范围的 MCU。嵌入高达 64 Kbytes flash 和 8 Kbytes SRAM 存储器&#xff0c;最高工作频率 32 MHz。包含多种不同封装类型多款产品。 PY32F003 系列微控制器的工作温度范围为 -40 ~ 85 ℃…

【铂电阻测温】如何保证热电阻采集的可靠性

TPS02RAH的输出接口为I2C&#xff0c;支持主机动态更改模块I2C地址&#xff0c;实现了单I2C总线挂载多个TPS02RAH测温模块的功能。 TPS02RAH的输出接口为I2C&#xff0c;支持主机动态更改模块I2C地址&#xff0c;实现了单I2C总线挂载多个TPS02RAH测温模块的功能。 参考链接 【…

酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统

更新内容 更新layui-v2.9.10更新docker国内镜像地址增加导入镜像构建容器的方式教师不批阅非首次考试试卷轮播图增加专栏类型目标链接增加课程能否发布检查去除初始化kindeditor语言文件去除选择题EF选项优化富文本内容显示样式优化内容图片点击放大监听优化试题题干答案等图片…

量化交易策略:定义及其重要性

量化交易是华尔街和硅谷的秘密结合点&#xff0c;在这里数学和算法与金钱和市场相遇。虽然它曾经是金融巨头的专属领域&#xff0c;但现在它比以往任何时候都更易于接触。 但不要被愚弄&#xff0c;量化交易仍然是一种高速、高压的游戏&#xff0c;在毫秒间可以赚到或失去财富…

nodepad 中换行符、tab替换

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

商务英语培训柯桥外语学校生活口语“Rose”是玫瑰,那“Under the rose”是“玫瑰之下”?

最近&#xff0c;《玫瑰的故事》很火&#xff0c;女主角在剧中也经常收到黄色的玫瑰花。玫瑰花常常与爱情、美丽和浪漫相关&#xff0c;今天一起跟着英语君学习玫瑰花的俚语吧。 Under the rose 意思&#xff1a;私下地、秘密地或隐秘地。来自拉丁语短语sub-rosa&#xff0c;它…