航班订票系统函数无法运行


#include<stdio.h>
#include<math.h>
#include<string.h>
#define max 30
#include<stdlib.h>
typedef struct flight
{
    char station[max];
    int num;
    char time[max];
    int ticketnum;//余票 
}ft;
typedef struct userdata {
    char user_username[20];
    char user_password[8];
    int  ticket;
    int airnum;
}userinfo;
userinfo userin[max];
ft f[max];
int n;//航班号 
int i;//航班数
int usernum;
int m;
int flightnum;

下面是用户的函数

void printall()//1列出所有航班 
{
    //打开文件
    //打开文件
FILE *pfile = fopen("flight.txt", "rb");
    if (pfile == NULL) {
        printf("open file failed!\n");
        exit(0);
    }

    //读取文件长度,读完后把文件指针复位到开头
    fseek(pfile,0, SEEK_END);
    int file_length = ftell(pfile);
    rewind(pfile);

    //申请一段内存空间用来放文件中的文本内容,并置零
    int text_length = file_length * sizeof(char) + 1;
    char * text_buffer = (char*)malloc(text_length);
//    memset(text_buffer, 0, text_length);

    //把文件文本内容读到申请的内存空间中
 fread(text_buffer, 1, file_length, pfile);
    /*if (read_length != file_length) {
        printf("read file failed!\n");
        exit(0);
    }*/

    //打印文件文本内容,释放申请的内存空间,关闭文件流
    printf(" 终点站   余票   航班号  起飞时间\n"); 
    printf(text_buffer);
    free(text_buffer);
    fclose(pfile);
}

void listrest()//列出余票 
{
    printf("请选择查找方式\n");
    printf("1.按航班号查找\n");
    printf("2.按终点站查找\n");
    int way2,z;
    scanf("%d",&way2);
    if(way2==1)
    {    /*1.输入航班号查找航班信息并输出*/
printf("请输入要查找的航班号:");
scanf("%d",&n);//printf("%d",);
/*for(m=0;m<i+1;m++){
        printf("%d\n",f[m].num);
        if(n==f[m].num)
          { 
          z= 1;  //printf("%d",z);
            break;}     //若查找成功
    }*/
    judgen(n,z);
if(judge(n,z)==0){
    printf("未查找到该航班号信息!");
}
else if(judgen(n,z)==0){
//    printf("z%d  i%d",z,i);
system("cls");
printf("\n航班号:%d\n",f[m].num);
printf("\n----------------查找到的航班信息--------------\n\n");
printf("余票%d",f[i].ticketnum);
                      //输出查找结果
}
else
printf("输入错误");
}
else if(way2==2)/*2.按终点站查找航班的函数*/
{
    printf("请输入终点站");
    char sta1[max];
    scanf("%s",&sta1);
    for(m=0;m<i;m++){
        if(sta1==f[i].station)
           z= 1;   break;     //若查找成功
    }

if(judgen(n,z)==0){
    printf("未查找到该航班号信息!");printf("%d\n",i);
}
else if(judgen(n,z)==1)
{
    system("cls");
printf("\n航班号:%d\n",n);
printf("\n----------------查找到的航班信息--------------\n\n");
printf("余票%d",f[i].ticketnum);
}
}
else
{
    printf("输入错误"); 
}
void lookup()//查找航班信息 
{

    printf("请选择查找方式\n");
    printf("1.按航班号查找\n");
    printf("2.按终点站查找\n");
    int way1;
    scanf("%d",&way1);
    if(way1==1)
    {    /*1.输入航班号查找航班信息并输出*/
printf("请输入要查找的航班号:");
scanf("%d",&n);
/*for(m=0;m<i;m++){
        if(n==f[m].num)
           x= 1;   break;     //若查找成功
    }*/

if(x==0){
    printf("未查找到该航班号信息!");
}
else 
{system("cls");
printf("\n航班号:%d\n",n);
printf("\n----------------查找到的航班信息--------------\n\n");
    printf("航班号%d  终点站%s    起飞时间%s\n",f[i].num,f[i].station,f[i].time);
                      //输出查找结果
}
}
else if(way1==2)/*2.按航班号查找航班的函数*/
{
    printf("请输入终点站");
    char sta[max];
    scanf("%s",&sta);
    for(m=0;m<i;m++){
        if(sta==f[m].station)
           x= 1;   break;     //若查找成功
    }

if(x==0){
    printf("未查找到该航班号信息!");
}
system("cls");
printf("\n航班号:%d\n",n);
printf("\n----------------查找到的航班信息--------------\n\n");
    printf("航班号%d  终点站%s    起飞时间%s\n",f[i].num,f[i].station,f[i].time); //输出查找结果
}
else
{
    printf("输入错误"); 
}
}
}void book()//订票 
{
    int booknum,y=0;
    printf("请输入要预定的航班号");
    scanf("%d",&n);
    printf("请输入预定的票数");
    scanf("%d",&booknum);
    for(i=0;i<flightnum;i++){
        if(n==f[i].num)
           y= 1;   break;     //若查找成功
    }
    if(y==1)
    {
        if(booknum<f[i].ticketnum)
        {
        printf("订票成功!");
        f[i].ticketnum=f[i].ticketnum-booknum;
        user[i].ticket=booknum;
        }
        else
        printf("余票不足");
    }
    else if(y==0)
    {
        printf("输入错误!");
    }
    else
    {
        printf("输入错误!");
    }
}
void delay()//退票
{
    int delaynum,m=0;
    printf("请输入要退票的航班号");
    scanf("%d",&n);
    printf("请输入退票的票数");
    scanf("%d",&delaynum);
    for(i=0;i<flightnum;i++){
        if(n==f[i].num && user[usernum].ticket!=0 ){
           m= 1;  
           break;    
        } //若查找成功
    }
    if(m==1)
    {
    f[i].ticketnum=    f[i].ticketnum+delaynum;
    }
    else if(m==0)
    {
        printf("输入错误!");
    }
    else
    {
        printf("输入错误!");
    }
 }

