图书管理增删改查

文章详细介绍了如何使用C语言编写了一个简单的图书馆管理程序,包括创建图书、根据ID和书名查询、删除书籍以及修改书名的功能。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

//最大存书量
#define MAXBOOK 100

//图书
typedef struct Book
{
	int bookId;
	char bookName[50];
}Book;

//图书馆
typedef struct MyBooks
{
	Book books[MAXBOOK];
	int currentSize;
}myBooks;


//图书是否已经存在,根据id判断
bool HasBook(int id, myBooks *mb)
{
	for (int i = 0; i < mb->currentSize; i++)
	{
		if (id == mb->books[i].bookId)
			return false;
	}
	return true;
}

//创建图书
void CreateBookData(int id, char *bookName, myBooks *mb)
{
	//所存储图书是否达到上限
	if (mb->currentSize >= MAXBOOK)
	{
		printf("图书已达上限:%d本\n", MAXBOOK);
		return;
	}

	//检查图书id是否存在
	if (!HasBook(id, mb))
	{
		printf("图书id:%d已存在\n", id);
		return;
	}

	//创建图书
	Book bk;
	bk.bookId = id;
	strcpy(bk.bookName, bookName);

	//储到图书馆内
	mb->books[mb->currentSize] = bk;
	mb->currentSize++;
}

//根据id查询书名
char *GetBookNameById(int id, myBooks *mb)
{
	for (int i = 0; i < mb->currentSize; i++)
	{
		if (mb->books[i].bookId == id)
			return mb->books[i].bookName;
	}
	return "没有找到该书";
}

//根据书名查询书id
int GetBookIdByName(char* bName, myBooks *mb)
{
	for (int i = 0; i < mb->currentSize; i++)
	{
		if (strcmp(mb->books[i].bookName, bName) == 0)
		{
			return mb->books[i].bookId;
		}
	}
	return 0;
}

//根据书名删除某一本书
bool DeleteBookByName(char* bName, myBooks *mb)
{
	for (int i = 0; i < mb->currentSize; i++)
	{
		if (strcmp(mb->books[i].bookName, bName) == 0)
		{
			mb->books[i].bookId = -1; //-1表示删除,所有遍历从0开始
			strcpy(mb->books[i].bookName, ""); //清空书名
			mb->currentSize--; //数量-1
			return true;
		}
	}
	return false;
}

//根据id修改书名
bool ModifyNameById(int id, char* newName, myBooks *mb)
{
	for (int i = 0; i < mb->currentSize; i++)
	{
		if (mb->books[i].bookId == id)
		{
			strcpy(mb->books[i].bookName, newName);
			return true;
		}
	}
	return false;
}

int main() {
	myBooks bk;
	bk.currentSize = 0;

	myBooks *mBooks;
	mBooks = &bk;

	for (size_t i = 1; i <= 101; i++)
	{
		char tmpName[50];
		sprintf(tmpName, "%s%d", "book", i);
		char* bName = "book" + i;
		CreateBookData(i, tmpName, mBooks);
	}
	//CreateBookData(1, "book1", mBooks);
	//CreateBookData(2, "book2", mBooks);
	//CreateBookData(3, "book3", mBooks);

	//根据id查书名
	char* bName = GetBookNameById(2, mBooks);
	printf("得到的书名:%s\n", bName);

	//根据书名查id
	int bId = GetBookIdByName("book3", mBooks);
	if (bId == 0)
		printf("没有找到此书");
	else 
		printf("得到的书号:%d\n", bId);
	
	//根据书名删除书
	char* delteName = "book3";
	bool deleted = DeleteBookByName(delteName, mBooks);
	if (deleted)
	{
		printf("删除%s成功\n", delteName);
	}
	else
	{
		printf("删除%s失败\n", delteName);
	}

	//根据id修改书名
	char* newName = "new_book2";
	int modifyId = 2;
	bool isOk = ModifyNameById(modifyId, newName, mBooks);
	if (isOk)
	{
		printf("新书名:%s\n", newName);
	}
	else
	{
		printf("修改书名失败");
	}
	//修改后查询
	char* newBookName = GetBookNameById(modifyId, mBooks);
	printf("最新书名:%s\n", newBookName);


	system("pause");
	return 0;

	/*
	存在问题,当删除一本书时,被删除的书号为 -1, 
	但如果添加到100本书时,在进行增加时会找不到已删除的具体下标。
	实际上应该在删除后,把删除的这本书后的所有元素前移。
	*/
}

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值