面向对象程序设计课程设计-图书管理系统.doc_第1页
面向对象程序设计课程设计-图书管理系统.doc_第2页
面向对象程序设计课程设计-图书管理系统.doc_第3页
面向对象程序设计课程设计-图书管理系统.doc_第4页
面向对象程序设计课程设计-图书管理系统.doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告课程名称 面向对象程序设计 课题名称 图书管理系统 专 业 计算机科学与计术 班 级 计算机1001 学 号 姓 名 指导教师 2011年 12 月 28 日湖南工程学院课 程 设 计 任 务 书课程名称 面向对象程序设计 课 题 图书管理系统 专业班级 计算机1001 学生姓名 学 号 指导老师 审 批 任务书下达日期 2011 年 11 月 15 日任务完成日期 2011 年 12 月 28 日一、设计内容与设计要求1.课程设计目的:面向对象程序设计课程设计是集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。要求学生达到熟练掌握c+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.课题题目1)公司库存管理系统2)高校学籍管理系统3)高校工资管理系统4)高校人事管理系统5)通讯录程序设计6)学生成绩管理系统7) 图书管理系统8)文本编辑器的设计与实现9)学生考勤管理系统10)公司人员管理系统3设计要求: 设计课题题目:每位同学根据自己学号除以10所得的余数加1选择相应题号的课题。随意换题者不记成绩。 根据自己对应的课题完成以下主要工作:完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。完成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。完成系统详细设计:包括数据库需求分析;数据库概念结构设计(er图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。关键源程序(带注释) 按规定格式完成课程设计报告,将其打印稿(a4纸)上交给老师存档。 不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计。二、进度安排第 17 周 星期一 8:0012:00 星期二 8:0012:00 星期四 8:0012:00第 18 周 星期一 8:0012:00 星期二 14:3018:30 星期三 8:0012:00三、参考书籍1.c程序设计课程设计 刘振安编著 tp312c5632.c+ builder和delphi课程设计与系统开发案例 伍俊良 清华大学出版社 7-302-06072-x 3.visual c+课程设计案例精编 严华峰 中国水利水电出版社 7-5084-2007-1 2004 4.visual c+课程设计与系统开发案例 伍俊良 清华大学出版社 7-302-05968-3 20025.visual c+语言课程设计 : 案例精选与编程指导 陈清华朱红 东南大学出版社 7-81089-275-4 2003 6.visualc+课程设计案例精编 中国水利水电出版社 7-5084-1004-1 2002 7.数据结构课程设计案例精编 : 用c/c+描述 李建学李光元吴春芳 清华大学出版社 7-302-14536-9 2007 (编程平台不限,vc+, c+ builder等等。)课题7:图书管理系统(一)、课程设计题目:图书管理系统(二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握c+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及c+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中至少要定义四个类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三)、设计方法和基本原理: 1、问题描述(功能要求): 在图书管理系统中,要为每个借阅者建立一个账户,并给借阅者发放借阅卡(借阅卡可以提供借阅卡号、借阅者名),账户中存储借阅者的个人信息、借阅信息以及预定信息。持有借阅卡的借阅者可以借阅书刊、返还书刊、查询书刊信息、预定书刊并取消预定,但这些操作都是通过图书管理员进行的,也即借阅者不直接与系统交互,而是图书管理员充当借阅者的代理与系统交互。在借阅书刊时,需要输入所借阅的书刊名,书刊的isbn/issn号,然后输入借阅者的图书卡号和借阅者名,完成后提交所填表格,系统验证借阅者是否有效(在系统中存在账户),若有效,借阅请求被接受,系统查询数据库系统,看借阅者所借阅的书刊是否存在,若存在,则借阅者可借出书刊,建立并在系统中存储借阅记录。借阅者还书后,删除关于所还书刊的借阅记录。如果借阅者所借的书刊已被借出,借阅者还可预定该书刊,一旦借阅者预定的书刊可以获得,就将书刊直接寄给预定人(为了简化系统,预定书刊可获得时就不通知借阅者了)。另外,为了简化系统,也不考虑书刊的最长借阅期限,假设借阅者可以无限期地保存所借阅的书刊。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告以及系统使用说明书目 录1. 系统需求分析12. 总体设计23. 详细设计34. 系统调试105. 结果分析126. 总结137. 附件14湖南工程学院课程设计报告1. 系统需求分析1. 系统设计目的与意义 设计该图书管理系统,要求学生达到熟练掌握c+语言的基本知识和技能,能够基本掌握面向对象程序设计的基本思路和方法,能够利用所学的基本知识和技能解决简单的面向对象程序设计的问题。另外,通过该课程设计的实践,来提高学生动手编程解决实际问题的能力,加深对c+语言及解决问题方法的理解,为以后的学习打下坚实的基础。2. 系统功能需求分析由对图书管理系统的问题描述可知,该系统主要功能应该包括借阅书刊,归还书刊,取消书刊预约信息,录入书刊,显示用户信息,查询书刊信息,退出系统等功能。同时,在借阅书刊和显示用户信息的功能中还应有有注册用户信息的功能。如果用户在借阅书刊和显示用户信息的的时候,若用户数据库中没有该用户,则提示用户是否注册用户信息。并且,在借阅书刊时,若该书刊已借,用户可以预约该书刊。另外,在归还书刊的功能中,应该有预约该书刊的用户可依预约时间的先后来获得该书刊。在进入取消书刊预约信息的时候,应该根据用户输入的基本信息(借阅名,借阅卡号)首先来显示用户基本信息,再根据基本信息是否来进行取消已预约书刊记录信息的功能。依以上对系统所需功能的分析,为了实现上述的各个功能,首先应该要建立合适的数据结构,为实现以上各个功能的基本运算而进行合理的数据存储及组织。显然,在该系统中的基本运算主要是数据元素的查找、删除、插入等。数据元素应该是账户信息,账户信息内又包括用户的个人基本信息、借阅信息、以及预约信息。另外,为了能够借阅书刊以及查询书刊信息,应该还要建立对图书信息的存储和组织的数据结构,在该数据结构中,图书信息即为该数据结构的数据元素。以下对数据元素进行详细的分析。对于账户信息,其包括个人信息、借阅信息、以及预约信息。这些信息可以定义类来实现,并把个人信息类、借阅信息类、预约信息类嵌套在账户信息类里,作为它的私有成员;对于图书信息,则可定义图书信息类。账户信息和图书信息仅仅只是针对单一对象的信息,如要存储多个这样对象的信息,则必须构建一个合适的数据结构来存储和组织这些信息。由系统功能可知,应该选用链表来存储账户信息和图书信息比较合适。所以可以定义链表类来对账户信息和图书信息进行存储和组织。另外,某一个用户借阅或预约的书刊可能有多本,故也可以定义链表类来存储和组织这些信息,在把链表类嵌套到账户类里。2. 总体设计1.系统功能分析 该系统主要功能包括借阅书刊、归还书刊、取消书刊预约信息、录入书刊,显示用户信息、查询书刊信息、退出系统等。进入该系统后,便出现选择这些功能的菜单,可依选择项进入相应的功能模块。执行某一功能(除了退出系统)后又可返回功能选项菜单界面。所以在主函数中需要采用函数嵌套。 依系统功能分析有:功能模块流程图如下: 开始 进入图书管理系统查询书刊取消预约信息显示用户信息退出系统记录书刊信息归还书刊借阅书刊 结束 图7.1系统功能模块流程图 2.系统功能模块划分与设计 以下对各功能模块进行分析与设计: (1)借阅书刊功能 首先输入书刊名、书刊的isbn/issn号、借阅者名、借阅卡号。然后依借阅者名及借阅卡号在账户类链表中查找该用户是否存在。若不存在,则返回到注册账号。反之,则依isbn/issn号在图书类中查找并判断该书是否已借阅。(书刊是否被借阅,可以在图书类中定义某一变量进行标记,以此来判断该书刊是否被借阅)若借阅,用户则可预约该书刊或结束借阅书刊功能,借阅书刊失败。反之则借阅书刊成功,并作相应的数据记录。另外,在预约书刊后,若预约的书刊被归还,则立即寄给预约人,并作相应的数据记录。(若有多人预约同一本书,应按预约时间的先后,来确定寄给书刊的预定人)。 (2)归还书刊功能 首先输入用户名及借阅卡号,并依次在账户类链表中查找到该账户。若未查找则提示用户可能输入信息错误并要求重新输入。若查找到,则输入书刊名及书刊isnb/issn号,并由此在图书类链表中查找该书刊是否存在,若未查找到则提示书刊信息输入错误并要求重新输入。若书刊存在,则输出归还书刊成功,并作相应的数据记录。同时,还要在账户类链表中查找已预约该书刊的用户,并找到最早预约该书刊的用户,将书刊寄送给该用户,并对该用户信息做相关的记录。 (3)查询书刊功能 查询书刊应根据书刊名在图书类链表中来查找该书刊。查找方法应该为顺序查找。若图书类链表中无要查找的书刊,则输出图书馆内无该书;反之,则输出该书的基本信息,基本信息包括:书名、isnb/issn号、价格、是否借阅等信息。有时同名书刊不只一本,故每查找到一本该书刊则显示该书刊信息,直至遍历整个图书类链表。书刊是否被借阅可设定一变量来表记。 (4)取消书刊预约功能 首先输入借阅者名及借阅卡号,并依此在账户类链表中查找该用户是否存在。若未查到,则提示用户可能输入信息错误并要求重新输入。若查到则显示用户信息,并依此是否进行书刊预约功能。若进行,则输入书刊名及书刊isnb/issn号,并在图书类链表内验证输入信息是否正确。 (5)显示用户信息功能 首先输入借阅者名及借阅卡号,并依此在账户类链表里查找该用户是否存在。若未查找的到,则提示用户可能输入信息有误或该用户未注册。反之则显示该用户信息。 (6)录入书刊信息功能 录入书刊信息,首先要录入书刊的数量,然后依次输入书刊名、书刊isnb/issn号、书刊定价。这样即可录入书刊信息。3. 详细设计1.数据类型及类层次图 该系统所需数据类型主要为字符数组类型,即用字符串类型来定义数据。用字符串定义数据可用string类代替,定义成string类型的数据,对字符的操作更简单。在输入string类数据时,用输入流中的操作符来输入字符串,这样需特别注意在输入某一字符串时,其间不能输入空格,否则该输入的字符将会转到下个将要输入的字符串变量,使输入变得混乱。这是由于输入流操作符在输入数据时,若遇到空格,则表示该输入已结束。 该系统中定义的类包括:日期类、个人信息类、借阅书刊信息类、预约书刊信息类、账户信息类、图书类、借阅和预约、账户、图书信息链表类。其类uml图及类层次图如下所示: (1)日期类 date-year:int-month:int-day:int+date(y:int=0,m:int=0,d:int=0)+date(d:const date&)+getyear():int+getmonth():int+getday():int+dashow():void+dainput():date 图7.2date类的uml图 (2)个人信息类 unitinfo-name:string-reid:string-id:string-sex:string-d:date+unitinfo(n:string,re: string,id:string,s:string,d:date)+unitinfo()+unitinfo(u:const unitinfo&)+getname():string+getreid():string+unshow():void+uninput():unitinfo 图7.3unitinfo类的uml图 (3)借阅信息类 lendinfo-bookname:string-isbn:string-d:date-next:lendinfo*+lendinfo(n:string,isbn:string,d:date)+lendinfo()+lendinfo(l:const lendinfo&)+getinsb():string+getnext():lendinfo*+setnext(l:lendinfo*):void+leshow():void+leinput():lendinfo 图7.4lendinfo类的uml图 (4)借阅信息链表类 lelist-front:lendinfo*-rear:lendinfo*-size:int+lelist()+insertrear(item:const lendinfo&):void+seeklist(insb:const string):lendinfo*+deletecurr(insb:const string):bool+leshow():void 图7.5lelist类的uml图 (5)预约信息类 trothinfo-bookname:string-isbn:string-d:date-next:trothinfo*+trothinfo(n:string,insb:string,d:date)+trothinfo()+trothinfo(t:const trothinfo&)+getinsb():string+setnext(t:trothinfo*):void+getnext():trothinfo*+trshow():void+trinput():trothinfo+getdate():date 图7.6trothinfo类的uml图 (6)预约信息链表类 trlist-front:trothinfo*-rear:trothinfo*-size:int+trlist()+insertrear(itme:const trothinfo&):void+seeklist(insb:const string&):trothinfo*+deletecurr(insb:const string&):bool+trshow():void+gettldate(insb:const string&):date 图7.7trlist类的uml图 (7)账户类 account-u:unit-l:lelist-t:trlist-next:account*+account(u:unit,l:lelist,t:trlist)+account()+auinput():void+alinput(l:const lendinfo&):void+atinput(t:const trothinfo&):void+deleteleinfo(isnb:const string&):bool+deletetrinfo(isnb:const string&):bool+acshow():void+acname():string+acreid():string+getnext():account*+setnext(a:account*):void+gettrdate(isnb:const string&):date+seektr(isnb:const string&):bool 图7.8account类的uml图 (8)账户链表类 aclist-frist:account*-last:account*-size:int+aclist()+aclist()+getfront():account*+getlast():account*+seekalist(n:const string,id:const string):account*+seekactr(isnb:const string &):account*+insertlast(item:const string &):void+comparetime(d1:date&,d2:date&):bool 图7.9aclist类的uml图 (9)图书类 library-bookname:string-insb:string-pointer:bool-prices:float-next:library*+library(n:string,insb:string,prices:string)+library()+library(li:const library&)+liinput():library+lishow():void+getpointer():bool+getnext():library*+getbookname():string+getissn():string+setnext(li:library*):void+setpointer(t:const bool):void 图7.10library类的uml图 (10)图书链表类 lilist-front:library*-last:library*-size:int+lilist()+instrelast(li:const library):void+getfront():library*+liseek(name:const string,insb:const string):library*+liseek(name:const string):void 图7.11lilist类的uml图 aclist account trlist lelist unitinfo trothinfo lendinfo date library lilist 图7.12图书管理系统程序的uml图4. 系统调试 在调试过程中出现了许多错误,并经过一系列分析后,终于把错误改正。程序错误主要出现在逻辑上。编译无语法错误,而在运行时出现异常,是程序不能继续运行下去,这是常见且难以解决的错误,需要不断的实践且总结经验。在该整个程序中,主要出现的错误主要表现在指针方面。尤其是对链表中的结点的一系列的删除操作中,结点的指针数据成员的指向确定非常重要,在链表的删除中,若链表未定义头结点,则需分删除链表第一个结点和不是第一个结点这两种情形进行编程。另外,对于数据成员的输入,需要按一定的要求来输入,虽然有一些输入提示信息,但由于输入操作符的限制,还是因输入错误而导致程序运行出现不合理的结果。 程序调试结果如下: 进入系统主界面: 图7.13系统主界面 录入书刊信息功能: 图7.14录入书刊信息 查询图书信息功能: 图7.15查询图书信息 借阅书刊信息功能: 图7.16借阅书刊 归还书刊功能: 图7.17归还书刊 取消书刊预约功能: 图7.18取消书刊预约5. 结果分析设计的该图书管理系统,其要求的基本功能能够实现,且能够动态的录入数据,账户信息及图书信息的录入数量无限制。另外,在归回图书的功能中,预约该书刊的用户可以依预约书刊的时间先后来获得该书刊;在查询图书信息时,能够显示该图书是否可借阅,并能够显示同书刊名的所有该书刊。同时,数据的保护机制较好,数据不易被破坏。但是,该系统的主要遗憾是未能使用文件进行永久保持数据,这大大的降低了该系统的实际使用价值;程序代码的复用性不是太好,程序的容错处理能力不是太强,还有很多值得改进的地方。由于时间和水平的有限,这些问题只能留在以后去进一步解决,使系统更完美,实用。6. 总结通过此次课程设计,更加深了对c+面向对象程序设计语言的知识和设计方法的理解,也深刻认识了自己在这方面的不足之处。首先,在设计该系统时,对问题描述进行了比较深的认识,并确定了系统所需的数据结构及数据的封装模式,也应用了一些面向对象程序设计的基本方法。特别在此次设计中对数据引用的认识更加深刻,引用作为函数形参,能够通过形参而该变实参值,这一技术的使用非常方便有效。同时,通过这次系统的课程设计过程,更进一步认识了自己的在编程方面的一些不足的方面,尤其表现在逻辑思维不够严密,这方面还需在以后更多的训练中,来弥补这方面的不足。但在修改语法错误方面,基本上还是能够修改。然后,对课题进行了分析并编写了程序,且进行了调试。至此,由于在设计开始,未为整个系统进行整体及整个编写过程的详细思考,使编写的程序的健壮性不是特别的强,且代码复用性做得不够好,由于数据结构的设计比较直接,未能使用更好的算法,使程序代码较为繁琐,而难以用文件方式对数据进行永久保存,这也就使系统的实际使用价值大大地降低了。所以,在设计某系统时,不仅仅只是对其功能模块进行简单的分析,而且更要使功能模块和设计的数据结构结合起来,以此设计更好的算法,编写出更好,更实用的程序。于是,设计前的系统分析工作是非常重要的,这是程序设计思路的来源。通过此次课程设计,更加深了对c+面向对象程序设计语言的知识和设计方法的理解,也深刻认识了自己在这方面的不足之处。首先,在设计该系统时,对问题描述进行了比较深的认识,并确定了系统所需的数据结构及数据的封装模式,也应用了一些面向对象程序设计的基本方法。特别在此次设计中对数据引用的认识更加深刻,引用作为函数形参,能够通过形参而该变实参值,这一技术的使用非常方便有效。同时,通过这次系统的课程设计过程,更进一步认识了自己的在编程方面的一些不足的方面,尤其表现在逻辑思维不够严密,这方面还需在以后更多的训练中,来弥补这方面的不足。但在修改语法错误方面,基本上还是能够修改。然后,对课题进行了分析并编写了程序,且进行了调试。至此,由于在设计开始,未为整个系统进行整体及整个编写过程的详细思考,使编写的程序的健壮性不是特别的强,且代码复用性做得不够好,由于数据结构的设计比较直接,未能使用更好的算法,使程序代码较为繁琐,而难以用文件方式对数据进行永久保存,这也就使系统的实际使用价值大大地降低了。所以,在设计某系统时,不仅仅只是对其功能模块进行简单的分析,而且更要使功能模块和设计的数据结构结合起来,以此设计更好的算法,编写出更好,更实用的程序。于是,设计前的系统分析工作是非常重要的,这是程序设计思路的来源。7. 附件#include#include#includeusing namespace std;/定义日期类class dateprivate:int year;int month;int day;public:date(int y=0,int m=0,int d=0):year(y),month(m),day(d)date(const date&d):year(d.year),month(d.month),day(d.day)int getyear()return year;int getmonth()return month;int getday()return day;void dashow();date dainput();date();date date:dainput()int y,m,d;couty;coutm;coutd;return date(y,m,d);void date:dashow()coutyear 年 month 月 day 日endl;/个人信息类class unitinfoprivate:string name; string reid; string id; string sex; date d; public:unitinfo(string n,string re,string id,string sex,date d):name(n), reid(re),id(id),sex(sex),d(d)unitinfo():name( ),reid( ),id( ),sex( ),d(0,0,0);unitinfo(const unitinf &info):name(i),reid(info.reid), id(info.id),sex(info.sex),d(info.d)string getname()return name;string getreid()return reid;void unshow();unitinfo uninput();unitinfo();unitinfo unitinfo:uninput()string n,r,i,s;date d;coutr;coutendl;coutn;coutendl;couts;coutendl;couti;coutendl;cout 出生日期:endl;d=d.dainput(); return unitinfo(n,r,i,s,d);void unitinfo:unshow()cout 借阅卡号:reidendl;cout 用户姓名:nameendl;cout 性别 :sexendl;cout 身份证号:idendl;cout 出生日期:;d.dashow();/借阅信息类class lendinfoprivate:string bookname;string isbn; date d; lendinfo *next; public:lendinfo(string n,string h,date d):bookname(n),isbn(h),d(d), next(null)lendinfo():bookname( ),isbn( ),next(0)lendinfo(const lendinfo&l):bookname(l.bookname),isbn(l.isbn), d(l.d),next(l.next)string getinsb()return isbn; void setnext( lendinfo*l)next=l;lendinfo* getnext()return next;void leshow();lendinfo leinput();lendinfo lendinfo:leinput()string n,i;date d;coutn;couti;cout借阅日期:endl;d=d.dainput();return lendinfo(n,i,d);void lendinfo:leshow()cout 书名 :booknameendl;cout 书号 :isbnendl;coutsetnext(currptr);rear=currptr;size+;lendinfo* lelist:seeklist(const string inbs)lendinfo*pointer=front;lendinfo*ccurptr=0;while(pointer!=0)if(inbs=pointer-getinsb()ccurptr=pointer; break;pointer=pointer-getnext();if(pointer=0) cout 用户没有借阅这本书getnext(); delete pointer; mark=true;elsewhile(pointer-getnext()!=currptr)pointer=pointer-getnext();pointer-setnext(currptr-getnext();delete currptr;mark=true; size-;elsecout 用户没有该书的借阅信息!leshow(); pointer=pointer-getnext();else cout 用户无任何借阅记录

温馨提示

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

评论

0/150

提交评论