#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);
}
虽然没错但是没有反应是什么问题呢