实验报告范例.docx

上传人:b****2 文档编号:25868825 上传时间:2023-06-16 格式:DOCX 页数:61 大小:529.42KB
下载 相关 举报
实验报告范例.docx_第1页
第1页 / 共61页
实验报告范例.docx_第2页
第2页 / 共61页
实验报告范例.docx_第3页
第3页 / 共61页
实验报告范例.docx_第4页
第4页 / 共61页
实验报告范例.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

实验报告范例.docx

《实验报告范例.docx》由会员分享,可在线阅读,更多相关《实验报告范例.docx(61页珍藏版)》请在冰豆网上搜索。

实验报告范例.docx

实验报告范例

 

软件设计报告

 

姓名:

陆炳君

学号:

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;i

temp=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(len

cout<<"您只输入了"<

\n";

length=len;

}

if(len>length)

cout<<"您多输入了"<

\n";

for(i=0,j=0;i

if(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;j

q[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;j

q[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;i

mingwen[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;i

mingwen[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;i

numin[i]=numin[i]-0x30;

for(i=0;i

if(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;i

temp=temp*weight+numin[i];

returntemp;

}

charsearchlocate(charinput)

{

chari;

for(i=0;i

if(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转换后的数值为:

"<

}

}

intcheck(intweight)

{

charnumin[100];

inttemp=0;

intnumlength,i;

while

(1){

cout<<"\t请输入数值:

";

cin>>numin;

numlength=strlen(numin);

for(i=0;i

if(numin[i]>='a')numin[i]=numin[i]-0x20;

numin[i]=numin[i]-'0';

}

for(i=0;i

if(numin[i]>9)numin[i]=numin[i]-7;

if(numin[i]>=weight)break;

}

if(i==numlength)break;

cout<<"\t输入数值不符合所选进制!

\n";

}

for(i=0,temp=0;i

temp=temp*weight+numin[i];

returntemp;

}

voidnum2str(intweight

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

当前位置:首页 > 解决方案 > 学习计划

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

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