?? 個人圖書管理系統.cpp
字號:
#include"stdio.h"
#include"stdlib.h"
#include"windows.h"
#include"string.h"
/*圖書相關信息*/
struct bookinf //定義圖書相關信息結構體
{
int num;
char bname[20];
char wname[10];
char clanum[14];
char pubcom[10];
char pubtime[10];
float price;
};
/*首頁*/
void index() //首頁打印設置
{ void adm_servelist();
char input;
printf("\n\n\t\t\t*****************************\n");
printf("\t\t\t PERSONNAL個人圖書管理系統\n");
printf("\t\t\t*****************************\n\n\n");
printf(" ------------------------------------------------------------------------------\n");
printf("\t<按任意鍵進入>\n\t");
input=getchar(); //讓用戶輸入一個字符后再進行下一步(以后在本程序中用得很多)
system("cls"); //清屏
adm_servelist();
}
/*關于界面*/
void about()
{
void adm_servelist();
char input; //關于界面的打印設置
system("cls");
printf("\n\n\t\t0610003028-趙成偉 個人圖書管理系統作業\n");
printf("\n\n\t\t\t\t歡迎使用幫助\n");
printf("本系統功能強大\n\n");
printf("\t 實現了:\n");
printf("\t\t1 圖書信息錄入\n");
printf("\t\t2 圖書信息查詢\n");
printf("\t\t3 圖書信息修改\n");
printf("\t\t4 圖書信息刪除\n");
printf("\t\t5 圖書信息排序\n");
printf("\n\t按任意鍵返回登陸界面!");
input=getchar();
input=getchar();
adm_servelist(); //任意鍵返回登陸界面
}
/*離開界面*/
void byebye() //離開界面
{
char input;
system("cls");
printf("\n\n\t________________________________________________________________");
printf("\n\n\n\t\t*感謝您的使用*\n\n\t\t");
printf("按任意鍵退出本系統\n\t\t");
input=getchar();
input=getchar();
printf("\n\t\t");
exit(0); //exit()函數跳出整個程序
}
/*刪除所有相關信息*/
void delall() //管理員選項中的初始化函數
{
//void adm_servelist();
void adm_servelist();
int inp;
char input;
do //如果輸入的不是界面提供的選項值,則重復顯示輸入界面
{
system("cls");
printf("\n\n\t----------!!警告!!----------\n");
printf("\n\t一旦選擇了全部初始化將清除全部數據!\n");
printf("\n\t初始化完畢后返回登陸界面\n");
printf("\n\n\t你確定要初始化嗎: 1: Yes 2: No ");
printf("\n\t請輸入服務選項:");
scanf("%d",&inp);
switch (inp)
{
case 1: //如果輸入為1則刪除book.dat文件
remove("book.dat");
printf("\n\n\t初始化完畢!\n\t所有數據全部清空!\n\t按任意鍵返回登陸界面!");
input=getchar();
input=getchar();
adm_servelist(); //并返回登陸界面
break;
case 2: //選2則返回管理員登陸界面
adm_servelist();
break;
default: //否則打印如下字樣并重復循環
printf("\n\n\t對不起~沒有這項服務!\n\t按任意鍵重新選擇\n\t");
input=getchar();
input=getchar();
break;
}
}
while (inp!=1&&inp!=2);
}
/*管理員服務選項*/
void adm_servelist()
{
void book_add();
void book_view();
void taxis();
void book_search();
void pwchange();
void delall();
int in;
char input;
do //和以前一樣用do{}while; 語句來保證用戶的輸入信息能夠被系統接受
{
system("cls");
printf("\n\n\n\t--歡迎使用PERSONNAL圖書管理系統--");
printf("\n\n\t1.新增圖書\n");
printf("\t2.圖書信息瀏覽\n");
printf("\t3.查詢指定圖書\n");
printf("\t4.圖書按編號排序\n");
printf("\t5.圖書信息初始化\n");
printf("\t6.關于本系統\n");
printf("\t7.退出系統\n");
printf("\n\t請選擇服務種類:");
scanf("%d",&in);
if (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6&&in!=7)
{
printf("\n\t沒有這項服務~\n");
printf("\t按任意鍵重新選擇");
input=getchar();
input=getchar();
}
}
while (in!=1&&in!=2&&in!=3&&in!=4&&in!=5&&in!=6&&in!=7);
switch (in)
{
case 1: book_add(); break; //選擇不同服務的時候進行不同的函數塊
case 2: book_view(); break;
case 3: book_search(); break;
case 4: taxis(); break;
case 5: delall(); break;
case 6: about(); break;
case 7: exit(0); break;
}
}
/*新增圖書*/
void book_add()
{
void adm_servelist();
void book_add();
int i=0,j;
int inp;
FILE *fp;
char input;
struct bookinf books;
struct bookinf book_taxis[100];
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 ((fp=fopen("book.dat","rb"))!=NULL) //對輸入的圖書信息中的編號進行判斷
{
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
for (j=0;j<=i;j++)
if (books.num==book_taxis[j].num) //如果新輸入的圖書編號已經使用過了
{ //顯示以下信息并跳出本函數
system("cls");
printf("\n\n\n\t對不起,這個編號已經使用過了~\n");
printf("\t按任意鍵返回管理菜單~");
input=getchar();
input=getchar();
adm_servelist();
break;
}
}
if ((fp=fopen("book.dat","rb"))==NULL) //如果沒有使用過該編號則進行寫入操作
{
fp=fopen("book.dat","wb"); //創建寫入文件流
}
else
{
fclose(fp);
fp=fopen("book.dat","ab");
}
fwrite(&books,sizeof(struct bookinf),1,fp); //寫入信息
fclose(fp);
printf("\n\n\n\t信息輸入完畢~按任意鍵繼續\n");
input=getchar();
input=getchar();
do //要求用戶選擇是否繼續輸入新的信息
{
system("cls");
printf("\n\n\n\t1.繼續輸入\n");
printf("\t2.返回管理菜單\n");
printf("\n\t請選擇服務類別:");
scanf("%d",&inp);
if (inp!=1&&inp!=2)
{
printf("\n\t沒有這項服務~\n");
printf("\t按任意鍵重新選擇");
input=getchar();
input=getchar();
}
}
while (inp!=1&&inp!=2);
switch(inp)
{
case 1: book_add(); break; //選是的話則重復執行本函數
case 2: adm_servelist(); break;
}
}
/*對圖書信息排序*/
void taxis()
{
void adm_servelist();
system("cls");
int i=0,m,n;
FILE *fp;
char input;
void adm_servelist();
struct bookinf book_taxis[100],temp;
if ((fp=fopen("book.dat","rb"))==NULL) //判斷圖書信息文件是否存在
{
printf("\n\n\n\t沒有數據可讀取!無法排序~\n");
printf("\t按任意鍵回到管理菜單~");
input=getchar();
input=getchar();
adm_servelist();
}
else //存在即讀取所有的信息存入結構體
{
rewind(fp);
do
{
fread(&book_taxis[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while(!feof(fp));
fclose(fp);
}
for (m=0;m<i-1-1;m++) //起泡法排序
for (n=0;n<i-1-1-m;n++)
if (book_taxis[n].num>book_taxis[n+1].num)
{
temp=book_taxis[n];
book_taxis[n]=book_taxis[n+1];
book_taxis[n+1]=temp;
}
if ((fp=fopen("book.dat","wb"))==NULL) //判斷寫入是否能成功
{
printf("\n\n\n\t數據讀取失敗!請聯系管理員~\n");
printf("\t按任意鍵退出本系統~\n\t");
input=getchar();
input=getchar();
exit(0);
}
else //成功的話立刻寫入排好順序的信息
{
for (m=0;m<i-1;m++)
fwrite(&book_taxis[m],sizeof(struct bookinf),1,fp);
fclose(fp);
}
printf("\n\n\n\t排序完成!~\n\t按任意鍵返回管理選項菜單~\n\t");
input=getchar();
input=getchar();
adm_servelist();
}
/*圖書瀏覽*/
void book_view()
{
void adm_servelist();
void book_view();
int inp,i=0,n=0;
FILE *fp;
char input;
struct bookinf bookview[100];
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
{
fread(&bookview[i],sizeof(struct bookinf),1,fp);
i=i+1;
}
while (!feof(fp));
fclose(fp);
do //顯示第一條記錄
{
system("cls");
printf("\n\t--------共有%d條記錄--------",i-1);
printf("\n\n\t編號: %d\n",bookview[n].num);
printf("\n\t書名: %s\n",bookview[n].bname);
printf("\n\t作者名: %s\n",bookview[n].wname);
printf("\n\t分類號: %s\n",bookview[n].clanum);
printf("\n\t出版單位: %s\n",bookview[n].pubcom);
printf("\n\t出版時間: %s\n",bookview[n].pubtime);
printf("\n\t價格: %f\n",bookview[n].price);
printf("\n\n\t1.上一頁\t2.下一頁\t3.回目錄\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==i-2)
{
printf("\n\t已到達最末頁\n\t按任意鍵重新選擇");
input=getchar();
input=getchar();
}
else
{
n=n+1;
}
break;
}
case 3:
{
adm_servelist();
break;
}
default:
{
printf("\n\t沒有這項服務\n\t按任意鍵重新選擇");
input=getchar();
input=getchar();
}
}
}
while (inp!=3);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -