Fortran课程设计报告.doc

上传人:laozhun 文档编号:2388365 上传时间:2023-02-17 格式:DOC 页数:28 大小:585KB
返回 下载 相关 举报
Fortran课程设计报告.doc_第1页
第1页 / 共28页
Fortran课程设计报告.doc_第2页
第2页 / 共28页
Fortran课程设计报告.doc_第3页
第3页 / 共28页
Fortran课程设计报告.doc_第4页
第4页 / 共28页
Fortran课程设计报告.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《Fortran课程设计报告.doc》由会员分享,可在线阅读,更多相关《Fortran课程设计报告.doc(28页珍藏版)》请在三一办公上搜索。

1、 课程设计报告书课程名称: Fortran语言课程设计 班 级: 土木工程2005级06班 学 号: 1201050624 姓 名: 指导教师: 二六 年 六 月目录一、 课程设计任务书3二、 需求分析5三、 概要设计5四、 系统实现6五、 详细设计10六、 源程序代码12七、 总结28八、 参考文献28FORTRAN程序设计课程设计任务书一、 实践目的通过本课程设计,培养利用程序设计技术进行计算机与专业知识的交叉应用,综合解决实际问题的能力。通过自己分析问题、寻求算法、编写、调试程序、解决问题的过程,掌握多模块结构的程序设计与调试方法,以及程序模块间的数据传递方法,建立提出问题、分析问题、解

2、决问题的思维方式,促进灵活运用所学知识解决问题能力的提高。二、 设计任务制作一个信息管理系统,从以下题目中任选其一。1上网查询各省会城市2005年生产总值(GDP)、农林牧渔业总产值、工业总产值,将数据。以统一格式保存在一个纯文本文件tongji.dat中。编程实现:(1)从文件tongji.dat中读取数据,计算全国省会2005年GDP的平均值,统计GDP高于平均值的城市数;(2)按第一产业(即农林牧渔业总产值与工业总产值之和)总产值的升序排序,将排序后的数据存入文件fenxi.dat中。(3)统计工业总产值在1000亿元以下、10002000亿元、20003000亿元、3000亿元以上的城

3、市数,并绘制分布饼图和折线图。(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.0000050.000010、0.0000100.000015、0.0000150.000020、0.000020以上的数据个数,并绘制分布饼图和直方图。三、 设计报告要求1 设计报告字数一般不少于3

4、000字,内容应层次分明,文字简练,说明透彻,立论正确。2 报告要理论联系实际,运用科学的研究方法对选题进行综合分析,有完整的设计方案。3 基本内容:(1)需求分析:包括设计题目、设计要求以及系统功能需求分析;(2)概要设计:包括系统总体设计框架和系统功能模块图;(3)详细设计。包括主要功能模块的算法设计思路以及对应的工作流程图;(4)主要源程序代码。包括存储结构设计说明,以及完整源程序清单;(5)调试分析过程描述。包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);(6)总结。包括对自己的工作作出客观的评价(优、缺点)和设计进

5、一步的优化思路。(7)附录和参考文献。四、 考核方式与评分办法1 程序调试结果按优、良、中、及格、不及格五档评分,占总成绩的60%。2 实验过程评价:在上机操作过程中学生上机能力按好、较好、差三档评定,占课程总成绩的20%。3 实验报告评价占课程总成绩的20%。一、需求分析1课题上网查询各省会城市2005年生产总值(GDP)、农林牧渔业总产值、工业总产值,将数据。以统一格式保存在一个纯文本文件tongji.dat中。编程实现:(1)从文件tongji.dat中读取数据,计算全国省会2005年GDP的平均值,统计GDP高于平均值的城市数;(2)按第一产业(即农林牧渔业总产值与工业总产值之和)总产

6、值的升序排序,将排序后的数据存入文件fenxi.dat中。(3)统计工业总产值在1000亿元以下、10002000亿元、20003000亿元、3000亿元以上的城市数,并绘制分布饼图和折线图。(4)计算各城市2005年较2004年相比的GDP增长幅度,计算并输出自己所在省的省会城市GDP增长幅度在各省会城市中的排名。2此课题有以下几点要求(1)查询2005年GDP各项数据,这可以通过上网查询的方式实现。(2)将数据保存在纯文本文件tongji.dat中,可以编写程序写在文件中,或者直接输入。(3)从文件中读取数据。(4)计算平均值,统计数据,排序,输出数据。(5)绘制分布饼图和折线图,这需要在

