C语言编写的图书管理程序

本程序是用C语言编写,实现图书管理,包括7个功能模块,分别是新书入库,查询,删除,借书,归还,显示等
不多说了,直接上代码,此为个人原创,代码一个一个敲出来的,如有疑问之处欢迎提问

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include<conio.h>


typedef struct bookinfo
{
    char number[15];/*产品编号*/
    char name[30];/*产品名称*/
    float price;/*单价*/
    char auther[20];/*作者*/
    int mark;/*存在状态*/
    char lendername[20];/*借书人姓名*/
    char lendersex[8];/*借书人性别*/
    char lendernum[12];/*借书人学号*/
}BOOKINFO;


void menu()
{
    printf("\n\n\n\n\n\n");
    printf("\t\t\t图书管理系统\n\n");
    printf("\t\t\t1:创建:新进图书基本信息的输入\n\n");
    printf("\t\t\t2:显示:显示全部记录\n\n");
    printf("\t\t\t3:查询:根据图书名称查询图书基本信息\n\n");
    printf("\t\t\t4:删除:根据图书名称对撤销的图书信息进行删除\n\n");
    printf("\t\t\t5:列出所有未借出去的图书信息\n\n");
	printf("\t\t\t6:借书:根据图书名称借出图书\n\n");
	printf("\t\t\t7:还书:根据书名还书\n\n");
    printf("\t\t\t8:退出\n");
    }
void choice_1_input_new()/*输入新进的图书信息*/
{
    char choice;
    FILE *p;
    BOOKINFO newbook;

    system("cls");
    while(1)
      {
      printf("输入图书编号:");
      gets(newbook.number);
          
      printf("输入图书名称:");
      gets(newbook.name);    
      
      printf("输入图书单价:");
      scanf("%f",&newbook.price);
      while(getchar()!='\n');
          
      printf("输入图书的作者:");
      gets(newbook.auther);    
      
	  //借书人信息暂时为空
      strcpy(newbook.lendername,"NULL");
	  strcpy(newbook.lendersex,"NULL");
	  strcpy(newbook.lendernum,"NULL");

      printf("是否保存该条书目?(Y/N)\n");
      choice=getch();
      while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
        choice=getch();
      if(choice=='Y'||choice=='y') 
        {
        newbook.mark=1;/*将图书状态设置成1,表示没有借出*/
        
        p=fopen("c:\\bookinfo.data","ab");
        fwrite(&newbook,sizeof(BOOKINFO),1,p);
        fclose(p);    
        
        printf("\n该条书目已添加到c:\\bookinfo.data文件中!\n");
        }     
      else  
        {
        printf("\n本条书目未保存!\n");    
        }
      printf("\n是否继续添加书目?(Y/N)\n");
      choice=getch();
      while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
        choice=getch();
      if(choice=='Y'||choice=='y')
        continue;
      else 
        break;      
      }
    }
void choice_2_display_all()/*显示全部图书信息*/
{
    FILE *p;
    int n;
    BOOKINFO bookinfo[100];
    int booknumber=0;

    system("cls");
    p=fopen("c:\\bookinfo.data","rb");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;    
      }
    /*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
    fclose(p);  
    booknumber--;
    if(booknumber==0)
      {
      printf("没有任何图书信息!\n\n");
      }
    else
      {
      n=0;
      printf("                              图书信息如下\n");
      printf("                   图书信息                |         借书人信息   \n");
      printf("编号  名称        单价    作者    图书状态 | 姓名        性别    学号\n");
      while(n<booknumber) 
        {
        printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].mark,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);
        n++;                                    
        }
      }  
    printf("\n\n按任意键回到主菜单!\n");
    getch();      
}

void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
    char search[20]="";/*search用来存放要查询的书名*/
    int n;
    FILE *p;
    char choice;
    BOOKINFO bookinfo[100];
    int booknumber=0;
    
    system("cls");
    p=fopen("c:\\bookinfo.data","rb");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;    
      }
    booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
    fclose(p); 
    while(1)
    {
    printf("输入要查询的书本名称:");
    gets(search);
    if(booknumber==0)
      {
      printf("书库中没有任何信息!\n\n");
      printf("按任意键回到主菜单!\n\n");
      getch();
      break;    
      }/*if结束*/
    else
      {
      for(n=0;n<booknumber;n++)
        if(strcmp(bookinfo[n].name,search)==0)//查询就需要比较
          {
          printf("该书的详细信息如下:\n");
          printf("                   图书信息                |         借书人信息   \n");
          printf("编号  名称        单价    作者    图书状态 | 姓名        性别    学号\n");
          printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].mark,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);
		  break;                            
          }
      if(n>=booknumber)
	   printf("没有查找该书的任何信息!\n");

      printf("\n\n是否继续查询?(Y/N)\n");
      choice=getch();
      while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
         choice=getch();
      if(choice=='Y'||choice=='y')
        continue;
      else 
        break;              
        }/*else结束*/
      }/*while(1)结束*/  
    }
