C语言之图书管理系统(功能齐全!!!)

C语言之图书管理系统(功能齐全!!!)【主要内容】开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询按照价钱排序按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简…

 

【主要内容】

开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)。使之能提供以下基本功能:

(1)图书信息录入功能(图书信息用文件保存)--输入

(2)图书信息浏览功能--输出

(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):

①按书名查询 ②按作者名查询 按照价钱排序 按出版时间排序等等

(4)图书信息的删除与修改

扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加上学生信息,并扩充为图书借阅系统。(4)模糊查询 (5)综合查询 (6)统计功能 比如统计处某一类别的图书信息 或 筛选出小于指定数量库存的图书信息等等。

【概要设计】

1 图书录入可以录入图书名,作者,出版社,出版日期,价格!录入图书编号时函数就会判断此编号是否存在,若存在不能成功录入!

2 图书浏览可以浏览全部图书!

3 图书查询提供按图书编号模糊查询,按图书名关键字查询,按图书编号精确查询,按图书名精确查询!模糊查询和关键字查询事通过比价字符串的相似度而实现的!

4 修改删除图书可以通过图书查询来查询操作的图书编号,通过编号操作!函数会提示用户是否调用图书查询来找到自己想要操作的图书的编号。如果某一本图书已经被借阅那么用户就不能删除该图书!

5 借阅图书通过学号和图书编号进行借阅!如果该学号是第一次借阅那么会提示用户输入自己的姓名,并存入student.txt,方便以后借阅与归还!

6 归还图书先提供学号,然后程序会输出该学号借阅的所有图书,然后再通过编号归还!

7 借阅查询可查询某个学生已借但未归还的图书!

 

