数据结构——图书管理系统
图书管理系统数据结构

struct book /*图书信息*/{int num; /*书号*/char name[10]; /*书名*/char where[10]; /*所在书库*/char author[15]; /*作者*/char pub[20]; /*出版社*/int count; /*数量*/struct book *next;};/*输出模块*/void print(struct book *p0){struct book *p;p=p0->next;printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); while(p!=NULL){printf(PT);p=p->next;}getch();}/*输入模块*/struct book *creat(){struct book *head,*p1,*p2;int i=0;head=p2=(struct book *)malloc(N);head->next=NULL;printf("\n\n\t\t录入图书信息");printf("\n\t---------------------------------------");while(1){ p1=(struct book *)malloc(N);printf("\n 请输入图书编号(书号为0结束): ");scanf("%d",&p1->num);if(p1->num!=0){printf("\n\n书名所在书库作者出版社图书数量\n");scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count); p2->next=p1;p2=p1;i++;}elsebreak;}p2->next=NULL;free(p1);printf("\n\t\t----------------------------------------");printf("\n\t\t %d 种书录入完毕",i);getch();return head;}/*查找模块*/void find(struct book *p0){char name[10];int flag=1;struct book *p;p=p0->next;printf("请输入要查找的书名:\n");scanf("%s",name);for(p=p0;p;p=p->next)if(strcmp(p->name,name)==0){printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); printf(PT);flag=0;break;}if(flag) printf("\n 暂无此图书信息\n");getch();}/*删除模块*/void del(struct book *p0){char name[10];int flag=1;struct book *p;p=p0;printf("请输入要删除的书名:\n");scanf("%s",name);while(p!=NULL){if(strcmp(p->name,name)==0){p0->next=p->next; /*后续节点连接到前驱节点之后*/free(p);printf("\t该书资料已删除.");flag=0;break;}p0=p;p=p->next;}if(flag) printf("\n\t无此图书信息。
数据结构_图书馆管理系统

湖南科技大学课程设计报告题目: 图书管理基本业务模拟院系:计算机科学与工程学院专业班级:计算机科学与技术一班学号: 0905010119学生姓名:张杰指导教师:李峰2010年12月31日一、问题分析图书馆基本业务模拟包含多方面的操作,其中本程序描述的是图书馆的新书入库、读者注册、图书馆借阅、归还、信息查询(含书籍信息查询和读者信息查询)等功能。
1)新书入库功能:新到书籍入库包含几方面的操作:查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和书籍总量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、该书作者名(字符串类型)、该书出版社信息(字符串类型)、出版日期(长整型)、该书的现存量(整型)、该书的总量(整型)。
输入该信息之后,将该节点插入到书籍信息链表中去。
该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。
2)读者注册功能没有账号和密码读者和管理员都不能登录系统,本系统默认第一个注册系统的是系统管理员,借阅号为1000,权限是1,并输入自己基本信息,默认可借本数为10,并将所借书信息区全部置零。
不是第一个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0.,其余信息与管理员相同,但是登陆之后的界面,管理员可以看到“入库”菜单选项,普通读者不能看到该选项。
3)借阅功能书籍借阅主要涉及存书库和读者信息库双方的更新。
用户首先登陆系统,查询(3种查询方式)该书是否存在,该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。
若以上条件都满足,则将该书编号存入该读者的借阅信息区,将该读者的可借书数量减一,该存书的可借数量减一。
4)归还功能读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,则从读者的借书区删除该书籍,读者的课结束数量加一,将该书的可借数量增加一,然后返回。
5)信息查询功能信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本书以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。
数据结构课程设计-图书管理系统

