#include<stdio.h>
#include<stdlib.h>
typedef struct book
{
int num;
float price;
struct book *next;
}Book;
Book *head=0;
int n=0;
void Create()
{
Book *p=0;
Book *p_new=0;
Book *p_old=0;
int num;
if (head!=0)
{
p=head;
while (p!=0)
p=p->next;
p_old=p;
}
while (1)
{reInput:
printf("请输入图书编号,按0结束:");
scanf("%d",&num);
if (num==0)
{
getchar();
break;
}
p=head;
while (p!=0)
{
if (p->num==num)
{
printf("编号重复,请重新输入。\n");
goto reInput;
}
p=p->next;
}
p_new=(Book*)malloc(sizeof(Book));
p_new->num=num;
n++;
if (n==1)
{
head=p_new;
}
else
{
p_old->next=p_new;
}
p_old=p_new;
p_new->next=0;
printf("请输入图书价格:");
scanf("%f",&p_new->price);
}
}
void Show()
{
Book *p;
p=head;
if (p==0)
{
printf("没有图书信息。\n");
return;
}
printf("图书编号\t图书价格\n");
while (p!=0)
{
printf("%d\t\t%.2f\n",p->num,p->price);
p=p->next;
}
}
void Modify()
{
Book *p=0;
char c;
int num;
if (head==0)
{
printf("没有图书记录,请先添加图书!!\n");
return;
}
printf("请输入要修改图书的编号:");
scanf("%d",&num);
getchar();
for (p=head;p!=0;p=p->next)
{
if (p->num==num)
{
printf("图书编号\t图书价格\n");
printf("%d\t\t%.2f\n",p->num,p->price);
printf("确定要对该记录进行修改吗(Y/N):");
c=getchar();
if (c=='y'||c=='Y')
{
printf("请输入图书价格:");
scanf("%f",&p->price);
printf("修改成功\n");
}
getchar();
return;
}
}
printf("找不到该编号对应的图书。\n");
}
void Search()
{
Book *p=0;
char c;
int num;
float price;
if (head==0)
{
printf("没有图书记录,请先添加图书!!\n");
return;
}
printf("查询方式:1、按编号查询 2、按价格查询\n");
printf("请选择(1 或 2):");
c=getchar();
if (c=='1')
{
printf("请输入要查询图书的编号:");
scanf("%d",&num);
while (p)
{
if (p->num==num)
{
printf("图书编号\t图书价格\n");
printf("%d\t\t%.2f\n",p->num,p->price);
getchar();
return;
}
p=p->next;
}
printf("找不到该编号对应的图书。\n");
}
else if (c=='2')
{
printf("请输入要查询图书的价格:");
scanf("%f",&price);
while (p)
{
if (p->price==price)
{
printf("图书编号\t图书价格\n");
printf("%d\t\t%.2f\n",p->num,p->price);
getchar();
return;
}
p=p->next;
}
printf("找不到该价格对应的图书。\n");
}
else
printf("请输入1 或 2\n");
getchar();
}
void Total()
{
printf("图书数量:%u\n",n);
}
void Swap(Book *p1,Book *p2)
{
Book temp;
temp=*p1;
*p1=*p2;
*p2=temp;
temp.next=p1->next;
p1->next=p2->next;
p2->next=temp.next;
}
void Sort()
{
Book *p=0;
int i,j,quit=0;
for (j=0;j<n-1;j++)
{
p=head;
if (p==0)
break;
for (i=0;i<n-j-1;i++)
{
if (p->num > p->next->num)
{
Swap(p,p->next);
}
p=p->next;
if (p==0)
{
quit=1;
break;
}
}
if (quit==1)
break;
}
printf("排序后数据如下:\n");
Show();
}
void Delete()
{
Book *p=head;
Book *l=0;
int num;
if (head==0)
{
printf("没有图书记录,请先添加图书!!\n");
return;
}
printf("请输入要删除图书的编号:");
scanf("%d",&num);
if (p->num==num)
{
l=p;
p=p->next;
head=p;
free(l);
n--;
printf("删除成功\n");
getchar();
return;
}
while (p)
{
if (p->next==0)
{
printf("找不到该编号对应的图书。\n");
getchar();
return;
}
if (p->next->num==num)
{
l=p->next;
p->next = l->next;
free(l);
n--;
printf("删除成功\n");
getchar();
return;
}
p=p->next;
}
printf("找不到该编号对应的图书。\n");
getchar();
}
void ShowMenu()
{
system("cls");
printf("\n");
printf("\t\t---------------图书管理系统---------------\n");
printf("\t\t|\t\t |\n");
printf("\t\t|\t\t1 添加图书 |\n");
printf("\t\t|\t\t2 显示图书 |\n");
printf("\t\t|\t\t3 修改图书 |\n");
printf("\t\t|\t\t4 删除图书 |\n");
printf("\t\t|\t\t5 查找图书 |\n");
printf("\t\t|\t\t6 排序图书 |\n");
printf("\t\t|\t\t7 统计图书 |\n");
printf("\t\t|\t\t0 退出系统 |\n");
printf("\t\t------------------------------------------\n");
printf("\t\t请选择操作(0-7):");
}
void ReFrush()
{
int c;
do
{
c=getchar();
}while(c != '\n' && c != EOF);
}
int main()
{
int select,quit=0;
while(1)
{
ShowMenu();
scanf("%d",&select);
ReFrush();
switch(select)
{
case 1:
Create();
break;
case 2:
Show();
break;
case 3:
Modify();
break;
case 4:
Delete();
break;
case 5:
Search();
break;
case 6:
Sort();
break;
case 7:
Total();
break;
case 0:
quit=1;
break;
default:
printf("请输入0-7之间的数字\n");
break;
}
if(quit==1)
break;
printf("按任意键返回主菜单!!\n");
getchar();
}
printf("程序结束!!\n");
return 0;
}