#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Node
{
int sfNum;
char sfName[50];
char sfDevName[50];
int sfPubYear;
float sfPrice;
int sfSoldDate;
int sfSoldNum;
struct Node * next;
}SoftInfo;
typedef Node * Info;
void initial(SoftInfo * &softLib);
void showSigleInfo(SoftInfo * &sigle);
void showInfo(SoftInfo * &info);
void read(Info &softLib);
void updateSfBNum(SoftInfo *&softLib,int num);
void deleteBsfN(SoftInfo *&softLib,char * name);
void getFitPrice(SoftInfo *&softLib,float price);
void getSoldInfo(SoftInfo *&softLib,char * name);
void getDevProInfo(SoftInfo *&softLib,char * name);
void initial(SoftInfo * &softLib)
{
if(softLib==NULL)
{
softLib=(SoftInfo *)malloc(sizeof(SoftInfo));
softLib->next=NULL;
}
else
{
while(softLib!=NULL)
{
softLib=softLib->next;
}
softLib->next=NULL;
}
}
void showSigleInfo(SoftInfo * &sigle)
{
printf("软件编号:%d\n",sigle->sfNum);
printf("软件名称:%s\n",sigle->sfName);
printf("开发商名称:%s\n",sigle->sfDevName);
printf("出版日期(只含年份):%d\n",sigle->sfPubYear);
printf("单价:%f\n",sigle->sfPrice);
printf("销售日期(含年、月、日):%d\n",sigle->sfSoldDate);
printf("销售数量:%d\n",sigle->sfSoldNum);
}
void showInfo(SoftInfo * &info)
{
if(info==NULL)
{
printf("没有软件信息!");
}
else
{
while(info->next!=NULL)
{
showSigleInfo(info->next);
info=info->next;
}
}
}
void read(Info &softLib)
{
Info p;
p=(Info)malloc(sizeof(SoftInfo));
p->next=NULL;
printf("软件编号:");
scanf("%d",&p->sfNum);
printf("软件名称:");
scanf("%s",p->sfName);
printf("开发商名称:");
scanf("%s",p->sfDevName);
printf("出版日期(只含年份):");
scanf("%d",&p->sfPubYear);
printf("单价:");
scanf("%f",&p->sfPrice);
printf("销售日期(含年、月、日):");
scanf("%d",&p->sfSoldDate);
printf("销售数量:");
scanf("%d",&p->sfSoldNum);
softLib->next=p;
}
void updateSfBNum(SoftInfo *&softLib,int num)
{
while(softLib!=NULL)
{
SoftInfo * p;
p=(Info)malloc(sizeof(SoftInfo));
SoftInfo * q=softLib;
//softLib=softLib->next;
if(softLib->sfNum==num)
{
showSigleInfo(softLib);
char sign;
getchar();
printf("are you true to update the num?(y/n)");
sign=getchar();
if(sign=='y'||sign=='Y')
{
read(p);
p=p->next;
p->next=softLib->next;
softLib->next=NULL;
softLib=p->next;
}
}
else
{
softLib=softLib->next;
}
}
printf("搜索完毕!");
}
void deleteBsfN(SoftInfo *&softLib,char * name)
{
while(softLib!=NULL)
{
if(softLib->sfName==name)
{
showSigleInfo(softLib);
char sign;
getchar();
printf("are you true to delete it?(y/n)");
sign=getchar();
if(sign=='y'||sign=='Y')
{
Info p=softLib;
softLib=softLib->next;
p->next=NULL;
}
}
else
{
softLib=softLib->next;
}
}
printf("搜索完毕!");
}
void getFitPrice(SoftInfo *&softLib,float price)
{
while(softLib!=NULL)
{
if(softLib->sfPrice<price)
{
showSigleInfo(softLib);
}
softLib=softLib->next;
}
printf("搜索完毕!");
}
void getSoldInfo(SoftInfo *&softLib,char * name)
{
while(softLib!=NULL)
{
if(softLib->sfName==name)
{
printf("软件名:%s\n",softLib->sfName);
printf("售出日期:%d\n",softLib->sfSoldDate);
printf("售出总量:%d\n",softLib->sfSoldNum);
printf("售出价格:%f\n",softLib->sfPrice);
}
softLib=softLib->next;
}
printf("搜索完毕!");
}
void getDevProInfo(SoftInfo *&softLib,char * name)
{
while(softLib!=NULL)
{
if(softLib->sfDevName==name)
{
printf("软件名:%s\n",softLib->sfName);
printf("售出总额:%d\n",(softLib->sfSoldNum)*(softLib->sfPrice));
printf("售出总量:%d\n",softLib->sfSoldNum);
}
softLib=softLib->next;
}
printf("搜索完毕!");
}
int main()
{
SoftInfo *softLib;
softLib=NULL;
initial(softLib);
read(softLib);
showInfo(softLib);
return 0;
}