关于#C语言#影碟出租系统运行无反应?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct CD
{
int No;//碟片编号
char Name[30];//碟片名称
char Country[20];//所属国家
char type[4];//类型
short Borrow;//借阅标记 0 or 1
};
struct rent//碟片借阅结构体
{
char username[10]; //使用者名
char film_name[10][10]; //碟片名称
int rent_time; //借出时间
int return_time; //归还时间
int money; //租金
};

int cd_number=5000;
int user_number=5000;
struct CD CD[5000];
struct rent RENT[5000];
void add();
int check();
int rent();
void useradd();
void return1();
//主函数
int main()
{
system("color 3E");
char choice;
a:printf("欢迎进入影碟管理系统");
printf("*n");
printf("*请输入你的选择");
printf("A:新片上架\n");
printf("B:碟片查询\n");
printf("C:碟片借阅(非会员不能借阅)\n") ;
printf("D:碟片归还\n");
printf("E:加入会员\n");
printf("F:退出程序\n");
printf("*\n");
scanf("%c,&choice");
switch(choice)
{
case'A':
{
add();
break;
}
case'B':
{
check();
break;
}
case'C':
{
rent();
break;
}
case'D':
{
return1();
break;
}
case'E':
{
useradd();
break;
}
case'F':
{
exit(0);
}
}
goto a;
}
void add()
{
FILE *a;
char s;
w:
printf("请输入碟片的名称");
scanf("%s",CD[cd_number].Name);
printf("请输入碟片的所属国家");
scanf("%s",CD[cd_number].Country);
printf("请输入碟片的类型");
scanf("%s",CD[cd_number].type);
getchar();
CD[cd_number].Borrow=1;
a=fopen("cd.text","a");
fwrite(&CD[cd_number],sizeof(struct CD),1,a);
cd_number++;
printf("是否继续添加?(Y表示继续添加 or N表示停止添加)");
scanf("%c",&s);
switch(s)
{
case'Y':
{
goto w;
}
case'N':
{
goto v;
}
}
v:fclose(a);
system("cls");
}
int check()
{
FILE *a;//文件指针
char cd_name[10];
system("cls");
a=fopen("cd.txt","r");
for(int i=0;i<cd_number;i++)
{
fread(&CD[i],sizeof(struct CD),1, a);
}
printf("请输入碟片名:\n");
scanf("%s",cd_name);
getchar();
for(int i = 0;i<cd_number;i++)
{
if((strcmp(CD[i].Name,cd_name))==0)
{
if(CD[i].Borrow==1)
{
printf("可借阅\n");
fclose(a);
return 1;
}
if(CD[i].Borrow==0)
{
printf("已借出\n");
fclose(a);
return 1;
}
}
}
for(int i = 0; i < cd_number; i++)
{
if((strcmp(CD[i].Name,cd_name))!=0) //若影片名不同
{
printf("无此片\n");
fclose(a);
return 1;
}
}
fclose(a);
return 0;
}
void useradd()//添加会员
{
system("cls");
FILE *a; //文件指针
printf("请输入姓名:\n");
scanf("%s",RENT[user_number].username);
getchar();
a = fopen("rent.txt","ab");
fwrite(&RENT[user_number], sizeof(struct rent),1, a);
printf("添加成功 \n");
user_number++;
fclose(a);
}

