huaixiaohai988 发表于 2017-6-26 15:22:27

用单链表做图书管理系统的时候遇到两个问题,求帮忙

#include"stdio.h"
#include"stdlib.h"
#include"string.h"

//图书结构体
typedef struct
{
        char ISBN;//编号
        char bookname;//书名
        char author;//作者
        char publish;//出版社
        char time;//出版时间
        float price;//价格
        char status;//在库状态
        char classic;
}book;

// 单链表结点的结构体
typedef struct LNode
{
        book data;                                                // 当前结点中存储的图书数据
        struct LNode *next;                                // 下一个结点的地址
} LinkedNode;



//统计每个出版社出版的图书
void statisticbook(LinkedNode *&head)
    {
            LinkedNode *p=head,*s;
            FILE *fp;
            book stmp;
            int i;
           
                if((fp=fopen("book.dat","wb"))==NULL)
                {
                        printf("数据文件不存在或创建文件不成功,程序异常退出!\n");
                        exit(0);
                }
               
                head->data=NULL;//运行到此处出现问题!!!!
                head->next=NULL;
               
      if(fread(p->data,sizeof(stmp),1,fp))
      {
              for(s=head;s->next&&sort(s->next->data,p->data,6)<0;
              s=s->next;
                }
          fclose(fp);
        for(s=p->next;s;s=s->next)
        {
                for(n=1;s->next&&s->data->classic&&s->data->publish;i++,s=s->next);
                printf("\t\t %s出版社的%c类型的图书共有%d本",s->data->publish,s->data->classic,n);
        }
        return ;
    }

这是统计每本书的函数

//图书按出版时间降次排序
int sort(book *str1,book*str2,int type);
    void booksort(LinkedNode *head)
        {
                LinkedNode *p,*q;
                FILE *fp;
                book stmp;
                printf("\n现在对图书按出版时间降序排序\n");
                //打开文件
                if((fp=fopen("book.dat","rb")==NULL))
                {
                        printf("找不到文件!\n");
                        exit(0);
               }
                head->data=NULL;//此处可能也是有问题
                head->next=NULL;
                rewind(fp);
          printf("当前图书s的信息如下:\n1--编号:%s\n2--书名:%s\n3--作者:%s\n4--出版社:%s--出版时间:%s\n5--价格:%f\n6--在库状态:%s\n");
           while(!feof(fp))
                {
                       // 开辟一个结点空间
                        p = (LinkedNode *)malloc(sizeof(LinkedNode));

                        // 构造结点
                        p->data = stmp;
                        p->next=NULL;

                        // 为了保证恢复出来的链表结点顺序和当初存入的结点顺序保持一致
                        // 将构造好的结点从尾部插入单向链表
                        if(NULL == head)                                        // 如果插入的是第一个结点
                        {
                                rear = p;
                                head = p;
                        }
                        else                                                                // 如果插入的不是第一个结点
                        {
                                rear->next = p;
                                rear = p;
                        }

                        // 再读一本图书的数据
                        fread(&stmp, sizeof(book), 1, fp);
                        {
                                printf("%\n",i++,p->data.ISBN,p->data.bookname,p->data.author,p->data.publish,p->data.time,p->data.price);
                        }
               }
               fclose(fp);
              
这是按出版时间降次排序


不是很会单链表,只能照着别人的代码自己拼凑的,可能很有问题,请大神帮忙指出问题修改一下,马上要交了,help!!
按出版时间降次排序根本不会!。。{:5_100:}

huaixiaohai988 发表于 2017-6-26 15:23:07

在线等回复啊{:5_92:}

huaixiaohai988 发表于 2017-6-26 15:51:39

有没有大神存在{:5_107:}
页: [1]
查看完整版本: 用单链表做图书管理系统的时候遇到两个问题,求帮忙