目录
题目: ........................................................................................................................................ 1
1.需求分析 ......................................................................................................................... 1 2.概要设计 ......................................................................................................................... 1 3.详细设计 ......................................................................................................................... 2 4.编码 ................................................................................................................................. 2 5.调试分析 ......................................................................................................................... 5 6.测试结果及运行效果 ..................................................................................................... 5 7.系统开发所用到的技术 ................................................................................................. 7 参考文献 .................................................................................................................................... 8 附录 全部代码 .......................................................................................................................... 9
题目:
图书管理系统分析与设计
1.需求分析
随着互联网的爆炸性发展,人们越来越习惯于利用网络来实现所需的服务,网络已深深影响到人们生活的各个方面。另外,传统的图书馆不能满足一部分现代人的需要,而电子阅览室,由于其不受时间与空间的同时又具有传统图书馆的大部分功能,能够满足各类用户的常规与特殊需求,而且其方便快捷,实现技术又比较成熟,因此受到当代人的喜爱。该系统主要分为两部分:读者部分和管理员部分。为了方便读者查找自己感兴趣的主题进行阅读,要将图书按照内容进行分类。读者可以按照类别进行查找,逐级浏览、可以查看自己的信息。本系统还可对用户的账号和书目的阅读权限进行管理。管理员需要给用户分配用户名和密码,及设定用户的级别,还为用户提供图书的排行榜让用户能知道那些图书受到大家的欢迎。
学校图书管理系统的开发主要要实现的目的有以下几个方面: (1)界面设计友好、美观。 (2)数据存储安全、可靠。 (3)信息分类清晰、准确。
(4)强大的查询功能,保证数据查询的灵活性。 (5)实现对图书借阅和归还过程的全程数据信息跟踪。
(6)提供图书借阅排行榜,为图书管理员提供了真实的数据信息。 (7)提供灵活、方便的权限设置功能,使整个系统的管理分工明确。 2.概要设计
(1)系统设置模块:添加删除管理员、设置管理员的权限、说明图书存放书架信息添加删除书架信息。
(2)读者管理模块:添加删除不同类型的读者及注明可借图书的数量、添加删除读者的档案。
(3)图书管理模块:添加删除不同类型的的图书及注明图书可借的天数库存数量、添加删除图书的档案。
(4)图书借还模块:可查询读者借阅和归还图书的信息及图书的现有库存量。 (5)系统查询模块:可根据不同的条件(条形码、书名、类别、作者、书架、出版社)查询读者需要的图书、读者可根据不同的条件(图书条形码、图书名称、读者编号、读者名字、到期时间)查询自己借阅图书信息。
(6)排行榜模块:可以让读者知道图书借阅的排行榜及读者借阅的排行榜。
1
3.详细设计
图书管理系统的流程是用户先输入自己的帐号密码及系统显示的验证码进入系统如有一项不符合则不能进入系统,成功登陆系统后系统根剧登陆的帐号信息从数据库中的数据进行对比判断是读者还是管理员,如果是读者则能进行信息查询,及修改自己的相关信息,查询到自己所需要的图书就能通过管理员进行借阅图书、归还图书也是通过管理员完成的。如果不是读者而是管理员,那管理员可以进行相关信息的查询、添加删除图书及读者的所有信息、设置相应的权限、为图书更新排行榜的信息、以及完成读者的图书借阅与归还。图书管理系统的系统流程图如图3-6所示。
图3-1系统流程图
4.编码
void main() //实现程序的主界面 {
char choice5;
int bookid,readerid; RDatabase ReaderDB;
2
图书信息 读者信息 图书归还 图书借阅 信息查询 登陆系统 显示信息 欢迎登陆 读者 Reader *r;
BDatabase BookDB; Book *b;
cout<<\"ttt 欢迎光临图书馆管理系统!\"< cout<<\"ttt** 1.图   书   信   息 **\"< switch (choice5)     { case \\'1\\': BookDB.bookdata();      break;     case \\'2\\': ReaderDB.readerdata();      break;     case \\'3\\': cout<<\"tttt借书操作\"< r=ReaderDB.queryid(readerid);                if(NULL==r) {//按编号查找是否有该读者 cout<<\"不存在该读者,不能借书!\"< b=BookDB.query1(bookid);                           if(b==NULL)        {//按编号查找是否有该图书 cout<<\"不存在该图书,不能借书!\"<                                        }  } } if(b->borrowbook()==0)    { cout<<\"该图书已借完,不能借书!\"< cout<<\"tttt还书操作\"< r=ReaderDB.queryid(readerid);   if(r==NULL)    { cout<<\"不存在该读者,不能还书\"< b=BookDB.query1(bookid);    if(b==NULL)    { cout<<\"不存在该图书,不能还书\"< r->retbook(b->getno());   break;   default:    break;   } 4 5.调试分析 根据开发图书管理系统的需求分析,本系统设计了三种用户,分别为系统管理员、教师和学生。 系统要求有系统管理员用户,我们设定系统管理员,当系统管理员使用帐户登录后,需要查看有关图书的一系列的信息,管理员可以通过系统导航菜单进入读者管理界面、图书管理界面、图书借还界面、系统查询界面、排行榜界面,在读者界面中,管理员添加和修改学生或教师信息、用户可以查看自己信息,在图书管理界面管理员可以添加和修改图书信息、用户可查看图书,在图书借还界面完成读者借书还书的操作,系统查询界面管理员可以查看借出去的图书信息及库存的信息、用户可以查找自己的所需的图书,排行榜界面主要是可以让用户知道哪些图书受到读者的喜爱。读者(老师和学生)使用读者帐号登陆系统后,可以查询自己所需要的图书的信息、也可以查询自己个人的基本信息及图书的借还信息,还能查看排行榜的信息。读者的借书和还书过程是通过管理员完成的。。调试过程中,可按照有关提示进行相关操作: 增加职工数据按“1”键;  删除职工数据按“2”键; 修改职工数据按“3”键; 查询职工数据按“4”键; 基础数据设置按“5”键; 数据存盘按“6”键; 数据装入按“7”键; 退出系统按“8”键。 6.测试结果及运行效果 1 、代码中运用了switch 语句调用各子函数,数字 1、2、3、4、5、6、0等七个数字代表不同的指令。 图6-1登陆界面 2 、读者信息功能如图 5 图6-2读者信息 3 、读者信息的新增功能如图 图6-3新增功能 4 、借书操作如图      图6-4借书操作 5、还书操作如图      图6-5还书操作 6 7.系统开发所用到的技术 1、C++  概述 C++语言是一种应用较广的面向对象的程序设计语言,使用它可以实现面向对象的程序设计。面向对象的设计与面向过程的设计是有很大区别的,面向对象的程序设计是在面向过程的程序设计的基础上一个质的飞跃。要学会面向对象的程序设计,首先要学会一种面向对象的语言,即要学会用VC编程,就要先有C++的基础,而学习C++语言首先要认识它面向对象的特性和实现面向对象的方法。 2、 C++程序结构的基本组成部分 预处理命令,C++提供了三类预处理命令:宏定义命令、文件包含命令、条件编译命令。 输入输出,C++程序中总是少不了输入和输出的语句,实现与程序内部的信息交流。特别是屏幕输出的功能,几乎每个程序都要用到,使用它把计算机的结果显示在屏幕上。 函数,C++的程序是由若干个文件组成的,每个文件又是由若干个函数组成,因此,可以认为C++的程序就是函数串,即由若干个函数组成,函数与函数之间是相对的,并且是并行的,函数之间可以调用。在组成一个程序的若干个函中,必须有一个main()。 语句,语句是组成程序的基本单元。函数是由若干条语句组成的。但是,空函数是没有语句的。语句是由单词组成,单词间用空格符分隔,C++程序中的语句又是以以分号结束。语句除了有表达式语句和空语句之外,还有复合语句、分支语句、循环语句和转向语句等若干类。 变量,多数程序都需要说明和使用变量。广义讲,对象包含了变量,即将变量也称为一种对象,狭义讲,将对象看作是类的实例,对象是指某个类的对象。 其他,除了以上讲述的5个部分以外,还有其他组成部分。例如,符号常量和注释信息也是程序的一部分。C++中都尽量把常量定义为符号常量,在C++的程序中出现的是符号常量,该符号常量代表着某个确定的常量值。  C++程序的实现 3、C++源程序的实现与其他高级语言源程序实现的原理是一样的。一般都要经过编辑、编译、运行。其中最要的是编译过程,C++是以编译方式实现的高级语言。C++程序的实现,必须要使用某种C++语言的编译器对程序进行编译。编译器的功能是将程序的源代码转换成为机器代码的形式,称为目标代码;然后,再使目标代码进行连接,生成可执行文件。该过程可分为三个子过程:预处理过程、编译过程(词法分析、语法分析、符号表、错误处理程序、生成目标代码)、连接过程。 8.课程设计总结 经过两个星期的设计和开发,学校图书管理系统基本开发完毕。其功能基本符合用户需求。对于数据的一致性的问题也通过程序进行了有效的解决。但是该系统还有许多不尽如人意的地方,在今后有待进一步改善。通过这次毕业设计真切地体会到毕业设计的目的并不止于自己单纯任务的完成,而在于学习新的知识并掌握具体的方法,如何具 7 体使用和具体应用你所学所用的语言。从而获得一种本领:就是融会贯通各种语言。回首整个开发设计过程,我学到了很多书本上学不到的东西。比如以前开发软件的时候,一般做的就是编码工作,实现比较简单的功能。但是这次毕业设计,我要负责图书管理系统的整个开发过程,包括系统可行性分析、系统需求分析、系统概要设计、系统详细设计等方面的工作。在每个设计阶段我都能学到一些新知识,对我的动手能力提高很大。在整个毕业设计过程中,我基本上完成了图书管理系统各个模块的功能,达到了毕业设计的要求。页面设计还有进一步改善的地方,我会在今后的学习工作中着重加强这方面的锻炼。 在以后的工作中,还会遇到很多类似的情况,此次设计为我以后的工作积累了很多宝贵的经验。这几个月中,从接到设计课题到具体设计再到完成系统开发,是一个不断地遇到问题与解决问题的过程。其中包括:分析各种需求、完善各种功能、增加必要环节、对各部分及整体进行检测与维护。当然仍存在许多问题不能解决地尽善尽美,还需不断地继续与探索。在结束设计的同时也感到了劳动的艰辛与劳动成果的来之不易,明白了毕业设计是给自己提供了一个锻炼、升华、提高、完善的机会。 参考文献 [1] [1] 谭浩强. C++面向对象程序设计.北京:清华大学出版社,2006 [2] 谭浩强. C++程序设计实践指导.北京:清华大学出版社,2005 [3] 刘玉英,张怡芳等. C++实验指导与课程设计。人民邮电出版社,2007 8 附录 全部代码 #include\"iostream.h\" #include\"conio.h\" #include\"fstream.h\" #include\"iomanip.h\"  #include\"string.h\" const int Maxr=100 ;//最多的读者数  const int Maxb=100; //最多的图书数 const int Maxbor=5; //每位读者最多借的书 class Book {//图书类,实现对图书的描述,图书的编号,书名,借出,还入等功能 private: int tag; //删除标记 1:已删 0:未删 int no; //图书编号 char name[20]; //书名          char author[20];//作者 char cbs[20]; //出版社 int onshelf; //是否再架 1:再架 2:已借  public:  Book(){;}  char *getname() {//获取书名    return name;  } 9 char *getauthorname()  {//获取作者名    return author; } char *getcbsname() {//获取出版社名     return cbs;  }  int getno() {//获取图书编号    return no;  } int gettag() {//获取删除标记     return tag;  } void setname(char na[])  {//设置书名 strcpy(name,na);  } void setonshelf(int oa)  { onshelf=oa; } void delbook() {//删除图书     tag=1; } void addbook(int n,char *na,char *aa,char *ca,int oa)  {//增加图书     tag=0;     no=n; 10 strcpy(name,na);    strcpy(author,aa);    strcpy(cbs,ca);    onshelf=oa;  } int borrowbook()  {//借书操作     if (onshelf>0)     {      onshelf--;     return 1;     }     return 0;  } void retbook() {//还书操作    onshelf++;  } void disp()  {//输出图书 cout< {//图书库类,实现对图书的维护,查找,删除等  private: int top; //图录指针 Book book[Maxb]; //图录 public:  BDatabase() {//构造函数,将book.txt读到book[]中     Book b; 11 top=-1; fstream file(\"book.txt\    while (1)     { file.read((char *)&b,sizeof(b));      if (!file)       break;      top++;      book[top]=b;     } file.close();  } void clear()  {//全删     top=-1;  } int addbook(int n,char *na,char *aa,char *ca,int oa)  {//增加图书 Book *p=query1(n);     if (NULL==p)     {      top++; book[top].addbook(n,na,aa,ca,oa);      return 1;     }     return 0;  } Book *query1(int bookid)  {//按编号查找图书     for(int i=0;i<=top;i++) if(book[i].getno()==bookid &&book[i].gettag()==0)      { return &book[i]; 12 } return NULL;  } Book *query2(char a[])  {//按书名查找图书    Book *e;    int r=0; for(int i=0;i<=top;i++) if(strcmp(book[i].getname(),a)==0 &&book[i].gettag()==0)      {       if(r==0) cout< cout<<\"找不到该书!\"< for(int i=0;i<=top;i++) if(strcmp(book[i].getauthorname(),a)==0 &&book[i].gettag()==0)      {       if(r==0) cout< 13 r++;      } if(r==0) cout<<\"找不到该书!\"< for (int i=0;i<=top;i++) if (strcmp(book[i].getcbsname(),a)==0 &&book[i].gettag()==0)     { if(r==0)cout< if(r==0) cout<<\"找不到该书!\"< for(int i=0;i<=top;i++)      if(book[i].gettag()==0)       book[i].disp();  } ~BDatabase() {//析构函数,将book[]写到book.txt文件中     fstream file(\"book.txt\    for(int i=0;i<=top;i++)      if(book[i].gettag()==0) file.write((char *)&book[i],sizeof(book[i]));      file.close();  }  }; void BDatabase::bookdata()  { char choice3;  char bname[40]; char auname[40]; char cname[40]; char ch; int choice4; int bookid; int bookod; 14 \"< cout<<\"nttt**图 书 信 息**n\"< case \\'1\\': cout<<\"请输入新书编号:\";      cin>>bookid; b=query1(bookid);      if(b!=NULL)      { cout<<\"该编号已经存在,不能添加!\"< cout<<\"请输入新书作者名:\";      cin>>auname; cout<<\"请输入新书出版社:\";      cin>>cname; cout<<\"请输入新书数量:\";      cin>>bookod; addbook(bookid,bname,auname,cname,bookod);     cout<<\"添加图书成功!\";     getch();      break;     case \\'2\\': cout<<\"请输入图书编号:\";      cin>>bookid; b=query1(bookid);      if(b==NULL)      { cout<<\"该图书不存在! \"< b->disp(); cout<<\"是否修改?( y/n ):\";     cin>>ch;     if(ch==\\'y\\')     { cout<<\"请输入新的书名:\";       cin>>bname; cout<<\"请输入新的作者:\";      cin>>auname; cout<<\"请输入新书出版社:\"; cin>>cname; cout<<\"请输入新的存量:\";       cin>>bookod; b->setname(bname); b->setonshelf(bookod);      } cout<<\"修改图书成功!\";     getch();        break; case \\'3\\': cout<<\"请输入图书编号:\";      cin>>bookid; b=query1(bookid);      if(b==NULL)      { cout<<\"该图书不存在,无法删除!\"< cout<<\"删除成功!\";     getch();     break; case \\'4\\': cout<<\"ttt** 1.按图书编号查找 **\"< 16 case 1: cout<<\"请输入图书编号:\";       cin>>bookid; b=query1(bookid);      if(b==NULL)       { cout<<\"该图书不存在!\";       break;       } cout< cout<<\"请输入图书书名:\";       cin>>bname; b=query2(bname);      break;     case 3: cout<<\"请输入图书作者:\";       cin>>auname; b=query3(auname);      break;     case 4: cout<<\"请输入图书出版社:\";       cin>>cname; b=query4(cname);      break;     case 0:       break;     } break;     case \\'5\\': cout< break;      default:       break;     }  }  } class Reader {//读者的信息描述  private: int tag; //删除标记 1表示已删 0表示未删  int no; //读者编号 char name[10]; //读者姓名 int borbook[Maxbor]; //所借图书  public:  Reader() { ; } char *getname()  {//获取姓名 return name; } int gettag()  {//获取删除标记     return tag;  } int getno()  {//获取读者编号     return no;  } void setname(char na[])  {//设置姓名 strcpy(name,na);  } void delbook() {//设置删除标记 1:已删 0:未删     tag=1;  } void addreader(int n,char *na)  {//增加读者     tag=0; 18 no=n; strcpy(name,na); for(int i=0;i for(int i=0;i borbook[i]=bookid;      return ;      }     }  } int retbook(int bookid)  {//还书操作 for(int i=0;i borbook[i]=0; cout<<\"还书成功!\"< cout< 19 { have=1; cout<<\"[\"< cout<<\"t     还未借书\"< {//读者类库,实现建立读者的个人资料  private: int top; //读者记录指针 Reader read[Maxr]; //读者记录  public:  RDatabase() {//构造函数,将reader.txt读到read[]中     Reader s;     top=-1; fstream file(\"reader.txt\打开一个输入文件    while (1)     { file.read((char *)&s,sizeof(s));      if (!file)      break;      top++; read[top]=s;     } file.close(); //关闭 reader.txt 文件 } void clear() {//删除所有读者信息     top=-1;  } int addreader(int n,char *na) 20 {//添加读者时先查找是否存在     Reader *p=queryid(n);     if (p==NULL)    { top++; read[top].addreader(n,na);      return 1;     }    else cout<<\"该编号已经存在!\";    return 0;  } Reader *queryid(int readerid)  {//按读者编号查找 for (int i=0;i<=top;i++) if (read[i].getno()==readerid&&read[i].gettag()==0)      { return &read[i];      } return NULL; } Reader *queryname(char readername[10])                        {//按读者姓名查找 for (int i=0;i<=top;i++) if (strcmp(read[i].getname(),readername)==0 && read[i].gettag()==0)      { return &read[i];      } return NULL; }                                                              void disp() {//输出所有读者信息 for(int i=0;i<=top;i++)     read[i].disp();  } void readerdata(); //读者库信息 ~RDatabase() {//析构函数,将read[]写到reader.txt文件中 21 fstream file(\"reader.txt\   for (int i=0;i<=top;i++)      if (read[i].gettag()==0) file.write((char *)&read[i],sizeof(read[i]));      file.close();  }  }; void RDatabase::readerdata()  { char choice1;  char rname[20];  int readerid; char readername[10]; int choice2;  Reader *r; while(choice1!=\\'0\\') { cout<<\"nttt** 读 者 信 息 **n\"< case \\'1\\': cout<<\"请输入读者编号:\";      cin>>readerid; cout<<\"请输入读者姓名:\";      cin>>rname; addreader(readerid,rname); cout<<\"添加读者成功!\"< r=queryid(readerid);      if(r==NULL)      { cout<<\"该读者不存在! \"< break;      } cout<<\"请输入新的姓名:\";      cin>>rname; r->setname(rname); cout<<\"修改读者成功!\"< r=queryid(readerid);      if(r==NULL)      { cout<<\"该读者不存在!\" << endl;       break;      } r->delbook(); cout<<\"删除成功!\"< case 1: cout<<\"请输入读者编号:\";       cin>>readerid; r=queryid(readerid);       if(r==NULL)       { cout<<\"该读者不存在!\"<< endl;        break;       } cout< cout<<\"请输入读者姓名:\";        cin>>readername; r=queryname(readername);       if(r==NULL)       { 23 cout<<\"该读者不存在!\"< break; case \\'5\\': cout< char choice5; int bookid,readerid;  RDatabase ReaderDB;  Reader *r; BDatabase BookDB;  Book *b; cout<<\"ttt 欢迎光临图书馆管理系统!\"< cout<<\"ttt** 1.图   书   信   息 **\"< cout<<\"ttt** 0.退             出 **\"< switch (choice5)   { case \\'1\\': BookDB.bookdata();    break;   case \\'2\\': ReaderDB.readerdata();    break;   case \\'3\\': cout<<\"tttt借书操作\"< r=ReaderDB.queryid(readerid);              if(NULL==r) {//按编号查找是否有该读者 cout<<\"不存在该读者,不能借书!\"< b=BookDB.query1(bookid);                         if(b==NULL)      {//按编号查找是否有该图书 cout<<\"不存在该图书,不能借书!\"< cout<<\"该图书已借完,不能借书!\"< cout<<\"tttt还书操作\"<                  }  } cout<<\"请输入还书读者编号:\";    cin>>readerid; r=ReaderDB.queryid(readerid);   if(r==NULL)    { cout<<\"不存在该读者,不能还书\"< b=BookDB.query1(bookid);    if(b==NULL)    { cout<<\"不存在该图书,不能还书\"< r->retbook(b->getno());   break;   default:    break;   } 26              
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务