程序设计综合实验报告册.docx
- 文档编号:17709055
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:44
- 大小:27.48KB
程序设计综合实验报告册.docx
《程序设计综合实验报告册.docx》由会员分享,可在线阅读,更多相关《程序设计综合实验报告册.docx(44页珍藏版)》请在冰点文库上搜索。
程序设计综合实验报告册
西南交通大学
程序设计综合实验
实验地点:
实验学期:
学生班级:
学生学号:
学生姓名:
任课教师:
龚勋
信息科学与技术学院
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+=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 综合 实验 报告