| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2255 人关注过本帖
标题:菜鸟,图书馆管理系统,自己写的代码运行有错误,不知道为什么
只看楼主 加入收藏
百铃子
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-4-15
收藏
 问题点数:0 回复次数:0 
菜鸟,图书馆管理系统,自己写的代码运行有错误,不知道为什么
library.zip (286.77 KB)

图书书目信息:
          书名,作者,ISBN,价格和出版商
  1)建立书目信息链表。
  2)按书名和作者查询图书。
  3) 按出版商分类输出图书信息。
下面是我写的代码,但是运行有问题
1.选择输入记录的时候不能够输入出版商(即结构体中定义的chubanshang),便立刻跳入到了下一次xu
[local]3[/local]
图书书目信息:
          书名,作者,ISBN,价格和出版商
  1)建立书目信息链表。
  2)按书名和作者查询图书。
  3) 按出版商分类输出图书信息。

下面是我写的代码,但是运行有问题
1.选择“输入记录”的时候不能够输入出版商(即结构体中定义的chubanshang),便立刻跳入到了下一次循环页面
2.不能进行”查询记录“
2.我写的代码主要是参照老师的学生管理系统写的,自己写的重点在与第3题的接口函数,(即在Student.C当中的最后一个函数GetElem_STUD1,也是参照GetElem_STUD修改的)。我的想法是只要找到与输入的出版商相同的结构体,就输出。如此,进行循环操作。 但是貌似运行的时候有问题吧。。。

最后,处女问。菜鸟级。希望各位大神多多指教。

结构体定义:
程序代码:
struct LNode_STUD

 {
   ElemType_STUD data;
   struct LNode_STUD *next;

 };

 typedef struct LNode_STUD *List_STUD;



MAIN:
程序代码:
#include"c1.h"
typedef struct 

 {
    char book[20];
    char author[10];//用字符串数组处理字符串
    int ISBN;
    float price;
    char chubanshang[20];
           

 }ElemType_STUD;
#include "Student.h"
#include "Student.c"

int ModelSelect()

 {
     int iSel;
     printf("\n  ***********************");
     printf("  \n1:输入记录\n");
     printf("  \n2:查询记录\n");
     printf("  \n3:按出版商查询记录\n");
     printf("  \n0:退出系统\n");
     printf("\n  ***********************\n");
     printf("\n  请选择操作命令: ");
     scanf("%d",&iSel);
     fflush(stdin);
     return iSel; 

 }

void InputRecord(ElemType_STUD *c)

 {
   printf("\nPlease input a book information:\n");
   puts("book:");
   gets(c->book);
   puts("author:");
   gets(c->author);
   puts("ISBN:");
   scanf("%d",&c->ISBN);
   puts("price:");
   scanf("%f",&c->price);
   puts("chubanshang:");
   gets(c->chubanshang);//??为什么不能输入了??


 }

int QuerySelect()

 {
     int iSel;
     printf("\n  ***********************");
     printf("  \n1:按书名查询\n");
     printf("  \n2:按作者查询\n");
     printf("  \n0:返回上一级\n");
     scanf("%d",&iSel);
     fflush(stdin);//清空输入缓存区,以便不影响后面输入的东西
     return iSel; 

 }


 Status CompareID(ElemType_STUD e1,ElemType_STUD e2)

 {
    if(!strcmp(e1.book,e2.book)) //???为什么是“!”
        return TRUE;
    else
        return FALSE; 

 }

Status CompareName(ElemType_STUD e1,ElemType_STUD e2)//作者名
 {
    if(!strcmp(e1.author,e2.author)) 
        return TRUE;
    else
        return FALSE; 

 }
Status Comparechubanshang(ElemType_STUD e1,ElemType_STUD e2)//出版商
 {
    if(!strcmp(e1.chubanshang,e2.chubanshang)) 
        return TRUE;
    else
        return FALSE; 

 }

void visit(ElemType_STUD c) /* ListTraverse()调用的函数(类型要一致) */

 {
   printf("\n*************************************");
   printf("\n ");
   puts(c.book);
   puts(c.author);
   printf("%d\n",c.ISBN);
   printf("%f\n",c.price);
   puts(c.chubanshang);

 }

 
main()
{
   List_STUD L;
   List_STUD p;
   ElemType_STUD e0,e;
   int k;
   int iSel;
   InitList_STUD(&L);
   while (1)
   {
      iSel=ModelSelect();
      switch(iSel)
      {
         case 1:
             InputRecord(&e0);
             ListInsert_STUD(L,1,e0);
             break;
         case 2:
             iSel=QuerySelect();
             switch(iSel)
             {
             case 1:
                 printf("  \n请输入书名:\n");
                 gets(e0.book);
                 k=LocateElem_STUD(L,e0,CompareID);
                 if(!k)
                 {
                     printf("  \n没有该图书的记录:\n");
                 }
                 else
                 {
                    GetElem_STUD(L,k,&e);
                    visit(e);                 
                 }
                 break;
             case 2:
                 printf("  \n请输入作者:\n");
                 gets(e0.author);
                 k=LocateElem_STUD(L,e0,CompareName);
                 if(!k)
                 {
                     printf("  \n没有该作者记录:\n");
                 }
                 else
                 {
                    GetElem_STUD(L,k,&e);
                    visit(e);                 
                 }
                 break;
             }
             break;
        case 3:
                 printf("  \n请输入出版商:\n");
                 gets(e0.chubanshang);
                 p=L->next;
                 k=LocateElem_STUD(L,e0,Comparechubanshang);
                 if(!k)
                 {
                     printf("  \n没有该出版商记录:\n");
                 }
                 else
                 {
                     while(p!=NULL)
                     { 
                         p=L->next;
                         GetElem_STUD1(L,k,&e);
                         visit(e);
                     }

                                     
                 }break;


         case 0:DestroyList_STUD(&L);exit(0);  
      }
   
   }
}



