当前位置:文档之家› 实验六 文件资料系统设计结果

实验六 文件资料系统设计结果

实验六  文件资料系统设计结果
实验六  文件资料系统设计结果

实验六文件系统设计

1.目的和要求

本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。

2.实验内容

为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令DIR 列文件目录

CREATE 创建文件

DELETE 删除文件

MODIFY 修改文件

OPEN 打开文件

CLOSE 关闭文件

列目录时要列出文件名,物理地址,保护码和文件长度。

3.实验环境

①PC兼容机

②Windows、DOS系统、Turbo c 2.0

③C语言

4.实验提示

①首先应确定文件系统的数据结构:主目录、活动文件等。主目录文件的形式存放于磁盘,这样便于查找和修改。

主目录结构:

Ufdname 用户名

Ufdfile 指向用户的活动文件

活动文件结构:

Fpaddr 文件物理地址

Flength 文件长度

Fmode 文件属性(file mode:0-Read Only;1-Write Only;2-Read and Write(default))Fname 文件名称

②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并

以编号作为物理地址,在目录中进行登记。

③本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。5.实验程序

#include "stdio.h"

#include "string.h"

#include "conio.h"

#include "stdlib.h"

#define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/

#define MAXCHILD 50 /*the largest child*/

#define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/

typedef struct /*the structure of OSFILE*/

{

int fpaddr; /*file physical address*/

int flength; /*file length*/

int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/

char fname[MAXNAME]; /*file name*/

} OSFILE;

typedef struct /*the structure of OSUFD*/

{

char ufdname[MAXNAME]; /*ufd name*/

OSFILE ufdfile[MAXCHILD]; /*ufd own file*/

}OSUFD;

typedef struct /*the structure of OSUFD'LOGIN*/

{

char ufdname[MAXNAME]; /*ufd name*/

char ufdpword[8]; /*ufd password*/

} OSUFD_LOGIN;

typedef struct /*file open mode*/

{

int ifopen; /*ifopen:0-close,1-open*/

int openmode; /*0-read only,1-write only,2-read and write,3-initial*/

}OSUFD_OPENMODE;

OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/

OSUFD_LOGIN ufd_lp;

int ucount=0; /*the count of mfd's ufds*/

int fcount[MAXCHILD]; /*the count of ufd's files*/

int loginsuc=0; /*whether login successfully*/

char username[MAXNAME]; /*record login user's name22*/

char dirname[MAXNAME];/*record current directory*/

int fpaddrno[MAX]; /*record file physical address num*/

OSUFD_OPENMODE ifopen[MAXCHILD][MAXCHILD]; /*record file open/close*/

int wgetchar; /*whether getchar()*/

FILE *fp_mfd,*fp_ufd,*fp_file_p,*fp_file;

void main()

{

int i,j,choice1;

char choice[50]; /*choice operation:dir,create,delete,open,delete,modify,read,write*/ int choiceend=1; /*whether choice end*/

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

void LoginF(); /*LOGIN FileSystem*/

void DirF(); /*Dir FileSystem*/

void CdF(); /*Change Dir*/

void CreateF(); /*Create File*/

void DeleteF(); /*Delete File*/

void ModifyFM(); /*Modify FileMode*/

void OpenF(); /*Open File*/

void CloseF(); /*Close File*/

void ReadF(); /*Read File*/

void WriteF(); /*Write File*/

void QuitF(); /*Quit FileSystem*/

void help();

if((fp_mfd=fopen("c:\\osfile\\mfd","rb"))==NULL)

{

fp_mfd=fopen("c:\\osfile\\mfd","wb");

fclose(fp_mfd);

}

for(i=0;i

/*textattr(BLACK*16|WHITE);*/

/*clrscr();*/ /*clear screen*/

LoginF(); /*user login*/

/*clrscr();*/

if(loginsuc==1) /*Login Successfully*/

{

while (1)

{

wgetchar=0;

if (choiceend==1)

{

printf("\n\nC:\\%s>",strupr(dirname));

}

else printf("Bad command or file name.\nC:\\%s>",strupr(username));

gets(choice);

strcpy(choice,ltrim(rtrim(strlwr(choice))));

if (strcmp(choice,"dir")==0) choice1=1;

else if(strcmp(choice,"create")==0) choice1=2;

else if(strcmp(choice,"delete")==0) choice1=3;

else if(strcmp(choice,"attrib")==0) choice1=4;

else if(strcmp(choice,"open")==0) choice1=5;

else if(strcmp(choice,"close")==0) choice1=6;

else if(strcmp(choice,"read")==0) choice1=7;

else if(strcmp(choice,"modify")==0) choice1=8;

else if(strcmp(choice,"exit")==0) choice1=9;

else if(strcmp(choice,"cls")==0) choice1=10;

else if(strcmp(choice,"cd")==0) choice1=11;

else if(strcmp(choice,"help")==0) choice1=20;

else choice1=12;

switch(choice1)

{

case 1:DirF();choiceend=1;break;

case 2:CreateF();choiceend=1;if(!wgetchar) getchar();break;

case 3:DeleteF();choiceend=1;if(!wgetchar)getchar();break;

case 4:ModifyFM();choiceend=1;if(!wgetchar) getchar();break;

case 5:choiceend=1;OpenF();if (!wgetchar) getchar();break;

case 6:choiceend=1;CloseF();if (!wgetchar) getchar();break;

case 7:choiceend=1;ReadF();if (!wgetchar) getchar();break;

case 8:choiceend=1;WriteF();if (!wgetchar) getchar();break;

case 9:printf("\nYou have exited this system.");

QuitF();exit(0);break;

case 10:choiceend=1;clrscr();break;

case 11:CdF();choiceend=1;break;

case 20:help();choiceend=1;break;

default:choiceend=0;

}

}

}

else printf("\nAccess denied.");

}

void help(void)

{

printf("\nThe Command List\n");

/*printf("\nCd Attrib Create Modify Read Open Cls Delete Exit Close\n");*/ printf("Create : Create a file(You can initialize file's attribute and content.)\n");

printf("Open : Open a file to modify\n");

printf("Close : Close a file.\n");

printf("Modify : Modify the opened file.\n");

printf("Delete : Delete existed files.\n");

printf("CD : Change current directory.\n");

printf("Exit : Exit this program.\n");

}

char *rtrim(char *str) /*remove the trailing blanks.*/

{

int n=strlen(str)-1;

while(n>=0)

{

if(*(str+n)!=' ')

{

*(str+n+1)='\0';

break;

}

else n--;

}

if (n<0) str[0]='\0';

return str;

}

char *ltrim(char *str) /*remove the heading blanks.*/

{

char *rtrim(char *str);

strrev(str);

rtrim(str);

strrev(str);

return str;

}

void LoginF() /*LOGIN FileSystem*/

{

char loginame[MAXNAME],loginpw[9],logincpw[9],str[50];

int i,j,flag=1;

char a[25];

int findout; /*login user not exist*/

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

void InputPW(char *password); /*input password,use '*' replace*/

void SetPANo(int RorW); /*Set physical address num*/

while(1)

{

findout=0;

printf("\n\nLogin Name:");

gets(loginame);

ltrim(rtrim(loginame));

fp_mfd=fopen("c:\\osfile\\mfd","rb");

for(i=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;i++)

if (strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0)

{

findout=1;

strcpy(logincpw,ufd_lp.ufdpword);

}

fclose(fp_mfd);

if (findout==1) /*user exist*/

{

printf("Login Password:");

InputPW(loginpw); /*input password,use '*' replace*/

if (strcmp(loginpw,logincpw)==0)

{

strcpy(username,strupr(loginame));

strcpy(dirname,username);

fp_mfd=fopen("c:\\osfile\\mfd","rb");

for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++)

{

strcpy(str,"c:\\osfile\\");

strcat(str,ufd_lp.ufdname);

ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));

strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));

fp_ufd=fopen(str,"rb");

fcount[j]=0;

for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++) {

ifopen[j][i].ifopen=0;

ifopen[j][i].openmode=4;

}

