关于网友提出的“ 求教不怕麻烦的高手”问题疑问,本网通过在网上对“ 求教不怕麻烦的高手”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 求教不怕麻烦的高手
描述: 我写了几个职工的信息,没关那个运行环境的时候可以全显示出他们的信息,但关了之后,却只能显示也第一个的出来,真是把我搞糊涂了
#include
#include
#include
#include
#include
struct birth /*出生年月日结构定义*/
{
int year;
int month;
int day;
};
struct address_str
{
char address[60];
char mobile[13];
char family_tel[15];
char mail[25];
};
struct achieve
{
char degree[20];
char experience[1000];
};
struct worker
{
int number;
char name[20];
char sex;
char nation[20];
struct birth birth;
struct address_str addr;
struct achieve achieve;
}workers[20];
FILE*fp;
int a;
void Data_load()
{
long c;
fp=fopen("worker.txt", "r+t") ;
if(fp!=NULL)
{
for(a=1;a<20;a++)
{
if(fgetc(fp)==EOF)
return;
c=a-1;
fseek(fp, c*sizeof(struct worker), SEEK_SET);
fread(&workers[a], sizeof(struct worker), 1, fp);
fclose(fp);
}
}
else
{
fp=fopen("worker.txt", "w");
fclose(fp);
a=1;
}
}
void Data_Show(int b)
{
printf("\n\n\tNo:%3d\n", workers[b].number);
getch();
printf("\n\n\tName:%-20s\n\tsex:%c\n\tnation:%s\n", workers[b].name, workers[b].sex, workers[b].nation);
getch();
printf("\n\n\tBirthday(y/m/d):%4d%2d%2d", workers[b].birth.year, workers[b].birth.month, workers[b].birth.day);
getch();
printf("\n\n\tAddress:%-60s\n\tMobile:%-13d\n\tFamily_tel:%-15d\n\tmail:%-25s\n",workers[b].addr.address, workers[b].addr.mobile, workers[b].addr.family_tel, workers[b].addr.mail);
getch();
printf("\n\n\tDegree:%-20s\n\texperience:%-1000s\n", workers[b].achieve.degree, workers[b].achieve.experience);
getch();
}
void Data_Input(int b)
{
fflush(stdin);
workers[b].number = b;
printf("\n\n\tNo%d record", b);
printf("\n\n\tName:");
scanf("%s", &workers[b].name);
fflush(stdin);
printf("\n\tnation:");
scanf("%s", &workers[b].nation);
fflush(stdin);
printf("\n\n\tsex(m/f):");
scanf("%c", &workers[b].sex);
fflush(stdin);
printf("\n\n\tbirthday");
printf("\n\n\tyear:");
scanf("%d", &workers[b].birth.year);
fflush(stdin);
printf("\n\n\tmonth:");
scanf("%d", &workers[b].birth.month);
fflush(stdin);
printf("\n\n\tday:");
scanf("%d" , &workers[b].birth.day);
fflush(stdin);
printf("\n\n\taddress:");
scanf("%s", workers[b].addr.address);
fflush(stdin);
printf("\n\n\tmobile:");
scanf("%c", &workers[b].addr.mobile);
fflush(stdin);
printf("\n\n\tfamily_tel:");
scanf("%c", &workers[b].addr.family_tel);
fflush(stdin);
printf("\n\n\tmail:");
scanf("%c", &workers[b].addr.mail);
fflush(stdin);
printf("\n\n\tdegree:");
scanf("%s", &workers[b].achieve.degree);
fflush(stdin);
printf("\n\n\texperience:");
scanf("%s", &workers[b].achieve.experience);
fflush(stdin);
}
void Data_Save()
{
int b;
fp=fopen("worker.txt", "w");
for(b=1; b<=a; b++)
{
fwrite(&workers[b], sizeof(struct worker), 1, fp);
}
fclose(fp);
}
void main()
{
int a=20;
int b, c;
char ch, name[20];
char *search_name=name;
clrscr();
Data_load();
a--;
while(1)
{
printf("\n\n\t*************Function choose:********************");
printf("\n\t************ 1.Read *****************");
printf("\n\t****** 2.Delete *************");
printf("\n\t********* 3.Search ****************");
printf("\n\t*********** 4.Insert ******************");
printf("\n\t************** 5.Save and exit ********************");
printf("\n\t* * * * * * 6. Quit * * * * * * *************");
printf("\n\n");
printf("\t * * * * * * * * choice:");
scanf("%c", &ch);
switch(ch)
{
case '1':
b = 1;
while (getch()!=0x1b && b<=a) Data_Show(b++);
if (b > a)
printf("\n\tEnd of e_note\n");
break;
case '2':
if(a<1)
{
printf("\n\tPlease Append record\n");
break;
}
printf("\n\t Delete No:");
scanf("%d", &c);
for (b=c; b<>
{
strcpy(workers[b].name, workers[b+1].name);
workers[b].sex = workers[b+1].sex;
strcpy(workers[b].nation, workers[b+1].nation);
workers[b].birth.year = workers[b+1].birth.year;
workers[b].birth.month = workers[b+1].birth.month;
workers[b].birth.day = workers[b+1].birth.day;
strcpy(workers[b].addr.address, workers[b+1].addr.address);
strcpy(workers[b].addr.mobile, workers[b+1].addr.mobile);
strcpy(workers[b].addr.family_tel, workers[b+1].addr.family_tel);
strcpy(workers[b].addr.mail, workers[b+1].addr.mail);
strcpy(workers[b].achieve.degree, workers[b+1].achieve.degree);
strcpy(workers[b].achieve.experience, workers[b+1].achieve.experience);
}
a--;
break;
case'3':getchar();
printf("\n\t Please input name:");
gets(search_name);
for (b=0; b<=a; b++)
{
if (strcmp(search_name, workers[b].name)==0)
{
Data_Show(b);
break;
}
}
if (b > a)
{
printf("\n\t No such records");
}
break;
case '4':
printf("\n\tinsert No:");
scanf("%d", &c);
for (b=a+1; b>c; b--);
{
strcpy(workers[b].name, workers[b-1].name);
workers[b].sex = workers[b-1].sex;
strcpy(workers[b].nation, workers[b-1].nation);
workers[b].birth.year = workers[b-1].birth.year;
workers[b].birth.month = workers[b-1].birth.month;
workers[b].birth.day = workers[b-1].birth.day;
strcpy(workers[b].addr.address, workers[b-1].addr.address);
strcpy(workers[b].addr.mobile, workers[b-1].addr.mobile);
strcpy(workers[b].addr.family_tel, workers[b-1].addr.family_tel);
strcpy(workers[b].addr.mail, workers[b-1].addr.mail);
strcpy(workers[b].achieve.degree, workers[b-1].achieve.degree);
strcpy(workers[b].achieve.experience, workers[b-1].achieve.experience);
}
Data_Input(c);
a++;
Data_Save();
break;
case '5':
Data_Save();
exit(0);
break;
case '6':
printf("\n\t Do you want to save e_note:(y/n)");
ch = getch();
if(ch == 'y')
{
Data_Save();
exit(0);
}
default: printf("please choose num 1-6.\n");
}
}
}
以上介绍了“ 求教不怕麻烦的高手”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3032944.html