C语言课程设计图书馆管理系统(西电)

本文档介绍了使用C语言编写的图书馆管理系统,系统分为管理员和读者模式,具备图书借还、查询及信息管理等功能。管理员可进行图书和读者信息的增删改查,读者则能借书、还书和查询图书信息。系统涉及文件操作,实现了对图书和读者数据的管理。
摘要由CSDN通过智能技术生成

 

题目:编写一个程序模拟图书管理系统。用户分为管理员和读者两类,分别显示不同文本格式菜单,通过菜单项对应数字进行选择。读者菜单包括借书、还书、查询等功能。管理员菜单包括图书和读者信息录入、删除、修改和查询。图书信息至少应包括:编号、书名、数量,读者信息至少应包括:编号、姓名、所借图书。可根据图书名称或编号进行图书信息查询,可查询某本书现在被哪些读者借走。

涉及了文件修改操作,可能比较繁琐,考虑的情况比较多,分为管理系统与读者系统。管理系统可分为对读者和图书信息的增加、删除、更改、查阅,读者系统可以进行对图书的借阅、归还和对图书信息的查询。

有问题欢迎交流!

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

typedef struct{
	int ID;
	char name[20];
	int borwNum;
	char borwBook[1000][20];
}Readers;//读者信息 

typedef struct{
	int ID;
	char name[20];
	int totalNum;//馆存数量 
	int leNum;//外借数量 
}Books;//图书信息 

Readers reader[1000];//读者文件 
Books book[1000];//图书文件
	
int stuNum;
int bookNum;
	 
FILE *fp1 = NULL;//读者文件指针 
FILE *fp2 = NULL;//图书文件指针 

char fileName1[]="C:\\Users\\hp\\Desktop\\student.txt"; 
char fileName2[]="C:\\Users\\hp\\Desktop\\book.txt"; 


int BorwBookIndex(char bookName[],char borwBook[][20],int borwNum)//获取读者所借书数组的下标 
{
	int j;
	
	for(j=0;j<borwNum;j++)
	{
		if(strcmp(bookName,borwBook[j])==0)
		{
			return j;
		}
	}
	
	return -1;
}

int IndexMatch(char inputName[],Readers reader[],int stuNum)//根据读者姓名得到其在结构体中的下标 
{
	int i;
	for(i=0;i<stuNum;i++)
	{
		if(strcmp(inputName,reader[i].name)==0)
		{
			return i;
		}
	}
	return -1;
}

int getBookIndex(char bookName[],Books book[],int bookNum)//根据书名得到在结构体中的下标
{
	int i;
	for(i=0;i<bookNum;i++)
	{
		if(strcmp(bookName,book[i].name)==0)
		{
			return i;
		}
	} 
	return -1;
}

void setBoFile(FILE *fp,char fileName[],Books book[])//重写图书文件  
{
	fp = fopen("C:\\Users\\hp\\Desktop\\book.txt","w+");
	int j;
	
	for(j=0;j<bookNum;j++)
	{
		fprintf(fp,"%d %s %d %d\n",book[j].ID,book[j].name,book[j].totalNum,book[j].leNum);
	}
	
	
	fclose(fp);
	fp = NULL;
	
} 

void setReFile(FILE *fp,char fileName[],Readers reader[])//重写读者文件  
{
	fp = fopen("C:\\Users\\hp\\Desktop\\student.txt","w+");//清空文件 
	int i,j;
	char c[1] = "";
	for(i=0;i<stuNum;i++)
	{
		fprintf(fp,"%d %s %d ",reader[i].ID,reader[i].name,reader[i].borwNum);
		int k;
		for(k=0;k<reader[i].borwNum;k++)
		{
			fprintf(fp,"%s ",reader[i].borwBook[k]);	
		}
		fprintf(fp,"%s\n",c);	
		
	}	
	fclose(fp);
	fp = NULL;
	
} 

读者借书

