---------一下是源码
#include
#include
#define N 30
#include
struct recipe{
char food[10];
float price;
struct recipe *next;
};
struct recipe* creat()
{ int x;
int i=0;
struct recipe *head,*p,*tail;
head=tail=NULL;
printf("请输入新添加的菜品数量:");
scanf("%d",&x);
for(i=0;i
p=(struct recipe *)malloc(sizeof(struct recipe));
if(p==NULL)
{ printf("分配内存失败.");
exit(1);
}
p->next=NULL;
printf("请输入菜品的名称:");
scanf("%s",p->food);
printf("请输入菜品价格:");
scanf("%f",&p->price);
if(head==NULL)
{
head=p;
tail=p;
}
else
{ tail->next=p;
tail=p;
}
}
return head;
}
void displayRecipe(struct recipe *p)
{
printf("\t\t菜名--------------------------------价格\n");
while(p!=NULL)
{
printf("\t\t%s-------------------------------%f\n",p->food,p->price);
p=p->next;
}
}
int choosemenu(){
printf("\t\t\t[1]输入新的菜品信息\n");
printf("\t\t\t[2]查看现有菜品信息\t\n");
printf("\t\t\t[3]将现有菜品价格从小到大排序\t\n");
printf("\t\t\t[4]查找现有菜品信息\t\n");
printf("\t\t\t[5]删除现有菜品信息\t\n");
printf("\t\t\t[6]保存修改菜品信息\t\n");
printf("\t\t\t[7]退出菜品信息管理系统\t\n");
printf("\t\t\t[8]读取已有文件信息.\t\n");
printf("\t\t\t[9]清屏。\t\n");
printf("\t\t\t请选择: \n");
return 0;
}
struct recipe *Newsth(struct recipe *p)
{
struct recipe *m;
if((m=(struct recipe *)malloc(sizeof(struct recipe)))==NULL)
{
printf("分配内存失败");
exit(1);
}
printf("请输入新输入的菜品名称:");
scanf("%s",m->food);
printf("请输入新输入的菜品价格:");
scanf("%f",&m->price);
m->next=p;
return m;
}
struct recipe *sort(struct recipe *b)
{
struct recipe *p,*pre_min,*min,*first,*tail;
first=NULL;
while(b->next!=NULL)
{
for(p=b,min=b;p->next!=NULL;p=p->next)
{
if((p->next->price)<(min->price))
{
pre_min=p;//保留当前所找到最小节点的前驱节点
min=p->next;//保留当前最小节点
}
}
if(b==min)
{
b=b->next;
}
else
{
pre_min->next=min->next;//将当前最小节点移出链表
}
if(first==NULL)
{
first=min;
tail=first;
}
else
{
tail->next=min;
tail=min;
}
}
if(b->next==NULL)
{
tail->next=b;
tail=b;
}
return first;
}
void search(struct recipe *d)
{ char name[10];
printf("请输入需要查找的菜品名称:");
scanf("%s",name);
while(strcmp(d->food,name)!=0)
{
d=d->next;
if(d==NULL){
printf("输入有误,请重新输入.\n");
break;}
}
if(d!=NULL) printf("你要查找的菜品信息为%s,价格为%f\n",d->food,d->price);
}
struct recipe *Delete(struct recipe *h)
{ struct recipe *f,*j,*start;
char target[10];
start=h;
start->next=h->next;
printf("请输入你想要删除的菜品的名称:");
scanf("%s",target);
while(strcmp(h->food,target)!=0)
{
if(h->next->next==NULL)
j=h;
h=h->next;
}
if(h->next==NULL)
{
j->next=NULL;
free(h);
}
else{
strcpy(h->food,h->next->food);
h->price=h->next->price;
f=h->next;
if(h->next->next!=NULL)
h->next=h->next->next;
else h->next=NULL;
free(f);
}
return start;
}
void save(struct recipe *g)
{
FILE *fp;
if((fp=fopen("d:\recipe.txt","w"))==NULL)
{
printf("无法打开文件.\n");
exit(0);
}
while(g!=NULL)
{
fprintf(fp,"\t\t%s\t\t\t%f\n",g->food,g->price);
g=g->next;
}
fclose(fp);
}
void read(struct recipe *j){
FILE *f;
if((f=fopen("d://recipe.txt","r"))==NULL)
{
printf("无法读取文件.\n");
exit(0);
}
while(j!=NULL)
{
fscanf(f,"\t\t%s\t\t\t%f\n",j->food,&j->price);
printf("\t\t%s\t\t\t%f\n",j->food,j->price);
j=j->next;
}
fclose(f);
}
void cls()
{
system("cls");
}
void main(){
int n=0;
struct recipe *head=NULL;
printf("--------------------欢迎进入订餐管理系统--------------------------\n");
printf("-------首次进入请确认你已写好菜品信息--------\n");
head=creat();
system("cls");
while(n!=7){
choosemenu();
scanf("%d",&n);
switch(n){
case 1:head=Newsth(head);
break;
case 2:displayRecipe(head);
break;
case 3:head=sort(head);
break;
case 4:search(head);
break;
case 5:head=Delete(head);
break;
case 6:save(head);
break;
case 7:printf("Thanks for your use!\n\n\n\n");
break;
case 8:read(head);
break;
case 9:cls();
break;
default:choosemenu();
printf("输入有误,请重新输入.\n");
}
}
system("pause");
}