为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

oO王 2016-06-25 17:46:53
大学生新手,期末必须完成的课程设计,老师要求我们只用在网上寻找到代码,然后完全 完全理解他!  要求的是 索引表,链表,顺序表三种方式作出三个系统,我已经获得了索引表和链表,可是顺序表的实在找不到,我自己也打不出来,所以来这里求助了! 我将链表的代码发到这里,希望能有高手帮我改成顺序表! 谢谢!#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->countstruct  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);}
查看完整描述

目前暂无任何回答

  • 0 回答
  • 2 关注
  • 2525 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信