h>
#include〈time.h>
structstu_info{
charstu_num[12];
charname[10];
charsex;/*0为女生,1为男生*/
charmobile_phone[12];
};
structstu_infostudent;
unsignedintnumber;
structstu_infostu[100];
FILE*in;
FILE*out;
intlen;
voidinputstu();
voidupdatestu();
voiddeletestu();
voiddisplaystu();
voidcommanddisp()
{printf(”—-————-———--—-——-————---——---—--————---—-------—-\n”);
printf("|-———--———--学生基本信息管理--———-----——----—--—|\n”);
printf("|—--1.基本信息插入.----—2。
基本信息修改—--——---—-|\n”);
printf(”|-——3。
基本信息删除.--———4。
基本信息显示———-———-—-|\n”);
printf("|—-—r.初始化(第一次使用时用!
!
慎用)-q.退出---|\n");
printf("|-—-——-——-——-—-——-—--请输入你的选择:
—---—---———|\n”);
printf(”—————-—---—————----———--—-—--—-——-—----------—---\n");
}
voidmain()
{
commanddisp();
charch;
while
(1)
{
do{
ch=getchar();
}while(ch==’\n');
if(ch=='q’)return;
switch(ch)
{
case’1':
inputstu();
break;
case’2':
updatestu();
break;
case'3':
deletestu();
break;
case'4’:
displaystu();
break;
case’r’:
printf("\ninitstudenttable\n");
if((out=fopen("c。
doc","w"))==NULL)return;
number=0;
fwrite(&number,sizeof(unsignedint),1,out);
fflush(out);
fclose(out);
break;
default:
break;
}
printf(”pleaseenteranykeytocontinue”);
getchar();
getchar();
system("clear”);
commanddisp();
}
}
voidinputstu()
{
printf(”\n---—-----——--——--请输入学生信息——-——---——--—-------—-\n");
charp='y';
while(p==’y’||p=='Y’)
{
memset(&student,0,sizeof(student));
printf(”学号:
”);
scanf("%s”,student.stu_num);
printf(”姓名:
");
scanf(”%s",student。
name);
printf("性别<0是女,1是男>:
");
do{
student。
sex=getchar();
}while(student.sex==’\n');
printf(”手机号:
”);
scanf(”%s",student.mobile_phone);
len=sizeof(structstu_info);
if((out=fopen(”c.doc",”r+"))==NULL)return;
fread(&number,sizeof(unsignedint),1,out);
number++;
fseek(out,0L,SEEK_SET);
fwrite(&number,sizeof(unsignedint),1,out);
fflush(out);
fseek(out,0L,SEEK_END);
fwrite(&student,len,1,out);
fflush(out);
fclose(out);
printf(”是否继续输入Y/N\n");
fflush(stdin);
do{
p=getchar();
}while(p==’\n’);
}
}
voidupdatestu()
{
printf("\n-———-——-——--———-———学生信息修改--—--——----—-—-———-——--——\n");
printf("请输入修改学生的学号:
");
memset(&student,0,sizeof(student));
scanf(”%s",student。
stu_num);
printf(”姓名:
”);
scanf("%s”,student.name);
printf("性别<0是女,1是男>:
”);
do{
student.sex=getchar();
}while(student.sex=='\n');
printf(”手机号:
”);
scanf("%s",student.mobile_phone);
len=sizeof(structstu_info);
in=fopen(”c.doc”,"r+");
fread(&number,sizeof(unsignedint),1,in);
unsignedintj;
longkk;
for(j=0;j{
fread(&stu[0],len,1,in);
if(strcmp(student.stu_num,stu[0].stu_num)==0)
{kk=len;
fseek(in,-kk,SEEK_CUR);
fwrite(&student,len,1,in);
break;
}
}
fflush(in);
fclose(in);
if(j==number)printf(”没有这条记录\n”);
}
voiddeletestu()
{
printf("\n—--—----——----—————学生信息删除——-—--—-—-——-—---—--——---\n”);
in=fopen(”c。
doc","r");
fread(&number,sizeof(unsignedint),1,in);
memset(stu,0,sizeof(stu));
len=sizeof(structstu_info);
fread(stu,len,number,in);
unsignedinti;
charf;
while
(1)
{
printf("请输入删除学生的学号:
”);
charstu_num[12];
memset(stu_num,0,sizeof(stu_num));
fflush(stdin);
scanf(”%s”,stu_num);
for(i=0;i〈number;i++)
if(strcmp(stu_num,stu[i].stu_num)==0)break;
if(i==number)printf("没有这条记录\n”);
else
{
number--;
for(;i〈number;i++)
{
strcpy(stu[i]。
stu_num,stu[i+1].stu_num);
strcpy(stu[i].name,stu[i+1].name);
stu[i].sex=stu[i+1].sex;
strcpy(stu[i].mobile_phone,stu[i+1].mobile_phone);
}
}
printf("是否继续删除Y/N\n”);
fflush(stdin);
do{
f=getchar();
}while(f==’\n’);
if(f!
=’y'&&f!
='Y’)break;
}
fclose(in);
out=fopen("c.doc",”w”);
fwrite(&number,sizeof(unsignedint),1,out);
len=len*number;
fwrite(stu,len,1,out);
fflush(out);
fclose(out);
}
voiddisplaystu()
{printf("\n—-—-——--———-———————---—-————-—显示学生信息——---—-—————————-—-----——----———--\n”);
in=fopen(”c。
doc",”r");
fread(&number,sizeof(unsignedint),1,in);
memset(stu,0,sizeof(stu));
len=sizeof(structstu_info);
fread(stu,len,number,in);
unsignedinti;
printf("———-————-----—--—--——-—-—-—-—-—--—-———--—-————---——--——-—---—---—-———---—---\n”);
printf(”number\t学号\t姓名\t性别<0是女,1是男〉手机号\n”);
for(i=0;iprintf("%3d%12s%10s%c%12s\n",i,stu[i].stu_num,stu[i].name,stu[i].sex,stu[i].mobile_phone);
printf(”———-—--—-—--————---——----—-—-—--———-——-—-——-—-—-——----------—---—--———-—-—-—\n");
fclose(in);
}
利用父子进程间的管道通信方式,改写实验3步骤6要求的程序.要求启用两个进程,其中父进程接受用户对文件stu.info的操作命令然后通过管道发给子进程,子进程完成对文件的实际操作.
#includeh〉
#includeh>
#include#includeh>
#include