程序改错,求赐教。
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <malloc.h>
#define NULL 0
struct carinfo
{
char num[18];
char name[12];
char type[5];
double price;
int date;
char chexing[20];
char corporation[20];
struct carinfo *next;
};
int n=10;
struct carinfo *head;
void main()
{
int i=0,j;
int cishu=3;
char name[15],password[10];
struct carinfo car[10];
strcpy(car[0].num,"CTXER5673423KI980");
strcpy(car[0].name,"audi");
strcpy(car[0].type,"S8");
car[0].price=228.43;
car[0].date=2010;
strcpy(car[0].chexing,"haohuaxing");
strcpy(car[0].corporation,"audi");
strcpy(car[1].num,"ATRFNL33458719L43");
strcpy(car[1].name,"audi");
strcpy(car[1].type,"A5");
car[1].price=50.45;
car[1].date=2009;
strcpy(car[1].chexing,"shushixing");
strcpy(car[1].corporation,"audi");
strcpy(car[2].num,"IOJENLF3777908KE4");
strcpy(car[2].name,"baoma");
strcpy(car[2].type,"3");
car[2].price=54.45;
car[2].date=2010;
strcpy(car[2].chexing,"zhongxing");
strcpy(car[2].corporation,"baoma");
strcpy(car[3].num,"KEIFDS32545LI6574");
strcpy(car[3].name,"baoma");
strcpy(car[3].type,"1");
car[3].price=37.70;
car[3].date=2010;
strcpy(car[3].chexing,"jincouxing");
strcpy(car[3].corporation,"baoma");
strcpy(car[4].num,"EIWOQ3411087JH567");
strcpy(car[4].name,"benchi");
strcpy(car[4].type,"CLS");
car[4].price=46.44;
car[4].date=2010;
strcpy(car[4].chexing,"dazhongxing");
strcpy(car[4].corporation,"benchi");
strcpy(car[5].num,"QIEOW327658JK4567");
strcpy(car[5].name,"benchi");
strcpy(car[5].type,"C");
car[5].price=34.00;
car[5].date=2009;
strcpy(car[5].chexing,"zhongxing");
strcpy(car[5].corporation,"benchi");
strcpy(car[6].num,"OUEND34675L763335");
strcpy(car[6].name,"dongfeng");
strcpy(car[6].type,"H30");
car[6].price=6.58;
car[6].date=2008;
strcpy(car[6].chexing,"jincouxing");
strcpy(car[6].corporation,"dongfeng");
strcpy(car[7].num,"KDLSH32575K843167");
strcpy(car[7].name,"dongfeng");
strcpy(car[7].type,"S30");
car[7].price=9.98;
car[7].date=2009;
strcpy(car[7].chexing,"jincouxing");
strcpy(car[7].corporation,"dongfeng");
strcpy(car[8].num,"EWODLS32564L26676");
strcpy(car[8].name,"fengtian");
strcpy(car[8].type,"RAV4");
car[8].price=31.88;
car[8].date=2009;
strcpy(car[8].chexing,"weixing");
strcpy(car[8].corporation,"fengtian");
strcpy(car[9].num,"NCMDL445687K32154");
strcpy(car[9].name,"fengtian");
strcpy(car[9].type,"4Runner");
car[9].price=69.00;
car[9].date=2009;
strcpy(car[9].chexing,"paoche");
strcpy(car[9].corporation,"fengtian");
head=&car[0];
car[0].next=&car[1];
car[1].next=&car[2];
car[2].next=&car[3];
car[3].next=&car[4];
car[4].next=&car[5];
car[5].next=&car[6];
car[6].next=&car[7];
car[7].next=&car[8];
car[8].next=&car[9];
car[9].next=NULL;
void print();
void save();
struct carinfo *del();
struct carinfo *add();
void search();
void update();
void order();
void display();
void open();
printf("********************************************************************************\n");
printf("\n");
printf("=====================欢-迎-进-入-汽-车-信-息-管-理-系-统========================\n");
printf("\n");
printf("********************************************************************************\n");
again1: printf("请输入您的用户名,您还有%d次机会:\n",cishu--);
scanf("%s",name);
if(strcmp(name,"administrator")!=0&&strcmp(name,"user")!=0&&i<2)
{
printf("\n");
printf("用户名错误!\n");
i++;
goto again1;
}
cishu=3;
i=0;
if(strcmp(name,"administrator")==0)
{
again2:printf("请输入管理员密码,您还有%d次机会:\n",cishu--);
scanf("%s",password);
if(strcmp(password,"123456")!=0&&i<2)
{
printf("\n");
printf("密码错误!\n");
i++;
goto again2;
}
if(strcmp(password,"123456")==0)
while(1)
{
printf("--------------------------------\n");
printf(" 请选择所需功能: \n");
printf("--------------------------------\n");
printf(" 1. 显示记录\n 2. 查找\n 3. 添加记录\n 4. 删除记录\n 5. 更新记录\n 6. 代号排序\n 7. 按类别显示记录\n 8. 保存记录到磁盘\n 9. 读入磁盘文件\n 0. 退出\n");
printf("--------------------------------\n");
scanf("%d",&j);
switch(j)
{
case 1:print();
break;
case 2:search();
break;
case 3:head=add();
break;
case 4:head=del();
break;
case 5:update();
break;
case 6:order();
break;
case 7:display();
break;
case 8:save();
break;
case 9:open();
break;
case 0 : exit(0);
default :
break;
}
}
}
if(strcmp(name,"user")==0)
while(1)
{
printf("--------------------------------\n");
printf(" 请选择所需功能: \n");
printf("--------------------------------\n");
printf(" 1. 显示记录\n 2. 查找\n 0. 退出\n");
printf("--------------------------------\n");
scanf("%d",&j);
switch(j)
{
case 1:print();
break;
case 2:search();
break;
case 0:exit(0);
default :
break;
}
}
}
void print()
{
struct carinfo *p;
p=head;
printf("%d条记录:\n",n);
if(head!=NULL)
do
{
printf("%s %-10s %-8s %-6.2f %-5d %-14s %-10s\n",p->num,p->name,p->type,p->price,p->date,p->chexing,p->corporation);
p=p->next;
}while(p!=NULL);
}
struct carinfo *add()
{
struct carinfo *p0,*p1;
char choice;
begin4:
p1=head;
p0=(struct carinfo *)malloc(sizeof(struct carinfo));
printf("请输入:代号 车名 型号 价格/万元 日期 车型 公司\n");
scanf("%s %s %s %f %d %s %s",p0->num,p0->name,p0->type,&p0->price,&p0->date,p0->chexing,p0->corporation);
if(p0->num!=p1->num)
{
if(p1!=NULL)
p0->next=p1;
else
p0->next=NULL;
head=p0;
printf("成功添加,现存%d条记录\n",++n);
}
else
printf("该车已存在!\n");
printf("继续添加吗?y/n\n");
choice=getchar();
choice=getchar();
putchar('\n');
if(choice=='y')
goto begin4;
return(head);
}
struct carinfo *del()
{
struct carinfo *p1,*p2;
char num[17];
char choice='y';
if(head==NULL)
{
printf("无车辆可删除!\n");
return(head);
}
else
{
begin3:
printf("请输入要删除的代号:\n");
scanf("%s",num);
p1=head;
while((strcmp(num,p1->num)!=0)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(strcmp(num,p1->num)==0)
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("车辆%s已删除,现存%d条记录\n",num,--n);
}
else
printf("无要删除车辆!\n");
printf("继续删除吗?y/n\n");
choice=getchar();
choice=getchar();
putchar('\n');
if(choice=='y')
goto begin3;
}
return(head);
}
void save()
{
struct carinfo c[50],*p;
FILE *fp;
char filename[15];
int i=0;
p=head;
while(p!=NULL)
{
strcpy(c[i].num,p->num);
strcpy(c[i].name,p->name);
strcpy(c[i].type,p->type);
c[i].price=p->price;
c[i].date=p->date;
strcpy(c[i].chexing,p->chexing);
strcpy(c[i].corporation,p->corporation);
p=p->next;
i++;
}
start4:printf("请输入要保存的文件名:\n");
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{
printf("无法打开文件\n");
goto start4;
}
for(i=0,p=head;p!=NULL;p=p->next,i++)
if(fwrite(&c[i],sizeof(struct carinfo),1,fp)!=1)
printf("文件写入失败\n");
fclose(fp);
}
void search()
{
struct carinfo *p;
char num[18];
char choice;
begin1:
printf("请输入要查询的车辆代号:\n");
scanf("%s",num);
p=head;
while((strcmp(num,p->num)!=0)&&(p->next!=NULL))
{
p=p->next;
}
if(strcmp(num,p->num)==0)
{
printf("该车辆信息为:\n");
printf("%s %s %s %f %d %s %s\n",p->num,p->name,p->type,p->price,p->date,p->chexing,p->corporation);
}
else
printf("该车辆不存在!\n");
printf("继续查找吗?y/n\n");
choice=getchar();
choice=getchar();
putchar('\n');
if(choice=='y')
goto begin1;
}
void update()
{
char num[17];
char choice;
struct carinfo *p;
begin2:
p=head;
printf("请输入要更新的车辆代号:\n");
scanf("%s",num);
while((strcmp(num,p->num)!=0)&&(p->next!=NULL))
{
p=p->next;
}
if(strcmp(num,p->num)==0)
{
printf("\n%s %s %s %f %d %s %s\n",p->num,p->name,p->type,p->price,p->date,p->chexing,p->corporation);
printf("请输入更新后的信息:价格/万元,日期\n");
scanf("%f,%d",&p->price,&p->date);
printf("更新成功!更新后的信息为:\n");
printf("\n%s %s %s %f %d %s %s\n",p->num,p->name,p->type,p->price,p->date,p->chexing,p->corporation);
}
else
printf("无该车辆代号!\n");
printf("继续更新吗?y/n\n");
choice=getchar();
choice=getchar();
putchar('\n');
if(choice=='y')
goto begin2;
}
void display()
{
char choice,company[20];
struct carinfo *p;
int m=0;
loop1:
printf("请输入要查询的公司名:\n");
gets(company);
gets(company);
p=head;
if(p==NULL)
printf("无车记录\n");
while(p!=NULL)
{
if(strcmp(p->corporation,company)!=0)
p=p->next;
else
{
printf("%s %-10s %-8s %-6.2f %-5d %-14s %-10s\n",p->num,p->name,p->type,p->price,p->date,p->chexing,p->corporation);
m++;
p=p->next;
}
}
if(m==0)
printf("无该公司的车!\n");
printf("继续操作吗?y/n\n");
choice=getchar();
choice=getchar();
putchar('\n');
if(choice=='y')
goto loop1;
}
void open ()
{
FILE *fp;
int i=0;
char retry ;
struct carinfo temp[50];
char datafile[15];
loop:
printf("请输入要打开的文件名:\n ");
scanf("s%",datafile);
if((fp=fopen(datafile,"rb"))==NULL)
{
printf(" open file s% fail\n",datafile);
printf ("do you want to open datafile again? (y\n)\n");
scanf("c%",&retry);
if(retry=='y'||retry=='Y')
goto loop ;
fclose(fp);
}
else
printf("the content of s% as follow\n",datafile);
while (fread(&temp[i++],sizeof(struct carinfo),1,fp)!=NULL)
{
printf("%s %-10s %-8s %-6.2f %-5d %-14s %-10s\n",temp->num,temp->name,temp->type,temp->price,temp->date,temp->chexing,temp->corporation);
}
fclose(fp);
}
void order()
{
struct carinfo c[50],*p;
struct carinfo temp;
int i;
int j;
p=head;
while(p!=NULL)
{
strcpy(c[i].num,p->num);
strcpy(c[i].name,p->name);
strcpy(c[i].type,p->type);
c[i].price=p->price;
c[i].date=p->date;
strcpy(c[i].chexing,p->chexing);
strcpy(c[i].corporation,p->corporation);
p=p->next;
i++;
}
for(i=0;i<50 ;i++)
for(j=0;j<50-i;j++)
{
if(strcmp(c[j].num,c[j+1].num)>0)
strcpy(temp.num,c[j].num);
strcpy(temp.name,c[j].name);
strcpy(temp.type,c[j].type);
temp.price=c[j].price;
temp.date=c[j].date;
strcpy(temp.chexing,c[j].chexing);
strcpy(temp.corporation,c[j ].corporation);
strcpy(c[j].num,c[j+1].num);
strcpy(c[j].name,c[j+1].name);
strcpy(c[j].type,c[j+1].type);
c[j].price=c[j+1].price;
c[j].date=c[j+1].date;
strcpy(c[j].chexing,c[j+1].chexing);
strcpy(c[j].corporation,c[j+1].corporation);
strcpy(c[j+1].num,temp.num);
strcpy(c[j+1].name,temp.name);
strcpy(c[j+1].type,temp.type);
c[j+1].price=temp.price;
c[j+1].date=temp.date;
strcpy(c[j+1].chexing,temp.chexing);
strcpy(c[j+1].corporation,temp.corporation);
}
printf("the sorted info is:\n");
for(i=0;i<50;i++)
printf("%s %s %s %d %d %s %s\n",c[i].num,c[i].name,c[i].type,c[i].price,c[i].date,c[i].chexing,c[i].corporation);
}
问题:1:功能6不能实现,求调试;2:怎么对链表节点进行排序?