void StuBorrow(FILE *fp1,FILE *fp2,int stuNum,int bookNum)//借书 
{
	fp1 = fopen("C:\\Users\\hp\\Desktop\\student.txt","r+");//以读/写方式打开文件,文件必须存在,打开内容不变 
	fp2 = fopen("C:\\Users\\hp\\Desktop\\book.txt","r+");
	
	int i=0,j,m,num,a=0,k=0,c;
	char putname[30],ch;
	char name[20];
	int num1=book[i].leNum+1;
	printf("\n请输入您的姓名\n");
	scanf("%s",&putname);
	
	int Index = IndexMatch(putname,reader,stuNum);//学生位于结构体的下标 
	
	getchar();
	for(i=0;i<bookNum;i++)
	{
		if((strcmp(putname,reader[i].name))==0)
		{
			k=1;
			if(reader[i].borwNum==20)
				printf("对不起,您借阅的图书已达到上限");
			else
			{
				printf("请输入搜索借阅图书的方式\n");
			    printf("1.输入图书编号借阅\n");
			    printf("2.输入图书名称借阅\n");
		        ch=getchar();
			    switch(ch)
			    {
				    case'1':
				    	printf("请输入你要查询的图书编号\n"); 
				    	scanf("%d",&num);
				    	getchar();
					    for(j=0;j<bookNum;j++) 
					    {
						    if(num==book[j].ID&&book[j].totalNum>book[j].leNum)
						    {
						    	a=1;
						    	printf("您要借阅的书籍是:\n");
						    	printf("%d %s\n",book[j].ID,book[j].name);
						    	printf("确认借阅请输入'1',或按任意键取消操作\n");//任意? 
						    	scanf("%d",&num1);
						    	if (num1==1)
						    	{
						    		printf("借书成功!");	
									
									book[j].leNum++;
									reader[Index].borwNum++;
									strcpy(reader[Index].borwBook[reader[Index].borwNum-1],book[j].name);
									setReFile(fp1,fileName1,reader);
									setBoFile(fp2,fileName2,book);
									
									break; 
								}
						    	else 
						    	{
							     	printf("操作取消\n");
								    break;
							    }
							}
							if(num==book[j].ID&&book[j].totalNum==book[j].leNum)
						    {
						    	printf("对不起,您要借阅的图书已被借完\n");
						    	a=1;
							}
					    }
					    if(a==0)
					    {
					        printf("没有查询到你需要借阅的图书\n"); 
						}
						break;
					case'2':
						printf("请输入你要查询的图书名称\n"); 
						scanf("%s",&name);
						getchar();
						for(a=0,j=0;j<bookNum;j++) 
					    {
						    if(strcmp(name,book[j].name)==0&&book[j].totalNum>book[j].leNum)
						    {
						    	a=1;
						    	printf("您要借阅的书籍是:\n");
						    	printf("%d %s\n",book[j].ID,book[j].name);
						    	printf("确认借阅请输入'1',或按任意键取消操作\n");
						    	scanf("%d",&num1);
						    	if (num1==1)
						    	{
						    		printf("借书成功!");
						    		
						    		book[j].leNum++;
									reader[Index].borwNum++;
									strcpy(reader[Index].borwBook[reader[Index].borwNum-1],book[j].name);
									setReFile(fp1,fileName1,reader);
									setBoFile(fp2,fileName2,book);
									
						    		break; 
								}
						    	else 
						    	{
							     	printf("操作取消\n");
								    break;
							    }
						    }
 							if(strcmp(name,book[j].name)==0&&book[j].totalNum==book[j].leNum)
						    {
						    	printf("对不起,您要借阅的图书已被借完\n");
						    	a=1;
						    	break;
							}
					    }
					    if(a==0)
					    {
					    	printf("没有查询到你需要借阅的图书\n"); 
						}	
						break;
				}
			} 

		}
	}
	if(k==0) printf("对不起,查无此人\n");	
	fclose(fp1);
	fclose(fp2);
	fp1 = NULL;
	fp2 = NULL;
} 

读者还书

