操作系统课程设计软件工程周成样本_第1页
操作系统课程设计软件工程周成样本_第2页
操作系统课程设计软件工程周成样本_第3页
操作系统课程设计软件工程周成样本_第4页
操作系统课程设计软件工程周成样本_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

高档操作系统实验报告姓名:学号:专业:任课教师:01月18目录一、课程设计题目和目 1二、课程设计规定 1三、程序设计思想 1四、文献系统实现 21.数据构造设计 22.程序功能图 33.实体关系图 34.数据流图 45.程序流程图 5(1).建立文献:create(文献名,记录长度) 6(2).写文献:write(文献名,开始位置,字符串) 7(3).读文献:read(文献名,开始位置,长度) 8(4).显示文献所有内容type(文献名) 8(5).删除文献delete(文献名) 9(6).重命名文献ren(文献名,新文献名) 10(7).查询文献属性ask(文献名) 11(8).关闭文献close(文献名) 12五、程序运营成果及分析 13六、课程设计总结 15七、参照文献 16八、附录 17一、课程设计题目和目通过模仿文献系统实现,进一步理解操作系统中文献系统理论知识,加深对教材中重要算法理解。同步通过编程实现这些算法,更好地掌握操作系统原理及实现办法,提高综合运用各专业课知识能力。二、课程设计规定通过组长分工,我重要完毕了如下几种功能操作:1.创立文献:从命令中得到文献名,得到该文献文献长度,建立文献。修改目录表。4.读文献:read[文献名][显示开始字节][显示字节数],直接显示所需要字节数。5.写文献:write[文献名][插入位置][插入内容]6.修改属性:修改文献属性文献名,文献权限,文献长度等。三、程序设计思想阅读操作系统方面书籍,理解操作系统文献系统原理。结合分析课程设计规定,拟定实体以及它们之间关系。实体关系有三张表(磁盘空间分派表、文献表、打开文献表)、一种模仿磁盘数组、命令服务和顾客构成。顾客负责输入命令。命令服务实现命令解释、命令检查、命令协助以及调用有关模块执行相应命令功能。文献夹打开是则把文献夹名称及其地址压入打开文献夹栈,文献关闭则把文献夹名称及其地址从打开文献夹栈中抛出。文献打开则把文献名称及其父指针写到文献列表同步置文献打开标志为1,文献关闭则把文献从打开列表中删除,同步置文献打开指针为0,文献读取和写入都要检查文献与否在文献打开列表中,未打开文献不能读写,只读文献不能写,只写文献不能读。文献夹和文献创立,文献夹和文献创立一方面检查目录与否为空,为空则把文献夹或文献连接到该目录下,不为空则把检查目录下与否有同名文献夹或文献,有则提示创立不成功,没有则把文献夹或文献连接到该目录下最后一种子节点,作为它兄弟节点。文献夹和文献删除,文献夹下没有打开文献或文献没有打开才干删除,否则删除失败,删除文献夹时运用了中序历遍来删除子树。四、文献系统实现1.数据构造设计通过度析课程设计规定,详细设计出如下数据构造:typedefstructuof//文献属性{ charfilename[14];//文献名字intmode;//文献权限0-readonly;1-writeonly;2-read/write intlength;//文献长度 intaddr;//物理块号intstate;//0-建立,1-建立 intreadptr;};通过构造体,将文献名字、文献在磁盘开始位置、文献长度、文献最大长度、文献类型、创立时间结合在一起。文献类型,本模仿程序使用txt类型。设立一种线性表来存储文献。2.程序功能图模仿文献系统模仿文献系统创立文献删除文献条件读取写入文献查询属性显示内容显示目录重命名文献关闭文献文献系统提供文献操作有建立文献(create)、删除文献(delete)、条件读取文献(read)、写入文献(write)、查询文献属性(ask)、显示文献所有内容(type)、重命名文献(ren)、关闭文献(close)。可以通过键盘输入命令来模仿文献操作。通过exit命令退出程序。 3.实体关系图用户命令服务用户命令服务模仿磁盘磁盘空间分派表文献表打开文献表 命令服务使得顾客可以输入命令,在需要时提供命令协助。同步可以分析命令,调用相应命令模块对模仿磁盘、磁盘空间分派表、文献表、打开文献表进行操作。磁盘空间分派表记录模仿磁盘使用状况。文献表记录文献信息和在磁盘里位置等信息。打开文献表记录已打开文献,相应文献表中文献信息,和文献表里文献节点类似,记录了文献在模仿磁盘中信息。4.程序流程图 模仿文献系统提供文献操作有建立(create),读取(read),显示(type),删除(detele),写入(write),关闭(close),重命名(ren)和查询(ask)。在模仿程序中可从键盘上输入文献操作命令来模仿各顾客程序中所调用各种文献操作,用一种结束命令(exit)停止程序执行。开始开始系统格式化Y/N/输入命令命令表中有该命令?分析命令显示:命令协助无创立删除读取显示重命名写入查询列表关闭退出程序(exit)执行命令执行命令(1).创立文献:create(文献名,记录长度)模仿文献系统进行“创立文献”解决流程如下:开始开始查询文献表文献表中有名字?返回有显示重命申请磁盘空间空间申请成功?显示失败否返回无在磁盘分派表中登记登记:长度=0,最大长度=申请长度,开始位置=申请节点位置空闲状况=占用在文献表中登记登记:长度=0,最大长度=建立长度,开始位置=分派位置文献类型=txt,时间=当前时间在打开文献表中登记登记:信息和文献表中类似显示创立成功返回(2).写文献:write(文献名,开始位置,字符串)模仿文献系统进行“建立文献”解决流程如下:开始开始查询打开文献表查询文献表在打开文献表里?不在在文献表里?显示无文献返回不在写进模仿磁盘在在读取文献记录write参数合法?合法显示成功返回显示参数非法非法(3).读文献:read(文献名,开始位置,长度)模仿文献系统进行“读取文献”解决流程如下:开始开始查询文献表在打开文献表里?不在在文献表里?显示无文献返回不在在在读取文献记录read参数合法?非法显示参数非法返回依照参数读取模仿磁盘里记录返回合法

