程序设计综合实验报告册.docx

上传人:b****0 文档编号:17709055 上传时间:2023-08-03 格式:DOCX 页数:44 大小:27.48KB
下载 相关 举报
程序设计综合实验报告册.docx_第1页
第1页 / 共44页
程序设计综合实验报告册.docx_第2页
第2页 / 共44页
程序设计综合实验报告册.docx_第3页
第3页 / 共44页
程序设计综合实验报告册.docx_第4页
第4页 / 共44页
程序设计综合实验报告册.docx_第5页
第5页 / 共44页
程序设计综合实验报告册.docx_第6页
第6页 / 共44页
程序设计综合实验报告册.docx_第7页
第7页 / 共44页
程序设计综合实验报告册.docx_第8页
第8页 / 共44页
程序设计综合实验报告册.docx_第9页
第9页 / 共44页
程序设计综合实验报告册.docx_第10页
第10页 / 共44页
程序设计综合实验报告册.docx_第11页
第11页 / 共44页
程序设计综合实验报告册.docx_第12页
第12页 / 共44页
程序设计综合实验报告册.docx_第13页
第13页 / 共44页
程序设计综合实验报告册.docx_第14页
第14页 / 共44页
程序设计综合实验报告册.docx_第15页
第15页 / 共44页
程序设计综合实验报告册.docx_第16页
第16页 / 共44页
程序设计综合实验报告册.docx_第17页
第17页 / 共44页
程序设计综合实验报告册.docx_第18页
第18页 / 共44页
程序设计综合实验报告册.docx_第19页
第19页 / 共44页
程序设计综合实验报告册.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序设计综合实验报告册.docx

《程序设计综合实验报告册.docx》由会员分享,可在线阅读,更多相关《程序设计综合实验报告册.docx(44页珍藏版)》请在冰点文库上搜索。

程序设计综合实验报告册.docx

程序设计综合实验报告册

西南交通大学

 

 

程序设计综合实验

 

实验地点:

实验学期:

学生班级:

学生学号:

学生姓名:

 

任课教师:

龚勋

信息科学与技术学院

2012年4月

 

实验一:

ATM机用户操作界面、业务逻辑编写

●实验目的及内容

1、根据ATM的工作流程编写用户界面,掌握文本用户菜单的编写方法;

2、根据ATM的工作流程编写业务罗杰,掌握搭建一个完整的应用系统的方法及软件编程思想。

●实验要求

1、除提示用户输入的数字外,界面上不能响应、出现任何其他用户输入;

2、每个菜单界面独立显示,不要出现多组菜单重叠显示的现象;

3、每个业务逻辑可以多次执行,直到用户选择退出业务。

●实验步骤及核心代码

voidmain()

{intbExit=0;

charin;//控制语言的选择

while(!

bExit)

{

MainMenu();

in=getch();

system("cls");

switch(in){.....语言选择}

}

}

voidMainMenu(){......}

voidLanguageMenu(intt)

{

intcExit=0;

charin;

while(!

cExit)

{

if(t==1)

{......//显示中文功能选择菜单

in=getch();

system("cls");

switch(in)

{中文功能函数的选择}

}

else{同上,只需将中文函数改为英文函数}

}

}

//中文的查询函数

voidQuery1()

