0

我正在做一个管理建筑物中房间数量的 C 项目,在这里我可以选择预订或预先预订房间。

我的问题是我想不出一种将链表从一个文件传递到另一个文件的方法。

我的 main.c 看起来像这样(它是一个菜单):

int main()
{
    printf("--------------------------------------------------------------------------------\n");
    time_t t;
    time(&t);
    printf("Data: %s\n", ctime(&t));
    printf("--------------------------------------------------------------------------------\n");
    int opcao;
    do{
        printf("\n\tM E N U    P R I N C I P A L\n");
        printf("\n\n\t1 - Ver Reservas Actuais Por Ordem Cronologica");
        printf("\n\n\t2 - Fazer A Sua Reserva");
        printf("\n\n\t3 - Estado Da Sua Reserva");
        printf("\n\n\t4 - Cancelar A Sua Reserva");
        printf("\n\n\t5 - Sair");
        printf("\n\n\n\t\tOpcao: ");
        scanf("%d", &opcao);
        printf("\n");
        fflush(stdin); /*Limpa o Buffer*/

        switch (opcao)
        {
            case 1 : Listar_Fila(FILA Fila); break;
            case 2 : lista_reserva(); break;
            /*case 3 : estado_reserva(); break;
            case 4 : cancelar_reserva(); break;*/
            case 5 : puts("Obrigado por ter preferido o nosso sistema!");break;
            default : puts("OPCAO INVALIDA!!");
        }
        getchar(); /*Para a tela*/
    }
        while (opcao!=5);

}

这就是我做我的链表的方式:

void lista_reserva()
{


    FILA F;
    char prim_nome_temp[100];
    char ult_nome_temp[100];
    int hora_inic_temp_h , hora_inic_temp_m;
    int hora_fim_temp_h , hora_fim_temp_m;
    int sala_temp;
    inicia_fila(&F);
    puts("Iniciar");
    Listar_Fila(F);
    printf("Inserir Primeiro Nome: ");
    scanf("%s",prim_nome_temp);
    printf("Inserir Ultimo Nome: ");
    scanf("%s",ult_nome_temp);
    printf("Indique que sala pretende reservar: ");
    scanf("%d", &sala_temp);
    printf("Inserir hora de inicio (HH:MM): ");
    scanf("%02d:%02d",&hora_inic_temp_h, &hora_inic_temp_m);
    printf("Inserir hora de fim (HH:MM): ");
    scanf("%02d:%02d",&hora_fim_temp_h , &hora_fim_temp_m);
    insere_fila(&F, sala_temp, hora_inic_temp_h , hora_inic_temp_m , hora_fim_temp_h , hora_fim_temp_m , prim_nome_temp , ult_nome_temp);
    Listar_Fila(F);
}

/* Iniciar uma fila */

void inicia_fila(FILA *Fila)
{
    *Fila = NULL;
}

/*Inserir na Fila */

void insere_fila(FILA *Fila , int sala , int hora_inic_h , int hora_inic_m , int hora_fim_h , int hora_fim_m , char *prim_nome , char *ult_nome)
{
    if (*Fila == NULL)
    {
        *Fila = (FILA) malloc(sizeof(reservas));
        if (*Fila == NULL)
            return;
        ((*Fila)-> sala = sala);
        ((*Fila)-> hora_inic_h = hora_inic_h);
        ((*Fila)-> hora_inic_m = hora_inic_m);
        ((*Fila)-> hora_fim_h = hora_fim_h);
        ((*Fila)-> hora_fim_m = hora_fim_m);
        strcpy((*Fila)-> prim_nome , prim_nome);
        strcpy((*Fila)-> ult_nome , ult_nome);

        (**Fila).proximo = NULL;
    }

    else
        insere_fila(&(**Fila).proximo , sala , hora_inic_h , hora_inic_m , hora_fim_h , hora_fim_m , prim_nome , ult_nome );

}

这就是我打印它的方式:

void Listar_Fila(FILA Fila)
{
    if (Fila == NULL)
        return; /*Não existem elementos*/
    printf("Sala %d das %d:%d as %d:%d, reservado por %s %s\n\n", Fila -> sala ,Fila ->hora_inic_h , Fila -> hora_inic_m ,Fila -> hora_fim_h , Fila -> hora_fim_m , Fila -> prim_nome , Fila -> ult_nome);
    Listar_Fila(Fila -> proximo);


}

很抱歉我的项目不是英文的,而且我知道它有很多初学者的错误,因为我以前从未使用过 C 语言,而我这样做只是一个挑战。

请帮助我改进任何建设性的批评。

谢谢

4

1 回答 1

0

执行此操作的标准方法是将链表创建为“ADT”,一种抽象数据类型。它由一个 h 文件组成,其中包含 main 应该调用的所有接口函数,以便使用链表。这些函数在相应的 c 文件中定义。简化示例:

// list.h
typedef struct
{
  // whatever data you want each node to contain
} node_t;

typedef struct
{
  node_t* head;
  node_t* tail; // optional
  int     size; // optional
} list_t


void list_init (list_t* list);

void list_add  (list_t* list, const node_t* node);

void list_remove (list* list, node_t* node);

void list_destroy (list_t* list);

然后在 中list.c,定义函数。

于 2013-06-03T06:24:54.370 回答