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("\n%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("\n%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("\n%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\n", 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("\n%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("\n%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("\n%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("\n%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("\n%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\n", 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("\n%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("\n%f", p[i]);
250         }
251     }
252
253     getchar();
254 }

原文地址:https://www.cnblogs.com/xiaochi/p/8503886.html

时间: 2024-11-06 22:15:39

107.为什么要使用数据库之文件增删查改直接操作的相关文章

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码)

SQL Server 表的管理_关于表的操作增删查改的操作的详解(案例代码) 概述: 表由行和列组成,每个表都必须有个表名. SQL CREATE TABLE 语法 CREATE TABLE table_name ( column_name1 data_type(size), column_name2 data_type(size), column_name3 data_type(size), .... ); 1.查看表 exec sp_help table1; 2.创建表 create tab

C# SQLite 创建数据库的方法增删查改语法和命令

SQLite介绍 SQLite是一个开源.免费的小型RDBMS(关系型数据库),能独立运行.无服务器.零配置.支持事物,用C实现,内存占用较小,支持绝大数的SQL92标准. SQLite数据库官方主页:http://www.sqlite.org/index.html   cmd下sqlite的使用网 1:选择下载对应自己系统的sqlite.3exe文件 2:解压后使用cmd命令进入sqlite3.exe文件所在的路径执行命令就可以操作做相应的操作. 在进入数据库之后如果需要退出的话windows

HDFS Java Client对hdfs文件增删查改

step1:增加依赖 pom.xml ... <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.2.0</versio

oracle对表进行增删查改的操作,以及对用户的一些简单的操作

1.验证数据库是否已经成功安装 select status from v$instance    status会显示open 2.如何oracle数据库中退回到操作系统中 exit 3.登录oracle数据库一共有两种认证方式 操作系统认证:在默认情况下,如果在本机服务器登录oracle数据库,可以使用操作系统认证,不用输入数据库用户名及密码 用户密码认证:如果是远程链接数据库,则需要使用数据库用户名.密码进行认证 4.如何访问oracle数据库企业级管理器(OEM) 在IE浏览器中输入安装数据

MongoDB数据库进阶 --- 增删查改...

在之前的文章中,我已经介绍了什么事MongoDB以及怎么在windows下安装MongoDB等等基本知识. 所以这篇进阶的博客就主要介绍以下如何进行数据库的基本操作 --- 增删查改. 数据库相关 显示所有数据库: show dbs 其中admin和local都是默认存在的数据库. 查看当前数据库: db 即当前默认就是test数据库,但是为什么在 show dbs 的时候没有呢?  这是因为test数据库中没有任何数据,所以不会显示,后面会介绍插入数据,插入数据后就会显示了. 创建数据库: u

Java数据库编程之JDBC增删查改

前言 众多的ORM框架使我们从原生的JDBC编码摆脱出来,但在学习数据库编程之初,应该先掌握底层的JDBC编程,熟练应用后,学起框架才会更得心应手.就像金庸笔下的武侠人物,只要内功深厚,再去学习其他武功绝学,只不过是招式罢了.正所谓,温故而知新,本文回顾了最基础的JDBC增删查改操作. 连接数据库 在之前一篇随笔讲过如何连接数据库——<Java数据库编程之JDBC配置>. 数据库连接工具类 DBConnection package database; import java.sql.*; im

Sqlite数据库增删查改操作

1.SqliteOpenHelper为数据库抽象类,需创建一个类继承他,其中有onCreate创建数据库的抽象方法和onUpgrade升级数据库方法(一般用不上). 1 //创建数据库的类 2 //SQLiteOpenHelper抽象类 onCreate和onUpgrade抽象方法 3 public class MySqliteHelper extends SQLiteOpenHelper { 4 5 //新建数据库以及表 6 private String SqlCpData="create t

4.CRUD Operations Using the Repository Pattern in MVC【在MVC中使用仓储模式进行增删查改】

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-using-the-repository-pattern-in-mvc/ 上一篇文章,讲到了MVC中基本的增删查改,这篇文章,我会继续说到,使用仓储模式,进行增删查改. 什么是仓储模式呢,我们先来了解一下:  仓储模式是为了在程序的数据访问层和业务逻辑层之间创建一个抽象层,它是一种数据访问模式,提供了一种更松散耦合的数据访问方法.我们把创建数据访问的逻辑代码写在单独的类中,或者类库中

swift中使用CoreData实现增删查改

1.建立CoreData项目 创建项目时勾选 User Core Data 2.创建实体(Entity) 创建项目后,可以看到目录中有一个.xcdatamodeld文件.打开它,点击下方Add Entity按钮即可创建新的实体.这里,我创建了Student尸体,两个属性分别是创建时间data和名字name.完成后点击右侧Show the Data Model Inspector按钮,里面有Name和Class两个选项,分别是实体名称和要生成的类名. 完成后,选择菜单Editor–>Create