fclose(fp_ufd);

}

fclose(fp_mfd);

ucount=j;

SetPANo(0);

printf("\n\nLogin successful! Welcome to this FileSystem\n\n");

loginsuc=1;

return;

}

else

{

printf("\n\n");

flag=1;

while(flag)

{

printf("Login Failed! Password Error. Try Again(Y/N):");

gets(a);

ltrim(rtrim(a));

if (strcmp(strupr(a),"Y")==0) {loginsuc=0;flag=0;}

else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;} }

}

}

else

{

printf("New Password(<=8):");

InputPW(loginpw); /*input new password,use '*' replace*/

printf("\nConfirm Password(<=8):"); /*input new password,use '*' replace*/ InputPW(logincpw);

if (strcmp(loginpw,logincpw)==0)

{

strcpy(ufd_lp.ufdname,strupr(loginame));

strcpy(ufd_lp.ufdpword,loginpw);

fp_mfd=fopen("c:\\osfile\\mfd","ab");

fwrite(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);

fclose(fp_mfd);

strcpy(username,strupr(loginame));

strcpy(dirname,loginame);

strcpy(str,"c:\\osfile\\");

strcat(str,username);

if((fp_ufd=fopen(str,"rb"))==NULL)

{

fp_ufd=fopen(str,"wb");

fclose(fp_ufd);

}

fp_mfd=fopen("c:\\osfile\\mfd","rb");

for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!=0;j++) {

strcpy(str,"c:\\osfile\\");

strcat(str,ufd_lp.ufdname);

ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));

strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));

fp_ufd=fopen(str,"rb");

for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!=0;i++,fcount[j]++) {

ifopen[j][i].ifopen=0;

ifopen[j][i].openmode=4;

}

fclose(fp_ufd);

}

fclose(fp_mfd);

ucount=j;

SetPANo(0);

printf("\n\nLogin Successful! Welcome to this System\n\n");

loginsuc=1;

return;

}

else

{

printf("\n\n");

flag=1;

while(flag)

{

printf("Login Failed! Password Error. Try Again(Y/N):");

gets(a);

ltrim(rtrim(a));

if (strcmp(strupr(a),"Y")==0) {loginsuc=0;flag=0;}

else if(strcmp(strupr(a),"N")==0){loginsuc=0;flag=0;return;} }

}

}

}

}

void SetPANo(int RorW) /*Set physical address num,0-read,1-write*/

