logo资料库

操作系统接口设计(课程设计).doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
一、 设计题目:操作系统命令接口设计 二、 主要内容: 本设计的目的是通过设计一些简单的操作系统的命令接口,使学生掌握操作系统 接口的设计方法。 要求学生在熟悉操作系统的命令接口及程序接口的基础上,利用 C 语言设计简单 的命令接口。命令接口基于 DOS 的命令行接口。 三、 具体要求 利用 C 语言、DOS 中断中 21H 与屏幕显示相关的中断调用完成设计,具体包括 1. 命令解释器 2. 列目录命令 3. 显示时间命令 4. 显示日期命令 5. 回显字符串命令 6. 创建目录命令 7. 删除目录命令 8. 更改路径命令 9. 显示当前工作目录命令 10. 删除文件命令 11. 打印文本命令 12. 文件重新命名 13. 显示文本命令 14. 显示版本命令 15. 显示目录结构命令 16. 清除当前显示内容命令 上述内容中,所有命令通过命令解释器能够执行,即启动命令解释器以后,输入相应命 令,按照输入指令执行相应功能,并在屏幕上显示相应结果。 四、 进度安排 1-2 天:资料查找、系统分析,数据流程分析,概要设计 1-2 天:系统详细设计、功能设计 5-6 天:模块设计、编程调试 1 天:资料整理、课程设计说明书编写。 五、 完成后应上交的材料
一 课程设计说明书(程序流程图、函数功能模块、核心算法等) 1 程序流程图 开 始 程 输入操作命令 命令是否正确 是 否 显 示 系 统 时 间 显 示 系 统 日 期 创 建 目 录 命 令 删 除 目 录 命 令 更 改 路 径 命 令 显 示 工 作 目 录 命 令 删 除 文 件 命 令 打 印 文 本 命 令 文 件 重 新 命 名 显 示 文 本 命 令 显 示 版 本 命 令 命 令 解 释 器 显 示 目 录 结 构 命 清 除 显 示 内 容 命 令 否 执行相关操 是否继续 是 程 序 结 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:删除当前目录中的文件 函数: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 常量 返回值 :num int Command_num(char Command_name[]) 3 核心算法 1.主要是使用 API 相关函数,以及调用 DOS 命令 2.使用 strcmp()函数判断输入命令格式是否正确 3.使用清空缓冲区,以免影响下一次命令的操作 二 相关源程序文件 #include #include #include #include #include //显示系统时间函数 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); //设置当前系统时间 } //创建目录 creat void _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) { cmd[256],dirname[256]; char puts( "Input the file you delete: ");//格式 2\3 文件 3 里的东向全部删除 gets(dirname); strcpy(cmd, "rmdir strcat(cmd,dirname); // 连接两个字符串 system(cmd); //调用 DOS 命令 "); /s /q } //更改路径名 void _ROUTE_C(void) { char oldname[256], newname[256]; 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"); } //显示当前目录 dir void _DIR(void) {system("dir");} //删除文件 delete void _DELETE(void) { char file[80]; printf("File to delete: "); gets(file); if (remove(file) == 0) //输入删除的文件名 输入格式 D\\123\\123.txt //删除成功 printf("Removed %s.\n",file); else //删除失败 perror("remove"); } //打印文本 print void _PRINT(void) { FILE *fp; char ch,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 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); } //重命名 rename void _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"); } // 以窗口的形式显示文本 show void _SHOW(void) { char file_name[256]; scanf("%s",file_name); // 调用 API ShellExecute()函数 ShellExecute(NULL, "open", file_name, NULL, NULL, SW_SHOWNORMAL); } //版本号 snum void _SNUM(void) {printf("版本号:DIY operat system 1.0\n"); /*自己命名*/} //显示目录结构 tree void _TREE(void) { char Command[256]={"tree /f | more"}; //调用 DOS 命令 system(Command); } //清屏 cls void _CLS(void) { system("cls"); } //输入判断函数 检查输入命令 //函数:Command_num(char Command_name[]) //参数:char Command_name[] 输入的命令 //功能:将其转换成相应的 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 = 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 || strcmp(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(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;//版本号 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 = 13;//清除当前显示 else {printf("input error!\n"); /*输入错误*/} return num; } //主函数 int main(void) { char Command_name[256];//命令名 int Com_num ; //命令转换成常量的中间变量 操作系统接口设计 //程序主界面 printf(" printf("系统时间 : printf("系统日期 : printf("创建目录 : printf("删除目录 : printf("更改路径名 : printf("显示当前目录 : \n"); time/TIME date/DATE creat/CREAT deldir/DELDIR croute/CROUTE dir/DIR \n"); \n"); \n"); \n"); \n"); \n");
: printf("删除文件 : printf("打印文本 : printf("重命名文件 : printf("显示文本 printf("显示版本 : printf("显示目录结构 : printf("清除屏幕 : printf("退出 : printf("\n"); printf("请输入你要执行的命令:") ; delete/DELETE print/PRINT rename/RENAME show/SHOW snum/SNUM tree/TREE cls/CSL exit/EXIT \n"); \n"); \n"); \n"); \n"); \n"); \n"); \n"); 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 SYSTEM\n"); return Com_num=0;break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: } _TIME(); break;//显示时间 _DATE(); break;//显示日期 _CTREAT(); break;//创建文件 _DELDIR(); break;//删除目录 _ROUTE_C(); break;//修改目录 _DIR(); break;//显示当前目录 _DELETE(); break;//删除文件 _PRINT(); break;//打印文件 _RENAME(); break;//重命名文件 _SHOW(); break;//显示文件 _SNUM(); break;//显示版本号 _TREE(); break;//显示目录结构 _CLS(); break;//清除当前显示 } return 0; } 三 程序运行截图: 由于本实验实现的功能较多,所以只截取部分操作的截图,截图顺序由上到下为程序功能的 先后顺序!如下:
分享到:
收藏