c++课设图书管理系统
图书管理系统 课程设计参考题目

一、图书馆书籍管理系统实现厦门软件学院图书馆书籍管理系统,要求设计中包括图书馆内书籍信息、持有借书证的读者的基本信息以及图书的借阅记录信息,系统面向两种用户,图书管理员和持有借书证的读者。
1、图书管理员又分为以下两类:一般管理人员,可以进行如下操作书籍档案管理●图书的分类管理(能够增删改新的类别)●新书登记入库●图书信息的修改●过期书的删除●图书的查询检索和统计读者注册管理:●读者的注册●读者的部分信息的修改(读者的类型,读者的工作单位)●读者的删除●读者信息的查询检索图书的借还管理:●借书登记●还书登记●续借登记●借书人当前借书记录、历史借书记录的检索查询高级管理人员,除一般管理人员的权限外,还可进行如下操作:●用户的密码管理。
●权限管理。
用户权限的分配.2、读者:读者又分为本科生、研究生、讲师等,他们所共有的特性如下:都可对书籍进行借阅,可查询书籍,可修改个人信息(读者的类型、工作单位不可自己修改),其中本科生可同时借阅4本书籍,借阅期限1个月,研究生可借阅6本书籍,借阅期限1个月,讲师可借阅10本书籍,借阅期限1个月,可能还会增加副教授、教授等读者类型,借阅数量和借阅期限随类型而变化。
二、物流公司管理系统实现一个物流公司管理系统,分为车队管理员、仓储管理员以及调度管理员、客户几部分,要求实现如下功能:1.对于车队管理员●管理车队下辖车辆的信息:包括车辆型号,车牌,车辆的载重量等等信息。
●管理车辆状态:如车辆是否处于可以执行任务,是否维修,是否在任务中等状态。
●管理司机状态:对于被分配任务的车辆,看司机是否可以执行任务●根据调度管理员下达的货运任务安排车辆、司机执行2.对于仓储管理员●管理仓库的相关信息,仓库是否空闲,空闲的位置,仓库的类型(比如冷库,危险品库),状态是否正常●根据调度管理员下达的仓储任务,为货物安排仓储3.调度管理员●管理客户提交的货运请求,如所运算货物的类型、数量、属性(危险品,易燃易爆品),目的地,时间限制●制定客户货物德仓储计划,决定那些货物在什么时间需要存储,下发给仓库管理员●制定货物的运输计划,4.客户●提交订单,包括所运送商品的类型、数量、属性,目的地,时间限制●参看订单完成情况5.超级管理员●管理各类用户,添加用户,删除用户,修改用户信息等等操作.三、选课安排系统学校教务处负责根据各学院提交的一学期课程计划为课程安排教室,而学生根据课程的安排选择自己的课程1。
《C语言》期末项目答辩实施方案解析

《C语言程序设计》课程期末项目答辩考核实施方案一、考核目的:《C语言程序设计》是理论与实践并存的一门课程。
通过项目答辩的方式考核,旨在考察学生对课程知识掌握的深度和广度,培养学生的综合应用能力,提高学生利用C语言解决实际编程的实践能力。
此外,还可以考察学生PPT和Word的使用情况。
二、考核内容:学生自主组成3-5人的小组形式,于学期中期从老师处领取期末考试项目,具体项目包括:题目1:学生学籍管理系统;题目2:学生信息管理系统;题目3:学生成绩管理系统;题目4:职工信息管理系统;题目5:彩票开奖系统;题目6:ATM系统;题目7:多功能行李托运系统;题目8:图书管理系统;题目9:教务管理系统;题目10:通讯录管理系统;题目11:多功能日历输出系统;题目12:多功能计算器;三、考核时间:根据学院教学工作日志的安排,定于第17—18周利用六个学时进行。
四、考核前准备:1、每个小组在18周前提交自己汇报的PPT和源代码电子版。
2、小组各成员共同编写课程设计报告书,于答辩前上交纸质版和电子版各一份。
(例:《学生信息管理系统》。
具体内容及格式要求见附件)3、所有参加考试的学生每人写一份《C语言程序设计》课程学习心得体会附在课程设计报告的后面打印上交。
五、考核安排:1、每组选一个代表进行抽签,根据抽签顺序进行汇报。
2、由教师根据平时学生学习情况,在每组选定一人组成评委团,共同完成对每组项目的打分。
2、每组由评委随即抽选一个学生做项目汇报,汇报内容包括小组分工、程序设计思路(流程图展示)、程序功能描述(最少实现两个功能、多一个功能加5分未完成两个功能的扣30分)、程序中所涉及到的知识点,每一个函数(部分)的功能(详细介绍),测试数据的设置,程序结果的演示、根据运行结果分析程序优缺点。
(15分钟)3、由评委就程序随机提出问题,此部分项目组所有成员可以作答,相互间可以补充(主要考察基础知识的掌握情况及团队的合作能力)。
数据库复习题

