📄 个人图书管理系统.cpp
字号:
/*指定查询*/
void book_search() //本模块比较简单,单纯的显示信息和执行函数
{
void adm_servelist();
void id_search();
void bn_search();
char input;
FILE *fp;
int inp;
if ((fp=fopen("book.dat","rb"))==NULL)
{
system("cls");
printf("\n\n\n\t数据尚未初始化~~\n\n\t请在管理菜单中增加图书信息~~~\n");
printf("\n\t<按任意键返回管理菜单>\n\t");
input=getchar();
input=getchar();
adm_servelist();
}
else
{
do
{
system("cls");
printf("\n\n\n\t1.按图书编号查询\n");
printf("\n\t2.按图书名查询\n");
printf("\n\t3.回到主菜单\n");
printf("\n\n\t请选择查询类别:");
scanf("%d",&inp);
if (inp!=1&&inp!=2&&inp!=3&&inp!=4)
{
printf("\n\n\t没有这项服务~\n\t按任意键重新选择~");
input=getchar();
input=getchar();
}
}
while (inp!=1&&inp!=2&&inp!=3&&inp!=4);
fclose(fp);
switch (inp)
{
case 1: id_search(); break;
case 2: bn_search(); break;
case 3: adm_servelist(); break;
}
}
}
/*按图书名查询*/
void bn_search() //按作者图书查询
{
void book_search(); //执行修改和删除时先必须找到要修改和删除的结构体数组下标
void change(int x); //将该值传给修改删除函数
void del(int x);
FILE *fp;
struct bookinf books[100],bookw[100];
char input,name[10];
int i=0,w,j,inp,k=0,n=0;
fp=fopen("book.dat","rb");
while (!feof(fp))
{
fread(&books[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
fclose(fp);
system("cls");
printf("\n\n\n\t请输入您想查询的作者名:");
scanf("%s",name);
for (j=0;j<=i-2;j++)
{
w=strcmp(books[j].bname,name);
if(w==0)
{
bookw[k]=books[j];
k=k+1;
}
else if (k==0&&j==(i-2))
{
system("cls");
printf("\n\n\n\t对不起,没有找到该记录~\n\t按任意键返回\n\t");
input=getchar();
input=getchar();
book_search();
}
}
do
{
system("cls");
printf("\n\n\t>>>>一共找到%d条符合要求的记录<<<<\n",k);
printf("\n\t编号: %d\n",bookw[n].num);
printf("\n\t书名: %s\n",bookw[n].bname);
printf("\n\t作者名: %s\n",bookw[n].wname);
printf("\n\t分类号: %s\n",bookw[n].clanum);
printf("\n\t出版单位: %s\n",bookw[n].pubcom);
printf("\n\t出版时间: %s\n",bookw[n].pubtime);
printf("\n\t价格: %f\n",bookw[n].price);
printf("\n\n\t1.上一页 2.下一页 3.修改 4.删除 5.回目录\n");
printf("\n\t请输入选项:");
scanf("%d",&inp);
switch (inp)
{
case 1:
{
if (n==0)
{
printf("\n\t已到达首页\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
else
{
n=n-1;
}
break;
}
case 2:
{
if (n==k-1)
{
printf("\n\t已到达最末页\n\t按任意键重新选择");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case 3:
{
for (j=0;j<=i-2;j++)
if (bookw[n].num==books[j].num)
{
change(j);
break;
}
}
case 4:
{
for (j=0;j<=i-2;j++)
if (bookw[n].num==books[j].num)
{
del(j);
break;
}
}
case 5: book_search(); break;
default :
{
printf("\n\t对不起,没有这项服务!\n\t按任意键重新选择!");
input=getchar();
input=getchar();
}
}
}
while(inp!=5);
}
/*按图书编号查询*/
void id_search() //执行修改删除时也需要传递一个数组下标
{
void book_search();
void change(int x);
void del(int y);
int id,i=0,j,sum=0,inp;
FILE *fp;
struct bookinf book_sear[100];
char input;
fp=fopen("book.dat","rb");
do
{
fread(&book_sear[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while (!feof(fp));
fclose(fp);
system("cls");
printf("\n\n\n\t请输入您想查询的图书编号:");
scanf("%d",&id);
do
{
for (j=0;j<i-1;j++)
if(id==book_sear[j].num)
{
system ("cls");
printf("\n\n\t编号: %d\n",book_sear[j].num);
printf("\n\t书名: %s\n",book_sear[j].bname);
printf("\n\t作者名: %s\n",book_sear[j].wname);
printf("\n\t分类号: %s\n",book_sear[j].clanum);
printf("\n\t出版单位: %s\n",book_sear[j].pubcom);
printf("\n\t出版时间: %s\n",book_sear[j].pubtime);
printf("\n\t价格: %f\n",book_sear[j].price);
break;
}
else if (j==(i-2)&&id!=book_sear[j].num)
{
system("cls");
printf("\n\n\n\t对不起,没有找到该记录~\n\t按任意键返回\n\t");
input=getchar();
input=getchar();
book_search();
}
printf("\n\n\t1.修改\t2.删除\t3.回目录\n");
printf("\n\t请选择:");
scanf("%d",&inp);
switch (inp)
{
case 1: change(j); break;
case 2: del(j); break;
case 3: book_search(); break;
default:
{
printf("\n\t对不起~没有这项服务~\n");
printf("\t按任意键重新选择\n\t");
input=getchar();
input=getchar();
}
}
}
while(inp!=1&&inp!=2&&inp!=3);
}
/*图书查询后修改*/
void change(int x)
{
int inp,i=0,j;
void book_search();
FILE *fp,*fp1;
char input;
struct bookinf books,book_taxis[100];
do
{ //避免用户按错而导致的错误修改
system("cls");
printf("\n\n\n\t警告:一旦修改就无法回复!您确定要修改该记录吗?\n");
printf("\n\t1.是的\t2.不是\n");
printf("\n\t请输入:");
scanf("%d",&inp);
if (inp!=1&&inp!=2)
{
printf("\n\t对不起~没有这项服务~\n");
printf("\t按任意键重新选择\n\t");
input=getchar();
input=getchar();
}
}
while (inp!=1&&inp!=2);
if (inp==2)
book_search();
if (inp==1) //输入新的图书信息
{
system("cls");
printf("\n\n\n\t---请输入图书信息---\n\n");
printf("\t图书编号:");
scanf("%d",&books.num);
printf("\n\t书名:");
scanf("%s",books.bname);
printf("\n\t作者名:");
scanf("%s",books.wname);
printf("\n\t分类号:");
scanf("%s",books.clanum);
printf("\n\t出版单位:");
scanf("%s",books.pubcom);
printf("\n\t出版时间:");
scanf("%s",books.pubtime);
printf("\n\t价格:");
scanf("%f",&books.price);
if ((fp1=fopen("book.dat","rb"))!=NULL) //判断新输入的图书信息编号是否使用过
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp1); //读取文件中的信息存到结构体
i=i+1;
}
while(!feof(fp1));
fclose(fp1);
for (j=0;j<x;j++)
if (books.num==book_taxis[j].num) //判断该编号之前的编号是否和新输入的编号相同
{
system("cls");
printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
printf("\t按任意键返回管理菜单~");
printf("0");
input=getchar();
input=getchar();
book_search(); //相同即返回
break;
}
for (j=x+1;j<i-2;j++) //判断该编号之后的编号是否和新输入的编号相同
if (books.num==book_taxis[j].num)
{
system("cls");
printf("\n\n\n\t对不起,这个编号已经使用过了~\n");
printf("1");
printf("\t按任意键返回管理菜单~");
input=getchar();
input=getchar();
book_search(); //相同即返回
break;
}
}
book_taxis[x]=books; //都不相同的话将新修改的信息写到要修改的那条信息中去
fp=fopen("book.dat","wb");
for (j=0;j<i-1;j++) //循环写入已经修改好的结构体数据
fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
fclose(fp);
printf("\n\n\t信息修改完成!按任意键返回");
input=getchar();
input=getchar();
book_search(); //返回
}
}
/*图书查询后删除*/
void del(int y)
{
char input;
FILE *fp;
int inp,i=0,j;
struct bookinf book_taxis[100];
void book_search();
void adm_servelist();
do //确保用户避免误删除
{
system("cls");
printf("\n\n\n\t警告:一旦删除就无法回复!您确定要删除该记录吗?\n");
printf("\n\t1.是的\t2.不是\n");
printf("\n\t请输入:");
scanf("%d",&inp);
if (inp!=1&&inp!=2)
{
printf("\n\t对不起~没有这项服务~\n");
printf("\t按任意键重新选择\n\t");
input=getchar();
input=getchar();
}
}
while (inp!=1&&inp!=2);
if (inp==2)
book_search();
if (inp==1) //读取文件中所有数据
{
if ((fp=fopen("book.dat","rb"))!=NULL)
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
}
if (i>2) //如果数据条数大于1
{
fp=fopen("book.dat","wb"); // 分2次写入,把要删除的不写入
for (j=0;j<y;j++)
fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
fclose(fp);
fp=fopen("book.dat","ab");
for (j=y+1;j<i-1;j++)
fwrite(&book_taxis[j],sizeof(struct bookinf),1,fp);
fclose(fp);
}
else //小于2的话就删除图书信息文件
{
remove("book.dat");
}
printf("\n\n\t记录已删除!\n\n\t按任意键返回\n\t");
input=getchar();
input=getchar();
adm_servelist(); //返回
}
}
/*主函数*/
void main()
{
index(); //主页面
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -