图书管理系统(C语言实现)

本文介绍了一个图书管理系统的设计与实现,包括图书信息的添加、删除、修改、搜索等功能,并支持从文件读取及保存图书信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
#include<windows.h>
#include<ctype.h>

struct time{
	int year;
	int month;
	int day;
};
typedef struct library{
	long booknum;
	char bookname[20];
	char author[20];
	int speciesnumber;
	char publishers[30];
	struct time publish_time;
	float price;
	struct library *next;
}*Booklist,BOOK;

int count;
Booklist lHead;
/******************************************************/
void deletebook();
void changebook();
void searchbook_num();
void searchbook_name();
void searchbook_author();
void searchbook_speciesnumber();
void searchbook_publisher();
void searchbook();
void addbooks();
void readfile();
void savefile();
Booklist inputbooks();
void outputbooks();
void printscreen2();
void printscreen1();
void printscreen0();
/******************************************************/

/* 主函数 */
int main()
{    
    printscreen0();
	return 0;
}
/* 主界面 */
void printscreen0()
{
	char choice='1';
	while(choice!='0'){
	    system("cls");
	    printf("\t********************************************\n\n");
		printf("\t            欢迎进入图书管理系统\n\n");
	    printf("\t       ====     1.  管理图书     ====\n\n");
		printf("\t       ====     2.  读取文件     ====\n\n");
		printf("\t       ====     3.  保存文件     ====\n\n");
	    printf("\t       ====     0.    退出       ====\n\n");
	    printf("\t********************************************\n\n");
        printf("\t         (请用数字选择要进行的操作!)\n");
    	if( (choice=getche()) != '0' )
	    switch(choice){
            case '1':    printscreen1();    break;
	        case '2':    readfile();    break;
			case '3':    savefile();    break;
	        default:     break;
		}
	}
}
/* 图书信息管理界面 */
void printscreen1()   
{
	char choice='1';
	while(choice!='0'){
	   system("cls");
	    printf("\t********************************************\n\n");
	    printf("\t          欢迎进入图书信息管理系统\n\n");
        printf("\t      ====     1.  查看图书       ====\n\n");
        printf("\t      ====     2.    搜索         ====\n\n");
        printf("\t      ====     3.添加图书信息     ====\n\n");
		printf("\t      ====     4.修改图书信息     ====\n\n");
	    printf("\t      ====     5.删除图书信息     ====\n\n");
        printf("\t      ====     6.录入图书信息     ====\n\n");
	    printf("\t      ====     0.    退出         ====\n\n");
     	printf("\t*******************************************\n\n");
        printf("\t         (请用数字选择要进行的操作!)\n");
	    if( (choice=getche()) != '0' )
        switch(choice){
	        case '1':    outputbooks();    break;
	        case '2':    searchbook();     break;
	        case '3':    addbooks();    break;
	        case '4':    changebook();    break;
			case '5':    deletebook();    break;
			case '6':    lHead=inputbooks();    break;
	        default:     break;
		}
	}
}
/* 查看图书 */
void outputbooks()
{
     Booklist pTemp;
	 pTemp=lHead;
	 system("cls");
	 printf("\t************共有%d本书************\n\n",count);
	 int index=1;
	 while(pTemp!=NULL){
		printf("\t------------第%d本书-----------\n\n",index);
        printf("\t图书号:  %08ld",pTemp->booknum);
	    printf("\n\t图书名:  %s",pTemp->bookname);
	    printf("\n\t作者:  %s",pTemp->author);
	    printf("\n\t图书类别号码:  %03d",pTemp->speciesnumber);
	    printf("\n\t出版社:  %s",pTemp->publishers);
	    printf("\n\t出版时间:  ");
	    printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                 pTemp->publish_time.month,
			    		 pTemp->publish_time.day);
        printf("\n\t价格:  %.2f",pTemp->price);
        printf("\n\n\t-------------------------------\n\n");
		pTemp=pTemp->next;
		index++;
	 }
	 printf("按任意键继续!\n"); 
	 getch();
}
/* 搜索 */
void searchbook()
{
	while(1){
	    system("cls");
	    printf("\t\t请选择搜索方式:\n\n");
	    printf("\t\t  *********  1-图书号\n\n"); 
	    printf("\t\t  *********  2-图书名\n\n"); 
	    printf("\t\t  *********  3-作者\n\n"); 
	    printf("\t\t  *********  4-出版社\n\n"); 
	    printf("\t\t  *********  5-图书类型号\n\n");
	    printf("\t\t  *********  0-退出\n\n");
	    printf("\t\t  ----------------请选择:");
	    int choice=1;
	    scanf("%d",&choice);
	    switch(choice){
		    case 1:  searchbook_num();    break;
		    case 2:  searchbook_name();   break;
		    case 3:  searchbook_author();    break;
		    case 4:  searchbook_publisher();    break;
		    case 5:  searchbook_speciesnumber();    break;
		    case 0:  return;
	        default:   break; 
	    }
	}
}
/* 按图书号搜索 */
void searchbook_num()
{
	int book_num;
	int index=0;
	printf("\n\t\t*********请输入图书号:");
	scanf("%d",&book_num);
	Booklist pTemp;
	pTemp=lHead;
	int flag=1;
	while(index<count){
		if(pTemp->booknum==book_num){
			printf("\n\t\t******************\n\n");
			printf("\t\t图书号:  %08ld",pTemp->booknum);
	        printf("\n\t\t图书名:  %s",pTemp->bookname);
	        printf("\n\t\t作者:  %s",pTemp->author);
	        printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	        printf("\n\t\t出版社:  %s",pTemp->publishers);
	        printf("\n\t\t出版时间:  ");
	        printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
            printf("\n\t\t价格:  %.2f",pTemp->price);
            printf("\n\n\t\t-------------------------------\n\n");
            flag=0;
		}   
		pTemp=pTemp->next;
		index++; 
	}
	if(flag)	printf("\n\t\t**********  未找到图书!");
	printf("\t\t-----  按任意键继续...");
    getch();
}
/* 按图书名搜索 */
void searchbook_name()
{
	char book_name[20];
	int index=0;
	printf("\n\t\t*********请输入图书名:");
	fflush(stdin);
	gets(book_name);
	Booklist pTemp;
	pTemp=lHead;
	int flag=1;
	while(index<count){
		if(strcmp(book_name,pTemp->bookname)==0){
			printf("\n\t\t******************\n\n");
			printf("\t\t图书号:  %08ld",pTemp->booknum);
	        printf("\n\t\t图书名:  %s",pTemp->bookname);
	        printf("\n\t\t作者:  %s",pTemp->author);
	        printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	        printf("\n\t\t出版社:  %s",pTemp->publishers);
	        printf("\n\t\t出版时间:  ");
	        printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
            printf("\n\t\t价格:  %.2f",pTemp->price);
            printf("\n\n\t\t-------------------------------\n\n");
            flag=0;
		}   
		pTemp=pTemp->next;
		index++; 
	}
	if(flag)	printf("\n\t\t**********  未找到图书!");
	printf("\t\t-----  按任意键继续...");
	getch();
}
/* 按作者搜索 */
void searchbook_author()
{
	char book_author[20];
	int index=0;
	printf("\n\t\t*********请输入作者:");
	fflush(stdin);
	gets(book_author);
	Booklist pTemp;
	pTemp=lHead;
	int flag=1;
	while(index<count){
		if(strcmp(book_author,pTemp->author)==0){
			printf("\n\t\t******************\n\n");
			printf("\t\t图书号:  %08ld",pTemp->booknum);
	        printf("\n\t\t图书名:  %s",pTemp->bookname);
	        printf("\n\t\t作者:  %s",pTemp->author);
	        printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	        printf("\n\t\t出版社:  %s",pTemp->publishers);
	        printf("\n\t\t出版时间:  ");
	        printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
            printf("\n\t\t价格:  %.2f",pTemp->price);
            printf("\n\n\t\t-------------------------------\n\n");
            flag=0;
		}   
		pTemp=pTemp->next;
		index++; 
	}
	if(flag)	printf("\n\t\t**********  未找到图书!");
	printf("\t\t-----  按任意键继续...");
    getch();
}
/* 按图书类型号搜索 */
void searchbook_speciesnumber()
{
	int book_speciesnumber;
	int index=0;
	printf("\n\t\t*********请输入图书类型号:");
	scanf("%d",&book_speciesnumber);
	Booklist pTemp;
	pTemp=lHead;
	int flag=1;
	while(index<count){
		if(pTemp->speciesnumber==book_speciesnumber){
			printf("\n\t\t******************\n\n");
			printf("\t\t图书号:  %08ld",pTemp->booknum);
	        printf("\n\t\t图书名:  %s",pTemp->bookname);
	        printf("\n\t\t作者:  %s",pTemp->author);
	        printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	        printf("\n\t\t出版社:  %s",pTemp->publishers);
	        printf("\n\t\t出版时间:  ");
	        printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
            printf("\n\t\t价格:  %.2f",pTemp->price);
            printf("\n\n\t\t-------------------------------\n\n");
            flag=0;
		}   
		pTemp=pTemp->next;
		index++; 
	}
	if(flag)	printf("\n\t\t**********  未找到图书!");
	printf("\t\t-----  按任意键继续...");
    getch();
}
/* 按出版社搜索 */
void searchbook_publisher()
{
	char book_publisher[30];
	int index=0;
	printf("\n\t\t*********请输入出版社:");
	fflush(stdin);
	gets(book_publisher);
	Booklist pTemp;
	pTemp=lHead;
	int flag=1;
	while(index<count){
		if(strcmp(book_publisher,pTemp->publishers)==0){
			printf("\n\t\t******************\n\n");
			printf("\t\t图书号:  %08ld",pTemp->booknum);
	        printf("\n\t\t图书名:  %s",pTemp->bookname);
	        printf("\n\t\t作者:  %s",pTemp->author);
	        printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	        printf("\n\t\t出版社:  %s",pTemp->publishers);
	        printf("\n\t\t出版时间:  ");
	        printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
            printf("\n\t\t价格:  %.2f",pTemp->price);
            printf("\n\n\t\t-------------------------------\n\n");
            flag=0;
		}   
		pTemp=pTemp->next;
		index++; 
	}
	if(flag)	printf("\n\t\t**********  未找到图书!");
	printf("\t\t-----  按任意键继续...");
    getch();
}
/* 添加图书信息 */
void addbooks()
{
	system("cls");
	char ch='Y';
	Booklist pTemp,pPre;
	pTemp=lHead;
	for(int i=0;i<count-1;i++)
		pTemp=pTemp->next;
	pPre=pTemp;
	while(toupper(ch)=='Y'){
	    pTemp=(Booklist)malloc(sizeof(BOOK));
	    printf("\n\t------------第%d本书-----------\n\n",count+1);
        printf("\t图书号:  ");
	    scanf("%ld",&pTemp->booknum);
		fflush(stdin);
	    printf("\n\t图书名:  ");
	    gets(pTemp->bookname);
	    printf("\n\t作者:  ");
	    gets(pTemp->author);
	    printf("\n\t图书类别号码:  ");
	    scanf("%d",&pTemp->speciesnumber);
		fflush(stdin);
	    printf("\n\t出版社:  ");
	    gets(pTemp->publishers);
	    printf("\n\t出版时间:  ");
	    scanf("%d-%d-%d",&pTemp->publish_time.year,
		                 &pTemp->publish_time.month,
			    		 &pTemp->publish_time.day);
        printf("\n\t价格:  ");
	    scanf("%f",&pTemp->price);
        printf("\n\n\t-------------------------------\n\n");
        pTemp->next=NULL;
	    pPre->next=pTemp;
	    pPre=pTemp;
	    count++;
	    printf("\t是否继续添加(Y/N):");
			ch=getche();
	}
}
/* 修改图书信息 */
void changebook()
{
	Booklist pTemp;
	pTemp=lHead;
	system("cls");
	printf("\n\t\t*********  修改操作\n");
	int book_num;
	printf("\n\t\t-----请输入图书号:");
	scanf("%d",&book_num);
	while(pTemp->booknum!=book_num){
		if(pTemp->next==NULL){
		    printf("\n\t\t-----  未找到图书!按任意键退出...\n");
		    getch();
		    return;
    	}      
    	pTemp=pTemp->next;
	}
	printf("\n\t\t******************\n\n");
	printf("\t\t图书号:  %08ld",pTemp->booknum);
    printf("\n\t\t图书名:  %s",pTemp->bookname);
    printf("\n\t\t作者:  %s",pTemp->author);
	printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	printf("\n\t\t出版社:  %s",pTemp->publishers);
	printf("\n\t\t出版时间:  ");
	printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
    printf("\n\t\t价格:  %.2f",pTemp->price);
    printf("\n\n\t\t-------------------------------\n\n");
    printf("\t\t  *********  1-图书号\n\n"); 
	printf("\t\t  *********  2-图书名\n\n"); 
    printf("\t\t  *********  3-作者\n\n"); 
	printf("\t\t  *********  4-出版社\n\n"); 
	printf("\t\t  *********  5-图书类型号\n\n");
	printf("\t\t  *********  6-出版时间\n\n");
	printf("\t\t  *********  7-价格\n\n");
	printf("\t\t  *********  0-退出\n\n");
	while(1){
	    printf("\t\t  ----------------请选择要修改的项目:");
	    int choice;
        scanf("%d",&choice);
        switch(choice){
    	    case 1:  printf("\t\t图书号:  ");
		             scanf("%d",&pTemp->booknum);    break;
    	    case 2:  printf("\t\t图书名:  "); 
		             fflush(stdin);  gets(pTemp->bookname);    break;
    	    case 3:  printf("\t\t作者:  ");
		             fflush(stdin);  gets(pTemp->author);    break;
    	    case 4:  printf("\t\t图书类别号码:  ");
		             scanf("%d",&pTemp->speciesnumber);    break;
	        case 5:  printf("\t\t出版社:  ");
		             fflush(stdin);  gets(pTemp->publishers);    break;
		    case 6:  printf("\t\t出版时间:  ");
		             scanf("%d-%d-%d",&pTemp->publish_time.year,
					                  &pTemp->publish_time.month, 
									  &pTemp->publish_time.day);    break;
		    case 7:  printf("\t\t价格:  ");
		             scanf("%f",&pTemp->price);    break;
		    case 0:  return;
	        default:    break;
	    }
	}
	printf("\n\n\t\t修改完成!按任意键退出...\n");
	getch();
} 
/* 删除图书信息 */
void deletebook()
{
	system("cls");
	int number;
	printf("\n\n\t\t*********删除操作\n");
	printf("\n\t\t图书号:");
	scanf("%d",&number); 
	Booklist pTemp,pPre;
	pTemp=lHead;
	pPre=pTemp;
	while(pTemp->booknum!=number){
		pPre=pTemp;
		pTemp=pTemp->next;
	}
	printf("\n\t\t******************\n\n");
	printf("\t\t图书号:  %08ld",pTemp->booknum);
    printf("\n\t\t图书名:  %s",pTemp->bookname);
    printf("\n\t\t作者:  %s",pTemp->author);
	printf("\n\t\t图书类别号码:  %03d",pTemp->speciesnumber);
	printf("\n\t\t出版社:  %s",pTemp->publishers);
	printf("\n\t\t出版时间:  ");
	printf("%04d-%02d-%02d",pTemp->publish_time.year,
		                     pTemp->publish_time.month,
			    	    	 pTemp->publish_time.day);
    printf("\n\t\t价格:  %.2f",pTemp->price);
    printf("\n\n\t\t-------------------------------\n\n");
	printf("\t\t*********  确认删除?\n\n");
	printf("\n\t\t  *****  1-确认\n");
	printf("\n\t\t  *****  2-取消\n");
	int choice;
	scanf("%d",&choice);
	if(choice==2)    return;
	if(pTemp->booknum==lHead->booknum)   lHead=lHead->next;
	pPre->next=pTemp->next;
	free(pTemp);
	count--;
	printf("\t\t---------  删除成功!按任意键继续...\n");
	getch();
}
/* 图书信息录入 */
Booklist inputbooks()
{
	Booklist pNew,pEnd,pHead;
	pEnd=NULL;
	pHead=NULL;
	system("cls");
	count=0;
	char ch='Y';
	while(toupper(ch)=='Y'){
		count++;
		pNew=(Booklist)malloc(sizeof(BOOK));
	    printf("\n\t------------第%d本书-----------\n\n",count);
        printf("\t图书号:  ");
	    scanf("%ld",&pNew->booknum);
		fflush(stdin);
	    printf("\n\t图书名:  ");
	    gets(pNew->bookname);
	    printf("\n\t作者:  ");
	    gets(pNew->author);
	    printf("\n\t图书类别号码:  ");
	    scanf("%d",&pNew->speciesnumber);
		fflush(stdin);
	    printf("\n\t出版社:  ");
	    gets(pNew->publishers);
	    printf("\n\t出版时间:  ");
	    scanf("%d-%d-%d",&pNew->publish_time.year,
		                 &pNew->publish_time.month,
			    		 &pNew->publish_time.day);
        printf("\n\t价格:  ");
	    scanf("%f",&pNew->price);
        printf("\n\n\t-------------------------------\n\n");
		if(count==1){
			pNew->next=pHead;
			pEnd=pNew;
			pHead=pNew;
		}
		else{
		    pNew->next=NULL;
		    pEnd->next=pNew;
		    pEnd=pNew;
		}
		printf("\t是否继续录入(Y/N):");
		//do{
			ch=getche();
		//}while(toupper(ch)!=('Y'||'N'));
	}    
	return pHead;
}
/* 图书信息读取 */
void readfile()
{
	FILE *fp;
	fp=fopen("library_list.txt","r");
	if(fp==NULL){
		printf("\n\n\t*******库存文件不存在!请创建!\n");
		return;
	}
	fscanf(fp,"%d",&count);
	int index=0;
	Booklist pTemp,pPre;
	pPre=pTemp=(Booklist)malloc(sizeof(BOOK));
	while(index<count){	
	    index++;
	    fscanf(fp,"%ld %s %s %d %s %d-%d-%d %f\n",&pTemp->booknum,pTemp->bookname,pTemp->author,
		                                &pTemp->speciesnumber,pTemp->publishers,
		                                &pTemp->publish_time.year,&pTemp->publish_time.month,
								        &pTemp->publish_time.day,&pTemp->price);
		if(index==1){
			pTemp->next=NULL;
			pPre=pTemp;
			lHead=pPre;
		}
		else{
			pTemp->next=NULL;
			pPre->next=pTemp;
			pPre=pTemp;
		}
    	pTemp=(Booklist)malloc(sizeof(BOOK));
	}
	free(pTemp); 
	fclose(fp);
	printf("\t读取图书信息成功!\n\n");
	printf("\t*************按任意键继续...\n");
	getch();
}
/* 图书信息保存 */
void savefile()
{
	int choice;
	printf("\n\t\t请确认是否保存?\n");
	printf("\n\t\t  *****  1-确认\n");
	printf("\n\t\t  *****  2-取消\n");
	scanf("%d",&choice);
	if(choice==2)    return;
	FILE *fp;
	Booklist pTemp;
    pTemp=lHead;
	fp=fopen("library_list.txt","w");
	fprintf(fp,"%d\n",count);
	if(fp==NULL){
		printf("不能打开该文件! 按任意键退出!\n");
		getch();
		exit(1);
	}
    while(pTemp!=NULL){
		fprintf(fp,"%ld %s %s %d %s %d-%d-%d %f\n",pTemp->booknum,pTemp->bookname,pTemp->author,
		                                  pTemp->speciesnumber,pTemp->publishers,
		                                  pTemp->publish_time.year,pTemp->publish_time.month,
										  pTemp->publish_time.day,pTemp->price);
		pTemp=pTemp->next;
	}
	fclose(fp);
	printf("\t图书信息保存成功!\n\n");
	printf("\t**********按任意键继续...\n");
	getch();
}


功能不包括排序。此系统可以作为基础代码进行修改,可以添加排序、密码等功能,也可以通过添加管理员、学生两个不同的界面设计成简单的图书馆借阅管理系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值