void StuReturn()//还书 
{
	int i,j,num,num1;
	char putname[20],name[20],ch;
	
	printf("\n请输入您的姓名\n");
	scanf("%s",&putname);
	getchar();
	int Index = IndexMatch(putname,reader,stuNum);//学生位于结构体的下标 
	for(i=0;i<stuNum;i++)//bookNum??
	{
		if((strcmp(putname,reader[i].name))==0)
		{
			if(reader[i].borwNum==0)
			{
				printf("您还未借阅图书");
			}
			else
			{
				printf("请输入搜索应还图书的方式\n");
			    printf("1.输入图书编号\n&
#include #include #include typedef struct { char number[10];//书号 char name[20];//书名 char author[20];//作者 char publish[50];//出版社 char time[20];//出版时间 float price; }mbook; typedef struct { int count;//书的本数 mbook book[100];//最大可有100本书 }mlibrary; mlibrary library; void save()//保存图书信息。 { FILE *fp; if((fp=fopen("library.doc","w"))==NULL) { printf("\n不能保存图书信息\n"); return; } fwrite(&library.count,sizeof(int),1,fp); fwrite(library.book,sizeof(library.book[0]),library.count,fp); } void putin() /*定义录入函数*/ { int y=1; system("cls"); while(y) { printf("\t请输入您的书籍的书号:"); scanf("%s",library.book[library.count].number); printf("\t请输入书名:"); scanf("%s",library.book[library.count].name); printf("\t请输入作者名:"); scanf("%s",library.book[library.count].author); printf("\t请输入出版社:"); scanf("%s",library.book[library.count].publish); printf("\t请输入出版时间:"); scanf("%s",library.book[library.count].time); printf("\t请输入该书的价格:"); fflush(stdin); scanf("%f",&library.book[library.count].price); library.count++; printf("\n是否继续录入(1.继续;0,退出录入):"); fflush(stdin); scanf("%d",&y); if (y!=1) { y=0; break; } } save(); } void lookup() { system("cls"); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for ( i=0;i<library.count;i++) { printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); } fflush(stdin); getchar(); } void search_by_name() /*定义按书名查询*/ { char s2[20]; int flag=1; printf("\n请输入要查询的书名: "); fflush(stdin); scanf("%s",s2); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for( i=0;i<library.count;i++ ) if(strcmp(s2,library.book[i].name)==0) { flag=0; printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); } if (flag) { printf("cannot found!"); } fflush(stdin); getchar(); } void search_by_author() /*定义按作者名查询*/ { char s3[20]; int flag=1; printf("请输入要查询的书的作者: "); fflush(stdin); scanf("%s",s3); printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); int i ; for( i=0;i<library.count;i++ ) if(strcmp(s3,library.book[i].author)==0) { flag=0; printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); } if (flag) { printf("cannot found!"); } fflush(stdin); getchar(); } void search() /*定义查询函数*/ { int a; system("cls"); /*进行清屏*/ printf("\t\t******************************\n"); printf("开始查询\n"); printf("\t\t\t1---------------search_by_name\n"); printf("\t\t\t2---------------search_by_writer\n"); printf("\t\t\t0---------------exit\n"); printf("\t\t******************************\n") ; printf("\t\t请选择你想要的查询方式:"); fflush(stdin); scanf("%d",&a); switch(a) { case 1: search_by_name(); break; case 2: search_by_author(); break; case 0: return; } } void del() /*定义删除函数*/ { char number[10]; system("cls"); /*清屏*/ printf("\n Please type in the number of the book you want to delete:"); fflush(stdin); scanf("%s",number); int i; for (i=0;i<library.count;i++) { if(strcmp(number,library.book[i].number)==0)break; } if (i!=library.count) { for(;i<library.count-1;i++) { strcpy(library.book[i].name,library.book[i+1].name); strcpy(library.book[i].number,library.book[i+1].number); strcpy(library.book[i].publish,library.book[i+1].publish); strcpy(library.book[i].author,library.book[i+1].author); strcpy(library.book[i].time,library.book[i+1].time); library.book[i].price=library.book[i+1].price; } library.count--; } else printf("\n cannot found!\n"); save(); fflush(stdin); getchar(); } void update()//修改图书信息 { char number[10]; system("cls"); /*清屏*/ printf("\n Please type in the number of the book you want to delete:"); fflush(stdin); scanf("%s",number); int i; for (i=0;i<library.count;i++) { if(strcmp(number,library.book[i].number)==0) { printf("图书号\t图书名\t作者名\t出版社\t出版日期\t图书价格\n"); printf("%s\t%s\t%s\t%s\t%s\t%6.2f\n",library.book[i].number,library.book[i].name,library.book[i].author,library.book[i].publish,library.book[i].time,library.book[i].price); break; } } if (i!=library.count) { mbook book; printf("\n\t\t请输入修改后此图书的信息\n"); printf("\t请输入图书号:"); scanf("%s",book.number); printf("\t请输入图书名:"); scanf("%s",book.name); printf("\t请输入作者名:"); scanf("%s",book.author); printf("\t请输入出版社:"); scanf("%s",book.publish); printf("\t请输入出版时间:"); scanf("%s",book.time); printf("\t请输入该书的价格:"); fflush(stdin); scanf("%f",&book.price); strcpy(library.book[i].name,book.name); strcpy(library.book[i].number,book.number); strcpy(library.book[i].publish,book.publish); strcpy(library.book[i].author,book.author); strcpy(library.book[i].time,book.time); library.book[i].price=book.price; save(); } else printf("\n cannot found!\n"); fflush(stdin); getchar(); } void main() { FILE *fp; if((fp=fopen("library.doc","r"))==NULL) { printf("\n不能打开图书信息库\n"); fp=fopen("library.doc","w+"); printf("\n初始化图书信息库,初始化之后要重启程序\n"); library.count=0; fwrite(&library.count,sizeof(int),1,fp); fclose(fp); return; } fread(&library.count,sizeof(int),1,fp); fread(library.book,sizeof(library.book[0]),library.count,fp); fclose(fp); int a; do { system("cls"); printf("\n\n\n\n\n\t\t\t\t图书信息管理系统\t\t\t\t\n"); printf("\t\t*********************************************\n"); printf("\t\t\t1 ------------------图书信息录入\n"); printf("\t\t\t2 ------------------图书信息浏览\n"); printf("\t\t\t3 ------------------图书信息查询\n"); printf("\t\t\t4 ------------------图书信息删除\n"); printf("\t\t\t5 ------------------图书信息修改\n"); printf("\t\t\t0 -----------------退出图书信息系统\n"); printf("\t\t*********************************************\n"); printf("\t\tPlease Enter Choose: "); fflush(stdin); scanf("%d",&a); switch(a) { case 1: putin(); break; case 2: lookup(); break; case 3: search(); break; case 4: del(); break; case 5: update(); break; case 0: printf("\n\n退出\n\n"); break; default: printf("\n序号不对\n"); } }while(a!=0); save(); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值