《C++程序开发教程》课程电子教案(PPT教学课件)第十三章 图书馆设计

第十三章书馆管理黍就设计 在实际系统中,怎么样用面向对象的思想来编写系统是 很重要的,下面以建立一个〈图书馆管理系统〉为例子,看 看我们怎么样用学过的知识来组织数据、来设计程序。 1.数据的组织 对象的识别: 在一个信息管理系统内识别对象是数据组织中很重要的一 步,识别时候我们从问题中根据业务的流程,操作对象来进 行,识别出一个对象后,我们就可以把具有公共特性的对象 归纳为类。然后在类的基础,分析他们之间的关系,形成若 干个类的层次结构 在图书馆流通系统内,我们知道,有书、读者、借书证、 管理人员、借书还书行为等对象和事件,他们分别各是一个 群体。例如每个图书馆都有几万甚至几十万册图书,每册图 书都是一个对象,它们形成图书类(Book),在图书流通系 统内,还有以下类:
第十三章 图书馆管理系统设计 在实际系统中,怎么样用面向对象的思想来编写系统是 很重要的,下面以建立一个〈图书馆管理系统〉为例子,看 看我们怎么样用学过的知识来组织数据、来设计程序。 1. 数据的组织 对象的识别: 在一个信息管理系统内识别对象是数据组织中很重要的一 步,识别时候我们从问题中根据业务的流程,操作对象来进 行,识别出一个对象后,我们就可以把具有公共特性的对象 归纳为类。然后在类的基础,分析他们之间的关系,形成若 干个类的层次结构。 在图书馆流通系统内,我们知道,有书、读者、借书证、 管理人员、借书还书行为等对象和事件,他们分别各是一个 群体。例如每个图书馆都有几万甚至几十万册图书,每册图 书都是一个对象,它们形成图书类(Book),在图书流通系 统内,还有以下类:

13.1数据分析和组织 读者( Reader)类,图书借阅信息类(Loan),管理人员类 ( Manager),是借书还书行为的操作人。对于借书证对象 我们只记录它的编号,作为读者类的一个数据成员。同一个信 息系统,从不同的角度分析,或根据要求的不同,有不同的侧 重面,这样建立的对象模型不同,可能得出的分类方法也不同。 类数据属性的识别: 每个对象的情况称为对象的属性,同类型的对象具有共同 的属性,只是每个对象的属性值不一定相同。属性是对一个对 象状态的描述,如“在馆图书类”,从流通管理的角度来看, 图书类:书名Tite、作者名 Author、分类号 Indexcode、册 数 Number、条码号 BarCode等属性。 读者类:姓名Name、年龄Age、借书证编号 Bozid等。 个读者允许借阅若干册书,在此用一个Book类的 链表Bkp保存相应信息。另外对读者所借书册数要 统计,定义一个计数的成员 Count. 借阅信息类:所借书book、借书人 reader、操作员 manager
读者(Reader)类,图书借阅信息类(Loan),管理人员类 (Manager),是借书还书行为的操作人。对于借书证对象。 我们只记录它的编号,作为读者类的一个数据成员。同一个信 息系统,从不同的角度分析,或根据要求的不同,有不同的侧 重面,这样建立的对象模型不同,可能得出的分类方法也不同。 类数据属性的识别: 每个对象的情况称为对象的属性,同类型的对象具有共同 的属性,只是每个对象的属性值不一定相同。属性是对一个对 象状态的描述,如“在馆图书类”,从流通管理的角度来看, 图书类:书名Title、作者名Author、分类号IndexCode、册 数Number、条码号BarCode等属性。 读者类:姓名Name、年龄Age、借书证编号Bozid等。 一个读者允许借阅若干册书,在此用一个Book类的 链表Bkp保存相应信息。另外对读者所借书册数要 统计,定义一个计数的成员Count; 借阅信息类:所借书book、借书人reader、操作员manager 13.1 数据分析和组织

