二 加强门户网站建设,北京网站设计济南兴田德润团队怎么样,网站外地备案,怎么做自己地网站这篇文章介绍了一个基本的图书管理系统的实现#xff0c;它允许用户添加、插入、删除、修改、显示和查询图书的功能。该系统通过使用二进制文件将图书信息保存到磁盘#xff0c;并且在程序启动时能够加载已保存的图书信息。
介绍
在计算机科学中#xff0c;图书管理系统是…这篇文章介绍了一个基本的图书管理系统的实现它允许用户添加、插入、删除、修改、显示和查询图书的功能。该系统通过使用二进制文件将图书信息保存到磁盘并且在程序启动时能够加载已保存的图书信息。
介绍
在计算机科学中图书管理系统是一种用于管理和维护图书馆或个人藏书的系统。它可以帮助用户记录、跟踪和查找图书信息。图书管理系统通常包括一系列功能如添加、删除、修改、查询和显示图书等以提高图书的管理效率。
功能项解释
添加书籍用户可以输入书籍的标题、作者和出版年份然后将图书信息添加到系统中。添加的图书信息将被保存到磁盘文件中。插入书籍用户可以选择一个位置将书籍插入到指定位置。插入书籍时系统会将后面的书籍向后移动一个位置。插入书籍后系统会将修改后的图书信息保存到磁盘文件中。删除书籍用户可以选择要删除的书籍位置然后系统将删除该位置上的书籍并将后面的书籍向前移动一个位置。删除后的图书信息将被保存到磁盘文件中。修改书籍用户可以选择要修改的书籍位置然后输入新的标题、作者和出版年份进行修改。修改后的图书信息将被保存到磁盘文件中。显示书籍系统将显示已添加的所有图书信息。如果没有添加任何图书系统将显示相应提示信息。查询书籍用户可以根据输入内容逐一匹配图书标题、作者和年份在符合条件的图书中查询。查询结果将显示所有符合条件的图书信息。
相关知识点解释
在这个图书管理系统中使用了结构体struct来存储每本书的信息。结构体是一种自定义的数据类型它可以包含不同类型的数据例如字符串和整数。在这个系统中Book 结构体包含了书籍的标题title、作者author和出版年份year。
文件操作也是这个系统的关键特性之一。文件是计算机存储数据的一种方式它可以将数据长久地保存在磁盘上。在这个系统中通过使用文件操作函数如 fopen、fwrite 和 fread将图书信息保存到名为 “library.dat” 的二进制文件中以及从该文件读取已保存的图书信息并加载到程序中。具体来说使用二进制模式“wb” 或 “rb”打开文件来进行写入和读取操作。
另外这个系统中使用了循环和条件语句来实现不同的功能。通过使用循环如 do-while 循环使程序能够反复执行一系列操作直到用户选择退出。通过使用条件语句如 switch-case 语句根据用户选择的功能选项执行相应的操作。
代码解析
#include stdio.h
#include stdlib.h
#include string.h由于程序中使用了标准输入输出库stdio.h、标准库stdlib.h和字符串库string.h因此需要包含这些库的头文件。
typedef struct {char title[100];char author[100];int year;
} Book;定义了一个名为 Book 的结构体类型包含了三个成员变量title标题、author作者和 year年份。这个结构体类型用于存储图书的信息。
void addBook(Book *books, int *count) {// ...
}定义了一个名为 addBook 的函数用于添加书籍。这个函数接受两个参数指向 Book 结构体数组的指针books和指向整数变量的指针count。
void insertBook(Book *books, int *count) {// ...
}定义了一个名为 insertBook 的函数用于插入书籍。这个函数同样接受两个参数指向 Book 结构体数组的指针books和指向整数变量的指针count。
void deleteBook(Book *books, int *count) {// ...
}定义了一个名为 deleteBook 的函数用于删除书籍。这个函数同样接受两个参数指向 Book 结构体数组的指针books和指向整数变量的指针count。
void modifyBook(Book *books, int count) {// ...
}定义了一个名为 modifyBook 的函数用于修改书籍。这个函数接受两个参数指向 Book 结构体数组的指针books和整数变量count。
void displayBooks(Book *books, int count) {// ...
}定义了一个名为 displayBooks 的函数用于显示书籍。这个函数接受两个参数指向 Book 结构体数组的指针books和整数变量count。
void searchBooks(Book *books, int count) {// ...
}定义了一个名为 searchBooks 的函数用于查询书籍。这个函数接受两个参数指向 Book 结构体数组的指针books和整数变量count。
int main() {// ...
}定义了一个 main 函数它是程序的主函数程序从这里开始执行。
完整代码如下
#include stdio.h
#include stdlib.h
#include string.htypedef struct {char title[100];char author[100];int year;
} Book;void addBook(Book *books, int *count) {char title[100];char author[100];int year;printf(请输入书籍标题);scanf(%s, title);printf(请输入书籍作者);scanf(%s, author);printf(请输入书籍出版年份);scanf(%d, year);Book book;strcpy(book.title, title);strcpy(book.author, author);book.year year;books[*count] book;(*count);FILE *file fopen(library.dat, ab);if (file NULL) {printf(无法打开文件\n);exit(1);}fwrite(book, sizeof(Book), 1, file);fclose(file);printf(添加书籍成功\n);
}void insertBook(Book *books, int *count) {char title[100];char author[100];int year;int position;printf(请输入要插入的位置);scanf(%d, position);if (position 0 || position (*count)) {printf(无效的位置\n);return;}printf(请输入书籍标题);scanf(%s, title);printf(请输入书籍作者);scanf(%s, author);printf(请输入书籍出版年份);scanf(%d, year);Book book;strcpy(book.title, title);strcpy(book.author, author);book.year year;for (int i *count; i position; i--) {books[i] books[i - 1];}books[position] book;(*count);FILE *file fopen(library.dat, wb);if (file NULL) {printf(无法打开文件\n);exit(1);}for (int i 0; i *count; i) {fwrite(books[i], sizeof(Book), 1, file);}fclose(file);printf(插入书籍成功\n);
}void deleteBook(Book *books, int *count) {int position;printf(请输入要删除的位置);scanf(%d, position);if (position 0 || position (*count)) {printf(无效的位置\n);return;}for (int i position; i (*count) - 1; i) {books[i] books[i 1];}(*count)--;FILE *file fopen(library.dat, wb);if (file NULL) {printf(无法打开文件\n);exit(1);}for (int i 0; i *count; i) {fwrite(books[i], sizeof(Book), 1, file);}fclose(file);printf(删除书籍成功\n);
}void modifyBook(Book *books, int count) {int position;printf(请输入要修改的位置);scanf(%d, position);if (position 0 || position count) {printf(无效的位置\n);return;}printf(请输入要修改的书籍标题);scanf(%s, books[position].title);printf(请输入要修改的书籍作者);scanf(%s, books[position].author);printf(请输入要修改的书籍出版年份);scanf(%d, books[position].year);FILE *file fopen(library.dat, wb);if (file NULL) {printf(无法打开文件\n);exit(1);}for (int i 0; i count; i) {fwrite(books[i], sizeof(Book), 1, file);}fclose(file);printf(修改书籍成功\n);
}void displayBooks(Book *books, int count) {if (count 0) {printf(暂无书籍信息\n);} else {printf(图书列表:\n);for (int i 0; i count; i) {printf(书籍标题: %s\n, books[i].title);printf(书籍作者: %s\n, books[i].author);printf(书籍出版年份: %d\n, books[i].year);printf(--------------------\n);}}
}void searchBooks(Book *books, int count) {char query[100];printf(请输入要查询的内容);scanf(%s, query);printf(查询结果:\n);for (int i 0; i count; i) {if (strstr(books[i].title, query) ! NULL || strstr(books[i].author, query) ! NULL || books[i].year atoi(query)) {printf(书籍标题: %s\n, books[i].title);printf(书籍作者: %s\n, books[i].author);printf(书籍出版年份: %d\n, books[i].year);printf(--------------------\n);}}
}int main() {Book books[100];int count 0;FILE *file fopen(library.dat, rb);if (file ! NULL) {while (!feof(file)) {Book book;fread(book, sizeof(Book), 1, file);if (!feof(file)) {books[count] book;count;}}fclose(file);}int choice;do {printf(欢迎使用图书管理系统\n);printf(1. 添加书籍\n);printf(2. 插入书籍\n);printf(3. 删除书籍\n);printf(4. 修改书籍\n);printf(5. 显示书籍\n);printf(6. 查询书籍\n);printf(0. 退出\n);printf(请输入选项: );scanf(%d, choice);switch (choice) {case 1:addBook(books, count);break;case 2:insertBook(books, count);break;case 3:deleteBook(books, count);break;case 4:modifyBook(books, count);break;case 5:displayBooks(books, count);break;case 6:searchBooks(books, count);break;case 0:printf(谢谢使用再见\n);break;default:printf(无效的选项请重新输入\n);}printf(\n);} while (choice ! 0);return 0;
}运行测试如下