首页 > 编程资源分享区 > C/C++源代码共享 > C语言图书管理系统分析和源代码(上)
2006
09-28

C语言图书管理系统分析和源代码(上)

课程设计报告
题目:小型图书管理系统
班级:00090B5班
组别:第一组
组长:李俊杰        学号:28
组员:张斌          学号:31
      郭绍坤        学号:15
      孙岳          学号:13
      韩晓颖        学号:39
完成日期:2002年7月10日


一、需求分析:
1、程序的输入:只需按系统提示输入整型数字或英文字母即可。每次数据的输入均以回车符作为结束标志。
2、程序的输出:每一项数据输出均有汉字的提示,输出格式均为整型或字符串。
3、程序的系统功能:
(1)、图书库系统管理;
(2)、借阅者信息的管理;
(3)、日常借书还书操作;
(4)、根据需要提供对图书所需的查询方式。
4、测试数据(后附)。


二、概要设计:
1:本系统包括两个抽象数据:图书库链表和借书者链表。
(1)定义图书链表类型为:
ADT  Abook
数据对象 D={bi|bi=Booktype,i=1……n  n>=o}
 数据关系 R={<bi-1,bi>|(bi-1,bi)=D,i=2……n}
基本操作:
  Insert(n)
   操作结果:建立一个长度为n的链表或插入n个新结点。
  Del(n)
        操作结果:从已建立链表中删除n个结点。
Print( )
 操作结果:输出已建立链表。
Search( )
 操作结果:按要求查找并输出已建立链表中的结点。
Borrow( )
 操作结果:按要求改变已建立链表中某一结点的相关信息 。
return( )
操作结果:按要求改变已建立链表中某一结点的相关信息 。
(2)定义图书链表类型为:
ADT Aborrow
  数据对象 D={ri|ri|borrowtype,i=1……n  n>=1}
  数据关系 R={<ri-1,ri>|ri-1,ri=D,i=2……n}
基本操作:
    creat(n) 
操作结果:建立一个长度为n的链表。
         Insert(n)
           操作结果:插入n个新结点到已建立链表中。
         Remove(n)
           操作结果:从已建立链表中删除n个结点。


2:主程序的流程:(见附图)


借      书 Lendbook ()
1、根据借阅者
Look_for _borrower()
2、根据书名
Look_for_name()
3、根据出版社
Look_for_press()
4、根据作者
Look_for_auther()
5、自定义查找
Look_for_word()



调入界面


还      书 Returnbook ()


 


 


查      询 Search ()    


 


1、新书入库
Insert ()
2、旧书删除
Del ()
3、查询库内藏书
Print ()


 


 


图书库管理 Kucaozuo ()


 



1、登记


2、注销



借阅者管理



退      出



三、详细设计:
1:图书类型
struct booktype
 {
  int booknumber;             /*书号*/
  char bookname[20];          /*书名*/
  char auther[20] ;            /*作者*/
  char press[50] ;             /*出版单位*/
  int price ;                  /*定价*/
  int pagenumber ;             /*页数*/
  int nownumber ;              /*当前册数*/
  time_t borrowtime;          /*借书时间*/
  time_t returntime;          /*还书时间*/
  char borrowernum;            /*借书人证号*/
  struct booktype *next;
 } *g_book_list;


2:借阅者类型:
struct borrowertype
{
 int cardnumber ;              /*借书证号*/
 char name[20] ;               /*姓名*/
 char sex[10] ;                /*性别*/
 char tel[10] ;                /*联系电话*/
 char unit[80] ;               /*工作单位*/
 int lendnumber ;              /*借书数目*/
 int booknumber;              /*所借书号*/
 struct borrowertype *next;
 struct borrowertype *prev;
}
四、调试分析
1在最初进行模块划分是未将借书人信息管理作为一个单独摸块,致使调试时无法明确管理结借书者信息,造成借书者链表混乱,重新分配后解决了这个问题
2 原先想进行中文书名及人命输入输出,但由于未能找到相关信息资料,无法完成该操作,最终放弃该设计
3 最初我们曾规定了一些变量以及结构体,但随着设计的进行深化,最初的结构体及变量无法满足需要,致使调试时出现不少混乱,后来我们重新规定了一下,解决了这些问题;
4 程序的串联我们采取了循环控制与选择结构相结合的结构很好地解决了系统长时间运行及循环执行命令的问题,使演示系统现实化。


