轿车销售公司管理系统实验报告_第1页
轿车销售公司管理系统实验报告_第2页
轿车销售公司管理系统实验报告_第3页
轿车销售公司管理系统实验报告_第4页
轿车销售公司管理系统实验报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、轿车销售管理系统实验报告一 实验目的 通过完成从用户需求分析、数据库设计到上机编程、调试和应用等全过程,进一步了解和掌握本书中所讲解的内容。二 实验简述 轿车销售管理系统的主要实现对轿车信息、客户信息和员工信息的管理。三 课程设计全过程1需求分析:(实际详细调查)2数据库设计:(SQL Server 2000设计)概念(模型)设计 (实际到概念)逻辑设计 (逻辑推导)物理设计 (理论到实现)SQL编程、调试(测试验证) (实践反复检验)3应用程序编程、调试、测试 需求分析随着近年来我国经济的发展,国民生活水平的提高,国内的轿车产业开始迅猛发展,人民群众对于轿车的需求也是日益增多,也因此产生了很

2、多轿车销售公司。在这些轿车销售公司里,由于业务繁忙,往往需要处理各种品牌型号轿车的销售查询工作,销售员的管理工作等等。这些工作如果光靠人工来实现,工作量就很大,而且容易出现错误,造成管理上的混乱。因此,制作一套轿车销售管理系统对于公司管理能够提高轿车销售公司的管理水平、工作效率、服务质量、降低销售成本,最终提高公司的市场竞争力。1.1 编写目的轿车销售管理系统可以有效的管理轿车信息、员工信息和客户信息。它主要轿车销售公司的管理工作。本系统以SQL Server 2000为后台数据库,利用SQL Server2000的企业管理器和查询分析器对数据库进行管理和操作的方法。本文将以轿车销售公司的管理

3、为背景,介绍如何以VB为前台开发工具,SQL Server2000为后台数据库管理系工具开发数据库应用系统。本系统具有很强的使用性,用户只要根据实际的使用情况稍加修改,就可以把它应用到实际工作中。1.1.1数据库应用系统的开发涉及如下内容:系统功能设计;数据库设计;界面设计程序代码设计1.1.2项目内容:开发一个轿车销售管理系统对于该项目,主要注意以下两个方面:轿车销售公司的销售员管理、轿车信息管理和客户信息管理轿车销售系统中涉及那些数据对象,各对象之间以及对象内部的关系如何?如何保存个数据对象的相关数据,以便图书馆借阅系统进行数据处理。1.2 分析 1.2.1轿车销售系统的主要功能有:系统用

4、户管理功能。用户根据姓名和密码登录系统。登录用户分为两个等级:普通用户和管理员用户。普通用户只查看轿车信息、客户信息、员工信息等功能;管理员用户(admin)除了以上功能外,同时还有添加用户、修改用户密码和删除用户的功能。轿车信息管理功能。录入所销售的轿车编号、型号、品牌、价格、保修期等信息,同时支持对轿车信息的添加、修改、删除和查询功能。客户信息管理功能。录入购买轿车的客户姓名、性别、年龄、联系方式、所购车型号、购车价格等信息,同时还支持亏客户信息的添加、修改、删除和查询功能。员工信息管理功能。录入员工的员工号、姓名、性别等信息,同时支持对员工信息的添加、修改、删除和查询功能。1.2.2根据

5、系统的功能要求,采用模块化的方法,设计该系统的控制流程图如图: 登录修改用户密码登录修改用户密码查询用户密码系统用户删除系统用户管理功能轿车信息管理功能客户信息管理功能员工信息管理功能轿车信息查询轿车信息添加轿车信息修改轿车信息删除客户信息查询客户信息添加客户信息修改客户信息删除员工信息查询员工信息添加员工信息修改员工信息删除系统用户添加1.2.3 E-R模型用E-R模型描述土书馆管理系统中的实体集与实体集之间的关系,目的是以E-R图为工具,设计关系型的数据库,即确定应用系统所使用的数据库应包含哪些表,每个表的结构是怎么样的。 系统用户员工信息系统用户员工信息客户信息轿车信息管理用户名密 码用