void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/
{
    char search[20]="";/*search用来存放要删除的书名*/
    int n,i;
    FILE *p;
    char choice;
    BOOKINFO bookinfo[100];
    int booknumber;
    
    system("cls");
    while(1)
      {
      printf("输入要删除的书本名称:");
      gets(search);
      p=fopen("c:\\bookinfo.data","rb");
      booknumber=0;
      while(!feof(p))
        {
        fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
        booknumber++;    
        }
      booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
      fclose(p); 
      if(booknumber==0)
        {
        printf("书库中没有任何信息!\n\n");
        printf("按任意键回到主菜单!\n\n");
        getch();
        break;   
        }/*if结束*/
      else
        {    
        for(n=0;n<booknumber;n++)
          if(strcmp(bookinfo[n].name,search)==0)//这里的代码重复度非常高
            {
            break;
            }
        if(n>=booknumber)
           printf("没有查找该书的任何信息!\n");
        else
           {
           printf("是否确认需要删除该条书目?(Y/N)");
           choice=getch();
             while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
             choice=getch();
           if(choice=='Y'||choice=='y')      
             {
             for(i=n;i<booknumber-1;i++)
               bookinfo[i]=bookinfo[i+1];    
             booknumber--;
           
             p=fopen("c:\\bookinfo.data","wb");
             for(n=0;n<booknumber;n++)
				 fwrite(&bookinfo[n],sizeof(BOOKINFO),1,p);
             fclose(p);
           
             printf("删除成功!\n");
             }
           else
              printf("\n\n该条书目没有被删除!"); 
           }    
         printf("\n\n是否继续进行删除操作?(Y/N)\n");
         choice=getch();
         while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
           choice=getch();
         if(choice=='Y'||choice=='y')
           continue;
         else 
           break;              
        }/*else结束*/
      }/*while(1)结束*/
    }
void choice_5_display_according_exitflag()/*根据存在状态列出图书信息*/
{
    FILE *p;
    int n;
    int count=0;
    BOOKINFO bookinfo[100];
    int booknumber;
    
    system("cls");
    booknumber=0;
    p=fopen("c:\\bookinfo.data","rb");
    while(!feof(p))
      {
      fread(&bookinfo[booknumber],sizeof(BOOKINFO),1,p);
      booknumber++;    
      }
    booknumber--;  
    fclose(p);
    if(booknumber==0)
      {
      printf("书库中没有任何书目存在!\n");
      }    
    else
      {
      for(n=0;n<booknumber;n++)
        if(bookinfo[n].mark==1)
          count++;
      if(count==0)
        printf("书库中的书籍全部借出!\n");        
      else
        {
        printf("书库中未被借出的图书信息如下:\n\n");
        printf("                   图书信息                |         借书人信息   \n");
        printf("编号  名称        单价    作者    图书状态 | 姓名        性别    学号\n");
        for(n=0;n<booknumber;n++)
          if(bookinfo[n].mark==1)
            {
            printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        bookinfo[n].number,bookinfo[n].name,bookinfo[n].price,
                                        bookinfo[n].auther,bookinfo[n].mark,bookinfo[n].lendername,
                                        bookinfo[n].lendersex,bookinfo[n].lendernum);    
            }    
        }   
      }  
    printf("\n按任意键返回主菜单!\n");
    getch();  
}

void choice_6borrow_according_name()//根据图书名称借出图书
{
	char name[20];
	FILE *p;
	BOOKINFO book[100];
	int booknumber=0;
	int n,i;
	char choice;
	system("cls");
	if((p=fopen("c:\\bookinfo.data","rb"))==NULL)
	{
		printf("can not open");
		return;
	}
	while(!feof(p))
	{
		fread(&book[booknumber],sizeof(BOOKINFO),1,p);
		booknumber++;
	}
	booknumber--;
	fclose(p);
	while(1)
	{
        printf("请输入要借图书的名称:");
	    gets(name);
		if(booknumber==0)
		{
			printf("\n库中无图书!\n");
			printf("\n按任意键返回主菜单:\n");
			getch();
			break;
		}
		else
		{
			//比较查询,寻找出该书
			for(n=0;n<booknumber;n++)
			{
				if(strcmp(book[n].name,name)==0)
				{
					if(book[n].mark==1)
					{
						printf("该书的详细信息如下:\n");
						printf("                   图书信息                |         借书人信息   \n");
						printf("编号  名称        单价    作者    图书状态 | 姓名        性别    学号\n");
						printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        book[n].number,book[n].name,book[n].price,
                                        book[n].auther,book[n].mark,book[n].lendername,
                                        book[n].lendersex,book[n].lendernum);
						printf("\n\n请确认是否借出该书?(y/n)");
						choice=getch();
						while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
							choice=getch();
						 if(choice=='Y'||choice=='y')
						 {
							book[n].mark=0;
							//录入借书人信息
							printf("\n请输入借书人姓名:");
							gets(book[n].lendername);

							printf("请输入借书人性别:");
							gets(book[n].lendersex);

							printf("请输入借书人学号:");
							gets(book[n].lendernum);
							p=fopen("c:\\bookinfo.data","wb");
							for(i=0;i<booknumber;i++)
							  fwrite(&book[i],sizeof(BOOKINFO),1,p);
							fclose(p);
							printf("\n借阅成功!图书已借出\n");
						 
							break;//找到了就应该停止
						 }
						else 
							break;
					}
					else
					{
						printf("\n抱歉,该书已被借出!\n");
						break;
					}
					
				}
			}
				if(n>=booknumber)
				{
					printf("\n抱歉,库中没有该书本!\n");

				}
				printf("\n\n是否继续借阅其他图书?(y/n)\n");
				choice=getch();
				while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
					choice=getch();
				if(choice=='Y'||choice=='y')
					continue;
				else 
					break;
		}/*else结束*/
	}/*whlie(1)结束*/


}

