命令行解释程序报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京联合大学《操作系统课程设计》实验一:命令行解释程序
学院:信息学院
专业:计算机科学与技术
班级:计算机1203B
姓名:谢申兵
学号:2012080332071
2015年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=1
Num=2
Num=3
Num=4
Cdir?
Ccopy?
Cerase?
Cdis?
Num=5
Cclr?
Cmv?
Num=6
Num=7
Cuname?
Cend?Num=8
Case?
传入两个参数来复制文件
删除一个带绝对路径的指定
文件
回显输入的字
符串
清屏
移动或者重命
名文件显示计算机详
细信息
退出程序
调用Cmd 里的dir 查看目录
输入两个路径
输入一个绝对路径和文件名
不带空格的字符串
程序结束
是
否
否
否
否
否
否
否
否
是
是
是
是
是
是
是
4
1
23
8
7
输入带路径的两个文件名,路径相同为重命名
(2)源程序和注释
#include
#include
int 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()
{