后台人员的函数

void revise()
{
    FILE *fp = fopen("flight.txt", "w");
    if (fp == NULL) {
        printf("open file failed!\n");
        exit(0);
    }
    printf("请输入要修改的航班号");
    scanf("%d",n);
judgen(n,x);
if(x==0)
{
    printf("error");
 } 
 else if(x==1)
 {
      printf("请输入终点站\n");
        scanf("%s",f[a].station);
        getchar();
        printf("请输入票数\n");
        scanf("%d",&f[a].ticketnum);
        printf("请输入航班号\n");
        scanf("%d",&f[a].num);
        printf("请输入起飞时间\n");
        scanf("%s",f[a].time);
        getchar();
        fprintf(fp,"%s %d  %d %s\n", f[m].station,f[m].ticketnum,f[m].num,f[m].time);
     
 }
 fclose(fp);
}void writein()
{
    FILE *fp = fopen("flight.txt", "w");
    if (fp == NULL) {
        printf("open file failed!\n");
        exit(0);
    }
    int a;
    printf("请输入需录入的航班数: ");
    scanf("%d", &i);
    getchar();
    printf("请输入第%d个航班的信息",i);
    for(a=0;a<i;a++)
    {
        printf("请输入终点站\n");
        scanf("%s",f[a].station);
        getchar();
        printf("请输入票数\n");
        scanf("%d",&f[a].ticketnum);
        printf("请输入航班号\n");
        scanf("%d",&f[a].num);
        printf("请输入起飞时间\n");
        scanf("%s",f[a].time);
        getchar();
        fprintf(fp,"%s %d  %d %s\n", f[a].station,f[a].ticketnum,f[a].num,f[a].time);
  }
  fclose(fp);
}

main

if(strcmp(u->user_username,adminer)!=0)
    {
        usermenu();    
        int choice1;
        scanf("%d",choice1);
        if(choice1==1)
        {
        printall();
        }
        else if(choice1==2)
        {
        listrest();
        }
        else if(choice1==3)
        {
        
        }
    }
    else
    {
    adminmenu();
    int choice2;
    scanf("%d",choice2);
    if(choice2==1)
    {
      printall();
    }
    else if(choice2==2)
    {
        writein();
    }
    else if(choice2==3)
    {
        
    }
}

以上函数可以单独在main中运行,但是放在ifelse就不能运行,查找航班信息无论怎么输入都是差找不到信
息,而且f中的ticketnum始终=0