1.数据库系统与文件系统的根本区别是( D ) 。
A. 数据库系统的数据共享性高;B. 数据库系统的数据独立性高;C. 数据库系统的数据冗余度低;D. 数据库系统实现整体数据的结构化;2.数据库系统的三级模式中,表达数据逻辑结构的是 ( B )。
A.外模式B.模式C.用户模式D.内模式3. 数据库系统是采用了数据库技术的计算机系统,数据库系统由数据库、数据库管理系统、应用系统和(D)。
A.系统分析员B.程序员C. 操作员D.数据库管理员4.关系数据库规范化的目的是(A)。
A. 消除插入、删除异常和数据冗余B. 提高查询速度C. 保证数据的安全性和完整性D. 减少数据操作的复杂性5.下列关于关系的属性说法不正确...的是( B )。
A.属性的左右顺序不重要,顺序不同,但关系是同一个关系B.属性可以同名,但它们不能出自同一个域,以示是两个不同的属性C.属性的值是原子型,不可再分D.属性名称不同,但可来自同一个域6.SQL语言中删除基本表的语句是(B)A.DELETE; B. DROP; C. ALTER; D.REVOKE;7. 在SQL中,与关系代数中的投影运算对应的字句是(A)。
A.selectB.fromC.whereD.order by8. select语句执行的结果是( C )。
A.数据项B.元祖C.表D.数据库9.关系数据库的标准语言是( C )。
A.关系代数B.关系演算C.SQLD.oracle10. 在select语句中使用*表示( B )。
A.选择任何属性B.选择全部属性C.选择全部元祖D.选择键码11.在select语句中使用min(属性名)时,属性名( C )。
A.必须是数值型B.必须是字符型C.必须是数值型或字符型D.不限制数据类型12. 在select语句中使用AVG(属性名)时,属性名( A )。
A.必须是数值型B.必须是字符型C.必须是数值型或字符型D.不限制数据类型13.在SQL中,对嵌套查询的处理原则是( B )。
2020年中小学教师信息技术能力考试试题库及答案(五)

2020年中小学教师信息技术能力考试试题库及答案(五)1.与PPT相比,交互式电子白板在课堂教学中有利于强化学生的知识构建A. 正确B. 错误答案:A解析:2.课程资源包括教材、教师、学生、家长以及学校、家庭和社区中所有有利于实现课程目标,促进教师专业成长和学生个性全面发展的各种资源A. 正确B. 错误答案:A解析:3.百宝箱中要使用的图形(即放在信封下的图形)要设计为拖动副本A. 正确B. 错误答案:A解析:4.资料、工具型教学软件不仅提供某种教学功能或某类教学资料,而且还反映具体的教学过程A. 正确B. 错误答案:B解析:5.在幻灯片中添加图片操作,文本框的大小可以改变A. 正确B. 错误答案:A解析:6.在Authorware的13个图标中,只有显示图标能够显示静止图像。
A. 正确B. 错误答案:B解析:7.合中的教师评价可简化为三个阶段,第一阶段是对教学设计的评价,第二阶段是对教学实施的评价,第三阶段是总结经验,形成模式A. 正确B. 错误答案:A解析:8.网络学习空间只属于技术领域范畴的概念A. 正确B. 错误答案:B解析:9.学习教学子系统是基于web的学习系统的必备组成部分。
A. 正确B. 错误答案:A解析:10.ipad在课堂中可用于教学管理A. 正确B. 错误答案:A解析:11.在多媒体网络环境下为学生创设的情境体验可以完全取代学生的亲自实践操作A. 正确B. 错误答案:B解析:12.合作学习的问题要适合合作研究,要基于独立思考基础之上。
A. 正确B. 错误答案:A解析:13.学习监控的主要作用是保证学习者能有效的进行学习A. 正确B. 错误答案:A解析:14.网络教学平台学习评价系统的设计原则是评价与教学紧密结合。
A. 正确B. 错误答案:A解析:15.中小学教师信息技术能力提升工程应充分考虑培训主体庞大,充分考虑教师群体间的差异性A. 正确B. 错误答案:A解析:16.教师工作坊中,成员以不同的角色参与研究。
比较初等教育-国家开放大学电大学习网形考作业题目答案

