今天实现了三个功能
分别是利用线性表录入图书信息
int lurumassage(LinkList *L)
{
int i;
system("CLS");
printf("\t\t ============= \n");
printf("\t\t 录人图书信息 \n");
printf("\t\t ============= \n\n");
LinkList* s, * q, * p;
p = L;
while (p->next != NULL)
{
p = p->next;
}
printf("\t\t请输入您要录入的书籍数量:");
scanf_s("%d", &N);
for (i = 1; i <= N; i++)
{
s = (LinkList*)malloc(sizeof(LinkList));
printf("\t\t请输入第%d本书的书名:", i );
scanf_s("%s",s->data.bookname);
printf("\t\t请输入第%d本书的作者:", i );
scanf_s("%s",s->data.author);
printf("\t\t请输入第%d本书的书号:", i );
scanf_s("%d",&s->data.num);
printf("\t\t请输入第%d本书的出版社:", i);
scanf_s("%s",s->data.press);
printf("\t\t请输入第%d本书的馆内书本数量:", i);
scanf_s("%d",&s->data.count);
printf("\t\t请输入第%d本书的定价:", i);
printf("%s", s ->data.price);
q = L->next;
if (q == NULL)
{
p->next = s;
p = s;
p->next = NULL;
printf("\t\t%d本书全部录入成功\n", N);
system("CLS");
printf("\t\t =========================== \n");
printf("\t\t %d本书全部录入成功! \n, N");
printf("\t\t =========================== \n");
printf("\t\t 按任意键继续...\n");
printf("\t\t =========================== \n");
continue;
}
while (q != NULL)
{
if (strcmp(s->data.bookname, q->data.bookname) == 0)
{
printf("\t\t此书已存在!\n");
printf("\t\t请重新输入:\n");
printf("\t\t请输入第%d本书的书名:", i);
scanf_s("%s", s->data.bookname);
printf("\t\t请输入第%d本书的作者:", i);
scanf_s("%s", s->data.author);
printf("\t\t请输入第%d本书的书号:", i);
scanf_s("%d", &s->data.num);
printf("\t\t请输入第%d本书的出版社:", i);
scanf_s("%s", s->data.press);
printf("\t\t请输入第%d本书的馆内书本数量:", i);
scanf_s("%d", &s->data.count);
printf("\t\t请输入第%d本书的定价:", i);
printf("%s", s->data.price);
}
q = q->next;
}
p->next = s;
p = s;
p->next = NULL;
printf("\t\t录入成功!\n");
}
return 0;
}
分别按书名,作者,出版社查找图书信息
按书名查找
void search_name(LinkList* L)
{
LinkList* p = L->next;
char name1[20];
int x = 0;
printf("\t\t ==================== \n");
printf("\t\t 按书名查找 \n");
printf("\t\t ==================== \n");
printf("\n\t\t请输入您要查看的图书名称:");
scanf_s("%s", name1);
while (p != NULL)
{
if (strcmp(name1, p->data.bookname) != 0)
{
p = p->next;
}
else
{
printf("\t\t书号:%d",&p->data.num);
printf("\t\t书名:%s", p->data.bookname);
printf("\t\t作者:%s", p->data.author);
printf("\t\t出版社:%s", p->data.press);
printf("\t\t馆内书本数量:%d",&p->data.count);
printf("\t\t定价:%s", p->data.price);
printf("\n");
p = p->next;
x++;
}
}
if (p == NULL && x == 0)
{
printf("\t\t对不起,不存在此书\n");
}
}
按作者查找
void search_author(LinkList *L)
{
LinkList* p = L->next;
char author1[20];
int x = 0;
printf("\t\t ==================== \n");
printf("\t\t 按作者查找 \n");
printf("\t\t ==================== \n");
printf("\n\t\t请输入作者名称:");
scanf_s("%s", author1);
while (p != NULL)
{
if (strcmp(author1, p->data.author) != 0)
{
p = p->next;
}
else
{
printf("\t\t书号:%d", &p->data.num);
printf("\t\t书名:%s", p->data.bookname);
printf("\t\t作者:%s", p->data.author);
printf("\t\t出版社:%s", p->data.press);
printf("\t\t馆内书本数量:%d", &p->data.count);
printf("\t\t定价:%s", p->data.price);
printf("\n");
p = p->next;
x++;
}
}
if (p == NULL && x == 0)
{
printf("\t\t对不起,不存在此书\n");
}
}
按出版社查找
void search_press(LinkList* L)
{
LinkList* p = L->next;
char press1[20];
int x = 0;
printf("\t\t ==================== \n");
printf("\t\t 按出版社查找 \n");
printf("\t\t ==================== \n");
printf("\n\t\t请输入出版社名称:");
scanf_s("%s", press1);
while (p != NULL)
{
if (strcmp(press1, p->data.press) != 0)
{
p = p->next;
}
else
{
printf("\t\t书号:%d", &p->data.num);
printf("\t\t书名:%s", p->data.bookname);
printf("\t\t作者:%s", p->data.author);
printf("\t\t出版社:%s", p->data.press);
printf("\t\t馆内书本数量:%d", &p->data.count);
printf("\t\t定价:%s", p->data.price);
printf("\n");
p = p->next;
x++;
}
}
if (p == NULL && x == 0)
{
printf("\t\t对不起,不存在此书\n");
}
}
主查找界面
void search(LinkList* L)
{
int c = 0;
printf("\t\t 1.按书名查询\n");
printf("\t\t 2.按作者查询\n");
printf("\t\t 3.按出版社查询\n");
printf("\t\t 4.返回\n");
printf("\t\t 请从1--4个选项中选取一个进行查询\n");
scanf_s("%d", &c);
if (c > 4 || c < 1)
{
printf("\t\t 对不起,您的操作有误!\n");
printf("\t\t 请再次输入操作选项\n");
scanf_s("%d", &c);
}
switch(c)
{
case 1:system("cls"); search_name; break;
case 2:system("cls"); search_author; break;
case 3:system("cls"); search_press; break;
case 4:break;
}
}
排序
int sort(LinkList* L)
{
LinkList* p = L->next, * q, * r;//p指向第一个数据节点
if (p != NULL)
{
r = p->next;//r保存*p直接后继节点的指针
p->next = NULL;//构造只含一个数据节点的有序表
p = r;
while (p != NULL)
{
r = p->next;//r保存*p直接后继节点的指针
q = L;
while (q->next != NULL && q->next->data.num < p->data.num)
{
q = q->next;//在有序表中找插入*p的直接前驱结点*q的位置
}
p->next = q->next;//将*p插入到*q之后
q->next = q;
p = r;//扫描原链表余下的结点
}
}
return 0;
}