img

这个问题可能是因为你在 if-else 语句中使用了全局变量 ticketnum,但是这个变量没有被正确初始化。在函数中,每次调用该函数时,ticketnum 的值都会被重置为 0。
下面是小小代码示例,示例使用静态变量 ticketnum 来保存输入的机票号码。在函数 f() 中,将输入的机票号码保存在静态变量中,并返回它的值。在主函数中,将输入的机票号码传递给函数 f(),并将返回值保存在变量 t 中。最后,输出了两个变量 ticketnum 和 t 的值,以验证它们是否正确。

#include <iostream>  
using namespace std;  
  
int f(int t) {  
    static int ticketnum = 0;  
    ticketnum = t;  
    cout << "ticketnum in f(): " << ticketnum << endl;  
    return ticketnum;  
}  
  
int main() {  
    int ticketnum;  
    cout << "Enter ticket number: ";  
    cin >> ticketnum;  
    if (ticketnum < 1000) {  
        cout << "Sorry, the ticket number must be greater than 1000." << endl;  
    } else {  
        int t = f(ticketnum);  
        cout << "ticketnum in main(): " << ticketnum << endl;  
        cout << "ticketnum in f(): " << t << endl;  
    }  
    return 0;  
}

C语言完成

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#define T1 p->data.fNumber                   //宏定义其中常用变量,便于书写
#define T2 p->data.place_go
#define T3 p->data.place_to
#define T4 p->data.seat_total
#define T5 p->data.seat_remainder
#define T6 p->data.goTime
#define T7 p->data.toTime
#define T8 p->data.price
#define R1 p->data.name
#define R2 p->data.fNumber
#define R3 p->data.id
#define R4 p->data.number
#define R5 p->data.Votes
typedef struct                  //航班结点定义
{
    char place_go[20];          //始发地
    char place_to[20];            //目的地
    int seat_total;                //座位总数
    int seat_remainder;         //剩余座位数
    int fNumber;                //航班号
    char goTime[6];                //起飞时间
    char toTime[6];                //抵达时间
    char  price[6];                //票价
}plane;
 
typedef struct PNode            //航班结构体定义
{
    plane data;
    struct PNode *next;
}PNode,*PlaneList;
 
typedef struct                    //乘客结点定义
{
    char name[14];                //姓名
    char id[30];                //身份证号码
    int number;                    //购票数
    int Votes;                    //订单号
    int fNumber;                //航班号
}passenger;
 
typedef struct RNode
{
    passenger data;
    struct RNode *next;
}RNode,*RenList;
 
void input(PNode* head){           //用文件输入航班信息的方法
 
    FILE *fp,*fp1;
    PlaneList p,r;
    char qq[3];
    int i,m;
    r = head;
    if((fp=fopen("新建文本文档.txt","r"))==NULL){
        printf("航空基本信息文件打开失败!");
    }
    if((fp1=fopen("新建文本文档2.txt","r"))==NULL){
        printf("航空补充信息文件打开失败!");
    }
    for(i=1;i<=9;i++)               //自定义了9个航班信息,所以这里循环9次
    {    
        p = (PlaneList)malloc(sizeof(PNode));
        p->next = NULL;
        fscanf(fp,"%d",&p->data.fNumber);
        fgets(p->data.place_go,5,fp);
        fgets(p->data.place_to,5,fp);
        fscanf(fp,"%d",&m);
        fgets(p->data.goTime,6,fp1);
        fgets(p->data.toTime,6,fp1);
        fgets(p->data.price,4,fp1);
        p->data.seat_total = m;
        p->data.seat_remainder = m;
        r->next = p;
        r = p;
    }
}
 