{

int i,j;

if (RorW==0)

{

if((fp_file_p=fopen("c:\\osfile\\file\\file_p","rb"))==NULL)

{

fp_file_p=fopen("c:\\osfile\\file\\file_p","wb");

fclose(fp_file_p);

}

fp_file_p=fopen("c:\\osfile\\file\\file_p","rb");

for(i=0;fread(&j,sizeof(int),1,fp_file_p)!=0;i++)

fpaddrno[j]=1;

/*for(i=1;i

if ((i%13)==0) fpaddrno[i]=1;*/

}

else

{

fp_file_p=fopen("c:\\osfile\\file\\file_p","wb");

/*for(i=1;i

if((i%13)==0) fpaddrno[i]=0;*/

for(i=0;i

if (fpaddrno[i]==1)

fwrite(&i,sizeof(int),1,fp_file_p);

}

fclose(fp_file_p);

}

void InputPW(char *password) /*input password,use '*' replace*/ {

int j;

for(j=0;j<=7;j++)

{

password[j]=getch();

if ((int)(password[j])!=13)

{

if((int)(password[j])!=8)

putchar('*');

else

{

if (j>0)

{

j--;j--;

putchar('\b');putchar(' ');putchar('\b');

}

else j--;

}

}

else

{

password[j]='\0';

break;

}

}

password[j]='\0';

}

void DirF() /*Dir FileSystem*/

{

int i,j,count=0;

char sfmode[25],sfpaddr[25],str[25];

int ExistD(char *dirname); /*Whether DirName Exist,Exist-i,Not Exist-0*/

/*clrscr();*/

if (strcmp(strupr(ltrim(rtrim(dirname))),"")!=0)

{

printf("\n\nC:\\%s>dir\n",dirname);

printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","Fil eMode");

j=ExistD(dirname);

for(i=0;i

{

if ((i%16==0)&&(i!=0))

{

printf("\nPress any key to continue..");

getch();

/*clrscr();*/

printf("\n%14s%16s%14s%10s%18s\n","FileName","FileAddress","FileLength","Type","Fil eMode");

}

itoa(ufd[j]->ufdfile[i].fpaddr,str,10);

strcpy(sfpaddr,"file");

strcat(sfpaddr,str);

if (ufd[j]->ufdfile[i].fmode==0) strcpy(sfmode,"Read Only");

else if(ufd[j]->ufdfile[i].fmode==1) strcpy(sfmode,"Write Only");

else if(ufd[j]->ufdfile[i].fmode==2)strcpy(sfmode,"Read And Write");

else strcpy(sfmode,"Protect");

printf("%14s%16s%14d%10s%18s\n",ufd[j]->ufdfile[i].fname,sfpaddr,ufd[j]->ufdfile[i].flen gth,"",sfmode);

}

printf("\n %3d file(s)\n",fcount[j]);

}

else

{

printf("\n\nC:\\>dir\n");

printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");

for(i=0;i

{

if ((i%16==0)&&(i!=0))

{

printf("\nPress any key to continue...");

getch();

/*clrscr();*/

printf("\n%14s%18s%8s\n","DirName","OwnFileCount","Type");

}

printf("%14s%18d%8s\n",ufd[i]->ufdname,fcount[i],"");

count=count+fcount[i];

}

printf("\n %3d dir(s),%5d file(s)\n",ucount,count);

}

}

int ExistD(char *dirname) /*Whether DirName Exist,Exist-i,Not Exist-0*/

{

int i;

int exist=0;

for(i=0;i

if (strcmp(strupr(ufd[i]->ufdname),strupr(dirname))==0)

{

exist=1;

break;

}

if (exist) return(i);

else return(-1);

}

void CdF() /*Exchange Dir*/

{char dname[MAXNAME];

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int ExistD(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/ printf("\nPlease input DirName (cd..-Previous dir; DirNAME-cd [DirNAME]):"); gets(dname);

ltrim(rtrim(dname));

if (ExistD(dname)>=0) strcpy(dirname,strupr(dname));

else if(strcmp(strupr(dname),"CD..")==0) strcpy(ltrim(rtrim(dirname)),""); else printf("\nError.\'%s\' does not exist.\n",dname);

}

void CreateF() /*Create File*/

{int fpaddrno,flag=1,i;

char fname[MAXNAME],str[50],str1[50],strtext[255],a[25];

char fmode[25];

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int FindPANo(); /*find out physical address num*/

int WriteF1(); /*write file*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/

int ExistD(char *dirname);

if (strcmp(strupr(dirname),strupr(username))!=0)

{printf("\nError. You must create file in your own dir.\n");wgetchar=1;}

else

{

printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

if (ExistF(fname)>=0)

{printf("\nError. Name \'%s\' has already existed.\n",fname);

wgetchar=1;

}

else

{printf("Please input FileMode(0-Read Only, 1-Write Only, 2-Read and Write, 3-Protect):");

gets(fmode);

ltrim(rtrim(fmode));

if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0)||(strcmp(fmode ,"3")==0))

{fpaddrno=FindPANo();

if (fpaddrno>=0)

{i=ExistD(username);

strcpy(ufd[i]->ufdfile[fcount[i]].fname,fname);

ufd[i]->ufdfile[fcount[i]].fpaddr=fpaddrno;

ufd[i]->ufdfile[fcount[i]].fmode=atoi(fmode);

ifopen[i][fcount[i]].ifopen=0;

ifopen[i][fcount[i]].openmode=4;

strcpy(str,"c:\\osfile\\file\\file");

itoa(fpaddrno,str1,10);

strcat(str,str1);

fp_file=fopen(str,"wb");

fclose(fp_file);

fcount[i]++;

while(flag)

{printf("Input text now(Y/N):");

gets(a);

ltrim(rtrim(a));

ufd[i]->ufdfile[fcount[i]-1].flength=0;

if(strcmp(strupr(a),"Y")==0)

{fp_file=fopen(str,"wb+");

ufd[i]->ufdfile[fcount[i]-1].flength=WriteF1();

flag=0;

}

else if(strcmp(strupr(a),"N")==0){flag=0;wgetchar=1;}

}

printf("\n\'%s\' has been created successfully!\n",fname);

}

else

{printf("\nFail!No Disk Space. Please format your disk.\n");wgetchar=1;} }

else {printf("\nError. FileMode\'s Range is 0-3\n");wgetchar=1;} }}

}

int ExistF(char *filename) /*Whether FileName Exist,Exist-i,Not Exist-0*/ {int i,j;

int exist=0;

int ExistD(char *dirname);

j=ExistD(dirname);

for(i=0;i

if (strcmp(strupr(ufd[j]->ufdfile[i].fname),strupr(filename))==0) {exist=1;

break;

}

if (exist) return(i);

else return(-1);

}

int FindPANo() /*find out physical address num*/

{int i;

for(i=0;i

if (fpaddrno[i]==0) {fpaddrno[i]=1;break;}

if (i

else return(-1);

}

int WriteF1() /*write file*/

{int length=0;

char c;

printf("Please input text(\'#\' stands for end):\n");

while((c=getchar())!='#')

{fprintf(fp_file,"%c",c);

if (c!='\n') length++;

}

fprintf(fp_file,"\n");

fclose(fp_file);

return(length);

}

void DeleteF() /*Delete File*/

{char fname[MAXNAME];

char str[50],str1[50];

int i,j,k,flag=1;

char a[25]; /*whether delete*/

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/

int ExistD(char *dirname);

if (strcmp(strupr(dirname),strupr(username))!=0)

{printf("\nError. You can only delete file in your own dir.\n");wgetchar=1;}

else

{printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

i=ExistF(fname);

if (i>=0)

{k=ExistD(username);

if(ifopen[k][i].ifopen==1)

{printf("\nError. \'%s\' is in open status. Close it before delete.\n",fname);wgetchar=1;} else

{

while(flag)

{printf("\'%s\' will be deleted. Are you sure(Y/N):",fname);

gets(a);

ltrim(rtrim(a));

if(strcmp(strupr(a),"Y")==0)

{fpaddrno[ufd[k]->ufdfile[i].fpaddr]=0;

itoa(ufd[k]->ufdfile[i].fpaddr,str,10);

for(j=i;j

{strcpy(ufd[k]->ufdfile[j].fname,ufd[k]->ufdfile[j+1].fname);

ufd[k]->ufdfile[j].fpaddr=ufd[k]->ufdfile[j+1].fpaddr;

ufd[k]->ufdfile[j].flength=ufd[k]->ufdfile[j+1].flength;

ufd[k]->ufdfile[j].fmode=ufd[k]->ufdfile[j+1].fmode;

ifopen[k][j]=ifopen[k][j+1];

}

fcount[k]--;

strcpy(str1,"c:\\osfile\\file\\file");

strcat(str1,str);

remove(str1);

flag=0;

printf("\n\'%s\' has been deleted successfully.\n",fname);

wgetchar=1;

}

else if(strcmp(strupr(a),"N")==0)

{printf("\nError. \'%s\' hasn\'t been deleted.\n",fname);

wgetchar=1;

flag=0;}

}}}

else

{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}}

}

void ModifyFM() /*Modify FileMode*/

{char fname[MAXNAME],str[50];

int i,j,k,flag;

char fmode[25]; /*whether delete*/

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

void InputPW(char *password); /*input password,use '*' replace*/

void SetPANo(int RorW); /*Set physical address num*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/

int ExistD(char *dirname);

if (strcmp(strupr(dirname),strupr(username))!=0) {printf("\nError.You can only modify filemode in yourself dir.\n");wgetchar=1;}

else

{ printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

i=ExistF(fname);

if (i>=0)

{k=ExistD(username);

if(ifopen[k][i].ifopen==1)

{printf("\nError.\'%s\' is in open status. Close it before modify.\n",fname);wgetchar=1;}

else

{

if(ufd[k]->ufdfile[i].fmode==0) strcpy(str,"read only"); /*FileMode*/

else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str,"write only");

else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str,"read and write");

else strcpy(str,"Protect");

printf("\'%s\' filemode is %s.\n",fname,strupr(str));

printf("Modify to(0-read only,1-write only,2-read and write,3-Protect):");

gets(fmode);

ltrim(rtrim(fmode));

if(strcmp(fmode,"0")==0)

{ufd[k]->ufdfile[i].fmode=0;

printf("\n\'%s\' has been modified to READ ONL Y mode successfully.\n",fname);

wgetchar=1;

}

else if(strcmp(fmode,"1")==0)

{ufd[k]->ufdfile[i].fmode=1;

printf("\n\'%s\' has been modified to WRITE ONL Y mode successfully.\n",fname);

wgetchar=1;

}

else if(strcmp(fmode,"2")==0)

{ufd[k]->ufdfile[i].fmode=2;

printf("\n\'%s\' has been modified to READ AND WRITE mode successfully.\n",fname);

wgetchar=1;

}

else if(strcmp(fmode,"3")==0)

{ufd[k]->ufdfile[i].fmode=3;

printf("\n\'%s\' has been modified to FORBID mode successfully.\n",fname);

wgetchar=1;

}

else {printf("\nError.\'%s\' is not modified.\n",fname);wgetchar=1;}

}

}

else

{printf("\nError. \'%s\' dose not exist.\n",fname);wgetchar=1;}}

}

void OpenF() /*Open File*/

{char fname[MAXNAME];

char str[25],str1[25],fmode[25];

int i,k;

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/

int ExistD(char *dirname);

if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0)

{printf("\nError. Please change to ufd dir before open.\n");wgetchar=1;return;}

printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

i=ExistF(fname);

if (i>=0)

{k=ExistD(dirname);

if(!ifopen[k][i].ifopen)

{if (ufd[k]->ufdfile[i].fmode==3)

{printf("\nError. The file\'s mode is FORBID. Can not open.\n");wgetchar=1;}

else

{printf("Please input FileOpenMode(0-Read Only,1-Write Only,2-Read and Write):");

gets(fmode);

ltrim(rtrim(fmode));

if((strcmp(fmode,"0")==0)||(strcmp(fmode,"1")==0)||(strcmp(fmode,"2")==0))

{if(fmode[0]=='0') /*open file with read only mode*/

{strcpy(str,"read only");

if((ufd[k]->ufdfile[i].fmode==0)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;

}

else if(fmode[0]=='1') /*open file with write only mode*/

{strcpy(str,"write only");

if((ufd[k]->ufdfile[i].fmode==1)||(ufd[k]->ufdfile[i].fmode==2)) ifopen[k][i].ifopen=1;

}

else if(fmode[0]=='2') /*open file with read and write mode*/

{strcpy(str,"read and write");

if(ufd[k]->ufdfile[i].fmode==2) ifopen[k][i].ifopen=1;

}

if(ufd[k]->ufdfile[i].fmode==0) strcpy(str1,"read only"); /*FileMode*/

else if(ufd[k]->ufdfile[i].fmode==1) strcpy(str1,"write only");

else if(ufd[k]->ufdfile[i].fmode==2) strcpy(str1,"read and write");

if(ifopen[k][i].ifopen==1)

{ifopen[k][i].openmode=atoi(fmode);

if (ifopen[k][i].openmode==0) strcpy(str,"read only");

else if(ifopen[k][i].openmode==1) strcpy(str,"write only");

else if(ifopen[k][i].openmode==2) strcpy(str,"read and write");

printf("\n\'%s\' has been opened. OpenMode is %s,FileMode is %s\n",fname,strupr(str),strupr(str1));

wgetchar=1;

}

else

{printf("\nError. \'%s\' hasn\'t been opened. OpenMode Error. OpenMode is %s,but FileMode is %s\n",fname,strupr(str),strupr(str1));wgetchar=1;}

}

else {printf("\nError. FileOpenMode\'s Range is 0-2\n");wgetchar=1;}

}}

else {printf("\nError. \'%s\' is in open status.\n",fname);wgetchar=1;}

}

else

{printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}

}

void CloseF() /*Close File*/

{int i,k,n=0;

char fname[MAXNAME];

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/ int ExistD(char *dirname);

if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0)

{printf("\nError. Please convert to ufd dir before close.\n");wgetchar=1;return;} k=ExistD(dirname);

printf("\nOpen File(s) In This Ufd:\n");/*display openned file*/

for(i=0;i

{if (ifopen[k][i].ifopen==1) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;} if((n%4==0)&&(n!=0)) printf("\n");

}

printf("\n%d files openned.\n",n);

if (n==0) wgetchar=1;

if(n!=0)

{printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

i=ExistF(fname);

if(i>=0)

{if(ifopen[k][i].ifopen==1)

{ifopen[k][i].ifopen=0;

ifopen[k][i].openmode=4;

printf("\n\'%s\' has been closed successfully.\n",fname);

wgetchar=1;

}

else {printf("\nError.\'%s\' is in closing status.\n",fname);wgetchar=1;}

}

else {printf("\nError. \'%s\' is not exist.\n",fname);wgetchar=1;}

}

}

void ReadF() /*Read File*/

{int i,k,n=0;

char fname[MAXNAME];

char str[255],str1[255],c;

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/

int ExistD(char *dirname);

if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError.Please convert to ufd dir before read.\n");wgetchar=1;return;}

printf("\nCaution:Open file first\n");

printf("Opened File(s) List:\n");

k=ExistD(dirname);

for(i=0;i

{if (ifopen[k][i].ifopen==1)

if ((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2)) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}

if((n%4==0)&&(n!=0)) printf("\n");

}

printf("\n%d files openned.\n",n);

if (n==0) wgetchar=1;

if(n!=0)

{printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

i=ExistF(fname);

if(i>=0)

{if(ifopen[k][i].ifopen==1)

{if((ifopen[k][i].openmode==0) ||(ifopen[k][i].openmode==2))

{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);

strcpy(str1,"file");

strcat(str1,str);

strcpy(str,"c:\\osfile\\file\\");

strcat(str,str1);

fp_file=fopen(str,"rb");

fseek(fp_file,0,0);

printf("\nThe text is:\n\n");

printf(" ");

while(fscanf(fp_file,"%c",&c)!=EOF)

if (c=='\n') printf("\n ");

else printf("%c",c);

printf("\n\n%d Length.\n",ufd[k]->ufdfile[i].flength);

fclose(fp_file);

wgetchar=1;

}

else

{printf("\nError.\'%s\' has been opened with WRITE ONL Y mode. It isn\'t read.\n",fname);wgetchar=1;}

}

else {printf("\nError.\'%s\' is in closing status. Please open it before read\n",fname);wgetchar=1;}

}

else {printf("\nError. \'%s\' does not exist.\n",fname);wgetchar=1;}

}

}

void WriteF() /*Write File*/

{int i,k,n=0;

char fname[MAXNAME];

char str[50],str1[50],a[50];

char *rtrim(char *str); /*remove the trailing blanks.*/

char *ltrim(char *str); /*remove the heading blanks.*/

int ExistF(char *filename); /*Whether FileName Exist,Exist-i,Not Exist-0*/

int ExistD(char *dirname);

int WriteF1(); /*write file*/

if (strcmp(strupr(ltrim(rtrim(dirname))),"")==0) {printf("\nError. Please convert to ufd dir before write.\n");wgetchar=1;return;}

k=ExistD(dirname);

printf("\nOpen File(s) with write only mode or read and write mode:\n");/*display openned files with writable mode*/

for(i=0;i

{if (ifopen[k][i].ifopen==1)

if ((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2)) {printf("%15s",ufd[k]->ufdfile[i].fname);n++;}

if((n%4==0)&&(n!=0)) printf("\n");

}

printf("\n%d files open.\n",n);

if (n==0) wgetchar=1;

if(n!=0)

{printf("\nPlease input FileName:");

gets(fname);

ltrim(rtrim(fname));

i=ExistF(fname);

if(i>=0)

{if(ifopen[k][i].ifopen==1)

{if((ifopen[k][i].openmode==1) ||(ifopen[k][i].openmode==2))

{itoa(ufd[k]->ufdfile[i].fpaddr,str,10);

strcpy(str1,"file");

实验 文件管理(二)

实验六:文件系统 一、目的要求 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、例题: ①设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 ②程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 ③为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 ④算法与框图: a、因系统小,文件目录的检索使用了简单的线性搜索。 b、文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。 c、程序中使用的主要设计结构如下: Ⅰ、主文件目录和用户文件目录(MFD、UFD) Ⅱ、打开文件目录(AFD)(即运行文件目录)

三、调度算法的流程图 四、文件管理源程序 #include<> #include<> #include<> #include<> typedef struct ufd { char filename[10];/*文件名*/ char procode[8];/*属性*/

int length;/*文件长度*/ struct ufd *nextfile;/*指向下一个文件*/ }UFD; typedef struct mfd { char username[10];/*用户名*/ struct ufd *link;/*指向该用户的第一个文件*/ }MFD; typedef struct protected_flag { char code[4]; }PRO; typedef struct afd/*运行文件目录*/ { char filename[10];/*打开文件名*/ char procode[4]; int rwpointer;/*读写指针*/ }AFD; PRO flag[3]={"100",/*只读*/ "110",/*读写*/ "001"/*可执行*/ }; UFD *rw_pointer;/*读写指针*/ AFD *afd=NULL; MFD filesystem[10]; int num;/*当前用户个数*/ void displayallfile() { int i; UFD *p; for(i=0;ifilename); printf("文件属性: %s\t||",p->procode); printf("文件长度: %d\n\n",p->length); p=p->nextfile; } }

AD教案实验6单片机最小系统原理图设计

实验六单片机最小系统原理图设计 1 实验目的及要求 ?熟悉Altium designer的操作 ?能够画库原件中没有的库以及封装,并能加载到库,在原理图中熟练调用 ?能够设计较为复杂的电路原理图,并输出元件清单表 2 实验设备 装有Altium designer的电脑一台 3 实验步骤 新建设计工作区:文件-新建-设计工作区 新建PCB工程:文件-新建-工程-PCB工程 新建原理图,PCB图,原理图库以及PCB图库:文件-新建-原理图/PCB/库-原理图库/PCB图库 保存PCB工程文件到以自己名字新建的文件夹里面,保存文件名为51DPJ,文件类型为默认。(实验五已经新建完的可以直接打开,不用再新建一遍了。) 然后在新建完的原理图的里面把本次实验的原理图设计出来。本次实验注重在原理图的编辑以及PCB的制作,以51单片机最小系统为例,大家做的时候可以不完全按照所给原理图画,然后很多元器件可以在网上找到PDF的文档资料,资料中会比较详细介绍元器件的信息,封装,电路图,实物图,以及检测的效果图,电路中的封装基本按照上面来做。

图3 实验原理图 输出元件清单表BOM BOM表对一个项目来说非常重要,因为这张表不仅包含了原理图上的所有元件,同事也是生成部分和采购部门的重要参考文件,因为生成部要利用BOM知道元件的位置及型号,二采购部要知道元件完整型号以及精度等级等参数从而去进行选购,因此,工程师一定要保证BOM单不能出错,否则造成的麻烦可能影响你的产品设计周期。 完整BOM单输出: ?进入BOM单输出对话框:单机菜单Reports---bill of Materials进入BOM单输出对 话框 ?设置BOM单格式并输出:All columns 表格内用于选择 BOM单要添加的栏;从 all columns 栏选中某关键字拖拽到 Grouped Columns 栏用于设置以前关键字进行整行合并;Export 区域内用于设置 BOM 单输出格式;最后单击 EXPORT 按钮导出BOM 单。 ?变量BOM单输出:按照第二部设置好BOM格式后,如果要以变量形式输出 BOM单,课单机Menu按钮,从中选择Change Variant 变量,再到处BOM单既可以变量形式输出。

太原理工机械系统设计实验报告

《机械系统设计》 实验报告 姓名:马睿聪 班级:机械Z1317 学号:2013000384

实验一:采煤机的主功能及辅助功能 采煤机是一个集机械、电气和液压为一体的大型复杂系统,工作环境恶劣,如果出现故障将会导致整个采煤工作的中断,造成巨大的经济损失. 采煤机是实现煤矿生产机械化和现代化的重要设备之一.机械化采煤可以减轻体力劳动、提高安全性,达到高产量、高效率、低消耗的目的. 采煤机分锯削式、刨削式、钻削式和铣削式四种:采煤机是一个集机械、电气和液压为一体的大型复杂系统,工作环境恶劣,如果出现故障将会导致整个采煤工作的中断,造成巨大的经济损失.随着煤炭工业的发展,采煤机的功能越来越多,其自身的结构、组成愈加复杂,因而发生故障的原因也随之复杂.双滚筒采煤机综合了国内外薄煤层采煤机的成功经验,是针对我国具体国情而设计的新型大功率薄煤层采煤机. 采煤机的主要组成部分: 采煤机的类型很多,但基本上以双滚筒采煤机为主,其基本组成部分也大体相同。各种类型的采煤机一般都由下列部分组成。 (1)截割部 截割部的主要功能是完成采煤工作面的截煤和装煤,由左、右截割电机,左、右摇臂减速箱,左、右滚筒,冷却系统,内喷雾系统和弧形挡板等组成。截割部耗能占采煤机装机总功率的80%-90%,

因此,研制生产效率高和比能耗低的采煤机主要体现在截割部。 传动装置: 截割部传动装置的作用是将采煤机电动机的动力传递到滚筒上,以满足滚筒转速及转矩的要求;同时,还应具有调高功能,以适应不同煤层厚度的变化。 截割部的传动方式主要有一下几种: a)、电动机-摇臂减速箱-行星齿轮减速箱-滚筒 b)、电动机-固定减速箱-摇臂减速箱-滚筒 c)、电动机-固定减速箱-摇臂减速箱-行星齿轮减速箱-滚筒 d)、电动机-摇臂减速箱-滚筒螺旋滚筒: 螺旋滚筒是采煤机落煤和装煤的工作机构,对采煤机工作起决定性作用,消耗总装功机率的80%-90%。早期的螺旋滚筒为鼓型滚筒,现代采煤机都采用螺旋滚筒。螺旋滚筒能适应煤层的地质条件和先进的采煤方法及采煤工艺的要求,具有落煤、装煤、自开切口的功能。近些年来出现了一些新的截割滚筒,诸如滚刀式滚筒、直

实验六 文件系统设计结果

实验六文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 2.实验内容 为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令DIR 列文件目录 CREATE 创建文件 DELETE 删除文件 MODIFY 修改文件 OPEN 打开文件 CLOSE 关闭文件 列目录时要列出文件名,物理地址,保护码和文件长度。 3.实验环境 ①PC兼容机 ②Windows、DOS系统、Turbo c 2.0 ③C语言 4.实验提示 ①首先应确定文件系统的数据结构:主目录、活动文件等。主目录文件的形式存放于磁盘,这样便于查找和修改。 主目录结构: Ufdname 用户名 Ufdfile 指向用户的活动文件 活动文件结构: Fpaddr 文件物理地址 Flength 文件长度 Fmode 文件属性(file mode:0-Read Only;1-Write Only;2-Read and Write(default)) Fname 文件名称 ②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并

以编号作为物理地址,在目录中进行登记。

③本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。5.实验程序 #include "stdio.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/ #define MAXCHILD 50 /*the largest child*/ #define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct /*the structure of OSFILE*/ { int fpaddr; /*file physical address*/ int flength; /*file length*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/ char fname[MAXNAME]; /*file name*/ } OSFILE; typedef struct /*the structure of OSUFD*/ { char ufdname[MAXNAME]; /*ufd name*/ OSFILE ufdfile[MAXCHILD]; /*ufd own file*/ }OSUFD; typedef struct /*the structure of OSUFD'LOGIN*/ { char ufdname[MAXNAME]; /*ufd name*/ char ufdpword[8]; /*ufd password*/ } OSUFD_LOGIN; typedef struct /*file open mode*/ { int ifopen; /*ifopen:0-close,1-open*/ int openmode; /*0-read only,1-write only,2-read and write,3-initial*/ }OSUFD_OPENMODE; OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/ OSUFD_LOGIN ufd_lp;

学生成绩管理系统设计实验

实验六学生成绩管理系统设计实验 一、实验目的 1、熟悉汇编语言程序结构; 2、熟悉 INT 21H 的文件操作功能调用; 3、熟悉 INT 21H 的 1、9 号功能和 INT 10H 常用功能的使用方法; 4、掌握多子程序复杂问题程序设计方法; 5、掌握利用汇编语言实现字符串的输入输出程序设计方法; 6、了解多模块程序设计方法。 二、实验原理 我们把可以多次调用、具有通用性、能完成特定功能的程序段编写成的独立程序模块称为子程序。子程序是把一个程序划分成若干模块所用的主要手段,它便于独立设计、测试程序和编制程序文件。 三、实验内容 1、实验要求 设计一个学生成绩管理系统,要求完成文件建立、学生成绩录入、显示指定学号的学生记录、删除一个学生的记录、修改学生记录、返回等工作。学生成绩包括学号(XH)、姓名(XM)、数学(SX)、语文(YW)、外语(WY)字段。至少包括30 名学生信息,每名学生学号字段为 4个字符,姓名字段为 15 个字符(最大),每门成绩字段为 3 个字符(最大)。 程序设计步骤如下: 1、编写主程序 main.asm; 2、编写文件创建子程序create实现在指定盘指定文件夹“ d: ”下建立一个指定名称的文件 2009doc.dat; 3、编写成绩录入子程序append,实现在指定文件尾部插入一个学生的成绩记录; 4、编写显示子程序display,实现按指定学号显示一个学生的记录; 5、编写修改子程序modify,实现按指定学号修改一个学生的记录字段(不需修改直接回车); 6、编写删除子程序,实现按指定学号、姓名删除一个学生的记录; 7、编译、链接、调试,产生可执行文件main.exe。 2、程序流程图

有限元分析实验报告

武汉理工大学 学生实验报告书 实验课程名称机械中的有限单元分析 开课学院机电工程学院 指导老师姓名 学生姓名 学生专业班级机电研 1502班 2015—2016 学年第2学期

实验一方形截面悬臂梁的弯曲的应力与变形分析 钢制方形悬臂梁左端固联在墙壁,另一端悬空。工作时对梁右端施加垂直向下的30KN的载荷与60kN的载荷,分析两种集中力作用下该悬臂梁的应力与应变,其中梁的尺寸为10mmX10mmX100mm的方形梁。 1.1方形截面悬臂梁模型建立 建模环境:DesignModeler 15.0。 定义计算类型:选择为结构分析。 定义材料属性:弹性模量为2.1Gpa,泊松比为0.3。 建立悬臂式连接环模型。 (1)绘制方形截面草图:在DesignModeler中定义XY平面为视图平面,并正视改平面,点击sketching下的矩形图标,在视图中绘制10mmX10mm的矩形。(2)拉伸:沿着Z方向将上一步得到的矩阵拉伸100mm,即可得到梁的三维模型,建模完毕,模型如下图1.1所示。 图1.1 方形截面梁模型 1.2 定义单元类型: 选用6面体20节点186号结构单元。 网格划分:通过选定边界和整体结构,在边界单元划分数量不变的情况下,通过分别改变节点数和载荷大小,对同一结构进行分析,划分网格如下图1.2所示:

图1.2 网格划分 1.21 定义边界条件并求解 本次实验中,讲梁的左端固定,将载荷施加在右端,施以垂直向下的集中力,集中力的大小为30kN观察变形情况,再将力改为50kN,观察变形情况,给出应力应变云图,并分析。 (1)给左端施加固定约束; (2)给悬臂梁右端施加垂直向下的集中力; 1.22定义边界条件如图1.3所示: 图1.3 定义边界条件 1.23 应力分布如下图1.4所示: 定义完边界条件之后进行求解。

程序设计实验报告

学生实验报告 院系:测绘学院 专业班级:测绘13级3班 学号:2013305517 学生姓名:王泽 指导教师:郭辉老师 2016年05月20日

安徽理工大学实验报告 实验课程名称:数据结构与软件开发上机实验 开课院系及实验室:测绘学院红楼二楼机房 实验1 编程基本知识练习 实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义、VB 语言中子过程与函数的定义以及文本文件的读写等知识。 实验内容: 1)变量的定义动态数组的定义与应用; 2)矩阵的加、减、乘运算(定义Sub()子过程或Function()来实现); 3)数据文件的建立、数据的读取与写入。 实验步骤: 1.编辑界面 1.1 打开VB 编程工具,进入编程主界面。