五、测试结果:
1、 在DOS状态下,2、 执行library.exe文件,3、 进入系统操作界面。
4、 选择Manage of Book选项,5、 进行图书库管理操作。进入后根据提示信息可进行:1、新书入库2、删除旧书3、查询库存图书操作。
选择1:根据相应提示信息输入书号、书名、作者、出版单位、价格、页数,即可进行入库操作,并输出库内图书的资料和库存图书存量。按提示操作可进行循环操作。
输入数据如下:进行何种操作?1、新书入库2、删除旧书3、查询库存图书1
              是否进行新书入库操作?1、是2、否1
              请输入书号:00001
              请输入书名:Shujujiegou
              请输入作者:YanHuiming
              请输入出版社:TSINGHUACOMPUTER
              请输入价格:18
              请输入页数:216
              是否继续进行新书入库操作?1、是2、否 1
              请输入书号:00003
              请输入书名:Shujujiegotiji
              请输入作者:YanHuiming
              请输入出版社:TSINGHUACOMPUTER
              请输入价格:16
              请输入页数:256
              是否继续进行新书入库操作?1、是2、否 1
              请输入书号:00002
              请输入书名:Clanuage
              请输入作者:TanHaoqiang
              请输入出版社:TSINGHUACOMPUTER 
              请输入价格:19
              请输入页数:398
              是否继续进行新书入库操作?1、是2、否 1
              请输入书号:00004
              请输入书名:CollageEnglish
              请输入作者:MrWilliam
              请输入出版社:ZHEJIANGCOLLAGE
              请输入价格:49
              请输入页数:582
              是否继续进行新书入库操作?1、是2、否 2
              是否继续进行图书库管理操作?1、是2、否 2
              进行何种操作?1、新书入库2、删除旧书3、查询库存图书 3
              以下为库存图书:
              书号:00001书名:Shujujiegou 作者:YanHuiming出版社:TSINGHUACOMPUTER价格:18 页数:216
              书号:00002 书名:Clanuage作者:TanHaoqiang 出版社:TSINGHUACOMPUTER 价格:19 页数:398
              书号:00003 书名:Shujujiegoutiji 作者:YanHuiming 出版社:TSINGHUACOMPUTER 价格:16 页数:256
              书号:00004书名:CollageEnglish 作者:MrWilliam 出版社:ZHEJIANGCOLLAGE 价格:49 页数:582
              删除操作雷同。
选择2:根据相应提示信息输入要删除图书的书号,即可进行删除操作,并输出库内图书的资料和库存图书量。按提示操作可进行循环操作。
选择 3:输出库内图书的资料和库内图书存量。*/
退回界面 选择 manage of borrower 选项
退回界面  选择borrower选项,出现如下提示:
请输入借书证号:00012
请输入要借书书号:00002;
借书操作成功!
是否继续进行借书操作?1 是/2 否    1
请输入借书证号:001100
对不起!该借书证号不存在
借书操作失败!
是否继续进行借书操作?1 是//2否  2
退回界面 选择 Return book 选项,出现如下提示:
请输入还书者借书证号:00012
还书操作成功!
是否继续进行还书操作?1是/2 否  1
请输入还书者借书证号:001100
对不起借书证号不存在!
还书操作失败!
退回界面 选择 search 选项, 出现以下提示:
请选择你要查找的方式:
1,按书名查找;
2,按作者查找;
3,按出版单位查找;
4,按借阅者查找;
5,自定义查找;
6,退出。;
选择1
请输入您想要查找的书名,按回车结束.
Shujujiegou
该书的书号为:00001
 该书的书名为:Shujujiegou
    该书出版单位为: TSINGHUACOMPUTER
 该书作者为:Yanhuiming
 该书页数为:216
    该书定价为:18
该书当前册数为:1
如果库内没有这本书则输出
对不起,库内没有图书!
是否继续进行查找操作?1、是,2、否 2
是否继续进行查找操作?1、是,2、否 1
以下操作雷同。
是否继续进行查找操作?1、是,2、否 2
退回界面。   


六、用户使用说明书:
首先欢迎您使用本图书馆管理系统。本系统主要面向中、小型的图书馆的管理人员。
运行主程序后,您将能够看到一个带有欢迎界面的窗口,上面有您所能进行的操作,您可以在这里选择。
当选中相应菜单条的时候,文字会由白色变为蓝色,按下Enter(回车键)开始进行操作。
1 本程序的运行环境为纯dos操作系统,执行文件为library.exe.
2 借书:在菜单中选择Borrow项,按下Enter(回车键)进行借书操作。进入后按照提示操作,
  以Enter(回车键)作为结束。
3 还书:在菜单中选择Return项,按下Enter(回车键)进行还书操作。
4 查询:在菜单中选择Search项,按下Enter(回车键)进行查找操作。
5 图书管理:在菜单中选择Manage of book项,按下Enter(回车键)进行书库操作。
按提示操作可进行循环操作。
5、借阅者管理:在菜单中选择Manage of borrow项,按下Enter(回车键)进行借阅者资料库操作。
6、退出:在菜单中选择Exit项,按下Enter(回车键)退出本系统。另外您可以在任何图形界面下按ALT_X键或ESC键退出系统。
(附)源程序:
struct booktype
 {
  int booknumber;             /*书号*/
  char bookname[20];          /*书名*/
  char auther[20] ;            /*作者*/
  char press[50] ;             /*出版单位*/
  int price ;                  /*定价*/
  int pagenumber ;             /*页数*/
  int nownumber ;              /*当前册数*/
  time_t borrowtime;          /*借书时间*/
  time_t returntime;          /*还书时间*/
  char borrowernum;            /*借书人证号*/
  struct booktype *next;
 } *g_book_list;