6、户等级类型描述用户级别轿车型号轿车编号轿车品牌轿车价格轿车保修期轿车具体描述客户编号客户年龄客户职业身份证号客户电话客户住址购车价格购车型号客户性别客户姓名员工编号员工性别员工姓名员工电话员工职务员工生日员工地址进入公司时间所在部门逻辑设计(从理论E/R模型到理论关系模型的整理转换)2.1 关系描述的设计根据以上各E-R图,经过转换,可以导出各个关系。这些实体涉及的数据项有:系统用户:(用户名、密码、用户等级)管理:(用户等级、类型描述)轿车信息:(轿车编号、轿车型号、轿车品牌、轿车价格、轿车保修期、轿车具体描述)客户信息:(客户编号、客户姓名、客户性别、客户年龄、客户职业、身份证号、客户电话

7、、客户住址、购车型号、购车价格、备注)员工信息:(员工编号、员工姓名、员工性别、员工生日、进入公司时间、所在部门、员工职务、员工电话、员工地址)物理设计(从理论关系模型到实现实施数据库建立)3.1 数据库物理设计3.1.1创建数据库在创建数据库表之前,首先要创建一个数据库,本系统以SQL Server 2000为后台数据库。用户可以在企业管理器中创建数据库,也可以在查询分析器中执行SQL语句。需要主要的是,在设计数据库结构时,通常需要考虑主文件,从文件和日志文件的存储位置和大小。文件大小可以根据数据库的用途,用户数量和存储数据等因素综合考虑。一般出事大小不宜设置过大,以免浪费存储空间。而文件最

8、大尺寸需要设置大些,以保证有足够的存储空间。日志文件则不需要太多的空间。3.1.2 轿车销售管理系统库表结构设计 该系统设计了五个数据库表:用户信息表Users、用户类型表UserType、轿车信息表Car、客户信息表Customer、员工信息表Staff。 具体结构如下图所示:Users表字段名称标识名称数据类型空否字段说明User_name用户名Varchar(10)N主键User_pwd密码Varchar(20)NUser_type用户等级smallintN限制用户权限UserType表字段名称标识名称数据类型空否字段说明User_type用户等级SmallintN限制用户权限Type_

9、discription类型描述Varchar(50)NCar表字段名称标识名称数据类型空否字段说明Car_ip轿车编号IntN自增,主键Car_name轿车型号Varchar(20)NCar_brand轿车品牌Varchar(10)NCar_price轿车价格Int NCar_time轿车保修期Varchar(10)NCar_info轿车具体描述Varchar(100)Y备注Customer表字段名称标识名称数据类型空否字段说明Customer_id客户编号IntN自增,主键Customer_name客户姓名Varchar(10)NCustomer_sex客户性别Varchar(2)NCust

10、omer_age客户年龄IntYCustomer_occup客户职业Varchar(10)YCustomer_num身份证号Varchar(20)YCustomer_tel客户电话Varchar(10)YCustomer_addr客户住址Varchar(20)YBuy_car购车型号Varchar(20)NBuy_price购车价格Varchar(10)NInfo备注Varchar(100)Y客户其他信息Staff表字段名称标识名称数据类型空否字段说明Staff_id员工编号IntN自增,主键Staff_name员工姓名Varchar(10)NStaff_sex员工性别Varchar(2)NS