void input_1(PNode* head){           //由控制台输入航班信息的方法
 
    PlaneList p,t;
    int m,x;
    int fn;
    char go[20],to[20];
    p = head;
    while(p->next!=NULL){
        p=p->next;                   //将p指向head最后一个航班,方便在其后面链上其他航班信息
    }                                //也防止新录入的信息顶掉已有信息
    
    printf("请输入需要输入的航班数:");
    scanf("%d",&x);
    printf(".......................................开始录入.......................................\n");
    for(int i=1;i<=x;i++)
    {
        printf("***********开始输入第%d个航班信息***********\n",i);
        t = (PlaneList)malloc(sizeof(PNode));
        t->next=NULL;
        printf("请输入航班号:");
        scanf("%d",&fn);
 
    in:    while(1){
        PlaneList p;
        p = head;
        int tip = 1;
        while(p->next!=NULL){
            p=p->next;
            if(fn==p->data.fNumber){
                printf("输入错误!该航班已存在!\n");
                printf("请重新输入航班号:");
                scanf("%d",&fn);
                tip = 2;
                break;
            }
        }
        if(tip==2){
            goto in;
        }else{
            t->data.fNumber = fn;
            break;
            }
    }
        printf("请输入始发地:");
        scanf("%s",go);
        while(1){
            if(strlen(go)<=8&&strlen(go)>=2){
                strcpy(t->data.place_go,go);
                break;
            }
            else
            {
                printf("请重新输入始发地(1至4个汉字或2至8个英文字符):");
                scanf("%s",go);
            }
        }
 
 
        printf("请输入目的地:");
        scanf("%s",to);
        while(1){
            if(strlen(to)<=8&&strlen(to)>=2){
                strcpy(t->data.place_to,to);
                break;
            }
            else
            {
                printf("请重新输入目的地(1至4个汉字或2至8个英文字符):");
                scanf("%s",to);
            }
        }
 
        printf("请输入机票总数:");
        scanf("%d",&m);
        t->data.seat_total = m;
        t->data.seat_remainder = m;
        printf("请输入飞机起飞时间:");
        scanf("%s",t->data.goTime);
        printf("请输入飞机抵达时间:");
        scanf("%s",t->data.toTime);
        printf("请输入该航班票价:");
        scanf("%s",t->data.price);
        p->next = t;
        p = t;
 
    }
    printf(".......................................录入完成.......................................\n");
}
 
void inout(PNode* head)                 //查看所有航班信息的方法
{
    PlaneList p;     
    p = head;
    int i=0;
    printf(".........................咸阳机场欢迎你.........................\n");
    printf("   航班号     始发地         目的地        机票总数      剩余票数    出发时间  抵达时间   价格\n");
    while(p->next!=NULL){
        p = p->next;
        printf("%9d   %10s    %8s                %d           %d    %10s    %6s    %4s\n",T1,T2,T3,T4,T5,T6,T7,T8);
    }
}
 
void inout_1(RNode* rhead)               //查看乘客订单信息的方法
{ 
    RenList p;     
    p = rhead;
    if(p->next==NULL){
        printf("没有订单信息!\n");
    }else{
        printf(".........................咸阳机场欢迎你.........................\n");
        printf("   姓名            航班      身份证号码                 订单号     票数     \n");
    }
    while(p->next!=NULL){
        p = p->next;
        printf("%8s   %d      %18s           %8d     %d\n",R1,R2,R3,R4,R5);
 
    }
 
}
 
void research_1(PNode* head)           //通过航班号查看航班信息的方法
{
    int x,tip;
    PlaneList p;
    p = head;
    tip = 1;
    printf("请输入要查找的航班号:");
    scanf("%d",&x);
    printf("开始查找\n");
    while(p->next!=NULL)
    {
        p = p->next;
        if(p->data.fNumber==x)
        {
 
            printf("   航班号     始发地         目的地        机票总数      剩余票数    出发时间  抵达时间   价格\n");
            printf("%9d   %10s    %8s                %d           %d    %10s    %6s    %4s\n",T1,T2,T3,T4,T5,T6,T7,T8);
            tip = 2;
            break;
        }
 
    }
 
    if(tip==1){
        printf("该航班不存在\n");
    }
 
}
 
 
void research_2(PNode* head)                //通过目的地和始发地查看航班信息的方法
{
    char str1[20],str2[20];
    PlaneList p;
    int tip;
    tip = 1;
    p = head;
    printf("请输入要查找的始发地:");
    scanf("%s",str1);
    printf("请输入要查找的目的地:");
    scanf("%s",str2);
    printf("开始查找\n");
    while(p->next!=NULL){
        p = p->next;
        if(!strcmp(str1, p->data.place_go)&&!strcmp(str2, p->data.place_to)){
            printf("   航班号     始发地         目的地        机票总数      剩余票数    出发时间  抵达时间   价格\n");
            printf("%9d   %10s    %8s                %d           %d    %10s    %6s    %4s\n",T1,T2,T3,T4,T5,T6,T7,T8);
            tip = 2;
            break;
        }
    }
 
    if(tip==1){
        printf("未找到该航班or该航班不存在\n");
    }
}
 
 
void revise(PNode* head)                   //修改航班信息的方法
{                                          //别问我为什么航空客运订票系统还可以修改航班信息,问就是题目要求的
    PlaneList p;
    int x,tip;
    p = head;
    printf("请输入要修改的航班号:");
    scanf("%d",&x);
    printf("开始修改\n");
    while(p->next!=NULL)
    {
        p = p->next;
        if(p->data.fNumber==x)
        {
            printf("请输入要修改的信息\n");
            printf("请输入航班号:");
            scanf("%d",&p->data.fNumber);
            fflush(stdin);
            printf("请输入始发地:");
            scanf("%s",p->data.place_go);
            printf("请输入目的地:");
            scanf("%s",p->data.place_to);
            printf("请输入机票总数:");
            scanf("%d",&p->data.seat_total);
            tip = 2;
            break;
        }
 
    }
 
    if(tip==1){
        printf("未找到该航班or该航班不存在\n");
    }
}
 
