图书管理系统C课程设计

上传人:沈*** 文档编号:66066314 上传时间:2022-03-26 格式:DOC 页数:31 大小:1.57MB
收藏 版权申诉 举报 下载
图书管理系统C课程设计_第1页
第1页 / 共31页
图书管理系统C课程设计_第2页
第2页 / 共31页
图书管理系统C课程设计_第3页
第3页 / 共31页
资源描述:

《图书管理系统C课程设计》由会员分享,可在线阅读,更多相关《图书管理系统C课程设计(31页珍藏版)》请在装配图网上搜索。

1、信息科学与技术学院程序设计基础课程设计报告题目名称: 图书信息管理系统设计 学生姓名: 王栎沣 学 号: 1102014 专业班级: 计科专业计双2011级1班 指导教师: 郭 理 2012年 6月21日1. 课程设计目的31.1. 课程设计的题目31.2. 课程设计的要求31.2.1 问题描述(功能要求):31.2.2问题的解决方案:31.2.3其他要求:32. 总体设计42.1. 新书入库模块42.2. 信息查询模块42.2.1读者信息查询模块42.2.2图书信息查询模块42.2.3打印图书信息42.2.4打印读者信息42.3. 借书模块42.4. 还书模块43. 详细设计53.1. 类设

2、计53.2. 基本操作函数53.3. 程序流程图63.3.1主函数流程图63.3.2初始化模块73.3.3借书模块73.3.4新书入库模块83.3.5信息查询模块83.3.6还书模块94. 运行结果95. 设计源码166. 课程设计总结317. 参考书目:311. 课程设计目的1.1. 课程设计的题目图书信息管理系统设计1.2. 课程设计的要求1.2.1 问题描述(功能要求): 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能: (1)系统以菜单方式工作 (2)图书信息录入功能(图书信息以文件保存)输入 (3)图书信息浏览功能

3、输出 (4)查询和排序功能:(至少一种查询方式)算法 (5)图书信息的删除与修改(可选项)1.2.2问题的解决方案: (1)分析系统中的各个实体之间的关系及其属性和行为; (2)根据问题描述,设计系统的类层次; (3)完成类层次中的各个类的描述(包括属性和方法) (4)完成类中各个成员函数的定义; (5)完成系统的应用模块; (6)功能调试 (7)完成系统总结报告以及系统使用说明书。1.2.3其他要求: (1)只能使用C/C+语言,源程序要有适当的注释,使程序容易阅读 (2)至少采用文本菜单界面(如果能采用图形菜单界面更好) (3)学生可自动增加新功能模块2. 总体设计图书信息管理系统设计信息

4、查询还书管理借书登记新书入库打印读者信息打印图书信息图书信息查询读者信息查询2.1. 新书入库模块 功能:登记入库的新书信息2.2. 信息查询模块2.2.1读者信息查询模块 功能:查询某一读者的信息2.2.2图书信息查询模块 功能:查询某一图书的信息2.2.3打印图书信息 功能:打印所有图书的信息2.2.4打印读者信息 功能:打印所有读者的信息2.3. 借书模块 功能:登记读者的借书信息2.4. 还书模块 功能:登记读者的还书信息3. 详细设计3.1. 类设计typedef struct BOOK /声明图书结构体变量BOOK,表示图书信息char number10; /书号char titl

5、e20; /书名char writer10; /作者 char publish20; /出版社 int year; /出版年份 int month; /出版月份 int day; /出版日期 float price; /出版价格int storage; /库存量int remain; /现存量struct BOOK *next; /下一个节点指针BOOK;typedef struct BORROW /借书信息char book_number10; /书号BORROW;typedef struct READER /读者信息char number3; /读者编号char name10; /读者名字

6、int borrow_amount; /当前借书量BORROW borrowMax; /借书信息struct READER *next;READER;3.2. 基本操作函数int DisplayMenu();/显示主菜单void Initialize(); /初始化(初始化读者和图书的信息)void Init_reader();/初始化读者信息void Init_book(); /初始化图书信息void Insert_New_Book();/新书入库模块int Find(); /查找菜单void Find_Select();/查找菜单选择函数void Find_Reader();/查找某个读者

