C语言课程设计-图书管理系统

  • 需求分析:

  为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询、借书、还书、添加、删除、修改图书信息等。所设计的系统以菜单方式工作,为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中可能出现的异常情况。图书信息包括序号、书名、作者、出版社、数量等。图书信息的录入和显示要求有一定的规范格式,录入的图书信息用文件形式保存,并可以对其进行浏览、查询、修改、删除等基本操作。整个程序实现链表操作,对图书信息的操作逐个地进行,一个图书信息的更改不应影响其他的图书记录。

  • 概要设计:
  • 详细设计:
  1. 设计思想

  整个系统制造的过程中,涉及了较多C语言知识点,对于不同的数据类型、程序控制结构、数据结构作以分析和总结,并结合这个课题进行综合的应用,在一定程度上做到了对所学知识融会贯通。进一步加深、巩固了所学的专业的基本理论知识,培养了综合分析问题、解决问题的能力。在设计程序时,实现了程序的模块化、结构化。在主函数中调用各种子函数,操作界面简单,易操作。

  1. 实现注释

  这个实用的小型图书管理程序以链表操作完成,并实现文件信息的录入和保存等功能,所有信息以磁盘文件方式保存,方便用户使用。实现了图书管理的基本功能,包括了图书的录入、存储、查询、添加、删除、修改、借书、还书等功能。查询时可按书名查询,找到后输出这本书的所有信息。在添加图书信息后,还增加了链表排序操作,并输出整个链表,方便用户检查信息。可查询图书的在库状态,方便用户进行借书、还书操作。在借书还书成功后图书的在库状态改变,并有提示信息让用户保存信息。系统中主要的数据结构就是图书的信息,包含序号、书名、作者、出版社、数量等,在处理过程中各项可以作为一本图书的不同属性来进行处理。

  1. 设计思想

①注册新书,填入图书信息,如序号,书名,作者,出版社,数量

②显示图书信息

③输入书名查询它的信息

④输入序号修改图书信息

⑤输入序号删除图书

⑥输入书名借阅图书

⑦输入借书证号进行还书

⑧退出系统

  • 测试结果:

系统主界面(选择数字进入,退出系统)

程序代码

#include<stdio.h>  //预处理 
#include<string.h>
#include<stdlib.h>
#include<conio.h>

//定义结构体 
struct book
{
	int id;
	char name[31];
	char author[27];
	char publish[31];
	int store;
	int total;
	int user[10];
	int days[10];
}books[100];

//显示整体标题标题函数 
void page_title(char *menu_item)
{
	printf("\t\t********欢迎大家使用长春工业大学图书管理系统********\n\n-%s-\n\n",menu_item);
 } 
//等待返回函数 
void return_confirm()
{
	printf("\n请按任意键返回……\n");
	getch();
} 


 
book_add()
{
	int i;
	system("cls");   //清屏 
	page_title("注册新书"); 
	for(i=0;i<2;i++)
	{
		
		printf("序号:");
		scanf("%d",&books[i].id);
		printf("书名:");
		scanf("%s",&books[i].name); 
		printf("作者:");
		scanf("%s",&books[i].author); 
		printf("出版社:");
		scanf("%s",&books[i].publish); 
		printf("数量:");
		scanf("%d",&books[i].total);
		books[i].store=books[i].total;
		printf("\n"); 
		
		
			
	} 
}


book_show()
{
	int i,flag=0;
	system("cls");
	for(i=0;i<100;i++)
	{     
		if(strlen(books[i].publish)!=0)
		{
			printf("序号:%d\t  ",books[i].id);
			printf("书名:%s\t  ",books[i].name);
			printf("作者:%s\t  ",books[i].author);
			printf("出版社:%s\t  ",books[i].publish);
			printf("存数:%d\t",books[i].store);
			printf("总数:%d\n\n",books[i].total);
			flag=1;
			
		}	
	} 
	
	if(flag==0)
	{
		printf("没有找到相关书籍\n");
		
	}
	
	getch();
	return i;	
}