void purchase (PNode* head,RNode* rhead)                 //乘客买票的方法
{
    PlaneList p;
    RenList r,h;
    r = (RenList)malloc(sizeof(RNode));
    r->next = NULL;
    int x,t,tip,tip1;
    p = head;
    h = rhead;
    tip = 1;
    tip1 = 1;
    char name[14];
    char id[30];
    
    if(h->next!=NULL){                            //让h指向rhead表尾,防止新输入信息替换掉已有信息
        h = h->next;                                 
    }
    printf("请输入真实姓名:");
    scanf("%s",name);
    while(1){
        if(strlen(name)<=14&&strlen(name)>=4){
            strcpy(r->data.name,name);           //对信息筛选后赋给新申请的乘客信息结点
            break;                               //以下大致相同,不在赘述
        }
        else
        {
            printf("请重新输入姓名(2-7个汉字):");
            scanf("%s",name);
        }
    }
 
    printf("请输入身份证号:");
    scanf("%s",id);
    while(1){
        if(strlen(id)==18){
            for(int i=1;i<=18;i++)
            {
                if(id[i]<='0'&&id[i]>='9')
                {
                    break;
                }
 
            }
            strcpy(r->data.id,id);
            break;
        }
        else
        {
            printf("请输入合法身份证号码:");
            scanf("%s",id);
        }
    }
 
 
    printf("请选择乘坐航班:");
    scanf("%d",&x);
    while(1){
        while(p->next!=NULL)
        {
            p = p->next;
            if(p->data.fNumber==x)
            {
                tip1 = 2;
                break;
            }
        }
        if( tip1 != 2 )
        {
            printf("该航班不存在,请重新输入:");
            p = head;
            scanf("%d",&x);
        }
        else break;
    }
 
 
 
    printf("请输入需要购买的票数;");
    scanf("%d",&t);
    while(1)
    {
        while(p!=NULL)
        {
            if(p->data.seat_remainder>=t)
            {
                p->data.seat_remainder-=t;       //购票成功则修改剩余机票信息
                tip = 2;
                r->data.number = x-123;          //依据航班号生成订单号
                r->data.Votes = t;
                r->data.fNumber = x;
                printf("购票成功!\n");
            }
            break;
 
        }
        if(tip!=2)
        {
            printf("还要%d张票\n",p->data.seat_remainder);
            printf("机票不足,请重新输入:\n");
            scanf("%d",&t);
        }
        else break;
    }
 
    h->next=r;                //让h指向新申请并已赋值的乘客结点
    h = r;                      //其实就是乘客链表的创建过程,只不过中间掺杂了对输入信息的筛选语句
                              //所以比较分散
}
 