用C++语言实现图书管理系统摘要图书管理系统主要是对图书的录入、读者借阅、读者归还等功能进行实现.本课程设计的系统开发平台为Windows XP,程序设计语言为C++,程序运行平台为Windws98/2000/XP/Seven。
在程序设计中采用了B-树方法提高书籍的查找速度。
关键词程序设计;图书管理系统;C++;数据结构;B-树1 索引1.1课程设计目的设计一个小型的图书管理系统,可以实现新增图书,读者借阅,读者归还等功能。
1。
2。
系统性能要求能较快的查到所要查找的图书;能准确统计当前每种书的库存,以确定此书是否可以外借;并且对外借的图书进行管理,记录借出时间、应还时间等。
1.3。
功能的实现1)新书入库:确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;2) 借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;3)归还:注销对借阅者的登记,改变该书的现存量.2 系统详细设计及实现1.所用的知识体系在整个程序的设计过程当中,用到了C++的一些基础知识,面向对象的思想和结构化的程序设计思想.数据结构的B—树建立索引,用索引提高查找的效率等。
2。
系统功能组成框图3 . 系统功能模块划分4。
流程图 4。
1录入图书信息4.2借阅图书4。
3归还图书输入图书和读者信息处理归还图书功能,清读者的借阅记录,将图书的在库数加一5 功能实现5.1 运行程序的主界面图5—1 操作界面5。
2 新书入库功能的操作界面图5—2新书入库5.3 查询数据的界面图5-3查询书籍5。
4 查询所有书籍的界面图 5—4显示库存5.5 图书借阅的界面图5-5借阅书籍5。
6 还书的界面图5—6还书3 参考文献[1]谭浩强C语言设计(第三版)清华大学出版社[2] 严蔚敏吴伟民数据结构(C语言版)清华大学出版社[3] 谭浩强 C++ 程序设计清华大学出版社[4]参考网址/manual/zh/function。
数据结构课程设计图书管理系统

数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。
作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。
一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。
2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。
3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。
4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。
5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。
1、图书信息和读者信息可以使用结构体数组来存储。
结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。
2、对于图书的分类和索引,可以使用二叉查找树或哈希表。
二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。
3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。
三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。
管理员可以进行所有操作,读者只能进行查询和借阅相关操作。
2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。
图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。
图书删除:按照指定条件删除图书记录。
图书查询:提供多种查询条件,快速检索图书信息。
数据结构课程设计———图书馆管理系统

数据库原理及应用——图书馆管理系统数据库设计一.需求分析需求分析的任务是调查应用领域,对应用领域中各应用的信息要求和操作要求进行详细分析,形成需求分析说明书。
重点是调查,收集与分析用户在数据管理中的信息要求、处理要求、数据的安全性与完整性要求。
功能模块设计将图书管理系统业务分为四个大的方面:学生数据管理、图书征订管理、藏书管理、图书流通管理。
功能模块图功能模块分析办卡、挂失、注销学生在图书馆中必须持卡办理一切业务,新生必须首先办理借书卡,当借书卡丢失时需办理挂失业务,毕业生或中途退学者必须办理注销卡业务,以防止借书卡的流失。
查询、借书、环书、注销学生在图书馆中持卡可以进行以下业务:查询自己借书状态,借书,还书,当所借书籍丢失时需办理注销业务。
图书查询、缺书登记学生需要查询自己所需书籍时,若馆中有则直接借书;若馆中没有,可以进行缺书登记。
数据流程分析与设计数据流程图数据字典的建立数据字典数据字典是我在数据流程图中选取的一些中层数据流,我把我所抽去的数据列出以下表来。
数据项二.概念结构设计E-R图根据前面的需求分析,可以将图书管理系统数据库实体划分为图书信息实体集、学生信息实体集、馆藏地实体集、借书卡信息实体集、缺书信息实体集,各实体集里还包含不同的实体以下包括所有的实体。
学生:{学号,姓名,性别,年级,学院,专业,班级}图书:{条码号,书名,作者,出版社,定价,馆藏地编号,图书状态,借阅状态}馆藏地:{馆藏地编号,馆藏地名称}借书卡:{卡号,卡状态,学号}缺书:{书名,作者,出版社,定价,搜索频率}学生日常事务信息:{卡号,时间,欠书状态,超时罚款} E-R图三.逻辑结构设计概念模型向关系模型的转变将E-R图转换为关系模型,即将实体、实体的属性和实体之间的联系转化为关系模式,为应用程序建立专门的视图而不必要应用程序直接访问数据表关系模式的设计StudentBookJieyue(应还时间—借书时间)等于一个月PlaceRountin对时间的检查,当借还书中的还书时间小于应还时间时,超时罚款为零;当超过应还时间未还书时,开始计费,超时罚款=(时间-应还时间)*0.01;当借还书中的还书时间确定时,超时罚款=(还书时间-应还时间)*0.01。
数据结构图书管理系统