{

printf("======================\n")

printf(“此账户有%.2f元\n",sum);//对sum已初始化

system("pause");

system("cls");

}

//中文的存钱函数

voidDeposit1(float*p)

{

floatx;

printf("================================\n");

printf("输入您要存的数目:

");

scanf("%f",&x);

*p+=x;

system("pause");

system("cls");

}

//中文的取钱函数

voidWithDraw1(float*p)

{

floaty;

inta=1;

printf("====================================\n");

printf("输入您要取的数目:

");

while(a)

{

scanf("%f",&y);

if(y>sum)

{printf("\n余额不足,按任意键后重新输入\n");}

else

{*p-=y;

a=0;

}

}

system("pause");

system("cls");

}

实验二:

进制转换器

●实验目的及内容

写一个进制转换器,实现十进制、二进制、十六进制的相互转换

●实验要求

1、转换要求包括整数和小数;

2、提供清晰、有好的用户界面;

3、各种转换可以反复多次执行,直到用户选择”退出“按钮。

●实验步骤及核心代码

voidmain(){...}

voidMainmenu(){...}

//二进制到十进制和十六进制

voidBtoDH()

{

intiExit=0;

while(!

iExit)

{system("cls");

strings1,s2,s3,s;

inti,len;

......//输入字符串s

s=s1;

len=s1.length();

for(i=0;i

{s3=s1.substr(0,1);//截取从0到1的字符,包括0不包括1s1=s1.substr(1,s1.length()-1);

if(s3==".")

{s2=s.substr(0,i);//截取0到i的字符

break;

}

}

if(s2.length()==0)

{

s2=s;

s1="";

}

intin=BtoDint(s2);//把二进制数分离开后,调用整数部分

floatdou=BtoDdecimal(s1);//调用二进制小数部分

dou=in+dou;

stringss1,ss2;

ss1=BtoHint(s2,1);

ss2=BtoHint(s1,0);

......//输出十进制形式和十六进制形式

}

}

//二进制整数到十进制整数

intBtoDint(strings)

{

inti,ss=0,len,l;

len=s.length()-1;

l=len;

for(i=0;i<=len;i++)

{

stringch=s.substr(0,1);

s=s.substr(1,s.length()-1);

if(ch=="1")

{

ss+=pow(2,l);

l--;

}

else

l--;

}

returnss;

}

//二进制小数到十进制小数

floatBtoDdecimal(strings)

{

floatss=0.0;

inti,len,l;

len=s.length()-1;

l=-1;

for(i=0;i<=len;i++)

{

stringch=s.substr(0,1);

s=s.substr(1,s.length()-1);

if(ch=="1")

{ss+=pow(2,i);//pow函数返回值为计算2的i次方

l--;

}

else

l--;

}

returnss;

}

//十六进制到二进制和十进制

voidHtoBD()

{

intiExit=0,len,i;

strings,s1,s3,s2,ss1,ss2;

while(!

iExit)

{

system("cls");

cout<<"pleaseinputthenumber";

cin>>s1;

s=s1;

len=s1.length();

for(i=0;i

{

s3=s1.substr(0,1);

s1=s1.substr(1,s1.length()-1);

if(s3==".")

{

s2=s.substr(0,i);

break;

}

}

if(s2.length()==0)

{

s2=s;

s1="";

}

ss1=HtoBint(s2,1);

ss2=HtoBint(s1,0);

intin=BtoDint(ss1);

floatdou=BtoDdecimal(ss2);

dou=in+dou;

......//输出二进制形式和十进制形式

}

}

stringHtoBint(strings,intin)

{

strings1;

intlen;

len=s.length();

stringret="";

for(inti=0;i

{

s1=s.substr(0,1);

s=s.substr(1,s.length()-1);

if(in==1)

ret=HtoBbit(s1)+ret;

else

ret+=HtoBbit(s1);

}

returnret;

}

//十六进制字符与二进制字符串的互相转换

stringHtoBbit(strings)

{stringret;

if(s=="0")ret="0000";

...

}

//二进制到十六进制

stringBtoHint(strings,intin)

{

intlen=s.length();

intt=len%4;

len=(4-t)%4;

while(len--)

{

if(in==1)

s="0"+s;

else

s+="0";

}

intnum=s.length()/4,i;

stringret;

for(i=0;i

{

stringtemp=s.substr(0,4);

s=s.substr(4,s.length()-4);

ret+=BtoHbit(temp);//BtiHbit函数使二进制字符串与十六进制字符互相转换,与上面相似,略写

}

returnret;

}

//十进制到二进制和十六进制

voidDtoBH()

{

doublenum,n2;

intiExit=0,len,n1;

strings1,s2,s3,s4;

while(!

iExit)

{

system("cls");

cout<<"pleaseinputthenumberandthelengthofdecimal";

cin>>num>>len;

n1=int(num);

n2=num-n1;

s1=DtoBdecimal(n2,len);

s2=DtoBint(n1);

s3=BtoHint(s2,1);

s4=BtoHint(s1,2);

......//输出二进制形式和十六进制形式

}

}

//十进制小数到二进制小数

stringDtoBdecimal(doublein,intlen)

{

stringret;

doublep=in;

while(len--)

{

p*=2;

if(p>=1)

{

ret+="1";

p-=1.0;

}

else

ret+="0";

}

returnret;

}

//十进制整数到二进制整数

stringDtoBint(intin)

{if(in==0)

return"0";

stringret="";

intq=in,remain;

while(q)

{remain=q%2;

q=q/2;

if(remain)ret="1"+ret;

elseret="0"+ret;

}

returnret;

}

 

实验三:

随机数生成、中奖者

●实验目的及内容

生成一组均匀分布的伪随机数,根据随机数编写一个抽奖程序

●实验要求

1、能够根据用户的输入,控制随机数生成的数目,随机数用动态数组保存;

2、能够根据用过的输入,控制随机数的范围:

比如能够生成一组【a,b】范围内的随机数;

3、由用户输入抽奖者人数N;

4、为每一个人分配一个代号(类似于名字)和一个随机号码(即抽奖票号,加你控制在1-N之间)并将其打印出来;

5、由机器摇号:

生成一个在1-N之间的随机数作为中奖号码,查找中奖者,并公布中奖者信息(注:

可以有多人同时中奖);

6、如果没有对应的中奖者,需要将该号码公布出来,然后重新生成一个中奖号码,知道中奖者存在为止。

●实验步骤及核心代码

#include

#include

#include

usingnamespacestd;

staticunsignedholdrand=1L;

voidLottery(intn);

voidmysrand(unsignedseed);

intmyrand(void);

intllottery(intnum);

intn;

structPEOPLE{

char*name;

intnumber;

}mem[100];

voidmain()

{

cout<<"Inputthetotalnumberofthepeople:

";

cin>>n;

cout<<"==========================="<

cout<<"Informationofall:

"<

Lottery(n);

}

voidLottery(intn)

{

inti,N,k;

intnum;

cout<<"InputN:

";

cin>>N;

mysrand((unsigned)time(NULL));

for(i=0;i

{

k=myrand();

k=k%(N-1)+1;

mem[i].number=k;

}

for(i=0;i

{

cout<

p"<

}

num=myrand();

num=num%(N-1)+1;

while(!

llottery(num))

{

num=myrand();

num=num%(N-1)+1;

}

}

voidmysrand(unsignedseed)

{

holdrand=seed;

}

intmyrand(void)

{

return(((holdrand=holdrand*201413+2531011L)>>16)&0x7fff);

}

intllottery(intnum)

{

inti,j=0;

cout<

"<

for(i=0;i

{

if(mem[i].number==num)

{cout<<"Theinvalidis:

p"<

j++;

}

}

if(j==0)

return0;

else

return1;

}

实验四:

插入排序、快速排序

●实验目的及内容

1、生成一组随机整数,对该组数据进行排序,采用插入排序法;

2、生成一组随机整数,对该组数据尽心排序,采用快速排序法。

●实验要求

1、数组长度由用户输入;

2、随机数范围在【100,10000】范围内;

3、采用插入排序法和快速排序法进行排序;

4、根据用户要求,可以实现增序、降序两种排序。

●实验步骤及核心代码

1、插入排序

intmain()

{

......//用户定义数组长度len

lottery(len);

}

voidlottery(intlen)

{inti;

charch;

mysrand((unsigned)time(NULL));//time函数返回1970年1月1日00:

00:

00起距函数调用时相聚的时间,以秒为单位,在的头文件中

......

if(ch=='1')swap1(b,len);//升序

elseif(ch=='2')swap2(b,len);//降序

for(i=0;i

cout<

}

voidmysrand(unsignedseed){......}

intmyrand(void)//此函数在实验三里有写

{......

h=h%(10000-100)+100;//控制随机数范围在【100-10000】之内,

returnh;

}

voidswap1(int*c,intn)

{

inti,j,x,k=1;

c[0]=myrand();

for(j=1;j

{

x=myrand();

i=j-1;

while(i>=0&&c[i]>x)

{

c[i+1]=c[i];

i--;

}

c[i+1]=x;

}

}

2、快速排序

voidmain()

{

intA[100],n,k;

...//用户定义数组长度

intexit=0;

charch;

while(!

exit)

{

for(inti=0;i

{

k=myrand();//与产生随机数有关的函数略,实验三有写

k=k%(MAX-MIN)+MIN;//控制随机数的范围,MIN=1,MAX=100,在开始有定义

A[i]=k;

}

mainmenu();//mainmenu函数为主菜单,略写

ch=getch();

system("cls");

switch(ch)

{

case'1':

QuikUp(A,0,n-1);print(A,n);system("pause");system("cls");break;

case'2':

QuikDown(A,0,n-1);print(A,n);system("pause");system("cls");break;

case'3':

exit=1;

default:

printf("error!

\n");break;

}

}

}

//升序排序

voidQuikUp(inta[],intp,intr)

{

if(p>=r)

return;

inti=p;

intj=r+1;

intx=a[p];

while

(1)

{

while(i<=r&&a[++i]

while(j>=p&&a[--j]>x);

if(i>=j)break;

Swap(&a[i],&a[j]);//Swap函数为交换*p与*q的值,略写

}

if(i==j)

j--;

a[p]=a[j];

a[j]=x;

QuikUp(a,p,j-1);

QuikUp(a,j+1,r);

}

实验五:

模块计时器、常用排序算性能测试

●实验目的及内容

设计一组计时函数,封装所有计时函数,采用测试性能函数对快速函数、插入函数、选择排序算法进行性能测试。

●实验要求

1、计时精确:

封装的高精度的计时API函数QueryPerformanceCounter(),可以达到微秒级的精度;

2、使用简单:

只用在待测试的模块前后加上两个宏BM_START和BM_END,不需要对结果进行计算,也不需要考虑对各个模块结果数据的维护;

3、多组测试:

最多可以同时实现20个模块的测试,及可以保存20组数据;

4、结果输出独立:

在系统运行结果时,只需要用一个函数就可以把计时结果保存在一个文本文件里

5、对一组数据进行排序;

6、数组长度为10000,数组应随机产生;

7、为了保证测试数据的稳定,每种排序算法运行10次,计算总的时间

●实验步骤及核心代码

voidmain()

{inti;

intret[BENCHMARK_MAX_COUNT];//BENCHMARK_MAX_COUNT为模块总数

InitBenchmark();

BMTimerStart

(1);//开始计时

for(i=0;i<10;i++)

{

sort_quick(a,10000);//快速排序,实验四有写,略写

sort_chr(a,10000);//插入排序,实验四有写,略写

sort_choice(a,10000);//选择排序,略写

}

BMTimerEnd

(1);//结束计时

WriteData(1,"Test1","D:

\\log.txt");//将数据填入文件中

}

voidInitBenchmark()

{

ResetBenchmarkCounters();//对数组gStats,gEnds,gCounter清零

GetClockFrequent();//获得机器内部定时时钟频率

}

voidBMTimerStart(intiModel)

{

LARGE_INTEGERlitmp;

QueryPerformanceCounter(&litmp);//提高精度,在头文件"windows.h"中

gStarts[iModel]=litmp.QuadPart;

}

voidBMTimerEnd(intiModel)

{

LARGE_INTEGERlitmp;

QueryPerformanceCounter(&litmp);

gEnds[iModel]=litmp.QuadPart;

gCounters[iModel]+=(((gEnds[iModel]-gStarts[iModel])/dfFreq)*1000000000);

}

voidWriteData(intTotalCount,stringsModel,stringpath)

{

//openthefileandmovepointertotheendofthefile,需要头文件"fstream"

ofstreampFile(path.data(),ios:

:

app|ios:

:

out);

//1Header

stringtitle,s2;

stringsperator="\r\n\r\n=========================================\r\n";

title="Model---"+sModel;

chartemp1[100],temp2[100];

sprintf(temp1,"\r\nIterationCounter:

5d\r\n",TotalCount);

title+=temp1;

//2Times

strings;

doublegTotal=0;

for(inti=0;i

{

if(gCounters[i]==0)

continue;

sprintf(temp1,"Total%d",i);

intlen=strlen(temp1)/8;//*calculatethenumberof'\t'

s+=

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2