1.2 在窗体上新建“读入数据”和“输出数据”两个按钮。 1.3 双击“窗体”进入代码输入界面,进行代码编辑。 2.用VB 编写的源代码 2.1 矩阵基本运算源码详见附录一。 (1)两矩阵相加 (2)两矩阵相减 (3)矩阵转置 (4)两矩阵相乘 (5)矩阵求逆 2.2 文本文件(本实验中data.txt)的读取源代码 (1)建立文本文件并输入数据 在桌面上新建一“data.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\data.txt”)。输入以下内容: 6,7,4,0.005 A,35.418 B,45.712 C,25.270

D,24.678 在桌面上新建一“result.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\result.txt”)。(2)从文本文件中读数据 Dim linedata as string, m_GaochaN as integer,m_Pnumber as integer,m_knPnumber as integer,M as Double,k1 as integer 'linedata 为存储文本文件一行信息的字符串变量 Dim a() as String,H() as Double 'a()为存储点名,H()存储高程 Open“C:\Users\ WH\Desktop\练习\data.txt”For Input As #1 Line Input #1, linedata k = Split(linedata, ",") m_GaochaN = Val(k(0)) m_Pnumber = Val(k(1)) m_knPnumber = Val(k(2)) M = CDbl(k(3)) For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ",") a(k1)= k(0) GetstationNumber (a) H(k1) = CDbl(k(1)) Next Close #1 (3)将读入点名存储到点名数组中,且返回该点名所对应编号 Function GetstationNumber(name As String) Dim i As Integer For i = 1 To m_Pnumber If P_Name(i) <> "" Then '将待查点名与已经存入点名数组的点比较 If P_Name(i) = name Then GetstationNumber = i Exit For End If Else '待查点是新的点名,将新点名放到P_Name 数组中 P_Name(i) = name GetstationNumber = i Exit For End If Next i End Function (4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中) Open“C:\Users\ WH\Desktop\ 练习\result.txt” For Output As #1 outstring = outstring + str(m_GaochaN) +","

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、实验内容: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作 4、算法与框图 ?因系统小,文件目录的检索使用了简单的线性搜索。 ?文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ?程序中使用的主要设计结构如下:主文件目录和用户文件目录( MFD、UFD); 打开文件目录( AFD)(即运行文件目录) 文件系统算法的流程图如下