五.实验程序阐明:1.创立文献:2.打开文献:

3.写文献:4.修改文献属性:六、课程设计总结通过本次课程设计,使我可以对的运用操作系统课程中所学基本理论和知识,加深了对文献系统基本概念理解,以及磁盘文献系统文献操作。尚有让我感受挺深是对软件工程办法应用。设计一种软件,先要做好需求分析,这一点很重要,如果没有分析好需求,到软件设计最后,发现所做功能不符合规定,那么一切都得重做,前面所有努力都付诸东流。在程序设计开始,由于分析工作做得不够进一步和细致,吃了点小苦头。对于这样一种小设计来说,都会吃苦头,要是大工程更是无法想像,有也许会项目失败。后来得加强对软件工程学习。此外在运用C语言时候,感觉有点生疏,在组织语言时时而出错,在编程和调试过程中,经常会浮现意想不到问题,并非每个问题都可以从有关资料中找到解决办法,有些问题是无法预料到,这就需要通过自己理性分析得出问题解决方案。在设计过程中,查询了不少有关资料,不断发现问题、提出问题、解决问题。在对自己所编写源程序段纠错过程中,使我更好理解了操作系统中文献系统理论知识,同步在编程时用到了模块化设计思想,这种编程办法可以使咱们编程变更简朴,可以使咱们查错与纠错变更以便。总来说通过这次设计学习使我学到了诸多在平时学习中学不到诸多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续迈进下去。我相信,只要不断严格规定自己,注意培养自己思维能力,就一定会有更大更辉煌发展和提高。七、参照文献[1][美]AbrahamSilberschatzPeterBaerGalvinGregGagne郑扣根译.OPERATINGSYSTEMCONCEPTS[SixthEdition]操作系统概念.高等教诲出版社,,01[2](美)RogerS.Pressman著梅宏译.软件工程-实践者研究办法.机械工业出版社,,09[3]蔡启先.C语言程序设计教程(第二版).重庆大学出版社,,07[4]朱战立.数据构造.西安电子科技大学出版社,,05八、附录 1.程序源代码及注释//////////////////////////////////////////////////////////////编译工具:Visualc++6.0////////作者:~小楚*smill~、蓝色天空////邮件:////////复制、传播请保存作者信息,谢谢!//////////////////////////////////////////////////////////////////#include<stdio.h>#include<conio.h>#include<string.h>#include<stdlib.h>#include<time.h>voidfileCreate(char*fileName,intfileLenght);//创立文献voidfileDel(char*fileName);//删除文献voidfileRead(char*fileName,intpostion,intlenght);voidfileWrite(char*fileName,intposition,char*s);//函数声明voidfileAsk(char*fileName);//查询文献属性voidfileType(char*fileName);//显示文献内容voidfileRen(char*fileName,char*newName);//重命名文献voidfileDir();//列出所有文献voidfileClose(char*fileName);//关闭一种文献intrequestDisk(int*startPosition,int*maxLength);//分派磁盘空间///////////////////////////////////模仿磁盘空间chardisk[10000];/////////////////////////////////磁盘空间管理structfreeDiskTable{ intstart;//开始位置 intlength;//占用长度 intmaxLength;//最大长度 intuseFlag;//使用标志,1为占用,0为空闲};////////////////////////////////////文献表structfileTable{ charfileName[20];//文献名字 intstart;//开始位置 intlength;//文献长度 intmaxLength;//最大长度charfileKind[8];//文献种类,此默以为txt structtm*timeinfo;//文献创立时间};//////////////////////////////////打开文献表structopenFileTable{ charfileName[20];//文献名字 charfileKind[8];//文献类型 intstart;//文献开始位置 intlength;//文献长度 intmaxLength;//最大长度 intopenCount;//打开文献进程数 structtm*timeinfo;//文献创立时间};//////////////////////////////typedefstructfreeDiskTableLinDataType;//定义链表数据类型#include"LinList.h"//链表操作集合SLNode*freeDiskTableHead;//定义磁盘分派表链表头指针#defineMaxSize100//定义线性表最大长度typedefstructfileTableSeqDataType;//定义线性表数据类型#include"SeqList.h"//线性表操作集合SeqListL;//文献表,模仿文献操作嘛,文献数不多,故可以用线性表,简化操作^_^structopenFileTableOFT[10];//打开文献表数组intOFT_count=0;//打开文献表占用长度voidmain(){ structorderTable//命令表 { charname[8]; }; charorderInput[30];//存储顾客输入命令字符串 charorderName[8];//命令名字 charfileName[20];//命令参数1,是文献名字 charparameter2[6];//命令参数2,是个数字 charparameter3[30];//命令参数3,是字符串或数字 structorderTableu[9];//命令表 inti=0; intflag=0;//顾客输入串读写位置标志 intflagOrder=-1; ///////////////////////////////////// LinListInitiate(&freeDiskTableHead);//磁盘空间分派键表初始化 structfreeDiskTabletemp; temp.length=0; temp.maxLength=10000; temp.start=0; temp.useFlag=0; if(!LinListInsert(freeDiskTableHead,0,temp)) { printf("初始磁盘空闲表失败!"); system("pause"); exit(0); } ///////////////////////////////////// //文献表初始化 SeqListInitiate(&L);//初始化文献表 ///////////////////////////////////// for(i=0;i<2;i++) for(intj=0;j<2;j++) { system("colorfc"); printf("\n\n\n\n\n\n\n\n\n计046何珠举操作系统课程设计\n"); for(intk=0;k<30000000;k++); system("cls"); system("colorf3"); printf("\n\n\n\n\n\n\n\n\n计046何珠举操作系统课程设计\n"); for(k=0;k<30000000;k++); system("cls"); } system("color17");//设立背景色和前景色//////////////////////////////////////////////////////////////初始化命令表 strcpy(u[0].name,"create"); strcpy(u[1].name,"delete"); strcpy(u[2].name,"read"); strcpy(u[3].name,"write"); strcpy(u[4].name,"ask"); strcpy(u[5].name,"type"); strcpy(u[6].name,"ren"); strcpy(u[7].name,"dir"); strcpy(u[8].name,"close");//////////////////////////////////////////////////////////// while(1) { printf("\n"); printf("|******************************************************|\n"); printf("|*create-创立delete-删除read-读取write-写入*|\n"); printf("|*ask-查询type-显示ren-重命名dir-显示文献*|\n"); printf("|*close-关闭文献*|\n"); printf("|*输入'命令?'获得协助,例如'create?',exit-退出程序*|\n"); printf("|******************************************************|\n"); printf("请输入命令:>"); fflush(stdin);//清空缓冲区 gets(orderInput);//获取顾客输入串 if(!strcmp(orderInput,"exit"))exit(0);//当顾客输入exit退出程序 system("cls");//清屏 for(i=0;orderInput[i]!=''&&orderInput[i]!='\0';i++)//以空格为界分解顾客输入串 { orderName[i]=orderInput[i]; } flag=i;//保存读写指针 if(flag>6)//命令名长度不大于6 { printf("输入命令有误,请重新输入!\n"); continue; } orderName[i]='\0'; flagOrder=-1;//初始化标志位,flagOrder指明命令在命令表中位置 for(i=0;i<9;i++) { if(!strcmp(orderName,u[i].name)) { flagOrder=i;//记录命令位置,以便访问 break; } } if(flagOrder==-1) { printf("你输入命令有误!请重新输入!\n"); continue; } ///////////////////////////////////////////////////// //以空格为界,分解字符串,分解出第一种字符串放到fileName中 for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { fileName[i-flag-1]=orderInput[i]; } fileName[i-flag-1]='\0';//为字符串数组置一种结束标志 ///////////////////////////////////////////////////// flag=i;//下一种字符串读写指针 if(!strcmp(fileName,"?"))//显示命令协助 { switch(flagOrder) { case0: printf("创立一种文献格式create[filename][filelength]\n"); printf("例如:createa11000,将创立名为a1,长度为1000字节文献\n"); break; case1: printf("删除一种文献格式delete[filename]\n"); printf("例如:deletea1,将删除名为a1文献\n"); break; case2: printf("读取一种文献格式read[filename][postion][length]\n"); printf("例如:reada183,从a1文献第8个字节开始,显示3字节内容\n"); break; case3: printf("写一种文献格式write[fileName][postion][conten]\n"); printf("例始:writea115test,从a1文献第15字节开始写入test字符串\n"); break; case4: printf("显示文献属性,格式ask[filename]\n"); printf("例如aska1,将显示文献a1属性\n"); break;case5: printf("显示文献所有内容,格式type[filename]\n"); printf("例如typea1,将显示文献a1所有内容\n"); break; case6: printf("重命名一种文献,格式ren[oldFileName][newFileName]\n"); printf("例如rena1b1,将a1改名为b1\n"); break; case7: printf("显示所有文献,例如dir,将显示所有文献\n"); break; case8: printf("关闭文献,格式close[fileName]\n"); printf("例如,closea1,将关闭文献a1\n"); break; default: printf("命令错误"); } getch(); } else { switch(flagOrder)//对相应命令进行参数解决 { case0: { intTemp[4]={1,10,100,1000}; intsum=0; intlen=0; for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { parameter2[i-flag-1]=orderInput[i]; } parameter2[i-flag-1]='\0';//为字符串数组置一种结束标志 flag=i; len=strlen(parameter2);//求字符串数组长度 for(i=0;i<len;i++)//把第二个参数字符串变成整数 sum=sum+((int)parameter2[len-i-1]-48)*Temp[i]; fileCreate(fileName,sum);//将命令和参数传给建文献模块执行 } break; case1: fileDel(fileName);//删除文献 break; case2: { intTemp[4]={1,10,100,1000}; intsum=0; intlen=0; intsum2=0; ////////////////////////////////////////////////////////// for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { parameter2[i-flag-1]=orderInput[i]; } parameter2[i-flag-1]='\0'; flag=i; len=strlen(parameter2);//求字符串数组长度 for(i=0;i<len;i++)//把第二个参数字符串变成整数 sum=sum+((int)parameter2[len-i-1]-48)*Temp[i]; /////////////////////////////////////////////////////////// for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { parameter3[i-flag-1]=orderInput[i];//把第三个参数变成整型 } parameter3[i-flag-1]='\0'; flag=i; len=strlen(parameter3); for(i=0;i<len;i++) sum2=sum2+((int)parameter3[len-i-1]-48)*Temp[i]; fileRead(fileName,sum,sum2);//调用读文献模块 } break; case3: { intTemp[4]={1,10,100,1000}; intsum=0; intlen=0; ////////////////////////////////////////////////////////// for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { parameter2[i-flag-1]=orderInput[i]; } parameter2[i-flag-1]='\0'; flag=i; len=strlen(parameter2);//求字符串数组长度 for(i=0;i<len;i++)//把第二个参数字符串变成整数 sum=sum+((int)parameter2[len-i-1]-48)*Temp[i]; /////////////////////////////////////////////////////////// for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { parameter3[i-flag-1]=orderInput[i];//获取第三个参数,为字符串 } parameter3[i-flag-1]='\0'; flag=i; ////////////////////////////////////////////////////////// fileWrite(fileName,sum,parameter3);//调用写文献模块 }break; case4: fileAsk(fileName);//查询文献属性 break; case5: fileType(fileName);//显示文献内容 break; case6: { for(i=flag+1;orderInput[i]!=''&&orderInput[i]!='\0';i++) { parameter2[i-flag-1]=orderInput[i]; } parameter2[i-flag-1]='\0'; flag=i; fileRen(fileName,parameter2); } break; case7: fileDir(); break; case8: fileClose(fileName); break; default: printf("错误!没有可执行命令"); } } }}//以上主函数,主函数进行数据构造定义分析顾客输入命令。//提供命令协助。把命令和参数,传递给执行模块//////////////////////////////////////////////////////////////////////voidfileCreate(char*fileName,intfileLength)//没有写到打开文献表{ inti=0; time_trawtime; intstartPosition=0;//文献开始位置,等磁盘分派函数返回值 intmaxLength=fileLength; structfileTabletemp; for(i=0;i<L.size;i++) if(!strcmp(fileName,L.list[i].fileName))//判断与否重名,如果重名直接返回 { printf("文献重名,请取别名字!\n"); return;//文献重名,退出创立函数 }if(!requestDisk(&startPosition,&maxLength)) { printf("申请磁盘空间失败!无法建立文献!\n"); return;//申请磁盘空间失败,退出创立函数 } strcpy(temp.fileName,fileName); strcpy(temp.fileKind,"txt");//设立文献类型为txt temp.length=0;//创立时候,还没写入内容,是空文献,长度设为0 temp.maxLength=fileLength;//文献最大长度 temp.start=startPosition;//文献开始位置 time(&rawtime);//获取时间 temp.timeinfo=localtime(&rawtime);//把时间写到构造体里去 if(!SeqListInsert(&L,L.size,temp))//把文献插入到文献表 { printf("插入文献表失败!\n"); system("pause"); exit(0);//把文献插入到文献表,如果失败,退出程序 } printf("成功创立文献!\n\n"); printf("===========================================\n"); printf("文献名长度最大长度类型开始位置\n");//显示刚建立文献 printf("%s",temp.fileName); printf("%d",temp.length); printf("%d",temp.maxLength); printf("%s",temp.fileKind); printf("%d",temp.start); printf("\n===========================================\n"); printf("create进程打开了文献%s,关闭请用close命令!\n\n",fileName); //写到打开文献表 strcpy(OFT[OFT_count].fileName,temp.fileName); strcpy(OFT[OFT_count].fileKind,temp.fileKind); OFT[OFT_count].length=temp.length; OFT[OFT_count].maxLength=temp.maxLength; OFT[OFT_count].start=temp.start; OFT[OFT_count].openCount=1; OFT[OFT_count].timeinfo=temp.timeinfo; OFT_count++;//打开表记录是文献数 //printf("count%d",OFT_count);}voidfileDel(char*fileName){ inti; intflag=0; intk=0;//记录文献在文献表中位置 SLNode*p;//磁盘空间分派表指针 SeqDataTypex;//存储被删除结点,无特殊意义 for(i=0;i<OFT_count;i++)//判断与否被别进程占用,若被占用,打印出错,直接返回 if(!strcmp(fileName,OFT[i].fileName)) { printf("别进程占用文献!无法删除!"); return; } for(i=0;i<L.size;i++)//从文献表里查找到要删除文献,若查找不到,直接返回 { if(!strcmp(fileName,L.list[i].fileName)) { flag=1; k=i; break; } } if(flag==0) { printf("无此文献!"); return; } if(flag==1)//查找到文献后,把磁盘空间置为空闲,之后从文献表中删除 { for(p=freeDiskTableHead;p->next!=NULL;p=p->next) { if(p->next->data.start==L.list[k].start) { p->next->data.useFlag=0; printf("成功删除!\n"); break; } } SeqListDelete(&L,k,&x);//从文献表中删除 }}voidfileRead(char*fileName,intposition,intlength){ inti; intflag=0; intk=0; for(i=0;i<OFT_count;i++)//查找文献打开表,如果存在,则不需要再查找文献表 { if(!strcmp(fileName,OFT[i].fileName)) { k=i; flag=1; OFT[i].openCount++;//各种进程打开,计算器加1 break; } } if(flag!=1)//文献不在打开表,找到它,并写到打开表最后 { for(i=0;i<L.size;i++) { if(!strcmp(fileName,L.list[i].fileName))//找到文献,写到文献打开表 { strcpy(OFT[OFT_count].fileName,L.list[i].fileName); strcpy(OFT[OFT_count].fileKind,L.list[i].fileKind); OFT[OFT_count].length=L.list[i].length; OFT[OFT_count].maxLength=L.list[i].maxLength; OFT[OFT_count].start=L.list[i].start; OFT[OFT_count].timeinfo=L.list[i].timeinfo; OFT[OFT_count].openCount++; k=OFT_count; //OFT_count=1;//初次打开,赋值为1 flag=1;//标志在打开文献表里 } } } if(flag==1) { if(position<0||position+length>OFT[k].length) { printf("读取参数错误,请检查参数!\n"); return; } for(i=0;i<length;i++) printf("%c",disk[OFT[k].start+position+i-1]);//读取内容 printf("\nread进程打开了文献%s,关闭请用close命令!\n\n",fileName); }}voidfileWrite(char*fileName,intposition,char*s)//找到文献,写到打开表,依照打开表操作{ inti=0; intlen=0;//计算写入字串长度,跟本来长度相加,如果超过最大长度,就失败 intk=0;//如果在打开表里打到记录,则记录位置 intflag=0;//如果flag=1,阐明在打开表里找到了,不用在文献表里找了 len=strlen(s); for(i=0;i<OFT_count;i++) { if(!strcmp(fileName,OFT[i].fileName)) { k=i; flag=1; OFT[i].openCount++;//各种进程打开,计算器加1 break; } } if(flag!=1)//文献不在打开表,找到它,并写到打开表最后 { for(i=0;i<L.size;i++) { if(!strcmp(fileName,L.list[i].fileName))//找到文献,写到文献打开表最后 { strcpy(OFT[OFT_count].fileName,L.list[i].fileName); strcpy(OFT[OFT_count].fileKind,L.list[i].fileKind); OFT[OFT_count].length=L.list[i].length; OFT[OFT_count].maxLength=L.list[i].maxLength; OFT[OFT_count].start=L.list[i].start; OFT[OFT_count].timeinfo=L.list[i].timeinfo; OFT[OFT_count].openCount++; k=OFT_count;//记录在文献打开表中位置 flag=1;//标志在打开文献表里 } } } if(1==flag)//如果在打开表里找到文献,则不用再找文献表 { if(OFT[k].length+len>OFT[k].maxLength) { printf("超过文献最大长度,写入失败!\n"); return; } elseif(position<0||position>OFT[k].length) { printf("插入位置非法!请检查参数\n"); return; } else { intj=0; for(i=OFT[k].length-1;i>=OFT[k].start+position;i--) disk[i+len]=disk[i];//给插入字符串空出位置 for(i=OFT[k].start+position;i<OFT[k].start+position+len;i++,j++) disk[i]=s[j];//写进磁盘 for(i=0;i<L.size;i++)//变化文献长度 { if(!strcmp(fileName,L.list[i].fileName)) { L.list[i].length=L.list[i].length+len;//设立文献长度 break; } }OFT[k].length=OFT[k].length+len;//同步更新打开文献表中文献长度 printf("成功写入!\n"); printf("write进程打开了文献%s,关闭请用close命令!\n\n",fileName); } } else printf("无此文献,请输入对的文献名!");}voidfileAsk(char*fileName){ inti; intflag=0; for(i=0;i<OFT_count;i++)//如果在打开表里找到文献,则不用再找文献表 { if(!strcmp(fileName,OFT[i].fileName)) { printf("文献名:%s\n",OFT[i].fileName); printf("类型:%s\n",OFT[i].fileKind); printf("长度:%d\n",OFT[i].length); printf("打开进程数:%d\n",OFT[i].openCount); printf("创立时间:%s\n",asctime(OFT[i].timeinfo)); flag=1; break; } } if(flag!=1) { for(i=0;i<L.size;i++)//从文献表里查找文献 { if(!strcmp(fileName,L.list[i].fileName)) { printf("文献名:%s\n",L.list[i].fileName); printf("类型:%s\n",L.list[i].fileKind); printf("长度:%d\n",L.list[i].length); printf("创立时间:%s\n",asctime(L.list[i].timeinfo)); flag=1; break; } } } if(flag==0) printf("无此文献!\n");}voidfileType(char*fileName){ inti; intflag=0; intk=0; for(i=0;i<OFT_count;i++) { if(!strcmp(fileName,OFT[i].fileName)) { k=i; flag=1; OFT[i].openCount++;//各种进程打开,计算器加1 break; } } if(flag!=1)//文献不在打开表,找到它,并写到打开表最后 { for(i=0;i<L.size;i++) { if(!strcmp(fileName,L.list[i].fileName))//找到文献,写到文献打开表 { strcmp(OFT[OFT_count].fileName,L.list[i].fileName); strcmp(OFT[OFT_count].fileKind,L.list[i].fileKind); OFT[OFT_count].length=L.list[i].length; OFT[OFT_count].maxLength=L.list[i].maxLength; OFT[OFT_count].start=L.list[i].start; OFT[OFT_count].timeinfo=L.list[i].timeinfo; OFT[OFT_count].openCount++; k=OFT_count; //OFT_count=1;//初次打开,赋值为1 flag=1;//标志在打开文献表里 } } } if(flag==1) { for(i=0;i<OFT[k].length;i++) printf("%c",disk[OFT[k].start+i]);//显示所有内容 if(OFT[k].length==0) printf("文献为空,无内容

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论