#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 100
typedef struct Book{
char id[20];
char name[20];
float price;
struct Book * next;
}Book;
//初始化链表
void IntList(Book *L){
L=(Book *)malloc(sizeof(Book));
L->next=NULL;
}
//1-图书信息的创建
void create(Book *L){
int i=0;
Book *r,*s;
L->next=NULL;
s=L;
printf("|-----------图书信息的创建-------------|\n");
printf("请依次输入图书的书号 书名 价格,以0 0 0结束输入\n");
while(1){
r=(Book *)malloc(sizeof(Book));
scanf("%s%s%f",r->id,r->name,&r->price);
if(r->price==0){
break;
}else{
s->next=r;
s=r;
i++;
}
}
s->next=NULL;
printf("|--------------有%d本图书---------------|\n",i);
}
//2-图书信息的输出
void shuchu(Book *L){
printf("|-----------图书信息的输出-------------|\n");
int i=0;
Book *s;
s=L->next;
while(s!=NULL){
printf("%s %s %.2f\n",s->id,s->name,s->price);
s=s->next;
i++;
}
printf("|--------------有%d本图书---------------|\n",i);
}
//3-按图书价格降序排序
void jiangxu(Book *L){
printf("|-----------图书价格降序排序------------|\n");
int i=0;
Book *q,*p1,*pre,*p;
if(L->next!=NULL) {
p=L->next->next;
L->next->next=NULL;
while(p!=NULL) {
pre=L;
q=pre->next;
while(q!=NULL && q->price > p->price) {
pre=q;
q=q->next;
}
p1=p->next;
p->next=pre->next;
pre->next=p;
p=p1;
}
}
p=L->next;
printf("排序后的图书信息为: \n");
while(p!=NULL) {
printf("%s %s %.2f \n",p->id,p->name,p->price);
p=p->next;
i++;
}
printf("|--------------有%d本图书---------------|\n",i);
}
//4-图书信息修改
void xiugai(Book *L){
printf("|-----------图书价格信息修改------------|\n");
int i=0;
float zongjia=0;
float pinjunjia;
Book *p,*q,*s;
p=L->next;
while(p!=NULL){
zongjia=zongjia+p->price;
p=p->next;
i++;
}
pinjunjia=zongjia/i;
q=L->next;
while(q!=NULL){
if(q->price<pinjunjia){
q->price=q->price*(1+0.1);
}
q=q->next;
}
printf("修改后的图书信息为: \n");
s=L->next;
while(s!=NULL) {
printf("%s %s %.2f \n",s->id,s->name,s->price);
s=s->next;
}
printf("|--------------有%d本图书---------------|\n",i);
}
//5-逆序存储
void nixu(Book *L){
printf("|---------------逆序存储---------------|\n");
int i=0;
Book *r,*p;
p=L->next;
L->next=NULL;
while(p!=NULL){
r=p;
p=p->next;
r->next=L->next;
L->next=r;
}
p=L->next;
printf("排序后的图书信息为: \n");
while(p!=NULL) {
printf("%s %s %.2f \n",p->id,p->name,p->price);
p=p->next;
i++;
}
printf("|--------------有%d本图书---------------|\n",i);
}
//6-最贵图书查找
void zuigui(Book *L){
printf("|-------------最贵图书查找--------------|\n");
Book *p,*q,*s;
p=L->next;
q=p->next;
s=p;
while(p!=NULL&&q!=NULL){
if(p->price<q->price){
s=q;
}
p=p->next;
q=q->next;
}
p=L->next;
while(p!=NULL){
if(p->price==s->price){
printf("%s %s %.2f \n",p->id,p->name,p->price);
}
p=p->next;
}
}
//7-最爱图书查找
void zuiai(Book *L){
printf("|------------最爱图书查找--------------|\n");
int j=0;
Book *r;
char name1[20];
printf("请输入最爱图书书名:\n");
scanf("%s",name1);
r=L->next;
while(r!=NULL){
if(!strcmp(name1,r->name)){
j++;
printf("%s %s %.2f \n",r->id,r->name,r->price);
}
r=r->next;
}
if(j==0){
printf("|--------抱歉!没有您最爱的图书!-------|\n");
}else{
printf("|---查找到您最爱的图书一共有以上%d本----|\n",j);
printf("|---------------------------------------|\n");
}
}
//8-按位置查找
void weizhi(Book *L){
printf("|---------------按位置查找--------------|\n");
int i,j=1;
Book *r;
r=L->next;
printf("请输入图书位置:\n");
scanf("%d",&i);
while(r!=NULL){
if(i==j){
printf("%s %s %.2f \n",r->id,r->name,r->price);
}
j++;
r=r->next;
}
if(i<=0 || i>=j){
printf("抱歉,最佳位置上的图书不存在!\n");
}
printf("|---------------------------------------|\n");
}
//9-新图书的入库
void ruku(Book *L){
printf("|---------------新图书入库--------------|\n");
int i,j=0;
Book *r,*p;
p=L;
printf("请输新图书入库位置\n");
scanf("%d",&i);
if(i<=0){
printf("入库位置输入错误!请重新操作\n");
}
while(j<i-1&&p!=NULL){
j++;
p=p->next;
}
if(p==NULL){
printf("入库位置输入错误!请重新操作\n");
}else{
r=(Book *)malloc(sizeof(Book));
printf("请输新图书书号 书名 价格\n");
scanf("%s%s%f",r->id,r->name,&r->price);
r->next=p->next;
p->next=r;
printf("入库成功!入库后的图书信息为:\n");
p=L->next;
while(p!=NULL) {
printf("%s %s %.2f \n",p->id,p->name,p->price);
p=p->next;
}
}
printf("|---------------------------------------|\n");
}
//10-旧图书出库
void chuku(Book *L){
printf("|---------------旧图书出库--------------|\n");
int i,j=0;
Book *p,*q;
p=L;
printf("请输入旧图书出库位置\n");
scanf("%d",&i);
if(i<=0){
printf("出库位置输入错误!请重新操作\n");
}
while(j<i-1&&p!=NULL){
j++;
p=p->next;
}
if(p==NULL){
printf("出库位置输入错误!请重新操作\n");
}else{
q=p->next;
if(q==NULL)
printf("出库位置输入错误!请重新操作\n");
p->next=q->next;
free(q);
printf("出库成功!出库后的图书信息为:\n");
p=L->next;
while(p!=NULL) {
printf("%s %s %.2f \n",p->id,p->name,p->price);
p=p->next;
}
}
printf("|---------------------------------------|\n");
}
//11-图书去重
void quchong(Book *L){
printf("|--------------图书去重---------------|\n");
Book *p,*q,*r;
for(r=L->next;r!=NULL;r=r->next){
q=r;
p=r->next;
while(p!=NULL){
if(!strcmp(p->id,q->id)){
q->next=p->next;
free(p);
p=q->next;
}else{
q=p;
p=p->next;
}
}
}
p=L->next;
while(p!=NULL) {
printf("%s %s %.2f \n",p->id,p->name,p->price);
p=p->next;
}
}
int main(){
Book *L;
L=(Book *)malloc(sizeof(Book));
IntList(L);
int i;
printf("|-----------------菜-单----------------|\n");
printf("|0-退出 |\n");
printf("|1-图书信息的创建 |\n");
printf("|2-图书信息的输出 |\n");
printf("|3-按图书价格降序排序 |\n");
printf("|4-图书价格信息修改 |\n");
printf("|5-逆序存储 |\n");
printf("|6-最贵图书查找 |\n");
printf("|7-最爱图书查找 |\n");
printf("|8-按位置查找 |\n");
printf("|9-新图书的入库 |\n");
printf("|10-旧图书的出库 |\n");
printf("|11-图书去重 |\n");
printf("|--------------------------------------|\n");
do{
printf("请输入操作数:\n");
scanf("%d",&i);
switch(i){
case 0:printf("结束操作!\n");break;
case 1:create(L);break;
case 2:shuchu(L);break;
case 3:jiangxu(L);break;
case 4:xiugai(L);break;
case 5:nixu(L);break;
case 6:zuigui(L);break;
case 7:zuiai(L);break;
case 8:weizhi(L);break;
case 9:ruku(L);break;
case 10:chuku(L);break;
case 11:quchong(L);break;
default:printf("操作数输入错误,请重新输入!\n");
}
}while(i);
}
基本功能已实现,细节方面没有多加考虑,欢迎指正