|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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!!
按出版时间降次排序根本不会!。。 |
|