在哪里可以找到一些使用struct在C中创建的数据库的示例?

在哪里可以找到一些使用struct在C中创建的数据库的示例?,c,database,pointers,struct,C,Database,Pointers,Struct,我在大学里被分配了一个任务,我需要使用struct在C中创建一个数据库,该数据库的结构如下: 学生 名字 名字 姓 学期 那学期的课程 上述课程名称 等级 本课程授予的学分 重要的一点是,每个学期,任何学生都可以学习任何给定数量的课程 现在我陷入困境,因为要求如下: 我应该能够更新任何学生的信息 编辑他们的成绩,并使用不同的文件计算学分数,该文件说明每门课程授予多少学分 寻找学生 我非常熟悉指针和结构,我正在寻找C语言中类似数据库的示例,因为我还没有掌握如何在数据

我在大学里被分配了一个任务,我需要使用struct在C中创建一个数据库,该数据库的结构如下:


学生
  • 名字
    • 名字
  • 学期
    • 那学期的课程
      • 上述课程名称
      • 等级
      • 本课程授予的学分

重要的一点是,每个学期,任何学生都可以学习任何给定数量的课程

现在我陷入困境,因为要求如下:

  • 我应该能够更新任何学生的信息
  • 编辑他们的成绩,并使用不同的文件计算学分数,该文件说明每门课程授予多少学分
  • 寻找学生
我非常熟悉指针和结构,我正在寻找C语言中类似数据库的示例,因为我还没有掌握如何在数据库中添加/更新/删除学生的概念,该死的,我甚至不知道如何正确存储他们! 任何帮助都将不胜感激

以下是我到目前为止所写的内容:

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


typedef struct UDA {
    char clave[9];
    char nombre[125];
} UDA;

typedef struct NOMBRE{
    char N[100];
} NOMBRE;

typedef struct PERIODO{
    UDA *uda;
} PERIODO;

typedef struct ALUMNO{
    int nua;
    NOMBRE nombre;
    PERIODO *periodo;
} ALUMNO;

int main(int argc, const char * argv[]) {
    int s, d;
    FILE *clave;
    FILE *alumi;

    ALUMNO student;

    switch (argc) {
        case 3:
            clave = fopen(argv[1], "r");
            alumi = fopen(argv[2], "a+");
            break;
        case 2:
            if(argv[1][0] == 'c'){
                clave = fopen(argv[1], "r");
                alumi = fopen("alumnos.txt", "a+");
                fprintf(alumi, "0\n");
            } else {
                printf("ERROR\nArchivos faltantes\n");
                return 0;
            }
            break;
        case 1:
            clave = fopen("claves.txt", "r");
            alumi = fopen("alumnos.txt", "a+");
            fprintf(alumi, "0\n");
            break;
    }

    do{
        printf("Desea:\n1. Agregar alumno\n2. Actualizar alumno\n3. Eliminar alumno\n4. Mostrar informacion de un alumno\n\t> ");
        scanf("%d", &d);
    } while(d<1 || d>4);

    switch (d) {
        case 1:
            getchar();
            printf("Ingrese el nombre del alumno: ");
            scanf("%[^\n]", student.nombre.N);
            fprintf(alumi, "%s\n", student.nombre.N);

    }

    fclose(alumi);
    fclose(clave);
    return 0;
}  
要回答您的评论(如果我理解正确的话),您可以打开两个文件,命名一个临时文件,并开始将所有文件从文件1复制到文件2,直到找到要更改的内容,更改它并继续复制其余文件,重命名您创建的“临时”文件并删除旧文件

FILE *f, *g
f = open("alumnos.txt", "r"); // opens your main file
g = open("temp.txt", "w"); //opens your temporary file

.
. Copy from alumnos to temp and change the things you want to
.

fclose(f)
fclose(g)

remove("alumnos.txt") // old file without the changes
rename("temp.txt", "alumnos.txt") // renaming the new file with the changes
只需确保在删除和重命名之前确实发生了更改,否则将留下一个空文件


我希望听到不同的/更有效的答案,因为我还在学习。

给我们展示一些代码问题,要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源,因为它们往往会吸引固执己见的答案和垃圾邮件,这与堆栈溢出无关。相反,请描述这个问题以及迄今为止为解决它所做的工作。哦,我们也不是编码服务。如果你熟悉你所说的元素,你应该能够自己做作业。我已经更新了我的帖子@Olaf很抱歉我的问题模棱两可,更具体地说,我想知道如何重新编写整个文件,这样我就可以编辑我写的第一个字符(0,我数据库中的学生人数),因为从我所读的内容来看,这样做比只更改那一行更简单。
FILE *f, *g
f = open("alumnos.txt", "r"); // opens your main file
g = open("temp.txt", "w"); //opens your temporary file

.
. Copy from alumnos to temp and change the things you want to
.

fclose(f)
fclose(g)

remove("alumnos.txt") // old file without the changes
rename("temp.txt", "alumnos.txt") // renaming the new file with the changes