7、信息void Find_Book();/查找某个图书信息 void Print_reader(); /打印所有读者信息void Print_book();/打印所有图书信息void Borrow_Book();/借书函数void Return_Book();/还书函数void Save(); /保存到文件void Selectmenu(); /主菜单选择函数3.3. 程序流程图 3.3.1主函数流程图图3.3.1 主函数流程图3.3.2初始化模块图3.2 初始化模块流程图3.3.3借书模块图3.3 借书模块流程图3.3.4新书入库模块图3.4 新书入库模块3.3.5信息查询模块图3.5 信息查

8、询模块流程图3.3.6还书模块图3.6 还书模块流程图4. 运行结果5. 设计源码/*Standard Template Library,标准模板库*/#include /数据流输入输出#include /字符串类using namespace std;#define Max 3 typedef struct BOOK /声明图书结构体变量BOOK,表示图书信息char number10;/书号char title20; /书名char writer10;/作者 char publish20; /出版社 int year; /出版年份 int month; /出版月份 int day; /出版

9、日期 float price; /出版价格int storage; /库存量int remain; /现存量struct BOOK *next; /下一个节点指针BOOK;typedef struct BORROW /借书信息char book_number10;/书号BORROW;typedef struct READER /读者信息char number3; /读者编号char name10;/读者名字int borrow_amount;/当前借书量BORROW borrowMax; /借书信息struct READER *next;READER;BOOK *h_book = NULL;/

10、图书链表头结点READER *h_reader = NULL;/读者链表头结点int DisplayMenu();/显示主菜单void Initialize();/初始化(初始化读者和图书的信息)void Init_reader();/初始化读者信息void Init_book();/初始化图书信息void Insert_New_Book();/新书入库模块int Find();/查找菜单void Find_Select();/查找菜单选择函数void Find_Reader();/查找某个读者信息void Find_Book();/查找某个图书信息 void Print_reader();/

11、打印所有读者信息void Print_book();/打印所有图书信息void Borrow_Book();/借书函数void Return_Book();/还书函数void Save();/保存到文件void Selectmenu(); /主菜单选择函数/显示主菜单int DisplayMenu() int choice;coutendl图书管理系统主菜单endl; coutstring(50,=)endl;cout*t0-退出系统 *endl;cout*t1-新书入库 *endl;cout*t2-信息查询 *endl;cout*t3-借书登记 *endl;cout*t4-还书管理 *end

12、l; coutstring(50,=)endl; coutchoice;if(choice4)coutpBook-number;if (strcmp(pBook-number, 0) = 0)/读到了文件末尾/strcmp是字符串比较函数/关闭文件输入流,恢复标准输入流fclose(stdin);freopen(CON, r, stdin);return;cinpBook-titlepBook-writerpBook-publishpBook-yearpBook-monthpBook-daypBook-pricepBook-storagepBook-remain;/创建下一个节点BOOK *t

