zoukankan      html  css  js  c++  java
  • C语言数据库编程

    ----摘自个人C语言数据库项目报告

    3.4逻辑结构的SQL语句实现

    创建基本表:

    3.4-1建立商品表:

    create table goods(goods_id int primary key,goods_types varchar,goods_name varchar,goods_price varchar,appraise text);

    3.4-2建立卖家表:

    create table seller(seller_id int primary key,seller_name varchar,seller_sex varcahr,phone int,address text)

    3.4-3建立买家表:

    create table buyer(buyer_id int primary key,buyer_name varchar,buyer_sex varchar,buyer_phone int,buyer_address text

    3.4-4建立账单视图表:

    Create view bill as select buyer_id,buyer_name,buyer_address,goods_id,goods_name,goods_price from buyer,goods;

    3.4-5建立店铺基本表:

    create table store(store_id int primary key, store_name text);

    3.4-6建立卖家具体详情视图表:

    create view seller_message as select seller_id, seller_name,seller_sex,goods_name,store_name,store_address from seller,store,goods;

     

    3.4-7插入数据:

    本系统有用户自定义插入数据,无需在C语言里面写入要插入的数据,用了本书上的sqlite3_mprintf格式化输入函数来实现。

    Sql=sqlite3_mprintf(“insert into  表名 values(%格式化)“, 格式化的变量); 此处%d整型无需引号,%s字符型加单引号。

    例如本系统中插入数据:char *pSQL=sqlite3_mprintf("insert into store values(%d,'%s' )",store_id,store_name);

    3.4-8查找数据:

    自定义查找:sqlite3_mprintf(“select 列名 from 表名 where 列名= 格式化”,格式变量);

    例如本系统中查找数据:

    char  *pSQL= sqlite3_mprintf("select store_id, store_name from store where store_id =  %d ",col_value);

    3.4-9删除数据:

    自定义删除:sqlite3_mprintf(“delete from 表名 where 列名=格式化”,格式化变量);

    例如本系统中自定义删除数据:char *pSQL=sqlite3_mprintf("delete from goods where goods_id = %s ",col_value) ;

    删除表:drop table 表名。

    项目中代码:

    复制代码
    //////////////////////////// /*建立第1张表 goods*//////////////////////////////////////////////////////////////////
    void create_goods()
    {
        int rc;    //rc为返回值,判断函数是否执行成功  rc=0函数执行成功,rc !=0函数执行失败
        sqlite3 *db;  //SQLite数据库指针   sqlite3结构体  *db指向sqlite3结构体的指针
        char *pFileName = "Taobao_Shopping.db";  //数据库文件名
        char * zErr;   /* 定义返回错误信息的变量*/
        
        
        rc = sqlite3_open(pFileName, &db); /*打开数据库*/
        if(rc)                             /*假,关闭数据库*/
        {
            printf("open database failed");
            sqlite3_close(db);
        } 
        char *pSQL="create table goods(goods_id int primary key,goods_types text,goods_name text,goods_price text,appraise text)";
        
        rc = sqlite3_exec(db, pSQL, 0,0, &zErr);   /* sqlite执行接口实现表的创建*/
        
        if(rc!=SQLITE_OK)
        {
            if (zErr!=NULL)
            {
                printf("SQL error:%s
    
    ",zErr);
                sqlite3_free(zErr);  /* 释放错误信息所占用的空间*/
            }
        }
        sqlite3_close(db);
        system("pause");system("cls");printf("提示:
    商品表已建立!"); goods();
    }
    
    ////////////////////////////////////////录入商品信息//////////////////////////////////////////////////////////////////////////
    
    void goods_write()
    {
        //数组存储字符串
        int  goods_id;
        char goods_types[100];
        char goods_name[100];
        char goods_price[100];
     
        char appraise[100]; 
        int rc;
        sqlite3 *db;  //SQLite数据库指针
        char *pFileName = "Taobao_Shopping.db";  //数据库文件名
        rc = sqlite3_open(pFileName, &db); /*打开数据库*/
        if(rc)                             /*假,关闭数据库*/
        {
            printf("open database failed");
            sqlite3_close(db);
        }
        char * zErr;   /* 定义返回错误信息的变量*/
        
        
        printf("
    
    请依次录入以下信息
    
    商品编号,商品种类,商品名称,商品价格,商品评论
    
    ");
        
        
        scanf("%d%s%s%s %s",&goods_id,&goods_types,&goods_name,&goods_price ,&appraise);
        
        //格式化输入函数,以变量列表的方式插入到SQL语句中
        char *pSQL=sqlite3_mprintf("insert into goods values('%d','%s', '%s','%s', '%s');",goods_id,goods_types,goods_name,goods_price ,appraise);
        
        
        rc = sqlite3_exec(db,pSQL,0,0,&zErr); /*执行完成数据的插入*/
        
        if(rc) //rc=0
        {printf("商品信息录入失败!
    ");}
        else
        {printf("
    商品信息录入成功!
    
    ");}
        sqlite3_close(db);
        system("pause");
        system("cls");
        goods();
    }
    ///////////////////////////////////////////////////////////////////商品自定义删除/////////////////////////////////////////////////////////////
    void goods_del1()
    { 
        
        int rc;    
        sqlite3 *db;   
        char *pFileName = "Taobao_Shopping.db";   
        char * zErr;  
        char col_value[5];  
        rc = sqlite3_open(pFileName, &db); /*打开数据库*/
        if(rc)                             /*假,关闭数据库*/
        {
            printf("open database failed");
            sqlite3_close(db);
        }
        printf("请输入要删除的商品编号
    ");
        
        scanf("%s",&col_value);
        char *pSQL=sqlite3_mprintf("delete from goods where goods_id = %s ",col_value) ;
        rc = sqlite3_exec(db,pSQL,0,0,&zErr);
        if(rc)
        {printf("删除商品信息失败!
    
    ");}
        else
            printf("
    删除商品信息成功!
    
    ");
        system("pause");
        system("cls");
        goods_del();
        
    }
    复制代码
    复制代码
    ////////////////////////////////////////////商品表修改////////////////////////////////////////////////////////////
    void goods_update()
    {
        
        
        int rc;    
        sqlite3 *db;   
        char *pFileName = "Taobao_Shopping.db";   
        char * zErr; 
        char col_name[10];
        char  new_value[10];
        int  goods_id;
        
        rc = sqlite3_open(pFileName, &db); /*打开数据库*/
        if(rc)                             /*假,关闭数据库*/
        {
            printf("open database failed");
            sqlite3_close(db);
        }
        printf("请输入原来的列名,要修改的列名的列值,以及本商品编号
    ");    //修改所在行的数值
        scanf("%s%s%d",&col_name,&new_value,&goods_id);
        
        //scanf()里面的格式化字符型跟整形 输入到sqlite3_mprintf()格式化输入 字符型跟整形  goods_id定义为数组不能正确执行结果。或者是goods_id定义为字符型解决问题
        
        
        char *pSQL=sqlite3_mprintf("update goods set '%s' = '%s' where goods_id = %d", col_name,new_value,goods_id);///%s字符型加单引号,数字可以不加
        
        rc = sqlite3_exec(db,pSQL,0,0,&zErr);
        if(rc)
        {printf("修改商品信息失败!
    
    ");
        } else
            printf("
    修改商品信息成功!
    
    ");
        sqlite3_close(db);
        system("pause");
        system("cls");
        goods();
        
        
    }
    //////////////////////////////////////////查询商品表信息//////////////////////////////////////////////////////////////////
    void goods_find1()
    {
        int rc;    
        sqlite3 *db;  //SQLite数据库指针   sqlite3结构体  *db指向sqlite3结构体的指针
        char *pFileName = "Taobao_Shopping.db";   
        char * zErr;   /* 定义返回错误信息的变量*/
        char **result;
        int  rows, cols;
        int col_value;
        rc = sqlite3_open(pFileName, &db); /*打开数据库*/
        if(rc)                             /*假,关闭数据库*/
        {
            printf("open database failed");
            sqlite3_close(db);
        }
        printf("请输入商品编号
    ");// 根据goods_id 查询那一行的数据
        
        scanf("%d",&col_value);
        
        char  *pSQL= sqlite3_mprintf("select goods_id,goods_types,goods_name,goods_price ,appraise from goods where goods_id =  %d ",col_value);
        
        rc = sqlite3_get_table(db, pSQL, &result, &rows, &cols, &zErr);//sqlite3_get table()无回调函数
    
        printf("查询结果:
    ");
        for(int i=0; i<=rows; i++)//        
        {      printf("
    ");
        for(int j=0; j<cols; j++)//
            printf("%11s  ",result[i*cols + j]);//第i行第j列元素值 包括表头
        
        printf("
    ");
        }
        system("pause");
        system("cls");
        goods_find();
        
    }
    复制代码
  • 相关阅读:
    JavaScript快速入门-DOM对象
    JavaScript快速入门-ECMAScript对象介绍
    JavaScript快速入门-ECMAScript函数
    JavaScript快速入门-ECMAScript运算符
    [转] boost::function用法详解
    [转] [翻译]图解boost::bind
    [转] Git 分支
    [转] 多线程下变量-gcc原子操作 __sync_fetch_and_add等
    [转] Boost智能指针——scoped_ptr
    [转] linux下的c/c++调试器gdb
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/8047034.html
Copyright © 2011-2022 走看看