c语言文件操作数据库操作
时间: 2023-09-11 07:04:40 浏览: 48
在C语言中,可以使用文件操作来模拟数据库操作。具体来说,可以使用以下标准库函数来操作文件:
1. fopen():打开文件,返回文件指针
2. fclose():关闭文件
3. fwrite():将数据写入文件
4. fread():从文件中读取数据
5. fseek():移动文件指针
通过这些函数,可以模拟数据库中的增、删、改、查操作。例如,可以定义一个结构体表示一个学生的信息,将学生信息以二进制的形式写入文件中,然后通过读取文件内容来查询、修改、删除学生信息。代码示例如下:
```c
#include <stdio.h>
#include <string.h>
// 学生信息结构体
typedef struct {
int id; // 学号
char name[20]; // 姓名
int age; // 年龄
} Student;
// 添加学生信息到文件中
void addStudent(FILE* file, Student student) {
fwrite(&student, sizeof(Student), 1, file);
}
// 根据学号查询学生信息
Student findStudent(FILE* file, int id) {
Student student;
fseek(file, 0, SEEK_SET); // 将文件指针移动到文件开头
while (fread(&student, sizeof(Student), 1, file)) {
if (student.id == id) {
return student;
}
}
student.id = -1; // 没有找到对应学号的学生,返回一个特殊的学生信息
return student;
}
// 修改学生信息
void updateStudent(FILE* file, int id, char* name, int age) {
Student student = findStudent(file, id); // 先查询出对应学号的学生信息
if (student.id != -1) {
strncpy(student.name, name, sizeof(student.name));
student.age = age;
fseek(file, -sizeof(Student), SEEK_CUR); // 将文件指针移动到当前学生信息的位置
fwrite(&student, sizeof(Student), 1, file);
}
}
// 删除学生信息
void deleteStudent(FILE* file, int id) {
Student student = findStudent(file, id); // 先查询出对应学号的学生信息
if (student.id != -1) {
student.id = -1; // 将学生信息的学号设置为-1,表示该学生已删除
fseek(file, -sizeof(Student), SEEK_CUR); // 将文件指针移动到当前学生信息的位置
fwrite(&student, sizeof(Student), 1, file);
}
}
int main() {
FILE* file = fopen("students.dat", "wb+"); // 打开(或创建)二进制文件,可读可写
if (file == NULL) {
printf("Failed to open file!\n");
return 1;
}
// 添加学生信息
Student student1 = { 1001, "张三", 20 };
Student student2 = { 1002, "李四", 21 };
addStudent(file, student1);
addStudent(file, student2);
// 查询学生信息
Student student = findStudent(file, 1001);
printf("Student %d: %s, %d\n", student.id, student.name, student.age);
// 修改学生信息
updateStudent(file, 1001, "张三三", 21);
student = findStudent(file, 1001);
printf("Student %d: %s, %d\n", student.id, student.name, student.age);
// 删除学生信息
deleteStudent(file, 1002);
student = findStudent(file, 1002);
printf("Student %d: %s, %d\n", student.id, student.name, student.age);
fclose(file); // 关闭文件
return 0;
}
```