Fortran课程设计报告范文.docx
- 文档编号:4020020
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:34
- 大小:225.62KB
Fortran课程设计报告范文.docx
《Fortran课程设计报告范文.docx》由会员分享,可在线阅读,更多相关《Fortran课程设计报告范文.docx(34页珍藏版)》请在冰豆网上搜索。
Fortran课程设计报告范文
中南大学
课程设计报告书
课程名称:
Fortran语言课程设计
班级:
土木工程2005级06班
学号:
1201050624
姓名:
成丕富
指导教师:
蔡旭晖
二○○六年六月
目录
一、课程设计任务书
………………………………………………3
二、需求分析
………………………………………………5
三、概要设计
………………………………………………5
四、系统实现
………………………………………………6
五、详细设计
………………………………………………10
六、源程序代码
………………………………………………12
七、总结
………………………………………………28
八、参考文献
………………………………………………28
《FORTRAN程序设计课程设计》任务书
一、实践目的
通过本课程设计,培养利用程序设计技术进行计算机与专业知识的交叉应用,综合解决实际问题的能力。
通过自己分析问题、寻求算法、编写、调试程序、解决问题的过程,掌握多模块结构的程序设计与调试方法,以及程序模块间的数据传递方法,建立提出问题、分析问题、解决问题的思维方式,促进灵活运用所学知识解决问题能力的提高。
二、设计任务
制作一个信息管理系统,从以下题目中任选其一。
1.上网查询各省会城市2005年生产总值(GDP)、农林牧渔业总产值、工业总产值,将数据。
以统一格式保存在一个纯文本文件tongji.dat中。
编程实现:
(1)从文件tongji.dat中读取数据,计算全国省会2005年GDP的平均值,统计GDP高于平均值的城市数;
(2)按第一产业(即农林牧渔业总产值与工业总产值之和)总产值的升序排序,将排序后的数据存入文件fenxi.dat中。
(3)统计工业总产值在1000亿元以下、1000~2000亿元、2000~3000亿元、3000亿元以上的城市数,并绘制分布饼图和折线图。
(4)计算各城市2005年较2004年相比的GDP增长幅度,计算并输出自己所在省的省会城市GDP增长幅度在各省会城市中的排名。
2.已知
,其中h=0.002
(1)计算
及
,k、i、j=0,1,2,….,500
要求结果精确到小数点后第6位,并将结果输出到文件poisson.dat中。
(2)找出
及
的最大、最小值,并统计两个最小值各有几个。
(3)统计
在0.000005以下、0.000005~0.000010、0.000010~0.000015、0.000015~0.000020、0.000020以上的数据个数,并绘制分布饼图和直方图。
三、设计报告要求
1.设计报告字数一般不少于3000字,内容应层次分明,文字简练,说明透彻,立论正确。
2.报告要理论联系实际,运用科学的研究方法对选题进行综合分析,有完整的设计方案。
3.基本内容:
(1)需求分析:
包括设计题目、设计要求以及系统功能需求分析;
(2)概要设计:
包括系统总体设计框架和系统功能模块图;
(3)详细设计。
包括主要功能模块的算法设计思路以及对应的工作流程图;
(4)主要源程序代码。
包括存储结构设计说明,以及完整源程序清单;
(5)调试分析过程描述。
包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);
(6)总结。
包括对自己的工作作出客观的评价(优、缺点)和设计进一步的优化思路。
(7)附录和参考文献。
四、考核方式与评分办法
1.程序调试结果按优、良、中、及格、不及格五档评分,占总成绩的60%。
2.实验过程评价:
在上机操作过程中学生上机能力按好、较好、差三档评定,占课程总成绩的20%。
3.实验报告评价占课程总成绩的20%。
一、需求分析
1.课题
上网查询各省会城市2005年生产总值(GDP)、农林牧渔业总产值、工业总产值,将数据。
以统一格式保存在一个纯文本文件tongji.dat中。
编程实现:
(1)从文件tongji.dat中读取数据,计算全国省会2005年GDP的平均值,统计GDP高于平均值的城市数;
(2)按第一产业(即农林牧渔业总产值与工业总产值之和)总产值的升序排序,将排序后的数据存入文件fenxi.dat中。
(3)统计工业总产值在1000亿元以下、1000~2000亿元、2000~3000亿元、3000亿元以上的城市数,并绘制分布饼图和折线图。
(4)计算各城市2005年较2004年相比的GDP增长幅度,计算并输出自己所在省的省会城市GDP增长幅度在各省会城市中的排名。
2.此课题有以下几点要求
(1)查询2005年GDP各项数据,这可以通过上网查询的方式实现。
(2)将数据保存在纯文本文件tongji.dat中,可以编写程序写在文件中,或者直接输入。
(3)从文件中读取数据。
(4)计算平均值,统计数据,排序,输出数据。
(5)绘制分布饼图和折线图,这需要在QuickWinApplication环境下实现。
(6)实现主模块和子模块的连接。
二、概要设计(总体设计框架)
1.本系统是在QuickWinApplication环境下实现的,由一个主模块和五个子模块组成。
其中主模块的功能是建立一个主界面,并和各个子模块连接。
五个子模块的程序名和功能如下:
(1)Inputdata()输入/查看2005年全国各省会城市GDP源数据
(2)Tongji()计算GDP的平均值,统计GDP高于平均值的城市数
(3)Gdppaixu()按第一产业总产值的升序排序
(4)Fenduan()将城市按工业产值分段
Bingtu()绘制分布饼图
Zhexian()绘制分布折线图
(5)Increase()计算各城市的GDP增长幅度,并排名
2.各个模块的具体连接结构如下图:
三、系统实现
1.主要变量的定义
①本系统主要处理的是全国GDP的数据,一条记录有很多个数据,用结构体数组s(23)来表示:
typeeveryprovenceGDP
character*10provence
character*10capital
realpopulation
realgdp
realgop
endtype
dimensions(23)
type(everyprovenceGDP):
:
s
②涉及到在界面输出的变量
integer(4)color,fff
integer(4)fontnum
type(xycoord)xy
integer(4)dummy,status
2.文件的存取
本课题涉及的文件的存取内容主要有:
建立文件,打开文件,读文件,写文件和关闭文件。
在系统实现过程中用的都是有格式、直接存取的方式。
主要是这种直接存取方式读写数据时比较自由,可以在程序招待的过程中对任意一个指定的记录进行读写。
例如:
open(3,file='quanguogdp.dat',access='direct',form='formatted',recl=100)
300format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)
doi=1,23
read(3,300,rec=i)m(i)
enddo
close(3)
3.排序
在设计过程中,多处用到了排序问题。
我是先把要排序的数据值赋给一个数组,然后用选择排序法对此数组进行排序,然后返回进行其它操作。
选择排序法是排序法中比较好的一种方法,在很多地方都有应用。
4.在QuickWinApplication界面中显示图文
QuickWinApplication环境中主要调用的模块是msflib模块,我的这个系统主要调用的子程序如下:
Initializefonts初始化前景
floodfillrgb颜色填充
setcolorrgb设置颜色
setfont设置字体
clearscreen清空屏幕
moveto移动光标
outgtext显示字符
pie画扇形
lineto画直线
5.主模块和子模块的连接
在主模块中用一个if语句来和不同的子模块建立连接,调用子模块(子例行程序)。
返回主模块的时候有很多方法,可以用goto语句来返回,也可以用一个循环结构配合read语句来实现。
本系统采用的是后一种方法。
6.数据的公用
在编程实现过程中会遇到各个子程序之间数据的传输问题,比如在绘制饼图和折线图的时候就要用到前面的统计数据,这时就要用common语句实现不同程序单元之间的数据通信。
本系统中涉及到一处,故只需建立一个无名公用区:
Commonk1,k2,k3,k4
7.数据类型的转换
在QuickWinApplication中输出文件时,必须要把文件中的数据全部改成字符型数据才会显示出来。
这就要用到read语句或者write语句。
比如:
write(char,40)ave
40format(f20.0)
上面这段程序就实现了将ave的数值赋给字符变量char。
在数据形成文件时,也可以直接读取文件中的记录,本系统在实现过程中多数采用了这种方法。
比如在输出源数据的时候:
open(1,file='quanguogdp.dat',access='direct',form='formatted',recl=80)
read(1,200)t
200format(a80)
close
(1)
8.界面设计
在设计界面的时候,基本上是一个模块对应一个界面(有时有两个)。
各个界面切换的时候都会在界面上显示一些提示信息。
每个界面都经过精心设计,背景,字体,表格等都达到最佳的视觉效果。
下面是一些主要的界面:
9.系统测试
用户启动本系统后,会看到一个系统主界面。
按照界面上提示提示信息用户可以选择不同的功能。
①用户若选择输入1,再回车,则将切换到另一个界面,用户可以选择输入数据或直接查看源数据。
若直接查看源数据,则会切换到一个数据界面。
这时用户可根据提示信息随便输入一个整数,再回车就可以回到主界面。
②用户若选择输入2,再回车,则将切换到统计结果界面。
随便输入一个整数,再回车可以回到主界面。
③用户若选择输入3,再回车,则系统会自动按工业总产值排序,并显示在屏上,在文件夹里还会生成文件。
随便输入一个整数,再回车可以回到主界面。
④用户若选择输入4,再回车,则界面会显示工业总产值在1000亿元以下、1000~2000亿元、2000~3000亿元、3000亿元以上的城市数。
再随便输入一个整数,回车就会转到分布饼图界面。
再随便输入一个整数,回车就会转到分布折线图界面。
随便输入一个整数,再回车可以回到主界面。
⑤用户若选择输入5,再回车,则界面会显示GDP增长率和排序结果,随便输入一个整数,再回车可以回到主界面。
⑥用户若选择输入0,再回车,则退出本系统。
四、详细设计
1.主模块(ProgramEVERYPROVENCEGDP_SYSTEM)流程图
2.Subroutineinputdata
①清屏,设计界面,写提示语。
②从键盘输入一个字符char6。
用一个if语句,若char6为空,则等待用户输入源数据,存入文件quanguogdp.dat中;若char6不为空,继续。
③读取quanguogdp.dat中的数据,给s(23)赋值。
④将s(23)显示在界面上,画表格。
显示返回提示语。
3.Subroutinetongji
①读取quanguogdp.dat中的数据,给s(23)赋值。
②用一个循环结构统计gdp总数sum,计算平均值ave=sum/23。
③用循环结构统计gdp高于ave的城市数k。
④清屏,设计初始界面。
⑤在界面上显示统计结果,显示返回提示语。
4.Subroutinegdppaixu
①读取quanguogdp.dat中的数据,给s(23)赋值。
②用选择排序法升序排列s(23).gop。
③将排序后的s(23)按格式(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)写入文件paixu.dat中。
④清屏,将s(23)显示在界面上,画表格。
显示返回提示语。
5.Subroutinefenduan
①读取quanguogdp.dat中的数据,给s(23)赋值。
②用循环结构读取quanguogdp.dat中的数据,同时统计工业总产值在1000亿元以下、1000~2000亿元、2000~3000亿元、3000亿元以上的城市数k1,k2,k3,k4。
③清屏,设计初始界面。
④在界面上显示统计结果,显示下一步提示语。
6.Subroutinebingtu
①用公用区实现数据k1,k2,k3,k4通信。
②进行坐标换算,将一个整圆分块。
在使用PIE函
数画扇形的时候,需要用到8个参数。
本系
统在绘制饼图的时候(如右图),先确定圆的
大小,即:
x1=300;y1=100
x2=700;y2=500
还要确定第一个扇形的始边,即
x3=500;y3=100
剩下的三个点就要利用k1,k2,k3,k4来计算:
x4=500-200*cos((2.0*k1/23.0-0.5)*py)
y4=300+200*sin((2.0*k1/23.0-0.5)*py)
x5=500+200*cos((2.0*(k1+k2)/23.0-1.5)*py)
y5=300-200*sin((2.0*(k1+k2)/23.0-1.5)*py)
x6=500+200*cos((2.0*(k1+k2+k3)/23.0-1.5)*py)
y6=300-200*sin((2.0*(k1+k2+k3)/23.0-1.5)*py)
其中py=3.14159265
③清屏,设计初始界面。
④绘制饼图,写标识语,显示下一步提示语。
7.Subroutinezhexian
①清屏,设计初始界面。
②用moveto和lineto函数画坐标系。
③用moveto和outgtext函数标出坐标。
④用公用区实现数据k1,k2,k3,k4通信,计算出折线各端点的位置,画出折线。
⑤显示返回提示语。
8.Subroutineincrease
①定义结构体gdpincreace,在此结构体下定义另一数组t(23)。
②读取quanguogdp.dat中的数据,给s(23)赋值。
③计算gdp增长率,将省名、省会、2004年gdp、2005年gdp、gdp增长率赋给t(23)。
④用选择排序法将t(23)按gdp增长率排名,并将存入文件increase.dat中。
⑤清屏,设计初始界面。
⑥将t(23)及排名显示在界面上,显示返回提示语。
五、源程序代码
!
主模块程序
programEVERYPROVENCEGDP_SYSTEM
usemsflib
integer(4)color,fff
integer(4)fontnum
type(xycoord)xy
integerinput
parameter(py=3.14159265)
do
CALLCLEARSCREEN($GCLEARSCREEN)
color=setcolorrgb(#9056df)
fontnum=initializefonts()
fff=floodfillrgb(100,100,#ffffff)
fff=setcolorrgb(#abfdef)
fontnum=setfont('t''宋体''h45w30e')
callmoveto(120,70,xy)
calloutgtext("全国各省会城市GDP统计系统")
fontnum=setfont('t''楷体''h28w15e')
callmoveto(210,150,xy)
calloutgtext("制作人:
成丕富日期:
2006-6-28")
fontnum=setfont('t''宋体''h18w8e')
callmoveto(110,200,xy)
calloutgtext("本系统的功能有:
")
callmoveto(150,240,xy)
calloutgtext("
(1)输入/查看2005年全国各省会城市GDP源数据")
callmoveto(150,270,xy)
calloutgtext("
(2)计算全国省会2005年GDP的平均值,统计GDP高于平均值的城市数")
callmoveto(150,300,xy)
calloutgtext("(3)按第一产业(即农林牧渔业总产值与工业总产值之和)总产值的升序排序")
callmoveto(150,330,xy)
calloutgtext("(4)统计工业总产值在1000亿元以下、1000~2000亿元、2000~3000亿元、3000亿元")
callmoveto(180,360,xy)
calloutgtext("以上的城市数,并绘制分布饼图和折线图")
callmoveto(150,390,xy)
calloutgtext("(5)计算各城市2005年较2004年相比的GDP增长幅度,并排名")
fff=setcolorrgb(#aa0000)
callmoveto(120,500,xy)
calloutgtext("请选择您所要使用的功能(输入对应的序号,再按回车键):
____")
callmoveto(120,550,xy)
calloutgtext("按“0+ENTER”退出本系统")
read*,input
if(input==0)exit
if(input==1)then
callinputdata
elseif(input==2)then
calltongji
elseif(input==3)then
callgdppaixu
elseif(input==4)then
callfenduan
callbingtu
callzhexian
elseif(input==5)then
callincrease
endif
enddo
end
!
输入/查看数据子模块程序
subroutineinputdata
usemsflib
typeeveryprovenceGDP
character*10provence
character*10capital
realpopulation
realgdp
realgop
endtype
dimensions(23)
type(everyprovenceGDP):
:
s
integer(4)color,fff
integer(4)fontnum,x1
type(xycoord)xy
integerturn
character*10char6*1
character*80t(23)
parameter(py=3.14159265)
CALLCLEARSCREEN($GCLEARSCREEN)
fontnum=initializefonts()
fff=floodfillrgb(100,100,#ffffff)
color=setcolorrgb(#ffff00)
fontnum=setfont('仿宋''h35w15e')
callmoveto(50,50,xy)
calloutgtext("请按“ENTER”键开始输入源数据")
callmoveto(50,150,xy)
calloutgtext("按“数字键+ENTER”键跳过")
read*,char6
if(char6=='')then
doi=1,23
read(*,1000)s(i).provence,s(i).capital,s(i).population,s(i).gdp,s(i).gop
enddo
open(8,file='quanguogdp.dat',access='direct',form='formatted',recl=100)
doi=1,23
write(8,1000,rec=i)s(i)
enddo
close(8)
1000format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)
endif
CALLCLEARSCREEN($GCLEARSCREEN)
fontnum=initializefonts()
fff=floodfillrgb(100,100,#000000)
open(1,file='quanguogdp.dat',access='direct',form='formatted',recl=80)
read(1,200)t
200format(a80)
close
(1)
doi=1,23
color=setcolorrgb(#ffff00)
fontnum=setfont('仿宋''h17w10e')
callmoveto(100,90+20*i,xy)
calloutgtext(t(i))
enddo
doi=1,23
color=setcolorrgb(#11aadd)
callmoveto(90,108+20*i,xy)
x1=lineto(850,108+20*i)
enddo
callmoveto(90,75,xy)
x1=lineto(90,568)
callmoveto(180,75,xy)
x1=lineto(180,568)
callmoveto(300,75,xy)
x1=lineto(300,568)
callmoveto(455,75,xy)
x1=lineto(455,568)
callmoveto(650,75,xy)
x1=lineto(650,568)
callmoveto(850,75,xy)
x1=lineto(850,568)
callmoveto(90,75,xy)
x1=lineto(850,75)
callmoveto(90,108,xy)
x1=lineto(850,108)
color=setcolorrgb(#00aaaa)
callmoveto(100,83,xy)
calloutgtext('省名省会人口GDPGDP1')
fff=setcolorrgb(#1199ff)
fontnum=setfont('仿宋''h35w20e')
callmoveto(175,30,xy)
calloutgtext('全国各省会城市2005年GDP源数据')
fff=setcolorrgb(#ff0000)
fontnum=setfont('仿宋''h25w12e')
callmoveto(110,600,xy)
callou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Fortran 课程设计 报告 范文