11、taff_brith员工生日Varchar(8)YStaff_intime进入公司时间Varchar(8)NStaff_depart所在部门Varchar(10)YStaff_title员工职务Varchar(10)YStaff_tel员工电话Varchar(10)YStaff_addr员工住址Varchar(20)Y3.1.3 用SQL建立各个表 建立Users表:CREATE TABLE dbo.Users( User_name VARCHAR(10) Primary Key User_pwd VARCHAR(20) NOT NULL User_type SMALLINT NOT NULL

12、) 建立UserType表CREATE TABLE dbo.UserType( User_type SMALLINT Primary Key Type_discription VARCHAR(100) NOT NULL) 建立Car表CREATE TABLE dbo.Car(Car_id INT Primary Key Car_name VARCHAR(20) NOT NULL Car_brand VARVHAR(20) NOT NULL Car_price INT NOT NULL Car_time VARVHAR(10) NOT NULL Car_info VARCHAR(100) NUL

13、L) 建立Customer表CREATE TABLE dbo.Customer(Customer_id INT Primary KeyCustomer_name VARCHAR(10) NOT NULLCustomer_sex VARCHAR(2) NULLCustomer_age INT NULLCustomer_occup VARCHAR(10) NULLCustomer_num VARCHAR(20) NULLCustomer_tel VARCHAR(10) NULLCustomer_addr VARCHAR(20) NULLBuy_car VARCHAR(20) NOT NULLBuy

14、_price VARCHAR(10) NOT NULLInfo) 建立Staff表CREATE TABLE dbo.staff( Staff_id INT Primary KeyStaff_name VARCHAR(10) NOT NULLStaff_sex VARCHAR(2) NOT NULLStaff_birth VARCHAR(8) NULLStaff_intime VARCHAR(8) NOT NULLStaff_depart VARCHAR(10) NULLStaff_title VARCHAR(10) NULLStaff_tel VARCHAR(10) NULLStaff_add

15、r VARCHAR(20) NULL)SQL编程、调试(测试验证) (实践反复检验)4.1 界面设计4.1.1轿车销售管理系统启动时,首先进入图4.1.1所示的用户界面。图4.1.1单击“确定”按钮,将出发cmd_OK_Click事件,将输入的用户信息与SQL Server对应数据表中的用户信息进行比较,如果输入的用户信息正确,则进入轿车销售公司管理系统。4.1.2 当系统运行时,首先启动轿车销售管理界面FromMain.Show。主界面具体设置如表4.1.2所示。 轿车销售公司管理界面设置完成后,即可进行各部分的程序设计。在主界面中主要通过单击主菜单来进行各种功能的操作。4.1.3 用户信息

16、管理添加用户功能,单击主界面的“添加用户”选项,启动frm_addUser.Show,进入“添加用户”界面,如图所示。图 单击“取消”按钮,将触发Cmd_Cancle_Click事件,不保存输入文本框的内容而直接返回到主界面中。 单击“确定”按钮,将触发cmd_OK_Click事件,把输入的用户信息添加到SQL Server对应的数据库中。 单击“查看/修改密码”选项,启动frm_selectUser.Show,进入“用户列表”界面,如图所示。图4.1.4 在本界面中,使用了一个DataGrid控件来显示用户信息。单击“取消”按钮,将触发cmd_Cancel_Client事件,返回主界面。选中

17、一个用户,单击“删除”按钮,将触发cmd_del_Click事件。单击“修改密码”选项后,进入“修改密码界面” 在这个界面中,可以进行用户密码的修改。4.1.4 在轿车信息管理系统中实现如图4.1.4的功能图4.1.4单击“查看轿车信息”选项,启动frm_queCar.Show,进入“查看轿车”界面,如图所示。图 单击“查询轿车”信息界面中,可以采用按轿车型号、轿车品牌和轿车价格3中查询方式来查询。我们添加了一个DataGrid控件来连接数据库,显示查询信息。在文本框中输入查询内容后,单击“确定”按钮,触发cmd_Que_click事件,完成对轿车信息的查询。 单击“修改/删除轿车信息”选项,

18、启动frm_edit_Car.Show,进入“编辑轿车信息”界面,如图所示图 在“编辑轿车信息”界面中,可以实现对轿车信息的逐条查看功能,还能实现对轿车信息的修改和删除功能。和前面的添加轿车信息界面一样,在这里同样使用了一个Adodc控件来连接数据库。 单击“增加轿车信息”选项,启动frm_addCar.Show,进入“增加轿车信息”界面,如图所示。图4.1.5 客户信息管理系统设计。在客户信息系统中需要设计实现如下所示功能。单击“查看客户信息”选项,启动frm_queCus.Show,进入“查询顾客”界面。单击“修改/删除客户信息”选项,启动frm_edit_Cus.Show,进入编辑客户信

19、息界面。单击“添加客户信息”选项,启动frm_addCus.Show,进入“添加客户信息”界面。4.1.6 员工信息管理系统界面。 在员工信息管理系统中需要设计实现以下的功能。 单击“查看员工信息”选项,启动frm_queEmp.Show,进入“查询员工”界面单击“修改/查询员工信息”选项,启动frm_edit_Emp.Show,进入编辑员工信息界面。单击“添加员工信息”选项,启动frm_addEmp.Show,进入“添加员工信息”界面。4.2 程序设计 4.2.1系统所使用的技术和工具主要有: 1)Visual basic编程语言 2)Adodc控件和DataGrid控件的使用方法 3)Re

