数据结构:图书管理系统(将下面的链式储存结构换位顺序表储存)

大学生新手,期末必须完成的课程设计,老师要求我们只用在网上寻找到代码,然后完全 完全理解他!  要求的是 索引表,链表,顺序表三种方式作出三个系统,我已经获得了索引表和链表,可是顺序表的实在找不到,我自己也打不出来,所以来这里求助了! 我将链表的代码发到这里,希望能有高手帮我改成顺序表! 谢谢!


#include<stdio.h> 

#include<string.h> 

#include<conio.h> 

#include<stdlib.h> 

#define N sizeof(struct book)

#define PT "%-5d   %10s   %6s   %6s   %8s   %3d \n",p->num,p->name,p->where,p->author,p->pub,p->count

struct  book  /*图书信息*/

{

   int num;      /*书号*/

   char name[10];    /*书名*/

   char where[10];   /*所在书库*/

   char author[15];      /*作者*/

   char pub[20];      /*出版社*/

   int  count;     /*数量*/

   struct book *next;

};

/*输出模块*/

void print(struct book *p0)

{

 struct book *p;

 p=p0->next;

 printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");

 printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");

    while(p!=NULL)

 {

  printf(PT);

     p=p->next;

 }

 getch();

}

/*输入模块*/

struct book *creat() 

{

 struct book *head,*p1,*p2;

 int i=0;

 head=p2=(struct book *)malloc(N);

 head->next=NULL;

    printf("\n\n\t\t录入图书信息");

 printf("\n\t---------------------------------------");

 while(1)

 { p1=(struct book *)malloc(N);

  printf("\n    请输入图书编号(书号为0结束): ");

  scanf("%d",&p1->num);

  if(p1->num!=0)

  {

   printf("\n\n书名  所在书库  作者  出版社  图书数量\n");

         scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count);

            p2->next=p1;

      p2=p1;

            i++;

  }

  else 

   break;

 }

 p2->next=NULL;

 free(p1);

 printf("\n\t\t----------------------------------------");

 printf("\n\t\t         %d  种书录入完毕",i);

 getch();

 return head;

}

/*查找模块*/

void find(struct book *p0)

{

 char name[10];

 int flag=1;

 struct book *p;

 p=p0->next;

 printf("请输入要查找的书名:\n");

 scanf("%s",name);

 for(p=p0;p;p=p->next)

     if(strcmp(p->name,name)==0)  

  {

   printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");

      printf(PT);

   flag=0;

      break;

  }

 if(flag)  printf("\n  暂无此图书信息\n");

 getch();

}

/*删除模块*/

void del(struct book *p0)

{

    char name[10];

 int flag=1;

 struct book *p;

 p=p0;

 printf("请输入要删除的书名:\n");

    scanf("%s",name);

    while(p!=NULL)

 {

  if(strcmp(p->name,name)==0)

  {

           p0->next=p->next;      /*后续节点连接到前驱节点之后*/

     free(p);

     printf("\t该书资料已删除.");

     flag=0;

     break;

  }

  p0=p;

  p=p->next;

 }

    if(flag)   printf("\n\t无此图书信息。");

 getch();

}

/*增加模块*/

void insert(struct book *p0)

{

   struct book *p;

   p=(struct book *)malloc(N);

   while(1)

 {

  printf("\n    请输入要增加的图书编号(书号为0 退出): ");

  scanf("%d",&p->num);

  if(p->num!=0)

  {

   if(p0->next!=NULL&&p0->next->num==p->num)  /*找到重号*/

   {

             p=p->next;

             free(p);

             printf("\t该书已存在");

   }

   else 

   {printf("\n\n书名  所在书库  作者  出版社  图书数量\n");

    scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count);

    p->next=p0->next;

             p0->next=p;

             printf("\t已成功插入.");

   }

  }

  else 

   break;

   }

   getch();

}

/*修改模块*/

void modify(struct book *p0)

