当前位置:文档之家› 命令行解释程序报告

命令行解释程序报告

北京联合大学《操作系统课程设计》实验一:命令行解释程序学院:信息学院专业:计算机科学与技术班级:计算机1203B姓名:谢申兵学号:20120803320712015年7月18日一.采用的数据结构说明字符数组:本程序中包含的字符数组有:filename1[20]:在Ccopy()函数中,存储源文件路径和名字的字符数组。

filename2[20]:在Ccopy()函数中,存储目标文件路径和名字的字符数组。

oldname[20]:在Cmv()函数中用来保存源文件路径和名字的字符数组。

newname[20]:在Cmv()函数中用来保存目标文件路径和名字的字符数组。

Cho2[6]:存取用户输入的指令,并用来作为Switch分支的判定条件之一。

File[20]:Cerase()函数中用来存放要删除的文件的路径和名字的字符数组。

Word[100]:在Cdis()中存放用户要回显的字符串。

二.源程序清单、注释和流程图(1)流程图程序开始输入指令Num=1Num=2Num=3Num=4Cdir?Ccopy?Cerase?Cdis?Num=5Cclr?Cmv?Num=6Num=7Cuname?Cend?Num=8Case?传入两个参数来复制文件删除一个带绝对路径的指定文件回显输入的字符串清屏移动或者重命名文件显示计算机详细信息退出程序调用Cmd 里的dir 查看目录输入两个路径输入一个绝对路径和文件名不带空格的字符串程序结束是否否否否否否否否是是是是是是是412387输入带路径的两个文件名,路径相同为重命名(2)源程序和注释#include<stdio.h>#include<windows.h> //exit,system,strcmpint flag=1;char ch[8];//存储文件读取内容的中间变量FILE *fp;FILE *fp1;char filename1[20];/*复制文件存放的原文件名*/char filename2[20];/*复制文件存放的目标文件名*/char oldname[20];/*用来存放移动文件的源文件名*/char newname[20];/*用来存放移动文件的目标文件名*/void start_copy(char *filename1,char *filename2)/*文件复制函数,可以实现文本和图片的复制*/{if((fp=fopen(filename1,"rb"))==NULL||(fp1=fopen(filename2,"wb"))==NULL) /*源文件或目标文件打开失败则无法进行复制*/{printf("can't open the source file!\n");exit(0);}else{fread(ch,1,8,fp);//一次读取八个字节的字节流,存放到ch字符数组里while (!feof(fp))//没读取到文件尾部时,持续读取//当fp指向文件的尾部时,返回值为0,执行fclose//当fp未指向文件尾部时,返回值为1,连续读写{fwrite(ch,1,8,fp1);//写到目标文件里fread(ch,1,8,fp);//继续读取}fclose(fp);//关闭指针,释放内存fclose(fp1);}}void Cend(){flag=0;//将循环条件flag=1变为0来结束循环,结束程序}void Cdir()//显示目录{system("cls");char str[30];char str1[20];printf("请输入一个路径:");gets(str1);strcpy(str,"dir ");strcat(str,str1);system(str);}void Ccopy()//文件复制主函数{scanf("%s%s",&filename1,&filename2);//获取源文件和目标文件名start_copy(filename1,filename2);//传参到复制函数}void Cerase()//删除文件函数{char File[20];//文件名存储scanf("%s",&File);//获得文件名if(remove(File)==0)//删除成功remove返回0{printf("Remove %s Successfully!\n",File);}else{perror("Failed!");}}void Cdis(){char Word[100];//存放用户输入的字符串getchar();//吸取第一个不必要的空格字符gets(Word);//获得用户的字符串内容printf("**********E***C***H***O**********\n");puts(Word);//显示用户的字符串内容}void Cmv()//移动或重命名文件函数{scanf("%s%s",&oldname,&newname);//用来获取用户输入的两个文件名rename(oldname,newname);}int main(){//定义判定字符char cdir1[]="Cdir";char cdir2[]="cdir";char ccopy1[]="Ccopy";char ccopy2[]="ccopy";char cerase1[]="Cerase";char cerase2[]="cerase";char cdis1[]="Cdis";char cdis2[]="cdis";char clr1[]="Cclr";char clr2[]="cclr";char cmv1[]="Cmv";char cmv2[]="cmv";char cuname1[]="Cuname";char cuname2[]="cuname";char cend1[]="Cend";char cend2[]="cend";while(flag){char Cho[100]={0};char Cho2[6];int num=0;/*主菜单*/printf("**********************\n");printf("*****开始菜单******\n");printf("**********************\n");printf("Cdir -- 显示当前文件目录\n");printf("Ccopy -- 复制文件到当前目录\n");printf("Cerase -- 删除当前目录文件\n");printf("Cdis -- 回显输入的字符串\n");printf("Cclr -- 清屏\n");printf("Cmv -- 重命名当前目录的文件名\n");printf("Cuname -- 显示计算机详细信息\n");printf("Cend -- 退出程序\n");printf("\n");printf("\n");printf("请键入您的操作指令:");scanf("%s",&Cho2);/*下面这一段将对用户输入的字符串第一个空格前的内容进行判定,确定功能号,在转入对应的Case分支决定用户本次所使用的功能.*/if(strcmp(Cho2,cdir1)==0||strcmp(Cho2,cdir2)==0)//首字母大小写均可识别{num=1;}else if(strcmp(Cho2,ccopy1)==0||strcmp(Cho2,ccopy2)==0){num=2;}else if(strcmp(Cho2,cerase1)==0||strcmp(Cho2,cerase2)==0){num=3;}else if(strcmp(Cho2,cdis1)==0||strcmp(Cho2,cdis2)==0){num=4;}else if(strcmp(Cho2,clr1)==0||strcmp(Cho2,clr2)==0){num=5;}else if(strcmp(Cho2,cmv1)==0||strcmp(Cho2,cmv2)==0){num=6;}else if(strcmp(Cho2,cuname1)==0||strcmp(Cho2,cuname2)==0){num=7;}else if(strcmp(Cho2,cend1)==0||strcmp(Cho2,cend2)==0){num=8;}else{printf("ERROR COMMAND,TRY AGAIN!\n");}switch(num){case(1):Cdir();break;//功能1,启动Cmd调用dir \b检查目录case(2):Ccopy();getchar();break;//功能2,复制一个文件到另一个目录case(3):Cerase();break;//功能3,删除一个指定路径的文件case(4):Cdis();break;//功能4,回显用户输入的字符串内容case(5):system("cls");break;//功能5,清屏case(6):Cmv();break;//功能6,移动一个文件,如果路径不变只改变名字,则变为重命名功能case(7):system("systemInfo");break;//功能7,显示计算机详细信息case(8):Cend();break;//功能8,结束程序}}}三.Windows命令与Linux命令的不同本程序的功能有8个,其中Cdir和Linux下的ls基本区别不大,但是ls 后面有很多参数,这是和Windows在cmd下调用dir不太一样的地方。

相关主题