20、cordset对象使用方法 轿车销售公司管理系统在调用SQL Server数据库表时使用了ADO控件Adodc来连接数据库。 在使用DataGrid控件时要注意数据源DataSource,它的连接对象直接决定了显示在窗口中的内容。 在对数据库进行添加、修改、删除等操作时没有采用Insert、updataa、delete等SQL Server语句,而是采用了Visual Basic自带的Recordset对象用法,这种方法同样能够实现对数据库的操作。 添加汽车信息的程序: Adodc1.RecordSource = SELECT * FROM Car Order by Car_id desc A

21、dodc1.Refresh If Adodc1.Recordset.EOF = True Then txtId = 1 Else txtId = Adodc1.Recordset.Fields(0) + 1 End If If txtBrand.Text = Then MsgBox (请输入汽车品牌) Exit Sub End If If txtPrice.Text = Then MsgBox (请输入汽车价格) Exit Sub End If If txtName.Text = Then MsgBox (请输入汽车型号) Exit Sub End If If txtTime.Text = T

22、hen MsgBox (请输入汽车保修期) Exit Sub End If 增加新车 Adodc1.Recordset.AddNew Adodc1.Recordset.Fields(0).Value = Val(txtId) Adodc1.Recordset.Fields(1).Value = Trim(txtName.Text) Adodc1.Recordset.Fields(2).Value = Trim(txtBrand.Text) Adodc1.Recordset.Fields(3).Value = Val(Trim(txtPrice.Text) Adodc1.Recordset.Fi

23、elds(4).Value = Trim(txtTime.Text) Adodc1.Recordset.Fields(5).Value = Trim(txtInfo.Text) Adodc1.Recordset.Update Adodc1.Refresh MsgBox 汽车信息增加完成 Unload MeEnd Sub 另外添加员工信息和添加客户信息的程序与之类似。查修改/删除轿车信息的程序:Private Sub Cmd_del_Click() Adodc1.Recordset.Delete Adodc1.Recordset.Update MsgBox (轿车记录已删除) Adodc1.Re

24、cordSource = SELECT * FROM Car Adodc1.RefreshEnd SubPrivate Sub Cmd_final_Click() Adodc1.Recordset.MoveLast Cmd_next.Enabled = False Cmd_pre.Enabled = TrueEnd SubPrivate Sub Cmd_first_Click() Adodc1.Recordset.MoveFirst Cmd_pre.Enabled = False Cmd_next.Enabled = TrueEnd SubPrivate Sub Cmd_modi_Click(

25、) curId = Adodc1.Recordset.Fields(0) Adodc1.Recordset.Fields(1) = Trim(txtCarname.Text) Adodc1.Recordset.Fields(2) = Trim(txtCarbrand.Text) Adodc1.Recordset.Fields(3) = Val(Trim(txtCarprice.Text) Adodc1.Recordset.Fields(4) = Trim(txtCartime.Text) Adodc1.Recordset.Fields(5) = Trim(txtCarinfo.Text) Ad

26、odc1.Recordset.Update MsgBox (轿车记录已修改) Adodc1.RecordSource = SELECT * FROM Car Adodc1.Refresh Do While Adodc1.Recordset.Fields(0) curId Adodc1.Recordset.Move (1) LoopEnd SubPrivate Sub Cmd_next_Click() If Cmd_pre.Enabled = False Then Cmd_pre.Enabled = True End If Adodc1.Recordset.MoveNext If Adodc1.

27、Recordset.Fields(0) = lastId Then Cmd_next.Enabled = False End IfEnd SubPrivate Sub Cmd_pre_Click() If Cmd_next.Enabled = False Then Cmd_next.Enabled = True End If Adodc1.Recordset.MovePrevious If Adodc1.Recordset.Fields(0) = firstId Then Cmd_pre.Enabled = False End IfEnd SubPrivate Sub Cmd_quit_Cli

28、ck() Unload MeEnd SubPrivate Sub Form_Load() Adodc1.RecordSource = SELECT * FROM Car Adodc1.Refresh If Adodc1.Recordset.RecordCount 0 Then Adodc1.Recordset.MoveLast lastId = Adodc1.Recordset.Fields(0) Adodc1.Recordset.MoveFirst firstId = Adodc1.Recordset.Fields(0) End If Cmd_pre.Enabled = False If A

29、dodc1.Recordset.RecordCount = 1 Then Cmd_next.Enabled = False End IfEnd Sub修改/删除员工和客户信息的程序与之类似。按照姓名查询员工信息的命令如下:Private Sub Cmd_que_Click() If Option1 = True Then If txtEmpname.Text Then Adodc1.RecordSource = select * from Staff where Staff_name = + Trim(txtEmpname.Text) + Adodc1.Refresh End If End I

30、fEnd subPrivate Sub Option1_Click() txtdate.Text = txtdate.Enabled = False txtdepart.Text = txtdepart.Enabled = False txttitle.Text = txttitle.Enabled = False txtEmpname.Enabled = TrueEnd Sub按照时间或部门查询的程序与之类似。查询汽车和客户信息的程序雷同。附录资料:不需要的可以自行删除 C语言曲线函数像素函数putpixel() 画像素点函数 getpixel()返回像素色函数 直线和线型函数line()

31、画线函数 lineto() 画线函数 linerel() 相对画线函数 setlinestyle() 设置线型函数 getlinesettings() 获取线型设置函数 setwritemode() 设置画线模式函数 多边形函数HYPERLINK /view/553113.htmrectangle() 画矩形函数 bar() 画条函数 bar3d() 画条块函数 drawpoly() 画多边形函数 圆、弧和曲线函数getaspectratio()获取纵横比函数 circle()画圆函数 arc() 画圆弧函数 ellipse()画HYPERLINK /view/36981.htm椭圆弧函数 f

32、illellipse() 画椭圆区函数 pieslice() 画扇区函数 sector() 画椭圆扇区函数 getarccoords()获取圆弧坐标函数 填充函数setfillstyle() 设置填充图样和颜色函数 setfillpattern() 设置用户图样函数 floodfill() 填充闭域函数 fillpoly() 填充多边形函数 getfillsettings() 获取填充设置函数 getfillpattern() 获取用户图样设置函数 图像函数imagesize() 图像存储大小函数 getimage() 保存图像函数 putimage() 输出图像函数 图形和图像函数对许多图形

33、HYPERLINK /view/330120.htm应用程序,直线和HYPERLINK /view/400.htm曲线是非常有用的。但对有些图形只能靠操作单个像素才能画出。当然如果没有画像素的功能,就无法操作直线和曲线的函数。而且通过大规模使用像素功能,整个图形就可以保存、写、擦除和与屏幕上的原有图形进行叠加。 (一) 像素函数putpixel() 画像素点函数功能: 函数putpixel() 在图形模式下屏幕上画一个像素点。 用法: 函数调用方式为void putpixel(int x,int y,int color); 说明: 参数x,y为像素点的坐标,color是该像素点的颜色,它可以是

34、颜色符号名,也可以是整型色彩值。 此函数相应的HYPERLINK /view/668911.htm头文件是graphics.h 返回值: 无 例: 在屏幕上(6,8)处画一个红色像素点: putpixel(6,8,RED); getpixel()返回像素色函数功能: 函数getpixel()返回像素点颜色值。 用法: 该函数调用方式为int getpixel(int x,int y); 说明: 参数x,y为像素点坐标。 函数的返回值可以不反映实际彩色值,这取决于HYPERLINK /view/1120949.htm调色板的设置情况(参见setpalette()函数)。 这个函数相应的头文件为g

35、raphics.h 返回值: 返回一个像素点色彩值。 例: 把屏幕上(8,6)点的像素颜色值赋给变量color。 color=getpixel(8,6); (二) 直线和线型函数有三个画直线的函数,即line(),lineto(),linerel()。这些直线使用整型坐标,并相对于当前图形视口,但不一定受视口限制,如果视口裁剪标志clip为真,那么直线将受到视口边缘截断;如果clip为假,即使终点坐标或新的当前位置在图形视口或屏幕极限之外,直线截断到屏幕极限。 有两种线宽及几种线型可供选择,也可以自己定义线图样。下面分别介绍直线和线型函数。 line() 画线函数功能: 函数line()使用当

36、前绘图色、线型及线宽,在给定的两点间画一直线。 用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy); 说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。 此函数相应的头文件为graphics.h 返回值: 无 例: 见函数60.linerel()中的实例。 lineto() 画线函数功能: 函数lineto()使用当前绘图色、线型及线宽,从当前位置画一直线到指定位置。 用法: 此函数调用方式为void lineto(int x,i

37、nt y); 说明: 参数x,y为指定点的坐标,函数调用后,当前位置改变到指定点(x,y)。 该函数对应的头文件为graphics.h 返回值: 无 例: 见函数60.linerel()中的实例。 linerel() 相对画线函数功能: 函数linerel() 使用当前绘图色、线型及线宽,从当前位置开始,按指定的水平和垂直偏移距离画一直线。 用法: 这个函数调用方式为void linerel(int dx,int dy); 说明: 参数dx,dy分别是水平偏移距离和垂直偏移距离。 函数调用后,当前位置变为增加偏移距离后的位置,例如,原来的位置是(8,6),调用函数linerel(10,18)后

38、,当前位置为(18,24)。 返回值:无 例: 下面的程序为画线函数调用实例: #i nclude void main() int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,); setcolor(15); line(66,66,88,88); lineto(100,100); linerel(36,64); getch(); restorecrtmode(); setlinestyle() 设置线型函数功能: setlinestyle() 为画线函数设置当前线型,包括线型、线图样和线宽。 用法: setlinest

39、yle() 函数调用方式为void setlinestyle(int stly,unsigned pattern,int wigth); 说明: 参数style为线型取值,也可以用相应名称表示,如表1-10中所示。 参数pattern用于自定义线图样,它是16位(bit)字,只有当style=USERBIT_LINE(值为1)时,pattern的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显示,因此,pattern=0 xFFFF,则画实线;pattern=0 x9999,则画每隔两个像素交替显示的虚线,如果要画长虚线,那么pattern的值可为0 xFF00和0 xF00F,

40、当style不为USERBIT_LINE值时,虽然pattern的值不起作用,但扔须为它提供一个值,一般取为0。 参数wigth用来设定线宽,其取值见表1-11,表中给出了两个值,即1和3,实际上,线宽取值为2也是可以接受的。 若用非法参数调用setlinestyle()函数,那么graphresult()会返回错误代码,并且当前线型继续有效。 Turbo C提供的线型与线宽定义在头文件graphics.h中,表1-10和1-11分别列出了参数的取值与含义。 表1-10 线型 名称取值含义SOLID_LINE0实线DOTTED_LINE1点线CENTER_LINE2中心线DASHED_LINE

41、3虚线USERBIT_LINE4用户自定义线型表1-11 线宽 名 称取 值说 明NORM_WIDTH(常宽)1一个像素宽(缺省值)THICK_WIDTH(加宽)3三个像素宽这个函数的头文件是graphics.h 返回值: 无 例: 下面的程序显示了BC中所提供的线型图样: #i nclude void main() int driver,mode;i; driver=DETECT; mode=0; initgraph(&driver,&mode,); for(i=0;i4;i+) setlinestyle(i,0,1); line(i*50,200,i*50+60,200) ; getch(

42、); restorecrtmode(); getlinesettings() 获取线型设置函数功能: 函数getlinesettings() 用当前设置的线型、线图样和线宽填 写linesettingstype型结构。 用法: 函数调用方式为void getlinesettings(struct linesettingstype *info); 说明: 此函数调用执行后,当前的线型、线图样和线宽值被装入info指向的结构里,从而可从该结构中获得线型设置。 linesettingstype型结构定义如下: struct linesettingstype int linestyle; unsign