//还书
void choice_7return_book_name()
{
	FILE *p;
	char choice;
	int booknumber=0,i,n;
	BOOKINFO book[100];
	char name[20];
	system("cls");
	if((p=fopen("c:\\bookinfo.data","rb"))==NULL)
	{
		printf("can not open");
		return;
	}
	while(!feof(p))
	{
		fread(&book[booknumber],sizeof(BOOKINFO),1,p);
		booknumber++;
	}
	booknumber--;
	fclose(p);
	while(1)
	{
		printf("请输入要归还的书的名称:");
		gets(name);
		if(booknumber==0)
		{
			printf("\n库中无图书!\n");
			printf("\n按任意键返回主菜单:\n");
			getch();
			break;
		}
		else
		{
			for(n=0;n<booknumber;n++)
				if(strcmp(book[n].name,name)==0)
				{
					if(book[n].mark==0)
					{
						printf("该书的详细信息如下:\n");
						printf("                   图书信息                |         借书人信息   \n");
						printf("编号  名称        单价    作者    图书状态 | 姓名        性别    学号\n");
						printf("%-6s%-12s%-8.1f%-8s%-9d| %-12s%-8s%-8s\n",
                                        book[n].number,book[n].name,book[n].price,
                                        book[n].auther,book[n].mark,book[n].lendername,
                                        book[n].lendersex,book[n].lendernum);
						printf("\n\n请确认是否归还该书?(y/n)");
						choice=getch();
						while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
							choice=getch();
						 if(choice=='Y'||choice=='y')
						 {
							book[n].mark=1;
							//借书人信息置空
							strcpy(book[n].lendername,"NULL");
							strcpy(book[n].lendersex,"NULL");
							strcpy(book[n].lendernum,"NULL");

							p=fopen("c:\\bookinfo.data","wb");
							for(i=0;i<booknumber;i++)
							  fwrite(&book[i],sizeof(BOOKINFO),1,p);
							fclose(p);
							printf("\n归还成功!图书已归还入库\n");
						 
							break;//找到了就应该停止
						 }
						else 
							break;
					}
					
				}
				if(n>=booknumber)
				{
					printf("\n抱歉,库中没有该书本!\n");

				}
				printf("\n\n是否继续归还其他图书?(y/n)\n");
				choice=getch();
				while(choice!='Y'&&choice!='y'&&choice!='N'&&choice!='n')
					choice=getch();
				if(choice=='Y'||choice=='y')
					continue;
				else 
					break;

		}


	}

}
void main()
{
    char choice;
    clock_t tm;
    FILE *p;
    if((p=fopen("c:\\bookinfo.data","rb"))==NULL)//使用二进制方式读写不会出太大问题,否则读写实数会报错
      {
      p=fopen("c:\\bookinfo.data","wb");   
      fclose(p);
      }
    while(1)
      {
      system("cls");
      menu();
      choice=getch();
      switch(choice)
        {
        case '1':choice_1_input_new();break;/*输入新进的图书信息*/
        case '2':choice_2_display_all();break;/*显示全部图书信息*/
        case '3':choice_3_search_according_name();break;/*根据图书名称显示图书的信息*/
        case '4':choice_4_delete_according_name();break;/*根据图书名称对图书信息进行删除*/
        case '5':choice_5_display_according_exitflag();break;/*根据存在状态列出图书信息*/
		case '6':choice_6borrow_according_name();break;//根据图书名称借书
		case '7':choice_7return_book_name();break;
        case '8':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n");getch();return;
        default:
                printf("\n\n\t\t\t请输入菜单中的数字!(1~8)");    
                tm=clock();
                while(clock()<tm+1800);
                break;
        } 
      }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值