void quash(PNode* head,RNode* rhead)              //乘客退票方法
{
    PlaneList p;
    RenList r;
    int x,t,tip;
    p = head;
    r = rhead;
    tip = 1;
    char name[14];
    char id[18];
    
qq:    for(int i=1;i<=3;i++){
        if(tip==2)
            break;
        printf("请输入身份证号:");
        scanf("%s",id);
        while(r->next!=NULL){
            r=r->next;
            if(!strcmp(id,r->data.id)){
                printf("请选择航班:");
                scanf("%d",&x);
                if(r->data.fNumber!=x){
                    printf("你没有购买过该航班的票!");
                    printf("您还有%d次机会!!\n!",3-i);
                    break;
                }
                else{
                    while(p->next!=NULL)
                    {
                        p = p->next;                      
                        if(p->data.fNumber==x)                //找到航班信息,并修改票数
                        {
                            printf("请输入需要退票的票数;");
                            scanf("%d",&t);
                            if(t<=r->data.number){
                                p->data.seat_remainder+=t;
                                r->data.number-=t;
                                tip = 2;
                                printf("退票成功!");
                                break;
                            }else{
                                printf("票数异常!!!\n");
                                printf("您还有%d次机会!!\n!",3-i);
                            }
                            
                        }
                    }
                }
            }    
        }
    
    }
 
    if(tip==1){
        printf("退票失败\n");
    }
}
 
void print()                     //优化界面,也便于后期维护
{
    printf("                  ********************************************************************************        \n");
    printf("                  ****************************欢迎进入航空订票系统********************************        \n");
    printf("\n");
    printf("                                               1  订票                   \n");
    printf("\n");
    printf("                                               2  退票                   \n");
    printf("\n");
    printf("                                               3  查询航班信息           \n");
    printf("\n");
    printf("                                               4  修改航班信息           \n");
    printf("\n");
    printf("                                               5  录入航班信息           \n");
    printf("\n");
    printf("                                               6  打印订票信息           \n");
    printf("\n");
    printf("                                               7  退出程序               \n");
    printf("\n");
    printf("                  ********************************************************************************        \n");
 
}
 
void print1()                  //优化界面,也便于后期维护
{
    printf("                  ********************************************************************************        \n");
    printf("                  ****************************欢迎进入航空订票系统********************************        \n");
    printf("\n");
    printf("\n");
    printf("                                               1  查询所有航班           \n");
    printf("\n");
    printf("                                               2  按航班号查询航班       \n");
    printf("\n");
    printf("                                               3  按航程查询航班         \n");
    printf("\n");
    printf("                                               4  返回                   \n");
    printf("\n");
    printf("\n");
    printf("                  ********************************************************************************        \n");
}
int main()
{
 
    PNode *head;                                 //定义航班链表和乘客链表并进行初始化
    RNode *rhead;
    int select;
    head = (PlaneList)malloc(sizeof(PNode));
    head->next = NULL;
    rhead = (RenList)malloc(sizeof(RNode));
    rhead->next = NULL;
    input(head);                                 //直接从文件中读取航班信息,这样就可直接测试系统,
                                                 //不用在输入大量航班才能进行测试
to:    while(1){                                     
        system("cls");
        printf("\n");
        printf("\n");
        print();
        printf("请输入要进行的操作:");
        scanf("%d",&select);
        switch (select) {
        case 1:
            purchase(head,rhead);
            printf("三秒后程序将返回.......");
            Sleep(3*1000);                         //让程序停止运行三秒
            system("cls");                           //清除界面,配合break达到自动返回的目的
            break;
        case 2:
            quash(head,rhead);
            printf("三秒后程序将返回.......");
            Sleep(3*1000);
            system("cls");
            break;
        case 3:
            while(1){
                system("cls");
                print1();
                printf("请选择查询方式:");
                scanf("%d",&select);
                switch (select) {
                case 1:
                    inout(head);
                    printf("五秒后程序将返回.......");
                    Sleep(5*1000);
                    system("cls");
                    break;
                case 2:
                    research_1(head);
                    printf("五秒后程序将返回.......");
                    Sleep(5*1000);
                    system("cls");
                    break;
                case 3:
                    research_2(head);
                    printf("五秒后程序将返回.......");
                    Sleep(5*1000);
                    system("cls");
                    break;
                case 4:
                    goto to;
                    default:
                        printf("            错误指令  #304               ");
                        break;
                }
            }
 
        case 4:
            revise(head);
            printf("五秒后程序将返回.......");
            Sleep(5*1000);
            system("cls");
            break;
        case 5:
            input_1(head);
            printf("五秒后程序将返回.......");
            Sleep(5*1000);
            system("cls");
            break;
        case 6:
            inout_1(rhead);
            printf("五秒后程序将返回.......");
            Sleep(5*1000);
            //system("cls");
            break;
        case 7:
            exit(0);
 
            default:
 
                printf("            错误指令  #304               ");
                break;
            }
    }
    return 0;
    
}
 