13、emp = (BOOK*)malloc(sizeof(BOOK);memset(temp, 0, sizeof(BOOK);pBook-next = temp;pBook = temp;/关闭文件输入流,恢复标准输入流fclose(stdin);freopen(CON, r, stdin);/初始化读者信息void Init_reader() READER *pReader;pReader = (READER*)malloc(sizeof(READER); /*向系统申请分配指定size个字节的内存空间,返回类型是 void* 类型。*/memset(pReader, 0, sizeof(RE

14、ADER); /* 把pReader 清零 */h_reader = pReader;if (freopen(reader.txt, r, stdin) = NULL) /打开文件fclose(stdin);freopen(CON, r, stdin);return;while (1)/读取读者信息cinpReader-number;if (strcmp(pReader-number, 0) = 0)/如果读到了文件末尾fclose(stdin);freopen(CON, r, stdin); return;cinpReader-namepReader-borrow_amount; for (

15、int i = 0; i borrow_amount; i+)cinpReader-borrowi.book_number;/创建下一个节点READER *temp = (READER*)malloc(sizeof(READER);memset(temp, 0, sizeof(READER);pReader-next = temp;pReader = temp; /关闭文件输入流,恢复标准输入流fclose(stdin); /函数原型: int fclose(FILE *stream);freopen(CON, r, stdin); /*重新分配文件指针,实现重定向。如果stream流已经打开

16、,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。*/*函数原型: FILE *freopen(const char *filename,const char *type, FILE *stream);*/*功 能: 关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。*/void Insert_New_Book() /新书入库模块BOOK *p,*p0,*p1; p=p1=h_book;coutntt新书入库n; coutstring(40,=)endl;coutn请输入新书信息:n; p0=(BOOK *)

17、malloc(sizeof(BOOK);coutp0-number; while(strcmp(p0-number,p1-number)!=0&p1-next != NULL)p1=p1-next; if(strcmp(p0-number,p1-number)=0) /*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/ coutn此编号图书已存在!直接入库!n; coutp0-storage;p1-storage+=p0-storage;p1-remain+=p0-storage;cin.clear( ); cin.ignore( 200,n); else/*若不存在,则需要输

18、入其他的信息 ,然后在进行插入操作*/ cout tmp;memcpy(p0-title,tmp,20); /函数原型void *memcpy(void *dest, const void *src, int n);/*从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中*/cout tmp;memcpy(p0-writer,tmp,20); cout tmp;memcpy(p0-publish,tmp,20); coutp0-year;coutp0-month;coutp0-day;coutp0-price;coutp0-remain;p0-storag

19、e=p0-remain;while(strcmp(p-next-number, 0) != 0) p=p-next;if(h_book=NULL) h_book=p0; /*此处分两种情况,链表中如果没有数据,head则直接指向p0处*/elsep0-next = p-next;p-next = p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0-remain=p0-storage; coutn新书入库完毕!n; getchar();/查找菜单int Find()int choice;coutntt信息查询菜单n; coutendlstring(50,=)en

20、dl;cout*t 0-返回上级 t*n; cout*t 1-查找图书 t*n; cout*t 2-查找读者 t*n; cout*t 3-打印所有图书 t*n; cout*t 4-打印所有读者 t*n;coutstring(50,=)endl;coutchoice; if(choice4)cin.clear( ); cin.ignore(200,n);coutn错误!请重新输入:; else break;return choice; /查找菜单选择函数void Find_Select()while(1) /*循环调用模式,保证能进行重复操作*/switch(Find() /*功能选择*/ ca

21、se 0:return;case 1:Find_Book();break;case 2:Find_Reader();break;case 3:Print_book();break;case 4:Print_reader();break;default:coutn错误!; cin.clear( ); cin.ignore(200,n);exit(0);void Find_Reader() /查找某个读者信息READER *p;int i;char find_reader10;p=h_reader;coutn读者信息查询模块n; coutstring(50,=)endl;coutfind_read

22、er;while(strcmp(p-number,find_reader)!=0&p-next)p=p-next;if(strcmp(p-number,find_reader)=0)coutn读者编号:find_reader的信息为:n;cout编号:numberendl; cout姓名:namen; /*此处这样处理,是为了能实现一个读者能借多本书, 而Max的数值可以随需要修正*/ for(i=0;iMax;i+)cout借的第i+1本书的编号为:;coutborrowi.book_numberendl;elsecoutn此读者编号不存在,请核对!; getchar(); void Fin

23、d_Book() /查找图书信息 BOOK *p;char find_book10; /*读者编号唯一,查找只须一次遍历*/p=h_book;coutn图书信息查询模块n;coutstring(25,)endl;coutfind_book;while(strcmp(p-number,find_book)!=0&p-next)p=p-next;if(strcmp(p-number,find_book)=0) /*找到了就打印,否则提示不存在,或出错*/ coutn图书编号find_book的信息为:endl; cout图书名:titleendl; cout作者:writerendl; cout出

24、版社:publishendl; cout出版日期:year年month月day日endl; cout图书价格 :price元endl; cout现存量:remainendl; cout库存量:storageendl;elsecoutn此图书编号不存在,请核对并检查你的信息是否有误!; getchar();void Print_reader() /打印所有读者信息READER *p;int i;p=h_reader;coutnumber, 0) != 0) /*遍历链表一次就可以了*/*strcmp函数的作用是功能:比较字符串s1和s2。*/coutReaderNo.numberendl; co

25、ut读者姓名为:nameendl;for(i=0;iMax;i+)cout借的第i + 1一本书的编号为; coutborrowi.book_numberendl;coutendlnext;coutn读者信息打印完毕!endl; getchar();void Print_book() /打印图书信息BOOK *p;p=h_book;coutn图书信息如下:nn; coutNo. BookName BookWriter Bookpublish Publication Dates Price Remain number, 0) != 0)coutnumber titletwritertpublis

26、ht year年month月day日t price remain storagenext;coutn图书信息打印完毕!endl; getchar();void Borrow_Book() /借书模块BOOK *p0; READER *p1;char bo_num10,rea_num10;int i;p0=h_book; p1=h_reader;coutnnn借书界面n; coutstring(50,=);coutrea_num;while(p1-next!=NULL&strcmp(rea_num,p1-number)!=0) /*遍历一次读者链表,判断读者是否存在*/p1=p1-next;if

27、(p1-next=NULL&strcmp(rea_num,p1-number)!=0) /*如果存在,则继续,不存在就、则提示错误!*/ coutn此读者编号不存在!n; getchar();return; coutbo_num;while(strcmp(bo_num,p0-number)!=0&p0-next!=NULL) /*遍历一次图书链表,判断此图书是否存在*/p0=p0-next;if(p0-next=NULL&strcmp(bo_num,p0-number)!=0) /*如果存在,则继续,不存在就、则提示错误!*/coutremain=0) /*判断此图书现在是否还有库存*/ co

28、utborrow_amount=Max) /*判断此读者借书量是否已经达到最大允许借书量*/ coutborrow_amount !=0) /*此读者若已经借书,再判断此读者是否要借两本一样的书*/int b = 0;for(i=0;iborrow_amount;i+) /*遍历一次读者所借的书,如果发现有重复,则结束*/if(strcmp(p1-borrowi.book_number,bo_num)=0)b = 1; if (b = 1)coutborrowp1-borrow_amount+.book_number,bo_num); p0-remain-;coutn读者编号numberbor

