1、操作系统命令接口设计1贵州工程应用技术学院操作系统课程设计题 目: 操作系统命令接口设计学 号: 姓 名: 学 院: 专业班级: 指导教师: 完成时间: 2016年 4月14日 信息工程学院计算机系制操作系统命令接口设计一、实验目的 通过设计一些简单的操作系统的命令接口,使学生掌握操作系统接口的设计方法。在熟悉操作系统的命令接口及程序接口的基础上,利用C语言设计简单的命令接口。命令接口基于DOS的命令行接口二、实验功能利用C语言、DOS中断中21H与屏幕显示相关的中断调用完成设计,如下: 命令解释器 列目录命令 显示时间命令 显示日期命令 回显字符串命令 创建目录命令 删除目录命令 更改路径命
2、令 显示当前工作目录命令 删除文件命令 打印文本命令 文件重新命名 显示文本命令 显示版本命令 显示目录结构命令 清除当前显示内容命令三、 实验流程图四、 函数功能模块:函数1:显示系统当前的时间函数:void _TIME(void)函数2:显示系统当前的日期函数:void _DATA(void)函数3:在当前目录下创建一个新的目录函数:void _CTREAT(void)函数4:删除当前目录中的一个目录函数:void _DELDIR(void)函数5:更改当前目录的路径函数:void _ROUTE_C(void)函数6:显示当前的目录函数:void _DIR(void)函数7:删除当前目录中
3、的文件函数:void _DELETE(void)函数8:打印目录中的文本函数:void _PRINT(void)函数9:给当前目录中的文件重新命名函数:void _RENAME(void)函数10:以窗口的形式显示文本函数:void _SHOW(void)函数11:显示当前系统的版本号函数:void _SNUM(void)函数12:以二叉树的形式显示系统的目录文件结构函数:void _TREE(void)函数13:清屏函数:void _CLS(void)函数14:输入判断函数 检查输入命令函数:Command_num(char Command_name)参数:char Command_name
4、 输入的命令功能:将其转换成相应的case 常量返回值 :numint Command_num(char Command_name)五、 核心算法1.主要是使用API相关函数,以及调用DOS命令2.使用strcmp()函数判断输入命令格式是否正确3.使用清空缓冲区,以免影响下一次命令的操作六、 源程序#include#include#include#include#include#include Shellapi.h/显示系统时间函数void _TIME(void) SYSTEMTIME st; GetLocalTime(&st);/获取当前系统时间,以本地时间格式 printf(Now: %
5、d:%d:%d,st.wHour ,st.wMinute ,st.wSecond); printf(n); SetLocalTime(&st);/设置当前系统时间/显示系统日期函数void _DATE(void) SYSTEMTIME st; GetLocalTime(&st); /获取当前系统时间,以本地时间格式 printf(Now: %d-%d-%d,st.wYear ,st.wMonth ,st.wDay); printf(n); SetLocalTime(&st); /设置当前系统时间/创建目录 creatvoid _CTREAT(void)/在同文件中创建一个文件夹 先创建 C,D
6、文件夹,C中创建文件夹123,格式C123 char dir_name256; gets(dir_name); if(CreateDirectory(dir_name, NULL) printf(OKn); else printf(NOn);/删除目录void _DELDIR(void) char cmd256,dirname256; puts( Input the file you delete: );/格式 23 文件3里的东向全部删除 gets(dirname); strcpy(cmd, rmdir /s /q ); strcat(cmd,dirname); / 连接两个字符串 syst
7、em(cmd); /调用DOS命令/更改路径名void _ROUTE_C(void) char oldname256, newname256; printf(Route to rename: ); gets(oldname); /要修改的路径名 printf(New Root name: ); gets(newname); /修改后的路径名 if (rename(oldname, newname) = 0) /修改成功 printf(Renamed %s to %s.n, oldname, newname); else /修改失败 perror(rename); /显示当前目录 dirvoid
8、 _DIR(void)system(dir);/删除文件 delete void _DELETE(void) char file80; printf(File to delete: ); gets(file); /输入删除的文件名 输入格式 D123123.txt if (remove(file) = 0) /删除成功 printf(Removed %s.n,file); else /删除失败 perror(remove); /打印文本 printvoid _PRINT(void) FILE *fp; char ch,file_name256; printf(please input like
9、 C1123.txtn); scanf(%s,file_name); if(fp=fopen(file_name,rt+)=NULL) printf(nCannot open file strike any key exit!); printf(or this is NULL!); ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(n); fclose(fp); /重命名 renamevoid _RENAME(void) char oldname256, newname256; printf(File to renam
10、e: ); gets(oldname); /要重命名的 文件名 printf(New name: ); gets(newname); /新文件名 if (rename(oldname, newname) = 0) printf(Renamed %s to %s.n, oldname, newname); else perror(rename); / 以窗口的形式显示文本 showvoid _SHOW(void) char file_name256; scanf(%s,file_name); / 调用API ShellExecute()函数 ShellExecute(NULL, open, fi
11、le_name, NULL, NULL, SW_SHOWNORMAL);/版本号 snumvoid _SNUM(void)printf(版本号:DIY operat system 1.0n); /*自己命名*/显示目录结构 treevoid _TREE(void) char Command256=tree /f | more; /调用DOS 命令 system(Command);/清屏 clsvoid _CLS(void) system(cls); /输入判断函数 检查输入命令/函数:Command_num(char Command_name)/参数:char Command_name 输入的
12、命令/功能:将其转换成相应的case 常量int Command_num(char Command_name) int num; / case 常量 if(strcmp(Command_name,exit )=0 | strcmp(Command_name,EXIT)=0) num = 0; /退出else if(strcmp(Command_name,time)=0 | strcmp(Command_name,TIME)=0) num = 1;/时间else if(strcmp(Command_name,date)=0 | strcmp(Command_name ,DATE)=0) num
13、= 2;/日期else if(strcmp(Command_name,creat)=0 | strcmp(Command_name,CREAT)=0) num = 3;/创建文件else if(strcmp(Command_name,deldir)=0| strcmp(Command_name,DELDIR)=0) num = 4; /删除目录else if(strcmp(Command_name,croute)=0 | strcmp(Command_name,CROUTE)=0) num = 5; /修改路径else if(strcmp(Command_name,dir)=0 | strcm
14、p(Command_name,DIR)=0) num = 6;/显示当前目录else if(strcmp(Command_name,delete)=0| strcmp(Command_name,DELETE)=0) num = 7;/删除文件else if(strcmp(Command_name,print)=0 | strcmp(Command_name,PRINT)=0) num = 8;/打印文件else if(strcmp(Command_name,rename)=0| strcmp(Command_name,RENAME)=0) num = 9; /重命名文件else if(strc
15、mp(Command_name,show)=0 | strcmp(Command_name,SHOW)=0) num = 10;else if(strcmp(Command_name,snum)=0 | strcmp(Command_name,SNUM)=0) num = 11;/版本号else if(strcmp(Command_name,tree)=0 | strcmp(Command_name,TREE)=0) num = 12;/显示目录结构 else if(strcmp(Command_name,cls)=0 | strcmp(Command_name,CLS)=0) num = 1
16、3;/清除当前显示 else printf(input error!n); /*输入错误*/ return num;/主函数int main(void) char Command_name256;/命令名 int Com_num ; /命令转换成常量的中间变量 /程序主界面 printf( 操作系统接口设计 n); printf(系统时间 : time/TIME n); printf(系统日期 : date/DATE n); printf(创建目录 : creat/CREAT n); printf(删除目录 : deldir/DELDIR n); printf(更改路径名 : croute/C
17、ROUTE n); printf(显示当前目录 : dir/DIR n); printf(删除文件 : delete/DELETE n); printf(打印文本 : print/PRINT n); printf(重命名文件 : rename/RENAME n); printf(显示文本 : show/SHOW n); printf(显示版本 : snum/SNUM n); printf(显示目录结构 : tree/TREE n); printf(清除屏幕 : cls/CSL n); printf(退出 : exit/EXIT n); printf(n); printf(请输入你要执行的命令:
18、) ; while( scanf(%s,Command_name)& Com_num != 0 ) fflush(stdin); /清除按键信息的缓存 Com_num =Command_num(Command_name); switch(Com_num) case 0: Com_num = 0;printf(EXIT THE SYSTEMn); return Com_num=0;break; case 1: _TIME(); break;/显示时间 case 2: _DATE(); break;/显示日期 case 3: _CTREAT(); break;/创建文件 case 4: _DELD
19、IR(); break;/删除目录 case 5: _ROUTE_C(); break;/修改目录 case 6: _DIR(); break;/显示当前目录 case 7: _DELETE(); break;/删除文件 case 8: _PRINT(); break;/打印文件 case 9: _RENAME(); break;/重命名文件 case 10: _SHOW(); break;/显示文件 case 11: _SNUM(); break;/显示版本号 case 12: _TREE(); break;/显示目录结构 case 13: _CLS(); break;/清除当前显示 ret
20、urn 0;七、程序结果图八、实验心得在此次的课程设计中,自己找到了很多的不足,对程序的不熟悉,每个细微的细节都必须十分注意,如果不认真思考,就会出现或大或小的错误。如果把早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时会推倒很多前面做的工作。经过一次一次的研究,并且不懂的地方就上XX查询资料或者询问同学,终于成功的做出了这次的实验项目。总之,在这段不短的时间里,自己学到了很多很多的东西,同时也巩固了自己以前所学的知识,而且学到了很多在书本上所没学到的知识,XX的功能是强大的,你不懂的知识他能动,通过XX自己的知识得到了很多的拓展提高。通过在这次课程设计使我懂得了理论知识与实践动手能力组合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来。自己只有努力了,成功才会更近一点。虽然学到了很多东西,但依然不太喜欢程序。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1