教育资源为主的文档平台

当前位置: 查字典文档网> 所有文档分类> 人文社科> 社会学> 课题实验报告2

课题实验报告2

上传者:唐玛丽
|
上传时间:2017-06-06
|
次下载

课题实验报告2

  目 录

  1 课题需求描述 ...................................................................................... 2

  1.1课题题目 2

  1.2需求分析 2

  2 总体功能与数据结构设计 .................................................................. 3

  2.1 总体功能设计 3

  2.2 数据结构设计 4

  3 算法设计和程序设计 .......................................................................... 4

  3.1算法设计 5

  3.2程序设计 5

  3.3流程图 20

  4 调试与测试 ........................................................................................ 21

  5 设计总结 ............................................................................................ 21

  1

  1 课题需求描述

  1.1课题题目

  图书借阅管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。

  编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、到期书催还等智能化管理过程。图书管理者只需略懂电脑知识就可以简易的操作该图书借阅管理系统。

  1.2需求分析

  1.2.1系统需求分析

  图书借阅管理系统主要两大功能:

  (1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书);

  (2)会员管理(增加会员、查询会员、删除会员、借书信息);

  要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。解决了这个问题后就是何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。解决了这两个问题,剩下的工作就简单了。只需按链表的操作就可以了。

  1.2.1.1功能要求

  在图书借阅管理程序中须实现以下功能: (1)图书修改功能:能对图书借阅系统存储的信息进行修改。提供两种修改方式,如按照图书编号修改、按照书名修改。图书编号是图书记录的自然顺序编号。(2)图书删除功能:能对图书借阅系统的图书信息进行删除。删除时以记录为单位,能一次删除一条记录。 (3)借书功能:能对借出的图书作记录信息,能一次借出一本图书。 (4)还书功能:能将被借出的图书信息还原,能一次借出一本图书。 (5)保存功能:能将记录保存在任何自定义的文件中,如保存在:c:books 、c:lenders。 (6)通信录管理结束后,能够正常退出图书借阅管理程序。

  2

  1.2.1.2 技术要求

  (1)每个借阅者记录至少包括如下信息:姓名、学号、姓别等。每本图书记录至少包括如下信息:编号、书名、作者、价格等。

  (2)图书、借阅者信息以磁盘文件的形式存储,存储位置、文件名、文件格式由设计者确定。

  (3)对于图书借阅系统功能中数据输入、显示、查询、修改、删除、保存等功能,要求编写功能独立的函数或主控函数予以实现,其所属的各项功能尽量由独立的函数实现。

  (4)以菜单方式实现功能选择控制。

  (5)本图书借阅管理程序能够实现100条记录的管理。

  1.2.2 方案分析

  此题是设计一个图书借阅管理系统,根据需要应包含图书管理和会员管理。其中对图书和会员的增加、查询和删除都是基本操作。在图书管理中对图书的借阅和归还是重点,这两个操作也是整个系统关键。在会员管理中增加了会员借书信息的查询和对到期书的催还信息。实现这些操作的关键在于建立的两个带头结点的单链,分别用于存储图书和会员的基本信息。在这两个链表之间还应建立起相互的联系,便于查询的操作的实现。另外,在美观方面,需要设计一个操作界面供用户选择使用。

  2 总体功能与数据结构设计

  2.1 总体功能设计

  1. 能够存储一定量的图书信息,并方便有效的进行相应的书籍操作和管理,这主要有:

  (1)、图书信息的录入、删除及修改。

  (2)、图书信息的多关键子检索查询。

  (3)、图书出借、返回及超时惩罚等。

  2. 能对一定数量的读者、管理员进行相应的信息存储与管理,包括:

  (1)、读者信息的登陆,删除及修改。

  (2)、管理员信息的增加,删除及修改。

  3

  (3)、读者资料的统计与查询等。

  3.能够提供一定安全机制,提供数据信息授权访问,防止随意删改、查询。

  (1)、安全性要求

  系统安全性要求体现在数据库安全性、信息安全性和系统平台的安全性等方面。安全性先通过视图机制,不同的用户只能访问系统授权的视图,这样可提供系统数据一定程度上的安全性,再通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作来提高数据库的安全性;系统平台的安全性体现在操作系统的安全性、计算机系统的安全性和网络体系的安全性等方面。

  (2)、完整性要求

  系统完整性要求系统中数据的正确性以及相容性。可通过建立主、外键,使用check约束,或者通过使用触发器和级联更新。

  对查询、统计的结果能够列表显示。

  核心算法:Floyd算法(弗洛伊德算法-每一对顶点之间的最短路径)

  输入数据:单位个数,各单位名称,距离,频度.

  输出数据:路径长度,最佳单位地址名称.

  2.2 数据结构设计

  对查询、统计的结果能够列表显示。

  核心算法:Floyd算法(弗洛伊德算法-每一对顶点之间的最短路径)

  输入数据:单位个数,各单位名称,距离,频度.

  输出数据:路径长度,最佳单位地址名称.

  采用模块化的算法实现。

  3 算法设计和程序设计

  第一步,让所有路径加上中间顶点1,取A[i][j]与A[i][1]+A[1][j]中较小的值作A[i][j]的新值,完成后得到A(1),如此进行下去,当第k步完成后,A(k)[i][j]表示从i到就且路径上的中间顶点的路径的序号小于或等于k的最短路径长度。当第n-1步完成后,得到A(n-1),A(n-1)即所求结果。A(n-1)[i][j]表示从i到j且路径上的中点顶点的序号小于或等于n-1的最短路径长度,即A(n-1)[i][j]表示从i到j的最短路径长度。

  4

  3.1算法设计

  如果超市是要选在某个单位,那么先用floyd算法得出各顶点间的最短距离

  /最小权值。

  假设顶点个数有n个,那么就得到n*n的一张表格,arcs(i,j)表示i单位到j

  单位的最短距离/最小权值 , 这张表格中和最小的那一行(假设为第t行),那么

  超市选在t单位处就是最优解

  3.2程序设计

  #include iostream

  3.2.1 图书信息类 Book 声明

  class Book

  {

  public:

  Book();

  // 默认构造函数

  Book(long _bno, char *_name, bool _status, long _bin, long _bout = 0, long _btotal = 0);//

  带参数的构造函数

  Book(const Book // 拷贝构造函数

  ~Book();

  // 析构函数

  Book operator=(const Book // 赋值运算符重载函数

  void borrow(long _bno); // 图书借阅

  void giveBack(long _bno); // 图书归还

  long getBin() const; // 获取馆藏图书量

  long getBout() const; // 获取在外图书量

  long getBtotal() const; //

  获取借阅总量

  boolsearchBno(long _bno) const; //

  比较图书编号

  boolsearchName(char *_name) const; //

  比较图书名

  void printInfo() const; //

  打印图书信息

  5

  friend std::istream operator(std::istream is, Book // 提取

  运算符重载函数

  friend std::ostream operator(std::ostreamos, const Book // 插入

  运算符重载函数

  private:

  long bno; // 图书编号

  char *name; // 图书名

  bool status; // 在馆状态

  long bin; // 馆藏书量

  long bout; // 在外图书量

  long btotal; // 借阅总量

  };

  constint N = 100; //

  常量定义

  3.2.2管理图书信息类 Management 声明

  class Management

  {

  public:

  Management();

  // 默认构造函数

  Management(const Book _books[], int n); //

  带参数的构造函数

  void input(const char *file); //

  录入图书信息

  void deleteBook(long bno); // 删除图书信息

  void deleteBook(char *name); // 删除图书信息

  void insertBook(long bno, char *name, bool status, long bin, long bout, long btotal); // 增加

  图书信息

  void insertBook(const Book //

  增加图书信息

  void searchBook(long bno) const; //

  查询图书信息

  void searchBook(char *name) const; //

  查询图书信息

  6

  int main() { Management manage; char fileName[100]; long bno; char name[30]; bool status; long bin; long bout; long btotal; int option; while(true) { // 输出系统功能提示菜单 coutendl;

  7

  // // count; books[N]; // 图书信息管理类对象 // 存放文件名的字符数组 // 图书编号 // 图书名 // 在馆状态 // 馆藏图书量 // 在外图书量 // 借阅总量 // 系统功能菜单选项

  cout 图书管理系统

  cout================

  cout1. 录入图书信息

  cout2. 删除图书信息

  cout3. 增加图书信息

  cout4. 查询图书信息

  cout5. 图书借阅

  cout6. 图书归还

  cout7. 图书借阅量排序

  cout8. 统计在馆状态

  cout9. 图书信息保存

  cout0. 退出系统

  cout================

  cout请选择 (1-9, 0: 退出):

  cinoption; // 输入功能菜单选项

  switch(option)

  {

  case 1: // 录入图书信息

  cout请输入存放图书信息的文件名:

  cinfileName;

  manage.input(fileName);

  break;

  case 2: // 删除图书信息

  cout请输入图书编号:

  cin

  manage.deleteBook(bno);

  break;

  case 3: // 增加图书信息

  cout请输入图书编号、图书名、在馆状态(0/1)、馆藏图书量、在外图书量、借阅总量:

  cinbnonamestatusbinboutbtotal;

  manage.insertBook(bno, name, status, bin, bout, btotal);

  break;

  case 4: // 查询图书信息

  cout请输入图书编号:

  cin

  manage.searchBook(bno);

  break;

  case 5: // 图书借阅

  cout请输入图书编号、图书借阅量:

  cinbnobout;

  manage.borrowBook(bno, bout);

  8

  #include fstream

  using namespace std;

  3.2.4Book 类成员函数实现部分

  // 默认构造函数

  Book::Book()

  {

  bno = 0;

  name = NULL;

  status = false;

  bin = 0;

  bout = 0;

  btotal = 0;

  }

  9 // 统计在馆状态 // 图书信息保存

  // 带参数的构造函数

  Book::Book(long _bno, char *_name, bool _status, long _bin, long _bout, long _btotal) {

  bno = _bno;

  status = _status;

  bin = _bin;

  bout = _bout;

  btotal = _btotal;

  name =

  // 开辟堆空间

  strcpy(name,

  // 字符串拷贝

  }

  // 拷贝构造函数

  Book::Book(const Book book)

  {

  bno = book.bno;

  status = book.status;

  bin = book.bin;

  bout = book.bout;

  btotal = book.btotal;

  name =

  // 开辟堆空间

  strcpy(name,

  // 字符串拷贝

  }

  // 析构函数

  Book::~Book()

  {

  if(name!=NULL)

  delete

  // 释放堆空间

  }

  // 赋值运算符重载函数

  Book Book::operator=(const Book book)

  {

  if(name!=NULL)

  // 释放原有堆空间

  delete [] name;

  bno = book.bno;

  new char[strlen(_name)+1]; _name); new char[strlen(http://www.wendangwang.com)+1]; http://www.wendangwang.com); [] name; 10

  status = book.status;

  bin = book.bin;

  bout = book.bout;

  btotal = book.btotal;

  name = new char[strlen(http://www.wendangwang.com)+1]; // 重新开辟堆空间

  strcpy(name, http://www.wendangwang.com);

  return *this;

  }

  // 图书借阅

  void Book::borrow(long _bno)

  {

  bin -= _bno;

  bout += _bno;

  btotal += _bno;

  if(bin==0)

  status = false;

  }

  // 图书归还

  void Book::giveBack(long _bno)

  {

  bin += _bno;

  bout -= _bno;

  if(status==false)

  status = true;

  }

  // 获取馆藏图书量

  long Book::getBin() const

  {

  return bin;

  }

  // 获取在外图书量

  long Book::getBout() const

  {

  return bout;

  }

  // 获取借阅总量

  long Book::getBtotal() const

  {

  11

  returnbtotal;

  }

  // 比较图书编号

  bool Book::searchBno(long _bno) const

  {

  returnbno==_bno;

  }

  // 比较图书名

  bool Book::searchName(char *_name) const

  {

  returnstrcmp(name, _name)==0;

  }

  // 打印图书信息

  void Book::printInfo() const

  {

  coutbno (status?在馆:不在馆 btotalendl;

  }

  // 提取运算符重载函数

  istream operator(istream is, Book book)

  {

  char name[30];

  isbook.bnonamebook.statusbook.binbook.boutbook.btotal;

  if(http://www.wendangwang.com!=NULL)

  delete [] http://www.wendangwang.com;

  http://www.wendangwang.com = new char[strlen(name)+1];

  strcpy(http://www.wendangwang.com, name);

  return is;

  }

  // 插入运算符重载函数

  ostream operator(ostreamos, const Book book)

  {

  osbook.bno http://www.wendangwang.com book.status book.bin book.bout book.btotalendl;

  returnos;

  }

  3.2.5Management 类成员函数实现部分

  12

  // 默认构造函数

  Management::Management()

  {

  count = 0;

  }

  // 带参数的构造函数

  Management::Management(const Book _books[], int n) {

  count = n;

  for(int i=0; i ++i)

  books[i] = _books[i];

  }

  // 录入图书信息

  void Management::input(const char *file)

  {

  ifstreamifile(file);

  if(!ifile.fail())

  {

  ifilecount;

  for(int i=0; i ++i)

  {

  Book book;

  ifilebook;

  books[i] = book;

  }

  ifile.close();

  cout图书信息录入成功! }

  else

  {

  ifile.close();

  cout图书信息录入失败! }

  }

  // 删除图书信息

  void Management::deleteBook(long bno)

  {

  int entry = -1;

  for(int i=0; i ++i)

  if(books[i].searchBno(bno))

  {

  13

  void Management::insertBook(long bno, char *name, bool status, long bin, long bout, long btotal) {

  Book book(bno, name, status, bin, bout, btotal);

  books[count++] = book;

  cout增加图书信息成功!

  }

  void Management::insertBook(const Book book)

  {

  14

  cout未查找到相关图书信息! }

  // 图书借阅

  void Management::borrowBook(long bno, long bnum) {

  int entry = -1;

  for(int i=0; i ++i)

  if(books[i].searchBno(bno))

  {

  entry = i;

  break;

  15

  if(bnum=books[entry].getBin())

  {

  books[entry].borrow(bnum);

  cout借书成功!

  }

  else

  cout在馆图书量不足,无法借阅! }

  else

  cout图书借阅量不正确!

  }

  16

  cout未查找到相关图书信息!

  }

  void Management::returnBook(char *name, long bnum)

  {

  int entry = -1;

  for(int i=0; i ++i)

  if(books[i].searchName(name))

  {

  entry = i;

  break;

  }

  if(entry!=-1)

  {

  17

  for(int i=0; i ++i)

  {

  if(bnum[i]bnum[i+1])

  {

  longtmp = bnum[i];

  bnum[i] = bnum[i+1];

  bnum[i+1] = tmp;

  intitmp = index[i];

  index[i] = index[i+1];

  index[i+1] = itmp;

  }

  }

  18

  for(int i=0; i ++i)

  books[index[i]].printInfo();

  delete [] bnum;

  delete [] index;

  }

  // 统计在馆状态

  void Management::statistics() const

  {

  for(int i=0; i ++i)

  if(books[i].getBin()==0)

  books[i].printInfo();

  }

  // 图书信息保存

  void Management::save(const char *name) const {

  ofstreamofile(name);

  if(!ofile.fail())

  {

  ofilecountendl;

  for(int i=0; i ++i)

  ofilebooks[i];

  ofile.close();

  cout图书信息保存成功! }

  else

  {

  ofile.close();

  cout图书信息保存失败! }

  }

  19

  3.3流程图

  课题实验报告21

  20

  4 调试与测试

  5 设计总结

  这次基础强化训练的课程设计对于我们来说,有一定的难度。因为他要求我们较完整的去实现一个比较可行的程序。将其应用到实际的生活中去。我被分配到的题目是图书借阅系统的实现与设计。这个题目相对来说贴近生活,比较容易理解。但是设计一个较为完整的程序却不是这么简单的。

  首先我分析了相关的题目内容,并由此而进行了相关资料和书籍的查询工作然后才开始正式进行设计。一开始不知从何下手但后来分析了一下题目,并结合这学期所学的知识,

  课题实验报告22

  21

  再加上相关提示我决定用指针、链表和文件的内容来编写程序。图书管理主要就是有一些操作来完成,这些操作包括:新进图书基本信息的输入、图书基本信息的查询、对撤消图书信息的删除、为借书人办理注册、办理借书手续(非注册会员不能借书)、办理还书手续等等。我想用数据结构知识来实现函数:添加图书,图书查询,删除图书,增加会员,会员查询,删除会员,借阅图书,,归还图书,借书信息,到期书催还。最后编写退出系统的函数。

  在具体编写程序时考虑到图书的相关操作与会员基本相同,所以实际上只要编写前三个函数,后面的函数把相应变量改变就可以了。添加图书:考虑到图书的信息较多,所以用结构体对其定义。又考虑到图书量大,所以添加后要保存到文件中去。图书查询:用所学过的顺序查找法来写。删除图书:把保存到文件中的内容写到链表中去,用链表删除结点的方法来删除图书。我们所学过的指针这时正好用上。

  最后把各函数同主函数相连,用主函数调用它们,编写好好看的界面就可以了。 同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的。我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。

  最后,还要感谢我们实验指导老师寇老师的细心指导、热心帮助。路漫漫其修远兮,虽然本学期数据结构课程结束了,但仍觉得自己还有很多东西要学,我会在自己在以后的学习生活中不断努力、不断提高,争取更大的进步。

  22

版权声明:此文档由查字典文档网用户提供,如用于商业用途请与作者联系,查字典文档网保持最终解释权!

下载文档

热门试卷

2016年四川省内江市中考化学试卷
广西钦州市高新区2017届高三11月月考政治试卷
浙江省湖州市2016-2017学年高一上学期期中考试政治试卷
浙江省湖州市2016-2017学年高二上学期期中考试政治试卷
辽宁省铁岭市协作体2017届高三上学期第三次联考政治试卷
广西钦州市钦州港区2016-2017学年高二11月月考政治试卷
广西钦州市钦州港区2017届高三11月月考政治试卷
广西钦州市钦州港区2016-2017学年高一11月月考政治试卷
广西钦州市高新区2016-2017学年高二11月月考政治试卷
广西钦州市高新区2016-2017学年高一11月月考政治试卷
山东省滨州市三校2017届第一学期阶段测试初三英语试题
四川省成都七中2017届高三一诊模拟考试文科综合试卷
2017届普通高等学校招生全国统一考试模拟试题(附答案)
重庆市永川中学高2017级上期12月月考语文试题
江西宜春三中2017届高三第一学期第二次月考文科综合试题
内蒙古赤峰二中2017届高三上学期第三次月考英语试题
2017年六年级(上)数学期末考试卷
2017人教版小学英语三年级上期末笔试题
江苏省常州西藏民族中学2016-2017学年九年级思想品德第一学期第二次阶段测试试卷
重庆市九龙坡区七校2016-2017学年上期八年级素质测查(二)语文学科试题卷
江苏省无锡市钱桥中学2016年12月八年级语文阶段性测试卷
江苏省无锡市钱桥中学2016-2017学年七年级英语12月阶段检测试卷
山东省邹城市第八中学2016-2017学年八年级12月物理第4章试题(无答案)
【人教版】河北省2015-2016学年度九年级上期末语文试题卷(附答案)
四川省简阳市阳安中学2016年12月高二月考英语试卷
四川省成都龙泉中学高三上学期2016年12月月考试题文科综合能力测试
安徽省滁州中学2016—2017学年度第一学期12月月考​高三英语试卷
山东省武城县第二中学2016.12高一年级上学期第二次月考历史试题(必修一第四、五单元)
福建省四地六校联考2016-2017学年上学期第三次月考高三化学试卷
甘肃省武威第二十三中学2016—2017学年度八年级第一学期12月月考生物试卷

网友关注

2016公务员面试模拟题:改变“重涨不重跌”现象 切实保障农民利益
2016国家公务员考试行测真题:“最难”两道文科题
行测题库:行测每日一练判断推理练习题答案
2016上海市公务员考试申论真题(A卷)
2016上海公务员考试申论(B卷)作答要点
2016上海公务员考试行测考前冲刺模拟题答案
2016公务员面试模拟题:“阿里”打假
2016公务员面试模拟题:保护好祖国花朵
2016事业单位面试模拟题:创新发展市场环境
2016上海市公务员考试申论考前冲刺试卷 参考答案
行测题库:行测每日一练常识判断练习题答案
2016公务员面试模拟题:“狗占人座”
2016公务员面试模拟题:全面放开二孩政策
2015年3月3日上海市公务员面试真题
2016上海公务员考试行测真题部分答案解析(A卷)
行测题库:行测每日一练常识判断练习题
2016年3月22日上海公务员面试真题
2016公务员面试热点模拟题:网络公关
2015年2月28日上海市公务员面试题
2015年3月2日上海市公务员面试真题
行测题库:行测每日一练判断推理练习题
2016上海公务员考试行测考前冲刺模拟试卷
申论每周一练:城市内涝与地下管网建设
2016公务员面试模拟题:论规矩
2016年3月23日上海公务员面试真题
2015年3月2日上海公务员面试真题解析
2016公务员面试模拟题:下跪执法
2016上海公务员面试模拟题:“女性专用公交”是与非
2016上海公务员考试申论试卷特点分析:题量大变
2016公务员面试模拟题:飞机“选座收费”惹争议

网友关注视频

人教版历史八年级下册第一课《中华人民共和国成立》
青岛版教材五年级下册第四单元(走进军营——方向与位置)用数对确定位置(一等奖)
二年级下册数学第三课 搭一搭⚖⚖
苏科版数学 八年级下册 第八章第二节 可能性的大小
沪教版牛津小学英语(深圳用) 五年级下册 Unit 10
第五单元 民族艺术的瑰宝_16. 形形色色的民族乐器_第一课时(岭南版六年级上册)_T3751175
外研版八年级英语下学期 Module3
每天日常投篮练习第一天森哥打卡上脚 Nike PG 2 如何调整运球跳投手感?
冀教版小学数学二年级下册第二单元《有余数除法的竖式计算》
30.3 由不共线三点的坐标确定二次函数_第一课时(市一等奖)(冀教版九年级下册)_T144342
冀教版小学数学二年级下册第二周第2课时《我们的测量》宝丰街小学庞志荣.mp4
【部编】人教版语文七年级下册《泊秦淮》优质课教学视频+PPT课件+教案,广东省
外研版英语三起5年级下册(14版)Module3 Unit1
六年级英语下册上海牛津版教材讲解 U1单词
精品·同步课程 历史 八年级 上册 第15集 近代科学技术与思想文化
化学九年级下册全册同步 人教版 第25集 生活中常见的盐(二)
第4章 幂函数、指数函数和对数函数(下)_六 指数方程和对数方程_4.7 简单的指数方程_第一课时(沪教版高一下册)_T1566237
苏科版数学八年级下册9.2《中心对称和中心对称图形》
沪教版牛津小学英语(深圳用) 四年级下册 Unit 2
沪教版八年级下册数学练习册20.4(2)一次函数的应用2P8
【部编】人教版语文七年级下册《过松源晨炊漆公店(其五)》优质课教学视频+PPT课件+教案,江苏省
飞翔英语—冀教版(三起)英语三年级下册Lesson 2 Cats and Dogs
沪教版八年级下册数学练习册21.4(1)无理方程P18
沪教版牛津小学英语(深圳用) 四年级下册 Unit 3
冀教版小学数学二年级下册第二单元《有余数除法的整理与复习》
七年级英语下册 上海牛津版 Unit9
沪教版牛津小学英语(深圳用) 四年级下册 Unit 8
8 随形想象_第一课时(二等奖)(沪教版二年级上册)_T3786594
沪教版八年级下册数学练习册一次函数复习题B组(P11)
二年级下册数学第一课