//所使用的有头文件//#include<stdio.h>#include<string.h>#include<malloc.h>#include <stdlib.h>#include<conio.h>#define LEN sizeof(struct suopei)//结构体定义//struct suopei{ int suopeihao; //索赔编号 char fuwuzhan[20]; //服务站名称 char dipanhao[20]; //底盘号 char name[20]; //审核人 double suopeipay; //索赔金额 int year; //索赔日期 int month; int day; struct suopei next;};//函数声明//void daoruRec();void huanyinRec(); void xianshiRec(); void lishiRec(); void xiugaiRec(); void shanchuRec(); void charuRec(); void baocunInfo(); struct suopei suopeibianhao(struct suopei head); void exit0(); int menu_select(); int checkdate(int year,int month,int day); int checksuopeihao(int suopeihao); //链表操作所用结构体指针////定义结构体指针head 为头指针p1 为输入数据缓存空间指针p2 为尾指针//struct suopei head=NULL,p1,p2,p3,p4,p5,p6; //索赔信息保存标志全局变量//int baocuninfo_flag=0;void huanyinRec(){ printf("\n\n\n\n\n"); printf("\t\t\t\n"); printf("\t\t\t 使用汽车索赔程序 \n"); printf("\t\t\t***\n"); printf("\n\n\t\t\t按任意键进入程序..."); getch(); system("cls");}//从磁盘文件导入信息到内存// void daoruRec(){ int n=0; char filename[20]; FILE *fp; printf("导入信息到内存...\n请输入文件的路径(f.txt):\n"); fflush(stdin); gets(filename); if((fp=fopen("d:\123.txt","r+"))==NULL) { printf("文件打开错误\n"); return; } p1=(struct suopei *)malloc(LEN);//动态内存分配函数 p3=(struct suopei *)malloc(LEN); head=p1; p1->next =NULL; while(!feof(fp)) { n++; fscanf(fp,"%d%s%s%s%lf%d%d%d", &p1->suopeihao,p1->fuwuzhan,p1->dipanhao,p1->name,&p1->suopeipay,&p1->year,&p1->month,&p1->day); p2=(struct suopei *)malloc(LEN);//p2指向新申请的节点 p3=p1; p1->next =p2; p1=p2; p1->next =NULL; } p3->next=NULL; free(p2); printf("\n %d项信息读取完毕,按任意键返回......\n",n); getchar(); system("cls"); baocuninfo_flag=0; if( fclose(fp) ) { printf( "Can not close the file!\n" ); exit(0); } }//显示所有索赔信息//void xianshiRec(){ char s; int count=0; double money=0; p2=head; if(p2==NULL) { printf("\n\n索赔信息数据库为空!!! \n是否开始添加索赔信息?(Y/N)"); fflush(stdin); scanf("%ch",&s); if(s=='y'||s=='Y') { charuRec(); } else { printf("\n 按任意键返回......\n"); getch(); system("cls"); } return ; } printf("所有索赔信息如下:\n"); printf("\n索赔编号 服务站名称 底盘号 审核人 索赔金额 索赔日期\n"); p2=suopeibianhao(head); while(p2!=NULL) { printf("%5d%11s%10s%10s%8.2lf%8d-%d-%d\n", p2->suopeihao,p2->fuwuzhan,p2->dipanhao,p2->name,p2->suopeipay,p2->year,p2->month,p2->day); count++; money+=p2->suopeipay; p2=p2->next; } printf("一共有%d条索赔信息。\n总索赔金额为%.2lf\n",count,money); printf("\n按任意键返回!......\n"); getch(); system("cls"); }//指定底盘号,显示索赔历史//void lishiRec(){ char dipanhao[20],s; int flag=0; p2=head; if(p2==NULL) { printf("\n\n索赔信息数据库为空!!!按任意键返回!"); getchar(); system("cls"); return; } printf("请输入要显示索赔历史的底盘号:\n"); scanf("%s",dipanhao); while(p2!=NULL) { if(strcmp(p2->dipanhao,dipanhao)==0) { printf("\n\t该底盘索赔历史信息如下:\n\t 索赔编号:"); printf("%d\n",p2->suopeihao ); printf("\t 服务站名称:"); printf("%s\n",p2->fuwuzhan ); printf("\t 底盘号:"); printf("%s\n",p2->dipanhao ); printf("\t 审核人:"); printf("%s\n",p2->name ); printf("\t 索赔金额:"); printf("%.2lf\n",p2->suopeipay ); printf("\t 索赔日期:"); printf("%d-%d-%d\n",p2->year,p2->month,p2->day ); flag=1; p2=p2->next ; } else p2=p2->next ; } if(flag==0) printf("\n\n找不到该索赔信息!!!\n"); printf("\n 按任意键返回......\n"); getch(); system("cls");} //按索赔编号,修改索赔信息//void xiugaiRec(){ char ch; int suopeihao,x,k,m; p1=head; p6=head; if(head==NULL) { getchar(); printf("\n 索赔信息数据库为空,不能修改,按任意键将返回:\n"); getchar(); system("cls"); return; } printf("请输入要修改的索赔信息的索赔编号:\n"); scanf("%d",&suopeihao); while(suopeihao!=p1->suopeihao &&p1->next!=NULL) p1=p1->next; if(suopeihao==p1->suopeihao) { printf("\n索赔编号 服务站名称 底盘号 审核人 索赔金额 索赔日期\n"); printf("%5d%11s%10s%10s%8.2lf%8d-%d-%d\n", p1->suopeihao,p1->fuwuzhan,p1->dipanhao,p1->name,p1->suopeipay,p1->year,p1->month,p1->day); printf("请输入要修改的索赔信息:\n"); printf("是否修改索赔编号,请选择Y/y(是),N/n(否):"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { printf("索赔编号:"); fflush(stdin); scanf("%d",&m ); do { k=checksuopeihao(m); if(k==1) { printf("输入错误,索赔编号不能重复!请重新输入:\n"); printf("索赔编号:"); fflush(stdin); scanf("%d",&m); } }while(k!=0); p1->suopeihao=m; } printf("是否修改服务站名称,请选择Y/y(是),N/n(否):"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { printf("服务站名称:\n"); fflush(stdin); scanf("%s",p1->fuwuzhan); } printf("是否修改底盘号,请选择Y/y(是),N/n(否):"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { printf("底盘号:\n"); fflush(stdin); scanf("%s",p1->dipanhao ); } printf("是否修改审核人,请选择Y/y(是),N/n(否):"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { printf(" 审核人:\n"); fflush(stdin); scanf("%s",p1->name ); } printf("是否修改索赔金额,请选择Y/y(是),N/n(否):"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { printf("索赔金额:\n"); fflush(stdin); scanf("%lf",&p1->suopeipay ); } printf("是否修改索赔日期,请选择Y/y(是),N/n(否):"); fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { printf("\n\n 索赔日期:\n"); fflush(stdin); scanf("%d%d%d",&p1->year,&p1->month,&p1->day ); do { x=checkdate(p1->year,p1->month,p1->day); if(x==0) { printf("\n\n 索赔日期输入错误,请重新输入索赔日期(空格隔开):\n"); scanf("%d%d%d",&p1->year,&p1->month,&p1->day ); } }while(x!=1); } printf("\n1项信息修改完毕!"); } else printf("\n\n找不到该索赔信息!"); getchar(); printf("按任意键将返回:\n"); getchar(); system("cls"); baocuninfo_flag=1; return;}//按索赔编号,删除索赔信息//void shanchuRec(){ int suopeihao; char c; if(head==NULL) { getchar(); printf("\n 索赔信息数据库为空,不能删除,按任意键将返回:\n"); getchar(); system("cls"); return; } p1=head; printf("请输入要删除的索赔信息的索赔编号:\n"); scanf("%d",&suopeihao); while(suopeihao!=p1->suopeihao&&p1->next!=NULL) { p2=p1; p1=p1->next ; } if(suopeihao==p1->suopeihao) { printf("确定要删除此索赔信息?(y/Y或n/N)\n"); fflush(stdin); scanf("%c",&c); if(c!='y'&&c!='Y') { fflush(stdin); printf("按任意键返回:\n"); getchar(); system("cls"); baocuninfo_flag=1; return; } if(head->next == NULL) { free(head); head = NULL; } else if(head == p1) { head = p1->next; free(p1); } else { p2->next = p1->next; free(p1); } printf("\n\t\t\t删除完毕!"); } else printf("\n\n找不到该信息!"); getchar(); printf("按任意键返回:\n"); getchar(); system("cls"); baocuninfo_flag=1; return;} //插入索赔信息//void charuRec(){ int n=0,m,i,x,k; p1=head; if(head==NULL) { getchar(); printf("\n 索赔信息数据库为空,只能插入第一个位置,按任意键将继续。:\n"); getchar(); printf("\n\n 请按索赔编号、服务站名称、底盘号、审核人、索赔金额、索赔日期(空格隔开)\n的形式输入1条索赔记录:\n"); printf("例如:' 1 十堰 11 张三 11 2015 6 22 ’\n"); head=(struct suopei *)malloc(LEN); head->next =NULL; scanf("%d%s%s%s%lf%d%d%d", &head->suopeihao,head->fuwuzhan,head->dipanhao,head->name,&head->suopeipay,&head->year,&head->month,&head->day); do { x=checkdate(head->year,head->month,head->day); if(x==0) { printf("\n\n 索赔日期输入错误,请重新输入索赔日期(空格隔开):\n"); scanf("%d%d%d",&head->year,&head->month,&head->day ); } }while(x!=1); printf("\n1项信息输入完毕,按任意键返回......\n"); fflush(stdin); getchar(); system("cls"); baocuninfo_flag=1; return; } do{ n++; p1=p1->next; }while(p1!=0); printf("索赔信息数据库中共有%d条记录,请输入插入的位置n:\n",n); do{ scanf("%d",&m); if(m<1||m>n+1) printf("\n\n 输入范围有误,请重新输入希望插入的正确位置(n>=1&&n<=%d):\n",n+1); } while(m<1||m>n+1); if(m==1) { p1=head; p6=head; getchar(); printf("\n\n 请按索赔编号、服务站名称、底盘号、审核人、索赔金额、索赔日期(空格隔开)\n的形式输入1条索赔记录:\n"); printf("例如:' 1 十堰 11 张三 11 2015 6 22 '\n"); head=(struct suopei *)malloc(LEN); scanf("%d%s%s%s%lf%d%d%d", &head->suopeihao,head->fuwuzhan,head->dipanhao,head->name,&head->suopeipay,&head->year,&head->month,&head->day); do { k=checksuopeihao(head->suopeihao); if(k==1) { printf("输入错误,索赔编号不能重复!请重新输入:\n"); printf("索赔编号:"); fflush(stdin); scanf("%d",&head->suopeihao); } }while(k!=0); do { x=checkdate(head->year,head->month,head->day); if(x==0) { printf("\n\n 索赔日期输入错误,请重新输入索赔日期(空格隔开):\n"); scanf("%d%d%d",&head->year,&head->month,&head->day ); } }while(x!=1); head->next =p1; printf("\n1项信息输入完毕,按任意键返回......\n"); fflush(stdin); getchar(); system("cls"); baocuninfo_flag=1; return; } if(m==n+1) { p1=head; p6=head; while( p1->next!=NULL) p1=p1->next; printf("\n\n 请按索赔编号、服务站名称、底盘号、审核人、索赔金额、索赔日期(空格隔开)\n的形式输入1条索赔记录:\n"); printf("例如:‘1 十堰 11 张三 11 2013 1 22 ’\n"); p2=(struct suopei *)malloc(LEN); scanf("%d%s%s%s%lf%d%d%d", &p2->suopeihao, p2->fuwuzhan, p2->dipanhao, p2->name,&p2->suopeipay, &p2->year,&p2->month,&p2->day); do { k=checksuopeihao(p2->suopeihao); if(k==1) { printf("输入错误,索赔编号不能重复!请重新输入:\n"); printf("索赔编号:"); fflush(stdin); scanf("%d",&p2->suopeihao); } }while(k!=0); do { x=checkdate(p2->year,p2->month,p2->day); if(x==0) { printf("\n\n 索赔日期输入错误,请重新输入索赔日期(空格隔开):\n"); scanf("%d%d%d",&p2->year,&p2->month,&p2->day ); } }while(x!=1); p2->next=NULL; p1->next =p2; printf("\n1项信息输入完毕,按任意键返回......\n"); fflush(stdin); getchar(); system("cls"); baocuninfo_flag=1; return; } p6=head; p1=head; for(i=1;i<m;i++) { p2=p1; p1=p1->next; } printf("\n\n 请按索赔编号、服务站名称、底盘号、审核人、索赔金额、索赔日期(空格隔开)\n的形式输入1条索赔记录:\n"); printf("例如:'1 十堰 11 张三 11 2015 6 22' \n"); p3=(struct suopei *)malloc(LEN); scanf("%d%s%s%s%lf%d%d%d", &p3->suopeihao,p3->fuwuzhan,p3->dipanhao,p3->name,&p3->suopeipay, &p3->year,&p3->month,&p3->day); do { k=checksuopeihao(p3->suopeihao); if(k==1) { printf("输入错误,索赔编号不能重复!请重新输入:\n"); printf("索赔编号:"); fflush(stdin); scanf("%d",&p3->suopeihao); } }while(k!=0); do { x=checkdate(p3->year,p3->month,p3->day); if(x==0) { printf("\n\n 索赔日期输入错误,请重新输入索赔日期(空格隔开):\n"); scanf("%d%d%d",&p3->year,&p3->month,&p3->day ); } }while(x!=1); p3->next=p1; p2->next =p3; printf("\n1项信息输入完毕,按任意键返回......\n"); fflush(stdin); getchar(); system("cls"); baocuninfo_flag=1; return;} //保存索赔信息// void baocunInfo(){ FILE *fp; char filename[20]; if(head==NULL) { printf("\n数据库中没有索赔信息,按任意键返回。\n"); getch(); system("cls"); return; } if(baocuninfo_flag==0) { printf("\n数据库中索赔信息已保存过,按任意键返回。\n"); getch(); system("cls"); return; } printf("保存文件中...\n请输入文件的路径(e.txt):\n"); fflush(stdin); gets(filename); if((fp=fopen(filename,"wb"))==NULL) { printf("\n数据库中索赔信息无法保存,按任意键返回。\n"); getch(); system("cls"); return; } p1=head; while(p1!=NULL) { fprintf(fp,"%5d%11s%10s%10s%8.2lf%14d%4d%10d\n", p1->suopeihao,p1->fuwuzhan,p1->dipanhao,p1->name,p1->suopeipay,p1->year,p1->month,p1->day); p1=p1->next; } fclose(fp); printf("\n数据库中索赔信息保存完毕,按任意键返回。\n"); getch(); system("cls"); baocuninfo_flag=0; return;}//退出//void exit0(){ char ch; if(baocuninfo_flag==1) { printf("索赔信息已修改,是否保存信息?(Y/y,N/n)") ; fflush(stdin); scanf("%c",&ch); if(ch=='Y'||ch=='y') { baocunInfo(); } } p1=head; while( p1!=NULL) { p2=p1->next; free(p1); p1=p2; }} //日期正确性//int checkdate(int year,int month,int day){ int n=0; if(year>0&&year<=9999&&month>0&&month<12) if((year%4==0&&year%100!=0)||(year%4==0&&year%400==0)) { if(month==2) { if(day>0&&day<=29) n=1; else n=0; } if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day>0&&day<=31) n=1; else n=0; } if(month==4||month==6||month==9||month==11) { if(day>0&&day<=30) n=1; else n=0; } } else { if(month==2) { if(day>0&&day<=28) n=1; else n=0; } if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day>0&&day<=31) n=1; else n=0; } if(month==4||month==6||month==9||month==11) { if(day>0&&day<=30) n=1; else n=0; } } return n;} //检验索赔编号是否唯一//int checksuopeihao(int suopeihao){ int n=0; p4=p6; do { if(p4->suopeihao==suopeihao) n=1; p5=p4; p4=p4->next; }while(p5->next!=NULL); while( p4!=NULL) { p5=p4->next; free(p1); p4=p5; } return n;}//索赔编号大小的排序//struct suopei *suopeibianhao(struct suopei *head){ struct suopei *temp; temp=(struct suopei *)malloc(LEN); for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(p1->suopeihao > p2->suopeihao) { memcpy(temp,p1,sizeof(struct suopei)-sizeof(p1->next)); memcpy(p1,p2,sizeof(struct suopei)-sizeof(p2->next)); memcpy(p2,temp,sizeof(struct suopei)-sizeof(temp->next)); } } } free(temp); return head;}//主函数//int main() {huanyinRec();daoruRec();for(;;){ switch(menu_select()){ case 1: system("cls"); xianshiRec();break;case 2: system("cls"); lishiRec();break;case 3: system("cls"); xiugaiRec();break;case 4: system("cls"); shanchuRec();break; case 5: system("cls"); charuRec();break;case 6: system("cls"); baocunInfo();break;case 7: system("cls"); daoruRec();break;case 0: system("cls"); exit0();return 0;default :{ getchar(); printf("\n 选择错误,请正确输入你的选择(0~5),:\n"); printf("\n 按任意键返回......\n"); getchar(); getchar(); system("cls"); }}}return 0;}//主菜单//int menu_select(){ int c;printf("\t\t**************菜单*******\n");printf("\t\t\t1.显示所有索赔信息\n");printf("\t\t\t2.按照指定底盘号,显示索赔历史\n");printf("\t\t\t3.按照指定索赔编号,修改索赔信息\n");printf("\t\t\t4.按照指定索赔编号,删除索赔信息\n");printf("\t\t\t5.按照指定索赔编号,插入索赔信息\n");printf("\t\t\t6.保存索赔信息\n");printf("\t\t\t7.导入\n");printf("\t\t\t0.退出(任何情况下按Ctrl+C 退出程序)\n");printf("\n 输入你的选择(0~7):\n");scanf("%d",&c);return c;}
if((fp=fopen("d:\123.txt","r+"))==NULL
改成
if((fp=fopen("d:\123.txt","r+"))==NULL
斜杠是转义字符,想要用斜杠本身的作用,就要用双斜杠表示
if((fp=fopen("d:\123.txt","r+"))==NULL)
修改为
if((fp=fopen("d:\\123.txt","r+"))==NULL)
或者
if((fp=fopen("d:/123.txt","r+"))==NULL)