当前位置:文档之家› 软件工程实验课题

软件工程实验课题

图书管理系统组长:杨晓华组员:巴雅尔图、那日苏、张天、牛莉、杨宇婷作业提交日期:二О一五年十月3三十日作者简介组长:杨晓华学号:120714241 学院:经济管理学院组员:巴雅尔图学号:110412185 学院:生态环境学院那日苏学号:111710874 学院:兽医学院张天学号:120714242 学院:经济管理学院牛莉学号:120714767 学院:经济管理学院杨宇婷学号:120715553 学院:经济管理学院图书管理系统摘要简单介绍了图书管理系统数据库的设计和系统功能的实现过程。

该系统是运行在学校网络上的网络图书管理系统,由图书编目,图书管理,读者管理,资料管理,Web查询等几个子系统组成,,实现了图书资料的计算机网络管理和Web查询功能。

计算机技术的迅猛发展,特别是随着网络技术的出现标志着信息时代已经来临。

信息化浪潮、网络革命在给社会带来冲击的同时,也使图书馆业务受到了强烈的冲击,图书馆传统的管理和服务方式已不能适应读者对日益增长的文献信息的需求,建设图书馆信息网络系统,是图书馆现代化建设的客观要求。

建设以计算机为核心的图书馆信息网络,实现图书馆管理和服务的自动化,更好地为科技工作服务,是图书馆发展的必由之路。

目前,国内大部分高校图书馆都实现了网络管理,目前图书馆都在在朝着这个方向发展。

关键词:图书,网络,数据库,管理系统,VC一、系统可行性分析1.总体功能设计根据高校图书馆的实际情况和校园网网的现状,我们确定了网络图书系统应该具备8个方面的功能,它们是图书编目,图书采购,图书管理,读者管理,标准管理,资料管理,系统维护,Web查询。

其中Web查询是该系统突出的特点,它的实现是因为有学校校园网的支持。

系统组成和功能框图见图1。

图2 业务流程图图3 读者图4 出版社图5 管理员图6 借阅图书图7 借阅关系表1 读者信息说明表2 图书信息说明表3 借书信息说明Web查询功能应该能够查询图书,期刊和读者等信息,因此我们在查询系统中设计了以下主要功能:图书查询、期刊查询、读者信息查询,图书推荐。

“图书查询”主要查询在图书库中现有的资料,让用户了解是否有其需要的图书、有哪些图书,它包括按书名查询图书、按索书号查询和按作者查询图书等。

“期刊查询”主要查询期刊的情况,包括按刊名查询出版物信息、按索书号查询连续出版物信息和按编辑部查询连续出版物信息等。

“读者信息查询”主要查询读者的图书借阅情况,包括读者借阅记录查询和读者超期借阅记录查询等。

“图书推荐”是让读者推荐图书,作为工作人员采购新书的参考。

二、需求分析1.运行环境规定联网的微型计算机立足于校园实际,建成符合标准化协议、通用性较强、实用的系统,以提高图书信息的现代化管理水平,实现信息资源的共享。

图书管理系统是一种基于集中统一规划的数据库数据管理新模式。

在对图书、读者、出版社信息的管理,其实是对图书、读者数据出版社信息的管理。

本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。

使用该系统之后,图书馆管理人员可以管理读者的登记、图书的购入、借出、归还以及注销、图书归还中的问题;还可以查询某位读者、某本图书的借阅情况,对当前借阅情况给出一些统计,给出统计表格,以全面掌握图书的流通情况,还可以根据图书类别查询图书,可以查询出版社的信息,以及某出版社的图书在本校的借阅情况和平均价钱等信息。

图书管理系统,最主要处理两个过程,借书与还书。

借书之前先看看是不是有借书的资格。

还书时,检查一下书是否过期等如有进行相关的处理。

其他的一些功能主要是围绕这两个功能展开。

图书模块的功能应包括:图书信息的添加、删除、修改、编辑、并可以根据图书类别查询图书。

管理员,出版社等信息查询与图书相类似。

用vc作为前台的开发工具,定义Cdatabase、CRecordset建立与数据库的连接。

要求应前台用程序和后台数据库在数据类型方面要统一,否则会出现插入和更新异常等,导致系统异常,不利于使用。

本系统的宗旨是提高图书管理工作的效率,减少相关人员的工作量,使学校的图书管理工作真正做到科学、合理的规划,系统、高效的实施三、系统设计1.总体设计运行系统:Linux,Unix,Windows2000、WindowsXP及其以上操作系统。

2.功能(1)图书编目子系统:实现编目处理、查重、馆藏管理等功能。

其中编目处理包括原始编目、书目记录、数据维护、各类输出等项;馆藏管理包括馆藏数据维护、丢剔处理、馆藏统计、报表输出等项。

(2)图书采购子系统:实现预订查询、新书订购、验收记到、资金管理、统计报表处理等功能。

(3)图书流通子系统:实现出纳管理、读者管理、查询及统计打印功能模块。

其中出纳管理包括借书、还书、续借、预约、罚款等项;读者管理包括读者登记、借书证挂失、读者数据维护等项;查询包括是查书去向、查读者借书情况、查总体借还情况等;统计打印则是打印图书借阅和读者情况的统计报表以及打印催还单等。

(4)期刊管理子系统:实现期刊查缺、采购、编目、记到、典藏、流通、统计等功能。

(5)标准管理子系统:实现期刊查缺、采购、编目、记到、典藏、流通、统计等功能。

(6)资料管理子系统:实现资料查缺、采购、编目、记到、典藏、流通、统计等功能。

(7)系统维护子系统:实现操作员库、读者库、单位库维护,权限设置等功能。

(8)Web查询子系统:实现网上查询(图书、期刊查询和读者查询)、读者荐书、意见反馈等功能。

图8系统结构图四、详细设计1.算法设计图9工作人员流程图图10普通学生流程图图11借阅者流程图2.数据库设计在图书管理系统中,数据库设计占有重要位置,数据库设计质量的优劣,可直接影响到数据库数据的冗余度、数据的一致性、数据丢失等问题。

图书管理系统数据库常常要设计含有如下数据项:借书证号、姓名、单位、馆藏号(馆藏号为每本书上的条形码号)、书名、分类号、作者、价格等。

下面以图书流通模块所涉及的数据库为例来说明模式的设计。

先设计图书流通的实体——关系图(E-R图)。

E-R图由3个相关联的部分构成,即实体、实体与实体之间的关系以及实体和关系的属性。

图书流通过程中实体“图书”与“读者”之间的关系是借阅和被借阅的关系,实体“读者”与“单位”之间的关系是属于和被属于的关系,“图书”的属性有“馆藏号”,“书名”,“分类号”、“作者”、“价格”,“读者”的属性有“借书证号”、“姓名”、“性别”,“单位”的属性有“单位编号”和“单位名称”,“借阅”属性“借书日期”,由此得出E-R图如图4。

3.概念设计图12 图书流通的E-R图4.逻辑设计(1)导出初始关系模式book(图书编号#,入库时间,图书名称,作者,出版社,出版日期,价格,数量,图书状态)bookuser(借阅者的图书证号#,学号,姓名,性别,出生年月,民族,系别)worker(用户名,密码)borrow(图书编号#,图书名称,借阅者姓名,借阅数量,借阅时间,归还时间,过期天数,归还标志位)(2)产生子模式子模式是用户所用到的那部分数据的描述。

除了指出用户用到的数据外,还应指出数据与概念模式中相应数据的联系,即指出概念模式与子模式之间的对应性。

借书子模式(借阅者的图书证号群,姓名,图书编号#,图书名称,借阅时间)五、实现与测试1.控制台应用程序a.日期结构,包含有年、月、日,以及减法与小于号的重载struct Date{int m_year;int m_moth;int m_day;int operator – (const Date&d){int days=365*(m_year-a. m_year);days+=30*(m_moth-d.m_moth)+m_day-d.m_day;return days;}BOOL operator <(const Date& d){if(*this-d<0)return TRUE;return FALSE;}};b.读者结构,包含有姓名、借书证号、性别与类别,小于号的重载struct Reader{CString m_name;CString m_certificateNo;BOOL m_sex;//1--male,0--femaleint m_type;//0--student,1--graduate,2--teacherBOOL operator <(Reader &r){if(m_type<r.m_type)return TRUE;if(m_certificateNo<r.m_certificateNo)return TRUE;if(m_name<r.m_name)return TRUE;if(m_sex<r.m_sex)return TRUE;return FALSE;}};c. CBooks类class CBooks : public CObject{DECLARE_SERIAL(CBooks)public:CString m_serialNumber;//编号CString m_category;//类别CString m_title;//书名CString m_auther;//作者CString m_press;//出版社Date m_publicDate;//出版日期double m_price;Date m_purchaseDate;//购书时间Reader m_lender;//借阅者Date m_lendDate;//借书日期Date m_returnDate;//还书日期CBooks();virtual ~CBooks();void Serialize(CArchive&ar);};CBooks类具有所需要的数据成员外,需要注意到首先,它是由CObject派生的,CObject是绝大部分MFC类的基类;其次,类中有一个宏DECLARE_SERIAL(CBooks),其作用就是为了实现文件的序列化与类的动态创建。

相应的,在此类的实现文件中必定要有宏IMPLEMENT_SERIAL(CBooks,CObject,1)。

最后,CBooks应重载CObject虚拟函数Serialize(CArchive&ar)。

CBooks类的实现文件类似于:IMPLEMENT_SERIAL(CBooks,CObject,1)CBooks::CBooks(){m_price=0.0;m_lender.m_sex=TRUE;m_lender.m_type=2;m_publicDate.m_year=0;m_publicDate.m_moth=0;m_publicDate.m_day=0;m_lendDate.m_year=0;m_lendDate.m_moth=0;m_lendDate.m_day=0;m_returnDate.m_year=0;m_returnDate.m_moth=0;m_returnDate.m_day=0;m_purchaseDate.m_year=0;m_purchaseDate.m_moth=0;m_purchaseDate.m_day=0;}CBooks::~CBooks(){}void CBooks::Serialize(CArchive&ar){if(ar.IsStoring()){ar<<m_serialNumber<<m_category<<m_title<<m_auther<<m_press<<m_price;ar<<m_lender.m_name<<m_lender.m_certificateNo<<m_lender.m_sex<<m_lender.m_type;ar<<m_publicDate.m_year<<m_publicDate.m_moth<<m_publicDate.m_day;ar<<m_lendDate.m_year<<m_lendDate.m_moth<<m_lendDate.m_day;ar<<m_returnDate.m_year<<m_returnDate.m_moth<<m_returnDate.m_day;ar<<m_purchaseDate.m_year<<m_purchaseDate.m_moth<<m_purchaseDate.m_day;}else{ar>>m_serialNumber>>m_category>>m_title>>m_auther>>m_press>>m_price;ar>>m_lender.m_name>>m_lender.m_certificateNo>>m_lender.m_sex>>m_lender.m_type;ar>>m_publicDate.m_year>>m_publicDate.m_moth>>m_publicDate.m_day;ar>>m_lendDate.m_year>>m_lendDate.m_moth>>m_lendDate.m_day;ar>>m_returnDate.m_year>>m_returnDate.m_moth>>m_returnDate.m_day; ar>>m_purchaseDate.m_year>>m_purchaseDate.m_moth>>m_purchaseDate.m_day;}}2.建立管理图书的类首先建一个基类class CManager{CObArray m_list;public:void AddTail(CBooks*pBook);//在链表尾部放书籍void AddHead(CBooks*pBook); //在链表头部放书籍void Add(CBooks*pBook,int index);//将书籍放到index处void Delete(int index);//删除index处的书籍void Fit(int index);//修改index处的书籍CBooks* GetBook(int index);//获取index出的书籍CManager();virtual ~CManager();virtual int Find(void*para,CobArray&list);virtual void Delete (void*para);viraul void Sort();void Serialize(CArchive&ar);friend ostream & operator <<(ostream& os,CManager &mg);};其实现文件类似于CManager::CManager(){}CManager::~CManager(){int num=m_list.GetSize();for(int i=0;i<num;i++){CBooks*p=(CBooks*)m_list[i];delete p;}m_list.RemoveAll();}void CManager::Serialize(CArchive&ar){m_list.Serialize(ar);}void CManager::Delete (void*para){}void CManager::Sort(){}int CManager::Find(void*para,CobArray&list){return –1;}CManagerTitle:public CManager{public:CManager* m_pParent;CManagerTitle();int Find(void*para,CobArray&list);void Delete (void*para);void Sort();}:CManagerTitle::CManagerTitle():m_pParent(0){} int CManagerTitle::Find(void*para,CobArray&list){if(!m_pParent)return;CString*pStr= (char*)para;int i,value=-1,num=m_pParent->m_list.GetSize();for(i=0;i<num;i++){CBooks*p=(CBooks*) m_pParent->m_list[i];if(p->m_title==pStr){list.Add(p);if(value<0)value=i;}}return value;}void CManagerTitle::Delete (void*para){if(!m_pParent)return;CString pStr= (char*)para;int i=0;while(i< m_pParent->m_list.GetSize()){CBooks*p=(CBooks*) m_pParent->m_list[i];if(p->m_title==pStr){delete p;m_pParent->m_list.RemoveAt(i);}elsei++;}}void CManagerTitle::Sort(){if(!m_pParent)return;int i,jfor(i=0;i<num;i++){CBooks* b1=(CBooks*) m_pParent->m_list[i];for(j=i+1;j<num;j++){CBooks*b2=(CBooks*) m_pParent->m_list[j];if(b2->m_title<b1->m_title){m_pParent->m_list.RemoveAt(i);m_pParent->m_list.InsertAt(i,b2);m_pParent->m_list.RemoveAt(j);m_pParent->m_list.InsertAt(j,b1);b1=b2;3.完成主界面的设计与实现class CMenuA{public:void ShowMain();void ShowSort();void ShowFind();void ShowDelete();………………………………..CMenuA();virtual ~CMenuA();};六、设计体会计算机具有强大的功能,它现已应用于各行各业,在人们生活的各个领域起着非常重要的作用。

相关主题