当前位置:文档之家› 操作系统命令接口设计

操作系统命令接口设计

贵州工程应用技术学院操作系统课程设计题目: 操作系统命令接口设计学号:姓名:学院:专业班级:指导教师:完成时间:2016年4月14日信息工程学院计算机系制操作系统命令接口设计一、实验目的通过设计一些简单的操作系统的命令接口,使学生掌握操作系统接口的设计方法。

在熟悉操作系统的命令接口及程序接口的基础上,利用C语言设计简单的命令接口。

命令接口基于DOS的命令行接口二、实验功能利用C语言、DOS中断中21H与屏幕显示相关的中断调用完成设计,如下:●命令解释器●列目录命令●显示时间命令●显示日期命令●回显字符串命令●创建目录命令●删除目录命令●更改路径命令●显示当前工作目录命令●删除文件命令●打印文本命令●文件重新命名●显示文本命令●显示版本命令●显示目录结构命令●清除当前显示内容命令三、实验流程图四、函数功能模块:函数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:删除当前目录中的文件函数: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[]输入的命令功能:将其转换成相应的case 常量返回值 :numintCommand_num(char Command_name[])五、核心算法1.主要是使用API相关函数,以及调用DOS命令2.使用strcmp()函数判断输入命令格式是否正确3.使用清空缓冲区,以免影响下一次命令的操作六、源程序#include<stdio.h>#include<windows.h>#include<conio.h>#include<stdlib.h>#include<string.h>#include "Shellapi.h"//显示系统时间函数void_TIME(void){ﻩSYSTEMTIME st;GetLocalTime(&st);//获取当前系统时间,以本地时间格式ﻩprintf("Now:%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文件夹,C中创建文件夹123,格式C\\123ﻩchar dir_name[256];gets(dir_name);ﻩif(CreateDirectory(dir_name,NULL))printf("OK\n");ﻩelse printf("NO\n");}//删除目录void_DELDIR(void){ﻩchar cmd[256],dirname[256];ﻩputs( "Inputthe fileyou delete: ");//格式2\3 文件3里的东向全部删除gets(dirname);strcpy(cmd, "rmdir /s /q");strcat(cmd,dirname);// 连接两个字符串system(cmd); //调用DOS命令}//更改路径名void _ROUTE_C(void){ﻩchar oldname[256], newname[256];printf("Routeto 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 _DIR(void){system("dir");}//删除文件deletevoid _DELETE(void){char file[80];printf("Fileto delete: ");gets(file); //输入删除的文件名输入格式D\\123\\123.txtif (remove(file) == 0) //删除成功printf("Removed%s.\n",file);else //删除失败perror("remove");}//打印文本printvoid _PRINT(void){ FILE*fp;charch,file_name[256];printf("please input like C\\1\\123.txt\n");scanf("%s",file_name);ﻩif((fp=fopen(file_name,"rt+"))==NULL)ﻩ{printf("\nCannot openfile strikeany keyexit!");ﻩprintf("orthisis NULL!");ﻩ}ﻩch=fgetc(fp);ﻩwhile(ch!=EOF)ﻩ{ putchar(ch);ﻩch=fgetc(fp);}ﻩprintf("\n");ﻩfclose(fp);}//重命名renamevoid_RENAME(void){ char oldname[256],newname[256];ﻩprintf("File to rename:");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){ charfile_name[256];scanf("%s",file_name);//调用API ShellExecute()函数ﻩShellExecute(NULL,"open", file_name, NULL,NULL, SW_SHOWNORMAL);}//版本号snumvoid _SNUM(void){printf("版本号:DIYoperat system 1.0\n"); /*自己命名*/}//显示目录结构treevoid_TREE(void){ﻩchar Command[256]={"tree/f | more"};//调用DOS命令ﻩsystem(Command);}//清屏clsvoid _CLS(void){system("cls");}//输入判断函数检查输入命令//函数:Command_num(char Command_name[])//参数:charCommand_name[] 输入的命令//功能:将其转换成相应的case 常量intCommand_num(char Command_name[]){ﻩintnum;//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_nam e,"DATE")==0)num= 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,"DELDI R")==0)num = 4; //删除目录else if(strcmp(Command_name,"croute")==0 ||strcmp(Command_name,"CRO UTE")==0)ﻩnum =5;//修改路径elseif(strcmp(Command_name,"dir")==0 || strcmp(Command_name,"DIR")==0)ﻩnum = 6;//显示当前目录elseif(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(strcmp(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;//版本号elseif(strcmp(Command_name,"tree")==0 ||strcmp(Command_name,"TREE")==0)num =12;//显示目录结构ﻩelse if(strcmp(Command_name,"cls")==0||strcmp(Command_nam e,"CLS")==0)num= 13;//清除当前显示else{printf("input error!\n"); /*输入错误*/}ﻩreturnnum;}//主函数int main(void){ﻩchar Command_name[256];//命令名intCom_num ; //命令转换成常量的中间变量ﻩ//程序主界面printf(" 操作系统接口设计\n");printf("系统时间:time/TIME \n");printf("系统日期:date/DATE \n");ﻩprintf("创建目录: creat/CREAT\n");ﻩprintf("删除目录:deldir/DELDIR \n");printf("更改路径名: croute/CROUTE \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("请输入你要执行的命令:") ;ﻩwhile( scanf("%s",Command_name)&& Com_num!=0)ﻩ{ﻩfflush(stdin); //清除按键信息的缓存ﻩﻩCom_num =Command_num(Command_name);ﻩswitch(Com_num)ﻩ{case0:Com_num =0;printf("EXIT THESYSTEM\n");returnCom_num=0;break;ﻩﻩﻩcase1: _TIME();break;//显示时间ﻩcase 2:_DATE();break;//显示日期ﻩcase 3: _CTREAT(); break;//创建文件ﻩﻩ case 4:_DELDIR(); break;//删除目录ﻩ case5: _ROUTE_C();break;//修改目录ﻩcase6: _DIR(); break;//显示当前目录ﻩﻩ case7:_DELETE();break;//删除文件ﻩﻩﻩ case8: _PRINT(); break;//打印文件ﻩcase9:_RENAME(); break;//重命名文件ﻩﻩcase 10:_SHOW();break;//显示文件ﻩﻩﻩcase 11: _SNUM();break;//显示版本号ﻩcase 12: _TREE();break;//显示目录结构ﻩ case 13: _CLS(); break;//清除当前显示ﻩ}ﻩ}return 0;}七、程序结果图--八、实验心得在此次的课程设计中,自己找到了很多的不足,对程序的不熟悉,每个细微的细节都必须十分注意,如果不认真思考,就会出现或大或小的错误。

相关主题