三、工具/准备工作: 在开始本实验之前,请回顾教科书的相关内容。并做以下准备: 1) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

FAT文件系统操作系统课程设计实验报告

操作系统课程设计之三 设计任务:模拟OS文件系统 在任一OS(Window或者Dos;也可以是在Linux下,但要求能将结果演示给老 师看)下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟OS 字 ,第 ⑤、每个目录实际能放下文件或子目录30项。 ⑸、文件系统空间分配: ①、第0个盘块(1k)存放磁盘信息(可以设定为格式说明“FAT32”、盘块大小,盘块数等 内容) ②、第1个盘块起,至125盘块,共125个盘块(125k)存放FAT内容 ③、第126、127(2个)盘块,存放位示图

④、从第128盘块至10000盘块,皆为数据(区)盘块,其逻辑编号从0开始,至 9872号数据盘块,即第0数据盘块为128号盘块,第1数据盘块为129号盘块,… ⑤、第0数据盘块(即128号盘块),存放根目录(同样只用一个盘块作根目录), 由于第0、1目录项为“.”(本目录), “..”(父目录),因此根目录下同样只能存放30个文件或目录,并且从第2个目录项开始。 ⑥、文件或子目录数据,放在第1数据盘块及以后的数据盘块中,由用户按需要使 用。 内容 ⑺、删除文件 #DelFile 文件名.扩展名,在文件所在的目录项中,将第一个字节变为0xE5,并同时修改FAT内容和位示图内容;如果文件不存在,给出出错信息 ⑻、文件拷贝 #CopyFile 老文件,新文件,为新文件创建一个目录项,并将老文件内容复制到新文件中,并同时修改FAT内容和位示图内容 ⑼、显示位示图内容

