鱼C论坛

 找回密码
 立即注册
查看: 2642|回复: 2

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

[复制链接]
发表于 2017-6-26 15:22:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

//图书结构体
typedef struct
{
        char ISBN[100];//编号
        char bookname[100];//书名
        char author[100];//作者
        char publish[100];//出版社
        char time[100];//出版时间
        float price;//价格
        char status[10];//在库状态
        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!!
按出版时间降次排序根本不会!。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-6-26 15:23:07 | 显示全部楼层
在线等回复啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-26 15:51:39 | 显示全部楼层
有没有大神存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 17:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表