struct borrowertype
{
 int cardnumber ;              /*借书证号*/
 char name[20] ;               /*姓名*/
 char sex[10] ;                /*性别*/
 char tel[10] ;                /*联系电话*/
 char unit[80] ;               /*工作单位*/
 int lendnumber ;              /*借书数目*/
 int booknumber;              /*所借书号*/
 struct borrowertype *next;
 struct borrowertype *prev;
} *g_borrower_list;
int m;
 struct k
   { int number;
     char name[16];
   struct k *new;
   } k;



void print(head)/*输出库存资料*/
struct booktype *head;
{struct booktype *p;
 printf(“以下为库存图书:\n”);
 p=head;
 if(head!=NULL)
  {do
   {printf(“书号:%d”,p->booknumber);
    printf(“书名:%s”,p->bookname);
    printf(“作者:%s”,p->auther);
    printf(“出版单位:%s”,p->press);
    printf(“价格:%d”,p->price);
    printf(“页数:%d\n”,p->pagenumber);
    p=p->next;
    }while (p!=NULL);
   }
 else printf(“库内没有图书!\n”);
}



struct booktype *del(head,num)/*删除旧书*/
long num;
struct booktype *head;
{struct booktype *p1,*p2;
 if(head==NULL)
 {printf(“库内没有图书,无法进行删除操作!\n”);
  goto end;
 }
 p1=head;
 while(num!=p1->booknumber&&p1->next!=NUL L)
 {p2=p1;
  p1=p1->next;
 }
 if(num==p1->booknumber)
 {if(p1==head)
    head=p1->next;
  else
   {p2->next=p1->next;
    m=m-1;
   }
 }
 else
  printf(“库中没有该图书!\n”);
 end:
return(head);
}


struct booktype *insert(head,newbook)/*新书入库操作*/
struct booktype *newbook,*head;
{struct booktype *p0,*p1,*p2;
  p1=head;
  p0=newbook;
  if(head==NULL)
   {head=p0;p0->next=NULL;}
  else
   {while((p0->booknumber>p1->booknumber)&&(p1 ->next!=NULL))
    {p2=p1;p1=p1->next;}
     if(p0->booknumber<p1->booknumber)
     {if(head==p1)
       head=p0;
      else
 {p2->next=p0;p0->next=p1;}}
     else
     {p1->next=p0;p0->next=NULL;}}


m=m+1;
return(head);
}


kucaozuo (head) /*书库管理*/
struct booktype *head;
{struct booktype *book;
 long del_num;
 int u,v,w,x,y,z;
 head=NULL;
 do
 {printf(“进行何种操作?1.新书入库2.旧书删除3.查询库内图书\n”);
  scanf(“%d”,&v);
  if(v==1)
  {printf(“是否进行新书入库操作?1.是2.否\n”);
   scanf(“%d”,&w);
   if(w==1)
   {do
    {book=(struct booktype *)malloc(LEN);
     printf(“请输入新书数据:\n”);
     printf(“请输入书号:”);
     scanf(“%d”,&book->booknumber);
     printf(“请输入书名:”);
     scanf(“%s”,&book->bookname);
     printf(“请输入作者:”);
     scanf(“%s”,&book->auther);
     printf(“请输入出版单位:”);
     scanf(“%s”,&book->press);
     printf(“请输入图书价格:”);
     scanf(“%d”,&book->price);
     printf(“请输入页数:”);
     scanf(“%d”,&book->pagenumber);
     head=insert(head,book);
     print(head);
     printf(“是否继续进行新书入库操作?1.是2.否\n”);
     scanf(“%d”,&x);
    }while(x==1);
   }
  }
  else
  {if (v==2)
   {printf(“是否进行删除操作?1.是2.否\n”);
    scanf(“%d”,&y);
    if(y==1)
    {do
     {printf(“请输入要删除的书号:\n”);
      scanf(“%ld”,&del_num);
      head=del(head,del_num);
      print(head);
      printf(“是否继续进行删除操作?1.是2.否\n”);
      scanf(“%d”,&z);
     }while(z==1);
    }
   }
  else
  {printf(“库内图书资料:\n”);
   print(head);
   printf(“库内图书数目为:%d\n”,m);
  }
 }
 printf(“是否继续进行书库管理操作?1.是2.否\n”);
 scanf(“%d”,&u);
 }while(u==1);
 return(head);
}
/*********************************************************** *************************/


C语言图书管理系统分析和源代码(上)》有 3 条评论

  1. yangchun88 说:

    下半部分在就好了

     

  2. jcslt 说:

    虽然一头雾水,但支持了

  3. nanyang 说:

    bucuo

     
     

留下一个回复