?? 個人圖書管理系統.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 + -