比较初等教育一、单选题1.“比较教育”作为一个术语和一个学科领域,最早是由19世纪初的一位法国教育家和社会活动家提出来的。
A.朱利安B.索科洛娃C.塔西陀D.施奈德正确答案: A2.朱利安于1817年撰写出版了,为人类构建起第一个比较教育的发展框架。
A.《演说家》B.《共和政体》C.《比较教育研究的计划和初步建议》D.《比较教育》正确答案: C3.在他撰写的《波斯国王塞勒斯传》中,比较系统地记述和评论了古波斯的教育见闻。
A.埃德蒙.金B.色诺芬C.琼斯D.朱利安正确答案: B4.西赛罗是古罗马的一位著名学者和思想家。
他在《演说家》和《共和政体》等著作中,比较研究和两个城邦的教育训练的方法。
A.古罗马、古埃及B.古罗马、古印度C.古希腊雅典、斯巴达D.古希腊、斯巴达正确答案: C5.唐朝高僧玄奘旅行取经20余年,完成巨著,记载了印度的西域国家的民族历史、社会宗教和文化教育,详细介绍了印度等国的教育制度、学校课程和教师教学。
A.《西游记》B.《大唐西域记》C.《礼记》D.《马可.波罗游记》正确答案: B6.1933年,美国哥伦比亚大学教授康德尔出版了比较教育领域中具有里程碑意义的经典著作。
A.《比较教育》B.《比较教育研究》C.《教育年鉴》D.《国际比较教育》正确答案: B7.英国比较教育家尼古拉斯.汉斯认为,“”是比较研究各国教育中,必须特别重视的教育因素。
A.历史性B.国际性C.名族性D.传统性正确答案: C8.由于康德尔、汉斯、施耐德等同辈学者的大力倡导,用的方法去探寻制约教育发展的因素,成为20世纪上半期比较教育的基本研究方法。
A.生物学B.动物学C.比较D.历史学正确答案: D9.美国教育行政制度的基本特点之一是高度的。
A.全国统一B.地方分权C.自治D.民主统一正确答案: B10.目前,英国实行年义务教育。
A.10B.11C.12D.13正确答案: B11.法国是个政教分离主义的国家,国立学校都是学校,不允许进行任何宗教教育。
第六章 计算机信息系统与数据库-六

第六章计算机信息系统与数据库一、单项选择题1.数据库系统中,数据的逻辑独立性是指_______。
A.应用程序与数据库中的数据相互独立B.数据库中的数据与其逻辑结构相互独立C.应用程序与数据库的逻辑结构相互独立D.系统的逻辑结构与数据存储结构相互独立【答案】C【解析】数据独立性包括数据的逻辑独立性和数据的物理独立性。
数据的逻辑独立性是指用户的应用程序与数据库的逻辑结构相互独立。
数据的物理独立性是指用户的应用程序与存储在数据库中的数据相互独立。
2.下列实体集的联系中,属于一对多联系的是_______。
A.学生和课程的联系B.学号与学生的联系C.学生与教室座位的联系D.教研室和老师的联系【答案】D【解析】联系有三类: ( 1)一对一联系( 1∶1) :对应实体集A中的每一个实体,实体集B中至多有一个实体与之联系;反之亦然,则称实体集A和实体集B具有1∶1联系。
( 2)一对多联系( 1∶n) :对于实体集A中的每一个实体,实体集B中有n个实体与之联系;而对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B 存在1∶n的联系。
( 3)多对多联系:若对于实体集A中的每一个实体,实体集B中有n个实体与之联系;而对于实体集B中的每一个实体,实体集A中也有m个实体与之联系,则称该两个实体集A、B之间存在m∶n联系。
A选项:一个学生可以选多门课程,一门课程可以有多个学生选择,所以学生和课程之间的联系是“多对多联系”。
B选项:一个学号只能被一个学生使用,反过来讲,一个学生也只能有一个学号,所以学号与学生之间的联系是“一对一联系”。
C选项:一个学生在教室里只能有一个属于他的座位,反过来讲,一个座位也只能被一个学生坐,所以学生与教室座位的联系是“一对一联系”。
D选项:一个教研室可以有多个老师,反过来讲,一个老师只从属于一个教研室,所以教研室和老师的联系是“一对多联系”。
3.数据模型是在数据库领域中定义数据及其操作的一种抽象表示,下面关于数据模型的说法,错误的是________。
图书管理系统-课程设计报告

《数据库系统概论》课程设计报告题目:图书管理系统专业:网络工程班级:姓名:指导教师:成绩:计算机学院2017年12月8日目录1设计内容及要求1.1 背景1.2 设计要求2概要设计2.1 部分E-R图2.2 总体E-R图3逻辑结构设计3.1表结构介绍4设计结果与分析4.1系统开发平台4.2用户界面的实现5 结束语5.1课程设计心得6 参考文献1、设计内容及要求1.1 背景今天,计算机的价格已经十分低廉,性能却有了长足的进步。
它已经被应用于许多领域,计算机之所以如此流行的原因主要有以下几个方面:首先,计算机可以代替人工进行许多繁杂的劳动;其次,计算机可以节省许多资源;第三,计算机可以大大的提高人们的工作效率;第四,计算机可以使敏感文档更加安全,等等。
(1)基本思路根据实际情况,我们使用原型法(Rapid Prototyping)即以少量代价快速地构造一个可执行的软件系统模型。
使用户和开发人员可以较快地确定需求,然后采用循环进化的开发方式,对系统模型作连续的精化,将系统需具备的性质逐渐增加上去,直到所有的性质全部满足。
此时模块也发展成为最终产品了。
我作为一个网络工程专业的本科生,希望可以在这方面有所贡献。
改革的总设计师邓小平同志曾经说过:“科学技术是第一生产力”,我希望能用我这几年的所学编制出一个实用的应用程序来帮助这些学校图书馆进行更有效的图书管理。
归纳起来,好处大约有以下几点:(1)可以存储所有的图书档案,安全、高效;(2)只需一到二名图书录入员即可操作系统,节省大量人力;(3)可以迅速查到所需信息。
1.2 设计要求借书------根据您提供的图书条形码和图书编号确认图书,再据读者的编号确认读者后把此书借给这位读者。
还书------根据您提供的图书条形码和图书编号确认图书,再据读者的编号确认读者后把此书归还。
图书管理------对所有图书的资料进行添加,修改和删除等操作。
读者管理------对所有读者的资料进行添加,修改和删除等操作。
数据库原理考试题库及答案(5)