7、QuickWin Application 环境下实现。(6)实现主模块和子模块的连接。二、概要设计(总体设计框架) 1本系统是在QuickWin Application 环境下实现的,由一个主模块和五个子模块组成。其中主模块的功能是建立一个主界面,并和各个子模块连接。五个子模块的程序名和功能如下:(1)Inputdata() 输入/查看2005年全国各省会城市GDP源数据(2)Tongji() 计算GDP的平均值,统计GDP高于平均值的城市数(3)Gdppaixu() 按第一产业总产值的升序排序(4)Fenduan() 将城市按工业产值分段 Bingtu()绘制分布饼图 Zhexian()绘制

8、分布折线图(5)Increase()计算各城市的GDP增长幅度,并排名2各个模块的具体连接结构如下图:计算gdp平均值,统计高于平均值的城市数按第一产业升序排列,存入文件paixu.dat 中统计工业总产值在1000亿元以下、10002000亿元、20003000亿元、3000亿元以上的城市数计算GDP增长幅度,将增长幅度排名主控模块将源数据存入纯文本文件quanguogdp.dat中,读取数据绘制分布饼图绘制分布折线图三、系统实现1主要变量的定义 本系统主要处理的是全国GDP的数据,一条记录有很多个数据,用结构体数组s (23)来表示: type everyprovenceGDP chara

9、cter*10 provence character*10 capital real population real gdp real gopend typedimension s(23)type(everyprovenceGDP):s涉及到在界面输出的变量integer(4) color,fff integer(4) fontnumtype(xycoord) xyinteger(4) dummy,status2文件的存取本课题涉及的文件的存取内容主要有:建立文件,打开文件,读文件,写文件和关闭文件。在系统实现过程中用的都是有格式、直接存取的方式。主要是这种直接存取方式读写数据时比较自由,可以

10、在程序招待的过程中对任意一个指定的记录进行读写。例如:open(3,file=quanguogdp.dat,access=direct,form=formatted,recl=100)300 format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)do i=1,23 read(3,300,rec=i)m(i)end doclose(3)3排序在设计过程中,多处用到了排序问题。我是先把要排序的数据值赋给一个数组,然后用选择排序法对此数组进行排序,然后返回进行其它操作。选择排序法是排序法中比较好的一种方法,在很多地方都有应用。4在QuickWin Applicat

11、ion界面中显示图文QuickWin Application环境中主要调用的模块是msflib模块,我的这个系统主要调用的子程序如下: Initializefonts 初始化前景 floodfillrgb颜色填充 setcolorrgb设置颜色 setfont设置字体 clearscreen清空屏幕 moveto移动光标 outgtext显示字符 pie画扇形 lineto画直线5 主模块和子模块的连接在主模块中用一个if 语句来和不同的子模块建立连接,调用子模块(子例行程序)。返回主模块的时候有很多方法,可以用goto 语句来返回,也可以用一个循环结构配合read 语句来实现。本系统采用的是

12、后一种方法。6数据的公用在编程实现过程中会遇到各个子程序之间数据的传输问题,比如在绘制饼图和折线图的时候就要用到前面的统计数据,这时就要用common 语句实现不同程序单元之间的数据通信。本系统中涉及到一处,故只需建立一个无名公用区:Common k1,k2,k3,k47.数据类型的转换在QuickWin Application中输出文件时,必须要把文件中的数据全部改成字符型数据才会显示出来。这就要用到read语句或者write语句。比如:write(char,40)ave 40 format(f20.0)上面这段程序就实现了将ave 的数值赋给字符变量char 。在数据形成文件时,也可以直接

13、读取文件中的记录,本系统在实现过程中多数采用了这种方法。比如在输出源数据的时候:open(1,file=quanguogdp.dat,access=direct,form=formatted,recl=80)read(1,200)t200 format(a80)close(1)8界面设计 在设计界面的时候,基本上是一个模块对应一个界面(有时有两个)。各个界面切换的时候都会在界面上显示一些提示信息。每个界面都经过精心设计,背景,字体,表格等都达到最佳的视觉效果。下面是一些主要的界面: 主界面 源数据 统计结果 按工业总产值排序 分布结果 饼图 折线图 增长率排名9系统测试用户启动本系统后,会看到

