操作系统文件系统.docx
- 文档编号:3446318
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:15
- 大小:98.41KB
操作系统文件系统.docx
《操作系统文件系统.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统.docx(15页珍藏版)》请在冰豆网上搜索。
操作系统文件系统
一目的与要求
文件系统是操作系统的一个重要组成部分,它向用户提供了对文件进行打开、读写等操作的编程接口。
本实验的目的就是熟悉与操作文件有关的函数调用,加深对文件管理的理解,为灵活处理文件及利用文件存储信息打下基础。
二实验内容或题目
本实验要求使用C语言编写一个学生成绩管理程序。
要求学生成绩信息(包括学号、姓名、语文、数学、外语五个方面)通过键盘录入,并以文件的形式保存。
程序能实现学生成绩文件的创建、打开、删除以及对文件中成绩记录的排序、添加、查询和修改操作。
三实验步骤与源程序
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(STUDENT)
typedefstructstu
{charnum[6];
charname[5];
intscore[3];
intsum;
floataverage;
intorder;
structstu*next;
}STUDENT;
STUDENT*init();
intmenu_select();
STUDENT*create();
voidprint(STUDENT*head);
voidsearch(STUDENT*head);
STUDENT*delete(STUDENT*head);
STUDENT*sort(STUDENT*head);
STUDENT*insert(STUDENT*head,STUDENT*new);
voidsave(STUDENT*head);
STUDENT*load();
main()
{STUDENT*head,new;
head=init();
for(;;)
{switch(menu_select())
{
case1:
head=create();break;
case2:
print(head);break;
case3:
search(head);break;
case4:
head=delete(head);break;
case5:
head=sort(head);break;
case6:
head=insert(head,&new);break;
case7:
save(head);break;
case8:
head=load();break;
case9:
exit(0);
}
}
}
STUDENT*init()
{
returnNULL;
}
menu_select()
{intn;
structdated;
getdate(&d);
printf("pressanykeytoenterthemenu......");
getch();
clrscr();
printf("********************************************************************************\n");
printf("\t\tWelcometo\n");
printf("\n\t\tThestudentscoremanagesystem\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1.Entertherecord\n");
printf("\t\t\t2.Printtherecord\n");
printf("\t\t\t3.Searchrecordonname\n");
printf("\t\t\t4.Deletearecord\n");
printf("\t\t\t5.Sorttomakenewafile\n");
printf("\t\t\t6.Insertrecordtolist\n");
printf("\t\t\t7.Savethefile\n");
printf("\t\t\t8.Loadthefile\n");
printf("\t\t\t9.Quit\n");
printf("\n\t\tMadebyVolrath.\n");
printf("********************************************************************************\n");
printf("\t\t\t\t%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day);
do{
printf("\n\t\t\tEnteryourchoice(1~9):
");
scanf("%d",&n);
}while(n<1||n>9);
return(n);
}
STUDENT*create()
{inti,s;
STUDENT*head=NULL,*p;
clrscr();
for(;;)
{p=(STUDENT*)malloc(LEN);
if(!
p)
{printf("\nOutofmemory.");
return(head);
}
printf("Enterthenum(0:
listend):
");
scanf("%s",p->num);
if(p->num[0]=='0')break;
printf("Enterthename:
");
scanf("%s",p->name);
printf("Pleaseenterthe%dscores:
1.Chinese2.English3.Maths\n",3);
s=0;
for(i=0;i<3;i++)
{
do{
printf("score%d:
",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0||p->score[i]>100)
printf("Dataerror,pleaseenteragain.\n");
}while(p->score[i]<0||p->score[i]>100);
s=s+p->score[i];
}
p->sum=s;
p->average=(float)s/3;
p->order=0;
p->next=head;
head=p;
}
return(head);
}
/
voidprint(STUDENT*head)
{inti=0;
STUDENT*p;
clrscr();
p=head;
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("|Rec|Num|Name|Chinese|English|Maths|Sum|Ave|Order|\n");
printf("-------------------------------------------------------------------------------\n");
while(p!
=NULL)
{
i++;
printf("|%3d|%4s|%-4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n",
i,p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------\n");
printf("**************************************END********************************\n");}
voidsearch(STUDENT*head)
{STUDENT*p;
chars[5];
clrscr();
printf("Pleaseenternameforsearching.\n");
scanf("%s",s);
p=head;
while(strcmp(p->name,s)&&p!
=NULL)
p=p->next;
if(p!
=NULL)/
{printf("\n*************************************FOUND****************************\n");
printf("-------------------------------------------------------------------------\n");printf("|Num|Name|Chinese|English|Maths|Sum|Ave|Order|\n");
printf("-------------------------------------------------------------------------\n");
printf("|%4s|%4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------\n");
printf("***************************************END******************************\n");
}
else
printf("\nThereisnonum%sstudentonthelist.\n",s);/*显示没有该学生*/
}
STUDENT*delete(STUDENT*head)
{intn;
STUDENT*p1,*p2;
charc,s[6];
clrscr();
printf("Pleaseenterthedeletednum:
");
scanf("%s",s);
p1=p2=head;
while(strcmp(p1->num,s)&&p1!
=NULL)
{p2=p1;
p1=p1->next;
}
if(strcmp(p1->num,s)==0)
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("|Num|Name|Chinese|English|Maths|Sum|Ave|Order|\n");
printf("------------------------------------------------------------------------\n");
printf("|%4s|%4s|%3d|%3d|%3d|%3d|%4.2f|%-5d|\n",p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order;
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END******************************\n");
printf("AreyousuretodeletethestudentY/N?
");
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N')break;
if(c=='y'||c=='Y')
{
if(p1==head)
head=p1->next;
else
p2->next=p1->next;
printf("\nNum%sstudenthavebeendeleted.\n",s);
printf("Don'tforgettosave.\n");break;/*删除后就跳出循环*/
}
}
}
else
printf("\nThereisnonum%sstudentonthelist.\n",s);
return(head);
}
STUDENT*sort(STUDENT*head)
{inti=0;
STUDENT*p1,*p2,*t,*temp;
temp=head->next;
head->next=NULL;
while(temp!
=NULL)
{
t=temp;
temp=temp->next;
p1=head;
p2=head;
while(t->average
=NULL){
p2=p1;
p1=p1->next;
}
if(p1==p2)
{
t->next=p1;
head=t;
}
else
{
t->next=p1;
p2->next=t;
}
}
p1=head;
while(p1!
=NULL)
{
i++;
p1->order=i;
p1=p1->next;
}
printf("Sortingissucessful.\n");
return(head);
}
STUDENT*insert(STUDENT*head,STUDENT*new)
{STUDENT*p0,*p1,*p2;
intn,sum1,i;
p1=head;
p0=new;
printf("\nPleaseenteranewrecord.\n");
printf("Enterthenum:
");
scanf("%s",new->num);
printf("Enterthename:
");
scanf("%s",new->name);
printf("Pleaseenterthe%dscores.\n",3);
sum1=0;
for(i=0;i<3;i++)
{
do{
printf("score%d:
",i+1);
scanf("%d",&new->score[i]);
if(new->score[i]>100||new->score[i]<0)
printf("Dataerror,pleaseenteragain.\n");
}while(new->score[i]>100||new->score[i]<0);
sum1=sum1+new->score[i];
}
new->sum=sum1;
new->average=(float)sum1/3;
new->order=0;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{while((p0->average
=NULL))
{p2=p1;
p1=p1->next;
}
if(p0->average>=p1->average)
{if(head==p1)head=p0;
elsep2->next=p0;
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;}
}
head=sort(head);
printf("\nStudent%shavebeeninserted.\n",new->name);
printf("Don'tforgettosavethenewfile.\n");
return(head);
}
voidsave(STUDENT*head)
{FILE*fp;
STUDENT*p;
charoutfile[10];
printf("Enteroutfilename,forexamplec:
\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("Cannotopenthefile\n");
return;
}
printf("\nSavingthefile......\n");
p=head;
while(p!
=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
printf("Savethefilesuccessfully!
\n");
}
STUDENT*load()
{STUDENT*p1,*p2,*head=NULL;
FILE*fp;
charinfile[10];
printf("Enterinfilename,forexamplec:
\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"rb"))==NULL){
printf("Cannotopenthefile.\n");
return(head);
}
printf("\nLoadingthefile!
\n");
p1=(STUDENT*)malloc(LEN);
if(!
p1)
{
printf("Outofmemory!
\n");
return(head);
}
head=p1;
while(!
feof(fp))
{
if(fread(p1,LEN,1,fp)!
=1)break;/*
p1->next=(STUDENT*)malloc(LEN);
if(!
p1->next)
{
printf("Outofmemory!
\n");
return(head);
}
p2=p1;
p1=p1->next;
}
p2->next=NULL;
fclose(fp);
printf("Youhavesuccesstoreaddatafromthefile!
\n");
return(head);
}
四测试数据与实验结果
开始的界面
录入学生信息
打印信息表
查找
排序
插入
保存文件名为4.txt,并打印出来
删除
五结果分析与实验体会
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统