int rent(void)
{
char user_name[10];
char cd_name[10];
FILE *a;//文件指针
FILE *b;
int k=0;
int i;
char choice;
a = fopen("rent.txt","r");//只读方式打开
b = fopen("cd.txt","r");
for (int i = 0; i < cd_number; i++)
{
fread(&CD[i],sizeof(struct CD),1,b);
}
for (int i = 0; i < user_number; i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);
}
printf("请输入借阅人:\n");
scanf("%s",user_name);
getchar();
a: printf("请输入碟片名:\n");
scanf("%s",cd_name);
getchar();
printf("请再次输入碟片名:\n");
scanf("%s", RENT[i].film_name[k]);
k++;
getchar();
printf("此人已借%d张\n",k);
for (int j=0;j<cd_number;j++)
{
if((strcmp(CD[j].Name, cd_name))==0)//如果两个名相同
{
CD[j].Borrow=0; //修改借阅标记
}
}
printf("请输入借出日期:\n");
scanf("%d",&RENT[i].rent_time);
getchar();
printf("A: 再借一张\n");
printf("B: 退出\n");
scanf("%c",&choice);
getchar();
switch(choice)//多条件选择判断
{
case 'A':
{
goto a;
break;
}
case 'B':
{
return 0;
}
}
fclose(a);
fclose(b);
return 0;
}
void return1()
{
system("cls");
char user_name[10];
char CD_name[10];
FILE *a;
FILE *b;
int i;
int j;
int k=0;
char choice;
a=fopen("rent.txt","r");
b=fopen("cd.txt","r");
for(i=0;i<cd_number;i++)
{
fread(&CD[i],sizeof(struct CD),1,b);
}
for(i=0;i<user_number;i++)
{
fread(&RENT[i],sizeof(struct rent),1,a);
}

printf("请输入借阅人:\n");
scanf("%s",user_name);
for(i=0;i<user_number;i++)
{
    if((strcmp(user_name,RENT[i].username)==0))
    {
        a:printf("请输入要归还的碟片名:\n");
        scanf("%s",CD_name);
        for(j=0;j<cd_number;j++)
        {
            if((strcmp(CD[j].Name,CD_name))==0)
            {
                CD[j].Borrow=1;
                break;
            }
        }
    }
}
printf("借出日期:%d\n",RENT[i].rent_time);
printf("请输入归还日期:\n");
  scanf("%d",&RENT[i].return_time);
getchar();
if(((RENT[i].return_time - RENT[i].rent_time)%3)==0) 
{
    RENT[i].money = (RENT[i].return_time - RENT[i].rent_time)/3;
}
else
{
      RENT[i].money = (RENT[i].return_time - RENT[i].rent_time)/3+1;
}
printf("租金:%d\n",RENT[i].money);
printf("A: 再还一张\n");
printf("B: 退出\n");
scanf("%c",&choice);
getchar();
switch(choice)
{
    case 'A':
    {
        goto a;
        break;
    } 
    case 'B':
    {
          return;
    }
}

fclose(a);
fclose(b);
}
虽然没错但是没有反应是什么问题呢

img

在主函数的获取choice哪里稍微修改一下,以及修改打开文件为一个绝对目录后,发现可以正常运行,修改如下:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct CD
{
int No;//碟片编号
char Name[30];//碟片名称
char Country[20];//所属国家
char type[4];//类型
short Borrow;//借阅标记 0 or 1
};
struct rent//碟片借阅结构体
{
char username[10]; //使用者名
char film_name[10][10]; //碟片名称
int rent_time; //借出时间
int return_time; //归还时间
int money; //租金
};

int cd_number=5000;
int user_number=5000;
struct CD CD[5000];
struct rent RENT[5000];
void add();
int check();
int rent();
void useradd();
void return1();
//主函数
int main()
{
    system("color 3E");
    char choice;
    a:printf("欢迎进入影碟管理系统");
    printf("\n");
    printf("*请输入你的选择\n");
    printf("A:新片上架\n");
    printf("B:碟片查询\n");
    printf("C:碟片借阅(非会员不能借阅)\n") ;
    printf("D:碟片归还\n");
    printf("E:加入会员\n");
    printf("F:退出程序\n");
    printf("*\n");
    scanf("%c",&choice);
    switch(choice)
    {
        case 'A':
        {
            add();
            break;
        }
        case 'B':
        {
            check();
            break;
        }
        case 'C':
        {
            rent();
            break;
        }
        case 'D':
        {
            return1();
            break;
        }
        case 'E':
        {
            useradd();
            break;
        }
        case 'F':
        {
            exit(0);
        }
    }
    goto a;
}

void add()
{
    FILE *a;
    char s;
    w:
    printf("请输入碟片的名称");
    scanf("%s",CD[cd_number].Name);
    printf("请输入碟片的所属国家");
    scanf("%s",CD[cd_number].Country);
    printf("请输入碟片的类型");
    scanf("%s",CD[cd_number].type);
    getchar();
    CD[cd_number].Borrow=1;
    a=fopen("f:\\cd.text","a");
    fwrite(&CD[cd_number],sizeof(struct CD),1,a);
    cd_number++;
    printf("是否继续添加?(Y表示继续添加 or N表示停止添加)");
    scanf("%c",&s);
    switch(s)
    {
        case'Y':
        {
            goto w;
        }
        case'N':
        {
            goto v;
        }
    }
    v:fclose(a);
    system("cls");
}