{

 char name[10];

 int flag=1;

 int choice;

 struct book *p;

 p=p0->next;

 printf("请输入要修改的书名:\n");

 scanf("%s",name);

 while(p!=NULL&&flag==1)

 {

  if(strcmp(p->name,name)==0)

  {

           printf("\n\t请选择要修改的项:");

     printf("\n\t      1.修改图书编号\n");

        printf("\n\t      2.修改图书所在书库\n");

        printf("\n\t      3.修改图书作者\n");

        printf("\n\t      4.修改图书出版社\n");

     printf("\n\t      5.修改图书库存量\n");

     scanf("%d",&choice);

     switch(choice)

     {

     case 1:  { printf("\n   请输入新的图书编号:");

         

          scanf("%d",p->num); break;

     }

     case 2:  { printf("\n   请输入新的图书书库:");

          

          scanf("%s",p->where); break;

     }

     case 3: { printf("\n   请输入新的图书作者:");

         

         scanf("%s",p->author); break;

       }

     case 4:  {printf("\n   请输入新的图书出版社:");

       

      scanf("%s",p->pub); break;

     }

     case 5:  {printf("\n   请输入新的图书库存量:");

     

            scanf("%d",p->count);  break;

     }

     }

     printf("\n\t该项已成功修改。\n\t  新的图书信息:");

     printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");

     printf(PT);

     flag=0;

  } 

    p0=p;

    p=p0->next;

 }

    if(flag)   printf("\n\t暂无此图书信息。");

 getch();

}

/*读文件*/

struct book *read_file()     

{

 int i=0;

 struct book *p,*p1,*head=NULL;

 FILE *fp;

    if((fp=fopen("library.txt","rb"))==NULL)

 {printf("\n\n\n\n\n   \t********库文件不存在,请创建!**********");

  getch();

     return NULL;

 }

 head=(struct book *)malloc(N);

 p1=head;

 head->next=NULL;

 printf("\n 已有图书信息:");

 printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");

 while(!feof(fp))

 {

  p=(struct book *)malloc(N);   /*开辟空间以存放的取得信息*/

        while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!=EOF)

  {

   printf(PT);

            i++;

  }

  p1->next=p;

  p1=p;

 }

 p1->next=NULL;

 fclose(fp);

 printf("\n           共种%d 图书信息",i);

 printf("\n\n\n  文件中的信息以正确读出。按任意键进入主菜单。");

    getch();

 return (head);  

}

/*保存文件*/

void save(struct book *head)    

{

     FILE *fp;

  struct book *p;

     fp=fopen("library.txt","wb");     /*以只写方式打开二进制文件*/

     if(fp==NULL)        /*打开文件失败*/

     {

         printf("\n=====>打开文件失败!\n");

         getch();

         return ;

     }

    else

   for(p=head->next;p!=NULL;p=p->next)

     fprintf(fp,"%d %s %s %s %s %d\n",p->num,p->name,p->where,p->author,p->pub,p->count);

 fclose(fp);

 printf("\n\t保存文件成功!\n");

}

void main()

{

 struct book *head=NULL;

 int choice=1;

    head=read_file();

 if(head==NULL)

 {

  printf("\n\t\t**********");

  getch();

        head=creat();

 }

 do

 {

     system("cls");

  printf("\t\t----------Welcome---------\n");

  printf("\n\n\t欢迎您,图书管理员.\n");

  printf("\n\n\n\n\n");

  printf("\n\t 请选择:");

     printf("\n\t      1.查询图书信息\n");

  printf("\n\t      2.修改图书信息\n");

  printf("\n\t      3.增加图书信息\n");

  printf("\n\t      4.删除图书信息\n");

  printf("\n\t      5.显示所有图书信息\n");

  printf("\n\t      0.退出系统\n");

  scanf("%d",&choice);

  switch(choice)

  {

     case 1:   find(head);     break;

  case 2:   modify(head);   break;

  case 3:   insert(head);   break;

  case 4:   del(head);      break;

  case 5:   print(head);    break;

  case 0:   system("cls");

         printf("\n\n\n\n\n\t^^^^^^^^^^谢谢使用,再见^^^^^^^^^^!\n\n");

      break;

  }

 }while(choice!=0);

 save(head);

}


oO王
浏览 2569回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP