1、程序设计综合实验报告册西南交通大学 程序设计综合实验实验地点:实验学期:学生班级:学生学号:学生姓名:任课教师:龚勋信息科学与技术学院2012年4月实验一:ATM机用户操作界面、业务逻辑编写 实验目的及内容1、根据ATM的工作流程编写用户界面,掌握文本用户菜单的编写方法;2、根据ATM的工作流程编写业务罗杰,掌握搭建一个完整的应用系统的方法及软件编程思想。 实验要求1、除提示用户输入的数字外,界面上不能响应、出现任何其他用户输入;2、每个菜单界面独立显示,不要出现多组菜单重叠显示的现象;3、每个业务逻辑可以多次执行,直到用户选择退出业务。 实验步骤及核心代码void main() int bE
2、xit=0; char in; /控制语言的选择 while(!bExit) MainMenu(); in=getch(); system(cls); switch(in) .语言选择 void MainMenu() .void LanguageMenu(int t) int cExit=0; char in; while(!cExit) if(t=1) . /显示中文功能选择菜单 in=getch(); system(cls); switch(in) 中文功能函数的选择 else 同上,只需将中文函数改为英文函数 /中文的查询函数void Query1() printf(=n) printf
3、(“此账户有%.2f元 n,sum); /对sum已初始化 system(pause); system(cls);/中文的存钱函数void Deposit1(float *p) float x; printf(=n); printf( 输入您要存的数目: ); scanf(%f,&x); *p+=x; system(pause); system(cls); /中文的取钱函数void WithDraw1(float *p) float y; int a=1; printf(=n); printf(输入您要取的数目: ); while(a) scanf(%f,&y); if(ysum) print
4、f(n余额不足,按任意键后重新输入n); else *p-=y; a=0; system(pause); system(cls);实验二:进制转换器 实验目的及内容 写一个进制转换器,实现十进制、二进制、十六进制的相互转换 实验要求1、转换要求包括整数和小数;2、提供清晰、有好的用户界面;3、各种转换可以反复多次执行,直到用户选择”退出“按钮。 实验步骤及核心代码void main() .void Mainmenu() ./二进制到十进制和十六进制void BtoDH() int iExit=0; while(!iExit) system(cls); string s1,s2,s3,s; in
5、t i,len; . /输入字符串s s=s1; len=s1.length(); for(i=0;ilen;i+) s3=s1.substr(0,1); /截取从0到1的字符,包括0不包括1 s1=s1.substr(1,s1.length()-1); if(s3=.) s2=s.substr(0,i); /截取0到i的字符 break; if(s2.length()=0) s2=s; s1=; int in=BtoDint(s2); /把二进制数分离开后,调用整数部分 float dou=BtoDdecimal(s1); /调用二进制小数部分 dou=in+dou; string ss1,
6、ss2; ss1=BtoHint(s2,1); ss2=BtoHint(s1,0); . /输出十进制形式和十六进制形式 /二进制整数到十进制整数int BtoDint(string s) int i,ss=0,len,l; len=s.length()-1; l=len; for(i=0;i=len;i+) string ch=s.substr(0,1); s=s.substr(1,s.length()-1); if(ch=1) ss+=pow(2,l); l-; else l-; return ss; /二进制小数到十进制小数float BtoDdecimal(string s) floa
7、t ss=0.0; int i,len,l; len=s.length()-1; l=-1; for(i=0;i=len;i+) string ch=s.substr(0,1); s=s.substr(1,s.length()-1); if(ch=1) ss+=pow(2,i); /pow函数返回值为计算2的i次方 l-; else l-; return ss;/十六进制到二进制和十进制void HtoBD() int iExit=0,len,i; string s,s1,s3,s2,ss1,ss2; while(!iExit) system(cls); couts1; s=s1; len=s
8、1.length(); for(i=0;ilen;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); int in=BtoDint(ss1); float dou=BtoDdecimal(ss2); dou=in+dou; . /输出二进制形式和十进制形式 string HtoBint(string s,int in) string s1;
9、 int len; len=s.length(); string ret=; for(int i=0;ilen;i+) s1=s.substr(0,1); s=s.substr(1,s.length()-1); if(in=1) ret=HtoBbit(s1)+ret; else ret+=HtoBbit(s1); return ret;/十六进制字符与二进制字符串的互相转换string HtoBbit(string s) string ret; if(s=0) ret=0000; ./二进制到十六进制string BtoHint(string s,int in) int len=s.leng
10、th(); int t=len%4; len=(4-t)%4; while(len-) if(in=1) s=0+s; else s+=0; int num=s.length()/4,i; string ret; for(i=0;inum;i+) string temp=s.substr(0,4); s=s.substr(4,s.length()-4); ret+=BtoHbit(temp); /BtiHbit函数使二进制字符串与十六进制字符互相转换,与上面相似,略写 return ret;/十进制到二进制和十六进制void DtoBH() double num,n2; int iExit=0
11、,len,n1; string s1,s2,s3,s4; while(!iExit) system(cls); coutnumlen; n1=int(num); n2=num-n1; s1=DtoBdecimal(n2,len); s2=DtoBint(n1); s3=BtoHint(s2,1); s4=BtoHint(s1,2); . /输出二进制形式和十六进制形式 /十进制小数到二进制小数string DtoBdecimal(double in,int len) string ret; double p=in; while(len-) p*=2; if(p=1) ret+=1; p-=1.
12、0; else ret+=0; return ret;/十进制整数到二进制整数string DtoBint(int in) if(in=0) return 0; string ret=; int q=in,remain; while(q) remain=q%2; q=q/2; if(remain) ret=1+ret; else ret=0+ret; return ret;实验三:随机数生成、中奖者 实验目的及内容 生成一组均匀分布的伪随机数,根据随机数编写一个抽奖程序 实验要求1、能够根据用户的输入,控制随机数生成的数目,随机数用动态数组保存;2、能够根据用过的输入,控制随机数的范围:比如能
13、够生成一组【a,b】范围内的随机数;3、由用户输入抽奖者人数N;4、为每一个人分配一个代号(类似于名字)和一个随机号码(即抽奖票号,加你控制在1-N之间)并将其打印出来;5、由机器摇号:生成一个在1-N之间的随机数作为中奖号码,查找中奖者,并公布中奖者信息(注:可以有多人同时中奖);6、如果没有对应的中奖者,需要将该号码公布出来,然后重新生成一个中奖号码,知道中奖者存在为止。 实验步骤及核心代码#include#include#includeusing namespace std;static unsigned holdrand=1L;void Lottery(int n);void mysr
14、and(unsigned seed);int myrand(void);int llottery(int num);int n;struct PEOPLE char *name; int number;mem100;void main() coutn; cout=endl; coutInformation of all:endl; Lottery(n);void Lottery(int n) int i,N,k; int num; coutN; mysrand(unsigned)time(NULL); for(i=0;in;i+) k=myrand(); k=k%(N-1)+1; memi.n
15、umber=k; for(i=0;in;i+) coutendli+1: pi,his number is 16)&0x7fff);int llottery(int num) int i,j=0; coutendlThe invalid lottery number is:numendl; for(i=0;in;i+) if(memi.number=num) coutThe invalid is: pi,his number ismemi.numberendl; j+; if(j=0) return 0; else return 1;实验四:插入排序、快速排序 实验目的及内容 1、生成一组随机
16、整数,对该组数据进行排序,采用插入排序法; 2、生成一组随机整数,对该组数据尽心排序,采用快速排序法。 实验要求1、数组长度由用户输入;2、随机数范围在【100,10000】范围内;3、采用插入排序法和快速排序法进行排序;4、根据用户要求,可以实现增序、降序两种排序。 实验步骤及核心代码1、插入排序 int main() . /用户定义数组长度len lottery(len);void lottery(int len) int i; char ch; mysrand(unsigned)time(NULL); /time函数返回1970年1月1日00:00:00起距函数调用时相聚的时间,以秒为单
17、位,在的头文件中 . if(ch=1) swap1(b,len); /升序 else if(ch=2) swap2(b,len); /降序 for(i=0;ilen;i+) coutbiendl; void mysrand(unsigned seed). int myrand(void) /此函数在实验三里有写 . h=h%(10000-100)+100; /控制随机数范围在【100-10000】之内, return h;void swap1(int *c,int n) int i,j,x,k=1; c0=myrand(); for(j=1;j=0&cix) ci+1=ci; i-; ci+1
18、=x; 2、快速排序void main() int A100,n,k; . /用户定义数组长度 int exit=0; char ch; while(!exit) for(int i=0;i=r) return; int i=p; int j=r+1; int x=ap; while(1) while(i=r&a+i=p&a-jx); if(i=j) break; Swap(&ai,&aj); /Swap函数为交换*p与*q的值,略写 if(i=j) j-; ap=aj; aj=x; QuikUp(a,p,j-1); QuikUp(a,j+1,r);实验五:模块计时器、常用排序算性能测试 实验
19、目的及内容设计一组计时函数,封装所有计时函数,采用测试性能函数对快速函数、插入函数、选择排序算法进行性能测试。 实验要求1、计时精确:封装的高精度的计时API函数QueryPerformanceCounter(),可以达到微秒级的精度;2、使用简单:只用在待测试的模块前后加上两个宏BM_START和BM_END,不需要对结果进行计算,也不需要考虑对各个模块结果数据的维护;3、多组测试:最多可以同时实现20个模块的测试,及可以保存20组数据;4、结果输出独立:在系统运行结果时,只需要用一个函数就可以把计时结果保存在一个文本文件里5、对一组数据进行排序;6、数组长度为10000,数组应随机产生;7
20、、为了保证测试数据的稳定,每种排序算法运行10次,计算总的时间 实验步骤及核心代码void main() int i; int retBENCHMARK_MAX_COUNT; /BENCHMARK_MAX_COUNT为模块总数 InitBenchmark(); BMTimerStart(1); /开始计时 for(i=0;i10;i+) sort_quick(a,10000); /快速排序,实验四有写,略写 sort_chr(a,10000); /插入排序,实验四有写,略写 sort_choice(a,10000); /选择排序,略写 BMTimerEnd(1); /结束计时 WriteDat
21、a(1,Test1,D:log.txt); /将数据填入文件中void InitBenchmark() ResetBenchmarkCounters(); /对数组gStats,gEnds,gCounter清零 GetClockFrequent(); /获得机器内部定时时钟频率void BMTimerStart(int iModel) LARGE_INTEGER litmp; QueryPerformanceCounter(&litmp); /提高精度,在头文件windows.h中 gStartsiModel=litmp.QuadPart;void BMTimerEnd(int iModel)
22、 LARGE_INTEGER litmp; QueryPerformanceCounter(&litmp); gEndsiModel=litmp.QuadPart; gCountersiModel+=(gEndsiModel-gStartsiModel)/dfFreq)*1000000000);void WriteData(int TotalCount,string sModel,string path) /open the file and move pointer to the end of the file,需要头文件fstreamofstream pFile(path.data(),i
23、os:app|ios:out); /1 Header string title,s2; string sperator=rnrn=rn; title=Model-+sModel; char temp1100,temp2100; sprintf(temp1,rnIteration Counter:5drn,TotalCount); title+=temp1; /2 Times string s; double gTotal=0; for(int i=0;iBENCHMARK_MAX_COUNT;i+)/将结果写进文件 if(gCountersi=0) continue; sprintf(temp1,Total %d,i); int len=strlen(temp1)/8; /* calculate the number of t s+=
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2