WW933 2022-05-15 00:11 采纳率: 57.1%
浏览 39
已结题

关于#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

  • 写回答

1条回答 默认 最新

  • a5156520 2022-05-15 11:19
    关注

    在主函数的获取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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月15日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程