在if else内部打个断点,看看代码能否执行到if else里面,如果能执行进入,再检查看看进入的相关变量、参数的值是否正常

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 重学 Java 设计模式:实战工厂方法模式「多种类型商品不同接口,统一发奖服务搭建场景」中的 2. ifelse实现需求 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    public class PrizeController {
    
        private Logger logger = LoggerFactory.getLogger(PrizeController.class);
    
        public AwardRes awardToUser(AwardReq req) {
            String reqJson = JSON.toJSONString(req);
            AwardRes awardRes = null;
            try {
                logger.info("奖品发放开始{}。req:{}", req.getuId(), reqJson);
                // 按照不同类型方法商品[1优惠券、2实物商品、3第三方兑换卡(爱奇艺)]
                if (req.getAwardType() == 1) {
                    CouponService couponService = new CouponService();
                    CouponResult couponResult = couponService.sendCoupon(req.getuId(), req.getAwardNumber(), req.getBizId());
                    if ("0000".equals(couponResult.getCode())) {
                        awardRes = new AwardRes("0000", "发放成功");
                    } else {
                        awardRes = new AwardRes("0001", couponResult.getInfo());
                    }
                } else if (req.getAwardType() == 2) {
                    GoodsService goodsService = new GoodsService();
                    DeliverReq deliverReq = new DeliverReq();
                    deliverReq.setUserName(queryUserName(req.getuId()));
                    deliverReq.setUserPhone(queryUserPhoneNumber(req.getuId()));
                    deliverReq.setSku(req.getAwardNumber());
                    deliverReq.setOrderId(req.getBizId());
                    deliverReq.setConsigneeUserName(req.getExtMap().get("consigneeUserName"));
                    deliverReq.setConsigneeUserPhone(req.getExtMap().get("consigneeUserPhone"));
                    deliverReq.setConsigneeUserAddress(req.getExtMap().get("consigneeUserAddress"));
                    Boolean isSuccess = goodsService.deliverGoods(deliverReq);
                    if (isSuccess) {
                        awardRes = new AwardRes("0000", "发放成功");
                    } else {
                        awardRes = new AwardRes("0001", "发放失败");
                    }
                } else if (req.getAwardType() == 3) {
                    String bindMobileNumber = queryUserPhoneNumber(req.getuId());
                    IQiYiCardService iQiYiCardService = new IQiYiCardService();
                    iQiYiCardService.grantToken(bindMobileNumber, req.getAwardNumber());
                    awardRes = new AwardRes("0000", "发放成功");
                }
                logger.info("奖品发放完成{}。", req.getuId());
            } catch (Exception e) {
                logger.error("奖品发放失败{}。req:{}", req.getuId(), reqJson, e);
                awardRes = new AwardRes("0001", e.getMessage());
            }
    
            return awardRes;
        }
    
        private String queryUserName(String uId) {
            return "花花";
        }
    
        private String queryUserPhoneNumber(String uId) {
            return "15200101232";
        }
    
    }
    
    • 如上就是使用 ifelse 非常直接的实现出来业务需求的一坨代码,如果仅从业务角度看,研发如期甚至提前实现了功能。
    • 那这样的代码目前来看并不会有什么问题,但如果在经过几次的迭代和拓展,接手这段代码的研发将十分痛苦。重构成本高需要理清之前每一个接口的使用,测试回归验证时间长,需要全部验证一次。这也就是很多人并不愿意接手别人的代码,如果接手了又被压榨开发时间。那么可想而知这样的 ifelse 还会继续增加。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

