青衫旧丶 发表于 2019-12-8 22:43:59

C语言中在函数间传递字符串并且用结构体指针接收的问题,并且寻求整个projet的思路...

通过机场乘客的姓,名,护照号,目的地等信息生成一个机票号,我定义了乘客信息的结构体,然后写了一个生成票号的函数。
在通过结构体指针录入乘客信息之后,再生成票号这里卡住了,不知道怎么解决
以下是代码
在代码后边我添加了整个projet的要求,因为我不太清楚我目前这么写的程序书否方便后边继续添加相关代码,所以大家如果有思路觉得这部分的代码可以修改后跟后续内容更契合也请指点一下我
谢谢。



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



typedef struct client//定义乘客结构体
{
    char nom;//姓
    char prenom;//名
    char date;//出生日期
    char passport;//护照号
    int priority;//会员与否,用0,1表示
    char num_ticket;//nom和prenom的首字母和护照号和目的地
}client;

typedef struct Vol      //航班
{
    char id;
    char depart;
    char arrive;
    int siege;      //座位数
}Vol;
Vol vol =
{
    "AF0381",
    "CDG",
    "PEK",
    368
};

void ajoute_passager_vol();      //添加乘客函数
char generer_num_ticket(client*);      //生成乘客票号函数


void ajoute_passager_vol()
{
    client *info = NULL;
    int disc;                //discriminant判别式,用来判断循环
    int nb_client = 0;
    int i;         //打印用的指示器

    printf("添加已买票的乘客到%s航班系统中",vol.id);

    do
    {
      info = (client *)realloc(info, (nb_client+1)*sizeof(client));

      printf("\n乘客的姓:");
      scanf("%s", info.nom);
      printf("名:");
      scanf("%s", info.prenom);
      printf("出生日期(例子:20190110):");
      scanf("%s", info.date);
      printf("护照号:");
      scanf("%s",info.passport);
      printf("是否为会员,输入0位是,1为否:");
      scanf("%d", &info.priority);

      info.num_ticket = generer_num_ticket(info);             <font color="Red">//调用生成票号函数 这里出现问题
</font>
      nb_client++;//乘客数+1,初始为0,所以在这+1,然后问是否继续

      printf("\n 是否要继续录入? 输入0表示继续,1表示停止:");
      scanf("%d",&disc);
    }
    while(disc == 0);

    for(i=0 ; i<nb_client ; i++)
    {
      printf("名: %s\n", info<i>.nom);
      printf("姓: %s\n", info<i>.prenom);
      printf("出生日期: %s\n", info<i>.date);
      printf("护照: %s\n", info<i>.passport);
      printf("会员: %d\n", (info+i)->priority);
      printf("票号: %s\n", info<i>.num_ticket);


    }

}

char generer_num_ticket(client *passager)
{
    char num[] = "AF";


    strncat(num, passager->nom, 1);   //nom首字母
    strncat(num, passager->prenom, 1);   //prenom首字母
    strncat(num, passager->passport, 9);   //护照号
    strncat(num, vol.arrive, 3);   //目的地

    return num;
}

int main()
{
    ajoute_passager_vol();
    return 0;
}</i></i></i></i></i>
建立一个管理机场里乘客的软件。这个软件包含现今的机场中的一些功能,如下。        此软件管理航班的值机和登机。因此,乘客需要购买车票才能搭乘航班。        需要考虑的乘客的旅程如下:乘客登机并寄存行李。寄存行李后,穿过海关,安检,并登机。        有两种乘客需要考虑:普通乘客和“priority”会员乘客。        此软件需要包括以下的功能。如果这些功能的实现需要添加其他未定义的功能(入任何需要显示的类型:姓,名,行李,等等),请随意添加您认为必要的内容。 ——添加一个乘客到一个航班(这步是为了模拟买票)。这个功能生成一个票号,票号关联于乘客的信息(姓,名,出生日期,护照号,目的地,等等)。包含所有信息的票应在屏幕上显示。 ——通过提供姓名或机票号来登记乘客。需要在屏幕上显示登机牌及所有的信息(票号,姓,名,行李数量,座位号,会员与否,等等)。       ——如乘客已登记,乘客值机步骤生成一张“登机牌”和一或多张行李票。       ——会员乘客可以寄存两个行李,无会员乘客最多寄存一件行李。       ——会员乘客的行李也需要被备注“proirity”.       ——“登机牌”需要包含座位,座位依据飞机上的空位随机选择或 依据乘客要求。 ——让乘客通过海关,并确认他符合所有去往目的地的条件。在这阶段结束时,需要在屏幕上显示乘客的国际,目的地,和是否需要签证。 ——让乘客通过安检(乘客需要遵守将液体和物品带入机舱的手提行李条款,条款在互联网上查找)。此程序要在屏幕上显示需要不能登机的物品。 ——乘客登机,会员乘客享有特权,所有的会员乘客都需要比普通乘客先登机,。因此,只要有一个会员乘客没有登机,所有的普通乘客都不能登机。在登机结束时需要在屏幕上显示机舱的填充状态,和没有登机的乘客。 ——往飞机上装载一或多个行李。 ——在确认所有已值机的乘客都已登机且所有行李已经装载的情况下,确认可以起飞。


最后的魁拔 发表于 2019-12-8 23:12:16

我只是想问一下,这个是你想出来的吗。写这么个东东

青衫旧丶 发表于 2019-12-9 00:11:41

最后的魁拔 发表于 2019-12-8 23:12
我只是想问一下,这个是你想出来的吗。写这么个东东

整个东西肯定是学校留的作业啊。。。我闲的没事写它干啥{:10_266:}
页: [1]
查看完整版本: C语言中在函数间传递字符串并且用结构体指针接收的问题,并且寻求整个projet的思路...