43、ed upattern; int thickness; ; 其中linestyle用于存放线型,线型值为表1-10中的各值之一。 upattern用为装入用户自定义线图样,这是16位字,每一位等于一个像素,如果哪个位被设置,那么该像素打开,否则关闭。 thickness为线宽值存放的变量,可参见表1-11。 getlinesettings()函数对应的头文件为graphics.h 返回值: 返回的线型设置存放在info指向的结构中。 例: 把当前线型的设置写入info结构: struct linesettingstype info; getlinesettings(&info); setwri

44、temode() 设置画线模式函数功能: 函数setwritemode() 设置画线模式 用法: 函数调用方式为 void setwritemode()(int mode); 说明: 参数mode只有两个取值0和1,若mode为0,则新画的线将覆盖屏幕上原有的图形,此为缺省画线输出模式。如果mode为1,那么新画的像素点与原有图形的像素点先进行异或(XOR)运算,然后输出到屏幕上,使用这种画线输出模式,第二次画同一图形时,将擦除该图形。调用setwritemode()设置的画线输出模式只影响函数line(),lineto(),linerel(),recangle()和drawpoly()。 s

45、etwritemode()函数对应的头文件是graphics.h 返回值: 无 例: 设置画线输出模式为0: setwritemode(0); (三)、多边形函数对多边形,无疑可用画直线函数来画出它,但直接提供画多边形的函数会给用户很大方便。最常见的多边形有矩形、矩形块(或称条形)、多边形和多边形块,我们还把长方形条块也放到这里一起考虑,虽然它不是多边形,但它的特例就是矩形(块)。下面直接介绍画多边形的函数。 rectangle() 画矩形函数功能: 函数rectangle() 用当前绘图色、线型及线宽,画一个给定左上角与右下角的矩形(正方形或长方形)。 用法: 此函数调用方式为void re

