一、 设计题目:操作系统命令接口设计
二、 主要内容:
本设计的目的是通过设计一些简单的操作系统的命令接口,使学生掌握操作系统
接口的设计方法。
要求学生在熟悉操作系统的命令接口及程序接口的基础上,利用 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:
//时间 time
//函数:_TIME()
void _TIME(void)
函数 2:
//日期 data
//函数:_DATA()
void _DATA(void)
函数 3:
//创建目录 creat
//函数:_CTREAT(void)
void _CTREAT(void)
函数 4:
//删除目录
//函数: _DELDIR()
void _DELDIR(void)
函数 5:
//更改路径名
//_ROUTE_C()
void _ROUTE_C(void)
函数 6:
// 显示当前目录 dir
//函数:_DIR()
void _DIR(void)
函数 7:
// 删除文件 delete
//函数:_DELETE()
void _DELETE(void)
函数 8:
//打印文本 print
//函数:_PRINT()
void _PRINT(void)
函数 9:
//重命名 rename
//函数:_RENAME()
void _RENAME(void)
函数 10:
//以窗口的形式显示文本 show
//_SHOW()
void _SHOW(void)
函数 11:
// 版本号 snum
//函数:_SNUM()
void _SNUM(void)
函数 12:
//显示目录结构 tree
//函数:_TREE()
void _TREE(void)
函数 13:
//清屏 cls
//函数:_CLS()
void _CLS(void)
函数 13://显示帮助
//函数:_PRINT_F()
void _PRINT_F(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
/**********************
//时间 time
//函数:_TIME()
***********************/
void _TIME(void)
{
SYSTEMTIME st;
GetLocalTime(&st);//获取当前系统时间,以本地时间格式
printf("Now: %d:%d:%d",st.wHour ,st.wMinute ,st.wSecond);
printf("\n");
SetLocalTime(&st);//设置当前系统时间
}
/**********************
//日期 data
//函数:_DATA()
***********************/
void _DATA(void)
{
SYSTEMTIME st;
GetLocalTime(&st);
//获取当前系统时间,以本地时间格式
printf("Now: %d-%d-%d",st.wYear ,st.wMonth ,st.wDay);
printf("\n");
SetLocalTime(&st);
//设置当前系统时间
}
/**********************
//创建目录 creat
//函数:_CTREAT(void)
***********************/
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");
}
/**********************
//删除目录
//函数: _DELDIR()
***********************/
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
}
/**********************
//更改路径名
//_ROUTE_C()
***********************/
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
//函数:_DIR()
***********************/
void _DIR(void)
{system("dir");}
/**********************
//删除文件 delete
//函数:_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
//函数:_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
//函数:_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");
}
/**********************
//13 以窗口的形式显示文本 show
//_SHOW()
***********************/
void _SHOW(void)
{
char file_name[256];
scanf("%s",file_name);
// 调用 API ShellExecute()函数
ShellExecute(NULL, "open", file_name, NULL, NULL, SW_SHOWNORMAL);
}
/**********************
//版本号 snum
//函数:_SNUM()
***********************/
void _SNUM(void)
{printf("版本号:DIY operat system 1.0\n"); /*自己命名*/}
/**********************
//显示目录结构 tree
//函数:_TREE()
***********************/
void _TREE(void)
{
char Command[256]={"tree /f | more"}; //调用 DOS 命令
system(Command);
}
/**********************
//清屏 cls
//函数:_CLS()
***********************/
void _CLS(void)
{system("cls"); }
/**********************
//显示格式
//函数:_PRINT_F()
***********************/
void _PRINT_F(void)
{
操 作 系 统 课 程 设 计!
OPERATING ORDER
\n");
\n");
printf("=================================================\n");
printf("
printf("
printf("=================================================\n");
:
printf("帮助
:
printf("系统时间
:
printf("系统日期
:
printf("创建目录
:
printf("删除目录
printf("更改路径名
:
printf("显示当前目录 :
printf("删除文件
:
:
printf("打印文本
:
printf("重命名文件
printf("显示文本
:
printf("显示版本
:
printf("显示目录结构 :
printf("清除屏幕
:
printf("退出
:
printf("\n");
help/HELP
time/TIME
data/DATA
creat/CREAT
deldir/DELDIR
croute/CROUTE
dir/DIR
delete/DELETE
print/PRINT
rename/RENAME
show/SHOW
snum/SNUM
tree/TREE
cls/CSL
exit/EXIT
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
\n");
}
/****************************
//输入判断函数 检查输入命令
//函数:Command_num(char Command_name[])
//参数:char Command_name[] 输入的命令
//功能:将其转换成相应的 case 常量
****************************/
int Command_num(char Command_name[])