实验报告范例.docx
《实验报告范例.docx》由会员分享,可在线阅读,更多相关《实验报告范例.docx(61页珍藏版)》请在冰豆网上搜索。
实验报告范例
软件设计报告
姓名:
陆炳君
学号:
13004123
2016年4月11日~2008年4月24日
第一章软件设计介绍
软件设计总时间:
二周
一、软件设计的性质、目的
本课程是一门技能训练课,为在校学生的必修课程。
通过设计培养学生良好的编程习惯,使学生掌握编程的基本步骤,规范学生的编写程序的格式,锻炼学生编写程序的能力,为将来编写较大程序的打好基础。
二、软件设计的任务
通过集中时间上机实验,使学生充分发挥已有的编程能力,熟悉编译环境,选择若干课题,进行审题、分析、设计和调试,并根据要求写出实验报告。
三、实验内容
软件设计课题共分A、B两档。
A档共5题,第一周完成;B档共2题,第二周完成。
四、考核办法
考核采取程序验收和面试的方法进行。
其中,程序验收及面试占50%,实验报告占50%。
在考核过程中,若发现抄袭程序者,所抄袭的程序按零分记。
五、实验设备
南京邮电大学微机室微机。
第二章软件开发平台简介
本次实验采用VisualC++开发平台。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
VisualC++它大概可以分成三个主要的部分:
1.DeveloperStudio,这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“MicrosoftVisualC++”,所以很多人理所当然的认为,那就是VisualC++了。
其实不然,虽然DeveloperStudio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。
我们也知道,DeveloperStudio并不是专门用于VC的,它也同样用于VB,VJ,VID等VisualStudio家族的其他同胞兄弟。
所以不要把DeveloperStudio当成VisualC++,它充其量只是VisualC++的一个壳子而已。
这一点请切记!
2.MFC。
从理论上来讲,MFC也不是专用于VisualC++,BorlandC++,C++Builder和SymantecC++同样可以处理MFC。
同时,用VisualC++编写代码也并不意味着一定要用MFC,只要愿意,用VisualC++来编写SDK程序,或者使用STL,ATL,一样没有限制。
不过,VisualC++本来就是为MFC打造的,VisualC++中的许多特征和语言扩展也是为MFC而设计的,所以用VisualC++而不用MFC就等于抛弃了VisualC++中很大的一部分功能。
但是,VisualC++也不等于MFC。
3.PlatformSDK。
这才是VisualC++和整个VisualStudio的精华和灵魂,虽然我们很少能直接接触到它。
大致说来,PlatformSDK是以MicrosoftC/C++编译器为核心(不是VisualC++,看清楚了),配合MASM,辅以其他一些工具和文档资料。
上面说到DeveloperStudio没有编译程序的功能,那么这项工作是由谁来完成的呢?
是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成VisualStudio的基石。
第三章软件设计的内容
3.1分数统计软件(A1)
3.1.1设计题目及要求
分数统计
要求:
(1)输入某班级学生的姓名、分数;
(2)对
(1)的分数进行降幂排列并输出;
(3)具有输入输出界面。
3.1.2设计思想及程序流程框图
提示用户输入学生信息,检查动态开辟的内存空间是否够用,不够用则重新申请更大的一块空间。
输入结束后采用冒泡排序,最终按要求打印成绩。
3.1.3逻辑功能程序
#include
#include
#defineN10//人数
intmain(void)
{
structstudent
{
charname[20];
floatscore;
}st[N],temp;
inti,j;
intyn;
printf("请输入%d个学生的姓名和分数(姓名和分数用空格分隔)\n",N);
for(i=0;i{
scanf("%s%f",st[i].name,&st[i].score);
}
printf("是否要进行排序,是输入1,否输入0\n");
scanf("%d",&yn);
if(yn==1)
{
for(i=0;i{
for(j=i;j{
if(st[i].score{
temp=st[i];
st[i]=st[j];
st[j]=temp;
}
}
}
for(i=0;i{
printf("NO%d:
姓名:
%s分数:
%f\n",i+1,st[i].name,st[i].score);
}
}
else
{
printf("不需要排序,原样输出为:
\n");
for(i=0;i{
printf("NO%d:
姓名:
%s分数:
%f\n",i+1,st[i].name,st[i].score);
}
}
}
3.1.4结果及完善方向
结果如下:
0
1
完善方向:
输入姓名可编写一函数使输入姓名可含空格,用MFC,使输入界面更加友好。
3.2打字软件(A2)
3.2.1设计题目及要求
打字程序。
要求:
(1)随即产生一字符串,每次产生的字符串内容、长度都不同;
(2)根据
(1)的结果,输入字符串,判断输入是否正确,输出正确率;
(3)具有输入输出界面。
3.2.2设计思想及程序流程框图
先设定可产生的字符串的最大长度,随机生产一整数,将它与长度最大值取余,得到该次所要生成字符串长度。
重复调用随机数生成函数,将生成的随机数对应输出字符,提示用户按所给字符串输入。
当用户输入完后,统计用户输入字符情况,打印输出。
3.2.3逻辑功能程序
voidmain()
{
constintmaxlength=30;
charfommer[maxlength],latter[maxlength*2],temp,c='1';
intlength,i,len;
floatj;
srand((unsigned)time(NULL));
while(c!
='q'&&c!
='Q'){
length=rand()%maxlength;
if(length==0)length=maxlength;
for(i=0;itemp=rand()%(2*26);
if(temp<27)fommer[i]=temp+'A';
elsefommer[i]=temp+'a'-27;
}
fommer[i]='\0';
cout<<"\t请输入如下字符串,按回车结束:
"<cin>>latter;
len=strlen(latter);
if(lencout<<"您只输入了"<\n";
length=len;
}
if(len>length)
cout<<"您多输入了"<\n";
for(i=0,j=0;iif(fommer[i]==latter[i])j++;
cout<<"\t您的成绩是:
"<cout<<"\n是否再次练习?
推出按Q(q),继续按其他键:
";
cin>>c;
}
}
3.2.4结果及完善方向
结果如下:
改善方向:
生成字符串可扩展为含有标点符号。
3.3文本编辑器(A3)
3.3.1设计题目及要求
要求:
(1)编辑文本;
(2)保存、打开指定位置的文本文件;
(3)具有输入输出界面。
3.3.2设计思想及程序流程框图
输出主菜单,提示用户是创建还是打开文档并追加内容。
若为新建文档,则动态申请空间保存用户输入文档,输入结束后提示用户输入保存路径及文件名,将字符串输出到文件。
若用户需打开文件,则打开文件,输出文件内容,将用户输入字符保存在字符串内,输入结束后再次打开该文件,把字符串追加到文件尾。
3.3.3逻辑功能程序
voidnewtext()
{
inttotal=0;
char*q,*p;
chartemp;
charfilename[30];
intshipment=0;
constintquantity=30;
cout<<"\t注意:
按#结束输入"<while
(1){
if(total==quantity*shipment){//申请空间不够
shipment++;
q=newchar[quantity*shipment];
if(q==NULL){
cout<<"内存已满,无法继续输入"<total--;
}
else{
for(intj=0;jq[j]=p[j];
if(total!
=0)delete[]p;
p=q;
}
}
cin>>temp;
if(temp=='#')break;
p[total]=temp;
total++;
}
p[total]='\0';
cout<<"\t是否保存此文件?
(n放弃,其它键保存):
";
cin>>temp;
if(temp=='n'){
delete[]p;
return;
}
cout<<"\t请输入文件名及保存路径:
";
cin>>filename;
ofstreamout(filename,ios:
:
out);
if(!
out)
cout<<"Sorry!
Youlostnumbersyousavedthistime!
\n";
else
out<
out.close();
delete[]p;
}
voidopenfile()
{
inttotal=0;
chara;
charfilename[30];
ifstreamout;
cout<<"\t请输入文件名及保存路径:
";
cin>>filename;
out.open(filename,ios:
:
nocreate);
if(!
out){
cout<<"\tSorry!
该文件不存在或无法打开\n";
return;
}
while(out.get(a))
cout<out.close();
char*q,*p;
chartemp;
intshipment=0;
constintquantity=30;
cout<<"\t注意:
按#结束输入"<while
(1){
if(total==quantity*shipment){//申请空间不够
shipment++;
q=newchar[quantity*shipment];
if(q==NULL){
cout<<"内存已满,无法继续输入"<total--;
}
else{
for(intj=0;jq[j]=p[j];
if(total!
=0)delete[]p;
p=q;
}
}
cin>>temp;
if(temp=='#')break;
p[total]=temp;
total++;
}
p[total]='\0';
ofstreamoutadd(filename,ios:
:
app);
if(!
outadd)
cout<<"Sorry!
Youlostnumbersyousavedthistime!
\n";
else
outadd<
outadd.close();
delete[]p;
}
3.3.4结果及完善方向
结果如下:
完善方向:
使程序具有修改文本功能及允许输入回车键。
3.4加密软件(A4)
3.4.1设计题目及要求
要求:
(1)输入任意一段明文M,以及密钥K;
(2)根据一下公式将其转换为密文C。
Ci=mi+K,其中i=0,1,……n-1,K为密钥;
(3)具有输入输出界面。
3.4.2设计思想及程序流程框图
建立一全局字符串,先计算用户输入的每个字符在全局字符串中的位置,再偏移密钥长度,把所得位置的字符作为密文输出。
为验证加密是否正确,本程序还包含解密功能,其算法与加密一致。
3.4.3逻辑功能程序
constcharcode[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
constintcodelength=strlen(code);
//主菜单选择
voidmain()
{
charc;
do
{cout<<"\t\tPleasechoosefunctionwithnumberahead!
\n";
cout<<"\t0.加密.\n";
cout<<"\t1.解密\n";
cout<<"\t2.Exit\n\t\t";
cin>>c;
switch(c)
{case'0':
jiami();
break;
case'1':
jiemi();
break;
case'2':
break;
default:
cout<<"选择错误,请重新选择!
\n";
}
}while(c!
='2');
}
voidjiami()
{
charmiyao;
charmingwen[100],miwen[100];
intwenlengh;
miyao=check(10)%codelength;
cout<<"\n\t\t\t请输入明文:
";
cin>>mingwen;
wenlengh=strlen(mingwen);
for(inti=0;imingwen[i]=searchlocate(mingwen[i]);
if(mingwen[i]==codelength){
cout<<"明文不能含有标点!
\n";
return;
}
miwen[i]=code[(mingwen[i]+miyao)%codelength];
}
miwen[wenlengh]='\0';
cout<<"\n\t\t\t密文是:
"<}
voidjiemi()
{
charmiyao;
charmingwen[100],miwen[100];
intwenlengh;
miyao=check(10)%codelength;
cout<<"\n\t\t\t请输入密文:
";
cin>>mingwen;
wenlengh=strlen(mingwen);
for(inti=0;imingwen[i]=searchlocate(mingwen[i]);
if(mingwen[i]==codelength){
cout<<"密文不能含有标点!
!
\n";
return;
}
if(mingwen[i]miwen[i]=code[mingwen[i]-miyao];
}
miwen[wenlengh]='\0';
cout<<"\n\t\t\t明文是:
"<}
intcheck(intweight)
{
charnumin[100];
inttemp=0;
intnumlength,i;
while
(1){
cout<<"\t请输入密钥:
";
cin>>numin;
numlength=strlen(numin);
for(i=0;inumin[i]=numin[i]-0x30;
for(i=0;iif(numin[i]>9)numin[i]=numin[i]-7;
if(numin[i]>26)numin[i]=numin[i]-32;
if(numin[i]>weight)break;
}
if(i==numlength)break;
cout<<"\t密钥只能为整数!
\n";
}
for(i=0,temp=0;itemp=temp*weight+numin[i];
returntemp;
}
charsearchlocate(charinput)
{
chari;
for(i=0;iif(input==code[i])returni;
returni;
}
3.4.4结果及完善方向
结果如下:
完善方向:
允许输入密文有标点符号。
3.5进制转换器(A5)
3.5.1设计题目及要求
要求:
(1)可输入二进制、八进制、十进制、十六进制数;
(2)将已输入的数转换成其余进制的数;
(3)具有输入输出界面。
3.5.2设计思想及程序流程框图
提示用户选择输入进制,将用户输入数值保存在一字符串中,依据用户所选进制检查用户输入是否合法,合法的话将字符串转换为真值;提示用户选择输出进制,使用除数法将真值转换为所需进制待显示字符串并输出。
3.5.3逻辑功能程序
voidmain()
{
charintpye,outtpye,output[40];
intresult;
while
(1){
while
(1){
cout<<"请选择输入进制(二进制B,八进制O,十进制D,十六进制H)按*退出程序:
";
cin>>intpye;
if(intpye=='*')return;
if(intpye=='b'||intpye=='o'||intpye=='d'||intpye=='h'
||intpye=='B'||intpye=='O'||intpye=='D'||intpye=='H')break;
cout<<"\t输入进制选择错误!
\n";
};
if(intpye=='b'||intpye=='B')result=check
(2);
if(intpye=='o'||intpye=='O')result=check(8);
if(intpye=='d'||intpye=='D')result=check(10);
if(intpye=='h'||intpye=='H')result=check(16);
while
(1){
cout<<"\t请选择输出进制(二进制B,八进制O,十进制D,十六进制H):
";
cin>>intpye;
if(intpye=='b'||intpye=='o'||intpye=='d'||intpye=='h'
||intpye=='B'||intpye=='O'||intpye=='D'||intpye=='H')break;
cout<<"\t输出进制选择错误!
\n";
};
if(intpye=='b'||intpye=='B')num2str(2,result,output);
if(intpye=='o'||intpye=='O')num2str(8,result,output);
if(intpye=='d'||intpye=='D')num2str(10,result,output);
if(intpye=='h'||intpye=='H')num2str(16,result,output);
cout<<"\t转换后的数值为:
"<