14、一个系统主界面。按照界面上提示提示信息用户可以选择不同的功能。用户若选择输入1,再回车,则将切换到另一个界面,用户可以选择输入数据或直接查看源数据。若直接查看源数据,则会切换到一个数据界面。这时用户可根据提示信息随便输入一个整数,再回车就可以回到主界面。用户若选择输入2,再回车,则将切换到统计结果界面。随便输入一个整数,再回车可以回到主界面。用户若选择输入3,再回车,则系统会自动按工业总产值排序,并显示在屏上,在文件夹里还会生成文件。随便输入一个整数,再回车可以回到主界面。用户若选择输入4,再回车,则界面会显示工业总产值在1000亿元以下、10002000亿元、20003000亿元、3000亿

15、元以上的城市数。再随便输入一个整数,回车就会转到分布饼图界面。再随便输入一个整数,回车就会转到分布折线图界面。随便输入一个整数,再回车可以回到主界面。用户若选择输入5,再回车,则界面会显示GDP增长率和排序结果,随便输入一个整数,再回车可以回到主界面。用户若选择输入0,再回车,则退出本系统。四、详细设计1主模块(Program EVERYPROVENCEGDP_SYSTEM)流程图设计主界面包括前景,背景,字体,整体框架等输入整数input退 出 系 统input=0?input=3input=5input=1input=2input=4CallinputdataCalltongjiCall

16、gdppaixuCall fenduanCall increasecall bingtucall zhexianCLEARSCREENYNinput=0? 2Subroutine inputdata清屏,设计界面,写提示语。从键盘输入一个字符char6。用一个if 语句,若char6为空,则等待用户输入源数据,存入文件quanguogdp.dat中;若char6 不为空,继续。读取quanguogdp.dat中的数据,给s (23) 赋值。将s (23) 显示在界面上,画表格。显示返回提示语。3Subroutine tongji 读取quanguogdp.dat中的数据,给s (23) 赋值。

17、 用一个循环结构统计gdp 总数sum ,计算平均值ave=sum/23 。 用循环结构统计gdp 高于ave的城市数k 。 清屏,设计初始界面。 在界面上显示统计结果,显示返回提示语。4Subroutine gdppaixu 读取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) 显示在界面上,画表格。显示返回提示语。5Subroutine fenduan 读取quanguogdp.

18、dat中的数据,给s (23) 赋值。 用循环结构读取quanguogdp.dat中的数据,同时统计工业总产值在1000亿元以下、10002000亿元、20003000亿元、3000亿元以上的城市数k1,k2,k3,k4。 清屏,设计初始界面。在界面上显示统计结果,显示下一步提示语。6Subroutine bingtu 用公用区实现数据k1,k2,k3,k4通信。 进行坐标换算,将一个整圆分块。在使用PIE函 数画扇形的时候,需要用到8个参数。本系 统在绘制饼图的时候(如右图),先确定圆的 大小,即: x1=300;y1=100 x2=700;y2=500 还要确定第一个扇形的始边,即 x3=

19、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 清屏,设计初

20、始界面。 绘制饼图,写标识语,显示下一步提示语。7Subroutine zhexian 清屏,设计初始界面。 用moveto和lineto函数画坐标系。 用moveto和outgtext函数标出坐标。 用公用区实现数据k1,k2,k3,k4通信,计算出折线各端点的位置,画出折线。 显示返回提示语。8Subroutine increase 定义结构体gdpincreace,在此结构体下定义另一数组t(23)。读取quanguogdp.dat中的数据,给s (23) 赋值。计算gdp增长率,将省名、省会、2004年gdp、2005年gdp、gdp增长率赋给t (23)。 用选择排序法将t (23)

