C++代码可以运行,但是保存不了文件,怎么解决?谢谢!!!
问题描述:
#include "stdio.h"
#include "string"
/*定义医生结构体*/
struct Doctor
{
char ID[50]; //医生编号
char Name[50]; //姓名
char Keshi[11]; //科室
char Room[11]; //诊室
};
/*声明医生数组及医生数量*/
struct Doctor Doctors[100];
int num=0;
/*通过医生编号返回数组下标*/
int Doctor_SearchByIndex(char id[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(Doctors[i].ID,id)==0)
{
return i;
}
}
return -1;
}
/*通过姓名返回数组下标*/
int Doctor_SearchByName(char name[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(Doctors[i].Name,name)==0)
{
return i;
}
}
return -1;
}
/*显示单条医生记录*/
void Doctor_DisplaySingle(int index)
{
printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%10s%8s\n",Doctors[index].ID,Doctors[index].Name,Doctors[index].Keshi,Doctors[index].Room);
}
/****1、增加医生记录*****/
void Doctor_Insert()
{
while(1)
{
printf("请输入医生编号:");
scanf("%s",&Doctors[num].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&Doctors[num].Name);
getchar();
printf("请输入科室:");
scanf("%s",&Doctors[num].Keshi);
getchar();
printf("请输入诊室:");
scanf("%s",&Doctors[num].Room);
getchar();
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
if (getchar()=='N')
{
break;
}
}
}
/******2、修改医生信息**********/
void Doctor_Modify()
{
while(1)
{
char id[50];
int index;
printf("请输入要修改的医生的医生编号:");
scanf("%s",&id);
getchar();
index=Doctor_SearchByIndex(id);
if (index==-1)
{
printf("该医生不存在!\n");
}
else
{
printf("你要修改的医生信息为:\n");
Doctor_DisplaySingle(index);
printf("-- 请输入新值--\n");
printf("请输入医生编号:");
scanf("%s",&Doctors[index].ID);
getchar();
printf("请输入姓名:");
scanf("%s",&Doctors[index].Name);
getchar();
printf("请输入科室:");
scanf("%s",&Doctors[index].Keshi);
getchar();
printf("请输入诊室:");
scanf("%s",&Doctors[index].Room);
getchar();
}
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
if (getchar()=='N')
{
break;
}
}
}
/****3、删除医生信息****/
void Doctor_Delete()
{
int i;
while(1)
{
char id[50];
int index;
printf("请输入要删除的医生的医生编号:");
scanf("%s",&id);
getchar();
index=Doctor_SearchByIndex(id);
if (index==-1)
{
printf("医生不存在!\n");
}
else
{
printf("你要删除的医生信息为:\n");
Doctor_DisplaySingle(index);
printf("是否真的要删除?(Y/N)");
if (getchar()=='Y')
{
for (i=index;i<num-1;i++)
{
Doctors[i]=Doctors[i+1];//把后边的对象都向前移动
}
num--;
}
getchar();
printf("已删除\n");
}
printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:");
if (getchar()=='N')
{
break;
}
}
}
/****4、按姓名查询******/
void Doctor_Select()
{
while(1)
{
char name[50];
int index;
printf("请输入要查询的医生的姓名:");
scanf("%s",&name);
getchar();
index=Doctor_SearchByName(name);
if (index==-1)
{
printf("医生不存在!\n");
}
else
{
printf("你要查询的医生信息为:\n");
Doctor_DisplaySingle(index);
}
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
if (getchar()=='N')
{
break;
}
}
}
/*显示医生信息*/
void Doctor_Display()
{
int i;
printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
{
printf("%10s%10s%10s%8f\n",Doctors[i].ID,Doctors[i].Name,Doctors[i].Keshi,Doctors[i].Room);
}
}
/*将医生信息从文件(Database.txt)中读出*/
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1;
}
else
{
for(i=0;i<num;i++)
{
fread(&Doctors[i],sizeof(struct Doctor),1,fp);
}
}
fclose(fp);
}
/*将医生信息写入文件(Database.txt)*/
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&Doctors[i],sizeof(struct Doctor),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}
/***********主程序*********/
void main()
{
int choice;
IO_ReadInfo(); //读取文件
while(1)
{
/*主菜单*/
printf("\n------ 医生预约系统------\n");
printf("1. 增加医生记录\n");
printf("2. 修改医生记录\n");
printf("3. 删除医生记录\n");
printf("4. 按姓名查询医生记录\n");
printf("5. 按诊室排序\n");
printf("6. 退出\n");
printf("请选择(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
Doctor_Insert();
break;
case 2:
Doctor_Modify();
break;
case 3:
Doctor_Delete();
break;
case 4:
Doctor_Select();
break;
case 5:
break;
case 6:
exit(0);
break;
}
IO_WriteInfo();
}
}
答
修改完善如下,供参考:
#include <stdio.h>
#include <string>
/*定义医生结构体*/
struct Doctor
{
char ID[50]; //医生编号
char Name[50]; //姓名
char Keshi[11]; //科室
char Room[11]; //诊室
};
/*声明医生数组及医生数量*/
struct Doctor Doctors[100];
int num=0;
/*通过医生编号返回数组下标*/
int Doctor_SearchByIndex(char id[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(Doctors[i].ID,id)==0)
{
return i;
}
}
return -1;
}
/*通过姓名返回数组下标*/
int Doctor_SearchByName(char name[])
{
int i;
for (i=0;i<num;i++)
{
if (strcmp(Doctors[i].Name,name)==0)
{
return i;
}
}
return -1;
}
/*显示单条医生记录*/
void Doctor_DisplaySingle(int index)
{
printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");
printf("-------------------------------------------------------------\n");
printf("%10s%10s%10s%8s\n",Doctors[index].ID,Doctors[index].Name,Doctors[index].Keshi,
Doctors[index].Room);
}
/****1、增加医生记录*****/
void Doctor_Insert()
{
while(1)
{
printf("请输入医生编号:");
//scanf("%s",&Doctors[index].Room);
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[num].ID); //scanf("%s",&Doctors[num].ID);
//getchar();
printf("请输入姓名:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[num].Name);//scanf("%s",&Doctors[num].Name);
//getchar();
printf("请输入科室:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[num].Keshi);//scanf("%s",&Doctors[num].Keshi);
//getchar();
printf("请输入诊室:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[num].Room);//scanf("%s",&Doctors[num].Room);
//getchar();
num++;
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
fflush(stdout);rewind(stdin);
if ((getchar())=='N')
{
break;
}
}
}
/******2、修改医生信息**********/
void Doctor_Modify()
{
while(1)
{
char id[50];
int index;
printf("请输入要修改的医生的医生编号:");
scanf("%s",id); //scanf("%s",&id);
getchar();
index=Doctor_SearchByIndex(id);
if (index==-1)
{
printf("该医生不存在!\n");
}
else
{
printf("你要修改的医生信息为:\n");
Doctor_DisplaySingle(index);
printf("-- 请输入新值--\n");
printf("请输入医生编号:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[index].ID); //scanf("%s",&Doctors[index].ID);
//getchar();
printf("请输入姓名:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[index].Name);//scanf("%s",&Doctors[index].Name);
//getchar();
printf("请输入科室:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[index].Keshi);//scanf("%s",&Doctors[index].Keshi);
//getchar();
printf("请输入诊室:");
fflush(stdout);rewind(stdin);
scanf("%s",Doctors[index].Room);//scanf("%s",&Doctors[index].Room);
//getchar();
}
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
fflush(stdout);rewind(stdin);
if ((getchar())=='N')
{
break;
}
}
}
/****3、删除医生信息****/
void Doctor_Delete()
{
int i;
while(1)
{
char id[50];
int index;
printf("请输入要删除的医生的医生编号:");
fflush(stdout);rewind(stdin);
scanf("%s",id); // scanf("%s",&id);
//getchar();
index=Doctor_SearchByIndex(id);
if (index==-1)
{
printf("医生不存在!\n");
}
else
{
printf("你要删除的医生信息为:\n");
Doctor_DisplaySingle(index);
printf("是否真的要删除?(Y/N)");
if ((getchar())=='Y')
{
for (i=index;i<num-1;i++)
{
Doctors[i]=Doctors[i+1];//把后边的对象都向前移动
}
num--;
}
getchar();
printf("已删除\n");
}
printf("是否继续删除?(Y/N),继续请按任意键,否则输入N:");
fflush(stdout);rewind(stdin);
if ((getchar())=='N')
{
break;
}
}
}
/****4、按姓名查询******/
void Doctor_Select()
{
while(1)
{
char name[50];
int index;
printf("请输入要查询的医生的姓名:");
fflush(stdout);rewind(stdin);
scanf("%s",name); //scanf("%s",&name);
//getchar();
index=Doctor_SearchByName(name);
if (index==-1)
{
printf("医生不存在!\n");
}
else
{
printf("你要查询的医生信息为:\n");
Doctor_DisplaySingle(index);
}
printf("是否继续?(Y/N),继续请按任意键,否则输入N:");
fflush(stdout);rewind(stdin);
if ((getchar())=='N')
{
break;
}
}
}
/*显示医生信息*/
void Doctor_Display()
{
int i;
printf("%10s%10s%10s%8s\n","医生编号","姓名","科室","诊室");
printf("-------------------------------------------------------------\n");
for (i=0;i<num;i++)
{
printf("%10s%10s%10s%8f\n",Doctors[i].ID,Doctors[i].Name,Doctors[i].Keshi,
Doctors[i].Room);
}
}
/*将医生信息从文件(Database.txt)中读出*/
void IO_ReadInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fread(&num,sizeof(int),1,fp)!=1)
{
num=-1;
}
else
{
for(i=0;i<num;i++)
{
fread(&Doctors[i],sizeof(struct Doctor),1,fp);
}
}
fclose(fp);
}
/*将医生信息写入文件(Database.txt)*/
void IO_WriteInfo()
{
FILE *fp;
int i;
if ((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!\n");
return;
}
if (fwrite(&num,sizeof(int),1,fp)!=1)
{
printf("写入文件错误!\n");
}
for (i=0;i<num;i++)
{
if (fwrite(&Doctors[i],sizeof(struct Doctor),1,fp)!=1)
{
printf("写入文件错误!\n");
}
}
fclose(fp);
}
/***********主程序*********/
void main()
{
int choice;
IO_ReadInfo(); //读取文件
while(1)
{
/*主菜单*/
printf("\n------ 医生预约系统------\n");
printf("1. 增加医生记录\n");
printf("2. 修改医生记录\n");
printf("3. 删除医生记录\n");
printf("4. 按姓名查询医生记录\n");
printf("5. 按诊室排序\n");
printf("6. 保存并退出\n");
printf("请选择(1-6):");
scanf("%d",&choice);
getchar();
switch(choice)
{
case 1:
Doctor_Insert();
break;
case 2:
Doctor_Modify();
break;
case 3:
Doctor_Delete();
break;
case 4:
Doctor_Select();
break;
case 5:
break;
case 6:
IO_WriteInfo();
exit(0);
//break;
}
}
}