欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现

发布时间:2025/4/5 c/c++ 58 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。

题目要求

图书管理系统提供图书信息管理以及借还管理。图书信息至少包括:图书编号、书名、价格、作者、借还状态,提供以下功能:

  • 1.增加图书信息,录入;
  • 2.查询已有的所有图书信息;
  • 3.删除图书;
  • 4.修改图书信息;
  • 5.借阅图书;
  • 6.归还图书;
  • 7.退出;

实现要点

  • 该要求较为简单,可采用结构数组实现
  • 使用文件保存图书信息;
  • 图书借还状态使用整数保存,1表示已还,0表示借出;

备注:初学者掌握数组、链表、文件这几种方式即可,对于计算机专业,学过数据结构课程的学生,还可以用二叉树等方式实现更多功能。

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

编程环境

  • 采用Dev-C++集成开发环境;
  • 涉及C语言知识点:结构、数组、枚举、函数、文件读写;

源代码

#include <stdio.h> #include <stdlib.h> */ // 书本最大数量 #define BOOK_NUM 200 // 书名最大长度 #define NAME_LEN 60 // 作者姓名最大长度 #define AUTHOR_LEN 60 // 结构保存书本信息 typedef struct {// 编号int id;// 书名char name[NAME_LEN];// 价格double price;// 作者char author[AUTHOR_LEN];// 借出状态,1表示借出,0表示未借出int state; } BOOK; /* 全局数组保存图书 */ BOOK books[BOOK_NUM]; /* 当前书本数量 */ int book_sum = 0; /*定义功能函数,实现图书信息的增加、删除、修改、查阅、借还等功能。 */ // 显示功能菜单 void showMenu(); // 添加图书信息 void addBook(); // 查看图书信息 void queryBook(); // 删除图书信息 void deleteBook(); // 修改图书信息 void updateBook(); // 借书 void borrowBook(); // 还书 void returnBook(); // 保存图书信息到文件books.txt void saveBook(); // 读取文件books.txt到全局数组books void readBook(); // 在屏幕显示各类出错信息,并退出程序 void error(const char* err); /*定义字符数组,暂存每行输入 */ char a[1024];int main() {// 当文件books.txt已有图书信息时// 先全部读取所有书本信息readBook(); showMenu(); // 显示功能主菜单 while (1) {printf("n请输出0-6,回车结束!n");if (fgets(a, 1024, stdin) != NULL) { // 按行读取,0-6字符表示功能switch (a[0]) {case '0': // 退出程序 printf("ByeBye,下次再见!n");exit(0);case '1': // 添加图书addBook();break;case '2': // 查看图书queryBook();break;case '3': // 删除图书deleteBook();break;case '4': // 修改图书updateBook();break;case '5': // 借书borrowBook();break;case '6': // 还书 returnBook();break;default:printf("请重新输入正确的功能数字0-6!n");}}}return 0; }void showMenu() {printf("----------欢迎使用图书管理系统----------nn");printf("当前系统共用图书%d本!nn", book_sum);printf("系统提供以下功能:n");printf("1:添加图书n");printf("2:查看图书n");printf("3:删除图书n");printf("4:修改图书n");printf("5:借阅图书n");printf("6:归还图书n");printf("0:退出系统nn"); }void addBook() {if (book_sum >= BOOK_NUM) {printf("抱歉,图书已达最大数量,无法增加图书!n");return;}printf("请您按提示添加图书信息:n");printf("依次输入编号 书名 价格 作者信息,以空格分隔:n");if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d%s%lf%s", &books[book_sum].id, books[book_sum].name, & books[book_sum].price, books[book_sum].author) != EOF) {int is_find = -1; // 根据编号查找图书信息,如果编号已存在,则无法增加 int i = 0;for (i = 0; i < book_sum; i++){if (books[i].id == books[book_sum].id){is_find = i;break;}}if (is_find != -1)printf("该编号对应的图书信息已经存在,无法增加!n");else {books[book_sum].state = 1;book_sum++;saveBook();printf("添加成功,当前共有%d本图书!nn", book_sum);}}else {error("输入有误,请重新添加!n");} }void queryBook() {printf("图书编号 书名 价格 作者 借阅状态n");if (book_sum == 0)printf("当前书库没有图书,请先增加图书!n");int i;for (i = 0; i < book_sum; i++) {printf("%8d %20s %8.2f %8s %8sn", books[i].id, books[i].name, books[i].price, books[i].author, (books[i].state == 1 ? "1-未借出" : "0-已借出"));} }void deleteBook() {printf("请输入要删除的图书编号:");int id = 0; // 临时存放输入的编号 int is_find = -1; // 根据编号查找图书信息,查到以后存放的数组位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i = 0;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("该编号对应的图书信息不存在!n");else {// 删除is_find位置的图书信息,并将后面的图书信息前移 if (is_find == book_sum - 1)book_sum--;else {int i;for (i = is_find; i < book_sum; i++)books[i] = books[i + 1];book_sum--;}saveBook();printf("该编号%d对应的图书信息删除成功!n", id);}}else {error("输入有误,请重新输入!n");} }void updateBook() {printf("请输入要修改的图书编号:");int id = 0; // 临时存放输入的编号 int is_find = -1; // 根据编号查找图书信息,查到以后存放的数组位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("该编号对应的图书信息不存在!n");else {printf("该编号对应的图书信息如下,请按照提示修改:n");printf("图书编号 书名 价格 作者 借阅状态n");printf("%8d %20s %8.2f %8s %8snn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "未借出" : "已借出"));printf("依次输入修改后的书名、价格、作者信息,以空格分隔:n");if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%s%lf%s", books[is_find].name, &books[is_find].price, books[is_find].author) != EOF) {saveBook();printf("修改成功,修改后的图书信息如下:n");printf("图书编号 书名 价格 作者 借阅状态n");printf("%8d %20s %8.2f %8s %8sn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "未借出" : "已借出"));}else {error("输入有误,请重新修改!n");}}}else {error("输入有误,请重新输入!n");} } void borrowBook() {printf("请输入要借阅的图书编号:");int id = 0; // 临时存放输入的编号 int is_find = -1; // 根据编号查找图书信息,查到以后存放的数组位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("该编号对应的图书信息不存在!n");else {printf("该编号对应的图书信息如下:n");printf("图书编号 书名 价格 作者 借阅状态n");printf("%8d %20s %8.2f %8s %8sn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "1-未借出" : "0-已借出"));if (books[is_find].state == 0)printf("该编号对应的图书已借出,请归还后再借阅!n");else {books[is_find].state = 0;saveBook();printf("该编号对应的图书借阅成功!n");}}}else {error("输入有误,请重新输入!n");} }void returnBook() {printf("请输入要归还的图书编号:");int id = 0; // 临时存放输入的编号 int is_find = -1; // 根据编号查找图书信息,查到以后存放的数组位置 if (fgets(a, 1024, stdin) != NULL && sscanf(a, "%d", &id) != EOF) {int i;for (i = 0; i < book_sum; i++){if (books[i].id == id){is_find = i;break;}}if (is_find == -1)printf("该编号对应的图书信息不存在!n");else {printf("该编号对应的图书信息如下:n");printf("图书编号 书名 价格 作者 借阅状态n");printf("%8d %20s %8.2f %8s %8sn", books[is_find].id, books[is_find].name, books[is_find].price, books[is_find].author, (books[is_find].state == 1 ? "1-未借出" : "0-已借出"));if (books[is_find].state == 1)printf("该编号对应的图书未借出,无法归还!n");else {books[is_find].state = 1;saveBook();printf("该编号对应的图书归还成功!n");}}}else {error("输入有误,请重新输入!n");} }void saveBook() {FILE* fp = fopen("book.txt", "w+");if (fp != NULL) {/**按行写入每本书信息到数组*/int i;for (i = 0; i < book_sum; i++)if (fprintf(fp, "%d %s %f %s %dn", books[i].id, books[i].name, books[i].price, books[i].author, books[i].state) == EOF) {fclose(fp);error("写入book.txt文件失败,请检查!n");}if (fclose(fp) == EOF)error("关闭book.txt文件失败,请检查!n");}else {error("打开book.txt文件失败,请检查!n");} }void readBook() {FILE* fp = fopen("book.txt", "a+");if (fp != NULL) {/**按行读取每本书信息到数组,并且统计书本数量信息*/int i = 0;while ((i < BOOK_NUM) && (fscanf(fp, "%d%s%lf%s%d", &books[i].id, books[i].name, & books[i].price, books[i].author, &books[i].state) != EOF)) {i++;}book_sum = i;if (fclose(fp) == EOF)error("关闭book.txt文件失败,请检查!n");}else {error("打开book.txt文件失败,请检查!n");} }void error(const char* err) {printf(err);exit(-1); }

运行结果:

----------欢迎使用图书管理系统---------- 当前系统共用图书3本! 系统提供以下功能: 1:添加图书 2:查看图书 3:删除图书 4:修改图书 5:借阅图书 6:归还图书 0:退出系统请输出0-6,回车结束! 2 图书编号 书名 价格 作者 借阅状态1 test02 10.00 zhangsan1 1-未借出2 test01 11.01 kdkal 1-未借出4 kdkd 100.11 kdkalal 1-未借出请输出0-6,回车结束! 4 请输入要修改的图书编号:3 该编号对应的图书信息不存在!请输出0-6,回车结束! 3 请输入要删除的图书编号:1 该编号1对应的图书信息删除成功!请输出0-6,回车结束! 2 图书编号 书名 价格 作者 借阅状态2 test01 11.01 kdkal 1-未借出4 kdkd 100.11 kdkalal 1-未借出请输出0-6,回车结束!

其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

总结

以上是生活随笔为你收集整理的c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。