46、ctangle(int left,int top,int right,int bottom); 说明: 参数left,top是左上角点坐标,right,bottom是右下角点坐标。如果有一个以上角点不在当前图形视口内,且裁剪标志clip设置的是真(1),那么调用该函数后,只有在图形视口内的矩形部分才被画出。 这个函数对应的头文件为graphics.h 返回值: 无 例: 下面的程序画一些矩形实例: #i nclude void main() int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,); rectangle(

47、80,80,220,200); rectangle(140,99,180,300); rectangle(6,6,88,88); rectangle(168,72,260,360); getch(); restorecrtmode(); bar() 画条函数功能: 函数bar()用当前填充图样和填充色(注意不是给图色)画出一个指定上左上角与右下角的实心长条形(长方块或正方块),但没有四条边线)。 用法: bar()函数调用方式为void bar(int left,int top,int right,int bottom); 说明: 参数left,topright,bottom分别为左上角坐标与

48、右下角坐标,它们和调用函数rectangle()的情形相同,调用此函数前,可用setfillstyle()或setfillpattern()设置当前填充图样和填充色。 注意此函数只画没有边线的条形,如果要画有边线的的条形,可调用下面的函数bar3d()来画,并将深度参数设为0,同时topflag参数要设置为真,否则该条形无顶边线。 这 应的头文件为graphics.h 返回值: 无 例: 见函数bar3d()中的实例。 bar3d() 画条块函数功能: 函数bar3d() 使用当前绘图色、线型及线宽画出三维长方形条块,并用当前填充图样和填 充色填充该三维条块的表面。 用法: 此函数调用方式为v

