zoukankan      html  css  js  c++  java
  • 107.为什么要使用数据库之文件增删查改直接操作


    增,a+,尾部增加不需要变化,随机,排序用r+,

    查询,修改用r+
    删除,读到内存或者其他文件,删除后,然后重写新文件。w+
    数据库原理,删除的时候填充为0位,积攒到一定程度,释放


    • 向文件写入  
       1 void write_to_file()
       2 {
       3     //数据
       4     double db[10] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 };
       5     //分配内存用于从文件读取
       6     double *p = calloc(10, 8);
       7     //以写读的方式打开文件
       8     FILE *pf = fopen("C:\db.bin", "w+");
       9     //写入数据
      10     fwrite(db, 8, 10, pf);
      11     //刷新缓冲区
      12     fflush(pf);
      13     //回到开头
      14     rewind(pf);
      15     //读取
      16     fread(p, 8, 10, pf);
      17     //关闭文件
      18     fclose(pf);
      19     for (int i = 0; i < 10;i++)
      20     {
      21         printf("
      %f", p[i]);
      22     }
      23 
      24     system("pause");
      25 }
    • 文件尾部增加
       1 //尾部增加
       2 void add_back()
       3 {
       4     write_to_file();
       5     //用于读取文件到内存
       6     double *p = calloc(11, 8);
       7     //以追加模式打开文件
       8     FILE *pf = fopen("C:\db.bin", "a+");
       9     //定义新的数据
      10     double dbx = 19.5;
      11     //写入数据
      12     fwrite(&dbx, 8, 1, pf);
      13     //刷新缓冲区
      14     fflush(pf);
      15     //回到开头
      16     rewind(pf);
      17     //读取
      18     fread(p, 8, 11, pf);
      19     //关闭文件
      20     fclose(pf);
      21     //显示
      22     for (int i = 0; i < 11; i++)
      23     {
      24         printf("
      %f", p[i]);
      25     }
      26 
      27     system("pause");
      28 
      29 
      30 
      31 }
    • 文件随机位置增加,插入
       1 //随机增加,插入
       2 void insert()
       3 {
       4     //读取文件块
       5     {
       6         //分配内存用于读取
       7         double *p = calloc(11, 8);
       8         //以读的方式打开文件
       9         FILE *pf = fopen("C:\db.bin", "r+");
      10         //读取
      11         fread(p, 8, 11, pf);
      12         //关闭文件
      13         fclose(pf);
      14         //显示
      15         for (int i = 0; i < 11; i++)
      16         {
      17             printf("
      %f", p[i]);
      18         }
      19         system("pause");
      20     }
      21     //插入
      22     {
      23         //以读写的方式打开文件
      24         FILE *pf = fopen("C:\db.bin", "r+");
      25         //存储最后一个
      26         double db;
      27         //指针移动到最后一个元素位置
      28         fseek(pf, 8 * 9, SEEK_SET);
      29         //读取最后一个
      30         fread(&db, 8, 1, pf);
      31 
      32         //从最后一个开始依次把前面一个赋值给后面一个
      33         for (int i = 9; i >= 1;i--)
      34         {
      35             //当前位置的前一个元素
      36             double dbtmp;
      37             //指针移动到当前指针的前一个位置
      38             fseek(pf, 8 * (i-1), SEEK_SET);
      39             //读取
      40             fread(&dbtmp, 8, 1, pf);
      41             //指针移动到当前位置
      42             fseek(pf, 8 * i, SEEK_SET);
      43             //写入
      44             fwrite(&dbtmp, 8, 1, pf);
      45         }
      46 
      47         //文件移动到开头
      48         fseek(pf, 0, SEEK_SET);
      49         //写入
      50         fwrite(&db, 8, 1, pf);
      51         //关闭文件
      52         fclose(pf);
      53     }
      54     //读取
      55     {
      56         double *p = calloc(11, 8);
      57         //以读的方式打开文件
      58         FILE *pf = fopen("C:\db.bin", "r+");
      59         //读取
      60         fread(p, 8, 11, pf);
      61         //关闭
      62         fclose(pf);
      63         //输出
      64         for (int i = 0; i < 11; i++)
      65         {
      66             printf("%f
      ", p[i]);
      67         }
      68     }
      69     system("pause");
      70 }
    • 文件查找
       1 //查找
       2 void  find()
       3 {
       4     //以读写的方式打开文件
       5     FILE *pf = fopen("C:\db.bin", "r+");
       6     //要查找的元素
       7     double db = 17.0;
       8     //读取到的元素
       9     double dbx;
      10     //标识是否找到
      11     int flag = 0;
      12     //依次遍历
      13     for (int i = 0; i < 11;i++)
      14     {
      15         fseek(pf, 8 * i, SEEK_SET);
      16         //读取
      17         fread(&dbx, 8, 1, pf);
      18         if (dbx==db)
      19         {
      20             flag = 1;
      21             break;
      22         }
      23     }
      24     if (flag)
      25     {
      26         printf("找到");
      27     } 
      28     else
      29     {
      30         printf("找不到");
      31     }
      32     
      33     fclose(pf);
      34     system("pause");
      35 }
    • 修改
       1 //修改
       2 void  change()
       3 {
       4 
       5     FILE *pf = fopen("C:\db.bin", "r+");
       6     //要查找的元素
       7     double db = 7.0;
       8     //要改成的新的数据
       9     double dbnew = 17.0;
      10     //用于读取
      11     double dbx;
      12     //标识是否找到
      13     int flag = 0;
      14     //遍历寻找
      15     for (int i = 0; i < 11; i++)
      16     {
      17         //读取
      18         fseek(pf, 8 * i, SEEK_SET);
      19         fread(&dbx, 8, 1, pf);
      20         if (dbx == db)
      21         {
      22             //移动到相应位置
      23             fseek(pf, 8 * i, SEEK_SET);
      24             //写入
      25             fwrite(&dbnew, 8, 1, pf);
      26             flag = 1;
      27             break;
      28         }
      29 
      30     }
      31     if (flag)
      32     {
      33         printf("找到");
      34     }
      35     else
      36     {
      37         printf("找不到");
      38     }
      39 
      40     fclose(pf);
      41     system("pause");
      42 }
      43 
      44 //删除
      45 void delete()
      46 {
      47     //分配内存用于读取
      48     double *p = calloc(11, 8);
      49     //读文件
      50     {
      51         FILE *pf = fopen("C:\db.bin", "r+");
      52         fread(p, 8, 11, pf);
      53         fclose(pf);
      54         for (int i = 0; i < 11; i++)
      55         {
      56             printf("
      %f", p[i]);
      57         }
      58     }
      59     //写入文件
      60     {
      61         FILE *pf = fopen("C:\db.bin", "w+");
      62         fwrite(p, 8, 10, pf);
      63         fclose(pf);
      64     }
      65     //读取文件
      66     {
      67 
      68         FILE *pf = fopen("C:\db.bin", "r+");
      69         fread(p, 8, 10, pf);
      70         fclose(pf);
      71         for (int i = 0; i < 10; i++)
      72         {
      73             printf("
      %f", p[i]);
      74         }
      75     }
      76 
      77     getchar();
      78 }

    完整代码

      1 #define _CRT_SECURE_NO_WARNINGS
      2 #include<stdio.h>
      3 #include <stdlib.h>
      4 
      5 //增,a+,尾部增加不需要变化,随机,排序用r+,
      6 //查询,修改用r+
      7 //删除,读到内存或者其他文件,删除后,然后重写新文件。w+
      8 //数据库原理,删除的时候填充为0位,积攒到一定程度,释放
      9 
     10 //向文件写入
     11 void write_to_file()
     12 {
     13     //数据
     14     double db[10] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 };
     15     //分配内存用于从文件读取
     16     double *p = calloc(10, 8);
     17     //以写读的方式打开文件
     18     FILE *pf = fopen("C:\db.bin", "w+");
     19     //写入数据
     20     fwrite(db, 8, 10, pf);
     21     //刷新缓冲区
     22     fflush(pf);
     23     //回到开头
     24     rewind(pf);
     25     //读取
     26     fread(p, 8, 10, pf);
     27     //关闭文件
     28     fclose(pf);
     29     for (int i = 0; i < 10;i++)
     30     {
     31         printf("
    %f", p[i]);
     32     }
     33 
     34     system("pause");
     35 }
     36 
     37 
     38 //尾部增加
     39 void add_back()
     40 {
     41     write_to_file();
     42     //用于读取文件到内存
     43     double *p = calloc(11, 8);
     44     //以追加模式打开文件
     45     FILE *pf = fopen("C:\db.bin", "a+");
     46     //定义新的数据
     47     double dbx = 19.5;
     48     //写入数据
     49     fwrite(&dbx, 8, 1, pf);
     50     //刷新缓冲区
     51     fflush(pf);
     52     //回到开头
     53     rewind(pf);
     54     //读取
     55     fread(p, 8, 11, pf);
     56     //关闭文件
     57     fclose(pf);
     58     //显示
     59     for (int i = 0; i < 11; i++)
     60     {
     61         printf("
    %f", p[i]);
     62     }
     63 
     64     system("pause");
     65 
     66 
     67 
     68 }
     69 
     70 //随机增加,插入
     71 void insert()
     72 {
     73     //读取文件块
     74     {
     75         //分配内存用于读取
     76         double *p = calloc(11, 8);
     77         //以读的方式打开文件
     78         FILE *pf = fopen("C:\db.bin", "r+");
     79         //读取
     80         fread(p, 8, 11, pf);
     81         //关闭文件
     82         fclose(pf);
     83         //显示
     84         for (int i = 0; i < 11; i++)
     85         {
     86             printf("
    %f", p[i]);
     87         }
     88         system("pause");
     89     }
     90     //插入
     91     {
     92         //以读写的方式打开文件
     93         FILE *pf = fopen("C:\db.bin", "r+");
     94         //存储最后一个
     95         double db;
     96         //指针移动到最后一个元素位置
     97         fseek(pf, 8 * 9, SEEK_SET);
     98         //读取最后一个
     99         fread(&db, 8, 1, pf);
    100 
    101         //从最后一个开始依次把前面一个赋值给后面一个
    102         for (int i = 9; i >= 1;i--)
    103         {
    104             //当前位置的前一个元素
    105             double dbtmp;
    106             //指针移动到当前指针的前一个位置
    107             fseek(pf, 8 * (i-1), SEEK_SET);
    108             //读取
    109             fread(&dbtmp, 8, 1, pf);
    110             //指针移动到当前位置
    111             fseek(pf, 8 * i, SEEK_SET);
    112             //写入
    113             fwrite(&dbtmp, 8, 1, pf);
    114         }
    115 
    116         //文件移动到开头
    117         fseek(pf, 0, SEEK_SET);
    118         //写入
    119         fwrite(&db, 8, 1, pf);
    120         //关闭文件
    121         fclose(pf);
    122     }
    123     //读取
    124     {
    125         double *p = calloc(11, 8);
    126         //以读的方式打开文件
    127         FILE *pf = fopen("C:\db.bin", "r+");
    128         //读取
    129         fread(p, 8, 11, pf);
    130         //关闭
    131         fclose(pf);
    132         //输出
    133         for (int i = 0; i < 11; i++)
    134         {
    135             printf("%f
    ", p[i]);
    136         }
    137     }
    138     system("pause");
    139 }
    140 
    141 //查找
    142 void  find()
    143 {
    144     //以读写的方式打开文件
    145     FILE *pf = fopen("C:\db.bin", "r+");
    146     //要查找的元素
    147     double db = 17.0;
    148     //读取到的元素
    149     double dbx;
    150     //标识是否找到
    151     int flag = 0;
    152     //依次遍历
    153     for (int i = 0; i < 11;i++)
    154     {
    155         fseek(pf, 8 * i, SEEK_SET);
    156         //读取
    157         fread(&dbx, 8, 1, pf);
    158         if (dbx==db)
    159         {
    160             flag = 1;
    161             break;
    162         }
    163     }
    164     if (flag)
    165     {
    166         printf("找到");
    167     } 
    168     else
    169     {
    170         printf("找不到");
    171     }
    172     
    173     fclose(pf);
    174     system("pause");
    175 }
    176 
    177 //修改
    178 void  change()
    179 {
    180 
    181     FILE *pf = fopen("C:\db.bin", "r+");
    182     //要查找的元素
    183     double db = 7.0;
    184     //要改成的新的数据
    185     double dbnew = 17.0;
    186     //用于读取
    187     double dbx;
    188     //标识是否找到
    189     int flag = 0;
    190     //遍历寻找
    191     for (int i = 0; i < 11; i++)
    192     {
    193         //读取
    194         fseek(pf, 8 * i, SEEK_SET);
    195         fread(&dbx, 8, 1, pf);
    196         if (dbx == db)
    197         {
    198             //移动到相应位置
    199             fseek(pf, 8 * i, SEEK_SET);
    200             //写入
    201             fwrite(&dbnew, 8, 1, pf);
    202             flag = 1;
    203             break;
    204         }
    205 
    206     }
    207     if (flag)
    208     {
    209         printf("找到");
    210     }
    211     else
    212     {
    213         printf("找不到");
    214     }
    215 
    216     fclose(pf);
    217     system("pause");
    218 }
    219 
    220 //删除
    221 void delete()
    222 {
    223     //分配内存用于读取
    224     double *p = calloc(11, 8);
    225     //读文件
    226     {
    227         FILE *pf = fopen("C:\db.bin", "r+");
    228         fread(p, 8, 11, pf);
    229         fclose(pf);
    230         for (int i = 0; i < 11; i++)
    231         {
    232             printf("
    %f", p[i]);
    233         }
    234     }
    235     //写入文件
    236     {
    237         FILE *pf = fopen("C:\db.bin", "w+");
    238         fwrite(p, 8, 10, pf);
    239         fclose(pf);
    240     }
    241     //读取文件
    242     {
    243 
    244         FILE *pf = fopen("C:\db.bin", "r+");
    245         fread(p, 8, 10, pf);
    246         fclose(pf);
    247         for (int i = 0; i < 10; i++)
    248         {
    249             printf("
    %f", p[i]);
    250         }
    251     }
    252 
    253     getchar();
    254 }
  • 相关阅读:
    使用socket BPF/Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)
    使用Iperf工具测试android系统网络wifi的吞吐量wifithrougput
    html input中 button和submit的区别
    Linux转发性能评估与优化(转发瓶颈分析与解决方案)
    交叉编译器 arm-linux-gnueabi 和 arm-linux-gnueabihf 的区别
    MySQL查询不区分大小写的sql写法
    Docker镜像保存save、加载load
    将Spring-boot应用部署到Docker容器
    Docker 安装使用
    Scalatra文件下载时中文乱码
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8503886.html
Copyright © 2011-2022 走看看