29、rowp1-borrow_amount+.book_number,bo_num); /原型声明:extern char *strcpy(char *dest,const char *src)/功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间p0-remain-;coutn读者编号number借书完毕!endl;cin.clear( ); cin.ignore( 200,n);void Return_Book() /还书模块BOOK *p; READER *q;int i,j,find=0;char return_book_num10,return_reader

30、_num10;p=h_book; q=h_reader;coutn还书模块n; coutreturn_reader_num; while(q-next!=NULL&strcmp(return_reader_num,q-number)!=0) q=q-next;if(q-next=NULL&strcmp(return_reader_num,q-number)!=0)find=2;/*设置标志,用于判断读者是否借了此书或是否出错提前结束,若提前出错,则find=2,若借了,则find=1,若没借为find=0*/coutn此读者编号不存在!n; return;coutreturn_book_num

31、;while(p-next!=NULL&strcmp(return_book_num,p-number)!=0)p=p-next;if(p-next=NULL&strcmp(return_book_num,p-number)!=0) find=2;/*设置标志,用于判断读者是否借了此书或是否出错提前结束,若提前出错,则find=2,若借了,则find=1,若没借为find=0*/coutn错误!此图书编号不存在!n; cin.clear( ); cin.ignore( 200,n);return; for(i=0;iborrowi.book_number)=0) /*如果此读者借了此书*/fi

32、nd=1; /*设置标志,用于判断读者是否借了此书或是否出错提前结束,若提前出错,则find=2,若借了,则find=1,若没借为find=0*/for(j=i;jborrowj.book_number,q-borrowj+1.book_number); strcpy(q-borrowMax-1.book_number,0);p-remain+;q-borrow_amount-;coutn编号return_reader_num的读者还书完毕!endl;if(find=0) /*为什么有个find=0,因为遍历时循环Max次,如循环完毕还没有找到,则说明读者没有借此书*/*find用来保证只打印

33、一次结果,否则每循环一次就会打印一个结果*/coutnumber, 0) != 0)coutnumber title writer publish year month day price storage remainnext;cout0number, 0) != 0)coutnumber name borrow_amount ;for (int i = 0; i borrow_amount; i+)coutborrowi.book_number ;coutnext;cout0endl;/写入结束标志/关闭文件fclose(stdout);void Selectmenu() /主菜单选择函数w

34、hile(1) /*循环调用模式,保证能进行重复操作*/switch(DisplayMenu() /*功能选择*/ case 0:Save();coutnnt文件保存成功!n; coutnnt欢迎下次使用本系统!n; return;case 1:Insert_New_Book();break; case 2:Find_Select();break;case 3:Borrow_Book();break;case 4:Return_Book();break;default:coutn错误!;break;void main() coutnnnttt欢迎登陆本系统nendl;/初始化,读取图书和读者信息 Initialize(); /主菜单选择函数 Selectmenu(); 6. 课程设计总结 7. 参考书目:1. C+程序设计 谭浩强 清华大学出版社 2011年5月印本2.图书借阅系统设计 杜松 3.图书管理信息系统 王飞 重庆工学院 2006年12月23日 31

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!