求大侠们指导指导我编写的小程序.
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>#define N 100struct info_type{ char name[8]; char time[8]; char room[8]; int number; int price; int day; float discount; float income;}client[N];//输入函数部分void enter() { struct info_type client[N];// printf("输入人数\n:");// scanf("%d",&peo); int j; char c[2]; FILE *fp; if((fp=fopen("data.txt","w"))==NULL) //以写的方式打开,并判断是否将文件读完 { printf("不能打开文件!\n"); exit(0); } for(j=0;j<N;j++) { fwrite(&client[j],sizeof(struct info_type),1,fp); //数据块输出函数,用于将数据输出到磁盘文件中 } while(1) { printf("请输入顾客姓名:\n"); scanf("%s",client[N].name); printf("请输入入住时间:\n"); scanf("%s",client[N].time); printf("请输入住宿房间:\n"); scanf("%s",client[N].room); printf("请输入顾客数量:\n"); scanf("%d",&client[N].number); printf("请输入每日价格:\n"); scanf("%d",&client[N].price); printf("请输入住宿天数:\n"); scanf("%d",&client[N].day); printf("请输入每日折扣率:\n"); scanf("%f",&client[N].discount); printf("请输入应实收的金额:\n"); scanf("%f",&client[N].income); if(fwrite(&client[N],sizeof(struct info_type),1,fp)!=1) printf("文件读入错误!\n"); else printf("成功!\n"); printf("是否要继续输入?( 是[y]/否[n]) \n"); scanf("%s",c); if(strcmp(c,"n")==0)fclose(fp); } fclose(fp);}//修改部分void change(){// struct info_type client[N]; int i,j; printf("请输入要修改的信息的顾客姓名:\n"); scanf("%s",client[N].name); while(client[j].name!=client[i].name) { j++; } printf("请输入要修改的信息的顾客姓名、入住时间、住宿房间、顾客数量、每日价格、住宿天数、折扣率、实收金额\n"); scanf("%s%s%s%d%f%f%f%f",client[i].name,client[i].time,client[i].room,&client[i].number,&client[i].price,&client[i].day,&client[i].discount,&client[i].income); printf("修改成功\n"); printf("按任意键退出\n"); getchar();}//删除部分int del(struct info_type client[N],int a){// struct info_type client[N]; int i,j; i=0; printf("请输入要删除的信息的顾客房间号:\n"); scanf("%d",client[j].room); while(client[j].room!=client[i].room) { i++; } for(i;i<a-1;i++); { strcpy(client[i].room,client[i+1].room); }return a-1; }//以下为浏览模块void scan() { int j; FILE *fp; fp=fopen("data.txt","rb"); for(j=0;j<N;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)==1) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%d\n",client[j].room); printf(" 顾客数量:%d\n",client[j].number); printf(" 每日价格:%f\n",client[j].price); printf(" 住宿天数:%d\n",client[j].day); printf(" 折扣率:%f\n",client[j].discount); printf(" 实收金额:%f\n",client[j].income); printf("**************************************************************\n"); } else break; } fclose(fp);}/*以下为查询模块*/void search() { int flag,j,x; char w[20]; FILE *fp; char v[20]; printf("1.按客户名查询\n"); printf("2.按住宿房间查询\n"); printf("请选择查询方式:\n"); scanf("%d",&x); if(x==2) { flag=0; printf("请输入客户名:"); scanf("%s",&v); fp=fopen("data.txt","rb"); for(j=0;j<100;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)!=1) break; if(strcmp(client[j].room,v)==0) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%d\n",client[j].room); printf(" 顾客数量:%d\n",client[j].number); printf(" 每日价格:%f\n",client[j].price); printf(" 住宿天数:%d\n",client[j].day); printf(" 折扣率:%f\n",client[j].discount); printf(" 实收金额:%f\n",client[j].income); printf("***********************************************************************\n"); flag=1; } } if(flag==0) printf("客户名不存在!\n"); fclose(fp); } else if(x==1) { flag=0; printf("请输入客户名:"); scanf("%s",w); fp=fopen("data.txt","rb"); for(j=0;j<N;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)!=1) break; if(strcmp(client[j].name,w)==0) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%d\n",client[j].room); printf(" 顾客数量:%d\n",client[j].number); printf(" 每日价格:%f\n",client[j].price); printf(" 住宿天数:%d\n",client[j].day); printf(" 折扣率:%f\n",client[j].discount); printf(" 实收金额:%s\n",client[j].income); printf("*******************************************************************\n"); flag=1; } } if(flag==0) printf(" 客户名不存在!\n"); fclose(fp); } else printf("错误!\n");} /*以下为排序模块*/void sort(){ int j,k,l,m,x; struct info_type client[N];// char client[].name FILE *fp; printf(" ***********************************\n"); printf(" **51---------------按顾客姓名排序**\n"); printf(" **52---------------按入住时间排序**\n"); printf(" **53---------------按住宿房间排序**\n"); printf(" **54---------------按顾客数量排序**\n"); printf(" **55---------------按每日价格排序**\n"); printf(" **56-----------------按折扣率排序**\n"); printf(" **56---------------按实收金额排序**\n"); printf(" **50-------------------返回主菜单**\n"); printf(" ***********************************\n"); scanf("%d",&x); if(x==1) { fp=fopen("data.txt","rb"); for(l=0;l<99;l++) for(j=l+1;j<=N;j++) if(client[l]. name<client[j].name) { client[m].name=client[l].name; client[l].name=client[k].name; client[k].name=client[m].name; } } fp=fopen("data.txt","rb"); for(j=0;j<N;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)==1) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%s\n",client[j].room); printf(" 顾客数量:%s\n",client[j].number); printf(" 每日价格:%s\n",client[j].price); printf(" 住宿天数:%s\n",client[j].day); printf(" 折扣率:%s\n",client[j].discount); printf(" 实收金额:%s\n",client[j].income); printf("**************************************************************\n"); } else break; } fclose(fp);}void menu()//菜单函数{ printf(" *1----------------输入住宿结帐信息*\n"); printf(" *2----------------修改住宿结帐信息*\n"); printf(" *3----------------删除住宿结帐信息*\n"); printf(" *4----------------查找住宿结帐信息*\n"); printf(" *5----------------住宿结帐信息排序*\n"); printf(" *6----------------显示住宿结帐信息*\n"); printf(" *7----------------统计住宿结帐信息*\n"); printf(" *0----------------退出住宿管理系统*\n"); printf("请选您需要的服务:\n");}void main() { int sel,a; printf(" ***********************************\n"); // Sleep(1000);// 执行挂起一段时间 printf(" 欢迎进入住宿结帐系统 \n" );// Sleep(1000); printf(" ***********************************\n"); // Sleep(1000); //菜单显示 printf(" *1----------------输入住宿结帐信息*\n");// Sleep(1000); printf(" *2----------------修改住宿结帐信息*\n");// Sleep(1000); printf(" *3----------------删除住宿结帐信息*\n");// Sleep(1000); printf(" *4----------------查找住宿结帐信息*\n");// Sleep(1000); printf(" *5----------------住宿结帐信息排序*\n");// Sleep(1000); printf(" *6----------------显示住宿结帐信息*\n");// Sleep(1000); printf(" *7----------------统计住宿结帐信息*\n");// Sleep(1000); printf(" *0----------------退出住宿管理系统*\n");// Sleep(1000); printf("请选您需要的服务:\n"); scanf("%d",&sel);//扫描键盘 switch(sel)//选择菜单 { case 1:printf("请选择输入方式:\n"); printf(" ***********************************\n"); printf(" *****11---------------文件操作*****\n"); printf(" *****12---------------键盘操作*****\n"); printf(" *****10-------------返回主菜单*****\n"); printf(" ***********************************\n"); scanf("%d",&a); switch(a) { case 11:enter(); case 10:menu(); } break; case 2: printf(" ***********************************\n"); printf(" *****确认修改请输入1*****\n"); printf(" *****取消修改请输入0*****\n"); printf(" ***********************************\n"); scanf("%d",&a);//扫描键盘 switch(a) { case 1:change(); case 0:menu(); } break; case 3: printf(" ***********************************\n"); printf(" *****确认删除请输入1*****\n"); printf(" *****取消删除请输入0*****\n"); printf(" ***********************************\n"); break; case 4: printf(" ***********************************\n"); printf(" **41---------------按住宿天数查询**\n"); printf(" **42---------------按住宿房间查询**\n"); printf(" **40-------------------返回主菜单**\n"); printf(" ***********************************\n"); break; case 5: break; case 6:printf("请输入顾客姓名:\n"); break; case 0:(exit(1));break; };}
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<conio.h>#define N 100struct info_type{ char name[8]; char time[8]; char room[8]; int number; int price; int day; float discount; float income;}client[N];//输入函数部分void enter() { struct info_type client[N]; // printf("输入人数\n:"); // scanf("%d",&peo); int j; char c[2]; FILE *fp; if((fp=fopen("data.txt","w"))==NULL) //以写的方式打开,并判断是否将文件读完 { printf("不能打开文件!\n"); exit(0); } for(j=0;j<N;j++) { fwrite(&client[j],sizeof(struct info_type),1,fp); //数据块输出函数,用于将数据输出到磁盘文件中 } while(1) { printf("请输入顾客姓名:\n"); scanf("%s",client[N].name); printf("请输入入住时间:\n"); scanf("%s",client[N].time); printf("请输入住宿房间:\n"); scanf("%s",client[N].room); printf("请输入顾客数量:\n"); scanf("%d",&client[N].number); printf("请输入每日价格:\n"); scanf("%d",&client[N].price); printf("请输入住宿天数:\n"); scanf("%d",&client[N].day); printf("请输入每日折扣率:\n"); scanf("%f",&client[N].discount); printf("请输入应实收的金额:\n"); scanf("%f",&client[N].income); if(fwrite(&client[N],sizeof(struct info_type),1,fp)!=1) printf("文件读入错误!\n"); else printf("成功!\n"); printf("是否要继续输入?( 是[y]/否[n]) \n"); scanf("%s",c); if(strcmp(c,"n")==0) fclose(fp); } fclose(fp);}//修改部分void change(){ // struct info_type client[N]; int i=0; char str[8]; printf("请输入要修改的信息的顾客姓名:\n"); scanf("%s",str); while(strcmp(client[i].name,str)!=0) { i++; } printf("请输入要修改的信息的顾客姓名、入住时间、住宿房间、顾客数量、每日价格、住宿天数、折扣率、实收金额\n"); scanf("%s %s %s %d %d %d %f %f",client[i].name,client[i].time,client[i].room,&client[i].number,&client[i].price,&client[i].day,&client[i].discount,&client[i].income); //这里格式错误 printf("修改成功\n"); printf("按任意键退出\n"); getchar();}//删除部分int del(struct info_type client[N],int a){ // struct info_type client[N]; int i,j; i=0; printf("请输入要删除的信息的顾客房间号:\n"); scanf("%d",client[j].room); while(client[j].room!=client[i].room) { i++; } for(i;i<a-1;i++); { strcpy(client[i].room,client[i+1].room); } return a-1; }//以下为浏览模块void scan() { int j; FILE *fp; fp=fopen("data.txt","rb"); for(j=0;j<N;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)==1) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%d\n",client[j].room); printf(" 顾客数量:%d\n",client[j].number); printf(" 每日价格:%f\n",client[j].price); printf(" 住宿天数:%d\n",client[j].day); printf(" 折扣率:%f\n",client[j].discount); printf(" 实收金额:%f\n",client[j].income); printf("**************************************************************\n"); } else break; } fclose(fp);}/*以下为查询模块*/void search() { int flag,j,x; char w[20]; FILE *fp; char v[20]; printf("1.按客户名查询\n"); printf("2.按住宿房间查询\n"); printf("请选择查询方式:\n"); scanf("%d",&x); if(x==2) { flag=0; printf("请输入住宿房间:"); scanf("%s",&v); fp=fopen("data.txt","rb"); for(j=0;j<100;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)!=1) break; if(strcmp(client[j].room,v)==0) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%d\n",client[j].room); printf(" 顾客数量:%d\n",client[j].number); printf(" 每日价格:%f\n",client[j].price); printf(" 住宿天数:%d\n",client[j].day); printf(" 折扣率:%f\n",client[j].discount); printf(" 实收金额:%f\n",client[j].income); printf("***********************************************************************\n"); flag=1; } } if(flag==0) printf("住宿房间不存在!\n"); fclose(fp); } else if(x==1) { flag=0; printf("请输入客户名:"); scanf("%s",w); fp=fopen("data.txt","rb"); for(j=0;j<N;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)!=1) break; if(strcmp(client[j].name,w)==0) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%d\n",client[j].room); printf(" 顾客数量:%d\n",client[j].number); printf(" 每日价格:%f\n",client[j].price); printf(" 住宿天数:%d\n",client[j].day); printf(" 折扣率:%f\n",client[j].discount); printf(" 实收金额:%f\n",client[j].income); //这里错了 printf("*******************************************************************\n"); flag=1; } } if(flag==0) printf(" 客户名不存在!\n"); fclose(fp); } else printf("输入错误!\n");} /*以下为排序模块*/void sort(){ int j,l,m,x; char temp[8]; struct info_type client[N]; FILE *fp; printf(" ***********************************\n"); printf(" **51---------------按顾客姓名排序**\n"); printf(" **52---------------按入住时间排序**\n"); printf(" **53---------------按住宿房间排序**\n"); printf(" **54---------------按顾客数量排序**\n"); printf(" **55---------------按每日价格排序**\n"); printf(" **56-----------------按折扣率排序**\n"); printf(" **56---------------按实收金额排序**\n"); printf(" **50-------------------返回主菜单**\n"); printf(" ***********************************\n"); scanf("%d",&x); if(x==1) { fp=fopen("data.txt","rb"); for(l=0;l<99;l++) { for(j=l+1;j<N;j++) //这里写错了 { if(strcmp(client[l].name,client[j].name)>0) //这里写错了 { strcpy(temp,client[l].name); strcpy(client[l].name,client[j].name); strcpy(client[j].name,temp); } } } } fp=fopen("data.txt","rb"); for(j=0;j<N;j++) { if(fread(&client[j],sizeof(struct info_type),1,fp)==1) { printf(" 客户名:%s\n",client[j].name); printf(" 住宿房间:%s\n",client[j].room); printf(" 顾客数量:%s\n",client[j].number); printf(" 每日价格:%s\n",client[j].price); printf(" 住宿天数:%s\n",client[j].day); printf(" 折扣率:%s\n",client[j].discount); printf(" 实收金额:%s\n",client[j].income); printf("**************************************************************\n"); } else break; } fclose(fp);}void menu()//菜单函数{ printf(" *1----------------输入住宿结帐信息*\n"); printf(" *2----------------修改住宿结帐信息*\n"); printf(" *3----------------删除住宿结帐信息*\n"); printf(" *4----------------查找住宿结帐信息*\n"); printf(" *5----------------住宿结帐信息排序*\n"); printf(" *6----------------显示住宿结帐信息*\n"); printf(" *7----------------统计住宿结帐信息*\n"); printf(" *0----------------退出住宿管理系统*\n"); printf("请选您需要的服务:\n");}void main() { int sel,a; printf(" ***********************************\n"); printf(" 欢迎进入住宿结帐系统 \n" ); printf(" ***********************************\n"); while(1) { menu(); scanf("%d",&sel);//扫描键盘 switch(sel)//选择菜单 { case 1: printf("请选择输入方式:\n"); printf(" ***********************************\n"); printf(" *****11---------------文件操作*****\n"); printf(" *****12---------------键盘操作*****\n"); printf(" *****10-------------返回主菜单*****\n"); printf(" ***********************************\n"); scanf("%d",&a); switch(a) { case 11: enter(); } break; case 2: printf(" ***********************************\n"); printf(" *****确认修改请输入1*****\n"); printf(" *****取消修改请输入0*****\n"); printf(" ***********************************\n"); scanf("%d",&a);//扫描键盘 switch(a) { case 1: change(); } break; case 3: printf(" ***********************************\n"); printf(" *****确认删除请输入1*****\n"); printf(" *****取消删除请输入0*****\n"); printf(" ***********************************\n"); break; case 4: printf(" ***********************************\n"); printf(" **41---------------按住宿天数查询**\n"); printf(" **42---------------按住宿房间查询**\n"); printf(" **40-------------------返回主菜单**\n"); printf(" ***********************************\n"); break; case 5: sort(); break; case 6: printf("请输入顾客姓名:\n"); break; case 0: (exit(1)); break; } }}
[解决办法]
不用控制while循环的跳出么?
[解决办法]
要考虑抛出异常!
[解决办法]
printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。