#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main();
void luru();
void chakan();
void jieyue();
void guihuan();
void chazhao();
void shanchu();
void cun()//文件
{
FILE *fp;
fp=fopen("book1.txt","wt");
if(fp==NULL)
{
printf("\n不能打开book.txt");
getch();
exit(1);
}
}
struct date
{
int year;
int month;
int day;
};
struct book//结构体写书的信息
{
char name[21];//书名
char name2[21];//作者
float money;//价格
int num;//书的编号
int many;//数量
struct date Rdate;//书的录入日期
};
struct book b[20];//结构体变量
void menu()//菜单
{
printf("=====================================\n");
printf(" 【******欢迎使用图书管理系统******】\n");
printf("‖系统菜单: ‖\n");
printf("‖1.录入新书籍(首次使用) ‖\n");
printf("‖2.查看已录入书籍 ‖\n");
printf("‖3.借阅书籍 ‖\n");
printf("‖4.归还书籍 ‖\n");
printf("‖5.删除已录入书籍 ‖\n");
printf("‖6.查找书籍 ‖\n");
printf("‖0.退出系统 ‖\n");
printf("=====================================\n");
printf("请输入序号:\n");
int a;
scanf("%d",&a);//输入序号
switch (a)//选择序号
{
case 1:luru();break;
case 2:chakan();break;
case 3:jieyue();break;
case 4:guihuan();break;
case 6:chazhao();break;
case 5:shanchu();break;
case 0:printf("按任意键退出系统!");break;
default: printf("未输入正确序号");break;
}
}
void luru()//录入函数
{ int n1,i,j,k;
int flag=0;
FILE *fp1;//存书的信息指针
fp1=fopen("book1.txt","wt");//只写
if(fp1==NULL)
{
printf("\n不能打开book1.txt");
getch();
exit(1);
}
FILE *fpi;//存下标指针
fpi=fopen("i.txt","wt");//只写
if(fpi==NULL)
{
printf("\n不能打开i.txt");
getch();
exit(1);
}
FILE *fpf;//存标识符指针
fpf=fopen("flag1.txt","wt");//只写
if(fpf==NULL)
{
printf("\n不能打开flag1.txt");
getch();
exit(1);
}
if (fscanf(fpf,"%d",flag)==EOF)
flag=0;
else flag=fscanf(fpf,"%d",flag);
if (flag==0)
{ printf("请输入录入书籍的个数(<=20):\n");
scanf("%d",&n1);
for (i=0;i<n1;i++)
{
printf("当前正在录入第%d种书\n",i+1);
printf("请输入书名:\n");
scanf("%s",&b[i].name);
printf("请输入作者:\n");
scanf("%s",&b[i].name2);
printf("请输入价格(可用小数):\n");
scanf("%f",&b[i].money);
printf("请输入编号:\n");
scanf("%d",&b[i].num);
printf("请输入入库数量:\n");
scanf("%d",&b[i].many);
printf("请输入录入日期(年(空格)月(空格)日):\n");
scanf("%d %d %d",&b[i].Rdate.year,&b[i].Rdate.month,&b[i].Rdate.day);
fprintf(fp1,"%s %s %f %d %d %d %d %d",b[i].name,b[i].name2,b[i].money,b[i].num,b[i].many,b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day);//存书籍信息
flag=flag+1;
}
fprintf(fpi,"%d",i);
fprintf(fpf,"%d",flag);//存标识符
fclose(fp1);
fclose(fpi);
fclose(fpf);
}
//未使用//
else if (flag>0&&flag<=20-flag)
{
printf("请输入新录入书籍的个数:\n");
scanf("%d",&k);
for (flag;flag<=k+flag;flag++)
{
printf("请输入书名:\n");
scanf("%s",&b[flag].name);
printf("请输入作者:\n");
scanf("%s",&b[flag].name2);
printf("请输入价格:\n");
scanf("%f",&b[flag].money);
printf("请输入编号:\n");
scanf("%d",&b[flag].num);
printf("请输入入库数量:\n");
scanf("%d",&b[flag].many);
printf("请输入录入日期:\n");
scanf("%d %d %d",&b[flag].Rdate.year,&b[flag].Rdate.month,&b[flag].Rdate.day);
}
}
else if (flag>20)
printf("空间不足");
//未使用//
printf("输入-1返回主菜单\n");
scanf("%d",&j);
if (j==-1)
menu();
}
void chakan()//查看已录入书籍
{
int i,j=0;
FILE *fp1;//存书的信息指针
fp1=fopen("book1.txt","rt");//只读
if(fp1==NULL)
{
printf("\n不能打开book1.txt");
getch();
exit(1);
}
i=0;
do{ fscanf(fp1,"%s %s %f %d %d %d %d %d",b[i].name,b[i].name2,b[i].money,b[i].num,b[i].many,b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day);
printf("书名:%s\n",b[i].name);
printf("作者:%s\n",b[i].name2);
printf("价格:%f\n",b[i].money);
printf("编号:%d\n",b[i].num);
printf("数量:%d\n",b[i].many);
printf("录入日期:%d年%d月%d日\n",b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day);
i++;
}while(fscanf(fp1,"%s %s %f %d %d %d %d %d",b[i].name,b[i].name2,b[i].money,b[i].num,b[i].many,b[i].Rdate.year,b[i].Rdate.month,b[i].Rdate.day)!=EOF);
fclose(fp1);
printf("输入-1返回主菜单\n");
scanf("%d",&j);
if (j==-1)
menu();
}
void jieyue()
{
printf("");
}
void guihuan()
{
printf("");
}
void shanchu()
{
printf("");
}
void chazhao()//查找书籍
{ int i,j,a;
printf("请输入书籍编号:");
scanf("%d",&a);
for (i=1;i<=20;i++)
{
if (a==b[i].num)
printf("已查询到书籍信息\n");
printf("所查书籍信息为:\n");
printf("书名:%s\n",b[i].name);
printf("作者:%s\n",b[i].name2);
printf("价格:%f\n",b[i].money);
printf("编号:%d\n",b[i].num);
printf("数量:%d\n",b[i].many);
printf("录入日期:%s\n",b[i].Rdate);
}
printf("输入-1返回主菜单\n");
scanf("%d",&j);
if (j==-1)
menu();
}
int main()//主程序
{
menu();
return 0;
}
fscanf读取整型、浮点型数据时,要对变量名加&,进行取地址
尝试debug定位问题所在
修改如下,供参考:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main();
void luru();
void chakan();
void jieyue();
void guihuan();
void chazhao();
void shanchu();
void cun()//文件
{
FILE* fp;
fp = fopen("book1.txt", "wt");
if (fp == NULL)
{
printf("\n不能打开book.txt");
getch();
exit(1);
}
}
struct date
{
int year;
int month;
int day;
};
struct book//结构体写书的信息
{
char name[21];//书名
char name2[21];//作者
float money;//价格
int num;//书的编号
int many;//数量
struct date Rdate;//书的录入日期
};
struct book b[20];//结构体变量
void menu()//菜单
{
printf("=====================================\n");
printf(" 【******欢迎使用图书管理系统******】\n");
printf("‖系统菜单: ‖\n");
printf("‖1.录入新书籍(首次使用) ‖\n");
printf("‖2.查看已录入书籍 ‖\n");
printf("‖3.借阅书籍 ‖\n");
printf("‖4.归还书籍 ‖\n");
printf("‖5.删除已录入书籍 ‖\n");
printf("‖6.查找书籍 ‖\n");
printf("‖0.退出系统 ‖\n");
printf("=====================================\n");
printf("请输入序号:\n");
int a;
scanf("%d", &a);//输入序号
switch (a)//选择序号
{
case 1:luru(); break;
case 2:chakan(); break;
case 3:jieyue(); break;
case 4:guihuan(); break;
case 6:chazhao(); break;
case 5:shanchu(); break;
case 0:printf("按任意键退出系统!"); break;
default: printf("未输入正确序号"); break;
}
}
void luru()//录入函数
{
int n1, i, j, k;
int flag = 0;
FILE* fp1;//存书的信息指针
fp1 = fopen("book1.txt", "wt");//只写
if (fp1 == NULL)
{
printf("\n不能打开book1.txt");
getch();
exit(1);
}
FILE* fpi;//存下标指针
fpi = fopen("i.txt", "wt");//只写
if (fpi == NULL)
{
printf("\n不能打开i.txt");
getch();
exit(1);
}
FILE* fpf;//存标识符指针
fpf = fopen("flag1.txt", "wt");//只写
if (fpf == NULL)
{
printf("\n不能打开flag1.txt");
getch();
exit(1);
}
if (fscanf(fpf, "%d", &flag) == EOF) //if (fscanf(fpf, "%d", flag) == EOF)
flag = 0;
else flag = fscanf(fpf, "%d", &flag);// ? flag = fscanf(fpf, "%d", flag);
if (flag == 0)
{
printf("请输入录入书籍的个数(<=20):\n");
scanf("%d", &n1);
for (i = 0; i < n1; i++)
{
printf("当前正在录入第%d种书\n", i + 1);
printf("请输入书名:\n");
scanf("%s", b[i].name); //scanf("%s", &b[i].name);
getchar();
printf("请输入作者:\n");
scanf("%s", b[i].name2); //scanf("%s", &b[i].name2);
getchar();
printf("请输入价格(可用小数):\n");
scanf("%f", &b[i].money);
getchar();
printf("请输入编号:\n");
scanf("%d", &b[i].num);
getchar();
printf("请输入入库数量:\n");
scanf("%d", &b[i].many);
getchar();
printf("请输入录入日期(年(空格)月(空格)日):\n");
scanf("%d %d %d", &b[i].Rdate.year, &b[i].Rdate.month, &b[i].Rdate.day);
fprintf(fp1, "%s %s %f %d %d %d %d %d\n", b[i].name, b[i].name2, b[i].money,
b[i].num, b[i].many, b[i].Rdate.year, b[i].Rdate.month, b[i].Rdate.day);//存书籍信息
flag = flag + 1;
}
fprintf(fpi, "%d", i);
fprintf(fpf, "%d", flag);//存标识符
fclose(fp1);
fclose(fpi);
fclose(fpf);
}
//未使用//
else if (flag > 0 && flag < 20 - flag) //if (flag > 0 && flag <= 20 - flag)
{
printf("请输入新录入书籍的个数:\n");
scanf("%d", &k);
for (flag; flag <= k + flag; flag++)
{
printf("请输入书名:\n");
scanf("%s", b[flag].name); //scanf("%s", &b[flag].name);
getchar();
printf("请输入作者:\n");
scanf("%s", b[flag].name2); //scanf("%s", &b[flag].name2);
getchar();
printf("请输入价格:\n");
scanf("%f", &b[flag].money);
getchar();
printf("请输入编号:\n");
scanf("%d", &b[flag].num);
getchar();
printf("请输入入库数量:\n");
scanf("%d", &b[flag].many);
getchar();
printf("请输入录入日期:\n");
scanf("%d %d %d", &b[flag].Rdate.year, &b[flag].Rdate.month, &b[flag].Rdate.day);
}
}
else if (flag > 20)
printf("空间不足");
//未使用//
printf("输入-1返回主菜单\n");
scanf("%d", &j);
if (j == -1)
menu();
}
void chakan()//查看已录入书籍
{
int i, j = 0;
FILE* fp1;//存书的信息指针
fp1 = fopen("book1.txt", "rt");//只读
if (fp1 == NULL)
{
printf("\n不能打开book1.txt");
getch();
exit(1);
}
i = 0;
while(1) { //修改
if (fscanf(fp1, "%s %s %f %d %d %d %d %d", b[i].name, b[i].name2, &b[i].money,
&b[i].num, &b[i].many, &b[i].Rdate.year, &b[i].Rdate.month, &b[i].Rdate.day) != 8) break; //修改
printf("书名:%s\n", b[i].name);
printf("作者:%s\n", b[i].name2);
printf("价格:%f\n", b[i].money);
printf("编号:%d\n", b[i].num);
printf("数量:%d\n", b[i].many);
printf("录入日期:%d年%d月%d日\n", b[i].Rdate.year, b[i].Rdate.month, b[i].Rdate.day);
i++;
}
//while (fscanf(fp1, "%s %s %f %d %d %d %d %d", b[i].name, b[i].name2, b[i].money, b[i].num, 修改
//b[i].many, b[i].Rdate.year, b[i].Rdate.month, b[i].Rdate.day) != EOF);
fclose(fp1);
printf("输入-1返回主菜单\n");
scanf("%d", &j);
if (j == -1)
menu();
}
void jieyue()
{
printf("");
}
void guihuan()
{
printf("");
}
void shanchu()
{
printf("");
}
void chazhao()//查找书籍
{
int i, j, a;
printf("请输入书籍编号:");
scanf("%d", &a);
for (i = 0; i < 20; i++) //for (i = 1; i <= 20; i++)
{
if (a == b[i].num) { //修改
printf("已查询到书籍信息\n");
printf("所查书籍信息为:\n");
printf("书名:%s\n", b[i].name);
printf("作者:%s\n", b[i].name2);
printf("价格:%f\n", b[i].money);
printf("编号:%d\n", b[i].num);
printf("数量:%d\n", b[i].many);
printf("录入日期:%d年%d月%d日\n", b[i].Rdate.year, b[i].Rdate.month, b[i].Rdate.day);
//printf("录入日期:%s\n", b[i].Rdate); 修改
break; //修改
}//修改
}
if (i >= 20)
printf("未查询到书籍信息\n");
printf("输入-1返回主菜单\n");
scanf("%d", &j);
if (j == -1)
menu();
}
int main()//主程序
{
menu();
return 0;
}