#ShowBitMP,将位示图内容(已有信息部分),显示在屏幕上(按十六进制)⑽、显示FAT内容 #ShowFAT,将FAT内容(已有信息部分),显示在屏幕上(按十六进制) 4、程序的总体流程为: ⑴、输出提示符#,等待接受命令,分析键入的命令; ⑵、对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令 关于对FAT表和MAP表的用法 1.当要用到数据块是,查询MAP表(因为只做比较查询即可),查询到的未用位置 置1,然后在FAT表上进行相应记录,在本程序做出的规定是,当文件夹FAT 表做-1,若是文件则按照FAT做对应的顺序记录,最后一块同样是-1结束,2.回收的时候,是按照FAT表的首项,做顺序置0,然后MAP也在相应位置置0

数据库实验6数据库系统设计

实验报告 学院:计信学院专业:网络工程班级:091 姓名学号实验组实验时间2012-6-1 指导教师成绩实验项目名称实验六:数据库系统设计实 验目的 要求掌握数据库设计的基本技术,熟悉数据库设计的每个步骤中的任务和实施方法,并加深对数据库系统概念和特点的理解。 实 验 要 求 本实验属于设计型实验,通过实验,加强对课堂讲授知识的理解。 实验原理 必须按照数据库设计的四个阶段进行:需求分析(分析用户要求)、概念设计(信息分析和定义)、逻辑设计(设计实现)和物理设计(物理数据库设计)。概念模型设计时采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上地设计概念结构,和自底向上的设计方法;概念模型必须用E-R图进行表示。在逻辑设计阶段,将E-R图转换成关系模式,然后进行关系模式的规范化。在物理设计阶段,将关系模式转化成SQL Server中的具体的数据库表,并建立表间的关系,表的索引,及相关的约束。 实 验仪器(1)硬件条件:个人计算机。 (2)软件条件:Windows 2000NT Server; MS SQL Server 2000。 实验步骤1、完成系统需求分析报告 在系统需求分析报告中包括采用的设计方法、数据流图和数据字典。 2、完成数据库信息要求和关系数据模型设计 使用E-R图表示对数据库中要存储的信息及语义进行详细描述,对数据约束和数据之间的关联进行