从你提供的代码片段来看,我注意到了一些可能导致问题的地方:

  1. 在你的scanf()函数调用中,你需要传入一个指向变量的指针,而不是变量本身。所以你应该用&获取变量的地址。例如,你的scanf("%d",choice1);应该改为scanf("%d",&choice1);,其他的类似。

  2. 在你比较字符串时,你不能直接使用==操作符,因为它会比较指针,而不是字符串的内容。你应该使用strcmp()函数,例如strcmp(sta1, f[i].station) == 0

  3. 在你的judgen()函数中,你可能没有正确地返回查找结果,因为你在调用这个函数的时候,期望它能够改变z的值。但是,根据你提供的代码,我们无法看到judgen()函数的实现。如果judgen()函数中没有使用指针来改变z的值,那么这将不会工作。

  4. 你的printall()函数打开文件时使用了"rb"模式(二进制读模式),但之后你又试图读取文件作为文本。你应该使用"r"模式(文本读模式)打开文件。

  5. delay()函数中,user[usernum].ticket未定义,因为user数组在代码中没有找到。在其他函数中也存在类似的问题。

  6. 你的代码缺少了一些必要的函数声明和定义,例如judgen(), usermenu(), adminmenu()等,这些函数在代码中被调用,但是我们看不到它们的实现。这可能是因为你没有提供完整的代码。

对于为什么在if-else结构中无法运行,可能是因为上述的一些问题,或者可能是因为函数在if-else结构中的调用方式有误。我建议你检查你的if-else结构和函数调用,看看是否存在输入或逻辑错误。

修复这些问题后,如果你仍然遇到问题,我建议你尝试一步步调试你的代码,看看每一步都发生了什么,这样可以帮助你找到问题的根源。

你这个里面的基础语法错误有点多,如果你能够写出这种系统,应该不至于还犯这些错误。应该是哪里白嫖的代码吧,劝你回去找那个人给你完整的

回答部分参考、引用ChatGpt以便为您提供更准确的答案:

根据您提供的代码,有几个问题可能导致程序无法正确运行:

  1. 在用户函数中,存在一些未关闭的大括号。请确保所有的函数都有正确的开括号和闭括号。
  2. 在函数lookup()listrest()中,您使用了一个未定义的变量x。请确认变量x的定义和赋值,以确保这些条件判断正确执行。
  3. 在函数book()delay()中,您使用了一个未定义的数组user,并且在这些函数中对它进行了操作。请确认user数组的定义和赋值,以避免出现错误。
  4. 在函数revise()writein()中,您打开了文件并尝试将数据写入文件。请确保文件路径正确,并在写入完成后关闭文件流。
  5. 在主函数main中,您获取用户输入后的选择,并根据选择调用相应的函数。请确保您正确地读取用户输入并传递给相应的函数。

另外,请检查以下几点:

  1. 确保您在使用f数组之前对其进行正确的赋值。在代码中,我没有看到您对f数组的赋值操作,这可能导致f数组中的数据始终为默认值。
  2. 确保您在使用userin数组之前对其进行正确的赋值。在代码中,我没有看到您对userin数组的赋值操作,这可能导致userin数组中的数据始终为默认值。

请检查并修复上述问题,并确保所有的变量和数组都被正确定义、赋值和使用。这样可以提高程序的正确性和可运行性。如果问题仍然存在,请提供更多代码细节或具体的错误信息,以便我可以更好地帮助您解决问题。

代码中存在一些错误和不完整的部分,建议你按照以下步骤逐个排查修改:

  1. 在主函数中调用用户和后台人员的函数时,需要传递相应的参数,比如 listrest() 需要传入 f 数组和 flightnumwritein() 需要传入 f 数组和 i

  2. lookup()listrest() 函数中,查找终点站和航班号的方法不完整,可以使用 strcmp 函数比较字符串。同时,在查找成功后需要将 xz 赋值为 1。

  3. book()delay() 函数中,需添加判断用户是否存在、输入的票数是否超出订票上限等条件判断。

  4. revise() 函数中,应该先打开文件读取航班信息,查找到要修改的航班号之后,可以根据需求修改相应信息,最后重新写入文件。

  5. writein() 函数中,需要使用追加写入的方法,将多个航班信息写入文件。

希望这些提示能够帮助你定位并解决问题。在进行修改时,可以加入一些调试输出语句,定位代码中的错误。此外,建议不要让代码逻辑过于复杂,尽量将每个函数一个功能模块拆分成小的子函数,方便调试和修改。