计算机实习报告.docx
- 文档编号:18304106
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:40
- 大小:6.69MB
计算机实习报告.docx
《计算机实习报告.docx》由会员分享,可在线阅读,更多相关《计算机实习报告.docx(40页珍藏版)》请在冰点文库上搜索。
计算机实习报告
电子工程学院2015年计算机实习
姓名:
XX
班内序号:
XXX
班级:
XXXXXXXXXXX
学号:
XXXXXXXXXX
专业:
电子科学与技术
学院:
电子工程学院
计算机实习2015.6
一、魔方阵
(一)题目要求与题目解析
题目要求编辑一个魔方阵显示器,n为初始输入的数字(2≤n≤15),把整数1到n排成一个n×n方阵,使方阵中的每一行,每一列以及对角线上的数之和都相同。
要求可以通过界面设定n的值,可以正确输出方阵,同时要求界面美观、操作简便。
分析该实习题目可大致分为两个比较重要的部分,魔方阵的算法,实现不同的阶数n值时输出正确的魔方阵;其次是输出界面设计,实现n值的输入和魔方阵的输出,同时要求界面美观。
该题采用QT来编写程序实现基本功能。
(二)程序编写与功能实现
QT编程中主要分为头文件、源文件和界面文件。
头文件中声明所需要用到的类,在与之对应的源文件中对类进行定义。
界面文件则是对界面的布局进行设计和修改,因为界面文件相对简单,此处不做特别说明。
下面首先介绍魔方阵填写算法,然后按照头文件、源文件的顺序进行程序展示和介绍。
1.魔方阵算法
首先介绍的是魔方阵的算法,针对不同类型的数,其填写魔方阵的方式和规则不同,具体分为奇数、4的倍数、非4的倍数的偶数三大类。
每种类型的填充方式通过代码的形式展示如下:
QStringMagicSquare(intin,vector
{inta[15][15];
intn=in;
intx,y;
introw,col;
inti,j;
intdi,dx,dy;
intoushu;
inttemp;
//当阶数是奇数时填充魔方阵
if(in%2==1){
row=0;
col=n/2;
i=1;
a[row][col]=i;
for(i=2;i<=n*n;i++)
{
if(i%n==1)
row=(row+1)%n;
else{
row=(row-1+n)%n;
col=(col+1)%n;
}
a[row][col]=i;
}
}
//当阶数是4的倍数时填充魔方阵
elseif(in%4==0){
for(x=0;x for(y=0;y if((x+y)%2==0) { a[x][y]=-1; a[x][n-y-1]=-1; a[n-x-1][y]=-1; a[n-x-1][n-y-1]=-1; } for(x=0;x for(y=0;y { oushu=x*n+y; if(a[x][y]==-1) a[x][y]=n*n-oushu; else a[x][y]=oushu+1; }} //当阶数是非4的倍数的偶数时填充魔方阵 else{ for(di=0;di<4;di++) { switch(di) { case0: dx=0,dy=0; break; case1: dx=n/2,dy=n/2; break; case2: dx=n/2,dy=0; break; case3: dx=0;dy=n/2; break; default: break; } x=(n/2)/2,y=0; intnhsq; nhsq=(n/2)*(n/2); for(i=1;i<=nhsq;i++) { a[y+dy][x+dx]=i+nhsq*di; if(i%(n/2)==0) y++; elseif(y==0) x++,y=n/2-1; elseif(x==n/2-1) x=0,y--; else x++,y--; } } intnm; nm=(n/2-1)/2; for(j=1;j { temp=a[(n/2)/2][j]; a[(n/2)/2][j]=a[(n/2+1)/2+n/2-1][j]; a[(n/2+1)/2+n/2-1][j]=temp; } for(i=0;i { if(i==(n/2)/2) continue; for(j=0;j { temp=a[i][j]; a[i][j]=a[n/2+i][j]; a[n/2+i][j]=temp; } } for(i=0;i for(j=n-1;j>n-nm;j--) { temp=a[i][j]; a[i][j]=a[n/2+i][j]; a[n/2+i][j]=temp; } } 2.头文件程序 虽然魔方阵的填充算法复杂,但是本题中的需要实现的功能单一,只需要实现一个魔方阵的输出,故只声明一个类即可实现基本的功能。 下面摘录类声明中的部分代码和注释: public: explicitone(QWidget*parent=0); ~one(); privateslots: //声明私有槽 voidon_ok_clicked();//声明OK按钮 voidon_close_clicked();//声明CLOSE按钮 private: //声明私有变量 Ui: : one*ui; intn; vector 3.源文件程序 与之对应的cpp文件中将对类中的函数等进行定义,其中涉及到具体的功能的实现,下面将进行具体的展示和详细的解释。 voidone: : on_ok_clicked()//定义OK键(槽函数) {//清除前一次显示魔方阵时的方框 for(inti=labels.size()-1;i>=0;--i) {deletelabels[i];labels.pop_back();} //获取阶数n并在标签中和魔方阵一起显示 n=ui->lineEdit->text().toInt(); ui->hint->setText("阶数n="+QString: : number(n)); ui->lineEdit->clear(); //调用函数计算魔方阵并输出显示 if(n>2&&n<=15){ vector QStringout=MagicSquare(n,sq); //小方块的宽和高 constintw=30; constinth=30; //方阵的初始位置 constintx0=(800-w*n)/2+100; constinty0=(600-h*n)/2+15; //循环结构绘制魔方阵方框 for(inti=0;i for(intj=0;j intx=x0+i*w; inty=y0+j*h; QLabel*lab=newQLabel(this); labels.push_back(lab); //具体N阶魔方阵中小方块参数,x,y设置位置,w,h设置大小 lab->setGeometry(x,y,w,h); //设置方框中数字位置居中 lab->setAlignment(Qt: : AlignCenter); //设置框内的内容 lab->setText(QString: : number(sq[i*n+j])); //设置显示的字体 lab->setFont(QFont("Consolas",12,50,false)); //设置边框类型 lab->setFrameStyle(QFrame: : Panel|QFrame: : Plain); lab->show();}}} //如果输入的数字不符合要求则提示错误 else{QMessageBox: : critical(this, "错误","阶数必须大于2小于16且为正数! ", "确定");}} (三)程序运行与功能实现 程序初始界面如下,为增加界面美观性,采用无框窗口显示。 背景是色彩神秘的方块,切合魔方阵的主题。 界面左侧从上至下依次是阶数显示框、阶数输入框、OK键和关闭键,界面右侧预留显示魔方阵,整个界面布局简约大方。 结束输入框采用傻瓜化提示,要求输入的结束要求,增加了用户使用简易度。 当输入满足要求的阶数n=15时,显示如下。 魔方阵的显示添加了带透明度的底色,保证背景不影响魔方阵的输出显示。 同时魔方阵加框,增加了可视性,用户一目了然。 在左侧最上方的框中还提示输出了正在显示的魔方阵的阶数。 当输入不符合3~15整数的要求的时候,程序将报错提醒。 展示如下。 (四)设计亮点 1.全程无bug,2-15所有整数都能够正常美观的显示,输入其他字符和数字均报错。 2.设计人性化,增加了一个标签栏显示正在显示的魔方阵的阶数,让用户一眼就可以知道正在显示的魔方阵参数。 3.界面美观,带透明度的魔方阵显示框保证了背景图片不影响使用,透明度的设置大大增加了界面美观性。 4.界面布局合理,左侧进行输入,右侧进行输出,将其结合在一个框中,界面大方,同时只需要在输入数字和回车键之间转换即可实现多次输入,使用方便简单。 二、动画设计 (一)题目要求与题目解析 题目要求每位同学设计一组星际穿越的动画,界面美观流畅,最好有配乐,展现想象力,满分15分。 星际穿越是一部关于外太空的科幻片,关于太空网络上有大量的资源,故分析得该题难点不在于动画制作,而在于设计一个情节精彩连贯的故事,能够引人入胜。 总结起来,将该题分为情节设计、动画制作、配音配乐三个部分完成。 (二)具体设计与实现简述 1.情节设计 模仿星际穿越原版剧情,将主人公换成具有北邮特色的E01,E代表Electric中的E,01代表我邮通信领域的01地位。 E01在北邮主楼广场的经纬度处请求启动07电子巡航任务(暗含电子院2013211207班),经过曲率加速等进入外太空。 进入外太空之后,依次对银河系的九大行星进行了观测和报告。 依次是地球,土星,木星等,下面是部分星球的动画截图。 该部分是视频的主体,以纪录片的模式展示银河系的九大行星。 从不同角度观测星球,并通过报告银河总部的模式向观众介绍该星球的特点和状态。 完成九大行星的观测之后,任务完成,E01返航。 整个情节设计完整连贯,达到实习题目要求。 2.动画制作 动画整体采用会声会影剪辑而成,部分连接动画由flash简单制作而成,例如飞船返航画面。 动画时长00: 02: 14,符合基本要求。 3.配音配乐 考虑到已经添加字幕,就没有重复配音,只配了背景音乐,每一片段画面都有自己独立的音乐片段,符合自己片段的画面特点,符合题目要求。 (三)设计亮点 1.画面流畅无卡顿,2min时长动画画面无重复和冗杂。 2.画面宏大有气势,富有科幻大片的味道,展示了外太空的神秘感。 3.故事具有引人入胜的情节,精心设计,有趣的同时也有意义。 4.动画含字幕,设计元素完整,增加观赏性。 5.配乐符合画面,衔接正常,增加动画的观赏性。 三、BMI指数计算 (一)题目要求与题目解析 题目要求设计一个测量身体BMI指数和体脂率的健康计算器,按照题目所给的公式进行计算,基本要求是给出数据可正确计算,同时能够进行健康提示,最后要求该计算器简单易用,界面美观。 简单分析题意将该题分解成计算和显界面两方面。 在计算方面沿用原题给的公式,仅把题目中的身高的单位改换成常用单位cm,对公式做简单变换,采用常用量度单位提高可用度。 在显示界面易用方面,考虑到适用于所有人群,界面设计中将采用大量且具体的输入提示,同时性别采用选择按钮,将界面傻瓜化,简单化,减小用户使用难度。 (二)程序编写与功能实现 采用QT编写程序实现健康计算器的功能,在QT中主要分为头文件、源文件、界面文件,下面将摘录部分代码进行说明。 1.头文件程序 头文件是声明类的地方,因为本题功能相对简单,故只声明了一个类one,(one用来标记类的次序)。 在类中声明了私有的槽来连接界面的按键,还声明了一些基本计算值: BMI计算数值和体脂率计算数值。 classone: publicQDialog {public: explicitone(QWidget*parent=0); ~one(); privateslots: //定义私有的槽 voidon_ok_clicked();//确定键 voidon_close_clicked();//关闭键 private: Ui: : one*ui; floatbmi;//BMI计算数值 QStringBMIinfo; QStringhint; floatfat;};//体脂率计算数值 2.源文件程序 源文件是对头文件中声明的类进行定义的文件,除了QT常用自带的main.cpp以外,还有需要自行编写的与头文件中one.h相对应的有one.cpp,在one.cpp中完成classone的定义。 One.cpp中最重要的就是定义OK键,在功能设计中是在填入正确的数据后,点击OK键计算出相应结果并给与提醒,如果输入数据不符合要求,则进行错误提示。 Close键功能是点击的时候可以退出计算器,程序较简单,此处不赘述。 下面是OK键函数定义,摘录部分如下: voidone: : on_ok_clicked() { //信息采集,分别是身高、体重、腰围和性别 floatheight=ui->height->text().toFloat(); floatweight=ui->weight->text().toFloat(); floatwaistline=ui->waistline->text().toFloat(); boolmale=ui->male->isChecked(); boolfemale=ui->female->isChecked(); //输入格式判定 //如果格式不符合要求,弹出对话框报错 if(! (height>0&&weight>0&&waistline>0&&(male||female))) { QMessageBox: : critical(this, "错误", "请正确填写所有信息,并选择性别", "确定"); ui->height->clear(); ui->weight->clear(); ui->waistline->clear(); } //如果输入符合要求,则进行相关计算和输出 else{ //BMI指数计算 bmi=weight/(height*height/10000);//BMI计算公式 if(bmi<18.5){ BMIinfo="体重过低"; bmiHint=0; } elseif(bmi<23.9){ BMIinfo="体重正常"; bmiHint=1; } elseif(bmi<27.9){ BMIinfo="体重超重"; bmiHint=2; } else{ BMIinfo="肥胖"; bmiHint=3; } //BMI指数显示 ui->bmi->setText("\nBMI指数: "+QString: : number(bmi)+""+"鉴定结果: "+BMIinfo); //健康提示 switch(bmiHint){ case0: ui->hint->setText("健康小贴士: 体重过轻,请加大营养摄入,加强身体锻炼");break; case1: ui->hint->setText("健康小贴士: 体重正常,为您点32个赞,请继续保持");break; case2: ui->hint->setText("健康小贴士: 体重超重,多吃粗粮,选择健康饮食方式");break; case3: ui->hint->setText("健康小贴士: 身体肥胖,请节制饮食,并请求专业医生指导");break;} //体脂率计算 if(male){//男性体脂率计算 floata=waistline*0.74; floatb=weight*0.082+44.74; floatc=a-b; fat=c/weight*100; } elseif(female){//女性体脂率计算 floata=waistline*0.74; floatb=weight*0.082+34.89; floatc=a-b; fat=c/weight*100; } else//如果性别未选择,提示错误 QMessageBox: : critical(this, "错误", "请正确填写所有的信息,并选择性别", "确定"); //显示体脂率ui->fatRate->setText ("体脂率: \t"+QString: : number(fat)+"%");}} 3.界面文件 最后是界面文件,本题涉及的界面文件比较简单,都是可移动的输入框和显示框,此处介绍界面背景的设置。 界面背景设置语句放在.cpp文件的构造函数中中,下进行摘录和解释。 //设置背景图片 QPixmappixmap=QPixmap(": /img/back").scaled(this->size()); QPalettepalette(this->palette()); palette.setBrush(QPalette: : Background,QBrush(pixmap)); this->setPalette(palette); 基本原理是把背景图片加到资源中,然后将图片定义成刷子Brush,用这个刷子刷this指针所指的位置,即将输出界面刷成了预先准备的背景图片的样子。 (三)程序运行与解释 运行的界面如下如所示,是一个标题为健康计算器的对话框。 界面采用与健康相关的图片,美观大方。 输入框包括身高、体重、腰围以及性别选择按钮,同时输入框中有输入提示和单位,简单易用。 按照要求输入数据,即可正确的在显示框中输出相关的内容,例如输入身高171cm、体重54kg和腰围68cm,性别选择男。 输出BMI指数18.4672,鉴定结果体重过低,体脂率计算结果为2.133333%,健康小贴士提醒为“体重过轻,请加大营养摄入,加强身体锻炼。 ” 经过多次反复测试,正常输入时均能正确输出,当输入不符合要求时,弹出错误提示的对话框。 截图如下。 (四)设计亮点 1.程序设计编写规范,多次运行测试无bug。 2.界面布局合理,同时含有傻瓜式的输入提示,简单易用。 3.根据数据计算的结果对不同体质的人提出不同的健康建议。 4.界面设计美观,同时采用可视化UI设计,修改容易。 四、字符串处理器 (一)题目要求与题目解析 题目要求设计一个字符串处理程序,输入有且仅含有数字和字母的字符串,完成统计字符、逆序输出、插入和删除的功能,如果输入不合要求能够进行报错。 分析题目需要实现的功能偏多,不同功能都要输出相关的不同字符串,故设计了基本输入的部分one,还设计了显示结果的弹窗static。 各个功能分别定义函数来是实现,不同按钮对应不同函数实现不同功能即可。 (二)程序编写与功能实现 依旧采用QT编写程序实现字符串处理器的各项功能,在QT中主要分为头文件、源文件、界面文件,头文件做类的声明,源文件与之对应的做类的定义,本题定义了两个类,分别是在one.h中的classone和static.h中的classstatic。 分别对应输入界面和显示界面,其中输出界面的内容比较简单,只需要将槽中传过来的字符进行显示即可,程序较简单,此处不赘述。 下面就classone做说明,classone包含数据输入和四个基本处理功能,相对复杂,故作详细叙述。 Classone的声明依旧放在one.h中,包含基本的按钮on_convert_clicked()、on_stastic_clicked()、on_remove_clicked()、on_insert_clicked(),分别对应逆序输出、字符统计、删除字符、插入字符四项基本功能。 同时定义了一个在主窗和结果显示窗之间的信号Toshow,将在one.h中运算的字符串结果传出去显示。 最后还有一个功能性函数,字符输入check函数,检查字符输入是否合法,如果不合法就报错。 下面是one.h的部分程序摘录: publicslots: //声明槽“再次显示” voidreshow(intn); privateslots: //声明按钮 voidon_convert_clicked(); voidon_stastic_clicked(); voidon_remove_clicked(); voidon_insert_clicked(); signals: //信号toshow voidtoShow(string); private: Ui: : one*ui; stringin;//定义字符串用来存储输入的字符串 boolcheck();};//检查字符串合法性 1.输入检查函数 Classone的定义依旧放在one.cpp中,下面将按照功能来一一介绍。 首先是字符的check函数,要求可以录入任何一个字符串,但字符串必须且只能含有数字和字母,禁止输入其他字符,在不是同时含有数字和字母都应报错。 下面是摘录的check函数: boolone: : check()//输入检测函数check {in=ui->in->text().toStdString(); boolisNum
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 实习 报告