实验4代码

实验4代码
实验4代码

1、编程管理文件makefile

filsys:main.o igetput.o iallfre.o ballfre.o name.o access.o log.o close.o create.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.o

cc -o filsys main.o igetput.o iallfre.o ballfre.o name.o access.o log.o close.o create.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.o

main.o:main.c filesys.h

cc -c main.c

igetput.o:iallfre.c filesys.h

cc -c igetput.c

iallfre.o:iallfre.c filesys.h

cc -c iallfre.c

ballfre.o:ballfre.c filesys.h

cc -c ballfre.c

name.o:name.c filesys.h

cc -c name.c

access.o:access.c filesys.h

cc -c access.c

log.o:log.c filesys.h

cc -c log.c

close.o:close.c filesys.h

cc -c close.c

create.o:create.c filesys.h

cc -c create.c

delete.o:delete.c filesys.h

cc -c delete.c

dir.o:dir.c filesys.h

cc -c dir.c

dirlt.o:dirlt.c filesys.h

cc -c dirlt.c

open.o:open.c filesys.h

cc -c open.c

rdwt.o:rdwt.c filesys.h

cc -c rdwt.c

format.o:format.c filesys.h

cc -c format.c

install.o:install.c filesys.h

cc -c install.c

halt.o:halt.c

cc -c halt.c

clean:

rm edit main.o igetput.o iallfre.o ballfre.o name.o access.o log.o close.o create.o delete.o dir.o dirlt.o open.o rdwt.o format.o install.o halt.o

2、头文件filesys.h

#define BLOCKSIZ 512

#define SYSOPENFILE 40

#define DIRNUM 128

#define DIRSIZ 14

#define PWDSIZ 12

#define PWDNUM 32

#define NOFILE 20

#define NADDR 10

#define NHINO 128

#define USERNUM 10

#define DINODESIZ 32

#define DINODEBLK 32

#define FILEBLK 512

#define NICFREE 50

#define NICINOD 50

#define DINODESTART 2*BLOCKSIZ

#define DATASTART (2+DINODEBLK)*BLOCKSIZ

#define DIEMPTY 0000

#define DIFILE 01000

#define DIDIR 02000

#define UDIREAD 00001

#define UDIWRITE 00002

#define UDIEXICUTE 00004

#define GDIREAD 00010

#define GDIWRITE 00020

#define GDIEXICUTE 00040

#define ODIREAD 00100

#define ODIWRITE 00200

#define ODIEXICUTE 00400

#define READ 1

#define WRITE 2

#define EXICUTE 4

#define DEFAULTMODE 00777

#define IUPDATE 00002

#define SUPDATE 00001

#define FREAD 00001

#define FWRITE 00002

#define FAPPEND 00004

#define DISKFULL 65535

#define SEEK_SET 0

struct inode{

struct inode *i_forw;

struct inode *i_back;

char i_flag;

unsigned int i_ino;

unsigned int i_count;

unsigned short di_number;

unsigned short di_mode;

unsigned short di_uid;

unsigned short di_gid;

unsigned int di_size;

unsigned int di_addr[NADDR]; };

struct dinode{

unsigned short di_number; unsigned short di_mode;

unsigned short di_uid;

unsigned short di_gid;

unsigned long di_size;

unsigned int di_addr[NADDR]; };

struct direct{

char d_name[DIRSIZ];

unsigned int d_ino;

};

struct filsys{

unsigned short s_isize;

unsigned long s_fsize;

unsigned int s_nfree;

unsigned short s_pfree;

unsigned int s_free[NICFREE]; unsigned s_ninode;

unsigned short s_pinode;

unsigned int s_inode[NICINOD]; unsigned int s_rinode;

char s_fmod;

};

struct pwd{

unsigned short p_uid;

unsigned short p_gid;

char password[PWDSIZ];

};

struct dir{

struct direct direct[DIRNUM];

int size;

};

struct hinode{

struct inode *i_forw;

};

struct file{

char f_flag;

unsigned int f_count;

struct inode *f_inode;

unsigned long f_off;

};

struct user{

unsigned short u_default_mode;

unsigned short u_uid;

unsigned short u_gid;

unsigned short u_ofile[NOFILE];

};

extern struct hinode hinode[NHINO];

extern struct dir dir;

extern struct file sys_ofile[SYSOPENFILE]; extern struct filsys filsys;

extern struct pwd pwd[PWDNUM];

extern struct user user[USERNUM];

extern FILE *fd;

extern struct inode *cur_pah_inode; extern user_id,file_block;

extern struct inode *iget();

extern iput();

extern unsigned int balloc();

extern bfree();

extern struct inode *ialloc();

extern ifree();

extern unsigned int namei();

extern unsigned int iname();

extern unsigned int access();

extern _dir();

extern mkdir();

extern chdir();

extern dirlt();

extern unsigned short open();

extern create();

extern unsigned int read();

extern unsigned write();

extern int login();

extern logout();

extern install();

extern format();

extern close();

extern halt();

3、主程序main()

#include"string.h"

#include"stdio.h"

#include"filesys.h"

#include"stddef.h"

#include"stdlib.h"

struct hinode hinode[NHINO];

struct dir dir;

struct file sys_ofile[SYSOPENFILE];

struct filsys filsys;

struct pwd pwd[PWDNUM];

struct user user[USERNUM];

FILE *fd;

struct inode *cur_path_inode;

int user_id,file_block;

main()

{

unsigned short ab_fd1,ab_fd2,ab_fd3,ab_fd4;

unsigned short bhy_fd1;

char *buf;

printf("\nDo you want to format the disk\n");

if (getchar()=='y')

{ printf("Format will erase all context on the disk.Are you sure? \n");

getchar();

}

else

return;

if(getchar()=='y')

format();

else

return;

install();

_dir();

login(2118,"abcd");

user_id=0;

mkdir("a2118");

chdir("a2118");

ab_fd1=create(user_id,"file0.c",01777); file_block=BLOCKSIZ*6+5;

buf=(char *)malloc(BLOCKSIZ*6+5);

write(ab_fd1,buf,BLOCKSIZ*6+5);

close(user_id,ab_fd1);

free(buf);

mkdir("subdir");

chdir("subdir");

ab_fd2=create(user_id,"file1.c",01777); file_block=BLOCKSIZ*4+20;

buf=(char *)malloc(BLOCKSIZ*4+20);

write(ab_fd2,buf,BLOCKSIZ*4+20);

close(user_id,ab_fd2);

free(buf);

chdir("..");

ab_fd3=create(user_id,"file2.c",01777); file_block=BLOCKSIZ*3+255;

buf=(char *)malloc(BLOCKSIZ*3+255);

write(ab_fd3,buf,BLOCKSIZ*3+255);

close(user_id,ab_fd3);

free(buf);

_dir();

delete("ab_file0.c");

ab_fd4=create(user_id,"file3.c",01777); file_block=BLOCKSIZ*8+300;

buf=(char *)malloc(BLOCKSIZ*8+300);

write(ab_fd4,buf,BLOCKSIZ*8+300);

close(user_id,ab_fd4);

free(buf);

_dir();

ab_fd3=open(user_id,"file2.c",FAPPEND);

file_block=BLOCKSIZ*3+100;

buf=(char *)malloc(BLOCKSIZ*3+100);

write(ab_fd3,buf,BLOCKSIZ*3+100);

close(user_id,ab_fd3);

free(buf);

_dir();

chdir("..");

logout();

halt();

}

