使用C语言实现数据库记录的添加与显示

发布:2024-09-30 11:09 阅读:103 点赞:0

一、引言

在C语言中,我们可以通过功能函数来创建数据库结构并添加记录。本示例展示了如何通过函数调用将记录从结构体数组添加到数据库文件中。

二、添加记录的代码示例

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

// 定义员工结构体
struct employee {
    int employee_code; // 员工代码
    char employee_name[30]; // 员工姓名
    char designation[20]; // 职位
    double salary; // 工资
};

// 添加记录函数
void addrecords() {
    FILE *file_pointer;
    struct employee emp[10]; // 员工数组
    int i, no_of_records;

    // 打开文件,准备追加记录
    if ((file_pointer = fopen("emp1.dat""a")) == NULL) {
        fprintf(stderr"无法打开 emp1.dat 文件以写入记录,程序终止。\n");
        exit(1);
    }

    // 输入记录数
    while (1) {
        printf("请输入要写入的记录数 <1 到 10>: ");
        scanf("%d", &no_of_records);
        fflush(stdin);
        if (no_of_records > 0 && no_of_records < 11) {
            break// 合法输入
        } else {
            printf("输入记录数不正确,请重新输入。\n");
        }
    }

    // 输入员工信息
    for (i = 0; i < no_of_records; i++) {
        printf("\n请输入员工代码: ");
        scanf("%d", &emp[i].employee_code);
        fflush(stdin);
        printf("请输入员工姓名: ");
        fgets(emp[i].employee_name, 30stdin);
        emp[i].employee_name[strcspn(emp[i].employee_name, "\n")] = 0// 去除换行符
        printf("请输入职位: ");
        scanf("%s", emp[i].designation);
        printf("请输入工资: ");
        scanf("%lf", &emp[i].salary); // 正确的双精度格式说明符
    }

    // 写入记录到文件
    fwrite(emp, sizeof(struct employee), no_of_records, file_pointer);
    fclose(file_pointer); // 关闭文件
}

int main() {
    printf("程序: 调用函数将记录添加到数据文件\n");
    addrecords(); // 调用添加记录函数
    return 0;
}

三、输出说明

在上述程序中,我们通过一个 fwrite() 语句写入整个结构体数组。变量 no_of_records 记录了用户希望写入的记录数,确保数据写入的灵活性。

四、开发显示记录的函数

我们可以使用类似的方法从文件中读取记录。可以使用一个结构体读取,也可以定义一个结构体数组批量读取。

#include<stdio.h>
#include<conio.h>

// 定义员工结构体
struct employee {
    int employee_code; // 员工代码
    char employee_name[30]; // 员工姓名
    char designation[20]; // 职位
    float salary; // 工资
};

// 显示记录的函数
void disprecords();

void main() {
    printf("程序: 调用函数读取记录到结构体数组\n");
    disprecords(); // 调用显示记录函数
}

void disprecords() {
    FILE *file_pointer;
    struct employee emp[10]; // 员工数组
    struct employee e; // 单个员工结构体
    int i, no_of_records = 0;

    // 打开文件读取记录
    if ((file_pointer = fopen("employee.dat""r")) == NULL) {
        fprintf(stderr"无法打开 employee.dat 文件以读取记录,程序终止。\n");
        exit(1);
    }

    // 读取记录数量
    while (fread(&e, sizeof(struct employee), 1, file_pointer) == 1)
        no_of_records++;

    // 检查记录数限制
    if (no_of_records > 10) {
        printf("结构体数组最大可存储记录数为10\n");
        printf("无法容纳更多记录...\n");
        fclose(file_pointer);
        return;
    }

    rewind(file_pointer); // 文件指针回到开始
    fread(&emp, sizeof(struct employee), no_of_records, file_pointer); // 批量读取记录
    printf("员工文件中的信息如下:\n");

    // 输出员工信息
    for (i = 0; i < no_of_records; i++) {
        printf("员工代码: %d\n", emp[i].employee_code);
        printf("员工姓名: %s\n", emp[i].employee_name);
        printf("职位: %s\n", emp[i].designation);
        printf("工资: %f\n", emp[i].salary);
    }

    fclose(file_pointer); // 关闭文件
}

五、结构说明

该程序从名为 employee.dat 的文件中读取员工记录,并将其存储在结构体数组中。disprecords() 函数负责打开文件、计数记录数并确保不超过10条记录,使用 fread() 读取文件内容并显示每个员工的详细信息。

六、总结

通过C语言中的函数实现,可以高效地添加和显示记录。通过结构体来存储用户详细信息,提升了代码的组织性,便于记录的增删和检索。这种模块化方法有助于高效管理数据,同时保持代码的可读性和可维护性。