#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本书时,在进行增加时会找不到已删除的具体下标。
实际上应该在删除后,把删除的这本书后的所有元素前移。
*/
}
图书管理增删改查
最新推荐文章于 2024-08-06 10:22:43 发布
文章详细介绍了如何使用C语言编写了一个简单的图书馆管理程序,包括创建图书、根据ID和书名查询、删除书籍以及修改书名的功能。
摘要由CSDN通过智能技术生成