使用说明书
课程名称:Visual FoxPro课程设计 指导教师:吕洪柱 设 计 者:刘俊刚
马明亮 吴桂媛
班 级:信科071 设计时间:2008.10
一 前言
随着社会经济发展,社会的信息化程度越来越高,学校在信息化的过程中担任了很重要的角色,其信息化发展也较快。本人开发的系统用来管理学生选棵成绩的各种信息数据。
学生每年都要有必修课和选修课,成绩登记,查询都比较麻烦,而每年都需要学校花费很多时间来管理学生的选课成绩,造成了很多不方便。 开发意义:
开发这个系统是为了更方便的查询,修改,添加学生选课的各种数据,便于统一管
1
理。同时也有利于节省时间和人力,方便学校管理! 二 分工情况
组长:刘俊刚
组员:马明亮、吴桂媛 分工情况:
刘俊刚:说明书的编写,修改的制作、查询的设置,报表的建立
马明亮:数据库、表的建立,登陆、警告、退出表单的建立以及整体的连接 吴桂媛:信息显示表单、以及顶层表单的制作
三 需求分析:
1用户需求:系统现状,要解决的主要问题,达到的具体指标等。 用户需求分析阶段的首要任务就是要明确数据库应用系统的开发目的。
象一般的应用系统一样,数据库应用系统的目的一般首先由拥护提出,也可以由数据库应用系统开发者拟定。学生选课成绩管理系统的目标是建立一个选课成绩计算机管理系统,以取代人工管理的大部分事务,开发的目的如下:
(1) 能对学生选课成绩的有关数据进行输入、修改、查询; (2) 打印学生选课成绩报表; (3) 对学生选课成绩进行统计; (4) 打印学生成绩。
2业务流程分析:描述系统的业务流程,画出规范的业务流程图。
2
系统登陆
输入密码 退出系统 密码正确,进入系统 密码错误, 请重新输入 进入系统选项主页 查询 修改 添加 统计 打印 退出系统
3 信息需求分析
资料收集:业务流程中用到的相关单据票证帐簿报表报告等资料,画出格式,最好是
填有具体内容的表格等。
学生选课成绩管理的要求主要是:能够很好地系统地知道学生选课成绩情况,包括学
生基本信息、老师基本信息、课程基本信息等。
事项分析:分析资料中标题、表头等中各栏目名,列出所有事项,作为数据项;分析这些数据项,找出组合项、导出项、非结构化数据项,确定基本项。检查是否有要补充的基本数据项,是否有要改进的地方,补充改进之,得出所有基本项。
从数据分析中可知,在学生选课成绩管理中,应在实际运行时有以下重要的反映成绩内容、效果、进程的参数: (1) 学生基本信息 (2) 老师基本信息 (3) 学生选课成绩信息 (4) 对选课成绩进行统计
3
(5) 学生与成绩
我们通过对这些数据需求的分析,应该找出需要用信息数据来表达的内容及其方式,还要找出相互之间的关系,在这种复杂的关系中进行有关主题的提炼,用这些既独立又相互关联的主题以及每一个主题所表达的,有单一信息价值内涵的数据项集合及其处理方式,来构造一个数据库系统框架结构。
通过数据需求的调研应归纳出与系统相关的数据。对这些数据进行分析、归纳,从中找 出“规律”,提炼主题并排除冗余数据。
功能需求分析:改进完善业务流程图,分析用户需要系统完成哪些任务,逐层分解,画出功能层次图。
功能分析是要在设计过程中明确完成设计后的“学生选课成绩管理系统”所能具备的功能。 学生选课成绩管理系统的功能模块划分图为:
学生选课成绩管理 文件 表 打印 关于 添 加 修 改 退 出 查 询 统 计 报 表 输 出 打 印 机 输 出
四 (数据库)概念(模型)设计
确定实体、联系及其属性,并确定主实体的主标识,画出ERD(不少于两个主实体,一个从实体,一个联系和24个属性);检查改正错误;对其中复杂的多元联系进行分析,必要则改进。 概念模型有以下几个主要特点:
(1) 能充分反映实际应用中的实体及其相互之间的联系,是现实世界的一个真实模型。 (2) 由于概念模型独立于具体的计算机系统和具体的数据库管理系统,因此,便于用户理解,有利于用户积极参与设计工作。
(3) 概念模型容易修改。当问题有变化时,反映实际问题的概念模型可以很方便地扩充和修
改。
(4) 便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关
4
系模型、网状模型和层次模型等各种模型转换。
概念结构设计要借助于某种方便又直观的描述工具,E-R(实体-联系,Entity-Relationship)图是设计概念模型的有力工具。在E-R图中,用三种图框分别表示实体、属性和实体之间的联系,其规定如下:
用矩形框表示实体,框内标明实体名;
用椭圆形框表示实体的属性,框内标明属性名; 用菱形框表示实体间的联系,框内标明联系名;
实体与其属性之间以无向边联接,菱形框与相关实体之间也用无向边联接,并在无向边旁标明联系的类型。
姓名 学号 性别 出生日期 学 生 从属 课程代码 班级编号 专业 班级 学制 年级 教师代码 系代码 类型 教师 授课 课程名称 类别 选修 班级编号 课程 教师代码 姓名 性别 籍贯 备注 技术职务 出生日期
五 数据库物理设计与数据库保护设计
在完成了数据库的逻辑结构设计以后,则要进行物理结构的设计。物理结构设计的任务就是为逻辑结构设计阶段所得到的逻辑数据模型选择一个最适合应用环境的物理结构。
物理结构的设计依赖于具体的计算机系统,它是一个反复进行的过程。首先要针对具体的数据库管理系统和设备的特性,确定实现所设计的逻辑数据模型必须采取的存储结构和存取方法;然后对该存储模式进行性能评价,若评价结果满足原设计要求则进入设计实施阶段,否就要修改设计,经过多次反复,直到取得满意的结果为止。
下面对物理结构设计的内容和要求作简单介绍。
(1) 物理结构设计的准备工作
为了有效地进行物理结构设计,设计人员必须对特定的数据库管理系统和设备特性有一个充分的了解。
要充分了解和掌握所用的数据库管理系统的性能和特点,包括数据库管理系统的功能,
5
提供的物理环境、存储结构、存取方法和可利用的工具等,同时对它们的优缺点要心中有数。通常,数据库管理系统提供了一种以上的存储结构和存取方法,只有对它们的特点、适用范围等有充分的了解,才有可能针对用户的应用要求选择最合适的存储结构和存取方法。
要十分熟悉存放数据的外存设备的特性。例如,要清楚地知道物理存储区的划分原则、物理块大小、设备的I/O特性等。
要了解并熟悉应用要求。掌握系统中各个应用之间的关系,分清主次,对不同应用按照对组织的重要程度和使用方式进行分类。了解各个应用的处理频率和响应时间要求,对时间和空间效率的平衡是非常重要的。在物理结构设计中,要考虑数据的存取和数据的处理两个方面,必须要处理时间和空间这对矛盾,充分了解和掌握各种应用的情况,以便作出最优处理。 (2) 物理结构设计的内容
确定数据的存储结构
在确定数据的存储结构时,主要是在存取时间、存储空间的利用率和结构维护三个方面进行折中考虑。通常,数据库管理系统提供了多种存储结构,因此,设计者可以根据各个应用的特点和要求从所提供的存储结构中进行选择。
选择存取路径
数据库的根本特点是数据的共享,因此,对同一数据的存储要提供多种存取路径。存取路径直接影响数据存取的效率。在进行物理结构设计时要确定建立哪些路径,而路径的选择主要是考虑索引的选择和文件之间的联系两个问题。例如,要对建立多少个索引、在哪些数据上建立索引、文件之间的联系如何实现等作出选择。选择的原则是既有较高的检索效率,又使花费的代价最小。
确定数据存放的位置
数据的存放位置对系统性能也有直接影响。为了提高系统的效率,要根据应用情况对数据进行分组,按存取频率和存取速度的不同,分别存放在不同的存储设备上,以满足存取要求。同时,对一个文件内的数据也可以进行“分解”,根据各数据的存取频率不同,可以对文件进行“垂直分解”,把经常存取的数据放在一起,可以提高存取效率。根据各记录的存取频率不同,可以对文件进行“水平分解”,把经常使用的记录或要顺序存取的记录分为一组,并存放在一起,这样可以提高系统的存取效率。
确定存储分配
根据应用和数据库管理系统所提供的存储分配参数,确定块大小、缓冲区的大小和个数、溢出空间的大小等,以便使存取时间和存储空间的分配尽量达到最优。
设计索引:在表(文件)的具体结构关系框架下补充字段索引行或在框架外补充索引说明,指出索引字段或索引表达式、索引类型。
设计表间关系:列出父表与子表的关联索引,指出要建立的表间关系的类型。
完整性设计:列出主要字段完整性的字段名、完整性约束条件;列出记录完整性约束及其约束条件;列出参照完整性表。
在有多个用户操作时,考虑用户授权与安全性控制。
六 数据分析:
数据库及其表结构的建立:建立数据库描述文件(.DBC)及其数据库表(.DBF),注意完整性、索引与永久关联的实现,并附打印出的作为系统命令执行结果的数据库表结构及其关联图、参照完整性表。
1、课程表 字段名
字段类型 字段长度 是否可以为空 备注 6
课程代码 字符型 5 否 索引 课程名称 字符型 14 否 索引 类别 字符型 4 否 教师代码 字符型 4 否 2分数表 字段名 字段类型 字段长度 是否可以为空 备注 学号 字符型 6 否 索引 课程代码 字符型 5 否 索引 成绩 数值型 4 否 3班级表
字段名 字段类字段长是否可以为备注 型 度 空 班级编号 字符型 4 否 年级 字符型 2 否 关键字 专业 字符型 10 否 系代码 字符型 1 否 学制 字符型 1 否 类型 字符型 4 否 4学生表
字段名 字段类字段长是否可以为备注 型 度 空 学号 字符型 6 否 姓名 字符型 8 否 关键字 性别 字符型 2 否 出生日期 日期型 8 否 班级编号 字符型 4 否 类型 字符型 4 否 5教师表
字段名 字段类字段长是否可以为备注 型 度 空 教师代码 字符型 4 否 姓名 字符型 8 否 关键字 性别 字符型 2 否
7
出生日期 籍贯 技术职务 备注 日期型 字符型 字符型 备注型 8 6 10 4 否 否 否 否
数据输入:实现5.2.1中的输入程序后,用这些输入程序或系统的追加插入命令录入数据,并打印出用VFP命令列出的各表的内容。
8
9
七 设计实施:
模块实现:用视窗菜单和/或程序编辑器实现各模块,建议参考教材[2]采用菜单与多表单技术,调试正确后打印实现的系统输出结果。建议先实现输入模块,再实现其他子模块,然后实现主控模块。最好建立项目,用项目管理器来管理整个系统。打印出实现结果(表单、源程序)。写出实现的经过与体会。 主程序 clear all close all set talk off
set status bar on set sysmenu off
_screen.autocenter=.T. clear all do 欢迎.mpr do form 欢迎.scx read events
项目管理器:
10
登陆页面:
11
主页面:
经过与体会:
经过一个学期对visual foxpro 的理论知识和上机操作的学习,我从大一时学的 visual basic 仅有的编程知识到现在的 visual foxpro ,我开始对编程有了较为深刻的理解,虽说不上精通,但对编程方面的语言也有所提高,刚开始学的时候,觉得很难,根本无法入手,觉得很难理解,很抽象,但经过这次的综合实验后,我设计了一个学生选课成绩管理系统,从不熟悉的编程,到看着书慢慢的理解,不会就请教同学和一些朋友,有时还会展开一番讨论,都现在自己做出一个程序系统,很有满足感,也很有成功的感觉,虽然系统不是很完美,但经过自己亲手做出来后,自己认为已经很成功了。
从刚开始的不熟悉,到完成一个完整的系统,其过程有些艰辛,要知道,一个人从理论到实践的过程,先要对理论比较熟悉,有很深的理解,到了实践才不至于措手不及,经过这次的综合实验设计中,我更深的了解到理论是要回归到实践的,这样的理论在人脑中才会来得比较深刻。 从设计综合实验过程中,有时遇到一些程序出现错误,每出现一次错误,自己都要找资料看下为什么出错了,要找出错的原因,这样才可以继续往下做,否则就卡在那儿做不下。一步一个脚印,前脚迈出去了,后脚才可以前进,做 visual foxpro 程序就是这样。
visual foxpro 是个易学难精的课程,也是很考我们细心及耐心的课程,我们不但要学它,而且要利用它为我们带来方便。
八 用户使用说明:
写出系统操作使用的简要说明。 (1)打开学生选课成绩管理系统
(2)进入主页面,输入密码123,按“确定”进入主页面 (3)在菜单中选择相应的业务
运行系统并打印出运行结果(至少有两个查询结果和两个报表输出结果)。
12
13
其中两个报表:
14
九 结束语
本系统适用于各种小型的超市,有利于管理和发展。系统制作过程中遇到了很多的问题,如表单与表单之间的连接、表单与菜单之间的连接、表单与报表之间的连接、查询的运行过程总是打不开表
在本次课程设计中,使我的耐性有所增长,也让我看到了同学们之间的互相帮助与友爱,形成一股整体的趋势,我学会了忍耐,看到自己胜利的战果,我长长地舒了一口气,我完成了,那一瞬间,我很高兴,也明白了许多的道理。这为我以后的人生之路是否会走好打下了坚定的基础,以致于在以后的求取过程中少走些弯路,也不致于因一些小挫折而迷失了自己的方向。 课程设计教会我很多的东西,平时不注意的细节,在课程设计中都有所注意,平时没看懂的东西,基本上都能看懂了。同学们之间的友谊也更进了一步。特别是在做课程设计时,同学们表现出来的那股热情,那种勤奋,是从来没有过的,课程设计后,我们发现我们对这门课程探索欲愈来愈深,因为它使我们产生了许多的疑惑,虽然书上讲了许多理论知识,但是对于这门学科光有理论而没有实践是不行的。总之,对于这次课程设计的学习,命名 我受益匪浅。我发现对于这门学科人愈喜爱了,对知识的渴求愈来愈强烈。虽然这次考试我考的不是太好,但是我们有信心在今后的学习中我们一定会学的更好!
十 程序代码
一、主程序.prg set talk off
set sysmenu off
15
set century on
set date to ymd close all clear all
set default to
open data 超市经营管理.dbc excl _screen.caption=\"超市管理\" zoom windows screen max do form 登录 read events 二、清单 1、登陆.scx:
文本框Text2Passwordcha属性为”*” “确定”命令按扭的代码为: i=i+1 if i<=3
if thisform .text2.value=\"19880118\" messagebox(\"欢迎使用本系统!\") thisform.release
else
messagebox(\"密码输入错误,再输入一次!hisform.text2.value=\"\" thisform.text2.setfocus endif else
messagebox(\"你无权使用本系统!\") thisform.release endif
do form 表单封面 thisform.release
“退出”按扭的代码为:
thisform.release 2、信息显示界面
表单Caption的属性为“商品列表“ “首记录“命令按钮的代码是 go top
thisform.command2.enabled=.f. thisform.command3.enabled=.t. thisform.command4.enabled=.t. thisform.refresh
“上一条“的 命令代码为 skip -1 if bof() go top endif
16
thisform.command1.enabled=.t. thisform.command2.enabled=.t. thisform.command3.enabled=.t. thisform.command4.enabled=.t. thisform.refresh
“下一条“的命令代码为 skip if eof() go top endif
thisform.command1.enabled=.t. thisform.command2.enabled=.t. thisform.command3.enabled=.t. thisform.command4.enabled=.t. thisform.refresh
末记录的命令代码为 go bottom
thisform.command1.enabled=.t. thisform.command2.enabled=.t. thisform.command3.enabled=.f. thisform.command4.enabled=.t. thisform.refresh
“关闭“的命令代码为
thisform.release 表单“采购列表”“库存列表”的属性与命令代码同“商品列表” 4、信息查询界面 查询的命令代码为
local tt
tt=alltrim(thisform.combo1.value)
select 商品编号,商品名称,商品条码,规格型号 from 商品列表 where 商品编号=tt into cursor rr select 商品编号,库存量,销售总量,成本均价,库存总价 from 当前库存 where 商品编号=tt into cursor ii
thisform.pageframe1.page1.grid1.recordsource=\"rr\" thisform.pageframe1.page2.grid1.recordsource=\"ii\" 查询的“退出”命令按钮 thisform.release
5、信息修改
命令按钮1“修改“命令的代码为 thisform.grid1.column1.text1.enabled=.T. thisform.grid1.column2.text1.enabled=.T. thisform.grid1.column1.text1.setfocus 命令代码2“修改确定”的代码为 thisform.grid1.column1.text1.enabled=.F. thisform.grid1.column2.text1.enabled=.F. 命令按钮3“添加”的代码为
17
append blank
go bottom
thisform.grid1.column1.text1.enabled=.T. thisform.grid1.column2.text1.enabled=.T. thisform.grid1.column1.text1.setfocus 命令按钮4“退出”的代码为 thisform.release 6、警告表单
“确定按钮”的命令代码为 do form 系统退出.scx “取消”按钮的命令代码为 thisform.release 7、系统退出
退出按钮的命令代码为 Quit
Form1的Activate代码为
thisform.label1.caption=\"谢 谢 使 用\" thisform.label1.autosize=.T. thisform.label1.fontsize=72
thisform.command1.CAPTION=\"退出\" thisform.timer.interval=1000 timer1的timer代码为
if thisform.label1.left>-200
thisform.label1.left=thisform.label1.left-1 a=thisform.label1.left
if int(a/2)=a/2
thisform.command1.forecolor=rgb(0,0,0) thisform.label1.forecolor=rgb(128,255,0) thisform.label1.top=thisform.label1.top-10 else
thisform.command1.forecolor=rgb(255,255,255) thisform.label1.forecolor=rgb(122,255,255) thisform.label1.top=thisform.label1.top+10 endif
else
thisform.label1.left=900 endif
十一、参考文献: 1、《Visual FoxPro 6.0数据库与程序设计》,卢湘鸿编著,电子工业出版社2、《Visual FoxPro程序设计方法》,邓文新编著,中国铁道出版社 3、《Visual FoxPro 及其应用系统开发》史济民主编,清华大学出版社
18
因篇幅问题不能全部显示,请点此查看更多更全内容