程序设计专周”报告
实验题目:  模拟图书馆管理系统
班    级:         
学    号:        30号     
姓    名:           
指导教师:               
日    期:    19周一 ~ 周五   
一、题目模拟图书馆管理系统
    模拟图书管理系统:图书管理的基本业务包括对一本书的入库、清除、查询、借出、归还等,设书的内容至少包括书号、书名、作者、库存总量和现存量等。
、算法基本思想描述:
  将整个程序划分为五个模块,分别定义了五个函数来实现管理系统的功能,采用单链表的结构进行数据操作。
三、设计
1.数据结构的设计
typedef struct BookList
{  char num[10];
  char name[20];
  char author[20];
  int total;
  int leavings;
  struct BookList *next;
}Book;  
采用链表的结构来进行数据操作,一本书的数据包括:书号、书名、作者、库存总量、现存量以及指针区域.
2.算法的设计
(1)关键算法设计思路描述
    在构思图书馆管理系统的结构时,我将整个程序划分为五个模块,分别定义了五个函数来实现管理系统的功能,除此之外在对程序的界面设计上加入了一些动画效果.在数据结构上采用单链表的结构方式,这样在读取文件中数据的时候能够节省内存空间。
  设计主菜单时,用while(1)和switch()来实现功能的选择以及运行一项功能后返回主菜单。 
在整个程序中,统一采用了以输入0的方式返回或退出,并在模块有需要键盘输入地方加入了防错误输入的功能,防止输入错误导致程序错误运行,此功能采用判断输入值的ASCII码或字符串的比较.
入库模块:首先判断数据文件是否存在,如存在以追加的方式打开,如不存在以写入的方式打开.输入图书的具体数据(在输入过程中,如输入的书号为0则返回主菜单)、存盘,判断存盘成功则打印“成功添加”,如存盘失败打印“添加失败”.最后返回入起始界面(入库模块)。
清除模块:进入清除模块则将文件中的全部数据用单链表的结构读入内存,提示输入要删除的书号,在内存中寻并删除,删除后可以马上存盘或是直到全部删除完成后再选择操作,在防止操作后忘记存盘,在程序中加入了自动判断操作过的数据是否己经进行过存盘的功能。
查询模块:本模块分为三个子模块:以书号方式查询、以书名的方式查询、以作者的方式查询。前两个查询功能只要到符合条件的数据时就停止,以作者方式因为考虑到一个作者不止一本作品,所以对全部的数据进行查,并打印出所有符合条件的数据。如果未到则打印“没有到”,最后返回子功能模块起始,直到输入0返回上一级。
借出、还书模块:这两个功能的思路完全一样,不同的是对数据中的现存量的运算。两个功能都是先建立一个图书类型的数据指针,逐条将文件中的数据读入内存,并与输入的数据进
行比较,如果一致则先对内存中的数据进行操作,再将文件中的fp指针后退sizeof(Book)个字节,将内存中的经过修改过的数据写入文件.完成一条操作后,提示进行下一条操作,输入0时返回主菜单。
(2)程序结构及模块名称描述
  主程序
界面初始化
入 库
清 除
查 询
借 出
归 还
书号 查询
书名 查询
作者 查询
全部 列表
a )  void main()                  //主程序
b )  void s(long)           //时间延迟函数 
c )  void sta()            //界面初始效果
d )  void wel()            //界面初始效果
e )  void bookadd()        //入库
f )  void sa_ve(sqtype)       //清除函数中保存文件函数
g )  void del()            //清除
h )  void r()              //查询
j )  void s_1()            //查询功能中以书号方式查询
sizeof 指针k )  void s_2()            //以书名方式查询
l )  void s_3()            //以作者方式查询
m )  void readall()                //列出全部图书
n )  void borrow()          //借出
o )  void back()            //归还
p )  void bye()            //退出效果
(3)主要模块算法描述
/*添加*/
void bookadd()        /*添加图书*/
{
  FILE *fp; Book finger; char temp[10];
  fp=fopen(”blist.db",”rb");/*读方式打开文件*/
  if(fp==NULL)
      fp=fopen(”blist。db",”wb"); /*写方式打开文件*/
  else/*如果有书就添加*/
    {
      fclose(fp);
      fp=fopen(”blist.db","ab");/*追加方式打开文件*/
    }
  clrscr();
while(1)
{
  printf(”\n请输入数据:\n”);/*逐个输入新图书的资料*/
  printf("请输入书号(输入0结束添加):”);
  gets(temp);
  if(strcmp(temp,"0")) strcpy(finger.num,temp);
    else break;
  printf("请输入书名: ”);
  scanf(”%s”,finger.name);
  printf(”请输入书的作者: ");
  scanf(”%s",finger.author);
  printf(”请输入书的总数: ");
  scanf(”%d”,&finger。total);b=getchar();
  finger。al;
  finger。next=NULL;
  if(fwrite(&finger,sizeof(Book),1,fp))/*块写*/
      {
    printf("--——————--—-—-——-—--————----—-——-—---—---—————--—-———-----———-———-————----—--\n");
    printf(”己成功添加:\n书号:%s  书名:%s  作者:%s  库存总量:%d  现存量:%d\n”,finger。num,finger。name,finger。al,finger。leavings);
    printf(”--—--————-—------—-—---—--———-——-——-—-——---———-——-———----——--—-—----—---———-—”);
      }
    else printf(”对不起,数据写入文件错误!”);
  } 
  fclose(fp);
  clrscr();
/*删除*/
del()                                    /*删除功能函数*/
{    FILE *fp;Book *head,*p,*q,*temp;char a[10],s;int flag=0,flag2,flag3=0;
    fp=fopen("blist。db",”rb”);
    head=p=q=(Book*)malloc(sizeof(Book));
    fread(p,sizeof(Book),1,fp);
      while(!feof(fp))
            {    q=p;  p=(Book*)malloc(sizeof(Book));
                  fread(p,sizeof(Book),1,fp);  q—>next=p; 
            }
              p->next=NULL;
del_re:
        flag2=0; clrscr();
        gotoxy(1,3);textcolor(4);cprintf("提示:");
        textcolor(7);gotoxy(6,4);printf(”您可以逐次操作后存盘,也可以完成全部”);
        gotoxy(6,5);printf(”操作后退出时存盘,不进行存盘您所有删");gotoxy(6,6);printf("除操作对文件无效!");
        gotoxy(1,23);printf(”请输入要删除的书号(0退出,00存盘):");gets(a);
          if(!strcmp(a,”0")) goto del_end;
          else if(!strcmp(a,"00”))
                  { if(flag==0) {gotoxy(50,24);textcolor(4);cprintf(”您还未进行任何删除操作!");textcolor(7);getch();clreol
();goto del_re;}
                    else {flag3+=sa_ve(head);goto del_re;}
                  }
        p=head;
    while(p!=q—>next)
      { if(!strcmp(a,p-〉num))

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。