49、oid bar3d(int left,int top,int right,int bottom,int depth,int topflag); 说明: 参数left,top,right,bottom分另为左上角与右下角坐标,这与bar()函数中的一样。参数depth为条块的深度,以像素为单位,通常按宽度的四分之一计算。深度方向通过屏显纵横比调节为约45度(即这时x/y比设置为1:1)。 参数topflag相当于一个HYPERLINK /view/46060.htm布尔参数,如果设置为1(真)那么条块上放一顶面;若设置为0(假),则三维条形就没有顶面,这样可使多个三维条形叠加在一起。 要使图形更

50、加美观,可利用函数floodfill()或setfillpattern()来选择填充图样和填充色(参见本小节(五)填充函数 )。 bar3d()函数对应的头文件为graphics.h 返回值: 无 例: 下面的程序画一个条形和条块: #i nclude void main() int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,); setfillstyle(SOLID-FILL,GREEN); bar(60,80,220,160); setfillstyle(SOLID-FILL,RED); bar3d(260,18

51、0,360,240,20,1); getch(); restorecrtmode(); drawpoly() 画多边形函数功能: 函数drawpoly() 用当前绘图色、线型及线宽,画一个给定若干点所定义的多边形。 用法: 此函数调用方式为void drawpoly(int pnumber,int *points); 说明: 参数pnumber为多边形的顶点数;参数points指向整型HYPERLINK /view/209670.htm数组,该数组中是多边形所有顶点(x,y)坐标值,即一系列整数对,x坐标值在前。显然整型数组的维数至少为顶点数的2倍,在定义了多边形所有顶点的数组polypoin

52、ts时,顶点数目可通过计算sizeof(polypoints)除以2倍的sizeof(int)得到,这里除以2倍的原因是每个顶点有两个整数坐标值。另外有一点要注意,画一个n个顶点的闭合图形,顶点数必须等于n+1,并且最后一点(第n+1)点坐标必须等于第一点的坐标。 drawpoly()函数对应的头文件为grpahics.h 返回值: 无 例: 下面的程序画一个封闭星形图与一个不封闭星形图: #i nclude void main() int driver,mode; static int polypoints118=100,100,110,120,100,130,120,125,140,140

