Linux下学生信息管理系统.docx
- 文档编号:26814970
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:57
- 大小:27.26KB
Linux下学生信息管理系统.docx
《Linux下学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《Linux下学生信息管理系统.docx(57页珍藏版)》请在冰豆网上搜索。
Linux下学生信息管理系统
学习并分别使用标准C的文件操作函数和Linux的系统调用创建一个对学生基本信息进行操作(插入、修改和删除)的C程序,学生基本信息以结构体的形式存储在文件
#include
#include
#include
#include
#include
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 if(strcmp(stu_num,stu[i].stu_num)==0)break; if(i==number)printf("没有这条记录\n"); else { number--; for(;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;i printf("%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的操作命令然后通过管道发给子进程,子进程完成对文件的实际操作。 #include #include #include #include #include structstu_info{ charstu_num[12]; charname[10]; charsex;/*0为女生,1为男生*/ charmobile_phone[12]; }; structstu_infostudent; unsignedintnumber; structstu_infostu[100]; intpipefiles[2]; voidmain() { printf("------------------------------------------------\n"); printf("|----------学生基本信息管理---------------|\n"); printf("|--1.基本信息插入.-----2.基本信息修改--------|\n"); printf("|--3.基本信息删除.-----4.基本信息显示--------|\n"); printf("|--r.初始化(第一次使用时用! ! 慎用)--------|\n"); printf("|--------------------请输入你的选择: -----|\n: "); printf("------------------------------------------------\n"); pid_tpid; FILE*in; FILE*out; charch; intlen; if(pipe(pipefiles)==0) { pid=fork(); if(pid==-1) { fprintf(stderr,"Forkfailure\n"); return; } if(pid==0)////child. { read(pipefiles[0],&ch,1); switch(ch) { case'1': while (1) { sleep (1); len=sizeof(structstu_info); char*ch1=(char*)malloc(sizeof(char)*len); read(pipefiles[0],ch1,len); 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); fclose(out); if((out=fopen("c.doc","a"))==NULL)return; fwrite(ch1,len,1,out); fclose(out); charf; read(pipefiles[0],&f,sizeof(char)); if(f! ='y'&&f! ='Y')return; } break; case'2': sleep (1); len=sizeof(structstu_info); read(pipefiles[0],&student,len); 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); unsignedintj; for(j=0;j if(strcmp(student.stu_num,stu[j].stu_num)==0) { strcpy(stu[j].name,student.name); stu[j].sex=student.sex; strcpy(stu[j].mobile_phone,student.mobile_phone); break; } fclose(in); if(j==number)printf("没有这条记录\n"); else { out=fopen("c.doc","w"); fwrite(&number,sizeof(unsignedint),1,out); len=sizeof(structstu_info); len=len*number; fwrite(&stu,len,1,out); fclose(out); } break; case'3': while (1) { sleep (1); charstu_num[12]; memset(stu_num,0,sizeof(stu_num)); read(pipefiles[0],stu_num,sizeof(stu_num)); 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; for(i=0;i if(strcmp(stu_num,stu[i].stu_num)==0)break; if(i==number)printf("没有这条记录\n"); else { for(;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); } if((out=fopen("c.doc","r"))==NULL)return; fread(&number,sizeof(unsignedint),1,out); fclose(out); number--; out=fopen("c.doc","w"); fwrite(&number,sizeof(unsignedint),1,out); len=sizeof(structstu_info); len=len*number; fwrite(stu,len,1,out); fclose(out); } charf; read(pipefiles[0],&f,sizeof(int)); if(f! ='y'&&f! ='Y')return; } break; case'4': sleep (1); 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"); for(i=0;i printf("-%d--学号: %s-姓名: %s-性别<0是女,1是男>: %c-手机号: %s-\n",i,stu[i].stu_num,stu[i].name,stu[i].sex,stu[i].mobile_phone); printf("----------------------------------------------------------------------------\n"); fclose(in); break; case'r': if((out=fopen("c.doc","w"))==NULL)return; number=0; fwrite(&number,sizeof(unsignedint),1,out); break; default: break; } } else////father. { do{ ch=getchar(); }while(ch=='\n'); write(pipefiles[1],&ch,1); switch(ch) { case'1': 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); write(pipefiles[1],&student,len); sleep (1); printf("是否继续输入Y/N\n"); fflush(stdin); do{ p=getchar(); }while(p=='\n'); write(pipefiles[1],&p,sizeof(char)); } break; case'2': p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 学生 信息管理 系统