1.课程目的

本程序旨在训练学生的C语言基本编程能力,通过串联C语言输入输出、循环语句、子函数设计、数组、结构体等知识点,完成一个简单系统的设计开发。

2.系统功能

(1)通过菜单的形式实现人机交互界面
(2)实现录入图书基本信息
(3)实现删除指定图书的基本信息
(4)实现修改指定图书的基本信息
(5)实现查询指定图书的基本信息

3.设计思想

(1)人机交互界面
使用printf()和scanf()输入输出函数设计出主界面交互菜单,通过switch case语句判断输入的选项值,执行相对应得子函数。
每一个选项执行完毕,需要考虑清屏(system(“cls”);),然后重新显示主界面,供用户下一次操作。
设计程序退出菜单选项,用户执行其选项后,需要使用C语言文件操作,保存当前录入得全部图书信息。
程序启动时需要打开上次保存得数据文件,读入到内存中,如果没有则新建一个文件用于程序退出时保存数据。
人机交互界面可以自己设计,可以加上开发者信息,体现每个学生的差异。
展示如下:
在这里插入图片描述
2)添加图书信息
设计为单独的子函供主函数调用。
定义一个结构体类型,包括七个成员变量(图书编号,图书名,作者名,出版单位,数量),并用该类型定义一个全局的结构体数组,供外部录入图书信息时存储
//定义一个全局变量来存储当前学生个数。
添加图书信息时,需要从外部读入图书的图书编号,图书名,作者名,出版单位,数量,在获取图书编号时需要判断是否输入重复,图书个数变量加一,并根据当前图书个数将其保存在结构体数组对应序号的元素中。
一个图书信息录入结束后可以提示用户输入Y/N来选择是否接着输入下一个图书。

(3)显示全部图书信息
通过对当前结构体数组进行遍历,并显示输出
展示如下:

在这里插入图片描述
4)查找单个图书
根据输入需要查找图书名,遍历当前结构体数组,判断是否含有一致图书名的元素,若有则显示输出对应的信息和成绩,否则显示无此书籍。
显示如下:
在这里插入图片描述
(5)修改图书信息
根据输入需要查找图书的编号,遍历当前结构体数组,判断是否含有一致编号的元素,
若有则依次从外部读入用户所修改的值,保存到对应成员变量中。
展示如下:
在这里插入图片描述
(6)删除指定图书
根据输入需要查找图书的编号,遍历当前结构体数组,判断是否含有一致图书名称的元素,若有则从该元素之后依次将下一个元素赋值到上一个元素,直至最后一个赋值完成,最后当前图书个数变量减一。
显示如下:
在这里插入图片描述
(7)借阅图书
通过对当前结构体数组进行遍历,并显示输出
显示如下:
在这里插入图片描述
(8)归还图书
通过对当前结构体数组进行遍历,并显示输出
显示如下:
在这里插入图片描述
全部代码如下

#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();
} 

void book_add()
{void page_title(char *menu_item);
	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"); 		
	} 
	//return 0;
}

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()
{void page_title(char *menu_item); 
	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--;	
	
//		书上这有何意义 
//		for(i=0;i<10;i++)
//		{
//			if(books[n].user[i]==0)
//			{
//				books[n].user[i]=0;
//				books[n].days[i]=0;
//				break;
//			}
//			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;
 } 
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