53、,130,120, 140,110,120,115,100,100; static int polypoints218=180,100,210,120,200,130,220,125,240,140,230,120, 240,110,220,115,220,110; driver=DETECT; mode=0; initgraph(&driver,&mode,); drawpoly(9,polypoints1); drawpoly(9,polypoints2); getch(); restorecrtmode(); (四)、 圆、弧和曲线函数在一个屏幕上画得很圆的图形到另一个屏幕上可能被压扁或

54、拉长,这是因为每一种显示卡与之相应的显示模式都有一个纵横比。纵横比是指像素的水平方向大小与垂直方向大小的比值。如VGA显示卡由于偈素基本上是正方形,所以纵横比为1.000。 为了保证几何图形基本按预计情况显示在屏幕上,用屏显的纵横比来计算和纠正不同硬件及显示卡产生的畸变。计算纵横比所需要的水平方向和垂直方向的比例系数可调用函数getaspectratio()获得。 getaspectratio()获取纵横比函数功能: 函数getaspectratio()返回x方向和y方向的比例系数,用这两个整型值可计算某一特定屏显的纵横比。 用法: 此函数调用方式为void getaspectratio(in

55、t xasp,int yasp); 说明: 参数xasp指向的变量存放返回的x方向比例系数;参数yasp指向的变量存放返回的y方向比例系数。通常y方向比例系数为10 000, x方向比例系数不大于10 000(这是因为大多数屏幕像素高比宽长)。 注意纵横比自动用作下面函数arc(),circle()和pieslice()中的标尺因子,使屏幕上圆或弧正常显示。但用ellipse()函数画椭圆必须调用本函数获取纵横比作为标尺因子,否则不予调整。纵横比可用于其它几何图形,目的是校正和显示图形。 getaspectratio()函数对应的头文件为graphics.h 返回值: 返回x与y方向比例系数分

56、别存放在xasp和yasp所指向的变量中。 例: 下面的程序显示纵横比: int xasp,yasp; float aspectratio; getaspectratio(&xasp,&yasp); aspectratio=xasp/yasp; printf(aspect ratio: %f,aspectratio); circle()画圆函数功能: 函数circle()使用当前绘图色并以实线画一个完整的圆。 用法:该函数调用方式为void circle(int x,int y,int radius); 说明: 参数x,y为圆心坐标,radius为圆半径,用像素个素表示。注意,调用circle

57、()函数画圆时不用当前线型。 不同于ellipse()函数,只用单个半径radius参数调用circle()函数,故屏显纵横比可以自动调节,以产生正确的显示图。 此函数对应的头文件为graphics.h 返回值: 无 例: 画六个同心圆,圆心在(100,100)。 #i nclude void main() int driver,mode; driver=DETECT; mode=0; initgraph(&driver,&mode,); circle(100,100,10); circle(100,100,20); circle(100,100,30); circle(100,100,40)

58、; circle(100,100,50); circle(100,100,60); getch(); restorecrtmode(); arc() 画圆弧函数功能: 函数arc()使用当前绘图色并以实线画一圆弧。 用法: 函数调用方式为void arc(int x,int y,int startangle,int endangle,int radius); 说明: 参数x,y为圆心坐标,startangle与endangle分别为起始角与终止角,radius为半径。圆心坐标和半径以像素个数给出,起始角和终止角以度为单位,0度位于右边,90度位于顶部,180度位于左边,底部是270度。同往常一

59、样,360度与0度重合。角度按逆时针方向增加,但并不要求终止角一定比起始角大。例如指定300度和90度分别为起始角和终止角,与指定300度和450度分别为起始角和终止角可画出相同的弧。大于360度可作为参数,它将被化到0度360度范围里。函数arc()能画封闭圆,只要取起始角为0度,终止角为360度即可。此函数中,屏显纵横比可自动调节。 arc()函数对应的头文件为graphics.h 返回值: 无 例: 以(200,200)为圆心,100为半径,从0度到120度画圆弧: #i ncludegraphics.h void main() int driver,mode; driver=DETEC

60、T; mode=0; initgraph(&driver,&mode,); setcolor(WHITE); arc(200,200,0,120,100); getch(); restorecrtmode(); graphics.h头文件的内容:/* graphics.h Definitions for Graphics Package. Copyright (c) Borland International 1987,1988 All Rights Reserved. */ #if _STDC_ #define _Cdecl #else #define _Cdecl cdecl #endif

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论