13.1数据分析和组织 管理人员类:姓名Name、年龄Age、工号code等; 同一个类(对象),从不同的角度分析,或根据要求的不同, 描述它的属性也可能不一致。 类成员函数的设计: 就是对象的操作,在图书馆流通管理系统内,图书类应包 含为各属性赋值(set)的操作、读取条码( Getcode)和显示图 书基本信息(Show)的操作,另外还定义了缺省构造函数和拷贝 构造函数。读者类,需定义为各属性赋值(set)的操作、读取 借书证号的操作,借书和还书需要向所借书数组中添加或减少 书,定义 AddBook和 DelBooki两个操作,还有显示所借书的操 作 Show Books。 类的层次结构设计: 对于图书来说,我们知道,在图书馆中,一般有两类:书 籍和杂志,书籍具有图书的一般属性(书名、条码等共性)之 外,还有作者、分类号等特性
13.1 数据分析和组织 管理人员类:姓名Name、年龄Age、工号Code等; 同一个类(对象),从不同的角度分析,或根据要求的不同, 描述它的属性也可能不一致。 类成员函数的设计: 就是对象的操作,在图书馆流通管理系统内,图书类应包 含为各属性赋值(Set…)的操作、读取条码(GetCode)和显示图 书基本信息(Show)的操作,另外还定义了缺省构造函数和拷贝 构造函数。读者类,需定义为各属性赋值(Set…)的操作、读取 借书证号的操作,借书和还书需要向所借书数组中添加或减少 书,定义AddBook和DelBook两个操作,还有显示所借书的操 作ShowBooks。 类的层次结构设计: 对于图书来说,我们知道,在图书馆中,一般有两类:书 籍和杂志,书籍具有图书的一般属性(书名、条码等共性)之 外,还有作者、分类号等特性

13.7 数据分祈和组织 而杂志也是图书的一种,对于现刊,是以期为借阅单位,对于 过刊以卷( Volume)为借阅单位,为简化问题,我们只处理 过刊借阅,即以卷为借阅单位,每卷分配一个条码。与书籍的 不同之处在于,杂志没有单一的作者,只以刊名和卷号借阅。 书籍和杂志图书都有书(杂志)名、条码等共性,都有设置 条码、读取条码及显示等接口,提取二者的共性和公共接口, 定义一个图书类Book,作为基类。然后派生出Item书籍和 Magazine杂志两个类。Item有作者、分类号等特性, Magazine有卷号、语言等特性。 Book Item Magazine
13.1 数据分析和组织 而杂志也是图书的一种,对于现刊,是以期为借阅单位,对于 过刊以卷(Volume)为借阅单位,为简化问题,我们只处理 过刊借阅,即以卷为借阅单位,每卷分配一个条码。与书籍的 不同之处在于,杂志没有单一的作者,只以刊名和卷号借阅。 书籍和杂志图书都有书(杂志)名、条码等共性,都有设置 条码、读取条码及显示等接口,提取二者的共性和公共接口, 定义一个图书类Book,作为基类。然后派生出Item书籍和 Magazine杂志两个类。Item有作者、分类号等特性, Magazine有卷号、语言等特性。 Book Item Magazine