详细描述。详细描述系统需要的基本表及属性、视图和索引,对基本表的主码、候选码、外码及被参照表进行说明,对基本表中数据的约束条件进行说明。 3、完成数据库的操作和应用要求报告 在数据库的操作和应用要求报告中,详细描述数据库的数据操作要求、处理方法和处理流程,画出系统功能模块图。 4、在机器上完成整个数据库的设计。 实 验内容 要求根据周围的实际情况,自选一个自己熟悉的小型数据库应用项目,并深入到应用项目的现实世界中,进行系统分析和数据库设计。例如选择学籍管理系统、图书管理系统、材料管理系统或仓库管理系统等。 实验数据我设计的是车站售票管理系统,主要用于车站日常的票务处理。 一、需求分析 车站售票管理系统 员工 管理 模块 汽车 管理 模块 线路 管理 模块 车票 管理 模块 票务 信息 管理 模块 员 工 信 息 添 加 员 工 信 息 删 除 员 工 信 息 修 改 汽 车 信 息 添 加 汽 车 信 息 修 改 汽 车 信 息 删 除 线 路 信 息 添 加 线 路 信 息 修 改 线 路 信 息 删 除 添 加 车 票 删 除 车 票 查 询 车 票 信 息 购 买 / 预 订 车 票员 工 信 息 查 询 汽 车 信 息 查 询 线 路 信 息 查 询 车 票 信 息 查 询 功能模块图 1.员工管理模块: 员工有两种身份,售票员和系统管理员。系统管理员可以进行系统用户的添加,密码的修改操作,汽车,线路,车票信息的更新等,售票员可以查询以上信息和购买车票等。 2.线路信息管理模块:

心得体会 机械原理实验心得体会

机械原理实验心得体会 机械原理实验心得体会 机械原理课程设计心得体会 十几天的机械原理课程设计结束了,在这次实践的过程中学到了一些除技能以外的其他东西,领略到了别人在处理专业技能问题时显示出的优秀品质,更深切的体会到人与人之间的那种相互协调合作的机制,最重要的还是自己对一些问题的看法产生了良性的变化. 在社会这样一个大群体里面,沟通自然是为人处世的基本,如何协调彼此的关系值得我们去深思和体会.在实习设计当中依靠与被依靠对我的触及很大,有些人很有责任感,把这样一种事情当成是自己的重要任务,并为之付出了很大的努力,不断的思考自己所遇到的问题.而有些人则不以为然,总觉得自己的弱势…..其实在生活中这样的事情也是很多的,当我们面对很多问题的时候所采取的具体行动也是不同的,这当然也会影响我们的结果.很多时候问题的出现所期待我们的是一种解决问题的心态,而不是看我们过去的能力到底有多强,那是一种态度的端正和目的的明确,只有这样把自己身置于具体的问题之中,我们才能更好的解决问题. 在这种相互协调合作的过程中,口角的斗争在所难免,关键是我们如何的处理遇到的分歧,而不是一味的计较和埋怨.这不仅仅是在类似于这样的协调当中,生活中的很多事情都需要我们有这样的处理能力,面对分歧大家要消除误解,相互理解,增进了解,达到谅解…..也许很多问题没有想象中的那么复杂,关键还是看我们的心态,那种处理和解决分歧

的心态,因为毕竟我们的出发点都是很好的.课程设计也是一种学习同事优秀品质的过程,比如我组的纪超同学,人家的确有种耐得住寂寞的心态.确实他在学习上取得了很多傲人的成绩,但是我所赞赏的还是他追求的过程,当遇到问题的时候,那种斟酌的态度就值得我们每一位学习,人家是在用心造就自己的任务,而且孜孜不倦,追求卓越.我们过去有位老师说得好,有有些事情的产生只是有原因的,别人能在诸如学习上取得了不一般的成绩,那绝对不是侥幸或者巧合,那是自己付出劳动的成果的彰显,那是自己辛苦过程的体现.这种不断上进,认真一致的心态也必将导致一个人在生活和学习的各个方面做的很完美,有位那种追求的锲而不舍的过程是相同的,这就是一种优良的品质,它将指引着一个人意气风发,更好走好自己的每一步. 在今后的学习中,一定要戒骄戒躁,态度端正,虚心认真….要永远的记住一句话:态度决定一切. 一、温故而知新。课程设计发端之始,思绪全无,举步维艰,对于理论知识学习不够扎实的我深感“书到用时方恨少”,于是想起圣人之言“温故而知新”,便重拾教材与实验手册,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟诸多平时学 习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的灵感。二、思路即出路。当初没有思路,诚如举步维艰,茫茫大地,不见道路。在对理论知识梳理掌握之后,茅塞顿开,柳暗花明,思路如泉涌,高歌“条条大路通罗马”。顿悟,没有思路便无出路,

实验二M精编B程序设计含实验报告

实验二M精编B程序设 计含实验报告 The following text is amended on 12 November 2020.

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器 (Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因c b a 、、的不同取值而定),这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 21 21 421 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. y

实验六PID控制系统参数优化设计