数据结构课程设计说明书年月日1设计目的(小标题黑体五号字)设计一个计算机管理系统完成图书管理基本业务(数据可以存储在一个数据文件中,数据结构、具体数据自定)。
2.设计内容与要求具体功能有:1)每种书的登记内容包括书号、书名、著作者、出版单位、现存量与库存量;2)对书号建立索引表(线性表)以提高查找效率;3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号与归还期限,改变现存量;5)归还:注销对借阅者的登记,改变该书的现存量。
3.本设计所采用的数据结构所用数据结构:线性表、查找、排序链表:用一组地址任意的存储单元存放线性表中的数据元素。
以元素(数据元素的映象) + 指针(指示后继元素存储位置)= 结点(表示数据元素或数据元素的映象)以“结点的序列”表示线性表称作线性链表(单链表)单链表就是一种链式存取的结构,为找第 i 个数据元素必须先找到第 i-1 个数据元素。
因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 与 i。
(1)malloc(size)在内存的动态存储区申请一个长度为size字节的连续空间。
(2)calloc(n,size)在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。
若此函数未被成功执行,函数返回值为0。
(3)free(p)释放由指针p所指向的存储单元,而存储单元的大小就是最近一次调用malloc()或calloc()函数时所申请的存储空间。
运用了单链表的插入、删除、排序、修改等一些操作!4.功能模块详细设计4、1 详细设计思想(一)基本思想:(二)图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。
(三)程序中的主要函数有:void main() //主函数int CreateListR(LinkList *L) //尾插法建表void LocateElem(LinkList *L) //查询int Sort(LinkList *L) //递增有序排序(直接插入排序法) void Display(LinkList *L) //输出排序结果ModifyList(LinkList *L) //修改int ListDelete(LinkList *L) //删除void Borrow(LinkList *L) //借阅void Return(LinkList *L) //归还4、2 核心代码#include <stdio、h>#include <string、h>#include<stdlib、h>#include<malloc、h>typedef struct {int num;char name[20];char author[20];char press[20];int count;char price[10];} ElemType;typedef struct LNode //定义单链表结点类型{ElemType data;struct LNode *next;} LinkList;void InitList(LinkList *L) //初始化线性表{L = (LinkList *) malloc(sizeof(LinkList)); //创建头结点L->next = NULL;}int CreateListR(LinkList *L) //尾插法建表{int i, n;LinkList *s, *q, *p;p = L;while (p->next != NULL )p = p->next;printf("请输入需要录入的图书信息的个数:n=");scanf("%d", &n);for (i = 1; i < n + 1; i++) {s = (LinkList *) malloc(sizeof(LinkList));printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &s->data、num, s->data、name, s->data、author,s->data、press, &s->data、count, s->data、price);q = L->next;if (q == NULL ) {p->next = s;p = s;p->next = NULL;printf("录入成功!\n");continue;}while (q != NULL ) {if (strcmp(s->data、name, q->data、name) == 0) {printf("此图书已存在!");printf("请重新输入:\n");scanf("%d%s%s%s%d%s", &p->data、num, p->data、name,p->data、author, p->data、press, &p->data、count,p->data、price);}q = q->next;}p->next = s;p = s;p->next = NULL;printf("录入成功!\n");}return 0;}void LocateElem(LinkList *L) //查询{LinkList *p = L->next; //p指向第一个数据结点int c;int x = 0;char name1[10], author1[10], press1[10];printf(" 1 按书名查询:\n");printf(" 2 按作者名查询:\n");printf(" 3 按出版社名称:\n");printf(" 4 返回\n");printf(" 请选择1--4进行操作:\n");scanf("%d", &c);if (c > 4 || c < 1) {printf("您的输入有误!\n");scanf("%d", &c);}switch (c) {case 1:printf("请输入图书书名: \n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->data、name) != 0) //查找图书书名p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data、num, p->data、name,p->data、author, p->data、press, p->data、count,p->data、price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 2:printf("请输入图书作者:\n");scanf("%s", author1);while (p != NULL ) {if (strcmp(author1, p->data、author) != 0) //查找图书作者p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data、num, p->data、name,p->data、author, p->data、press, p->data、count,p->data、price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 3:printf("请输入图书的出版社名称: \n");scanf("%s", press1);while (p != NULL ) {if (strcmp(press1, p->data、press) != 0) //查找图书出版社名称p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d %s %s %s %d %s",p->data、num, p->data、name, p->data、author,p->data、press, p->data、count, p->data、price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起!不存在此图书\n");break;case 4:break;}}int Sort(LinkList *L) //递增有序排序(直接插入排序法){LinkList *p = L->next, *q, *r; //p指向第一个数据结点if (p != NULL ) //若原单链表中有一个或以上的数据结点{r = p->next; //r保存*p结点直接后继结点的指针p->next = NULL; //构造只含一个数据结点的有序表p = r;while (p != NULL ) {r = p->next; //r保存*p结点的直接后继结点的指针q = L;while (q->next != NULL && q->next->data、num < p->data、num) q = q->next; //在有序表中找插入*p的直接前驱结点*q的位置p->next = q->next; //将*p插入到*q之后q->next = p;p = r; //扫描原单链表余下的结点}}return 0;}void Display(LinkList *L) //输出排序结果{LinkList *p = L->next;while (p != NULL ) {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d \t %s \t %s\t %s\t%d\t %s", p->data、num,p->data、name, p->data、author, p->data、press, p->data、count,p->data、price);printf("\n");p = p->next;}}int ModifyList(LinkList *L) //修改{LinkList *p = L;char name1[10];printf("请输入要修改的图书的书名:\n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->data、name) == 0) //查找所要修改的书名{printf("请输入修改后的信息!\n");printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &p->data、num, p->data、name, p->data、author, p->data、press, &p->data、count, p->data、price);printf("修改成功!\n");return 0;}p = p->next;}printf("不存在此图书\n");return 0;}int ListDelete(LinkList *L) //删除{LinkList *p = L->next, *q = L;char name1[10];if (p != NULL ) {printf("请输入要删除的书名:");scanf("%s", name1);}while (p->next != NULL && strcmp(p->data、name, name1) != 0) {p = p->next;q = q->next;}if (p->next != NULL ) //如果p此时不就是最后一个节点,说明此时已经找到书{q->next = p->next;printf("删除成功!\n");return 0;}if (p->next == NULL && strcmp(name1, p->data、name) != 0) //如果p此时为最后一个结点并且没有找到与之相符的书名{printf("您输入的书名不存在,请核实后重新输入!\n");} else {q->next = NULL;printf("删除成功!\n");}return 0;}void Borrow(LinkList *L) //借阅{LinkList *p = L->next;char name1[10];printf("请输入要借阅的图书的书名:\n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->data、name) != 0) p = p->next;if (p->next == NULL && strcmp(name1, p->data、name) != 0) printf("此图书不存在!\n");else if (p->data、count < 1)printf("此书已借完!\n");else if (strcmp(name1, p->data、name) == 0) {printf("借书成功!\n");p->data、count--;}}void Return(LinkList *L) //归还{LinkList *p = L->next;char name1[10];printf("输入归还书的书名: \n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->data、name) != 0) p = p->next;if (p->next == NULL && strcmp(name1, p->data、name) != 0)printf("错误!此图书不存在!\n");else if (strcmp(name1, p->data、name) == 0) {printf("该书归还成功!\n");p->data、count++;}}void menu() { //菜单函数printf("---------------------------------------------------------- \n");printf(" 欢迎光临图书管理系统! \n");printf("----------------------------------------------------------- \n");printf("1、图书信息录入添加功能:\n");printf("2、图书信息查询功能:\n");printf("3、图书信息排序功能:\n");printf("4、图书的修改功能:\n");printf("5、图书的删除功能:\n");printf("6、图书借阅功能:\n");printf("7、图书归还功能:\n");printf("0、退出系统:\n");printf("请选择您需要的操作:\n");}int main() //主函数{int s;LinkList *L;L = (LinkList *) malloc(sizeof(LinkList));InitList(L);menu();printf("请输入编号:\n");scanf("%d", &s);while (s != 0) {switch (s) {case 1:CreateListR(L);break;case 2:LocateElem(L);break;case 3:Sort(L);Display(L);break;case 4:ModifyList(L);break;case 5:ListDelete(L);break;case 6:Borrow(L);break;case 7:Return(L);break;case 0:printf("谢谢使用\n");break;}scanf("%d", &s);}return 0; }。
数据结构课程设计图书管理系统