4、初始化磁盘格式程序format()

#include"stdlib.h"

#include"stdio.h"

#include"stddef.h"

#include"string.h"

#include"filesys.h"

format()

{

struct inode *inode;

struct direct dir_buf[BLOCKSIZ/(DIRSIZ+2)];

struct filsys;

unsigned int block_buf[BLOCKSIZ/sizeof(int)];

char *buf;

int i,j;

fd=fopen("filesystem","r+w+b");

buf=(char *)malloc((DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char)); if(buf==NULL)

{

printf("\nfile system file creat failed!\n");

exit(0);

}

fseek(fd,0,SEEK_SET);

fwrite(buf,1,(DINODEBLK+FILEBLK+2)*BLOCKSIZ*sizeof(char),fd);

pwd[0].p_uid=2116;

pwd[0].p_gid=03;

strcpy(pwd[0].password,"dddd");

pwd[1].p_uid=2117;

pwd[1].p_gid=03;

strcpy(pwd[1].password,"bbbb");

pwd[2].p_uid=2118;

pwd[2].p_gid=04;

strcpy(pwd[2].password,"abcd");

pwd[3].p_uid=2119;

pwd[3].p_gid=04;

strcpy(pwd[3].password,"cccc");

pwd[4].p_uid=2220;

pwd[4].p_gid=05;

strcpy(pwd[4].password,"eeee");

inode=iget(0);

inode->di_mode=DIEMPTY;

iput(inode);

inode=iget(1);

inode->di_number=1;

inode->di_mode=DEFAULTMODE|DIDIR;

inode->di_size=3*(DIRSIZ+2);

inode->di_addr[0]=0;

strcpy(dir_buf[0].d_name,"..");

dir_buf[0].d_ino=1;

strcpy(dir_buf[1].d_name,".");

dir_buf[1].d_ino=1;

strcpy(dir_buf[2].d_name,"etc");

dir_buf[2].d_ino=2;

fseek(fd,DATASTART,SEEK_SET);

fwrite(dir_buf,1,3*(DIRSIZ+2),fd);

iput(inode);

inode=iget(2);

inode->di_number=1;

inode->di_mode=DEFAULTMODE|DIDIR;

inode->di_size=3*(DIRSIZ+2);

inode->di_addr[0]=1;

strcpy(dir_buf[0].d_name,"..");

dir_buf[0].d_ino=1;

strcpy(dir_buf[1].d_name,".");

dir_buf[1].d_ino=2;

strcpy(dir_buf[2].d_name,"password");

dir_buf[2].d_ino=3;

fseek(fd,DATASTART+BLOCKSIZ*1,SEEK_SET); fwrite(dir_buf,1,3*(DIRSIZ+2),fd);

iput(inode);

inode=iget(3);

inode->di_number=1;

inode->di_mode=DEFAULTMODE|DIDIR;

inode->di_size=BLOCKSIZ;

inode->di_addr[0]=2;

for(i=5;i

{ pwd[i].p_uid=0;

pwd[i].p_gid=0;

strcpy(pwd[i].password," ");

}

fseek(fd,DATASTART+BLOCKSIZ*2,SEEK_SET);

fwrite(pwd,1,BLOCKSIZ,fd);

iput(inode);

filsys.s_isize=DINODEBLK;

filsys.s_isize=FILEBLK;

filsys.s_ninode=DINODEBLK*BLOCKSIZ/DINODESIZ-4;

filsys.s_nfree=FILEBLK-3;

for(i=0;i

{

filsys.s_inode[i]=4+i;

}

filsys.s_pinode=0;

filsys.s_rinode=NICINOD+4;

block_buf[NICFREE-1]=FILEBLK+1;

for(i=0;i

block_buf[NICFREE-2-i]=FILEBLK-i;

fseek(fd,DATASTART+BLOCKSIZ*(FILEBLK-NICFREE-1),SEEK_SET); fwrite(block_buf,1,BLOCKSIZ,fd);

for(i=FILEBLK-NICFREE-1;i>2;i-=NICFREE)

{

for(j=0;j

{

block_buf[j]=i-j;

}

block_buf[j]=50;

fseek(fd,DATASTART+BLOCKSIZ*(i-1),SEEK_SET);

fwrite(block_buf,1,BLOCKSIZ,fd);

}

j=i+NICFREE;

for(i=j;i>2;i--)

{

filsys.s_free[NICFREE-1+i-j]=i;

}

filsys.s_pfree=NICFREE-1-j+3;

filsys.s_pinode=0;

fseek(fd,BLOCKSIZ,SEEK_SET);

fwrite(&filsys,1,sizeof(filsys),fd);

fseek(fd,BLOCKSIZ,SEEK_SET);

fread(&filsys.s_isize,1,sizeof(filsys),fd); }

5、进入文件系统程序install()

#include

#include

#include"filesys.h"

install()

{

int i,j;

struct inode *cur_path_inode;

fseek(fd,BLOCKSIZ,SEEK_SET);

fread(&filsys,1,sizeof(struct filsys),fd); for(i=0;i

{

hinode[i].i_forw=NULL;

}

for(i=0;i

{

sys_ofile[i].f_count=0;

sys_ofile[i].f_inode=NULL;

}

for(i=0;i

{

user[i].u_uid=0;

user[i].u_gid=0;

for(j=0;j

user[i].u_ofile[j]=SYSOPENFILE+1;

}

cur_path_inode=iget(1);

dir.size=cur_path_inode->di_size/(DIRSIZ+2); for(i=0;i

{

strcpy(dir.direct[i].d_name," ");

dir.direct[i].d_ino=0;

}

for(i=0;i

{

fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode->di_addr[i],SEEK_SET);

fread(&dir.direct[(BLOCKSIZ/(DIRSIZ+2))*i],1,BLOCKSIZ,fd);

}

fseek(fd,DATASTART+BLOCKSIZ*cur_path_inode->di_addr[i],SEEK_SET);

fread(&dir.direct[(BLOCKSIZ)/(DIRSIZ+2)*i],1,cur_path_inode->di_size%BLOCKSIZ,fd );

}

6、退出程序halt()

#include"stdio.h"

#include"stdlib.h"

#include"filesys.h"

halt()

{ struct inode *inode;

struct inode *cur_path_inode;

int i,j;

chdir("..");

iput(cur_path_inode);

for(i=0;i

{

if(user[i].u_uid!=0)

{

for(j=0;j

{

if(user[i].u_ofile[j]!=SYSOPENFILE+1)

{

close(i,j);

user[i].u_ofile[j]!=SYSOPENFILE+1;

}

}

}

}

fseek(fd,BLOCKSIZ,SEEK_SET);

fwrite(&filsys,1,sizeof(struct filsys),fd);

fclose(fd);

printf("\nGood bye. See you Next Time.Please turn off the switch.\n");

exit(0);

}

7、获取释放i节点内容程序iget()/iput()

#include"stdio.h"

#include"filesys.h"

#include"stdlib.h"

struct inode *iget(dinodeid)

unsigned int dinodeid;

{ int existed=0,inodeid;

long addr;

struct inode *temp,*newinode;

inodeid=dinodeid%NHINO;

if(hinode[inodeid].i_forw==NULL)

existed=0;

else

{ temp=hinode[inodeid].i_forw;

while(temp)

{ if(temp->i_ino==inodeid)

{ existed=1;

temp->i_count++;

return temp;

}

else

temp=temp->i_forw;

}

}

addr=DINODESTART+dinodeid*DINODESIZ;

newinode=(struct inode*)malloc(sizeof(struct inode)); fseek(fd,addr,SEEK_SET);

fread(&(newinode->di_number),DINODESIZ,1,fd);

newinode->i_forw=hinode[inodeid].i_forw;

newinode->i_back=newinode;

if(newinode->i_forw!=NULL)

newinode->i_forw->i_back=newinode;

/* hinode[inodeid].i_forw->i_back=newinode;*/

hinode[inodeid].i_forw=newinode;

newinode->i_count=1;

newinode->i_flag=0;

newinode->i_ino=dinodeid;

newinode->di_size=3*(DIRSIZ+2);

if(dinodeid==3)

newinode->di_size=BLOCKSIZ;

return newinode;

}

iput(pinode)

struct inode *pinode;

{ long addr;

unsigned int block_num;

int i;

if(pinode->i_count>1)

{ pinode->i_count--;

return;

}

else

{ if(pinode->di_number!=0)

{ addr=DINODESTART+pinode->i_ino*DINODESIZ;

fseek(fd,addr,SEEK_SET);

fwrite(&pinode->di_number,DINODESIZ,1,fd);

}

else

{ block_num=pinode->di_size/BLOCKSIZ;

for(i=0;i

bfree(pinode->di_addr[i]);

ifree(pinode->i_ino);

}

if(pinode->i_forw==NULL)

pinode->i_back->i_forw=NULL;

else

{ pinode->i_forw->i_back=pinode->i_back;

pinode->i_back->i_forw=pinode->i_forw;

}

ifree(pinode);

}

}

8、i节点分配和释放函数ialloc()和ifree()

#include"stdio.h"

#include"filesys.h"

static struct dinode block_buf[BLOCKSIZ/DINODESIZ];

struct inode *ialloc()

{

struct inode *temp_inode;

unsigned int cur_di;

int i,count,block_end_flag;

if(filsys.s_pinode==NICINOD) /*s_inode empty*/ {

i=0;

count=0;

block_end_flag=1;

filsys.s_pinode=NICINOD-1;

cur_di=filsys.s_rinode;

while((count

{

if(block_end_flag)

{

fseek(fd,DINODESTART+cur_di*DINODESIZ,SEEK_SET);

fread(block_buf,1,BLOCKSIZ,fd);

block_end_flag=0;

i=0;

}

while(block_buf[i].di_mode==DIEMPTY)

{

cur_di++;

i++;

}

if(i==NICINOD)

block_end_flag=1;

else

{

filsys.s_inode[filsys.s_pinode--]=cur_di;

count++;

}

}

filsys.s_rinode=cur_di;

}

temp_inode=iget(filsys.s_inode[filsys.s_pinode]);

fseek(fd,DINODESTART+filsys.s_inode[filsys.s_pinode]*DINODESIZ,SEEK_SET); fwrite(&temp_inode->di_number,1,sizeof(struct dinode),fd);

filsys.s_pinode++;

filsys.s_ninode--;

filsys.s_fmod=SUPDATE;

return temp_inode;

}

ifree(dinodeid) /*ifree*/

unsigned dinodeid;

{

filsys.s_ninode++;

if(filsys.s_pinode!=NICINOD) /*not full*/

{

filsys.s_inode[filsys.s_pinode]=dinodeid;

filsys.s_pinode++;

}

else /*full*/

{

if(dinodeid

{

filsys.s_inode[NICINOD]=dinodeid;

filsys.s_rinode=dinodeid;

}

}

}

9、磁盘块分配与释放函数balloc()与bfree()

#include"stdio.h"

#include"filesys.h"

static unsigned int block_buf[BLOCKSIZ];

unsigned int balloc()

{

unsigned int free_block,free_block_num;

int i;

if(filsys.s_nfree==0)

{

printf("\nDisk Full!\n");

return DISKFULL;

}

free_block=filsys.s_free[filsys.s_pfree];

if(filsys.s_pfree==NICFREE-1)

{

fseek(fd,DATASTART+(562-filsys.s_nfree)*BLOCKSIZ,SEEK_SET);

fread(block_buf,1,BLOCKSIZ,fd);

free_block_num=block_buf[NICFREE]; /*the total number in the group*/

for(i=0;i

{

filsys.s_free[NICFREE-1-i]=block_buf[i];

}

filsys.s_pfree=NICFREE-free_block_num;

}

else

filsys.s_pfree++;

filsys.s_nfree--;

filsys.s_fmod=SUPDATE;

return free_block;

}

bfree(block_num)

unsigned int block_num;

{

int i;

if(filsys.s_free==0)

{

block_buf[NICFREE]=NICFREE;

for(i=0;i

{

block_buf[i]=filsys.s_free[NICFREE-1-i];

}

filsys.s_pfree=NICFREE-1;

}

fseek(fd,BLOCKSIZ,SEEK_SET);

fwrite(block_buf,1,BLOCKSIZ,fd);

filsys.s_nfree++;

filsys.s_fmod=SUPDATE;

}

10、搜索函数namei()和iname()

#include"string.h"

#include"stdio.h"

#include"filesys.h"

unsigned int namei(name) /*namei*/

char *name;

{

int i,notfound=1;

for(i=0;((i

if((!strcmp(dir.direct[i].d_name,name))&&(dir.direct[i].d_ino!=0)) return dir.direct[i].d_ino; /*find*/

return 0; /*not find*/

}

unsigned int iname(name) /*iname*/

char *name;

{

int i,notfound=1;

for(i=0;((i

if(dir.direct[i].d_ino==0)

{

notfound=0;

break;

}

if(notfound)

{

printf("\n The current directory is full! \n");

return 0;

}

else

{

strcpy(dir.direct[i].d_name,name);

dir.direct[i].d_ino=1;

return i;

}

}

11、访问控制函数access()

#include "stdio.h"

#include "filesys.h"

unsigned int access(user_id,inode,mode)

unsigned int user_id;

struct inode *inode;

unsigned short mode;

{

switch (mode)

{

case READ:

if(inode->di_mode & ODIREAD) return 1;

if((inode->di_mode & GDIREAD)&&(user[user_id].u_gid==inode->di_gid)) return 1;

if((inode->di_mode & UDIREAD)&&(user[user_id].u_uid==inode->di_uid)) return 1;

return 0;

case WRITE:

if(inode->di_mode & ODIWRITE) return 1;

if((inode->di_mode & GDIWRITE)&&(user[user_id].u_gid==inode->di_gid)) return 1;

if((inode->di_mode& UDIWRITE)&&(user[user_id].u_uid==inode->di_uid)) return 1;

return 0;

case EXICUTE:

if(inode->di_mode & ODIEXICUTE) return 1;

if((inode->di_mode & GDIEXICUTE)&&(user[user_id].u_gid==inode->di_gid)) return 1;

if((inode->di_mode & UDIEXICUTE)&&(user[user_id].u_uid==inode->di_uid)) return 1;

return 0;

case DEFAULTMODE:

return 1;

default:

return 0;

}

}

12、显示列表函数_dir()和目录创建函数mkdir()等

#include"stdio.h"

#include"string.h"

#include"filesys.h"

_dir()

{

unsigned short di_mode;

int i,j,k,one;

struct inode *temp_inode;

printf("\nCURRENT DIRECTORY:dir.size=%d\n",dir.size);

for(i=0;i

{

if(dir.direct[i].d_ino!=DIEMPTY)

{ printf("%20s",dir.direct[i].d_name);

temp_inode=iget(dir.direct[i].d_ino);

di_mode=temp_inode->di_mode;

if(temp_inode->di_mode & DIFILE)

printf("f");

else

printf("d");

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

{ one=di_mode%2;

di_mode=di_mode/2;

if(one)

printf("x");

else

printf("-");

}

if(temp_inode->di_mode & DIFILE)

{

printf("%d",temp_inode->di_size);

printf("block chain:");

for(k=0;kdi_size/BLOCKSIZ+1;k++)

printf("%d",temp_inode->di_addr[k]);

printf("\n");

}

else

printf("

block chain:%d\n",dir.direct[i].d_ino);

iput(temp_inode);

}

}

}

mkdir(dirname)

char *dirname;

{

int dirid,dirpos;

struct inode *inode;

struct inode *cur_path_inode;

struct direct buf[BLOCKSIZ/(DIRSIZ+2)];

unsigned int block;

dirid=namei(dirname);

if(dirid!=0)

{

inode=iget(dirid);

if(inode->di_mode & DIDIR)

printf("\n%s directory already existed!\n",dirname);

else

printf("\n%s is a file name,&can't creat a dir the same name\n",dirname); iput(inode);

return;

}

dirpos=iname(dirname);

inode=ialloc();

dirid=inode->i_ino;

dir.direct[dirpos].d_ino=inode->i_ino;

dir.size++;

strcpy(buf[0].d_name,".");

buf[0].d_ino=dirid;

strcpy(buf[1].d_name,"..");

buf[1].d_ino=cur_path_inode->i_ino;

buf[2].d_ino=0;

block=balloc();

fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET);

fwrite(buf,1,BLOCKSIZ,fd);

inode->di_size=2*(DIRSIZ+2);

inode->di_number=1;

inode->di_mode=user[user_id].u_default_mode|DIDIR;

inode->di_uid=user[user_id].u_uid;

inode->di_gid=user[user_id].u_gid;

inode->di_addr[0]=block;

iput(inode);

return;

}

chdir(dirname)

char *dirname;

{

unsigned int dirid;

struct inode *inode;

struct inode *cur_path_inode; /*hafkhhfahfh*/ unsigned short block;

int i,j,low=0,high=0;

dirid=namei(dirname);

if(dirid==0)

{ printf("\n%s does not exist!\n",dirname);

return;

}

inode=iget(dirid);

if(!access(user_id,inode,user[user_id].u_default_mode))

{ printf("\nhas not access to the directory %s\n",dirname); iput(inode);

return;

}

for(i=0;i

{

for(j=0;j

if(dir.direct[j].d_ino==0)

break;

memcpy(&dir.direct[j],&dir.direct[i],DIRSIZ+2);

dir.direct[j].d_ino=0;

}

学号-姓名-Java语言实验报告四

《Java语言与面向对象程序设计基础》课程 实验报告四 姓名:xxx 学号:20097110080xxx 实验题1 [实验要求] ?掌握Java IO流处理 ?掌握文件操作 ?掌握多线程程序设计 [实验程序] import java.io.*; public class Test4_1 { public static void main(String[] args) { try { File myDir=new File("C:/Test"); if ( !myDir.exists()) myDir.mkdir(); else if ( !myDir.isDirectory()) { System.err.println(" 'C:/Test' is not a directory"); return; } File f=new File(myDir,"a.txt"); f.createNewFile(); FileWriter out = new FileWriter(f); for (int i=0;i<26;i++){ out.write((char)('A'+i)); } out.close(); } catch (IOException e) { System.out.println(e); } } } [运行结果]

[实验结论与收获]

掌握文件及文件夹的创建及文件的写入。 实验题2 [实验要求] 将实验1题中新建的"a.txt"文件内容复制到"C:\Test\Ex"目录中"b.txt"文件中。[实验程序] import java.io.*; public class Test4_2 { public static void main(String[] args) { try { File myDir=new File("C:/Test/Ex"); if ( !myDir.exists()) myDir.mkdir(); else if ( !myDir.isDirectory()) { System.err.println(myDir+ " is not a directory"); return; } File myFile =new File(myDir,"b.txt"); myFile.createNewFile(); FileReader in= new FileReader("C:/Test/a.txt"); BufferedReader bufIn = new BufferedReader(in); FileWriter out= new FileWriter (myFile); BufferedWriter bufOut= new BufferedWriter(out); String line; line = bufIn.readLine(); //System.out.println(line); while ( line!= null ) { System.out.println(line); bufOut.write(line,0,line.length()); bufOut.newLine(); line = bufIn.readLine(); } bufIn.close(); bufOut.close(); } catch (IOException e) { System.out.println(e); } } } [运行结果]

51单片机20个实验-代码详细

第一章单片机系统板说明 一、概述 单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。 该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。 二、单片机板简介 本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。因此构成单片机实验系统。 1、主要技术参数 (1)MSC-51单片机板 板上配有ATMEL公司的STC89C51芯片。 STC89C51资源:32个I/O口;封装DIP40。 STC89C51开发软件:KEIL C51。 2、MSC-51单片机结构 (1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。 (2)单片机板左上侧有一个串口,用于下载程序。 (3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。 (4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。 三、母板简介 主要技术参数 (1)实验系统电源 实验系统置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。 主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板

JAVA洗衣机仿真程序实验报告及代码

一.实验题目:用java编写洗衣机仿真程序 二.实验目的: 1.熟悉并掌握洗衣机(全自动)的工作原理和运行过程. 2.学会软件工程设计中的一系列分析研究,对需求分析,可行性研究,软件 模型等有一定的了解,为以后的软件设计工作打下良好的基础。 3.通过的洗衣机仿真系统的编写与学习,加深了对Java这门语言的了解, 对其中的类的设计,类之间的关系,界面的设计(按钮及布局的设计)有了更深的了解与体会,为Java的学习做好准备工作。 三.实验要求: 了解全自动洗衣机的简单工作过程及实现。其中包括,洗衣的方式(标准或是柔和)、洗衣中的水位选择(高水位洗衣、低水位洗衣等)等方面需要在人们将衣服放入洗衣机洗衣服之后手动来选择;并且是必须选择的洗衣参数。当选择了一种洗衣参数后,按下启动按钮,洗衣机就会自动完成洗衣服的整个过程。在满足基本功能以外,还需要尽量考虑外观、造型、节水等方面的设计,符合人机界面的基本要求。 四.实验分析: 1.洗衣机需求分析: 标准清洗:浸泡/清洗/甩干 快速清洗:清洗/甩干 大件衣物(冬衣,牛仔类):浸泡(温水,延长浸泡/清洗(延长筒转时间)/甩干床单,窗帘类:浸泡(温水)/清洗 根据衣物的不同用按钮选择上述洗衣模式即可.其中甩干可选可不选. 尽量设计了一个节水功能,可以实现水回收.在无需甩干时水不流走,余下的水可做其他用途,实现节水. 2.主要的类实现 (1).继承类 (2).包括进水,排水,洗涤,漂洗,甩干等成员函数 (3).水位的选择通过参数传递决定进水函数 (4).其余通过调用筒的转动函数(run)并通过一定的参数控制实现

3.程序设计步骤 ≡≥选择水温 ≡≥放入衣物 ≡≥选择洗衣模式 ≡≥脱水 ≡≥排水 ≡≥烘干 ≡≥关闭 五.设计与实现过程: 1.洗衣机类的部分实现: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Washing extends JApplet{ private JFrame jf; private JButton jb1,jb2,jb3,jb4,jb5,jb6; public static void main(String[] args){ Washing flowTest=new Washing(); flowTest.setSize(270,160); flowTest.go(); //flowTest.show(true); } public void go(){ jf=new JFrame("洗衣机功能模拟器"); Container cp=jf.getContentPane(); cp.setLayout(null); jb1=new JButton("入水"); jb2=new JButton("加衣"); jb3=new JButton("脱水"); jb4=new JButton("排水"); jb5=new JButton("烘干"); jb6=new JButton("关闭"); // Container cp=jf.getContentPane(); // cp.setLayout(new BorderLayout()); jb1.setBounds(10, 10, 80, 80); cp.add(jb1); //指定组件追加到这个容器的末尾。这是一个方便的方法为addImpl。 //注意:如果一个组件已被添加到一个已显示的容器,验证必须在该容器调用,以显示新的组件。如果正在添加多个组件,你可以通过调用验证只有一次,已添加的所有组件后提高效率。 jb2.setBounds(110, 10, 80, 80); cp.add(jb2);

JAVA试验

《Java程序设计》课程实验指导书

实验一Java开发环境的安装与配置,熟悉Java程序 结构 一、实验目的: 1.掌握JDK的安装步骤。 2.理解环境变量PATH,CLASSPATH的作用,以及它们的设置方法。 3.熟悉Eclipse编辑环境,编写简单的Application程序,并编译和执行。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序和Applet程序(能输出一条简单的问候信息); 三、实验要求: 1.能正确地安装JDK 2.熟悉环境变量PATH,CLASSPATH设置方法,熟悉编辑环境 3.调试程序、编译,运行后得到正确的结果 4.写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示, 并给出解决办法。 四、实验步骤: 1.从https://www.360docs.net/doc/e95174097.html,上下载最新版本的JDK,并安装。 2.设置环境变量PATH,CLASSPATH,使得Java程序能正确编译和执行。 3.编写一个HelloWorld.java程序, (1)在主方法static public void main(String[]args)中调用System. out.println()方法,使程序输出一条问候信息; (2)编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用 javac.exe和java.exe编译和执行程序)

实验二Java语言基础 一、实验目的: 熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。 二、实验内容: 1.编写Java Application程序,输出1900年到2000年之间的所有润年。 (闰年的判断条件:能被4整除且不能被100整除,或能被400整除); 2.编写Java Appet程序打印“水仙花”数(它的个、十、百位数字的立 方的和等于该数本身,如:153=1^3+5^3+3^3) 3.编写Java Application程序,分别用do-while和for循环计算 1+1/2!+1/3!+1/4!...的前20项和 三、实验要求: 1.正确使用Java语言的选择语句,循环语句; 2.调试程序、编译,运行后得到正确的结果 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提成 示,并给出解决办法。 四、实验步骤: 1.编写主类; 2.在static public void main(String[]args)方法中加入实现要求功能 的代码,主要步骤如下: (第一题)从1900到2000循环,按照闰年的判断条件是则输出1900年到2000年之间的所有润年。 (第二题)编写Java Applet,在public void paint(Graphics g)方法中加入实现要求功能的代码,主要步骤是:从100到1000循环,判断每个 数是否符合水仙花数的特点,是则输出之。 3.编译运行程序,观察输出结果是否正确。 五、自做实验 1.输出100以内的所有素数。

图论实验代码

图论实验报告(代码) 学号:1241902129 姓名:肖尧

1.写一个程序,输入一个图,一对顶点和通路长度,输出两个顶点间 指定长度的通路。 程序代码: #include #include #include using namespace std; #define MAX 20 typedef struct ArcNode{ int adjvex; struct ArcNode *nextarc; }ArcNode; typedef struct VNode{ char data; ArcNode *firstarc; }VNode,AdjList[MAX]; typedef struct{ AdjList vertices; int n,e; }MGraph; int path[MAX]; int visited[MAX]; //返回字符v 在图中的位置 int LocateV ex(MGraph G, char v) { int i; for(i=0;i

{ return (i>=0 && i>G.n>>G.e; cout<20) { cout<<"输入的数字不符合要求,请重新输入: "; cin>>G.n>>G.e; } while(G.e>((G.n-1)*G.n/2)) { cout<<"输入的数字不符合要求,请重新输入: "; cin>>G.e; } cout<<"请输入各顶点的名称: "; //建立顶点表 for(i=0;i>G.vertices[i].data; G.vertices[i].firstarc=NULL;//初始化图 } cout<

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

JAVA实验四异常处理

实验四异常处理 实验目的 1、掌握异常的概念和Java 异常处理机制。 2、掌握异常的定义、抛出和捕捉处理。 实验内容与要求 1、仔细读下面的JAVA语言源程序,自己给出程序的运行结果 import java.io.*; public class Ch31 { public static void main(String args[])throws IOException { int[] ko=new int[15]; int n,a; String x; BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter an integer:"); x=keyin.readLine(); n=Integer.parseInt(x); try { a=110/n; ko[15]=100; System.out.println("此描述无法执行!"); } catch(ArithmeticException e){ System.out.println("除数为0的错误"); } catch(ArrayIndexOutOfBoundsException f) { System.out.println("数组索引值大于数组长度的错误!"); } System.out.println("执行完catch的描述!!!"); } } 2.运行下面的程序,自己给出程序的运行结果。 import java.io.*; public class Ch32{ public Ch32(){ try{ int a[] = new int[2]; a[4] = 3; System.out.println("After handling exception return here?"); }catch(IndexOutOfBoundsException e){ System.err.println("exception msg:" + e.getMessage()); System.err.println("exception string:" + e.toString()); e.printStackTrace(); }finally{

实验一代码及截图

实验一基础 实验目的 1、掌握Visual Studio运行环境的配置方法。 2、通过编写简单的页面,掌握网页的编写和运行方法。 实验内容 一、创建文件系统网站; 1. 在D盘新建文件夹03soft,作为网站目录; 2. 在网站的默认的主页上添加控件Button,双击该控件添加如下代码: protected void Button1_Click(object sender, EventArgs e) { ("欢迎光临学习天地!"); } 3. 运行这个页面,写出这个页面运行时的页面地址。 实验截图:

二、创建HTTP网站 1、打开IIS管理器,进入管理页面,添加网站名称mysite,并设置物理路径; 2、创建HTTP网站,并选取mysite作为网站目录; 3、在的默认的主页上添加控件Button,双击该控件添加如下代码: protected void Button1_Click(object sender, EventArgs e) { ("欢迎光临学习天地!"); } 4、运行这个页面,写出这个页面运行时的页面地址。

实验截图: 三、创建单一文件模式网页 1、打开第一题中的文件系统网站,新建一个名为的单一文件模式的网页,并在网页中添加Label控件和Button控件,双击Button控件,添加如下代码: = "Clicked at " + 、运行这个页面,写出单击Button时的运行结果 实验截图:

四、打开第一题中的文件系统网站,在网页的Page_Load事件中编写代码,实现在ListBox1中填充选项,并且单击按钮时不重复加载。 实验截图:

Java实验报告及其源代码 Java基本程序设计

实验1 Java基本程序设计 一、实验目的 1.掌握设置Java 程序运行环境的方法; 2.了解Java 的数据类型; 3.掌握变量的声明方式; 4.理解运算符的优先级; 5.掌握Java 基本数据类型、运算符与表达式; 6.掌握Java基本输入输出方法。 二、实验环境 1.PC微机; 2.DOS操作系统或 Windows 操作系统; 3.Java sdk程序开发环境、eclipse集成环境。 三、实验内容 1.货币转换 在控制台下输入任意一个美元数值,将其转换成等价的人民币数值(假设100美元=636.99人民币)后在消息框中输出。 2.输出两个数的较大值 分别在两个对话框中输入两个任意的数值,显示其较大的数值。 四、实验步骤 1.新建Java项目,并创建package ; 2.创建两个java类文件,分别命名为 CurrencyConversion.java 和 valueCompare.java ; 3.在 CurrencyConversion.java 中写入代码: package FirstExperiment; import java.util.Scanner;

import javax.swing.JOptionPane; public class CurrencyConversion { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Please input the money(dollar): "); Scanner input = new Scanner(System.in); double moneyOfDollar = input.nextDouble(); double moneyOfRMB = moneyOfDollar * 6.3699 ; String output = "$" + moneyOfDollar + "=" + "¥" + moneyOfRMB ; JOptionPane.showMessageDialog(null, output); } } 4.在 valueCompare.java 中写入代码: package FirstExperiment; import javax.swing.JOptionPane; public class valueCompare { public static void main(String[] args) { String stringNumber1 = JOptionPane.showInputDialog("Please input the first number") ; double number1 = Double.parseDouble(stringNumber1) ; String stringNumber2 = JOptionPane.showInputDialog("Please input the second number") ; double number2 = Double.parseDouble(stringNumber2); if(number1 > number2) JOptionPane.showMessageDialog(null, number1 + " is bigger"); else

Java实验四 -实验报告

实验四类和对象;类的继承和派生;多态性; 接口;构造器应用 一、实验目的 1、掌握类与对象的关系; 2、掌握类的定义; 3、掌握对象的声明及使用; 4、掌握构造方法的概念及调用时机; 5、掌握构造方法的重载; 6、掌握匿名对象的使用。 二、实验学时 2学时 三、实验类型 验证性实验 四、实验需求 1、硬件 每位学生配备计算机一台 2、软件 Windows 7操作系统,JDK,eclipse,MySQL 3、网络 无 4、工具 无 五、实验理论与预备知识 1、类与对象的关系; 2、类的定义; 3、对象的声明及使用; 4、构造方法的概念及调用时机; 5、构造方法的重载; 6、匿名对象的使用。 六、实验内容与结果 1、编写一个应用程序,该程序中有3个类:Trangle、Leder和Circle,分别用来刻画“三角形”、“梯 形”和“圆形”。

//三角形类 class Trangle { double sidea,sideb,sidec,sjxzc,sjxmj; boolean boo; public Trangle(double a,double b,double c) { sidea=a; sideb=b; sidec=c; if(a+b>c && a+c>b && b+c>a) { boo=true; } else { boo=false; } } double getlength() { double length; length=sidea+sideb+sidec; return length; } public double getarea() { if(boo) { double area; double p=(sidea+sideb+sidec)/2.0; area=Math.sqrt(p*(p-sidea)*(p-sideb)*(p-sidec)); return area; } else { System.out.println("不是一个三角形,不能计算面积"); return 0; } } } //梯形类 class Lader

数据结构图及其应用实验报告+代码

附件2: 北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 实验题目图及其应用实验时间 2011.5.10 一、实验目的、意义 (1)熟悉图的邻接矩阵(或邻接表)的表示方法; (2)掌握建立图的邻接矩阵(或邻接表)算法; (3)掌握图的基本运算,熟悉对图遍历算法; (4)加深对图的理解,逐步培养解决实际问题的编程能力 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: (1)建立图的邻接矩阵(或邻接表); (2)对其进行深度优先及广度优先遍历。 三、实验所涉及的知识点 1.创建一个图: CreateUDN(MGraph &G) 2.查找v顶点的第一个邻接点: FirstAdjVex(MGraph G,int v) 3. 查找基于v顶点的w邻接点的下一个邻接点: NextAdjVex(MGraph G,int v,int w) 4.图的矩阵输出: printArcs(MGraph G) 5:顶点定位: LocateVex(MGraph G,char v) 6. 访问顶点v输出: printAdjVex(MGraph G,int v) 7. 深度优先遍历: DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 8. 广度优先遍历BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 9. DFS,从第v个顶点出发递归深度优先遍历图G: DFS(MGraph G,int v) 四、实验记录 1.对顶点的定位其数组下标,利用了找到之后用return立即返回,在当图顶点 多的情况下节省了搜索时间,程序如下 //对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){ for (int i=0;i

JAVA实验报告一

Java语言程序设计实验报告一 班级:姓名:学号: 一、实验教学目的与基本要求 Java程序设计的实验是Java程序设计课程重要的实践教学环节。实验的目的不仅仅是验证理论知识,更重要的是通过上机加强学生的动手能力,掌握常用Java开发环境的使用方法,培养学生分析问题、解决问题、应用知识的能力和创新精神。充分放手让学生自行设计、自主调试,真正培养学生的实践动手能力,全面提高学生的综合素质。 本课程是一门程序设计语言课程,通过本课程的学习,学生能够掌握Java 语言程序的基本特点、基本编程方法和基本开发技巧,培养学生阅读、分析、设计和调试Java语言的能力,并具备一定的面向对象程序设计思想。 本课程的主要任务是在已学习的编程语言基础上,讲述Java语言的数据结构和语法规则;基本控制结构和编程技巧;Java语言面向对象的特点、编程方法和程序设计思路;Java语言的GUI程序和文件及I/O流的编程方法;能够正确配置Java开发环境,并使用相关的编辑、编译、调试、运行命令。 (1)掌握Java语言的编程技巧,能够独立进行面向对象的开发能力。 (2)具有根据编程需求独立查询Java类库文档及相关资料,完成系统的能力。 (3)具有分析、寻找和排除程序中常见问题的能力。

二、实验内容与收获 (1)Java的安装与配置。熟悉语言环境及简单程序设计的使用练习,正确配置Java 开发环境(Eclipse 集成开发环境的安装、配置与使用) a)安装JDK Sun公司为所有的Java程序员提供了一套免费的Java开发和运行环境。 可以通过IE或Netscape浏览器浏览网址:https://www.360docs.net/doc/e95174097.html,/j2se,根据提示可以下载支持Microsoft Windows操作系统的jdk-1_5_0-windows-i586.exe到本地硬盘。 安装的时候可以选择安装到任意的硬盘驱动器上,例如安装到D:\jdk1.5.0目录下,如图1-2。正确安装后,在JDK目录下有bin、demo、lib、jre等子目录,如图1-3,其中bin目录保存了javac、java、appletviewer等命令文件,demo目录保存了许多java的例子,lib目录保存了Java的类库文件,jre目录保存的是Java的运行时环境(JRE)。 图1-2

实验四Java语言解决算法问题

实验四Java语言解决算法问题(4学时) 一、实验目的 (1)熟悉Java图形用户界面GUI类; (2)学习处理ActionEvent事件; (3)掌握事件源、监视器、处理事件的接口这三个概念; (4)使用Java语言解决算法问题。 二、实验学时:2学时 三、实验要求 (1)编写一个训练算术能力的测试软件; (2)Teacher类对象给出题目,判断答案是否正确;ComputerFrame类对象提供题目GUI 视图;MainClass作为主类。 四、实验原理 (1)事件源指的是能够产生事件的对象,如文本框、按钮等; (2)监视器指的是对事件源进行监视的对象,以便对发生的事件进行处理; (3)Java语言使用接口回调技术设计了它的处理事件模式。事件源增加监视的方法addXXXListener(XXXListener listener)中的参数是一个接口,listener可以引 用任何实现了该接口的类所创建的对象,当事件源发生事件时,接口listener立 刻回调被类实现的接口中的某个方法。 五、实验内容 课堂实验任务:请按模板要求,将【代码】替换为Java程序代码。 1.题目一算术测试 模板代码:Teacher.java public class Teacher { int numberOne,numberTwo; String operator=""; boolean right; public int giveNumberOne(int n) { numberOne=(int)(Math.random()*n)+1; return numberOne; } public int giveNumberT wo(int n) { numberTwo=(int)(Math.random()*n)+1; return numberTwo; } public String giveOperator() { double d=Math.random(); if(d>=0.5) operator="+"; else operator="-"; return operator; } public boolean getRight(int answer) { if(operator.equals("+")) { if(answer==numberOne+numberTwo) right=true; else right=false; } else if(operator.equals("-"))

数字信号处理第三次实验代码及波形图

数字信号处理第三次实验 一、实验目的: 1、掌握离散时间系统的DFT的MATLAB实现; 2、熟悉DTFT和DFT之间的关系。 3、了解信号不同变形的DFT与原信号DFT之间的关系 二、实验内容: 1.开发一个时域圆周移位的matlab函数cirshift.m并测试:设x(n)=[9 8 7 6 5 4 3],求x((n-4))8R8(n)以及x((n+5))8R8(n)。 function y=cirshift(x,m,N) %长度为N的x序列(时域)作m点圆周位移 %------------------------------------- %[y]=cirshift(x,m,N) %y=包含圆周位移的输出序列 %x=长度<=N的输入序列 %m=移位样点数 %N=圆周缓冲器长度 %方法:y(n)=x((n-m)mod N) %check for length of x if length(x)>N error('N必须>=x的长度') end x=[x zeros(1,N-length(x))];%将x补零到长度为N n=[0:1:N-1]; n=mod(n-m,N); y=x(n+1); %主函数.m clc;clear all; x=[9 8 7 6 5 4 3]; y1=cirshift(x,4,8); y2=cirshift(x,-5,8);

2. 开发一个圆周翻转的matlab函数cirflip.m并测试:设x(n)=[9 8 7 6 5 4 3 2 1],求x(n)的16点圆周翻转x((-n))16R16(n)。 function y=cirfilp(x,N) nx=[0:1:N-1]; y=x(mod(-nx,N)+1); %主函数.m clc;clear all; x=[9 8 7 6 5 4 3 2 1]; N=16; x=[x zeros(1,N-length(x))]; nx=0:N-1; y=cirfilp(x,16);

java实验报告(全)

学生学号0120910680526 实验课成绩 武汉理工大学 学生实验报告书 实验课程名称软件工具与环境 开课学院计算机科学与技术学院 指导老师姓名付国江 学生姓名 学生专业班级软件工程0905 2011— 2012学年第1学期

实验课程名称: java语言程序设计 实验项目名称JDK安装与配置、简单的程序编写实验成绩 实验者专业班级软件0905 组别 同组者实验日期年月日第一部分:实验分析与设计(可加页) 一、实验内容描述(问题域描述) 实验目的: 熟悉JDK的安装、配置和使用,掌握Java Application程序的基本结构。 实验内容: (1)安装JDK,并练习设置JAVA_HOME、path和classpath环境变量; (2)编写一个打印出”HelloWorld”的Java Application程序,并编译运行; 二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述) (1)jdk的安装 (2)”HelloWorld”的编译运行 三、主要仪器设备及耗材 个人计算机,jdk 第二部分:实验调试与结果分析(可加页) 一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)jdk的安装步骤: 1:双击jdk-6u10-windows-i586.exe安装文件 2:点击接受 3:点击下一步 4:选择JRE路径 5:点击下一步 6:完成 配置环境变量: 1:右键我的电脑,找到属性,高级中的环境变量 2:点击环境变量:3:系统变量针对所有用户,这里找到系统变量中的Path 点击编辑: 3:系统变量针对所有用户,这里找到系统变量中的Path 点击编辑: 4:在变量值末尾打上分号分隔,加入JDK库路径。 点击确定,完成! 5:变量配置好后。 6:测试环境是否好 在控制台中 输入javac指令,能显示参数,说明成功。

实验四 Java 布局管理和 java的事件

Java 实验日志 指导教师实验时间:2010 年月日学院计算机专业计算机科学与技术 班级3110802 学号08600201 姓名张梦实验室S 实验题目: Java 布局管理和 java的事件 实验目的: 1. 掌握 Java语言中几种布局管理器。 2. 能熟练综合运用这几种布局管理器设计复杂的图形界面。 3. 理解事件的概念。 4. 能熟练使用 Java 提供的事件处理方法,进行符合要求的事件处理 实验要求: 结合多种布局管理器设计一个复杂的图形界面。 掌握 Java提供的各种事件接口,并能灵活使用。 实验主要步骤: 1.用BorderLayout和GridLayout布局管理器设计一个如下图所示的图形界 面: 2.在记事本编辑如下源程序: import java.awt.*; public class Ex9_1 { private Frame demoframe; private Button b1; private Button b2; private Button b3; private Button b4; private Panel cpanel; private Button b[]; public void Init() { demoframe =new Frame("布局管理器"); b1 =new Button("确定");

demoframe.add(b1,"East"); b2 =new Button("取消"); demoframe.add(b2,"West"); b3 =new Button("Hello,"); demoframe.add(b3,"North"); b4 =new Button("Java!......"); demoframe.add(b4,"South"); cpanel =new Panel(); cpanel.setLayout(new GridLayout(3,3,7,7)); demoframe.add(cpanel,"Center"); b =new Button[9]; for(int i=0;i<9;i++) { b[i] =new Button(); b[i].setSize(50,50); b[i].setLabel(Integer.toString(i)); cpanel.add(b[i]); } demoframe.pack(); demoframe.setVisible(true); } public static void main(String[] args) { Ex9_1 demo =new Ex9_1(); demo.Init(); } } 3.保存程序Ex9_1.java,编译运行程序。理解BorderLayout和GridLayout 布局管理器的用法。 运行结果: 实验结果: 运行结果: 4.结合上述例子,试编写如下图所示的图形界面:

计算机图形学实验代码及截图分解

目录 实验一:OpenGL基础知识 (1) 实验二 OpenGL中的建模与变换 (2) 实验三 OpenGL中的光照 (5) 实验四 OpenGL中的拾取 (8) 实验五 OpenGL中的纹理映射 (11)

实验一:OpenGL基础知识 一、实验目的 1、建立Windows系统下的OpenGL实验框架。 2、学习理解OpenGL工作流程。 二、实验环境 ⒈硬件:每个学生需配备计算机一台。 ⒉软件:Visual C++; 三、实验内容 1、建立非控制台的Windows程序框架。 2、建立OpenGL框架。 3、建立OpenGL框架的类文件。 4、完善Windows框架。 5、理解程序间的相互关系。 四、实验要求 1、学习教材第2章的内容。 2、理解教材中相关实例的代码,按要求添加到适当的地方,调试并通过运行。 3、运行结果应该与教材中的相关实例相符。 4、编译第2章的框架代码,修改背景色、窗口标题。 五、程序设计提示 (略) 六、报告要求 1.认真书写实验报告,字迹清晰,格式规范。报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验原理。 2.报告中应书写主要源程序,且源程序中要有注释。 3.报告中应包含运行结果及结果分析。如调试通过并得到预期的效果,请注明‘通过’并粘贴运行效果图;如未调试通过或结果不正确,试分析原因。 4.报告最后包含实验总结和体会。

实验二 OpenGL中的建模与变换 一、实验目的 1.学习配置OpenGL环境。 2.掌握在OpenGL中指定几何模型的方法。 3. 掌握OpenGL中的透视投影和正投影的设置方法,学会诊断投影问题导致的显示异常。 二、实验环境 ⒈硬件:每个学生需配备计算机一台。 ⒉软件:Visual C++; 三、实验内容 1.建立OpenGL编程环境 (注:Windows自带gl和glu,还需要安装glut库文件。) (a)查看Windows自带的OpenGL文件。在文件夹c:\windows\system32下查看是否存在文件opengl32.dll和glu32.dll;在Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下查看是否存在gl.h和glu.h;在Vc7\PlatformSDK\Lib下是否存在opengl32.lib和glu32.lib。 (b)安装glut库。将文件glut.h复制到Visual Studio的安装目录Vc7\PlatformSDK\Include\gl下;将文件glut32.lib复制到Vc7\PlatformSDK\Lib下;将文件glut32.dll复制到c:\windows\system32下。 2.OpenGL几何建模 (a)建立基本的几何图元,指定图元的颜色,对图元进行平移、旋转、缩放变换。基本几何图元包括: GL_LINES(线)、GL_LINE_STRIP(线带)、GL_LINE_LOOP(线环)、GL_TRIANGLES(三角形)、GL_TRIANGLE_STRIP(三角形带)、GL_TRIANGLE_FAN(三角形扇)、GL_QUADS(四边形)、GL_QUAD_STRIP(四边形带)、GL_POLYGON(多边形)。 (b) 设置合适的投影参数,分别用透视投影和正投影显示步骤(a)中指定的几何图元。 (c) 每按下鼠标左键一次,模型向右旋转一定角度。 (d) 按下ESC键,退出程序。

相关文档
最新文档