实验六 PID 控制系统参数优化设计 一.实验目的: 综合运用MATLAB 中SIMULINK 仿真工具进行复杂控制系统的综合设计与优化设计,综合检查学生的文献查阅、系统建模、程序设计与仿真的能力。 二.实验原理及预习内容: 1.控制系统优化设计: 所谓优化设计就是在所有可能的设计方案中寻找具有最优目标(或结果)的设计方法。控制系统的优化设计包括两方面的内容:一方面是控制系统参数的最优化问题,即在系统构成确定的情况下选择适当的参数,以使系统的某些性能达到最佳;另一方面是系统控制器结构的最优化问题,即在系统控制对象确定的情况下选择适当的控制规律,以使系统的某种性能达到最佳。 在工程上称为“寻优问题”。优化设计原理是“单纯形法”。MATLAB 中语句格式为:min ('')X f s =函数名,初值。 2.微分方程仿真应用:传染病动力学方程求解 三.实验内容: 1.PID 控制系统参数优化设计: 某过程控制系统如下图所示,试设计PID 调节器参数,使该系统动态性能达到最佳。(习题5-6) 1020.1156s s e s s -+++R e PID Y 2.微分方程仿真应用: 已知某一地区在有病菌传染下的描述三种类型人数变化的动态模型为 11212122232 3(0)620(0)10(0)70X X X X X X X X X X X X ααββ?=-=?=-=??==?

式中,X 1表示可能传染的人数;X 2表示已经得病的人数;X 3表示已经治愈的人数;0.0010.072αβ==;。试用仿真方法求未来20年内三种人人数的动态变化情况。 四.实验程序: 建立optm.m 文件: function ss=optm (x) global kp; global ki; global kd; global i; kp=x (1); ki=x (2); kd=x (3); i=i+1 [tt,xx,yy]=sim('optzwz',50,[]); yylong=length(yy); ss=yy(yylong); 建立tryopt.m 文件: global kp; global ki; global kd; global i; i=1; result=fminsearch('optm',[2 1 1]) 建立optzwz.mdl:

有限元分析实验报告

学生学号1049721501301实验课成绩 武汉理工大学 学生实验报告书 实验课程名称机械中的有限单元分析机电工程学院开课学院 指导老师姓名

学生姓名 学生专业班级机电研1502班 学年第学期2016—20152 实验一方形截面悬臂梁的弯曲的应力与变形分析 钢制方形悬臂梁左端固联在墙壁,另一端悬空。工作时对梁右端施加垂直 向下的30KN的载荷与60kN的载荷,分析两种集中力作用下该悬臂梁的应力与应变,其中梁的尺寸为10mmX10mmX100mm的方形梁。 方形截面悬臂梁模型建立1.1 建模环境:DesignModeler15.0。 定义计算类型:选择为结构分析。 定义材料属性:弹性模量为 2.1Gpa,泊松比为0.3。 建立悬臂式连接环模型。 (1)绘制方形截面草图:在DesignModeler中定义XY平面为视图平面,并正 视改平面,点击sketching下的矩形图标,在视图中绘制10mmX10mm的矩形。 (2)拉伸:沿着Z方向将上一步得到的矩阵拉伸100mm,即可得到梁的三维模型,建模完毕,模型如下图 1.1所示。

图1.1方形截面梁模型 :定义单元类型1.2 选用6面体20节点186号结构单元。 网格划分:通过选定边界和整体结构,在边界单元划分数量不变的情况下,通过分别改变节点数和载荷大小,对同一结构进行分析,划分网格如下图 1.2

所示: 图1.2网格划分 1.21定义边界条件并求解 本次实验中,讲梁的左端固定,将载荷施加在右端,施以垂直向下的集中 力,集中力的大小为30kN观察变形情况,再将力改为50kN,观察变形情况,给出应力应变云图,并分析。 (1)给左端施加固定约束; (2)给悬臂梁右端施加垂直向下的集中力; 1.22定义边界条件如图1.3所示:

C程序设计上实验报告(完整版)

C语言程序设计上机实验报告 学院:机械工程学院 班级:机自161213 姓名:刘昊 学号:20162181310 实验时间:2017年3月6号 任课老师:张锐

C语言程序设计上机实验报告 实验一 一、实验名称: C程序的运行环境和运行C程序的方法 二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C 程序 三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。 四、源程序代码: 代码1: 运行结果1:

程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。 代码2: 运行结果2:

程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3: 运行结果3:

程序分析3: 使用if语句进行判断。 五.实验总结 C语言程序设计上机实验报告 实验二 一、实验名称:顺序结构程序设计 二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法, 熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。 三、实验内容: (1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。 (3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。 (4). 编写程序,实现单字符getchar和putchar输入输出。 (5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。 四、源程序代码 代码1: 运行结果1: 程序分析1:

操作系统实验-文件系统设计

文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 实验要求: ①在系统中用一个文件来模拟一个磁盘; ②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 ③实现这个文件系统。 ④能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。 2.实验内容 1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。 3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4)因系统小,文件目录的检索使用了简单的线性搜索。 5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。 6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录。 3.实验环境 VC 6.0 4.实验提示 1) format 格式化

只写打开模拟文件,初始化超级快,初始化dinode 位图 block 位图,初始化主目录,初始化etc 目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd 文件,写入模拟硬盘文件。 2 )install 安装 读写打开模拟文件,读取dinode 位图 block 位图,读取主目录,读取etc 目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd 文件。 3 )login 登陆 用户输入用户名和密码,在passwd 文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。 Login 登录 结束是,登录成功 输入用户名 查找是否有改 用户名 输入密码是 否 密码是否正确 否 4 )ialloc 申请inode 空间 先检测inode 位图是否加锁,是则退出。加锁,检测inode 空间是否还有已满,是则退出。在inode 位图中顺序查找空闲的inode ,找到则返回inode 地址,block 解锁。函数结束。

综合设计实验六(选做)

要求: 1.已完成前面5个设计实验,并要求得优秀的同学; 2.三个实验选可做一个; 3.必须自己编写代码; 实验六出租车计费器的设计 一、实验目的 1、了解出租车计费器的工作原理。 2、学会用v erilog HDL 语言编写正确的七段码管显示程序。 3、数量掌握用v erilog HDL 编写复杂功能模块。 4、进一步数量状态积在系统设计中的应用。 二、实验原理 出租车计费器一般都是按公里计费,通常是起步价 xx元(xx元可以行走x公里),然后再是 xx元/公里。所以要完成一个出租车计费器,就要有两个计数单位,一个用来计公里,另外一个用来计费用。通常在出租车的轮子上都有传感器,用来记录车轮转动的圈数,而车轮子的周长是固定的,所以知道了圈数自然也就知道了里程。在这个实验中,就要模拟出租车计费器的工作过程,用步进电机模拟出租车轮子,通过传感器,可以得到电机每转一周输出一个脉冲波形。结果的显示用8个七段码管,前四个显示里程,后四个显示费用。 在设计verilog HDL程序时,首先在复位信号的作用下将所有用到的寄存器进行清零,然后开始设定到起步价记录状态,在此状态时,在起步价规定的里程里都一直显示起步价,直到路程超过起步价规定的里程时,系统转移到每公里计费状态,此时每增加一公里,计费器增加相应的费用。 另外讲一讲编写过程中的的一些小技巧。为了便于显示,在编写过程中的数据用BCD码来显示,这样就不存在数据格式转换的问题。比如表示一个三位数,那么就分别用四位二进制码来表示,当个位数字累加大于9时,将其清零,同时十位数字加1,依此类推。 三、实验内容 本实验要完成的任务就是设计一个简单的出租车计费器,要求是起步价3元,准行1

相关主题
文本预览
相关文档 最新文档