




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
综合程序设计入门 -图书馆管理系统设计,5.11 图书馆管理系统设计对象与类的识别,在开发实际软件系统时,识别对象和类是很重要的。我们以图书馆流通管理系统为例,介绍识别对象与类的一般方法。1、对象和类的识别在一个信息系统内识别对象是最基本的,一旦识别到一个对象,就能识别出相同类型的所有对象,把它们归纳为一个类。同一个信息系统,从不同的角度分析,或根据要求的不同,有不同的侧重面,这样建立的对象模型不同,可能得出的分类方法也不同。,图书馆流通系统内,有书、读者、借书证、管理人员、借书还书行为等对象和事件,他们分别各是一个群体。例如每个图书馆都有几万甚至几十万册图书,每册图书都是一个对象,它们形成图书类(暂用Item款目表示)。在图书流通系统内,还有以下类:读者(Reader)类,图书借阅信息类(Loan),管理人员类(Manager),是借书还书行为的操作人。借书证对象只作为读者类的一个数据成员。,5.11 图书馆管理系统设计对象与类的识别,2、对象属性的识别 每个对象的情况称为对象的属性,同类型的对象具有共同的属性,只是每个对象的属性值不一定相同。属性是对一个对象状态的描述。同一个类(对象),从不同的角度分析,或根据要求的不同,描述它的属性也可能不一致。,如“在馆图书类”,从流通管理的角度来看,应包含书名Title、作者名Author、分类号IndexCode、册数Number、条码号BarCode等属性。读者类,包含姓名Name、职务Position、年龄Age、借书证编号Code等。一个读者允许借阅若干册书,在此用一个Item的数组items保存相应信息。另外对读者所借书册数要统计,定义一个计数的成员Counter;图书借阅信息类,包含所借书item、借书人reader、借书操作员manager等;管理人员类,包含姓名Name、年龄Age、工号Code等;,5.11 图书馆管理系统设计对象与类的识别,3、对象功能的确定 对象的功能指为了达到目的必须执行的动作,或是对象对所发生事件的反应。功能也可称为对象的操作。在图书馆流通管理系统内,图书类应包含为各属性赋值(Set)的操作、读取条码(GetCode)和显示图书基本信息(Show)的操作,另外还定义了缺省构造函数和拷贝构造函数。读者类,需定义为各属性赋值(Set)的操作、读取借书证号的操作,借书和还书需要向所借书数组中添加或减少书,定义AddBook和DelBook两个操作,还有显示所借书的操作ShowBooks。,4、对象和类的标记 在这里采用科德(Coad)定义的面向对象方法的描述符号,这一方法是Peter Coad和Ed YourDon于1990年提出的,这一方法的优点是图形简单、易于理解和掌握,但对类和对象属性的访问权限无法进行有效的描述。,5.11 图书馆管理系统设计对象与类的识别,科德标记法中,使用一个圆角矩形表示类,矩形内部分为三个部分,上部写类名,中部写属性(数据成员),下部表示该类的操作(函数成员)。对象是类的实例,在科德标记法中,在相应类标记外加一个圆角矩形框表示对象,并将矩形内部的表示类名的地方写上对象名,如图5.15。,图5.15对象与类的标记,图5.16对象与类的关系,科德表示法可形象地用扑克牌示意图来表示。如图5.16,5.11 图书馆管理系统设计对象与类的识别,科德标记法还有表示连接的符号,如图5.17,一个带线段的半圆弧表示A是通用类,B是特殊类,中间带空心三角形的线段表示A类包含B类即整体与部分的关系,中间带实心箭头的线段表示A向B发送消息,一段实线表示对象之间的连接线。,图5.17科德标记法中的连接符,继承与派生,对象成员,主动与从动,一般关系,5.11 图书馆管理系统设计对象与类的识别,图5.18图书流通管理系统中的类,在图5.18中,用科德标记法表示Item, Reader, Manager, Loan四个类,它们的数据成员及其类型、函数成员的原型都在图中标出,但无法标出它们的访问权限。,5.11 图书馆管理系统设计对象与类的识别,图5.19图书流通管理系统的对象,若定义类的对象:Item item; Reader reader1; Manager manager1; Loan loan1;则图5.19可表示这些对象。,5.11 图书馆管理系统设计对象与类的识别,定义了类和对象,它们之间就可以互相通讯,完成特定的功能了。图5.20表示了对象之间的相互通讯关系。,图5.19图书流通管理系统的对象,5.11 图书馆管理系统设计对象与类的识别,5. 程序组织 定义了信息系统的数据结构和它们的操作,即可用程序实现。 本程序包括:七个全局函数处理图书馆流通业务, Borrow, CreateBibliotheca, CreateManager, CreateReader, ShowMainMenu, Return, Require,全局变量 itemNum, readerNum, loanNum, managerNum 存储图书、读者、借阅信息及管理人员的数目,在各函数间传递数据.在main函数中定义几个对象数组分别记录图书、读者、借阅信息和管理人员。,程序的使用方法。1) 程序执行时首先显示主菜单,选择创建书目,根据提示输入书名、作者名、分类号,再输入条码号,然后程序提示是否继续创建书目,选择y或Y,继续上述过程,选择n或N,回到主菜单,接着选择创建读者信息;2) 创建读者信息,根据提示依次输入字符数组的姓名和职务,再输入整型的年龄和长整型的借书证号;以后的提示信息与1)相同,接着创建管理员信息;3) 选择创建管理员信息,与上一步类似;4). 若选择借书,提示输入借书证号,找到读者后显示可借阅书并提示选择希望借的书的条码,输入合格条码后,将所借书添加到读者的所借书数组,并从可借书中删除被借书,显示提示信息;在VC+上演示本程序。,6.11 图书馆流通管理系统设计改进类的封装,在第五章的程序中,定义了七个全局函数处理图书馆流通业务,和四个全局变量 存储图书、读者、借阅信息及管理人员的数目,因为函数只能返回一个值,选择全局变量传递参数。本章使用指针作参数,为各全局函数增加指针参数,不再使用全局变量。程序中仍然使用较多的全局函数,这是与面向对象的思想相违背的。,进一步分析我们可以发现,全局函数都是针对图书馆业务的,而main函数中定义的几个数组:Item item100;Reader reader100;Loan loan100;Manager manager30; 它们都是图书馆业务的承载者,是全局函数操作的对象,与函数有着密切关系。,根据面向对象的思想,数据和对它们的操作可以封装为类,封装图书馆类Library如下:图书馆的信息(书,读者,借阅情况,管理员) 数据成员图书馆业务(创建书目、读者库、管理员库及借书、还书、查询等操作函数)函数成员此时,操作对象定义为类的数据成员,图书馆类的函数成员所进行的业务操作直接访问数据成员,不需要参数,简化了编程。,Library类的成员函数中多了一个Run函数,这是图书馆业务开始执行的入口,原来在main函数中执行的操作,都要在Run中执行,如创建书目、读者信息、管理员信息等,主菜单的显示也应放在Run中。,void Library:Run() int choice;char c; dochoice = ShowMainMenu();switch(choice)case 1:CreateBibliotheca();break; /创建书目 case 2:CreateReader(); break; /创建读者信息case 3:CreateManager();break; /创建管理员信息case 4:doBorrow();coutc;cin.get();while(c=Y|c=y); /借书操作break;,case 5:doReturn();coutc;cin.get();while(c=Y|c=y); /还书操作break;case 6:doRequire(); coutc; cin.get();while(c=Y|c=y); /查询 break; case 0:exit(0);break; /退出 default:cout请重新输入 code; for(int i = 0; ibarcode; for( j=0; jcode; for(j=0; jrlink;int temp =current-Info.GetCode();while(current!=head /记录管理员的链表,7.6 图书流通管理系统设计链表类应用,图7.27 图书馆类,int itemNum; /记录在馆图书数目 int readerNum; /记录读者数目 int loanNum;/记录借阅信息数目 int managerNum; /记录管理员数目public: Library(); /构造函数 void Run(); /运行图书馆业务函数 void CreateBibliotheca(); /创建书目 void CreateReader(); /创建读者 void CreateManager(); /创建管理员 int ShowMainMenu(); /显示主菜单 void Borrow(); /借书操作 void Return(); /还书操作 void Require(); /查询操作;,7.6 图书流通管理系统设计链表类应用,修改读者、在馆图书、管理员及借阅信息类。读者类Reader原来用数组记录所借的书,在此用一个Item类的指针代替,用单链表记录所借的书,该指针是单链表头指针。对读者进行借书或还书操作是通过对单链表插入或删除结点实现。这个单链表只是附在读者类中,未采用单链表模板,不是一个规范的单链表类。图书类Item的条码是识别图书的关键字,原来取名BarCode,现在为了与链表模板统一,将其改为Code,并增加GetCode函数以访问其条码。为了在Reader类所借书单链表中操作,为Item类增加指向Item类的指针Next。,管理员类Manager,GetCode函数访问其编号,增加Show函数显示其基本信息。借阅信息类Loan,增加GetCode和Show函数,还增加一个long类型的数据成员Code,定义为所借书的条码。修改后的各类可表示为图7.28,图中斜体字表示与图5.18的不同之处。,7.6 图书流通管理系统设计链表类应用,图7.28 图书流通管理系统中的类,借书操作:void Library:Borrow() int code,barcode; Loan ln; DblNode *ti=NULL; /定义数据为Item类型的结点指针 DblNode *tm=NULL; /定义数据为Manager类型的结点指针 DblNode *tr=NULL; /定义数据为Reader类型的结点指针 coutcode; tr = reader.Find(code); /查找读者 if(tr)coutbarcode; ti = item.Find(barcode); /查找管理员 if(ti)coutcode;,7.6 图书流通管理系统设计链表类应用,tm = manager.Find(code); /查找书 if(tm)tr-Info.AddBook(ti-GetInfo(); /添加到读者所借书数组 item.Remove(ti); /从可借书中删除 itemNum-; ln.reader = tr-GetInfo(); /添加借阅信息 ln.item = ti-GetInfo(); ln.manager = tm-GetInfo(); ln.Code = ti-GetInfo().GetCode(); loan.Insert(ln); /添加到借阅信息链表 else cout没有此工号,请重新输入!;return; /工号错 else cout没有此条码,请重新输入!; return; /条码错 else coutNext =items; /插入表头,items为链表头指针items = p; Counter+; void Reader:AddBook(Magazine it) /添加杂志 Magazine *p; p = new Magazine; / 创建一个新结点 if(p)*p = it;p-Next = items;/插入表头items = p; Counter+; ,8.9 图书馆流通管理系统设计 继承与多态的应用,在图书馆类中增加存储杂志的双链表对象,及对杂志计数的数据成员:class LibraryDblList mag;/存储在馆杂志的链表int magNum;/存储在馆杂志数目; 借阅信息类Loan由于借阅对象发生变化,增加一个整型数据成员Type,判断借出的是杂志还是书籍。,图书馆的业务操作函数有较大变化,主要体现在借书和还书两个操作,请同学阅读书上相关内容。修改后的图书馆业务类及各对象类标记如图8.13示。查询功能也可以通过修改Require函数加强。如果要增加其它借阅对象,则可以从Book派生出其它类,并为Library添加数据成员进行管理,并对图书馆业务操作函数进行修改。,图8.13图书馆类和图书类派生关系,在VC+平台上运行程序step4,9.7 图书馆流通管理系统设计输出/输入流的应用,本节中,我们为程序添加保存功能,利用C+的流类,为图书馆流通管理系统中的各种类重载提取和插入运算符,通过文件流将数据保存到磁盘文件。首先要为各对象类重载提取和插入运算符,它们都重载为这些类的友元函数。请先在VC+平台上运行step5。各函数的定义如下:,ostream ,9.7 图书馆流通管理系统设计输出/输入流的应用,ostream ,ostream ,9.7 图书馆流通管理系统设计输出/输入流的应用,读者类 : istream ,9.7 图书馆流通管理系统设计输出/输入流的应用,ostream ,读者类除了输出、输入基本信息,还有所借书链表,并且链表的长度对不同对象是不同的。当从文件读入数据重构对象时,要先获得读者所借书总数(rd.Counter)。并且先将这个数目读入局部变量count中,控制读入数据的数量,而重构的读者对象的所借书总数(rd.Counter)由构造函数赋值0,每次读入一项数据,由AddBook插入读者对象的所借书链表,而读者对象的所借书总数(rd.Counter)由AddBook函数自动增加。,9.7 图书馆流通管理系统设计输出/输入流的应用,双向链表模板类重载提取和插入运算符。templateostream ,templateistream ,图书馆类添加一组输入文件流对象,一组输出文件流对象,添加保存信息和读入信息的函数。class Library /封装图书馆流通业务的类/其它数据成员 ofstream itemFileOut; /文件流对象,保存可借阅书籍数据 ifstream itemFileIn; /文件流对象,读入可借阅书籍数据 ofstream magFileOut;/文件流对象,保存可借阅杂志数据 ifstream magFileIn; /文件流对象,读入可借阅杂志数据 ofstream readerFileOut; /文件流对象,保存读者数据 ifstream readerFileIn; /文件流对象,读入读者数据 ofstream managerFileOut; /文件流对象,保存管理员数据 ifstream managerFileIn; /文件流对象,读入管理员数据 ofstream loanFileOut; /文件流对象,保存借阅信息数据 ifstream loanFileIn; /文件流对象,读入借阅信息数据public: /其它函数成员 void Saveitem(); void Openitem(); ; /在修改款目后分别保存和读入分类信息 void SaveInfo(); /保存图书馆信息 void OpenInfo(); /读入图书馆信息,9.7 图书馆流通管理系统设计输出/输入流的应用,void Library:SaveInfo() itemFileOut.open(item.txt); /打开各输出文件流 magFileOut.open(mag.txt); readerFileOut.open(reader.txt); loanFileOut.open(loan.txt); managerFileOut.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 葡萄酒鉴赏师培训课件
- 2025年山东省安全员B证复审考试模拟100题及答案
- 葡萄酒知识培训大全课件
- 茶艺与茶文化校考试题及答案
- 2025设备购销合同协议书范本
- 仓储保管员中级考试题及答案
- 2025地下停车场车位租赁合同
- 2024译林版八年级英语上册Unit2 School life(重难词汇)含答案
- 2025年中小学体育教师招聘考试判断题库及答案(共500题)
- 2025船舶股份合同范本
- 《Premiere影视剪辑》课件-概述篇
- 中级财务会计PPT完整全套教学课件
- 廉洁培训ppt课件-廉洁培训课件
- TNXFSA 059-2023 锁鲜枸杞规程
- (完整)《走遍德国》配套练习答案
- GB/T 34239-2017聚3-羟基丁酸-戊酸酯/聚乳酸(PHBV/PLA)共混物长丝
- GB/T 26814-2011微波消解装置
- GB/T 13384-2008机电产品包装通用技术条件
- 新部编版四年级上册语文全册完整课件
- 政府信息公开申请表
- FANUC工业机器人离线与应用项目7 工业机器人KAREL程序
评论
0/150
提交评论