int check()
{
    FILE *a;//文件指针
    char cd_name[10];
    system("cls");
    a=fopen("f:\\cd.txt","r");
    for(int i=0;i<cd_number;i++)
    {
    fread(&CD[i],sizeof(struct CD),1, a);
    }
    printf("请输入碟片名:\n");
    scanf("%s",cd_name);
    getchar();
    for(int i = 0;i<cd_number;i++)
    {
    if((strcmp(CD[i].Name,cd_name))==0)
    {
    if(CD[i].Borrow==1)
    {
    printf("可借阅\n");
    fclose(a);
    return 1;
    }
    if(CD[i].Borrow==0)
    {
    printf("已借出\n");
    fclose(a);
    return 1;
    }
    }
    }
    for(int i = 0; i < cd_number; i++)
    {
    if((strcmp(CD[i].Name,cd_name))!=0) //若影片名不同
    {
    printf("无此片\n");
    fclose(a);
    return 1;
    }
    }
    fclose(a);
    return 0;
}

void useradd()//添加会员
{
    system("cls");
    FILE *a; //文件指针
    printf("请输入姓名:\n");
    scanf("%s",RENT[user_number].username);
    getchar();
    a = fopen("f:\\rent.txt","ab");
    fwrite(&RENT[user_number], sizeof(struct rent),1, a);
    printf("添加成功 \n");
    user_number++;
    fclose(a);
}

int rent(void)
{
    char user_name[10];
    char cd_name[10];
    FILE *a;//文件指针
    FILE *b;
    int k=0;
    int i;
    char choice;
    a = fopen("f:\\rent.txt","r");//只读方式打开
    b = fopen("f:\\cd.txt","r");
    for (int i = 0; i < cd_number; i++)
    {
    fread(&CD[i],sizeof(struct CD),1,b);
    }
    for (int i = 0; i < user_number; i++)
    {
    fread(&RENT[i],sizeof(struct rent),1,a);
    }
    printf("请输入借阅人:\n");
    scanf("%s",user_name);
    getchar();
    a: printf("请输入碟片名:\n");
    scanf("%s",cd_name);
    getchar();
    printf("请再次输入碟片名:\n");
    scanf("%s", RENT[i].film_name[k]);
    k++;
    getchar();
    printf("此人已借%d张\n",k);
    for (int j=0;j<cd_number;j++)
    {
    if((strcmp(CD[j].Name, cd_name))==0)//如果两个名相同
    {
    CD[j].Borrow=0; //修改借阅标记
    }
    }
    printf("请输入借出日期:\n");
    scanf("%d",&RENT[i].rent_time);
    getchar();
    printf("A: 再借一张\n");
    printf("B: 退出\n");
    scanf("%c",&choice);
    getchar();
    switch(choice)//多条件选择判断
    {
    case 'A':
    {
    goto a;
    break;
    }
    case 'B':
    {
    return 0;
    }
    }
    fclose(a);
    fclose(b);
    return 0;
}

void return1()
{
    system("cls");
    char user_name[10];
    char CD_name[10];
    FILE *a;
    FILE *b;
    int i;
    int j;
    int k=0;
    char choice;
    a=fopen("f:\\rent.txt","r");
    b=fopen("f:\\cd.txt","r");
    for(i=0;i<cd_number;i++)
    {
    fread(&CD[i],sizeof(struct CD),1,b);
    }
    for(i=0;i<user_number;i++)
    {
    fread(&RENT[i],sizeof(struct rent),1,a);
    }
    
    printf("请输入借阅人:\n");
    scanf("%s",user_name);
    for(i=0;i<user_number;i++)
    {
        if((strcmp(user_name,RENT[i].username)==0))
        {
            a:printf("请输入要归还的碟片名:\n");
            scanf("%s",CD_name);
            for(j=0;j<cd_number;j++)
            {
                if((strcmp(CD[j].Name,CD_name))==0)
                {
                    CD[j].Borrow=1;
                    break;
                }
            }
        }
    }
    printf("借出日期:%d\n",RENT[i].rent_time);
    printf("请输入归还日期:\n");
      scanf("%d",&RENT[i].return_time);
    getchar();
    if(((RENT[i].return_time - RENT[i].rent_time)%3)==0) 
    {
        RENT[i].money = (RENT[i].return_time - RENT[i].rent_time)/3;
    }
    else
    {
          RENT[i].money = (RENT[i].return_time - RENT[i].rent_time)/3+1;
    }
    printf("租金:%d\n",RENT[i].money);
    printf("A: 再还一张\n");
    printf("B: 退出\n");
    scanf("%c",&choice);
    getchar();
    switch(choice)
    {
        case 'A':
        {
            goto a;
            break;
        } 
        case 'B':
        {
              return;
        }
    }
    fclose(a);
    fclose(b);
}

img