数据结构课程设计图书管理系统设计图书管理系统一、引言图书管理系统是为了方便图书馆进行图书的管理、借阅和归还而开发的软件系统。
本文将详细介绍设计一个图书管理系统所需的标准格式文本。
二、系统概述本图书管理系统旨在提供一个高效、便捷的图书管理平台,帮助图书馆实现图书的分类、借阅、归还、查询等功能。
系统主要包括以下模块:图书管理模块、借阅管理模块、读者管理模块、系统管理模块。
三、图书管理模块1. 图书录入功能a. 系统管理员可以录入新书籍的相关信息,包括书名、作者、出版社、ISBN 号、价格等。
b. 系统应提供图书信息的校验功能,确保录入的图书信息准确无误。
c. 系统应提供图书封面图片上传功能,以便读者更直观地了解图书。
2. 图书查询功能a. 读者和管理员可以根据关键字、作者、出版社等条件进行图书查询。
b. 系统应提供模糊查询和精确查询两种方式,以满足不同用户的需求。
3. 图书借阅功能a. 读者可以通过系统查询图书的借阅情况,并选择借阅。
b. 系统应记录借阅信息,包括借阅时间、归还时间等。
4. 图书归还功能a. 读者在归还图书时,系统应自动计算借阅天数,并生成相应的借阅费用。
b. 系统应提供归还图书的操作记录,以便管理员查看。
四、借阅管理模块1. 借阅记录查询功能a. 管理员可以查询所有借阅记录,并根据条件进行筛选。
b. 系统应提供按照借阅时间、归还时间等进行排序的功能,方便管理员进行统计分析。
2. 借阅统计功能a. 系统应提供借阅数量、借阅率等统计功能,方便管理员对图书馆的借阅情况进行分析。
五、读者管理模块1. 读者注册功能a. 读者可以通过系统进行注册,并填写个人信息。
b. 系统应提供校验功能,确保读者信息的准确性。
2. 读者信息修改功能a. 读者可以通过系统修改个人信息,如联系方式、密码等。
3. 读者信息查询功能a. 读者可以查询自己的借阅记录、借阅情况等。
六、系统管理模块1. 管理员管理功能a. 系统管理员可以管理其他管理员的账号和权限。
数据结构——图书管理系统

