⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图书管理系统.c

📁 计算机数据结构课程设计
💻 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 + -