?? 圖書管理系統.c
字號:
//***********************
//圖書館管理系統
//***********************
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define null 0
#define max 65536
static int n;
//*********************
// 圖書結構體
//*********************
typedef struct
{
char num[10]; //書號
char name[9]; //書名
char addr[31]; //作者
int Nowcounter; //現存量
int Allcounter; //總庫存量
}datatype;
datatype *x[max]; //定義兩個指針數組
datatype *p;
//*****************************
//圖書功能函數列表
//*****************************
void redo(); //主遞歸函數
void creatlist(datatype *x[]); //圖書建立函數
int menu_select(); //功能菜單函數
void find(datatype *x[],int n); //查找函數
void delnode(datatype *x[]); //插入函數
void printlist(datatype *x[]); //顯示函數
void jieyue(datatype *x[],int n); //借閱函數
void guihuan(datatype *x[],int n); //歸還函數
//*****************************
//主遞歸函數程序
//*****************************
void redo()
{
int i=0,j,n1,k=0,flage;
for( ; ;)
{
switch( menu_select())
{
case 1: //選項1的實現
printf("***********************\n");
printf("* 圖書的建立 *\n");
printf("***********************\n");
creatlist(x);
break;
case 2: //選項2的實現
printf("***********************\n");
printf("* 新圖書信息的添加 *\n");
printf("***********************\n");
printf(" 插入的個數:");
scanf("%d",&n1); //輸入插入新圖書的個數
for(i=0;i<n1;i++)
{
flage=0;
p=(datatype *)malloc(sizeof(datatype)); //分配一個節點空間
printf(" 書名: ");
scanf("%s",p->name); //輸入插入書的書名
if(flage==0)
{
for(j=0;j<n;j++)
{
if(strcmp(x[j]->name,p->name) == 0 )//調用比較函數查看書名是否已知
{
x[j]->Allcounter++;
x[j]->Nowcounter++;
flage=1;
}
}
if(flage==0)
{
n++;
printf(" 第 %d 個圖書數據:\n",n); //插入新的圖書
p=(datatype *)malloc(sizeof(datatype));
x[n-1]=p;
printf(" 書名:");
scanf("%s",x[n-1]->name); //輸入書名
printf(" 編號:");
scanf(" %s",x[n-1]->num); //輸入書號
printf(" 作者:");
scanf(" %s",x[n-1]->addr); // 輸入作者名
printf(" 總庫存量: ");
scanf("%d",&x[n-1]->Allcounter); //輸入總庫存量
x[n-1]->Nowcounter=x[n-1]->Allcounter;
}
}
}
break;
case 3:
printf("***********************\n");
printf("* 圖書信息的查詢 *\n");
printf("***********************\n");
find(x,n);
break;
case 4:
printf("************************\n");
printf("* 圖書信息的刪除 *\n");
printf("************************\n");
delnode(x);
break;
case 5:
printf("************************\n");
printf("* 圖書信息的顯示 *\n");
printf("************************\n");
printlist(x);
break;
case 6:
printf("************************\n");
printf(" 圖書的借閱\n");
printf("************************\n");
jieyue(x,n);
break;
case 7:
printf("************************\n");
printf(" 圖書的歸還\n");
printf("************************\n");
guihuan(x,n);
break;
case 0:
printf("\t 謝謝使用,再見! \n");
return;
}
}
}
//*************************
//主函數程序
//*************************
void main ()
{
redo(); //調用主遞歸函數
}
//*************************
//功能菜單函數
//*************************
int menu_select()
{
int i;
printf(" 歡迎進入圖書管理系統!\n");
printf("===========================\n");
printf(" 1. 圖書信息的采集\n");
printf(" 2. 新圖書的插入\n");
printf(" 3. 圖書信息的查詢\n");
printf(" 4. 圖書的刪除\n");
printf(" 5. 圖書的顯示\n");
printf(" 6. 圖書的借閱\n");
printf(" 7. 圖書的歸還\n");
printf(" 0. 退出管理系統\n");
printf("===========================\n");
printf(" 請選擇0-7: ");
scanf("%d",&i);
while(i<0||i>7)
{
printf("\n\t輸入出錯,重選0-7: ");
scanf("%d",&i);
}
return i;
}
//********************************
// 建立鏈表 圖書建造函數
//********************************
void creatlist(datatype *x[])
{
int i;
printf(" 請輸入要建立圖書的個數:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf(" 第 %d 個圖書數據:\n",i+1);
p=(datatype *)malloc(sizeof(datatype)); //分配一個節點空間
x[i]=p;
printf(" 書名:"); //輸入圖書各項內容
scanf("%s",x[i]->name);
printf(" 編號:");
scanf(" %s",x[i]->num);
printf(" 作者:");
scanf(" %s",x[i]->addr);
printf(" 總庫存量: ");
scanf("%d",&x[i]->Allcounter);
x[i]->Nowcounter=x[i]->Allcounter;
}
}
//**********************************
// 查找函數程序
//*********************************
void find(datatype *x[],int n)
{
char num[10];
char name[9];
int t,i;
printf("=================\n"); //輸出查找方式
printf(" 1.按編號查詢 \n");
printf(" 2.按書名查詢 \n");
printf("=================\n");
printf(" 請選擇 : ");
scanf("%d",&t); //輸入選擇信息
if(t==1)
{
printf(" 請輸入要查找者的編號: ");
scanf("%s",num); //輸入書號
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num)==0) //調用strcmp函數
{
printf(" 編號 書名 作者 現庫存量 總庫存量\n"); //輸出要查詢書的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
else
{
printf(" 請輸入要查詢的書名: ");
scanf("%s",name); // 輸入書名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name)==0)
{
printf("編號 書名 作者 現庫存量 總庫存量\n"); //輸出要查詢書的信息
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
else
continue;
}
}
}
//******************************
//刪除函數程序
//******************************
void delnode(datatype *x[])
{
char num1[10],name1[10]; //定義兩個字符數組
int i,j,m=1,p;
printf(" 1.按編號刪除\n"); //輸出選擇方式
printf(" 2.按書名刪除\n");
printf(" 3.返回\n");
printf(" 請選擇:\n");
scanf("%d",&p); //輸入選擇信息
if(p>3||p<1)
{
printf(" 您的輸入有誤,請重新輸入!\n");
scanf("%d",&p); //重新輸入選擇信息
}
switch(p) //實現刪除程序
{
case 1:
printf(" 輸入要刪除書的編號:\n");
scanf(" %s",num1);
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0) //調用strcmp函數
{
m=0;
n--;
for(j=i;j<n;j++)
x[j]=x[j+1]; //將該書信息刪除
printf(" 該書已刪除!\n");
}
}
if(m==1)
printf(" 沒有這樣的的圖書\n");
break;
case 2:
printf(" 輸入要刪除書的名字:\n");
scanf("%s",&name1);
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0) //調用strcmp函數
{
m=0;
n--;
for(j=i;j<n;j++) //將該書信息刪除
x[j]=x[j+1];
printf(" 該書已刪除!\n");
}
}
if(m==1)
printf(" 沒有這樣的的圖書\n");
break;
case 3:
break;
}
}
//////////////////////////
////借閱函數程序
/////////////////////////
void jieyue(datatype *x[],int n)
{
int i,m=1,p;
char name1[10],num1[10]; //定義兩個字符數組
printf(" 1.按名字查詢\n"); //輸出選擇方式
printf(" 2.按編號查詢\n");
printf(" 3.返回\n");
printf(" 請選擇\n");
scanf("%d",&p); //輸入選擇信息
if(p>3||p<1)
{
printf(" 您的輸入有誤!\n");
scanf("%d",&p); //重新輸入選擇信息
}
switch(p) //實現查詢程序
{
case 1:
printf(" 請輸入你要的書的名字!\n");
scanf("%s",&name1); // 輸入書名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0) //調用strcmp函數
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--;
printf(" 借書成功!\n");
if(x[i]->Nowcounter==0)
printf(" 這本書已經沒有了 \n");
}
}
if(m==1)
printf(" 您要的書不存在!\n");
break;
case 2:
printf(" 請輸入你要的書的編號!\n");
scanf("%s",&num1); // 輸入書號
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0) //調用strcmp函數
{
m=0;
if(x[i]->Nowcounter!=0)
x[i]->Nowcounter--; //現存書數量減1
printf(" 借書成功!\n");
if(x[i]->Nowcounter==0)
printf(" 這本書已經沒有了 \n");
}
}
if(m==1)
printf(" 您要的書不存在!\n");
break;
case 3:
break;
}
}
///////////////////////
/////歸還程序
//////////////////////
void guihuan(datatype *x[],int n)
{
int i,q,m=1;
char name1[10],num1[10]; //定義兩個字符數組
printf(" 1.按書名歸還\n"); //輸出可選擇方式
printf(" 2.按書號歸還\n");
printf(" 3.返回\n");
printf(" 請選擇\n");
scanf("%d",&q); //輸入選擇信息
if(q>3||q<1)
{
printf(" 您的輸入有誤!\n");
scanf("%d",&q); //重新輸入選擇信息
}
switch(q) //實現歸還程序
{
case 1:
printf(" 輸入歸還書的書名: ");
scanf("%s",&name1); // 輸入書名
for(i=0;i<n;i++)
{
if(strcmp(x[i]->name,name1)==0)
{
m=0;
x[i]->Nowcounter++;
printf("此書歸還成功!\n");
printf("此書的存儲情況\n");
printf("編號 書名 作者 現存量 總存量\n");
printf("===============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("===============================================\n");
}
if(strcmp(x[i]->name,name1)!=0)
continue;
}
if(m==1)
printf("此書不是圖書館的!\n");
break;
case 2:
printf("輸入歸還書的書號\n");
scanf("%s",&num1); // 輸入書號
for(i=0;i<n;i++)
{
if(strcmp(x[i]->num,num1)==0)
{
m=0;
x[i]->Nowcounter++; //顯存書增加1
printf("此書歸還成功!\n");
printf("此書的存儲情況\n");
printf("編號 書名 作者 現存量 總存量\n");
printf("==============================================\n");
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
printf("==============================================\n");
}
if(strcmp(x[i]->num,num1)!=0) //調用strcmp函數
continue;
}
if(m==1)
printf("此書不是圖書館的!\n");
break;
case 3:
break;
}
}
//**************************************
// 輸出程序
//**************************************
void printlist(datatype *x[])
{
int i;
printf("編號 書名 作者 現存量 總存量\n"); //輸出圖書各項信息
for(i=0;i<n;i++)
{
printf(" %-10s%-10s%-10s%-10d%-10d\n",x[i]->num,x[i]->name,x[i]->addr,x[i]->Nowcounter,x[i]->Allcounter);
}
printf("===============================================\n");
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -