




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C/C+语言程序设计大型实验报告-图书管理系统C/C+语言程序设计大型实验报告-图书管理系统浙江工业大学软件学院二零零九年五月目录第一章 概述1.1 实验意义1.2 说明1.3 实验内容第二章 简单的LMS功能及设计思路2.1 功能描述 2.1.1 读者管理模式功能 2.1.2 工作人员管理模式功能 2.1.3 管理员管理模式功能2.2 基本设计思路第三章 用户类3.1 用户类的定义3.2 用户的登陆3.3 修改用户信息3.4 查询图书信息第四章 读者管理模式4.1查看个人信息4.2查找馆藏图书信息第五章 工作人员管理模式5.1查询读者信息(个人信息和读者借书情况)5.2还书5.3借书5.4查询图书信息第六章 管理员管理模式6.1添加、删除图书信息 6.1.1 添加图书信息 6.1.2 删除图书信息6.2添加、删除用户信息6.3查询图书信息第七章 图书类第八章 建立数据库8.1 数据储存文件说明8.2 数据库操作说明第九章 主程序结构附:在VC6环境下的测试截图第一章 概述1.1 实验意义本实验通过分析并实现一个简单的系统以图书管理系统,让学生从一个参与项目开发的角度全新的体验项目开发的全过程。学生在独立完成一个简单的系统的开发的过程中,不但真正的学到程序设计的实战知识,更为重要的是能够体验开发的乐趣并培养程序开发的兴趣。选择图书管理系统作为实验的目的是因为图书管理系统学生能经常接触到,对其功能有一定的了解,能够在使用中提出自己的一些需求的系统。图书管理系统虽然简单,但是随着需求功能的不断增加,开发的难度也不断增加,不仅能满足初学编程的需求,也能让更高年级的学生通过将学到的知识直接用于该系统的开发而巩固和提高编程水平。1.2 说明本实验报告分为三个部分,第一部分为概述,介绍图书管理系统的实验基本内容以及对图书管理系统的功能描述,以及基本设计思路;第二部分为具体的类定义及实现的介绍,是本实验报告的重点部分;第三部分为主程序设计部分,包括对数据库的操作以及主程序登录界面的说明。1.3 实验内容开发一个基于DOS界面的图书馆管理系统,通过命令的方式进行借书还书等图书馆需要的功能;用户界面友好,让非计算机人员通过简短的培训即可使用;系统的可扩展性良好,可以在此基础上方面的增加其他的功能模块。第二章 简单的LMS功能及设计思路2.1 功能描述图书管理系统(LMS)用于图书馆进行图书的管理,主要的功能包括借书、还书、查找等。不同的使用对象具有不同的权限,包括读者管理、工作人员管理、管理员管理等三种模式。选择登录模式(读者、工作人员、管理员),输入用户名和密码,成功后进行相应的功能模块。2.1.1 读者管理模式功能读者可以查找馆藏书目,了解图书馆有哪些书,是否可借。读者可以查看个人借书情况和修改基本个人信息、修改密码。2.1.2 工作人员管理模式功能可以查找馆藏书目,了解图书馆有哪些书,是否可借。根据读者号查询读者信息,显示该读者基本信息,和借书情况(借了哪里书)。读者信息高级查找可以根据姓名等其他信息进行查找。借书功能:首先输入读者号,在该状态下依次输入该读者借的书,完成图书的借阅工作。还书功能:直接输入图书ID号,将该书的信息改为入库,并修改读者的借书记录。2.1.3 管理员管理模式功能可以查找馆藏书目,了解图书馆有哪些书,是否可借。维护图书信息:添加:进入添加状态,根据提示依次输入图书的基本信息,默认状态下为继续输入,当输入-1回到上一层。修改:首先进行查找,列出所有符合条件的图书,根据列出的需要选择要修改的图书,如果只有一条记录则直接进入修改。根据提示选择该图书需要修改的字段,并进行修改。选择“完成”回到上一层。删除:维护读者信息:添加、删除、编辑读者信息。维护人员信息:添加、删除、编辑工作人员信息。2.2 基本设计思路采用面向对象的方式实现图书管理系统,根据不同的使用权限,使用对象分为读者、工作人员和管理员。图 21 系统主要类结构图分别设计读者类、工作人员类、管理员类(如上图),用户类为基类实现通用的功能(登录,查询图书信息,修改用户信息)。用数据库进行数据的保存,需要保存的数据主要包括图书数据、用户数据(包括读者、工作人员、管理员)、借阅索引表。设置数据操作类,实现所有的数据库操作相关的功能。设计图书类,显示图书信息,记录、更新借阅信息。第三章 用户类3.1 用户类的定义用户类的公开定义中,包括6个构造函数,重载不同类型的用户构造,登陆函数(userLogin(void))用于用户登陆,图书查询函数(searchBook()),用户密码修改函数(resetPassWord(void)),用户信息修改函数(resetInfo)。另有四个虚函数,分别用于判断用户是否存在(isExisted(void))、从键盘读取用户信息(getFromStdin (void))、将信息存入数据库(addToData(void))以及显示信息(showInfo(void)),用于被不同模式的用户继承。用户类的保护定义中,包括编号(no)、姓名(name)、密码(passWord)以及用户类型(usertype)四个成员变量。3.2 用户的登陆bool User:userLogin()若登陆成功,返回true,否则返回fasle判断用户是否存在,若不存在,返回false否则判断密码是否正确,若错误,返回false否则返回true3.3 修改用户信息bool User:resetPassWord(void)修改用户密码,修改成功返回true,返回菜单返回false1.读取新密码和确认密码2.若新密码和确认密码相同,密码修改成功,返回true 否则询问重新输入或者返回菜单 重新输入则再次执行该函数 返回菜单,返回faslebool User:resetInfo(const std:string &_name, const std:string &_passWord, UserType _type)重新设置用户名,密码,用户类型3.4 查询图书信息void User:searchBook()1. 读取根据何种方式进行查找2. 读取关键字3. 调用sqlOpenConnection函数打开数据库4. 调用getDataRecord函数按照指定方式和关键词在数据库中搜索5. 若数据不存在,输出提示,返回否则显示图书信息6. 关闭数据库第四章 读者管理模式4.1查看个人信息void BookReader:showInfo(void)虚继承自User类,调用User类的showInfo(void)函数显示该工作人员的序号、姓名、权限,并且显示借书数目。4.2查找馆藏图书信息直接调用User类的searchBook()函数第五章 工作人员管理模式5.1查询读者信息(个人信息和读者借书情况)void Worker:showInfo(void)虚继承自User类,调用User类的showInfo(void)函数显示该工作人员的序号,姓名、权限,并且显示性别和部门。void Worker:showReaderInfo(BookReader* reader) 将BookReader类型的指针reader指向showInfo(void)函数,即调用BookReader类的showInfo(void)函数以显示读者借书情况。5.2还书bool Worker:returnBook(const string& bno, const string& rno)5.3借书bool Worker:borrowBook(const string& bno, const string& rno)首先调用图书类和读者类的isExisted检查5.4查询图书信息直接调用User类的searchBook()函数第六章 管理员管理模式6.1添加、删除图书信息6.1.1添加图书信息bool LAdmin:AddBook(void)添加图书函数,添加成功返回true,返回上层返回false1.新建Book类型的指针。2.用该指针调用Book类的getFromStdin()函数以及addToData()函数,获取图书信息并添加入数据库。3.提示成功添加图书,返回true4.若失败,提示选择重新输入或者返回上层 重新输入则再次调用该函数 返回上层则返回false。6.1.2 删除图书信息bool LAdmin:DeleteBook(Book* aBook, bool warning)删除图书函数,删除成功返回true,若图书不存在,或者数据库出错,或者操作被取消返回false1.用aBook指针调用Book类的isExisted()判断图书是否存在。若不存在,返回false2.用aBook指针调用showInfo()显示图书信息。3.询问是否要删除该书,若取消,返回false 否则调用DBManager类的sqlOperate函数对数据库进行删除图书操作,操作成功返回true,失败返回false6.2添加、删除用户信息bool LAdmin:AddMember(void)添加用户函数,添加成功返回true,返回上层返回false1.新建User类型的指针。2.选择具体人员类型,并新建对应类型的指针2.用该指针调用该类类的getFromStdin()函数以及addToData()函数,获取用户信息并添加入数据库。3.提示成功添加用户,返回true4.若失败,提示选择重新输入或者返回上层 重新输入则再次调用该函数 返回上层则返回false。bool LAdmin:deleteMember(User *aUser, int _type, bool warning)删除用户函数,删除成功返回true,若用户不存在,或者数据库出错,或者操作被取消返回false1.用aUser指针调用User类的isExisted()判断用户是否存在。若不存在,返回false2.用aUser指针调用showInfo()显示用户信息。3.询问是否要删除该用户,若取消,返回false 否则调用DBManager类的sqlOperate函数对数据库进行删除用户操作,操作成功返回true,失败返回false6.3查询图书信息直接调用User类的searchBook()函数第七章 图书类图书类的公开定义中,包括2个构造函数,重载不同类型的图书构造,重设借书数量函数(setNewBorrowNum(const string& newNum))用于设置图书借出数量,更新数据函数(updateData(void))。另有四个函数,同用户类的虚函数一样,分别用于判断图书是否存在(isExisted(void))、从键盘读取图书信息(getFromStdin (void))、将信息存入数据库(addToData(void))以及显示信息(showInfo(void))。用户类的保护定义中,包括编号(no),书名(name),作者(author),出版社(press),库存量(storenum),借出量(borrownum)等六个成员变量。#ifndef BOOK_H#define BOOK_H#include #include #include DBManage.husing namespace std;class Bookpublic:Book(void);Book(const string& _no);bool isExisted(void);bool getFromStdin(void);bool addToData(void) const;void showInfo(void) const;string getNo(void) const;string getBorrowNum(void) const;string getStoreNum(void) const;void setNewBorrowNum(const string& newNum);bool updateData(void) const;private:string no, name, author, press, storenum, borrownum;#endif第八章 建立数据库8.1 数据储存文件说明8.2 数据库操作说明读、存、查找、删除数据的函数全部写在DBManage.h和DBManage.cpp文件中。DBManage.h放所有的数据操作函数的声明,在DBManage.cpp文件中放置数据操作函数的实现。#ifndef DBMANAGE_H#define DBMANAGE_H#import c:program filescommon filessystemadomsado15.dll no_namespace rename (EOF, adoEOF)#include #include #include using namespace std;class DBManagepublic:static _ConnectionPtr sqlOpenConnection()_ConnectionPtr pConnection;CoInitialize(NULL);pConnection.CreateInstance(_uuidof(Connection);try / 打开本地Access库Database.mdbpConnection-Open(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb,adModeUnknown);return pConnection;catch(_com_error e)return NULL; static bool sqlOperate(const char* sqlCommand)_ConnectionPtr pConnection=sqlOpenConnection();_CommandPtr pCommand; pCommand.CreateInstance(_uuidof(Command);pCommand-ActiveConnection = pConnection;/ 将库连接赋于它trypCommand-CommandText = sqlCommand;pCommand-Execute(NULL, NULL,adCmdText);pConnection-Close();return true;catch(_com_error e)std:cout 数据库操作失败! ;std:cout e.ErrorMessage() Close();return false;return true;static bool getDataRecord(_ConnectionPtr& pConnection, const string& command, string& err, map& item, const string* Collect, int n)_RecordsetPtr pRecordset;pRecordset.CreateInstance(_uuidof(Recordset);try pRecordset-Open(command.c_str(), pConnection.GetInterfacePtr(), / 获取库接库的IDispatch指针adOpenDynamic,adLockOptimistic,adCmdText);catch(_com_error *e)err = (_bstr_t)e-ErrorMessage();return false;if (pRecordset = NULL)err = *数据为空!*;return false;tryif(!pRecordset-BOF)pRecordset-MoveFirst();elseerr = *数据为空!*;return false;_variant_t var;for (int i = 0; i GetCollect(Collecti.c_str();if (var.vt != VT_NULL)itemCollecti = _com_util:ConvertBSTRToString(_bstr_t)var);else itemCollecti = ;catch(_com_error *e)err = (_bstr_t)e-ErrorMessage();return false; pRecordset-Close();pRecordset = NULL;return true;static bool getDataRecord(_ConnectionPtr& pConnection, const string& command, string& err, vectormap & items, const string* Collect, int n)_RecordsetPtr pRecordset;pRecordset.CreateInstance(_uuidof(Recordset);try pRecordset-Open(command.c_str(), pConnection.GetInterfacePtr(), / 获取库接库的IDispatch指针adOpenDynamic,adLockOptimistic,adCmdText);catch(_com_error *e)err = (_bstr_t)e-ErrorMessage();return false;if (pRecordset = NULL)err = *数据为空!*;return false;tryif(!pRecordset-BOF)pRecordset-MoveFirst();elseerr = *数据为空!*;return false;_variant_t var;while(!pRecordset-adoEOF)map item;for (int i = 0; i GetCollect(Collecti.c_str();if (var.vt != VT_NULL)itemCollecti = _com_util:ConvertBSTRToString(_bstr_t)var);else itemCollecti = ;items.push_back(item);pRecordset-MoveNext();catch(_com_error *e)err = (_bstr_t)e-ErrorMessage();return false; pRecordset-Close();pRecordset = NULL;return true;#endif第九章 主程序结构#ifndef UERMEDOL_H#define UERMEDOL_H#include #include #include User.h#include LAdmin.h#include Book.h#include Worker.h#include BookReader.husing namespace std;extern enum StatueEXIT, OFFLOGIN;extern inline void fresh();Statue AdminModel(LAdmin* user);/执行管理员模式并返回下一个操作Statue ReaderMedol(BookReader* reader);/执行读者模式并返回下一个操作Statue WorkerMedol(Worker* worker);/执行工作人员模式并返回下一个操作int LoginModel();bool Login(User* user);int LoginModel()LabelStartLogin:fresh();cout 欢迎使用图书管理系统 endl;cout - endl;cout 请选择登陆模式: endl 1) 读者登陆 endl 2) 管理员登陆 endl 3) 工作人员登陆 endl 4) 退出图书管理系统 endl choice;if (!(choice = 1 & choice =4)cout endl *您输入的选择有误!*;system(pause);goto LabelStartLogin;return choice;Statue AdminModel(LAdmin* admin)fresh();cout 欢迎登陆图书管理系统(管理员模式) endl - endl 1) 添加用户 endl 2) 删除用户 endl 3) 查询图书 endl 4) 添加图书 endl 5) 删除图书 endl 6) 查看所有图书 endl 7) 查看所有用户 endl 8) 注销登录 endl 9) 退出系统 endl choice;if (choice = 1)/添加用户LabelAddUser:if (admin-AddMember()int _choice;cout _choice;if (_choice = 1) goto LabelAddUser;else AdminModel(admin);else if (choice = 2)/删除用户int _choice;string no;User* todelete = NULL;LabelDeleteUser:cout _choice;if (!(_choice = 1 & _choice = 3)cout 您的输入有误! endl;system(pause);goto LabelDeleteUser;elsecout no;if (_choice = 1) todelete = new LAdmin(no);else if (_choice = 2) todelete = new BookReader(no);else if (_choice = 3) todelete = new Worker(no);admin-deleteMember(todelete, todelete-getType();if (todelete != NULL) delete todelete;cout _choice;if (_choice = 1) goto LabelDeleteUser;else AdminModel(admin);else if (choice = 3)string bno;LabelSearchBook:admin-searchBook();int _choice;cout _choice;if (_choice = 1) goto LabelSearchBook;else AdminModel(admin);else if (choice =4)LabelAddBook:admin-AddBook();cout _choice;if (_choice = 1) goto LabelAddBook;else AdminModel(admin);else if (choice = 5)/删除图书string no;LabelDeleteBook:cout no;admin-DeleteBook(&Book(no);cout _choice;if (_choice = 1) goto LabelDeleteBook;else AdminModel(admin);else if (choice = 6)/查询所有图书admin-showAllBooks();else if (choice = 7)/查询所有用户admin-showAllMembers();else if (choice = 8)/注销用户return OFFLOGIN;else if (choice = 9) return EXIT;/退出系统系统else/错误选择重新开始cout *您输入的选择有误!* endl;system(pause);AdminModel(admin);cout endl choice;switch(choice)case 2:return OFFLOGIN;break;case 3:return EXIT;break;default:AdminModel(admin);break;return OFFLOGIN;Statue ReaderMedol(BookReader* reader)fresh();cout 欢迎登陆图书管理系统(读者模式) endl - endl 1) 查询图书 endl 2) 借阅信息 endl 3) 修改密码 endl 4) 注销登录 endl 5) 退出系统 endl choice;if (choice = 1)/查询图书int _choice;LabelSearchBook:reader-searchBook();cout _choice;if (_choice = 1) goto LabelSearchBook;else ReaderMedol(reader);else if (choice = 2)/显示信息reader-showInfo();system(pause);ReaderMedol(reader);else if (choice = 3)/修改密码LabelRePassWord:if(reader-resetPassWord()system(pause);ReaderMedol(reader);elseint _choice;cout _choice;if (_choice = 1) goto LabelRePassWord;else ReaderMedol(reader);else if (choice = 4) return OFFLOGIN;else if (choice = 5) return EXIT;else ReaderMedol(reader);return OFFLOGIN;Statue WorkerMedol(Worker* worker)fresh();cout 欢迎登陆图书管理系统(工作人员模式) endl - endl 1) 查询图书 endl 2) 查询读者 endl 3) 借书模式 endl 4) 还书模式 endl 5) 注销登录 endl 6) 退出系统 endl choice;if (choice = 1)/查询图书int _choice;LabelSearchBook:worker-searchBoo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行招聘测试题及答案
- 银行员工招聘试题及答案
- 银行业笔试题库及答案
- 保洁专业试题及答案
- 机械专业试题及答案
- 湖北省武汉市部分学校2026届高三上学期九月调研考试化学(含答案)
- 河北省衡水市桃城区2025-2026学年高二上学期暑假开学考试地理试卷
- 安徽省九师联盟2026届高三9月开学联考物理(含答案)
- 电力电子专业试题及答案
- 项目管理专业试题及答案
- 专业技术职务聘任呈报表(初级,双面打印)
- 肉牛养殖屠宰深加工项目建议书
- GB/T 40733-2021焊缝无损检测超声检测自动相控阵超声技术的应用
- 物业项目服务进度保证措施
- GB/T 18690.2-2017农业灌溉设备微灌用过滤器第2部分:网式过滤器和叠片式过滤器
- 河北省特种设备检验收费标准
- 集成电路技术导论课件
- 交管12123学法减分试题库带答案
- 培育和践行社会主义核心价值观的课件
- 交通标志牌工程施工组织设计(标准版)
- 全区建设工程质量检测人员岗位考试考核实施细则
评论
0/150
提交评论