1、C语言综合编程训练C程序组成程序组成C C程序程序源程序源程序1 1源程序源程序2 2源程序源程序n n预编译命令预编译命令函数函数1 1函数函数n n说明部分说明部分执行部分执行部分开发方法:自上向下,逐步细化,模块化设计,结构化编码五 子 棋 游 戏 程 序一个综合实例的分析五 子 棋 游 戏 程 序一个综合实例的分析一般来说,开发一个软件要经过以下步骤:确定软件的功能定义核心数据结构对整个软件进行功能模块划分编写程序实现各功能模块对源程序进行编译和调试,形成软件产品功 能 分 析五子棋棋盘两位玩家交替行棋五子相连判定赢棋定义核心数据结构定义char gChessBoard1919;表示棋
2、盘棋盘上每个交叉点有三种状态当前光标位置表示struct point int x;int y;程序的模块划分查看源程序画棋盘显示提示信息棋盘置空接收,处理用户输入,直至:分出胜负按退出键判断落子键有效性更新数组与棋盘显示判断是否走成五子相连更新全局变量gCursor移动光标至新位置程 序 的 编 制 细 节查看源程序定义核心数据结构初始化接收按键移动光标落子与判定胜负main()函数程序中用到的库函数介绍bioskey程 序 的 编 制 细 节程序中用到的库函数textmodeclrscrputchcputsgotoxytextcolordelaysound 与nosound用 户 手 册查看
3、源程序设计任务v系统以菜单方式工作(文本菜单或图形菜单)v输入数据模块,数据用文件保存v输出数据模块,数据用文件保存v基本算法运用模块(排序、查找、插入、比较算法中至少包含一种)v系统进入画面(静态或动画)v系统其它功能实现(任选)参考设计题目一:职工信息管理系统设计职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能:v系统以菜单方式工作v职工信息录入功能(职工信息用文件保存)输入v职工信息浏览功能 输出v查询或排序功能:(至少一种查询方式)算法l按工资查询l按学历查询等v系统进入画面(静态或动画)v职工信息删
4、除、修改功能(任选项)参考设计题目二:飞机订票系统设计假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。试设计一民航订票系统,使之能提供下列服务:v系统以菜单方式工作v航班信息录入功能(航班信息用文件保存)输入v航班信息浏览功能输出v查询航线:(至少一种查询方式)算法l按航班号查询l按终点站查询v系统进入画面(静态或动画)v承办订票和退票业务(可选项)参考设计题目三:学生选修课程系统设计假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于
5、60)自由选课。试设计一选修课程系统,使之能提供以下功能:v系统以菜单方式工作v课程信息录入功能(课程信息用文件保存)输入v课程信息浏览功能输出v查询功能:(至少一种查询方式)算法l按学分查询l按课程性质查询v系统进入画面(静态或动画)v学生选修课程(可选项)参考设计题目四:图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:v系统以菜单方式工作v图书信息录入功能(图书信息用文件保存)输入v图书信息浏览功能输出v查询或排序功能:(至少一种查询方式)算法l按书名查询l按作者名查询v系统进入画面(静态或动画)v图
6、书信息的删除与修改(可选项)设计要求与设计报告v设计要求l可自己选定题目,但至少包含五个功能模块l模块化程序设计l锯齿型书写格式l必须上机调试通过v实习报告l语言简练,条理清楚,图表规范l程序设计组成框图、流程图l模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)l调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施l源程序清单和执行结果(软盘):清单中应有足够的注释图形设计1 显示系统显示器:CRT(阴极射线管)与控制电路组成适配器(图形卡):CPU与显示器的接口,由寄存器组、存储器和控制电路组成主机图形控制器显示存储器显示控制器适配器CRT参
7、考书:C高级实用程序设计 王士元 清华大学出版社将要显示的字符和图形以数字形式存储在卡上的视频RAM中,再转换成视频模拟信号传送给相应的显示器显示模式v文本模式:显示缓冲区中存放显示字符的代码(ASCII码或汉字机内码),及字符的属性,显示屏幕按字符分成若干行、列,如80列25行v图形模式:显示缓冲区中存放显示屏幕上每点(象素)的颜色或灰度值,显示屏幕按象素分成若干行、列,如640480一般开机后的模式都是80 25的文本模式2 Turbo C绘图Turbo C支持的适配器和图形模式xy(0,0)分辨率:640 480(0,0)(0,0)(20,50)(639,479)(400,150)图形库
8、文件与图形头文件 graphics.lib与graphics.h图形显示的坐标与象素适配器模式分辨率颜色数标识符CGA(彩色图形适配器)EGA(增强图形适配器)VGA(视频图形阵列)0320 2004CGAC04640 2002CGAHI1320 2004CGAC12320 2004CGAC23320 2004CGAC30640 20016EGAL01640 35016EGAHI0640 20016VGAL01640 35016VGAMED2640 48016VGAHI图形系统的初始化v图形系统初始化函数lvoid initgraph(int*driver,int*mode,char*path
9、todriver)l其中;udriver显示适配器驱动程序的枚举变量umode图形模式(模式号或模式标识符)upathtodriver适配器驱动程序的寻找路径,“”表示在当前目录下(*.BGI)lenum graphics_driverDETECT,CGA,MCGA,EGA,EGA64,VGA,PC3270;lDETECT自动检测所用显示适配器的类型,将相应的驱动程序装入,并将其最高显示模式作为当前显示模式使用图形方式时先进行图形系统初始化,检测或设置指定的图形模式#include main()int driver=DETECT,mode;initgraph(&driver,&mode,“”)
10、;.closegraph();initgraph(&driver,&mode,“d:tcbgi”);#include main()int driver=VGA;int mode=VGAHI;initgraph(&driver,&mode,“”);.closegraph();将指定模式的驱动程序(*.GBI)从当前路径下调入内存关闭图形系统回到文本模式图形程序的图形程序的独立运行独立运行问题问题为使图形方式的为使图形方式的C C源程序能够脱离源程序能够脱离TCTC环境下运行,应对环境下运行,应对EGAVGAEGAVGA显示器的驱动程序显示器的驱动程序.BGIBGI转换成转换成.OBJOBJ文件文
11、件:C:TCC:TCBGIOBJBGIOBJ EGAVGA EGAVGA然后然后,将将EGAVGA.OBJEGAVGA.OBJ与与GRAPHICS.LIBGRAPHICS.LIB进行连接进行连接:C:TCC:TCTLIBTLIB LIBGRAPHICS.LIB+EGAVGA.OBJ LIBGRAPHICS.LIB+EGAVGA.OBJ程序中程序中,initgraphinitgraph()()调用前要用调用前要用registerbgidriverregisterbgidriver()()进进行登记行登记:registerbgidriverregisterbgidriver(EGAVGA_driv
12、er);(EGAVGA_driver);v清屏和恢复显示方式函数lvoid cleardevice(void);lvoid closegraph(void);基本图形函数v画点:putpixel()getpixel()v坐标移动:moveto()moverel()getx()gety()v画线:line()lineto()linerel()v画矩形和条形图:rectangle()bar()v椭圆、圆、圆弧和扇形:ellipse()circle()arc()pieslice()颜色控制函数v设调色板:setpalette()v设背景色:setbkcolor()v设绘图色:setcolor()关闭
13、图形系统回到文本模式颜色值颜色名颜色 颜色值颜色名颜色0123456789101112131415BLACKBLUEGREENCYANREDMAGENTABROWNLIGHTGRAYDARKGRAYLIGHTBLUELIGHTGREENLIGHTCYANLIGHTREDLIGHTMAGENTAYELLOWWHITE黑蓝绿青红洋红棕浅灰深灰淡蓝淡绿淡青淡红淡洋红黄白设定线型函数:setlinestyle()填充函数v设定填充模式:setfillstyle()v常用函数:bar3d()sector()fillellipse()fillpoly()屏幕操作函数v屏幕图象存储与显示:getimage(
14、)putimage()imagesize()视口函数lsetviewport()lclearviewport()图形方式下的文本输出v文本输出:outtext()outtextxy()v定义文本字型:settextstyle()文本的屏幕输出#include 屏幕坐标(1,1)(80,25)文本方式控制函数vvoid textmode(int newmode);vTurbo C支持5种文本显示方式方式方式名行列和颜色0BW4040 25 黑白1C4040 25 彩色2BW8080 25 黑白3C8080 25 彩色7MONO80 25 单色-1LASTMODE上一次的显示方式文本方式下颜色控制
15、函数v文本颜色 textcolor()v文本背景 textbackground()v文本属性 textattr()BLINKRGBIRGB背景色字符色闪烁加亮字符显示亮度控制函数vhighvideo()vlowvideo()vnormvideo()窗口设置与文本输出函数vwindow()vcprintf()vcputs()vputch()清屏与光标操作函数vclrscr()vclreol()vdelline()vgotoxy()wherex()wherey()屏幕文本移动与存取函数vmovetext()vgettext()vputtext()菜单及其设计要点菜单作用:由若干任务项组成的画面(界
16、面),选择一项按键确定后,即执行相应的功能菜单显示方式:文本方式菜单与图形方式菜单菜单种类:固定式菜单、弹出式菜单,下拉式菜单optmenu.cpopdown.ctext_men.cmenu_s.cmenu_gra.cplane_e.c菜单设计要点:v菜单窗口图象的存储与显示新的窗口出现时,会覆盖原窗口的区域可事先保存要覆盖的区域,新窗口消失后,再恢复原区域的显示l图形方式:getimage()putimage()imagesize()malloc()l文本方式:gettext()puttext()v菜单窗口和菜单项的生成生成背景图象,在指定位置显示菜单项文字v光条的生成光条的产生及光条在光标键的控制下而移动(保存与再现)v键识别当按下菜单上的选项(如:功能键或光标移动键)时,根据键值转入相应的功能处理v菜单的连接v功能执行小程序可以嵌入在菜单中,大程序做成功能模块,根据键码直接调用