C语言数据库表格操作指南,高效管理数据表,实现增删改查功能

文章导读
以下是一个简单的C语言模拟数据库表格操作的完整代码示例,实现增删改查功能。使用结构体数组模拟数据表。
📋 目录
  1. A 使用文件存储持久化数据
  2. B 链表实现动态数据表
  3. C 搜索特定记录
  4. D FAQ
A A

以下是一个简单的C语言模拟数据库表格操作的完整代码示例,实现增删改查功能。使用结构体数组模拟数据表。

#include <stdio.h>
#include <string.h>
#define MAX_RECORDS 100
#define MAX_NAME 50
typedef struct {
int id;
char name[MAX_NAME];
float salary;
} Employee;
Employee db[MAX_RECORDS];
int record_count = 0;
// 增:添加记录
void addRecord(int id, char* name, float salary) {
if (record_count < MAX_RECORDS) {
db[record_count].id = id;
strcpy(db[record_count].name, name);
db[record_count].salary = salary;
record_count++;
printf("添加成功!\n");
} else {
printf("数据库已满!\n");
}
}
// 删:删除记录
void deleteRecord(int id) {
for (int i = 0; i < record_count; i++) {
if (db[i].id == id) {
for (int j = i; j < record_count - 1; j++) {
db[j] = db[j + 1];
}
record_count--;
printf("删除成功!\n");
return;
}
}
printf("记录未找到!\n");
}
// 改:修改记录
void updateRecord(int id, char* newName, float newSalary) {
for (int i = 0; i < record_count; i++) {
if (db[i].id == id) {
strcpy(db[i].name, newName);
db[i].salary = newSalary;
printf("修改成功!\n");
return;
}
}
printf("记录未找到!\n");
}
// 查:查询所有记录
void queryAll() {
for (int i = 0; i < record_count; i++) {
printf("ID: %d, Name: %s, Salary: %.2f\n", db[i].id, db[i].name, db[i].salary);
}
}
int main() {
addRecord(1, "张三", 5000.0);
addRecord(2, "李四", 6000.0);
queryAll();
updateRecord(1, "张三新", 5500.0);
deleteRecord(2);
queryAll();
return 0;
}

使用文件存储持久化数据

为了让数据持久化,我们可以使用fopen、fprintf、fscanf来读写文件。以下是保存和加载函数的实现。
void saveToFile(const char* filename) {
FILE* fp = fopen(filename, "w");
if (fp == NULL) return;
fprintf(fp, "%d\n", record_count);
for (int i = 0; i < record_count; i++) {
fprintf(fp, "%d %s %.2f\n", db[i].id, db[i].name, db[i].salary);
}
fclose(fp);
printf("数据已保存到文件!\n");
}
void loadFromFile(const char* filename) {
FILE* fp = fopen(filename, "r");
if (fp == NULL) return;
fscanf(fp, "%d", &record_count);
for (int i = 0; i < record_count; i++) {
fscanf(fp, "%d %s %f", &db[i].id, db[i].name, &db[i].salary);
}
fclose(fp);
printf("数据已从文件加载!\n");
}

C语言数据库表格操作指南,高效管理数据表,实现增删改查功能

链表实现动态数据表

数组大小固定,使用链表可以动态扩展。定义节点结构体。
typedef struct Node {
Employee data;
struct Node* next;
} Node;
Node* head = NULL;
// 添加到链表尾部
void addToList(int id, char* name, float salary) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data.id = id;
strcpy(newNode->data.name, name);
newNode->data.salary = salary;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}

搜索特定记录

实现按ID或姓名搜索。
void searchById(int id) {
for (int i = 0; i < record_count; i++) {
if (db[i].id == id) {
printf("找到: ID %d, %s, %.2f\n", db[i].id, db[i].name, db[i].salary);
return;
}
}
printf("未找到!\n");
}

C语言数据库表格操作指南,高效管理数据表,实现增删改查功能

FAQ

Q: 如何处理数据表中的重复ID?
A: 在添加记录前,先遍历检查ID是否存在,如果存在则拒绝添加或提示用户。

Q: C语言如何实现多表关联查询?
A: 使用多个结构体数组,通过共同字段如ID进行手动JOIN操作,比如嵌套循环匹配。

C语言数据库表格操作指南,高效管理数据表,实现增删改查功能

Q: 性能优化建议?
A: 对于大数据,使用哈希表或二叉搜索树代替线性搜索;定期压缩删除的记录空间。

Q: 支持字符串搜索吗?
A: 是的,使用strstr函数在姓名字段中模糊匹配。