21一个支持sorthelp和quit命令的字符shell.docx

上传人:b****4 文档编号:24485408 上传时间:2023-05-28 格式:DOCX 页数:11 大小:103.65KB
下载 相关 举报
21一个支持sorthelp和quit命令的字符shell.docx_第1页
第1页 / 共11页
21一个支持sorthelp和quit命令的字符shell.docx_第2页
第2页 / 共11页
21一个支持sorthelp和quit命令的字符shell.docx_第3页
第3页 / 共11页
21一个支持sorthelp和quit命令的字符shell.docx_第4页
第4页 / 共11页
21一个支持sorthelp和quit命令的字符shell.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

21一个支持sorthelp和quit命令的字符shell.docx

《21一个支持sorthelp和quit命令的字符shell.docx》由会员分享,可在线阅读,更多相关《21一个支持sorthelp和quit命令的字符shell.docx(11页珍藏版)》请在冰豆网上搜索。

21一个支持sorthelp和quit命令的字符shell.docx

21一个支持sorthelp和quit命令的字符shell

河北工业大学计算机软件技术基础(VC)2012年课程设计报告

学院电气信息学院班级C1109班姓名韩国强学号115260成绩____

一、题目:

一个仅支持sort、help和quit命令的字符Shell

二、设计思路

1、总体设计

1)分析程序的功能

2)该程序是通过对计算机输入命令字符,使其执行相应的操作,本程序仅支持sort、help和quit命令的字符Shell,通过help命令执行显示帮助的信息,“sort+参数”命令执行排序操作;quit命令执行退出系统的操作。

3)系统总体结构:

本程序中共有三种命令,quit,help,sort+参数命令:

(1)当执行help命令时,只有一个显示子函数。

模块

函数名称

显示帮助信息

DisplayHelp

(2)当执行quit命令时直接通过break退出程序。

(3)当执行sort+参数命令时,需要多个函数进行数据处理。

模块

函数名称

分离命令符

SeparateCmd

检验前四个字符是否为sort

ExamSort

检验后面参数是否正确

ExamCan

分离数字

SeparateNum

数字排序

NumSort

在该部分中,主要需要克服的困难是如何识别字符命令shell,如何分离字符串中的数字,如何将字符类型的数字装换为整型的数字,主要困难在SeparateNum函数中。

而整个分离数字然后排序的sort命令流程可见下图:

 

 

2、各功能模块的设计:

说明各功能模块的实现方法

(1)主函数模块

主函数调用各个子函数,通过if语句对指令进行识别,while

(1)死循环使程序一直循换,直到遇见quit指令,输出显示有help帮助信息,指令不能识别,sort参数错误,将sort后面数字排序输出。

代码参加main函数模块;

2)显示帮助函数模块

通过十个指针数组进行显示,每个指针显示一行输出结果,这样在主函数中,结构比较清晰,不会因为过多的cout使程序结构看起来更加复杂。

代码参见DisplayHelp函数模块;

(3)分离指令函数模块

根据Cmd【i】指令,i根据for循环在有控制的增加,将输入的cmd变量分离,将前四个字符分离出来,然后赋值给中间变量cmdtemp1,如果cmdtemp1和sort相同,则分离指令成功。

代码参见SeparateCmd函数模块;

(4)检验参数函数模块

当分离出指令以后,如果sort后面不是数字,则输出参数错误。

代码参见ExamCan;

5)分离数字函数模块

主要要考虑如何区分不限定个数和位置的空格,还有不限定个数的数字,对于判断数字,它的前一个是空格,后一个字符SDCII码值在0到9的字符之间,这样就能确定数字的开始位置,而检验数字的结束位,也检测它的后一个什么时候出现空格,这样每次检测到总数加1,全局变量n加1,知道遇见‘\0’.

(6)排序函数模块

将分离出来的变量储存到整型数组,利用forfor循环,冒泡法排序。

代码参见NumSort函数;

7)创新设计部分

颜色控制+延时输出

要改变控制台的颜色设置需要调用两个Windows操作系统的API函数。

GetStdHandle函数用来获得当前控制台的句柄,用SetConsoleTextAttribute函数来改变选中控制台的颜色控制。

这两个函数的声明存在于文件中。

可以将这两个调用封装到SetColor函数中。

对于输出的延时,可以调用Sleep函数,使显示更加形象。

俩者也可以有机的结合人到一起进行输出控制

例如:

如果需要改变当前的控制台输出颜色为白底红字,则可以书写如下代码:

#include

voidSetColor(unsignedshortForeColor=7,unsignedshortBackGroundColor=0)//设置显示颜色函数

{

HANDLEhCon=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hCon,ForeColor+BackGroundColor*0x10);

}

比如:

NumSort函数可以创新如下:

voidNumSort()//冒泡法排序

{

inttemp;

for(inti=0;i

for(intj=0;j

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

SetColor(4,9);//设置字体颜色

for(intj=0;j

{

Sleep(100);//延时输出

cout<

}

cout<

n=0;

}

3、设计中的主要困难及解决方案

程序中的主要问题是如何将字符串中的数字转换成整型的数字,然后通过冒泡法对其排序,课程设计中的大部分时间都用在了字符串的转换中,主要要考虑如何区分不限定个数和位置的空格,还有不限定个数的数字,对于判断数字,它的前一个是空格,后一个字符SDCII码值在0到9的字符之间,这样就能确定数字的开始位置,而检验数字的结束位,也检测它的后一个什么时候出现空格,这样每次检测到总数加1,全局变量m加1,这样在输出的时候,冒泡中的总数就可以知晓,将分离中的数赋值给数组,排序就轻而易举了。

4、你所设计的程序最终完成的功能

1)说明你编制的程序能完成的功能

输入helpquitsort+参数执行不同的操作;

2)准备的测试数据及运行结果

3.

程序清单

(1)主函数

voidmain()

{

DisplayHelp();

while

(1)

{

cout<<"kcsj->";

cin.getline(cmd,50);

if(strcmp(cmd,"help")==0)

DisplayHelp();

elseif(strcmp(cmd,"quit")==0)

break;

elseif((SeparateCmd(cmd))==1)

//如果分离出的命令为sort返回1

{

if(ExamCan(cmd))

{

SeparateNum(cmd);

NumSort();

}

}

else

cout<<"指令不能识别,请重新输入"<

}

}

(2)DisplayHelp函数

VoidDisplayHelp()

{char*p[10]={

"--------------------------------------------------------------------------------",

"--------------------------------------------------------------------------------","使用说明:

","支持俩个命令,sort和quit,quit直接退出程序,help显示帮助,sort后面可以跟不超过10","个数值,然后排序后输出。

","例如:

","sort233454659809","将会把后面的数列升序排序后输出","--------------------------------------------------------------------------------",

"--------------------------------------------------------------------------------"};

for(intm=0;m<10;m++)

cout<

}

(3)SeparateCmd函数

intSeparateCmd(charcmd[])

{

charcmdtemp[5];

for(inti=0;i<4;i++)

cmdtemp[i]=cmd[i];

cmdtemp[4]='\0';

if(strcmp(cmdtemp,"sort")==0)

return1;

else

return0;

}

(4)ExamCan函数

intExamCan(charcmd[])

{

for(intj=4;cmd[j]!

='\0';j++)

{

if(cmd[j]!

='')

if((cmd[j]>'9')||(cmd[j]<'0'))

//如果参数中有ASCII值在'0'-'9'或是等于空格的ASCII为正确

{cout<<"sort参数错误"<

return0;

}

}

}

(5)SeparateNum

voidSeparateNum(charcmd[])

{

intcmdtemp2,cmdtemp3;

for(intj=4;cmd[j]!

='\0';j++)

{

if(cmd[j]==''&&cmd[j+1]<='9'&&cmd[j+1]>='0')

//从第一个不为空格的数字开始分离

{

cmdtemp3=0;

for(;cmd[j+1]<='9'&&cmd[j+1]>='0';j++)

//到第二个空格结束

{

cmdtemp2=cmd[j+1]-'0';

cmdtemp3=cmdtemp3*10+cmdtemp2;

}

a[n]=cmdtemp3[0];//赋值给a[n]

n++;

j--;

}

}

}

 

(6)NumSort函数

voidNumSort()

{//冒泡法排序

inttemp;

for(inti=0;i

for(intj=0;j

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

for(intj=0;j

cout<

cout<

n=0;

}

 

四、对该设计题目有何更完善的方案

1、对自己完成程序进行自我评价。

我的程序较好的完成了任务中规定的设计内容,并完成了创新要求的设计,运行正确。

自己在课程设计中的表现较为优秀,能独立完成任务。

2、对课题提出更完善的方案

可以制作出更多的shell命令,真正的模拟电脑操作,真正地学以致用。

5、收获及心得体会

(1)课程中实感觉到编程的艰难,以及将想法转变成现实的不容易,也深深体会到一个国家软件工业发展的艰难,创新需付出的汗水很多。

不管是云计算,还是物联网,三网融合这些软件需求很大的新兴产业,对人力资源的需求量很大,对创新的要求也很高,所以,加强大学生创新能力培养很重要。

(2)一个软件的创作过程,可以类比出很多的解决问题的方法。

分析问题—>思路解析->整体框架->初步想法->再构思(调试)>再分析>再解决->解决问题。

日期:

2012年6月29日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1