数据库原理考试题库及答案(5)数据库原理考试题库及答案课程代码:2120第⼀部分选择题 (共40分)⼀、单项选择题(本⼤题共20⼩题,每⼩题2分,共40分)在每⼩题列出的四个选项中只有⼀个是符合题⽬要求的。
请将其代码填在题后的括号内。
错选或未选均⽆分。
1.在数据库系统中,⾯向⽤户、也就是⽤户所涉及的数据库被称为( )A.外模式B.概念模式C.存储模式D.模式2.数据模型表⽰的是数据库框架,要构建为数据库,必须在框架的约束下填上( ) A.具体数据 B.取值范围C.联系D.联系⽅式3.学⽣实体通过"学号"、"姓名"、"年龄"、"性别"和"成绩"等属性来表明学⽣状况,这是( )A.实体值B.实体型C.属性值D.属性型4.设⼀个仓库存放多种商品,同⼀种商品只能存放在⼀个仓库中,仓库与商品是( )A.⼀对⼀的联系B.⼀对多的联系C.多对⼀的联系D.多对多的联系5.将1NF规范为2NF,应( )A.消除了⾮主属性对键的部分函数依赖B.消除了⾮主属性对键的传递函数依赖C.消除了主属性对键的部分函数依赖和传递函数依赖D.使每⼀个⾮主属性都完全函数依赖于主键6.建⽴E-R模型的⼯作属于数据库⽣命周期中的( )A.分析阶段B.设计阶段C.编码阶段7.针对数据库⽂件的某个关键字段的值,在逻辑上重新排列库⽂件顺序所建⽴的⽂件称为( )A.⽂本⽂件B.索引⽂件C.排序⽂件D.命令⽂件8.已知a=″car″,b=″bus″,c=″class″,d=″duck″,e=MIN(a,b,c,d),则e等于( )A.duckB.classC.busD.car9.使下列程序不能正确运⾏的是( )STORE _______ TO addSTORE ″20&add.10″ TO result&resultA.{+}B.′+′C.″+″D.[+]10.已知DIMENSION aa(2,3),该数组的第2个数组元素是( )A.aa(0,1)B.aa(1,0)C.aa(1,2)D.aa(2,1) 11.计算表达式3+5>4.AND.″ab″-″c″$″babcd″的值时,运算顺序为( )A.+>.AND.-$B..AND.$+->C.+-$>.AND. D.+.AND.$->12.执⾏语句″?LEN(SUBSTR(REPLICATE(″*″,10),4,5))″后输出( )A.5B.2C.4D.613.FoxPro中APPEND BLANK命令的功能是在当前已打开的数据库⽂件( )B.顶部追加⼀条空记录C.当前记录前追加⼀条空记录D.当前记录后追加⼀条空记录14.FoxPro中不能对数据库⽂件中记录进⾏操作的命令是( )A.EDITB.CHANGEC.BROWSED.MODIFY15.数据库⽂件已按"专业"字段进⾏索引,并已打开索引⽂件,对各专业总分进⾏分类求和的命令是( )A.TOTAL ON ″总分″ TO cjzfB.TOTAL ON ″专业″ TO cjzf FIELDS 总分C.TOTAL ON 总分 TO cjzfD.TOTAL ON 专业 TO cjzf FIELDS 总分16.当前打开的⼀个数据库⽂件中有20条记录,运⾏命令″?EOF( )″的结果为.T.,则运⾏命令″? RECNO( )″的结果是( )A.20B.21C.0D.117.在某图书数据库中已按图书名字段创建的索引⽂件已打开,并已对变量name1赋值"⾼等数学",要使⽤name1来查找图书,应使⽤的命令是( )A.SEEK &name1B.FIND name1C.FIND &name1D.LOCATE FOR name118.FoxPro中有关变量赋值语句正确的描述是( )A.ACCEPT能够对数值型变量赋值B.INPUT只能对数值型变量赋值C.ACCEPT、INPUT都能对字符型变量赋值D.STORE⼀次只能对⼀个内存变量赋值19.建⽴过程⽂件的FoxPro命令是( )A.MODIFY COMMANDB.MODIFY PROCEDUREC.CREATE COMMANDD.CREATE PROCEDUREA.IF…B.IF…C.DO WHILE…D.DO WHILE…┇┇┇┇DO WHILE…ENDIF IF…IF…┇┇┇┇ENDDO DO WHILE ENDIF ENDDO┇┇┇┇ENDIF ENDDO ENDDO ENDIF第⼆部分⾮选择题 (共60分)⼆、填空题(本⼤题共10⼩题,每⼩题1分,共10分)不写解答过程,将正确的答案写在每⼩题的空格内。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京航空航天大学《面向对象程序设计语言》课程设计报告图书管理系统学号:姓名:日期:目录一.需求分析 (2)二.程序主要功能 (2)三.程序运行平台 (2)四.系统功能框架图 (3)五.程序类说明 (4)六.模块分析 (6)七.比较有特色的地方 (7)八.存在的不足与对策 (11)九.编程体会 (12)十.程序源代码 (13)一.需求分析本系统旨在实现一个小型的图书管理系统,对于一个小型的图书馆或藏书室来说,实施本系统不仅可以减少工作人员数量,降低成本,而且可以大大提高工作效率,降低工作强度,方便读者借书查书及办理各种手续,更方便工作人员对图书进行更有效的管理。
程序主要实现读者管理、图书基本信息及库存管理、图书借还管理以及一些辅助功能等。
(1)以菜单的方式工作(2)图书、读者的基本信息的新增(3)图书、读者的基本信息的修改(4)图书、读者记录的删除(5)图书的借阅,归还(6)查询图书、读者信息及借阅状态二.程序主要功能该程序的主要功能有:读者功能可进行增加读者、读者信息修改、注销读者、读者查询、显示读者信息、显示所有读者信息等操作。
图书信息管理可以进行查询图书、增加图书、删除图书信息、图书信息修改、显示全部图书信息等操作。
其中添加内容包括:书名、ISBN编号、作者、出版商、出版日期、方便读者查看;图书借还功能应该说这是整个系统最主要的功能,借还时要输入编号已及读者编号帮助一个简单的操作指南,指导用户下一步该如何操作。
退出系统在运行时将从文件载入信息。
运行程序后每一步都会有详细的提示,操作简便,大多数地方都考虑到防止用户出现误操作的情况,以提高程序的健壮性,可以放心使用!三.程序运行平台该程序是用VC++制做的,使用Microsoft Visual C++ 运行该程序,具体操作是:打开Microsoft Visual C++ ,菜单栏里点文件→打开工作区→找到“图书管理系统.dsw ”这个文件→打开,或者在资源管理器中双击该文件,此时,VC++会自动打开,并载入该系统相关资源,点击Run 命令菜单或者或用快捷键Ctrl+F5运行该程序。
四.系统功能框架图借书/还书读者信息管图书管理系统图书信息管理帮 助统计查询.新增图书信息 .删除图书信息 .显示图书信息 .修改图书信息 .帮助说明.新增读者信息 .修改读者信息 .删除图书信息 .显示图书信息 .帮助说明 .返回上一层输入图书编号及读者编号.还书借书返回上一层五.程序类说明①有关图书信息的类struct BookInfo{char BookCode[6]; 块分析1、读者信息:下设子菜单,包括:a.新增读者b.修改读者c.删除读者d.读者查询e.显示读者信息f.返回上一层(1)读者编号:读者唯一的识别方式,所以不可以重复,长度小于六个字符。
(2)读者姓名:长度小于20个字符。
(3)读者性别:长度小于三个字符。
2、书库信息:该部分内容最丰富,下设子菜单,包括a.新书入库b.删除c.修改d.返回上一层链表的思路也跟读者信息一样,从头结点开始建,每当新增加一个类节点时,就把新增结点加到链表尾部,再让其中的next指向NULL空,这里没有对链表进行排序。
有关菜单的制作,就是先显示菜单,让用户输入选择,进行输入有效性检查,然后用switch来对不同的选择调用类中不同的函数。
3、借书/还书:借书需要判断的条件不只是判断图书是否存在、图书是否借出、读者是否存在。
还书需要提供读者编号再判断图书是否已经借出。
十.程序源代码#include<iostream>#include<>#include<>#include<fstream>#include<iomanip>#include<>using namespace std;#define BOOKLEN sizeof(struct BookInfo)#define READERLEN sizeof(struct ReaderInfo)书信息管理***"<<endl;cout<<"*2.读者信息管理***"<<endl;cout<<"*3.借书还书****"<<endl;cout<<"*4.统计查询****"<<endl;cout<<"*0.退出系统*****"<<endl;cout<<"请选择0-4:"<<endl;cin>>m;if(m>=0&&m<=4)break;elsecout<<"选择错误,请在0-4中选择"<<endl;}return m;}int CreatSubMenu1(){int m;while(1){cout<<"***图书信息管理*****"<<endl;cout<<"**"<<endl;cout<<"***1.新增图书"<<endl;cout<<"***2.修改图书"<<endl;cout<<"***3.删除图书"<<endl;cout<<"***0.返回上一层**"<<endl;cout<<"请选择0-3:"<<endl;cin>>m;if(m>=0&&m<=3)break;elsecout<<"选择错误,请在0-3中选择"<<endl;}return m;}int CreatSubMenu2(){int m;while(1){cout<<"***读者信息管理*****"<<endl;cout<<"**"<<endl;cout<<"***1.新增读者"<<endl;cout<<"***2.修改读者"<<endl;cout<<"***3.删除读者"<<endl;cout<<"***0.返回上一层**"<<endl;cout<<"请选择0-3:"<<endl;cin>>m;();if(m>=0&&m<=3)break;elsecout<<"选择错误,请在0-3中选择"<<endl;}return m;}int CreatSubMenu3(){int m;while(1){cout<<"***图书流通*****"<<endl;cout<<"**"<<endl;cout<<"****1.借书"<<endl;cout<<"****2.还书"<<endl;cout<<"***0.返回上一层**"<<endl;cout<<"请选择0-2:"<<endl;cin>>m;if(m>=0&&m<=2)break;elsecout<<"选择错误,请在0-2中选择"<<endl;}return m;}int CreatSubMenu4(){int m;while(1){cout<<"*****统计查询****"<<endl;cout<<""<<endl;cout<<"****1.图书清单***"<<endl;cout<<"****2.读者清单***"<<endl;cout<<"****3.图书查询****"<<endl;cout<<"****4.读者查询****"<<endl;cout<<"****0.返回上层*****"<<endl;cout<<"请选择0-4:"<<endl;cin>>m;if(m>=0&&m<=4)break;elsecout<<"选择错误,请在0-4中选择"<<endl;}return m;}int CountBook() //统计已有图书数量(有效图书){struct BookInfo BookTemp;FILE *fp;int count=0;if((fp=fopen("","rb"))==NULL)return 0;else{while(fread(&BookTemp,BOOKLEN,1,fp))if=='1')count++;fclose(fp);return count;}}int CountReader() //统计已有读者人数(有效人数){struct ReaderInfo ReaderTemp;FILE *fp;int count =0;if((fp=fopen("","rb"))==NULL)return 0;else{while(fread(&ReaderTemp,READERLEN,1,fp))if=='1')count++;fclose(fp);return count;}}void SubMenu1() //图书信息管理{int MenuId;while(1){MenuId=CreatSubMenu1();if(MenuId==0)break;switch(MenuId){case 1:AddBookInfo();break;case 2:ModifyBookInfo();break;case 3:DelBookInfo();break;case 0:MainMenu();break;}}}void SubMenu2() //读者信息管理{int MenuId;while(1){MenuId=CreatSubMenu2();if(MenuId==0)break;switch(MenuId){case 1:AddReaderInfo();break;case 2:ModifyReaderInfo();break;case 3:DelReaderInfo();break;case 0:MainMenu();break;}}}void SubMenu3() //图书借阅{int MenuId;while(1){MenuId=CreatSubMenu3();if(MenuId==0)break;switch(MenuId){case 1:BookBorrow();break;case 2:BookReturn();break;case 0:MainMenu();break;}}}void SubMenu4() //信息查询{int MenuId;while(1){MenuId=CreatSubMenu4();if(MenuId==0)break;switch(MenuId){case 1:ShowBookInfo();break;case 2:ShowReaderInfo();break;case 3:SearchReader();break;case 4:SearchBook();break;case 0:MainMenu();break;}}}void AddBookInfo() //新增图书记录{struct BookInfo MyBook;cout<<"请输入图书编号"<<endl;cin>>;while(IsBookExist){cout<<"图书已存在,请重新输入"<<endl;cin>>;}cout<<"请输入书名"<<endl;cin>>;cout<<"请输入作者"<<endl;cin>>;cout<<"请输入出版商"<<endl;cin>>;cout<<"请输入isbn号"<<endl;cin>>;cout<<"请输入出版日期"<<endl;cin>>;='0';strcpy,"0");='1';FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}int SetPs; //查询写入文件位置SetPs=InvalidBookPosition();if(SetPs==-1) //图书记录都是有效的,文件指针定义在文件尾fseek(fp,0,SEEK_END);elsefseek(fp,(long)BOOKLEN*SetPs,SEEK_SET); //重新定位写入位置fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"新增图书成功,现有图书"<<CountBook()<<"册"<<"按回车键继续添加"<<endl;();getchar();}void ModifyBookInfo() //修改图书{struct BookInfo MyBook;char ModifyBookCode[6];if(CountBook==0){cout<<"无法修改"<<endl;return;}cout<<"请输入要修改的图书编号"<<endl;cin>>ModifyBookCode;if(!IsBookExist(ModifyBookCode))cout<<"图书不存在"<<endl;return;}int ModiPosition=0;ModiPosition=GetPosition(ModifyBookCode,&MyBook);cout<<"请输入新书名"<<endl;cin>>;cout<<"请输入新作者"<<endl;cin>>;cout<<"请输入新出版商"<<endl;cin>>;cout<<"请输入新的出版日期"<<endl;cin>>;FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}fseek(fp,(long)BOOKLEN*ModiPosition,SEEK_SET);fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"修改成功,按回车键继续"<<endl;();getchar();}void DelBookInfo() //删除图书{char DelBookCode[6];if(CountBook==0){cout<<"无法删除"<<endl;return;}cout<<"请输入要删除的图书编号"<<endl;cin>>DelBookCode;if(!IsBookExist(DelBookCode)){cout<<"该书不存在"<<endl;return;}if(IsBorrow(DelBookCode)) //书已经借出,无法删除cout<<"书已经借出,无法删除"<<endl;return;}FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct BookInfo MyBook;int ModiPosition=0;ModiPosition=GetPosition(DelBookCode,&MyBook);='0';fseek(fp,(long)BOOKLEN*ModiPosition,SEEK_SET);fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"删除图书成功,现有图书"<<CountBook()<<"册"<<endl; }void BookBorrow() //图书借阅{char BookCode[6];char ReaderCode[6];if(CountBook()==0||CountReader()==0){cout<<"无法借书"<<endl;return;}cout<<"请输入图书编号"<<endl;cin>>BookCode;if(!IsBookExist(BookCode)){cout<<"借书失败,该书不存在"<<endl;return;}if(IsBorrow(BookCode)){cout<<"书已经借出,借书失败"<<endl;return;}cout<<"请输入读者编号"<<endl;cin>>ReaderCode;if(!IsReaderExist(ReaderCode)){cout<<"读者不存在,借书失败"<<endl;return;}FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}int Position=0;struct BookInfo MyBook;Position=GetPosition(BookCode,&MyBook);='1';strcpy,ReaderCode);fseek(fp,(long)BOOKLEN*Position,SEEK_SET);fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"借书成功,按回车键继续"<<endl;();getchar();}void BookReturn() //还书{char BookCode[6];if(CountBook()==0||CountReader()==0){cout<<"无法还书"<<endl;return;}cout<<"请输入图书编号"<<endl;cin>>BookCode;if(!IsBookExist(BookCode)){cout<<"还书失败,该书不存在"<<endl;return;}if(!IsBorrow(BookCode)){cout<<"书未借出,还书失败"<<endl;return;}FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}int Position=0;struct BookInfo MyBook;Position=GetPosition(BookCode,&MyBook);='0';strcpy,"0");fseek(fp,(long)BOOKLEN*Position,SEEK_SET);fwrite(&MyBook,BOOKLEN,1,fp);fclose(fp);cout<<"还书成功,按回车键继续"<<endl;();getchar();}void ShowBookInfo() //显示所有图书信息{struct BookInfo MyBookInfo;int booknum=CountBook();if(booknum==0){cout<<"没有图书信息"<<endl;return;}FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}while(fread(&MyBookInfo,BOOKLEN,1,fp))cout<<"编号"<<setw(6)<<<<"书名"<<setw(20)<<<<"作者"<<setw(20)<<<<"出版商"<<setw(30)<<<<"出版日期"<<setw(8)<<;}void SearchBook() //图书查询{char BookCode[6];if(CountBook()==0){cout<<"图书不存在"<<endl;return;}cout<<"请输入图书编号"<<endl;cin>>BookCode;if(!IsBookExist(BookCode)){cout<<"图书不存在"<<endl;return;}struct BookInfo MyBook;GetPosition(BookCode,&MyBook);cout<<"编号"<<setw(6)<<<<"书名"<<setw(20)<<<<"作者"<<setw(20)<<<<"出版商"<<setw(30)<<<<"出版日期"<<setw(8)<<;if=='1') //若书借出,则显示借阅的读者的信息ShowAReader;else cout<<"该书未被借阅"<<endl;}void SearchReader() //读者查询{char ReaderCode[6];if(CountReader==0){cout<<"读者不存在"<<endl;return;}cout<<"请输入读者编号"<<endl;cin>>ReaderCode;if(!IsReaderExist(ReaderCode)){cout<<"读者不存在"<<endl;return;}ShowAReader(ReaderCode);int BorrowCount=IsBorrowed(ReaderCode);if(BorrowCount==0)cout<<"读者未借阅该书"<<endl;else{cout<<"读者借阅了"<<BorrowCount<<"册"<<endl;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct BookInfo MyBook;while(fread(&MyBook,BOOKLEN,1,fp)){if(strcmp,ReaderCode)==0){i++;cout<<i<<<<<<<<endl;}}fclose(fp);}}void ShowAReader(char *ReaderCode) //显示指定编号的读者详细信息{FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct ReaderInfo MyReader;while(fread(&MyReader,READERLEN,1,fp)==NULL)if(strcmp,ReaderCode)==0)break;cout<<"借阅读者"<<ReaderCode<<<<<<endl;fclose(fp);}int InvalidBookPosition() //查询第一条无效图书记录在文件中的位置{int InvalidPs=-1;int count=0;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct BookInfo MyBook;while(fread(&MyBook,BOOKLEN,1,fp)){if=='0'){InvalidPs=count;break;count++;}fclose(fp);return InvalidPs;}int IsBookExist(char *ChkBookCode) //查询指定图书在文件中是否存在{int IsExist=0;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct BookInfo MyBook;while(fread(&MyBook,BOOKLEN,1,fp)){if(strcmp,ChkBookCode)==0&&{IsExist=1;break;}}fclose(fp);return IsExist;}int IsBorrow(char *BookCode) //判断图书是否已经借出,在借返回1,否则返回0 {struct BookInfo temp;int IsbBorrow =0;FILE *fp;if((fp=fopen("","rb"))!=NULL){while(fread(&temp,BOOKLEN,1,fp))if(strcmp,BookCode)==0&&=='1'){IsbBorrow=1;break;}}fclose(fp);return IsbBorrow;}int GetPosition(char *ModiCode,struct BookInfo *MyBook) //获得待修改图书的位置{int count=0;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}while(fread(MyBook,BOOKLEN,1,fp)){if(strcmp(MyBook->BookCode,ModiCode)==0&&MyBook->IsAvailable=='1')break;count++;}fclose(fp);return count;}void AddReaderInfo() //增加读者{struct ReaderInfo MyReader;cout<<"读者编号"<<endl;cin>>;while(IsReaderExist){cout<<"读者已存在,请重新输入"<<endl;cin>>;}cout<<"读者姓名"<<endl;cin>>;cout<<"读者性别"<<endl;cin>>;='1'; //新增读者FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}int SetPs;SetPs=InvalidReaderPosition();if(SetPs=-1)fseek(fp,0,SEEK_END);else fseek(fp,(long)READERLEN*SetPs,SEEK_SET);fwrite(&MyReader,READERLEN,1,fp);fclose(fp);cout<<"添加读者成功,按回车键继续添加,现有读者"<<CountReader()<<"人"<<endl;();getchar();}void ModifyReaderInfo() //修改读者信息{struct ReaderInfo MyReader;char ModifyCode[6];if(CountReader()==0){cout<<"无法修改"<<endl;return;}cout<<"请输入要修改的编号"<<endl;cin>>ModifyCode;if(!IsReaderExist(ModifyCode)){cout<<"读者不存在"<<endl;return;}int ModiPosition=0;ModiPosition=GetRdPosition(ModifyCode,&MyReader);cout<<"读者姓名"<<endl;cin>>;cout<<"读者性别"<<endl;cin>>;FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}fseek(fp,(long)READERLEN*ModiPosition,SEEK_SET);fwrite(&MyReader,READERLEN,1,fp);fclose(fp);cout<<"修改读者成功,按回车键继续"<<endl;();getchar();}void DelReaderInfo() //删除读者信息{char DelCode[6];if(CountReader()==0){cout<<"无法删除"<<endl;return;}cout<<"请输入要删除的读者编号"<<endl;cin>>DelCode;if(!IsReaderExist(DelCode)){cout<<"读者不存在,无法删除"<<endl;return;}int BorrowedNum;BorrowedNum=IsBorrowed(DelCode); //如果读者有书还未还,那不可以删除读者if(BorrowedNum){cout<<"不可以删除,有书还未还"<<endl;return;}FILE *fp;if((fp=fopen("","rb+"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct ReaderInfo MyReader;int ModiPosition=0;ModiPosition=GetRdPosition(DelCode,&MyReader);='0';fseek(fp,(long)READERLEN*ModiPosition,SEEK_SET);fwrite(&MyReader,READERLEN,1,fp);fclose(fp);cout<<"删除成功,现有读者"<<CountReader()<<"人"<<endl;}int IsBorrowed(char *ReaderCode) //判断是否有书未还{struct BookInfo temp;int BorrowedNum=0;FILE *fp;if((fp=fopen("","rb"))!=NULL)while(fread(&temp,BOOKLEN,1,fp))if(strcmp,ReaderCode)==0&&=='1')BorrowedNum++;fclose(fp);return BorrowedNum;}int GetRdPosition(char *ModiCode,struct ReaderInfo *MyReader) //获得待修改读者记录的位置{int count=0;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}while(fread(MyReader,READERLEN,1,fp)){if(strcmp(MyReader->ReaderCode,ModiCode)==0&&MyReader->IsAvailable=='1')break;count++;}fclose(fp);return count;}int IsReaderExist(char *ChkCode) //查询读者是否存在{int IsExist=0;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开错误"<<endl;exit(0);}struct ReaderInfo MyReader;while(fread(&MyReader,READERLEN,1,fp)){if(strcmp,ChkCode)==0&&=='1'){IsExist=1;break;}}fclose(fp);return IsExist;}int InvalidReaderPosition() //查询第一条无效读者的位置{int InvalidPs=-1;int count=0;FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开失败"<<endl;exit(0);}struct ReaderInfo MyReader;while(fread(&MyReader,READERLEN,1,fp)){if=='0'){InvalidPs=count;break;}count++;}fclose(fp);return InvalidPs;}void ShowReaderInfo() //显示所有读者信息{struct ReaderInfo MyReader;int ReaderNum=CountReader();if(ReaderNum==0){cout<<"没有读者信息"<<endl;return;}FILE *fp;if((fp=fopen("","rb"))==NULL){cout<<"文件打开失败"<<endl;exit(0);}while(fread(&MyReader,READERLEN,1,fp)){if=='1')cout<<<<<<<<endl;}fclose(fp);}int main(){int MenuId;Welcome();while(1){MenuId=MainMenu();if(MenuId==0){cout<<"程序运行结束!"<<endl;break;}switch(MenuId){case 1: SubMenu1();break;case 2: SubMenu2();break;case 3: SubMenu3();break;case 4: SubMenu4();break;}}return 0;}。