int book_search()
{
	int n,i,flag=0;
	char nam[30];
	system("cls");
	printf("请输入书名:");
	scanf("%s",&nam);
	for(i=0;i<100;i++)
	{
		if(strcmp(books[i].name,nam)==0)
		{
			printf("序号:%d\t  ",books[i].id);
			printf("书名:%s\t  ",books[i].name);
			printf("作者:%s\t  ",books[i].author);
			printf("出版社:%s\t  ",books[i].publish);
			printf("存数:%d\t",books[i].store);
			printf("总数:%d\n",books[i].total);
			n=i;
			flag=1;
			getch();
			break;
		}	
		
	} 
		
		if(flag==0)
		{
			printf("\n没有找到相关书籍\n");
			getch();
			return -1;
		}
	return n;
}

book_edit()
{
	int i,id_change;
	system("cls");
	page_title("修改图书信息:");
	printf("输入要修改的图书id:");
	scanf("%d",&id_change);
	
	for(i=0;i<100;i++)
	{
		if(books[i].id==id_change)
		{
		
		printf("修改书名:");
		scanf("%s",&books[i].name); 
		printf("修改作者:");
		scanf("%s",&books[i].author); 
		printf("修改出版社:");
		scanf("%s",&books[i].publish); 
		printf("修改数量:");
		scanf("%d",&books[i].total);
		printf("修改图书信息成功\n");
		books[i].store=books[i].total;
		return i; 
		}	
	} 
	
	printf("\n没有找到相关信息\n");
	getch();
	return -1;
}


int book_del()
{
	int i,num,j;
	system("cls");
	page_title("删除图书");
	printf("输入所要删除的书的id:");
	scanf("%d",&num);
	for(i=0;i<100;i++)
	{
		if(books[i].id==num)
		{
			for(j=i;j<100;j++)
			{
				books[j].id=books[j+1].id;
				strcpy(books[j].name,books[j+1].name);
				strcpy(books[j].publish,books[j+1].publish);
				printf("该书已经删除了!!!\n");
				getch();
				return i;
			}
		}	
	} 
	printf("未找到相关记录\n");
	getch();
	return -1;
}




//借书 
book_out()
{
	int n,s,i,d;
	system("cls");
	page_title("借阅图书");
	n=book_search();
	if(n!=-1&&books[n].store>0)
	{
		//赋初值,全为零 
	for(i=0;i<10;i++)
		{
			
				books[n].user[i]=0;
				books[n].days[i]=0;
					
		} 	 
		
		
		
		
		printf("借书证序号:");
		scanf("%d",&s);
		printf("输入可借天数:");
		scanf("%d",&d); 
		
		books[n].user[0]=s;
		books[n].days[0]=d; 
		books[n].store--;	
	
		
	}
	
	else if(n!=-1&&books[n].store==0)
	{
		printf("此书已经完全借完\n\n");
		getch();
	}
	else
			;
	
	
	return_confirm();
}



 //归还图书
void book_in()
{
	int n,s,i;
	page_title("归还图书");
	n=book_search();
	printf("%d",n);
	if(n!=-1&&books[n].store<books[n].total)
	{
		printf("借阅图书证列表\n");
		for(i=0;i<10;i++)
		{
			if(books[n].user!=0)
			{
				printf("[%d]--%d天\n",books[n].user[i],books[n].days[i]);
			}
			printf("输入借书证号:");
			scanf("%d",&s);
			for(i=0;i<10;i++)
			{
				if(books[n].user[i]==s)
				{
					books[n].store++;
				}
			}
		} 
	}
	
	
	if(n!=-1&&books[n].store==books[n].total)
		{
			printf("全部归还\n");
		}
	else if(n!=-1&&books[n].store<books[n].total)
	{
		printf("归还成功\n");
	}
	else 	
			;
	return_confirm();
	
}  








main()
{

	menu:page_title("操作选单");
	 printf("用数字选择操作\n\n");
	 printf("\t\t1注册新书\t\t2显示图书\n");
	 printf("\t\t3查询图书信息\t\t4修改图书信息\n");
	 printf("\t\t5删除图书\t\t6借阅图书\n");
	 printf("\t\t7归还图书\t\t8退出系统\n");
	 printf("请按数字键:\n");
	
	switch(getchar())
	{
		case'1': book_add();break;
		case'2': book_show();break;
		case'3': book_search();break;
		case'4': book_edit();break;
		case'5': book_del();break;
		case'6': book_out();break;
		case'7': book_in();break;
		case'8': exit(0);
		
	}    
	goto menu;
	
	
 } 

#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(); }
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MTXi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值