#include<stdio.h>
typedef struct
{
int year;
int month;
int day;
}Data;
typedef struct
{
int id; //图书编号
char name[20];//图书名
int price;//价格
Data pubData;//出版日期
}Book;
typedef Book ElemType;
typedef struct LNode
{
Book data;
struct LNode *next;
}LNode;
int InsertList(LNode *L,int i,ElemType e)
{
int j;
LNode *p,*q;
//初始化,指向头结点,并初始化计数器j=0
p=L;j=0;
//循环:将指针指向第i-1个结点
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
//检果i是否正确(1<=i<=n+1) j>i-1时,i<1
if(p==NULL||j>i-1)return 0;//p==NULL时,i>n+1
//分配空间并插入
if(q==NULL)return 0;
q->data=e;
q->next=p->next;
p->next=q;
return 1;
}
void display(LNode *L)
{
LNode *p;
p=L->next;
printf("\t书号\t%-16s价格\t出版日期\n","书名");
while(p!=NULL)
{
printf("\t%d\t%-16s%d\t%d-%d-%d\n"
,p->data.id,p->data.name,p->data.price
,p->data.pubData.year
,p->data.pubData.month
,p->data.pubData.day);
p=p->next;
}
}
//菜单
void menu(LNode *L)
{
int a,loc;
int e,result;
int select;
int InsertList;
do
{
system("cls");//清屏
printf("\t****************************\n");
printf("\t*1.添加新的图书 *\n");
printf("\t*2.删除指定图书 *\n");
printf("\t*3.查找指定图书(书名) *\n");
printf("\t*4.修改图书信息 *\n");
printf("\t*5.显示所有的图书 *\n");
printf("\t*0.退出 *\n");
printf("\t****************************\n");
printf("\t请输入操和代码:");
scanf("%d",&select);
switch(select)
{
case 1:
//插入一个元数到指定位置
printf("\t请输入要插入的元素:");
scanf("%d",&e);
printf("\t请输入要插入的位置:");
scanf("%d",&loc);
result=InsertList(a,loc,&e);
if(result==0)printf("\t插入元素%d失败!\n",e);
else
printf("\t插入元素%d成功!\n",e);
system("pause");
break;
case 2:
//删除指定位置的元素符号
printf("\t请输入要删除的位置:");
scanf("%d",&loc);
result=DeleteList(a,loc,&e);
if(result==0)printf("\t删除第%d个元素失败!\n",loc);
else printf("\t删除第%d个元素成功!该值为:%d\n",loc,e);
system("pause");
break;
case 3:
//查找指定元素的位序
printf("\t请输入要查找的元素:");
scanf("%d",&e);
loc=LocateList(a,e);
if(loc==0)printf("\t查找元素%d失败!\n",e);
else printf("\t查找元素%d成功!该元素的位序是:%d\n",e,loc);
system("pause");
break;
case 4:
//修改图书信息
printf("\t请输入要修改图书信息:");
scanf("%d",&e);
loc=ModifyList(a,e);
if(loc==0)printf("\t修改图书信息%d失败!\n",e);
else printf("\t修改图书信息%d成功!该图书信息是:%d\n",e,loc);
system("pause");
break;
case 5:
//显示所有的元素
display(L);
system("pause");
break;
case 0:
//退出
printf("\t请问是否确定要退出程序!(Y/N)");
//接收用户输入的选择并执行是否要退出的功能
exit(0);
break;
}
}while(select<0||select>5);
}
int main()
{
LNode H;
Book book1={1,"数据结构",34,{2014,1,25}};
Book book2={2,"C语言程序设计",31,{2013,11,12}};
Book book3={3,"Java面向对象",42,{2015,8,1}};
Book book4={4,"Web应用开发",68,{2016,10,18}};
Book book5={5,"Android开发基础",75,{2017,3,30}};
H.next=NULL;
InsertList(&H,1,book1);
InsertList(&H,2,book2);
InsertList(&H,3,book3);
InsertList(&H,4,book4);
InsertList(&H,5,book5);
while(1)
{
menu(&H);
}
}
zhonzxad
Weber_Wang