石河子大学信息科学与技术学院计算机科学与技术专业课程设计报告二、结构图1.功能结构图2.主流程图图书管理系统新增图书信息的输入查询在架的图书信息恢复被删除图书信息为读者办理借书注册办理借书手续办理还书手续退出系统三、程序设计的想法和具体思路图书管理系统分为图书管理和会员管理两大部分。
设计一个图书类Book ,包括一本图书的基本管理功能,具有以下私有数据:int tag;//删除标记 1:已删 0:未删int no;//图书编号 char name[20];//书名int onshelf;//是否再架 1:再架 2:已借设计一个图书库类BDatabase ,具有以下私有数据:让用户选择要实行的操作.设置选择变量choiceStart输出提示借书 功能 Choice=1 还书 功能 Choice=2 图书 维护 Choice=3 读者 维护 Choice=4 退出 系统 Choice=0StopChoice =‘其它数值’提示输入错误int top; //图书记录指针Book book[Maxb]; //图书记录在其构造函数中,将bo ok.txt文件的所有录入读到book[]中。
处理完毕,在析构函数中将book[]中的所有未删除记录笑道book.txt文件中,中间的处理是对book[]进行的。
设计一个读者类Reader,包括一个读者的基本管理功能,具有以下私有数据:int tag; //删除标记 1:已删 0:未删int no; //读者编号char name[10]; //读者姓名int borbook[Maxbor];//所借图书设计一个读者库类RDatabase,具有以下私有数据:int top; //读者记录指针Reader read[Maxr];//读者记录在其构造函数中,将reader.txt文件的所有记录读到read[]中。
处理完毕,在析构函数中将read[]中的所有未删除记录写到reader.txt文件中,中间的处理都是对reader[]进行的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WORD格式石河子大学信息科学与技术学院计算机科学与技术专业课程设计报告二、结构图1.功能结构图图书管理系统新增图查询在恢复被为读者办理借办理还退出系书信息架的图删除图办理借书手续书手续统的输入书信息书信息书注册2.主流程图Start设置选择变量choice输出提示让用户选择要实行的操作 .借书功能还书功能图书维护读者维护退出系统Choice=Choice=1Choice=2Choice=3Choice=4Choice=0‘其它数值’提示输入错误Stop三、程序设计的想法和具体思路图书管理系统分为图书管理和会员管理两大部分。
设计一个图书类Book,包括一本图书的基本管理功能,具有以下私有数据:inttag;// 删除标记1:已删0:未删intno;// 图书编号charname[20];// 书名intonshelf;// 是否再架 1:再架2:已借1inttop; // 图书记录指针Bookbook[Maxb];// 图书记录在其构造函数中,将book.txt 文件的所有录入读到book[]中。
处理完毕,在析构函数中将book[]中的所有未删除记录笑道book.txt 文件中,中间的处理是对book[]进行的。
设计一个读者类 Reader,包括一个读者的基本管理功能,具有以下私有数据:inttag;// 删除标记1:已删0:未删intno; // 读者编号charname[10];// 读者姓名intborbook[Maxbor];// 所借图书设计一个读者库类RDatabase,具有以下私有数据:inttop; // 读者记录指针Readerread[Maxr];// 读者记录在其构造函数中,将reader.txt 文件的所有记录读到read[] 中。
处理完毕,在析构函数中将 read[] 中的所有未删除记录写到reader.txt 文件中,中间的处理都是对reader[] 进行的。
四、参考文献1)谭浩强,《C++程序设计》,北京,清华大学出版社,2006年2)李振鹏,张小莉,郑艳娟,《数据结构》,中国铁道出版社,2007年3)杨小平,《VisualC++项目案例导航》,北京,科学出版社,2002年4)DavidConger,《软件开发:编程与设计》,北京,清华大学出版社,2006年.5) FrancisGlassborowRobertaAllen ,《YouCanDoIt!——C++编程新手互动教程》,北京,人民邮电出版社,2005年五、课程设计总结心得体会选到这个课程设计题目的时候,感觉挺简单的,查找,增加,,显示,统计,这些平时都学过,用过,但是实际操作中还是遇到了很多问题,所以特意到图书馆专门借了几本关于数据结构程序设计方面的书,同时也希望能把平时没有学好的地方好好补一补,能对知识有更深层次的理解.一切准备就绪,把平时写的相关的程序出来参考,对比,慢慢才找到一些感觉,把源程序写出来.经过几天终于写完了程序的初稿,然后输入电脑,一编译,发现错误几十个,还有好多警告,只得一条一条的看,一个一个的改,首当其冲的是再输入电脑过程中不小心漏掉的标点符号,有些括号忘了,有些是忘了写分号等粗心导致的小毛病,这些错误很容易改正.到后面的错误就有些麻烦了,当中有个头文件忘了写,编译过程中好几十个错误就是改不过来, 后来和同学讨论才知道原来错在什么地方,这样一下就变成了几个错误,这时信心大增,有些错误都看不懂错在那里,由于英文水平不太好,只好去查字典,还要推敲这个单词在这里到底是哪个意思,再加上以往的经验和同学的帮助下,好不容易才得到零错误零警告,那时真开心,我的程序终于可以运行了,激动的按下运行,得到了预想的界面,按照提示操作,都很顺利,一个一个的实验每一个功能,都以为成功了,当运行到了删除功能时,突然出现死循环,只见操作界面不停的闪.这是逻辑错误,很难找,后来只有一步一步的,一句一句的检查,找到了错误的根源,并改正.从进入大学来,我们学习了C++,数据结构。
特别是高老师的认真授课,精心讲解下,同学们学到了很多东西,知识方面的很多,还有平时?心的习惯也养成了.这对我们以后的学习生活很有好处,最后感谢常老师一学期以来对我们的教育帮助,对我们程序设计时的辅导.六、程序运行结果附录:源代码#include<iostream> #include<iomanip>#include<string>#include<fstream>// 输入/输出文件流类usingnamespacestd;constintMaxr=100;// 最多的读者constintMaxb=100;// 最多的图书constintMaxbor=5;// 每位读者最多借五本书//读者类,实现对读者的信息的描述classReader{private:inttag;// 删除标记1:已删0:未删intno; // 读者编号charname[10];// 读者姓名intborbook[Maxbor];// 所借图书public:Reader(){}char*getname(){returnname;} // 获取姓名intgettag(){returntag;} // 获取删除标记intgetno(){returnno;} // 获取读者编号voidsetname(charna[]) // 设置姓名{strcpy(name,na);}voiddelbook(){tag=1;}// 设置删除标记1:已删0:未删voidaddreader(intn,char*na)// 增加读者{tag=0;no=n;strcpy(name,na);for(inti=0;i<Maxbor;i++)borbook[i]=0;}voidborrowbook(intbookid)// 借书操作{for(inti=0;i<Maxbor;i++){if(borbook[i]==0){borbook[i]=bookid;return;}intretbook(intbookid)// 还书操作5{for(inti=0;i<Maxbor;i++){if(borbook[i]==bookid){borbook[i]=0;return1;}}return0;}voiddisp()/ /读出读者信息{cout<<setw(5)<<no<<setw(10)<<name<<" 借书编号:[";for(inti=0;i<Maxbor;i++)if(borbook[i]!=0)cout<<borbook[i]<<"|";cout<<"]"<<endl;}};//读者类库,实现建立读者的个人资料classRDatabase{private:inttop; // 读者记录指针Readerread[Maxr];// 读者记录public:RDatabase() // 构造函数,将reader.txt 读到read[] 中{Readers;top=-1;fstreamfile("reader.txt",ios::in);//打开一个输入文件while(1){file.read((char*)&s,sizeof(s));if(!file)break;top++;read[top]=s;}{top=-1;6}intaddreader(intn,char*na)// 添加读者时先查找是否存在{Reader*p=query(n);if(p==NULL){top++;read[top].addreader(n,na);return1;}return0;}Reader*query(intreaderid)// 按编号查找{for(inti=0;i<=top;i++)if(read[i].getno()==readerid&&read[i].gettag()==0){return&read[i];}returnNULL;}voiddisp()// 输出所有读者信息{for(inti=0;i<=top;i++)read[i].disp();}voidreaderdata();// 读者库维护~RDatabase()// 析构函数,将read[] 写到reader.txt 文件中{fstreamfile("reader.txt",ios::out);for(inti=0;i<=top;i++)if(read[i].gettag()==0)file.write((char*)&read[i],sizeof(read[i]));file.close();}};voidRDatabase::readerdata(){charchoice;charrname[20];intreaderid;Reader*r;while(choice!='0')7{cout<<"读者维护:t1.新增t2.更改t3.删除t4.查找t5.显示t6.全删t0.退出"<<endl;cin>>choice;switch(choice){case'1':cout<<" 输入读者编号:";cin>>readerid;cout<< "输入读者姓名:";cin>>rname;addreader(readerid,rname);break;case'2':cout<<" 输入读者编号:";cin>>readerid;r=query(readerid);if(r==NULL){cout<<" 该读者不存在"<<endl;break;}cout<<" 输入新的姓名:";cin>>rname;r->setname(rname);break;case'3':cout<<" 输入读者编号:";cin>>readerid;r=query(readerid);if(r==NULL){cout<<" 该读者不存在"<<endl;break;}r->delbook();break;case'4':cout<<" 读入读者编号:";cin>>readerid;r=query(readerid);if(r==NULL){cout<<" 该读者不存在"<<endl;break;8}r->disp();break;case'5':disp();break;case'6':clear();break;default:cout<<" 输入错误,请从新输入:";break;}}}//图书类,实现对图书的描述,图书的编号,书名,借出,还入等classBook{private:inttag;// 删除标记 1:已删0:未删intno;// 图书编号charname[20];// 书名intonshelf;// 是否再架1:再架2:已借public:Book(){}char*getname(){returnname;}// 获取姓名intgetno(){returnno;}// 获取图书编号intgettag(){returntag;}// 获取删除标记voidsetname(charna[])// 设置书名{strcpy(name,na);}voiddelbook(){tag=1;}// 删除图书voidaddbook(intn,char*na)// 增加图书{tag=0;no=n;strcpy(name,na);onshelf=1;}intborrowbook()// 借书操作{if(onshelf==1){onshelf=0;return1;9}return0;}voidretbook()// 还书操作{onshelf=1;}voiddisp()// 输出图书{cout<<setw(6)<<no<<setw(18)<<name<<setw(10) <<(onshelf==1?" 在架":"已借")<<endl;}};//图书库类,实现对图书的维护,查找,删除等classBDatabase{private:inttop; // 图书记录指针Bookbook[Maxb];// 图书记录public:BDatabase()// 构造函数,将book.txt 读到book[]中{Bookb;top=-1;fstreamfile("book.txt",ios::in);while(1){file.read((char*)&b,sizeof(b));if(!file)break;top++;book[top]=b;}file.close();}voidclear()// 全删{top=-1;}intaddbook(intn,char*na)// 增加图书{Book*p=query(n);if(NULL==p){top++;book[top].addbook(n,na);10return1;}return0;}Book*query(intbookid)// 查找图书{for(inti=0;i<=top;i++)if(book[i].getno()==bookid&&book[i].gettag()==0){return&book[i];}returnNULL;}voidbookdata();// 图书库维护voiddisp(){for(inti=0;i<=top;i++)if(book[i].gettag()==0)book[i].disp();}~BDatabase()// 析构函数,将book[]写到book.txt 文件中{fstreamfile("book.txt",ios::out);for(inti=0;i<=top;i++)if(book[i].gettag()==0)file.write((char*)&book[i],sizeof(book[i]));file.close();}};voidBDatabase::bookdata(){charchoice;charbname[40];intbookid;Book*b;while(choice!='0'){cout<<"图书维护:t1.新增t2.更改t3.删除t4.查找t5.显示t6.全删t0.退出"<<endl;cin>>choice;switch(choice){case'1':cout<<" 输入图书编号:"<<endl;cin>>bookid;11cout<<" 输入图书书名:"<<endl;cin>>bname;addbook(bookid,bname);break;case'2':cout<<" 输入图书编号:"<<endl;cin>>bookid;b=query(bookid);if(b==NULL){cout<<" 该图书不存在"<<endl;break;}cout<<" 输入新的书名:"<<endl;cin>>bname;b->setname(bname);break;case'3':cout<<" 读入图书编号:"<<endl;cin>>bookid;b=query(bookid);if(b==NULL){cout<<" 该图书不存在"<<endl;break;}b->delbook();break;case'4':cout<<" 读入图书编号:"<<endl;cin>>bookid;b=query(bookid);if(b==NULL){cout<<" 该图书不存在"<<endl;break;}b->disp();break;case'5':disp();break;case'6':clear();12break;default:cout<<" 输入错误,请从新输入:";}}}//main() 函数的实现,程序的主界面的引导voidmain(){charchoice;intbookid,readerid;RDatabaseReaderDB;Reader*r;BDatabaseBookDB;Book*b;while(choice!='0'){ cout<<endl<<endl<<" ttt图书管理系统n";cout<<"1.借书t2.还书t3.图书维护t4.读者维护t0.离开"<<endl;cin>>choice;switch(choice){case'1':cout<<" 借书n读者编号:";cin>>readerid;cout<<" 图书编号:";cin>>bookid;r=ReaderDB.query(readerid);// 按编号查找if(NULL==r){cout<<" 不存在该读者,不能借书"<<endl;break;}b=BookDB.query(bookid);if(b==NULL){cout<<" 不存在该图书,不能借书"<<endl;break;}if(b->borrowbook()==0){cout<<" 该图书已借出,不能借书"<<endl;break;}r->borrowbook(b->getno());break;case'2':13cout<<"还书n读者编号:";cin>>readerid;cout<<" 图书编号:";cin>>bookid;r=ReaderDB.query(readerid);if(r==NULL){cout<<" 不存在该读者,不能还书"<<endl;break;}b=BookDB.query(bookid);if(b==NULL){cout<<" 不存在该图书,不能还书"<<endl;break;}b->retbook();r->retbook(b->getno());break;case'3':BookDB.bookdata();break;case'4':ReaderDB.readerdata();break;default:cout<<" 输入错误,请从新输入:";}}}14。