21、按gdp增长率排名,并将存入文件increase.dat中。 清屏,设计初始界面。 将t (23)及排名显示在界面上,显示返回提示语。五、源程序代码!主模块程序program EVERYPROVENCEGDP_SYSTEMuse msflibinteger(4) color,fffinteger(4) fontnumtype(xycoord) xyinteger inputparameter(py=3.14159265)doCALL CLEARSCREEN($GCLEARSCREEN)color=setcolorrgb(#9056df)fontnum=initializefonts()fff=

22、floodfillrgb(100,100,#ffffff)fff=setcolorrgb(#abfdef)fontnum=setfont(t宋体h45w30e)call moveto(120,70,xy)call outgtext(全国各省会城市GDP统计系统)fontnum=setfont(t楷体_GB2312h28w15e)call moveto(210,150,xy)call outgtext(制作人:成丕富 日期:2006-6-28)fontnum=setfont(t宋体h18w8e)call moveto(110,200,xy)call outgtext(本系统的功能有:)call

23、moveto(150,240,xy)call outgtext(1)输入/查看2005年全国各省会城市GDP源数据)call moveto(150,270,xy)call outgtext(2)计算全国省会2005年GDP的平均值,统计GDP高于平均值的城市数)call moveto(150,300,xy)call outgtext(3)按第一产业(即农林牧渔业总产值与工业总产值之和)总产值的升序排序)call moveto(150,330,xy)call outgtext(4)统计工业总产值在1000亿元以下、10002000亿元、20003000亿元、3000亿元)call moveto(

24、180,360,xy)call outgtext(以上的城市数,并绘制分布饼图和折线图)call moveto(150,390,xy)call outgtext(5)计算各城市2005年较2004年相比的GDP增长幅度,并排名)fff=setcolorrgb(#aa0000)call moveto(120,500,xy)call outgtext(请选择您所要使用的功能(输入对应的序号,再按回车键):_)call moveto(120,550,xy)call outgtext(按“0+ENTER”退出本系统)read*,inputif(input=0)exitif(input=1)thenca

25、ll inputdataelseif(input=2)thencall tongjielseif(input=3)thencall gdppaixuelseif(input=4)thencall fenduancall bingtucall zhexianelseif(input=5)thencall increaseend ifend doend!输入/查看数据子模块程序subroutineinputdatause msflibtype everyprovenceGDP character*10 provence character*10 capital real population re

26、al gdp real gopend typedimension s(23)type(everyprovenceGDP):sinteger(4) color,fffinteger(4) fontnum,x1type(xycoord) xyinteger turncharacter*10 char6*1character*80 t(23)parameter(py=3.14159265)CALL CLEARSCREEN($GCLEARSCREEN)fontnum=initializefonts()fff=floodfillrgb(100,100,#ffffff)color=setcolorrgb(

27、#ffff00)fontnum=setfont(仿宋h35w15e)call moveto(50,50,xy)call outgtext(请按“ENTER”键开始输入源数据)call moveto(50,150,xy)call outgtext(按“数字键+ENTER”键跳过)read*,char6if(char6=)then do i=1,23 read(*,1000)s(i).provence,s(i).capital,s(i).population,s(i).gdp,s(i).gop end do open(8,file=quanguogdp.dat,access=direct,form

28、=formatted,recl=100) do i=1,23 write(8,1000,rec=i)s(i) end do close(8) 1000 format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)end ifCALL CLEARSCREEN($GCLEARSCREEN)fontnum=initializefonts()fff=floodfillrgb(100,100,#000000)open(1,file=quanguogdp.dat,access=direct,form=formatted,recl=80)read(1,200)t200 form

29、at(a80)close(1)do i=1,23color=setcolorrgb(#ffff00)fontnum=setfont(仿宋h17w10e)call moveto(100,90+20*i,xy)call outgtext(t(i)end dodo i=1,23color=setcolorrgb(#11aadd)call moveto(90,108+20*i,xy)x1=lineto(850,108+20*i)end docall moveto(90,75,xy)x1=lineto(90,568)call moveto(180,75,xy)x1=lineto(180,568)call

30、 moveto(300,75,xy)x1=lineto(300,568)call moveto(455,75,xy)x1=lineto(455,568)call moveto(650,75,xy)x1=lineto(650,568)call moveto(850,75,xy)x1=lineto(850,568)call moveto(90,75,xy)x1=lineto(850,75)call moveto(90,108,xy)x1=lineto(850,108)color=setcolorrgb(#00aaaa)call moveto(100,83,xy)call outgtext(省名 省

31、会 人口 GDP GDP1)fff=setcolorrgb(#1199ff)fontnum=setfont(仿宋h35w20e)call moveto(175,30,xy)call outgtext(全国各省会城市2005年GDP源数据)fff=setcolorrgb(#ff0000)fontnum=setfont(仿宋h25w12e)call moveto(110,600,xy)call outgtext(随便输入一个整数,再按回车键返回主界面)read*,turnend!统计平均值子模块程序subroutine tongjiuse msflib type everyprovenceGDP

32、character*10 provence character*10 capital real population real gdp real gopend typedimension s(23)type(everyprovenceGDP):sinteger(4) fffinteger(4) fontnumtype(xycoord) xyinteger turncharacter char*3,char5*20integer(2) kparameter(py=3.14159265)CALL CLEARSCREEN($GCLEARSCREEN)fontnum=initializefonts()

33、fff=floodfillrgb(100,100,#000000)open(2,file=quanguogdp.dat,access=direct,form=formatted,recl=100)100 format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)sum=0.0do i=1,23 read(2,100,rec=i)s(i) sum=sum+s(i).gdpend doave=sum/23.0do j=1,23 read(2,100,rec=j)s(j) if(s(j).gdpave)k=k+1end doclose(2)write(char,20)

34、k20 format(i2)write(char5,40)ave40 format(f20.0)fff=setcolorrgb(#00ff00)fontnum=setfont(仿宋h25w12e)call moveto(50,50,xy)call outgtext(统计结果:)call moveto(50,100,xy)call outgtext(全国省会2005年GDP的平均值是)call outgtext(char5)call outgtext(元)call moveto(50,150,xy)call outgtext(高于全国省会2005年GDP的平均值的城市数是 )call outgt

35、ext(char)call outgtext(个)fff=setcolorrgb(#fffd00)fontnum=setfont(仿宋h25w13e)call moveto(50,300,xy)call outgtext(随便输入一个整数,再按回车键返回主界面)read*,turnend!按第一产业排序子模块程序subroutine gdppaixuuse msflibtype everyprovenceGDP character*10 provence character*10 capital real population real gdp real gopend typedimensio

36、n t1(1),m(23)type(everyprovenceGDP):t1,minteger(4) color,fffinteger(4) fontnumtype(xycoord) xyinteger turncharacter*80 tt(23)parameter(py=3.14159265)CALL CLEARSCREEN($GCLEARSCREEN)fontnum=initializefonts()fff=floodfillrgb(100,100,#000000)open(3,file=quanguogdp.dat,access=direct,form=formatted,recl=1

37、00)300 format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)do i=1,23 read(3,300,rec=i)m(i)end doclose(3)do i=1,22 l=i do j=i+1,23 if(m(l).gopm(j).gop)thenl=jend if end do t1(1)=m(i) m(i)=m(l) m(l)=t1(1)end doopen(4,file=paixu.dat,access=direct,form=formatted,recl=100)do i=1,23 write(4,100,rec=i)m(i)end doc

38、lose(4)100 format(a10,2x,a10,2x,f10.0,2x,f20.0,2x,f20.0)open(5,file=paixu.dat,access=direct,form=formatted,recl=80)read(5,400)tt400 format(a80)close(5)do i=1,23color=setcolorrgb(#ffff00)fontnum=setfont(仿宋h17w10e)call moveto(100,100+20*i,xy)call outgtext(tt(i)end dodo i=1,23color=setcolorrgb(#11aadd)

39、call moveto(90,118+20*i,xy)x1=lineto(850,118+20*i)end docall moveto(90,85,xy)x1=lineto(90,578)call moveto(180,85,xy)x1=lineto(180,578)call moveto(300,85,xy)x1=lineto(300,578)call moveto(455,85,xy)x1=lineto(455,578)call moveto(650,85,xy)x1=lineto(650,578)call moveto(850,85,xy)x1=lineto(850,578)call m

40、oveto(90,85,xy)x1=lineto(850,85)call moveto(90,118,xy)x1=lineto(850,118)fff=setcolorrgb(#1199ff)fontnum=setfont(仿宋h40w18e)call moveto(220,30,xy)call outgtext(按第一产业总产值的升序排序)color=setcolorrgb(#00aaaa)fontnum=setfont(仿宋h20w10e)call moveto(100,90,xy)call outgtext(省名 省会 人口 GDP GDP1)fff=setcolorrgb(#ff0000)fontnum=setfont(仿宋h25w13e)call moveto(110,600,xy)call outgtext(随便输入一个整数,再按回车键返回主界面)read*,turnend!将总产值分段子模块程序subroutine fenduanuse msflibtype everyprovenceGDP character*10 provence character*10 capital real population real gdp real gopend typedimension s(23)type(everyprovenceG

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号