13.2类的定义 class Book I ∥/图书基类 protected char Title[40]; ∥书名 long code: ∥条码 int number. ∥1书的册数 public Book: Book(char *title, long code, int nb); void SetCode long code)i Code code; J void SetTitle(char* tii strcpy (Title, tI);y char*GetTitle(i return Title; long Getcodeoi return Code; 1 int GetNumber( return Number; y void ChangeNumber(int d if(Number==0 &&d <o) return; Number + d; y irtual void show();∥显示函数定义为虚函数 friend ostream &operator <<(ostream &os, Book &bk t Show 0; ∥重载借阅信息类插入符 - return os,] <心
13.2 类的定义 class Book { // 图书基类 protected: char Title[40]; // 书名 long Code; // 条码 int number; // 书的册数 public: Book(); Book(char *title, long code, int nb); void SetCode(long code) { Code = code; } void SetTitle(char* tl) { strcpy(Title, tl); } char *GetTitle() { return Title; } long GetCode() { return Code; } int GetNumber( return Number; } void ChangeNumber(int d) { if(Number == 0 && d < 0) return; Number += d; } virtual void Show(); // 显示函数定义为虚函数 friend ostream &operator << (ostream &os, Book &bk){ Show(); // 重载借阅信息类插入符 return os; } };

13.2类的定义 class Item public Book t ∥书籍类 char Author[20] ∥作者 char Index Code[10] ∥1分类号 public Temo 缺省构造函数 Item(char *author, char *title, char *index int code): Book(title, code)t 众 strcpy( Author, autho); ndexcode≡ index;∥构造函数 m tem it)t ∥拷贝构造函数 strcpy (Title, it Title); Code it Code; strcpy(Author, it. Author); IndexCode= it Index Code; void SetAuthor(char *) void Setlndex Code(char * void Show(t ∥1重定义显示函数 cout<“书名:”<Ttle≤“,作者:”<< Author<< endla
13.2 类的定义 class Item :public Book { // 书籍类 char Author[20]; // 作者 char IndexCode[10]; // 分类号 public: Item(); // 缺省构造函数 Item(char *author, char *title, char *index, int code):Book(title, code) { strcpy(Author, author); IndexCode = index; // 构造函数 Item(Item & it) { // 拷贝构造函数 strcpy(Title, it.Title); Code = it.Code; strcpy(Author, it.Author); IndexCode = it.IndexCode; } void SetAuthor(char *); void SetIndexCode(char *); void Show() { // 重定义显示函数 cout << “书名:” << Title << “, 作者:” << Author << endl; } };

13.2类的定义 class Magazine: public Book{∥杂志类 int volume enum lanG{cH|NESE=1, ENGLISH}Lang;∥语言种类 public: Magazine ( Book i Volume =0; Lang CHINESE; Type =1; 1 Magazine(char title, int vol, LANG lang, int code): Book(titlem code i Volume=vol;Lang=lang;}∥构造函数 MagazineMagazine ma) ∥拷贝构造函数 void SetVolume (int voli Volume vol; y void SetLangint lang)i Lang =(LANG)lang; void show( ∥重定义显示函数 {cout<“杂志名:”< Title<“卷号:”< Volume ≤≤endl;} 读者类要存储所借书。现在图书类一个派生类体系,它们的公共基 类Book提供了统一接口。可定义一个单链表来同时存储读者所借书籍 Item和杂志 Magazine。Book类有一个指向Book类的指针Next, 用来构成箱表
13.2 类的定义 class Magazine: public Book { // 杂志类 int Volume; enum LANG {CHINESE=1, ENGLISH} Lang; // 语言种类 public: Magazine ():Book() { Volume = 0; Lang = CHINESE; Type = 1; } Magazine (char * title, int vol, LANG lang, int code):Book(titlem code) { Volume = vol; Lang = lang; } // 构造函数 Magazine (Magazine & ma); // 拷贝构造函数 void SetVolume (int vol) { Volume = vol; } void SetLang (int lang ) { Lang = (LANG)lang; } void Show ( ) // 重定义显示函数 {cout << “杂志名:”<< Title<< “, 卷号:”<<Volume <<endl;} }; 读者类要存储所借书。现在图书类一个派生类体系,它们的公共基 类Book提供了统一接口。 可定义一个单链表来同时存储读者所借书籍 Item和杂志Magazine 。Book类有一个指向Book类的指针Next, 用来构成链表

13.2类的定义 class Reader i ∥读者类 protected: char Name[40];∥书名 long Bozid; ∥借书证编号 int Age; ∥1年龄 int Count: ∥借书数目 BkNode* Bkp; ∥借的书单向链表头指针 public Reader0; Reader(char *n, long bd, int agei strcpy(Name, n); Bozid bd; Age s age books NULL, count =0; void SetCount(int c)i Count=C, long Get Bkidoi return Bozid; 1 long Getcounto return Count:3
13.2 类的定义 class Reader { // 读者类 protected: char Name[40]; // 书名 long Bozid; // 借书证编号 int Age; // 年龄 int Count; // 借书数目 BkNode * Bkp; // 借的书单向链表头指针 public: Reader(); Reader(char *n, long bd, int age) { strcpy(Name, n); Bozid = bd; Age = age; books = NULL; count = 0; } void SetCount(int c) { Count = c; } long GetBkid() { return Bozid; } long GetCount() { return Count; }

13.2类的定义 void add Book(Book*bk){∥添加书籍 BkNode *p= new BKNode; p->Data bk; if(Bkp)i p→>Next=Bkp;∥插入表头, tems= p, Count + else i Bkp= p p->Next= NULL
13.2 类的定义 void AddBook(Book * bk) { // 添加书籍 BkNode *p = new BKNode; p->Data = bk; if(Bkp) { p->Next = Bkp; // 插入表头, items = p; Count ++; } else { Bkp = p; p->Next = NULL; } }

13.2类的定义 void delBook( long code){∥删除书籍 BkNode*p1=Bkp, *p2, while(p1)i f(p1→>Data-> Getcode==code){∥找到条码的书 p2→>next=p1>next delete p1 else p2=p1; p1=p1->next void show(0;∥显示函数定义为虚函数
void DelBook(long code) { // 删除书籍 BkNode *p1 = Bkp, *p2; while(p1) { if(p1->Data->GetCode == code) { // 找到条码的书 p2->next = p1->next; delete p1; } else { p2 = p1; p1 = p1->next; } } } void Show(); // 显示函数定义为虚函数 }; 13.2 类的定义
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C++程序开发教程》课程电子教案(PPT教学课件)第八章 继承性.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第七章 动态内存分配.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第五章 类与对象.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十二章 异常处理.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第四章 函数.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十章 模板.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第九章 多态性.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第二章 C++基础知识.ppt
- 《数据库原理与应用》ppt电子书.ppt
- 清华大学:《汇编语言程序设计》绪论.ppt
- 清华大学:《汇编语言程序设计》第四章 汇编语言程序格式.ppt
- 清华大学:《汇编语言程序设计》第六章 子程序结构.ppt
- 清华大学:《汇编语言程序设计》第八章 输入输出程序设计.ppt
- 清华大学:《汇编语言程序设计》第五章 循环与分支程序设计.ppt
- 清华大学:《汇编语言程序设计》第二章 80x86计算机组织.ppt
- 清华大学:《汇编语言程序设计》第九章 BIOS和DOS中断.ppt
- 清华大学:《汇编语言程序设计》第三章(3-3) 逻辑指令.ppt
- 清华大学:《汇编语言程序设计》第三章(3-2) 8086的指令系统.ppt
- 清华大学:《汇编语言程序设计》第三章(3-1) 8086的寻址方式.ppt
- 清华大学:《汇编语言程序设计》第七章 高级汇编语言技术.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第三章 基本控制结构程序设计.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第六章 数据结构.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)习题课.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)模板习题.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第十一章 流类库和输入/输出.ppt
- 《C++程序开发教程》课程电子教案(PPT教学课件)第一章 软件设计.ppt
- 深圳信息职院:《电子商务》双语版 UNIT 17-01 Outlook Express6说明.ppt
- 深圳信息职院:《电子商务》双语版 UNIT18-01 FoxMail的使用.ppt
- 深圳信息职院:《电子商务》双语版 UNIT19-01 文档签名与安全邮件综合操作.ppt
- 深圳信息职院:《电子商务》双语版 UNIT19-02 Outlook2003的使用.ppt
- 深圳信息职院:《电子商务》双语版 UNIT 20-01 电子商务安全.ppt
- 深圳信息职院:《电子商务》双语版 UNIT22-01 电子商务支付.ppt
- 深圳信息职院:《电子商务》双语版 Unit23-01 网上支付方式.ppt
- 深圳信息职院:《电子商务》双语版 UNIT24-01 电子钱包的使用.ppt
- 深圳信息职院:《电子商务》双语版 UNIT25-01 招商银行的网络银行业务.ppt
- 深圳信息职院:《电子商务》双语版 UNIT26-01 招商银行个人网上银行专业版操作指导书.ppt
- 深圳信息职院:《电子商务》双语版 UNIT 26-02 网上日常生活.ppt
- 深圳信息职院:《电子商务》双语版 UNIT 27-01 网络营销.ppt
- 深圳信息职院:《电子商务》双语版 UNIT28-01 网络营销.ppt
- 深圳信息职院:《电子商务》双语版 UNIT29-01 美国Dell计算机公司的网络直销.ppt