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语言课程设计:图书管理系统-数组实现相关推荐

  1. C语言课程设计—图书管理系统

    这是本人大一第二学期初C语言课程设计的作品,嘿嘿,本来以为已经找不到原稿了,今天无意中居然在QQ网络硬盘中找到了当初的teta版,公布于此,以作纪念. C源码例如以下: #include<std ...

  2. c语言课程设计图书管理系统

    数据结构c语言课程设计 图书管理系统 我做的是百度文库的第28题,目前没有报错,正常运行,但是还有一点小bug.代码很多地方写的不是很好,请多多包涵. 账号1,密码1,为管理员账号:其他账号2,3,4 ...

  3. c语言课程设计作业图书管理系统,C语言课程设计图书馆管理系统程序代码.doc

    C语言课程设计图书馆管理系统程序代码.doc includestdio.h includewindows.h includestring.h includeconio.h define M 100 s ...

  4. c语言大作业书店图书管理系统,c语言课程设计 书店管理系统.pdf

    c语言课程设计 书店管理系统 计算机程序设计(C语言) 课程设计报告 题目:图书管理系统 学院: 专业: 班级: 学号: 姓名: 指导教师: 设计日期:2013年06月24 日 一.选题背景: 设计一 ...

  5. C语言课程设计-图书管理系统

    实训项目名称:图书管理系统的设计与实现 1.实训目的 开发一个小型的图书管理应用软件,使用该软件可以实现图书信息的登记.浏览.借书.还书.删除和更新等操作.通过该系统的实现可以了解C++连接数据库的原 ...

  6. 销售管理c语言程序设计,C语言课程设计销售管理系统

    C语言课程设计销售管理系统 C语言课程设计 题 目 商品销售系统 指导教师 曹东燕 学生姓名 刘伟 张新星 马国文 学 号 200900804072 200901802005 200900804051 ...

  7. c语言编程票务系统,C语言课程设计票务管理系统

    C语言课程设计票务管理系统 C语言课程设计1西安交通大学城市学院C语言程序设计课程设计报告题目图书信息管理系统专业自动化班级自动化101姓名陈蕾完成日期2012年5月31日C语言课程设计2目录第一章项 ...

  8. 网吧管理系统C语言作业,C语言课程设计-网吧管理系统.doc

    C语言课程设计-网吧管理系统 <通信工程专业C语言课程设计> 报 告 专 业: 通信工程 班 级: 0802 姓 名: 赵 松 指导教师: 丁 雄 二00九 年 十二 月 二十五 日 目 ...

  9. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统

    <C语言课程设计-书店管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计-书店管理系统(25页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计计算机程序设计(C(C ...

最新文章

  1. 用 jQuery Masonry 插件创建瀑布流式的页面(转)
  2. 推荐一个代码自动完成的工具AutoCode
  3. BZOJ2821: 作诗(Poetize)
  4. 数据结构实验之链表五:单链表的拆分
  5. Struts2 Convention Plugin ( struts2 零配置 )
  6. Weblogic 数据源及连接池配置问题Warning! Connectivity to backend database not verified
  7. ~~单链表(数据结构)
  8. ThinkJS入门+实例(实现认证权限等基本功能)
  9. python类的创建及调用_在创建Python类时调用类方法
  10. 云原生高可用技术体系的构建思路与难点分析
  11. 快速记下html css,如何快速记住及输入CSS样式属性单词?
  12. android 远程控制工具,安卓版远程协助软件
  13. 2021年1月12日Flash Player被禁用后的缓解办法(2021年6月更新)
  14. openpyxl创建excel工作表
  15. 山东科技大学计算机学院奖学金,山东科技大学:一份特殊“奖学金”
  16. EasyExcel锁定指定单元格 禁止表格复制
  17. hihocoder 1272 买零食
  18. 为什么溺水事故无法“清零”?
  19. 关于C++中重定义:不同类型的基类型问题
  20. Kong 插件ACL的使用方法(访问控制列表黑名单)

热门文章

  1. 【ubuntu perf安装】The program 'perf' is currently not installed.
  2. 人工智能算法--KNN算法(C++实现)
  3. [SOJ1039]Phone Home(深搜,染色问题)
  4. 12.1简介Object类
  5. python runner是什么_HttpRunner-01-初识
  6. ALICE源代码分析
  7. 高斯消元处理无解|多解情况 poj1830
  8. Mac 从本地copy项目到服务器
  9. CSS3如何实现0.5边框
  10. ubuntu java开发环境搭建(jdk+tomcat+eclipse)