8月4日总结部分文件编程,数据库

关于使用库函数调用
例1、用库函数调用编写一个拷贝文件的代码(文件编程)

手动创建两个文本文件text1.txt,text2.txt,要求编程创建text3.txt,实现text1.txt和text2.txt文件中除去首行和末尾对应的数据相加,三个文本的内容如上

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
    FILE *first;
    FILE *second;
    FILE *to_fd;
    char fh,sh;

    if(argc != 4)
    {
        fprintf(stderr,"usage %s need from and to file!\n",argv[0]);
        exit(-1);
    }

    if((first = fopen(argv[1],"r")) == NULL)
    {
        fprintf(stderr,"open %s error!\n",argv[1]);
        exit(-1);
    }

    if((second = fopen(argv[2],"r")) == NULL)
    {
        fprintf(stderr,"open %s error!\n",argv[2]);
        exit(-1);
    }

    if((to_fd = fopen(argv[3],"w")) == NULL)
    {
        fprintf(stderr,"open %s error!\n",argv[3]);
        exit(-1);
    }

    int f,s,num;
    char nh;

    fh = fgetc(first);
    sh = fgetc(second);
    while(fh != EOF && sh != EOF)
    {
        if(fh < '0' || fh > '9')
        {
            nh = fh;
        }
        else
        {
            f = fh - '0';
            s = sh - '0';
            num = f + s;
            nh = num + '0';
        }

        fputc(nh,to_fd);
        fh = fgetc(first);
        sh = fgetc(second);
    }

    fclose(first);
    fclose(second);

    return 0;
}

**

数据库

**

定义:一个有结构的集成的可共享统一管理的数据集合,由DBMS统一管理。

sqlite3
SQL命令
创建:create table mytable (id integer primary key,name text);
增加:insert into mytable (id,name) values(1,‘wang’);
查看:select * from mytable;

例、

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

void create_table(sqlite3 *db) //创建表
{
    char * sql;
    char * errmsg;
    int rec;
    
    sql = "create table if not exists mytable(id integer primary key,name text);";
    rec = sqlite3_exec(db,sql,NULL,NULL,&errmsg);

    if(rec != SQLITE_OK)
    {
        printf("create table error!\n",errmsg);
        exit(-1);
    }
}

void insert_record(sqlite3 *db) //填表
{
    char name[20];
    char *errmsg;
    char sql[100];
    int rec;
    int n;
    int i;
    int id;

    printf("输入多少条:\n");
    scanf("%d",&n);

    for(i = 0;i < n;i++)
    {
        printf("请输入学号,姓名:\n");
        scanf("%d%s",&id,name);
        sprintf(sql,"insert into mytable(id,name) values(%d,'%s')",id,name);

        rec = sqlite3_exec(db,sql,NULL,NULL,&errmsg);

        if(rec != SQLITE_OK)
        {
            printf("insert error! %s\n",errmsg);
            exit(-1);
        }
    }
    /*
    char * sql;
    char * errmsg;
    int rec;
    
    sql = "insert into mytable(id,name) values (1,'wang');";
    rec = sqlite3_exec(db,sql,NULL,NULL,&errmsg);

    if(rec != SQLITE_OK)
    {
        printf("insert error! %s\n",errmsg);
        exit(-1);
    }
    */
}

int display_record(void *para,int n_col,char **value,char **name) //回调函数
{
    int i;

    printf("输出的成员个数:%d\n",n_col);

    for(i = 0;i < n_col;i++)
    {
        printf("%10s",name[i]);
    }
    printf("\n");

    for(i = 0;i < n_col;i++)
    {
        printf("%10s",value[i]);
    }
    printf("\n");
    
    return SQLITE_OK;
}

void inquire_usecb(sqlite3 *db) //查表
{
    char *sql;
    char *errmsg;
    int rec;

    sql = "select * from mytable;";

    rec = sqlite3_exec(db,sql,display_record,NULL,&errmsg);

    if(rec != SQLITE_OK)
    {
        printf("inquire error! %s\n",errmsg);
        exit(-1);
    }
}

void inquire_nocb(sqlite3 *db) //不使用回调函数的查表
{
    char * sql;
    char **result;
    int n_row;
    int n_col;
    char * errmsg;
    int i;
    int rec;

    sql = "select * from mytable;";

    rec = sqlite3_get_table(db,sql,&result,&n_row,&n_col,&errmsg);

    if(rec != SQLITE_OK)
    {
        printf("get table error! %s\n",errmsg);
        exit(-1);
    }

    printf("n_row = %d n_col = %d\n",n_row,n_col);
    printf("result is:\n");

    for(i = 0;i < n_col;i++)
    {
        printf("%10s",result[i]);
    }
    printf("\n");

    for(;i < (n_row + 1) * n_col;i++)
    {
        printf("%10s",result[i]);
        if((i + 1) % n_col == 0)
        {
            printf("\n");
        }
    }

    sqlite3_free_table(result);
}

int main()
{
    sqlite3 *db;
    int rec;

    rec = sqlite3_open("mydata.db",&db); //打开数据库

    if(rec != SQLITE_OK)
    {
        printf("open error,%s\n",sqlite3_errmsg(db));
        exit(-1);
    }
    else
    {
        printf("open success!\n");
    }

    create_table(db); //创建表

    insert_record(db); //填表

    //inquire_usecb(db); //查表
    inquire_nocb(db); //不采用回调函数的查表

    sqlite3_close(db); //关闭

    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值