310 likes | 431 Views
C 语言综合编程训练. C 程序. 源程序 1. ……. 源程序 2. ……. 源程序 n. 预编译命令. 函数 1. ……. 函数 n. 说明部分. 执行部分. C 程序组成. 开发方法 : 自上向下,逐步细化,模块化设计,结构化编码. 五 子 棋 游 戏 程 序. 一个综合实例的分析. 五 子 棋 游 戏 程 序. 一个综合实例的分析. 一般来说 , 开发一个软件要经过以下步骤 :. 确定软件的功能. 定义核心数据结构. 对整个软件进行功能模块划分. 编写程序实现各功能模块. 对源程序进行编译和调试 , 形成软件产品.
E N D
C程序 源程序1 …… 源程序2 …… 源程序n 预编译命令 函数1 …… 函数n 说明部分 执行部分 C程序组成 开发方法: 自上向下,逐步细化,模块化设计,结构化编码
五 子 棋 游 戏 程 序 一个综合实例的分析
五 子 棋 游 戏 程 序 一个综合实例的分析 一般来说,开发一个软件要经过以下步骤: 确定软件的功能 定义核心数据结构 对整个软件进行功能模块划分 编写程序实现各功能模块 对源程序进行编译和调试,形成软件产品 查看源程序
功 能 分 析 五子棋棋盘 两位玩家交替行棋 五子相连判定赢棋 查看源程序
定义核心数据结构 定义char gChessBoard[19][19];表示棋盘 棋盘上每个交叉点有三种状态 当前光标位置表示 struct point { int x; int y; }; 查看源程序
画棋盘 • 显示提示信息 • 棋盘置空 接收,处理用户输入,直至: • 分出胜负 • 按退出键 • 判断落子键有效性 • 更新数组与棋盘显示 • 判断是否走成五子相连 • 更新全局变量gCursor • 移动光标至新位置 程序的模块划分 查看源程序
程 序 的 编 制 细 节 定义核心数据结构 初始化 接收按键 移动光标 落子与判定胜负 main()函数 程序中用到的库函数介绍 查看源程序
程 序 的 编 制 细 节 程序中用到的库函数 bioskey textmode clrscr putch cputs gotoxy textcolor delay sound 与nosound
用 户 手 册 查看源程序
设计任务 • 系统以菜单方式工作(文本菜单或图形菜单) • 输入数据模块,数据用文件保存 • 输出数据模块,数据用文件保存 • 基本算法运用模块(排序、查找、插入、比较算法中至少包含一种) • 系统进入画面(静态或动画) • 系统其它功能实现(任选)
参考设计题目一:职工信息管理系统设计 职工信息包括职工号、姓名、性别、出生年月、学历、职务、工资、住址、电话等(职工号不重复)。试设计一职工信息管理系统,使之能提供以下功能: • 系统以菜单方式工作 • 职工信息录入功能(职工信息用文件保存)--输入 • 职工信息浏览功能 --输出 • 查询或排序功能:(至少一种查询方式) --算法 • 按工资查询 • 按学历查询等 • 系统进入画面(静态或动画) • 职工信息删除、修改功能(任选项)
参考设计题目二:飞机订票系统设计 假定民航机场共有n个航班,每个航班有一航班号、确定的航线(起始站、终点站)、确定的飞行时间(星期几)和一定的成员订额。试设计一民航订票系统,使之能提供下列服务: • 系统以菜单方式工作 • 航班信息录入功能(航班信息用文件保存)--输入 • 航班信息浏览功能--输出 • 查询航线:(至少一种查询方式)--算法 • 按航班号查询 • 按终点站查询 • 系统进入画面(静态或动画) • 承办订票和退票业务(可选项)
参考设计题目三:学生选修课程系统设计 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能: • 系统以菜单方式工作 • 课程信息录入功能(课程信息用文件保存)--输入 • 课程信息浏览功能--输出 • 查询功能:(至少一种查询方式)--算法 • 按学分查询 • 按课程性质查询 • 系统进入画面(静态或动画) • 学生选修课程(可选项)
参考设计题目四:图书信息管理系统设计 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能: • 系统以菜单方式工作 • 图书信息录入功能(图书信息用文件保存)--输入 • 图书信息浏览功能--输出 • 查询或排序功能:(至少一种查询方式)--算法 • 按书名查询 • 按作者名查询 • 系统进入画面(静态或动画) • 图书信息的删除与修改(可选项)
设计要求与设计报告 • 设计要求 • 可自己选定题目,但至少包含五个功能模块 • 模块化程序设计 • 锯齿型书写格式 • 必须上机调试通过 • 实习报告 • 语言简练,条理清楚,图表规范 • 程序设计组成框图、流程图 • 模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等) • 调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施 • 源程序清单和执行结果(软盘):清单中应有足够的注释
适配器 图形 控制器 显示 存储器 显示 控制器 CRT 主机 • 参考书:C高级实用程序设计 王士元 清华大学出版社 图形设计 • 1 显示系统 • 显示器:CRT(阴极射线管)与控制电路组成 • 适配器(图形卡):CPU与显示器的接口,由寄存器组、存储器和控制电路组成 将要显示的字符和图形以数字形式存储在卡上的视频RAM中, 再转换成视频模拟信号传送给相应的显示器
显示模式 • 文本模式:显示缓冲区中存放显示字符的代码(ASCII码或汉字机内码),及字符的属性,显示屏幕按字符分成若干行、列,如80列25行 • 图形模式:显示缓冲区中存放显示屏幕上每点(象素)的颜色或灰度值,显示屏幕按象素分成若干行、列,如640480 一般开机后的模式都是80 ×25的文本模式
适配器 模式 分辨率 颜色数 标识符 2 1 0 1 0 1 2 3 0 4 320 200 640 200 640 350 320 200 320 200 640 350 640 480 320 200 640 200 640 200 4 4 16 16 4 16 2 16 16 4 CGAC0 CGAHI CGAC1 CGAC2 CGAC3 VGAMED VGAL0 EGAHI EGAL0 VGAHI CGA (彩色图形 适配器) EGA (增强图形 适配器) (0,0) x (20,50) (0,0) VGA (视频图形 阵列) (0,0) (400,150) y (639,479) 分辨率:640 480 • 2 Turbo C绘图 • Turbo C支持的适配器和图形模式 • 图形库文件与图形头文件 graphics.lib与graphics.h • 图形显示的坐标与象素
使用图形方式时先进行图形系统初始化, 检测或设置指定的图形模式 • 图形系统的初始化 • 图形系统初始化函数 • void initgraph(int *driver,int *mode,char *pathtodriver) • 其中; • driver——显示适配器驱动程序的枚举变量 • mode——图形模式(模式号或模式标识符) • pathtodriver——适配器驱动程序的寻找路径,“”表示在当前目录下(*.BGI) • enum graphics_driver{DETECT,CGA,MCGA,EGA,EGA64,………,VGA,PC3270}; • DETECT——自动检测所用显示适配器的类型,将相应的驱动程序装入,并将其最高显示模式作为当前显示模式
#include <graphics.h> main() { int driver=VGA; int mode=VGAHI; initgraph(&driver,&mode, “”); ………. closegraph(); } 将指定模式的驱动程序 (*.GBI) 从当前路径下调入内存 关闭图形系统回到文本模式 initgraph(&driver,&mode, “d:\\tc\\bgi”); #include <graphics.h> main() { int driver=DETECT,mode; initgraph(&driver,&mode, “”); ………. closegraph(); }
图形程序的独立运行问题 为使图形方式的C源程序能够脱离TC环境下运行,应对EGAVGA显示器的驱动程序.BGI转换成.OBJ文件: C:\TC\BGIOBJ EGAVGA 然后,将EGAVGA.OBJ与GRAPHICS.LIB进行连接: C:\TC\TLIB LIB\GRAPHICS.LIB+EGAVGA.OBJ 程序中,initgraph()调用前要用registerbgidriver()进行登记: registerbgidriver(EGAVGA_driver);
清屏和恢复显示方式函数 • void cleardevice(void); • void closegraph(void); • 基本图形函数 • 画点:putpixel() getpixel() • 坐标移动:moveto() moverel() getx() gety() • 画线:line() lineto() linerel() • 画矩形和条形图:rectangle() bar() • 椭圆、圆、圆弧和扇形:ellipse() circle() arc() pieslice() • 颜色控制函数 • 设调色板:setpalette() • 设背景色:setbkcolor() • 设绘图色:setcolor() 关闭图形系统回到文本模式
颜色值 颜色值 颜色名 颜色 颜色名 颜色 深灰 黑 0 8 DARKGRAY BLACK 淡蓝 蓝 9 1 LIGHTBLUE BLUE 淡绿 绿 10 2 LIGHTGREEN GREEN 淡青 青 11 3 LIGHTCYAN CYAN 淡红 红 12 4 LIGHTRED RED 淡洋红 洋红 13 5 LIGHTMAGENTA MAGENTA 棕 黄 14 6 YELLOW BROWN 浅灰 白 15 7 LIGHTGRAY WHITE
• 设定线型函数: setlinestyle() • 填充函数 • 设定填充模式:setfillstyle() • 常用函数:bar3d() sector() fillellipse() fillpoly() • 屏幕操作函数 • 屏幕图象存储与显示: getimage() putimage() imagesize() • 视口函数 • setviewport() • clearviewport() • 图形方式下的文本输出 • 文本输出:outtext() outtextxy() • 定义文本字型:settextstyle()
(1,1) (80,25) 文本的屏幕输出 • #include <conio.h> • 屏幕坐标
方式 方式名 行列和颜色 0 BW40 40 25 黑白 1 C40 40 25 彩色 2 BW80 80 25 黑白 3 C80 80 25 彩色 7 MONO 80 25 单色 上一次的显示方式 -1 LASTMODE • 文本方式控制函数 • void textmode(int newmode); • Turbo C支持5种文本显示方式
加亮 R G B I R G B BLINK 闪烁 背景色 字符色 • 文本方式下颜色控制函数 • 文本颜色 textcolor() • 文本背景 textbackground() • 文本属性 textattr() • 字符显示亮度控制函数 • highvideo() • lowvideo() • normvideo()
窗口设置与文本输出函数 • window() • cprintf() • cputs() • putch() • 清屏与光标操作函数 • clrscr() • clreol() • delline() • gotoxy() wherex() wherey() • 屏幕文本移动与存取函数 • movetext() • gettext() • puttext()
菜单及其设计要点 • 菜单作用:由若干任务项组成的画面(界面),选择一项按键确定后,即执行相应的功能 • 菜单显示方式:文本方式菜单与图形方式菜单 • 菜单种类:固定式菜单、弹出式菜单,下拉式菜单 optmenu.c popdown.c text_men.c menu_s.c menu_gra.c plane_e.c
菜单设计要点: • 菜单窗口图象的存储与显示 新的窗口出现时,会覆盖原窗口的区域 可事先保存要覆盖的区域,新窗口消失后,再恢复原区域的显示 • 图形方式:getimage() putimage() imagesize() malloc() • 文本方式:gettext() puttext() • 菜单窗口和菜单项的生成 生成背景图象,在指定位置显示菜单项文字 • 光条的生成 光条的产生及光条在光标键的控制下而移动(保存与再现) • 键识别 当按下菜单上的选项(如:功能键或光标移动键)时,根据键值转入相应的功能处理 • 菜单的连接 • 功能执行 小程序可以嵌入在菜单中,大程序做成功能模块,根据键码直接调用