【代码如下】(运行结果省略)

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>	
FILE *fp,*fpj,*fps;
int i,xuan;
typedef struct book{
	char name[10];
	char num[10];
	char writer[10];
	int date;
	char press[10];
	float price;
	char leibie[10];
	int kucun;
	int jiechu;
}bo;
typedef struct student{
	char name[10];
	char num[10];
	int jie;
}st;
typedef struct jieyue{
	char snum[10];
	char bnum[10];
}ji;
void menu()//菜单
{
	printf("\n\n");
	for(i=0;i<80;i++)
		printf("#");
	printf("\n\n");	
	printf("\t\t1-----图书录入\t\t\t");
	printf("2-----图书浏览\n\n");
	printf("\t\t3-----图书查询\t\t\t");
	printf("4-----修改删除图书\n\n");
	printf("\t\t5-----借阅图书\t\t\t");
	printf("6-----归还图书\n\n");
	printf("\t\t7-----借阅查询\t\t\t\n");
	printf("\n\t\t\t\t输入其他任意键退出\n");
	printf("\n\n");
	for(i=0;i<80;i++)
		printf("#");
	printf("\n\n");
}
void end()//录入图书
{
	bo boo,booq;
	printf("请输入图书名(最多十个字符):");
	scanf("%s",boo.name);
	do{
		i=1;
		printf("请输入图书编号(最多十个字符):");
		scanf("%s",boo.num);
		fread(&booq,sizeof(bo),1,fp);
		while(!feof(fp)){
			if(strcmp(booq.num,boo.num)==0){
				printf("\n该编号已存在请重新输入\n\n");
				i=0;
				break;
			}
			fread(&booq,sizeof(bo),1,fp);
		}
		rewind(fp);
	}while(i==0);
	printf("请输入图书作者(最多十个字符):");
	scanf("%s",boo.writer);
	printf("请输入图书出版日期(例如2001年5月3日出版则输入20010503):");
	scanf("%d",&boo.date);
	printf("请输入图书价格:");
	scanf("%f",&boo.price);
	printf("请输入图书出版社(最多十个字符):");
	scanf("%s",boo.press);
	printf("请输入图书类别(最多十个字符):");
	scanf("%s",boo.leibie);
	printf("请输入图书入库数:");
	scanf("%d",&boo.kucun);
	boo.jiechu=0;
	getchar();
	fseek(fp,0,2);
	fwrite(&boo,sizeof(bo),1,fp);
	printf("\n录入成功!回到主菜单");
	system("pause");
}
void print()//浏览图书
{
	bo boo;
	printf("书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
	fread(&boo,sizeof(bo),1,fp);
	while(feof(fp)==0){
		printf("%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
		fread(&boo,sizeof(bo),1,fp);
		}
	printf("\n浏览图书完毕!回到主菜单");
	system("pause");
}
int dui(char *p,char *p1)//对比两个字符串的相关度(用于精确搜索)
{
	int bao=0,fan=1;
	for(i=0;i<(int)strlen(p1);i++){
		if(p[0]==p1[i]){
			bao=i;
			break;
		}
	}
	if((int)strlen(p)>(int)strlen(p1)-bao+1)
		return 0;
	else
		for(i=0;i<(int)strlen(p);i++){
			if(p[i]!=p1[bao+i])
				fan=0;
		}
		return fan;
}
void find()//查询图书
{
	char hao[10];
	int fan=1;
	int bian=1;
	bo boo;
	printf("请选择查询类型:\n\n\t\t1-按图书编号模糊查询     2-按图书名关键字查询\n");
	printf("                \n\t\t3-按图书编号精确查询     4-按图书名精确查询\n\n代码:");
	scanf("%d",&xuan);
	if(xuan==1){
		printf("请输入编号(最多十个字符):");
		scanf("%s",hao);
		printf("序号 书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
		fread(&boo,sizeof(bo),1,fp);
		while(!feof(fp)){
			fan=dui(hao,boo.num);
			if(fan==1){
				printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
				bian++;}
			fread(&boo,sizeof(bo),1,fp);
		}
	}
	else if(xuan==2){
		printf("请输入图书名关键字(最多十个字符):");
		scanf("%s",hao);
		printf("序号 书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
		fread(&boo,sizeof(bo),1,fp);
		while(!feof(fp)){
			fan=dui(hao,boo.name);
			if(fan==1)
				printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
			fread(&boo,sizeof(bo),1,fp);
		}
	}
	else if(xuan==4){
		printf("请输入图书名(最多十个字符):");
		scanf("%s",hao);
		printf("序号 书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
		while(!feof(fp)){
			if(strcmp(hao,boo.name)==0)
				printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
			fread(&boo,sizeof(bo),1,fp);
		}

	}
	else if(xuan==3){
		printf("请输入图书编号(最多十个字符):");
		scanf("%s",hao);
		printf("序号 书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
		while(!feof(fp)){
			if(strcmp(hao,boo.num)==0)
				printf("%-5d%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",bian,boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
			fread(&boo,sizeof(bo),1,fp);
		}

	}
	else{
		printf("输入错误,正在退出!");
		system("pause");
		return;
	}
	printf("\n查询图书完毕! ");
	system("pause");
}
void del()//修改删除图书
{
	FILE *p;
	ji jie;
	int j=0;
	char num[10];
	bo boo,booq;
	int xu;
	char or;
	char cha[10];
	printf("\n删除修改图书只能通过图书编号来完成!\n是否调用图书查询来查询你要操作的图书编号(Y/N)\n");
	getchar();
	scanf("%c",&or);
	if(or=='Y'||or=='y'){
		find();
		rewind(fp);}
	printf("\n请输入你要操作的图书的编号(如果输入错误的编号,将不做任何操作):");
	scanf("%s",cha);
	fread(&jie,sizeof(ji),1,fpj);
	while(!feof(fpj)){
		if(strcmp(jie.bnum,cha)==0){
			printf("\n这本书已有人借阅,不能操作!\n正在退出 ");
			system("pause");
			return;
		}
		fread(&jie,sizeof(ji),1,fpj);
	}
	printf("\n\n1-删除图书   2-修改图书\n\n");
	printf("请选择操作类型:");
	scanf("%d",&xuan);
	fread(&boo,sizeof(bo),1,fp);
	p=fopen("c:\\books1.txt","wb+");
	while(!feof(fp)){
		j++;
		if(strcmp(boo.num,cha)==0){	
			if(xuan==2){			
				printf("\n\n1-书名    2-编号    3-作者    4-价格    5-出版社   6-类别    7-库存\n\n");
				printf("请选择要修改的项目:");
				scanf("%d",&xu);
				if(xu==1){
					printf("你要把%s改为:",boo.name);
					scanf("%s",boo.name);}
				else if(xu==2){
					do{
						i=1;
						printf("你要把%s改为:",boo.num);
						scanf("%s",num);
						rewind(fp);
						fread(&booq,sizeof(bo),1,fp);
						while(!feof(fp)){
							if(strcmp(booq.num,num)==0){
								printf("\n该编号已存在请重新输入\n\n");
								i=0;
								break;
							}
							fread(&booq,sizeof(bo),1,fp);
						}
					}while(i==0);
						rewind(fp);
					for(i=0;i<j;i++){
						fread(&boo,sizeof(bo),1,fp);
						strcpy(boo.num,num);
					}
				}
				else if(xu==3){
					printf("你要把%s改为:",boo.writer);
					scanf("%s",boo.writer);}
				else if(xu==4){
					printf("你要把%.2f改为:",boo.price);
					scanf("%f",&boo.price);}
				else if(xu==5){
					printf("你要把%s改为:",boo.press);
					scanf("%s",boo.press);}
				else if(xu==6){
					printf("你要把%s改为:",boo.leibie);
					scanf("%s",boo.leibie);}
				else if(xu==7){
					printf("你要把%d改为:",&boo.kucun);
					scanf("%d",&boo.kucun);}
				fwrite(&boo,sizeof(bo),1,p);
			}
		}
		else
			fwrite(&boo,sizeof(bo),1,p);
		fread(&boo,sizeof(bo),1,fp);
	}
	fclose(p);
	p=fopen("c:\\books1.txt","rb+");
	fclose(fp);
	fp=fopen("c:\\book.txt","wb+");
	fread(&boo,sizeof(bo),1,p);
	while(!feof(p)){
		fwrite(&boo,sizeof(bo),1,fp);
		fread(&boo,sizeof(bo),1,p);	
	}
	fclose(fp);
	printf("操作成功   回到主菜单");
	system("pause");
}
void lend()//借阅图书
{
	bo boo;
	FILE *p;
	st stu;
	ji jie;
	int j=0;
	char or,num[10],xnum[10];
	printf("\n借阅图书只能通过图书编号完成!\n是否调用图书查询来查询你要操作的图书编号(Y/N)\n");
	getchar();
	scanf("%c",&or);
	if(or=='Y'||or=='y')
		find();
	printf("\n请输入你要借阅的图书的编号:");
	scanf("%s",num);
	fread(&boo,sizeof(bo),1,fp);
	while(!feof(fp)){
		if(strcmp(num,boo.num)==0){
			j=1;
			break;		
		}
		fread(&boo,sizeof(bo),1,fp);
	}
	if(j==0){
		printf("\n书库没有该图书 正在退出\n");
		system("pause");
		return;
	}
	printf("\n你需要借阅的图书是:\n");
	printf("书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
	printf("%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
	if(boo.kucun==boo.jiechu){
		printf("\n该册图书已全部借出!正在退出\n");
		system("pause");
		return;
	}
	printf("\n请输入你的学号:");
	scanf("%s",xnum);
	j=0;
	fread(&jie,sizeof(ji),1,fpj);
	while(!feof(fpj)){
		if((strcmp(jie.bnum,num)==0)&&(strcmp(jie.snum,xnum)==0)){
			j=1;
			break;		
		}
		fread(&jie,sizeof(ji),1,fpj);
	}
	if(j==1){
		printf("\n你已经借阅过该书  正在退出\n");
		system("pause");
		return;
	}
	fread(&stu,sizeof(st),1,fps);
	j=0;
	while(!feof(fps)){
		if(strcmp(xnum,stu.num)==0){
			j=1;
			break;
		}
		fread(&stu,sizeof(st),1,fps);
	}
	if(j==0){
		printf("\n你是第一次借阅图书,为了方便管理请输入你的姓名:");
		scanf("%s",stu.name);
		strcpy(stu.num,xnum);
		stu.jie=1;
		fseek(fps,0,2);
		fwrite(&stu,sizeof(st),1,fps);
	}
	else{
		if(stu.jie==5){//这里可以控制每个学生最多借几本书
			printf("\n你已经借了5本书,不能再借\n");
			system("pause");
			return;}
		p=fopen("c:\\jie.txt","wb+");
		rewind(fps);
		fread(&stu,sizeof(st),1,fps);
		while(!feof(fps)){
			if(strcmp(xnum,stu.num)==0)
				stu.jie++;
		fwrite(&stu,sizeof(st),1,p);
		fread(&stu,sizeof(st),1,fps);
		}
		fclose(p);
		fclose(fps);	
		p=fopen("c:\\jie.txt","rb+");
		fps=fopen("c:\\student.txt","wb+");
		fread(&stu,sizeof(st),1,p);
		while(!feof(p)){
			fwrite(&stu,sizeof(st),1,fps);
			fread(&stu,sizeof(st),1,p);	
		}
	}
	strcpy(jie.bnum,num);
	strcpy(jie.snum,xnum);
	fseek(fpj,0,2);
	fwrite(&jie,sizeof(ji),1,fpj);
	rewind(fp);
	p=fopen("c:\\jie.txt","wb+");
	fread(&boo,sizeof(bo),1,fp);
	while(!feof(fp)){
		if(strcmp(num,boo.num)==0)
			boo.jiechu++;
		fwrite(&boo,sizeof(bo),1,p);
		fread(&boo,sizeof(bo),1,fp);
	}
	fclose(p);
	p=fopen("c:\\jie.txt","rb+");
	fclose(fp);
	fp=fopen("c:\\book.txt","wb+");
	fread(&boo,sizeof(bo),1,p);
	while(!feof(p)){
		fwrite(&boo,sizeof(bo),1,fp);
		fread(&boo,sizeof(bo),1,p);	
	}
	printf("\n借阅成功!回到主菜单");
	system("pause");
}

void huan(){//归还图书
	FILE *p;
	bo boo;
	ji jie;
	st stu;
	int j=0;
	char snum[10],bnum[10];
	i=0;
	printf("\n请输入你的学号:");
	scanf("%s",snum);
	printf("\n你借阅了以下图书\n");
	fread(&jie,sizeof(ji),1,fpj);
	printf("书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
	while(!feof(fpj)){
		if(strcmp(jie.snum,snum)==0){
			fread(&boo,sizeof(bo),1,fp);
			while(!feof(fp)){
				if(strcmp(jie.bnum,boo.num)==0){
					printf("%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
					j=1;
				}
				fread(&boo,sizeof(bo),1,fp);
			}
		}
		fread(&jie,sizeof(ji),1,fpj);
	}
	if(j==0){
		printf("\n你没有借阅任何图书!\n\n正在退出");
		system("pause");
		return;
	}
	rewind(fp);
	rewind(fpj);
	printf("\n请输入你归还的图书的编号:");
	scanf("%s",bnum);
	fread(&jie,sizeof(jie),1,fpj);//改变jieyue.txt里的数据
	p=fopen("c:\\jie.txt","wb+");
	while(!feof(fpj)){
		if((strcmp(jie.bnum,bnum)==0)&&(strcmp(jie.snum,snum)==0))
			i=1;
		else 
			fwrite(&jie,sizeof(jie),1,p);
		fread(&jie,sizeof(jie),1,fpj);
	}
	if(i==0){
		printf("\n你没有借过该图书\n正在退出");
		system("pause");
		return;
	}
	fclose(p);
	fclose(fpj);	
	p=fopen("c:\\jie.txt","rb+");
	fpj=fopen("c:\\jieyue.txt","wb+");
	fread(&jie,sizeof(ji),1,p);
	while(!feof(p)){
		fwrite(&jie,sizeof(ji),1,fpj);
		fread(&jie,sizeof(ji),1,p);	
	}
	fclose(p);//改变book.txt里的数据
	p=fopen("c:\\jie.txt","wb+");
	fread(&boo,sizeof(bo),1,fp);
	while(!feof(fp)){
		if(strcmp(bnum,boo.num)==0)
			boo.jiechu--;
		fwrite(&boo,sizeof(bo),1,p);
		fread(&boo,sizeof(bo),1,fp);
	}
	fclose(p);
	p=fopen("c:\\jie.txt","rb+");
	fclose(fp);
	fp=fopen("c:\\book.txt","wb+");
	fread(&boo,sizeof(bo),1,p);
	while(!feof(p)){
		fwrite(&boo,sizeof(bo),1,fp);
		fread(&boo,sizeof(bo),1,p);	
	}
	fclose(p);//改变student.txt里的数据
	p=fopen("c:\\jie.txt","wb+");
	rewind(fps);
	fread(&stu,sizeof(st),1,fps);
	while(!feof(fps)){
		if(strcmp(snum,stu.num)==0)
			stu.jie--;
		fwrite(&stu,sizeof(st),1,p);
		fread(&stu,sizeof(st),1,fps);
	}
	fclose(p);
	fclose(fps);	
	p=fopen("c:\\jie.txt","rb+");
	fps=fopen("c:\\student.txt","wb+");
	fread(&stu,sizeof(st),1,p);
	while(!feof(p)){
		fwrite(&stu,sizeof(st),1,fps);
		fread(&stu,sizeof(st),1,p);	
	}
	printf("\n归还成功!回到主菜单");
	system("pause");
}
void cha(){//借阅查询
	char num[10];
	bo boo;
	ji jie;
	printf("\n请输入你的学号:");
	scanf("%s",num);
	fread(&jie,sizeof(ji),1,fpj);
	printf("书名      编号      作者      价格      出版社    类别      原始库存  借出\n");
	while(!feof(fpj)){
		if(strcmp(jie.snum,num)==0){
			fread(&boo,sizeof(bo),1,fp);
			while(!feof(fp)){
				if(strcmp(jie.bnum,boo.num)==0)
					printf("%-10s%-10s%-10s%-10.2f%-10s%-10s%-10d%-4d\n",boo.name,boo.num,boo.writer,boo.price,boo.press,boo.leibie,boo.kucun,boo.jiechu);
				fread(&boo,sizeof(bo),1,fp);
			}
		}
		fread(&jie,sizeof(ji),1,fpj);
	}
	printf("\n查询完毕!回到主菜单");
	system("pause");
}
main(){
	if((fp=fopen("c:\\book.txt","rb+"))==NULL){
		printf("在c盘根目录下没有找到储存图书信息的book.txt文件\n请选择  1--手动导入!  2--创建此文件\n");
		scanf("%d",&xuan);
		switch(xuan){
		case 2:if((fp=fopen("c:\\book.txt","wb+"))!=NULL)
				   printf("创建成功\n\n");
			break;
		case 1:printf("请把名为book.txt的文件复制到c盘根目录下\n\n");
		}
	}
	if((fpj=fopen("c:\\jieyue.txt","rb+"))==NULL){
		printf("在c盘根目录下没有找到储存借阅信息的jieyue.txt文件\n请选择  1--手动导入!  2--创建此文件\n");
		scanf("%d",&xuan);
		switch(xuan){
		case 2:if((fpj=fopen("c:\\jieyue.txt","wb+"))!=NULL)
				   printf("创建成功\n\n");
			break;
		case 1:printf("请把名为jieyue.txt的文件复制到c盘根目录下\n\n");
		}
	}
	if((fps=fopen("c:\\student.txt","rb+"))==NULL){
		printf("在c盘根目录下没有找到储存学生信息的student.txt文件\n请选择  1--手动导入!  2--创建此文件\n");
		scanf("%d",&xuan);
		switch(xuan){
		case 2:if((fps=fopen("c:\\student.txt","wb+"))!=NULL)
				   printf("创建成功\n\n");
			break;
		case 1:printf("请把名为student.txt的文件复制到c盘根目录下\n\n");
		}
	}
	menu();
	printf("\n  代码:");
	scanf("%d",&xuan);		
	while(xuan==1||xuan==2||xuan==3||xuan==4||xuan==5||xuan==6||xuan==7){
		fp=fopen("c:\\book.txt","rb+");
		fps=fopen("c:\\student.txt","rb+");
		fpj=fopen("c:\\jieyue.txt","rb+");
		switch(xuan){
		case 0:break;
		case 1:end();break;
		case 2:print();break;
		case 3:find();break;
		case 4:del();break;
		case 5:lend();break;
		case 6:huan();break;
		case 7:cha();break;
		}
		fclose(fp);
		fclose(fpj);
		fclose(fps);
		menu();
	printf("\n  代码:");
	scanf("%d",&xuan);
	}

}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35046.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注