函数接口操作
程序代码:

 Status InitList_STUD(List_STUD *L)

 { /* 操作结果:构造一个空的线性表L */
   *L=(List_STUD)malloc(sizeof(struct LNode_STUD)); /* 产生头结点,并使L指向此头结点 */
   if(!*L) /* 存储分配失败 */
     exit(OVERFLOW);
   (*L)->next=NULL; /* 指针域为空 */
   return OK;

 }


 Status DestroyList_STUD(List_STUD *L)

 { /* 初始条件:线性表L已存在。操作结果:销毁线性表L */
   List_STUD q;
   while(*L)
   {
     q=(*L)->next;
     free(*L);
     *L=q;
   }
   return OK;

 }


 Status ClearList_STUD(List_STUD L) /* 不改变L */

 { /* 初始条件:线性表L已存在。操作结果:将L重置为空表 */
   List_STUD p,q;
   p=L->next; /* p指向第一个结点 */
   while(p) /* 没到表尾 */
   {
     q=p->next;
     free(p);
     p=q;
   }
   L->next=NULL; /* 头结点指针域为空 */
   return OK;

 }


 Status ListEmpty_STUD(List_STUD L)

 { /* 初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE */
   if(L->next) /* 非空 */
     return FALSE;
   else
     return TRUE;

 }


 int ListLength_STUD(List_STUD L)

 { /* 初始条件:线性表L已存在。操作结果:返回L中数据元素个数 */
   int i=0;
   List_STUD p=L->next; /* p指向第一个结点 */
   while(p) /* 没到表尾 */
   {
     i++;
     p=p->next;
   }
   return i;

 }


 Status GetElem_STUD(List_STUD L,int i,ElemType_STUD *e) /* 算法2.8 */

 { /* L为带头结点的单链表的头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR */
   int j=1; /* j为计数器 */
   List_STUD p=L->next; /* p指向第一个结点 */
   while(p&&j<i) /* 顺指针向后查找,直到p指向第i个元素或p为空 */
   {
     p=p->next;
     j++;
   }
   if(!p||j>i) /* 第i个元素不存在 */
     return ERROR;
   *e=p->data; /* 取第i个元素 */
   return OK;

 }

int LocateElem_STUD(List_STUD L,ElemType_STUD e,Status(*compare)(ElemType_STUD,ElemType_STUD))

 { /* 初始条件: 线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0) */
   /* 操作结果: 返回L中第1个与e满足关系compare()的数据元素的位序。 */
   /*           若这样的数据元素不存在,则返回值为0 */
   int i=0;
   List_STUD p=L->next;
   while(p)
   {
     i++;
     if(compare(p->data,e)) /* 找到这样的数据元素 */
       return i;
     p=p->next;
   }
   return 0;

 }



 Status ListInsert_STUD(List_STUD L,int i,ElemType_STUD e) /* 算法2.9。不改变L */

 { /* 在带头结点的单链线性表L中第i个位置之前插入元素e */
   int j=0;
   List_STUD p=L,s;
   while(p&&j<i-1) /* 寻找第i-1个结点 */
   {
     p=p->next;
     j++;
   }
   if(!p||j>i-1) /* i小于1或者大于表长 */
     return ERROR;
   s=(List_STUD)malloc(sizeof(struct LNode_STUD)); /* 生成新结点 */
   s->data=e; /* 插入L中 */
   s->next=p->next;
   p->next=s;
   return OK;

 }


 Status ListDelete_STUD(List_STUD L,int i,ElemType_STUD *e) /* 算法2.10。不改变L */

 { /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */
   int j=0;
   List_STUD p=L,q;
   while(p->next&&j<i-1) /* 寻找第i个结点,并令p指向其前趋 */
   {
     p=p->next;
     j++;
   }
   if(!p->next||j>i-1) /* 删除位置不合理 */
     return ERROR;
   q=p->next; /* 删除并释放结点 */
   p->next=q->next;
   *e=q->data;
   free(q);
   return OK;

 }


 Status ListTraverse_STUD(List_STUD L,void(*vi)(ElemType_STUD))

 /* vi的形参类型为ElemType_STUD,与bo2-1.c中相应函数的形参类型ElemType_STUD&不同 */

 { /* 初始条件:线性表L已存在 */
   /* 操作结果:依次对L的每个数据元素调用函数vi()。一旦vi()失败,则操作失败 */
   List_STUD p=L->next;
   while(p)
   {
     vi(p->data);
     p=p->next;
   }
   printf("\n");
   return OK;

 }

 Status GetElem_STUD1(List_STUD L,int i,ElemType_STUD *e) /* 算法2.8 */

 { /* L为带头结点的单链表的头指针。当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR */
   int j=1; /* j为计数器 */
   List_STUD p=L->next; /* p指向第一个结点 */
   while(p&&j<i) /* 顺指针向后查找,直到p指向第i个元素或p为空 */
   {
     p=p->next;
     j++;
     if(!p||j>i) /* 第i个元素不存在 */
     return ERROR;
   *e=p->data; /* 取第i个元素 */
   }
   
   return OK;

 }
搜索更多相关主题的帖子: 管理系统 图书馆 结构体 记录 信息 
2015-04-15 23:06
快速回复:菜鸟,图书馆管理系统,自己写的代码运行有错误,不知道为什么
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037823 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved