1、学生综合测评系统开发实例 作者: 日期:2 个人收集整理 勿做商业用途第14章 学生考评管理系统开发实例214。1 系统分析214。1.1 项目背景分析214。1.2 业务流程分析314。1。3 功能需求分析414.2 系统总体设计514.2.1 功能结构设计514。2.2 数据库设计614。2.3系统主体框架设计1014.3 主要功能模块的设计与实现1514。3.1 学生信息管理1514。3.2 综合考评管理1914.3。3 打印输出设计2214.3.4 系统维护2814。4 应用程序的发布3014.4。1 系统测试3014。4。2 系统调试3214.4。3 应用项目的连编3214。5 本章
2、小结34第14章 学生考评管理系统开发实例传统的高校学生综合测评在纸质的基础上,手工操作完成各种数据的分析、计算和统计,不仅浪费了大量的人力物力资源,而且由于人工管理存在着许多不可控因素,导致学生综合测评操作不规范,测评结果不全面,不能客观准确地反映学生的综合素质。本章介绍了高校学生综合测评系统的分析与设计过程,给出了系统设计的技术方案、框架体系,以及实现的关键技术与部分源代码。教学目标:l 了解软件工程基本方法和软件开发流程l 了解数据库设计的基本方法l 掌握基于VFP的信息系统的开发过程14.1 系统分析14。1.1 项目背景分析1学生综合测评的现状分析在素质教育评价过程中,学生综合测评是
3、高校普遍采用的评价手段。对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评优评奖和推荐就业提供依据,实现学生教育管理工作的标准化、制度化和科学化,引导和促进学生德、智、体、能全面协调发展,培养适应社会经济发展需要,具有创新精神和实践能力的专门人才.目前,我国的普通高校学生综合测评大多还停留在纸质的基础上,许多工作还停留在传统的手工操作.不仅浪费了大量的人力物力资源,而且由于人工管理存在着许多不可控因素,导致学生综合测评操作不规范,测评结果不全面,不能客观准确地反映学生的综合素质。因此,建立一套基于网络环境的技术先进、高效稳定、安全可靠的学生综合测评系统势在必行. 2学生综合测评系统的
4、开发意义与传统的手工管理相比,计算机管理不但能发挥计算机方便、快捷的功能,而且可以大量节省了资源、费用等,更方便灵活操作,而且方便管理,增加综合测评的公平性、透明性,有效防止综合测评的弊端,使学生综合测评更加合理、更趋于成熟。这些都能够极大地提高工作效率,特别是校园网应用发展迅速的今天,利用网络进行信息的查询、修改和发布已成为学校现代化管理的象征之一,也是学校科学化和正规化管理的重要条件。因此,开发一套比较成熟的学生综合测评系统很有必要.综合测评系统开发的目的是自动分析、计算、统计、管理学生综合测评数据,减少人工干预,降低计算失误,提高工作效率,将辅导员、班主任、班委从繁重的综合测评及日常管理
5、中解放出来,使学校的综合测评工作系统化、规范化、自动化。14.1.2 业务流程分析1业务流程结合传统的手工操作与管理信息系统的处理特点,综合素质测评按如下程序进行:(1) 个人总结。每位学生必须按照综合素质测评德、智、体、能四个方面的内容,认真填写学年个人总结,同时填写获得的各项奖励或参与的社会活动,作为班级综合素质测评小组可加分的原始依据。(2) 同学互评和班主任评议.班级综合素质测评小组组织全班同学对本班的每位同学进行品德、体育和能力互评。班主任对本班的每位同学进行思想品德评议。(3) 班级审议和评分。班级综合素质测评小组按照本条例的有关规定,审议每个同学填报的材料,由系统自动计算出德、智
6、、体、能的测评成绩,根据权重系数,合成该生本学年综合素质测评总分,排出全班名次。(4) 公布测评结果。班级综合素质测评小组经过审查核准后,将综合素质测评成绩向班级全体同学公布,听取广大同学意见。(5) 评优评奖。班级综合素质测评结果经学院综合测评小组审核以后,根据有关文件和规定评出各类奖项,与测评结果一并报学院分管领导审定。(6) 审批与备案。学院综合素质测评小组对各班的综合素质测评结果和评优结果进行审定,填写好有关表格及材料后由学院分管领导签署意见,加盖公章后上报学校审批,进行表彰和存档备案.(7) 班主任根据综合测评结果汇总学生信息、考试成绩、考评结果,编制输出报表,打印家庭报告书,寄往学
7、生家长,与学生家长联络。2数据流图本系统主要操作主体是管理员、班主任、学生和学生家长。管理员对采集的学生数据经过加工后存入学生信息文件中,把学生考试成绩存入课程成绩文件中。学生可以查询并维护自己的个人档案,同时参加综合考评,综合考评的结果存入综合考评文件中。管理员(班主任)汇总学生信息、考试成绩、考评结果,编制输出报表,打印家庭报告书,寄往学生家长。根据业务流程分析,信息管理部分的数据流图如图14-1所示.图141 数据流图14。1。3 功能需求分析学生综合测评系统可以及时、准确、公平地计算出学生的综合测评结果。利用计算机对学生综合素质进行测评具有手工测评无法实现的优点.例如:数据处理自动化、
8、管理规范、操作便捷、可靠性高等。学生综合测评系统的用户群可分为普通用户(学生)和管理员,系统功能定义根据两种不同的用户身份进行需求分析。1学生需求学生既是综合测评的对象,也是综合测评的主体.学生可以查询并维护自己的个人档案,同时参加其他同学的综合测评。学生对功能上的需求主要有:(1) 查询学校、学院、班级发布的种类消息和公告;(2) 查询课程信息和考试成绩;(3) 更新和维护自己的个人信息,查看其他同学的信息;(4) 填报自己的获奖情况和参与的社会活动;(5) 查询自己的测评结果和家庭报告书,查看本班测评结果统计信息。2管理员需求管理员按身份级别可分为班委(测评小组)、班主任、辅导员、系统管理
9、员四种级别。管理员除具备学生需求的功能外,按照不同身份还具备以下不同的权限。(1) 班委:学生个人信息的录入和修改,各学期课程信息的录入和修改,学生综合测评结果的统计和修改.操作权限范围是本班同学。(2) 班主任:班主任除了具备班委的权限外,还有综合评语的填写,学生家庭报告书的编制和打印。操作权限范围是本班同学。(3) 辅导员:辅导员除了具备班委的权限外,还要负责对学生奖惩情况的核实,相关数据的维护。操作权限范围是本学院全体学生。(4) 系统管理员:系统管理员负责系统的管理与维护,除具备上述所有功能外,管理员还负责数据备份与恢复、人员管理、权限设置等。14。2 系统总体设计14。2.1 功能结
10、构设计1系统功能描述基于上述需求分析,本系统主要完成以下功能:(1) 学生信息管理模块学生信息管理模块完成学生信息的管理功能,包括用户的登录、用户的退出、用户的个人信息录入、修改、查询、删除等(2) 课程信息管理模块课程信息管理模块主要是为系统管理员提供了课程管理功能,主要包括课程信息的录入、课程的增加、课程的修改、课程的删除等功能。(3) 成绩管理模块成绩管理模块主要实现学生成绩的管理功能,包括成绩的输入、成绩的查询、修改、删除等基本操作。(4) 综合考评数据管理综合考评数据管理模块主要实现了自动评语库的管理、自动生成评语、手工修改评语。(5) 家庭报告书打印模块家庭报告书打印模块主要是为了
11、方便班主任将家庭报告书邮寄给家长而设计的.(6) 系统维护系统维护主页完成数据备份与恢复,账号及权限的管理。为了确保信息安全,需要对重要数据进行备份,必要的时候再从备份的数据中恢复数据。系统管理员可以添加、修改或删除管理员账号,分配管理职责和权限。2系统功能结构图根据上面功能模块分析,系统功能结构图如图14-3所示。限于篇幅,本书只介绍信息管理、数据维护和报表输出三个功能模块.报表输出学生综合测评系统系统维护信息管理综合测评身份验证查询、删除、修改、添加、导入、导出学生信息考试成绩测评数据课程信息学生品行记实量化统计发展性素质计算基础性素质计算发展性素质量化统计学生品行表现测评评奖评优申请图1
12、43 系统功能结构图14。2.2 数据库设计通过对上述需求分析中的数据需求进行总结,综合测评管理系统主要有以下数据结构及其数据项:(1) 管理员:管理员编号、姓名、密码(2) 班级:班级代码、班级名称、学院名称、毕业时间(3) 职务:班级代码、管理员编号、职务、权限(4) 学生:学号、密码、姓名、班级代码、出生年月、籍贯、家庭住址、邮政编码、宿舍、照片、简历(5) 科目:科目编号、课程名称、学时、学分(6) 选课:学号、科目编号、学年、学期、成绩(7) 测评:学号、学年、名次、等级、奖惩情况、综合评语3数据库概念结构设计数据库概念结构设计通过对用户进行综合、归纳与抽象,形成一个独立与具体DBM
13、S的概念模型,既是整个数据库设计的关键,又是进行数据库逻辑结构设计的基础。在概念结构设计中主要采用实体联系(ER)图作为描述工具,将实际应用抽象为实体与实体之间的关系,生成数据库的整体概念结构设计模型。根据上面的实际规划出的实体有:用户信息实体、查询实体、课程实体、综合考评实体,课程成绩实体,家庭报告书实体。系统总体E-R图如图144所示。M学生测评结果选修定制课程N1N家庭报告书1M包含班级管理员NM管理包含1N图144 系统总体ER图4数据库逻辑结构设计数据库逻辑结构设计是指将数据库概念结构中抽象的ER图转换为特定DBMS所支持的数据模型的过程,通常是转换成关系模型。本设计中的DBMS采用
14、Visual FoxPro 9。0来实现,作为关系数据库,数据库逻辑结构设计体现在其中即为数据表.数据库中各表的结构设计结果如表14-1至表148所示.表14-1 管理员表(Admins)标题英文解释字段名字段属性说明管理员编号AdminIDAdIDC(5)主键姓名AdminNameAdNameC(8)密码PasswordPsword表142 班级表(classes)标题英文解释字段名字段属性说明班级代码ClassIDClsIDC(8)主键班级名称ClassNameClsNameC(50)学院名称SchoolNameSchNameC(50)毕业时间GraduateDate GdateD(8)表
15、143 职务表(Adclass)标题英文解释字段名字段属性说明班级代码ClassIDClsIDC(8)管理员编号AdminIDAdIDC(5)职务AdmindutyAddutyC(10)权限AdminPowerAdpowerN(1)表144 学生表 students标题英文解释字段名字段属性说明班级代号ClassIDClsIDC(8)学号*StudentIDSIDC(9)主键姓名StudentNameSNameC(8)性别SexSexC(2)是否党员PartMemberPmemberL(1)出生日期Birthdate/BirthdayBirthdayD(8)籍贯NativePlaceNativ
16、eC(14)家庭地址AddressAddressC(50)邮政编码PostCodePCodeC(6)照片PhotoPhotoG(4)简历StudentNoteSNoteM(4)表14-5 科目表(courses)标题英文解释字段名字段属性说明科目代码*CourseIDCIDC(8)主键科目名称CourseNameCNameC(30)学时PeriodPeriodN(3)学分CreditHourCreditN(5。2)表146 选课表(sc)标题英文解释字段名字段属性说明学号StudentIDSIDC(9)科目代码CourseIDCIDC(8)学年AcademicYearAYearC(9)学期Te
17、rmTermN(1)成绩Score/results Score1N(6)绩点Score/PointScore2N(3.1)表14-7 测评结果表(grade)标题英文解释字段名字段属性说明学号StudentIDSIDC(9)学年AcademicYearAYearC(9)名次Order/rankRankN(3)等级GradeGradeC(6)奖惩情况NoteNoteM(4)综合评语RemarkRemarkM(4)表148 自动评语表(Remarks)标题英文解释字段名字段属性说明编号RemarkIDRemIDN(3)主键主题TitleTitleC(50)综合评语RemarkRemarkM(4)5
18、数据库的实现分析设计好数据库的逻辑结构之后,通过VFP数据库设计器来完成数据库的设计工作,设置表间关联关系以及参照完整性,如图145所示。图14-5 数据库表及其关系图在查询或报表输出时,需要多个表联合查询。为方便数据处理,通过VFP的视图设计器把多个相关联的表组合后生成视图文件,视图作为数据库的虚表,使用方式和数据一样,这样就可以大大简化查询或报表输出的设计过程。以下是本系统需要的视图:(1) 学生成绩:班级代号、学年、学期、学号、姓名、课程代号、课程名称、成绩、学时、学分(2) 综合测评结果:学院代号、学院名称、班级代号、班级名称、学号、姓名、学年、评定等级、名次、奖惩情况、评语(3) 职
19、责管理:班级代号、班级名称、管理代号、管理员姓名、权限三个视图所涉及的查询代码为:(1) 学生成绩SELECT Students.clsid, Students.sid, Students.sname, Sc。ayear, Sc.term,; Sc。score1, Sc。score2, Sc。cid, Courses。cname, Courses。period, Courses。credit; FROM sdb!students INNER JOIN sdb!sc ; ON Students。sid = Sc.sid ; INNER JOIN sdb!courses ; ON Courses.
20、cid = Sc。cid; ORDER BY Students。clsid, Students。sid, Sc.ayear, Sc.term(2) 综合测评SELECT Students.sname, Grade。ayear, Classes。schname, Classes.clsid,; Classes.clsname, Grade.sid, Grade.rank, Grade。grade, Grade.note,; Grade.remark; FROM sdb!students ; INNER JOIN sdb!grade ; ON Students。sid = Grade。sid ;
21、INNER JOIN sdb!classes ; ON Classes.clsid = Students.clsid; WHERE Grade.ayear = ( 20082009” ); ORDER BY Students.clsid, Students.sid(3) 职责管理SELECT Admins.adid, Admins。adname, Adclass.adpower, Adclass.clsid, Classes.clsname; FROM sdb!admins ; INNER JOIN sdb!adclass ; ON Admins.adid = Adclass.adid ; I
22、NNER JOIN sdb!classes ; ON Classes。clsid = Adclass.clsid; ORDER BY Admins。adpower, Admins。adid以上视图可以在数据库中通过视图设计器实现,也可以在程序中通过上述查询语句实现。14.2.3系统主体框架设计1建立系统项目文件采用VFP开发应用系统,项目管理器是必不可少的文档管理工具.有关项目管理器的概念及操作请参阅本书第二章,在此不再介绍。本系统项目名称是SIM(学生信息管理系统),选择“D:SIM作为默认工作目录。并建立如图14-6所示的目录结构。图中文件夹Data、DataBack、ExcelFiles
23、、Images、 图146 系统目录结构图Temp Wizards分别用于存储系统数据、数据备份、导出的Excel文件、图像文件、向导文件。根据数据库表逻辑结构以及数据库表关联关系,在项目管理中实现数据库。详细操作请读者参阅图14-5以及本书第四章。2建立主程序文件一般地,对于VFP应用系统而言都有一个主程序文件.在SIM中,主程序作为系统默认的起始运行程序,用于对系统进行初始化,并调用登录表单,开起事件循环。在项目管理器中新建程序文件main.prg,其代码如下:CLEAR ALLSET DATE LONG & 设置日期为长格式(9999年99月99日)SET TALK OFFSET SAF
24、ETY OFF & 覆盖时不要确认application。Visible=.f。 & 隐藏VFP系统主窗口DO FORM Logon 运行登录表单READ EVENTS & 读取循环事件,否则程序不会驻留内存3主菜单设计主菜单出现在单文档界面(SDI)窗口中,在设计主菜单时,要把它创建为SDI菜单,打开菜单设计器,从View菜单中选择General Options,然后选择TopLevel Form.菜单栏包括档案管理、课程管理、成绩查询、综合测评、打印输出、系统维护、帮助、退出八个一级菜单,每个一级菜单包含若干菜单项,每个菜单项对应调用一个表单。不同的菜单项授予的访问权限不一样,其中班级档案
25、管理、课程信息维护以及系统维护的全部功能只能被系统管理员访问,对应的“跳过”表达式设置为Power_ID1。综合评语部分只能被系统管理员或班主任访问,所以“跳过”表达式设置为Power_ID3 or Power_ID=0主菜单menusim。mpr的结构如表4-9所示.表4-9 主菜单menusim。mpr的结构菜单栏菜单项命令“跳过”表达式档案管理(S)班级档案管理do form 11ClassManaPower_ID1学生档案管理do form 12StuMana学生信息浏览do form 13StuBrow课程管理(1成绩查询(T)班级成绩浏览do form 31ClassScore个人
26、成绩查询do form 32StuScore综合测评(3 or Power_ID=0综合测评管理do form 43StuGradePower_ID3 or Power_ID=0打印输出(P)学生名册do form 51StuList学生成绩单do form 52Score信封打印do form 53FamAddr家庭报告书do form 54FamData系统维护(1职责管理do form 62dutyPower_ID1-BAR#数据备份do form 63backupPower_ID1数据恢复do form 64RestorePower_ID1帮助(H)关于本系统do form about
27、退出(Q)退出系统quit4登录表单设计登录表单的主要功能是验证用户身份,获取用户权限.本系统用户权限根据不同的管理职责分为三个级别:班主任、辅导员、系统管理员。班主任只能管理本班学生的相关信息,辅导员可以管理本学院学生的相关信息,系统管理员可以管理全部学生的相关信息。经过用户身份验证通过后,根据用户权限生成对应的学生班级信息,产生一个临时文件,存放于Temp文件夹中。登录表单由三个标签、两个文本框、两个命令按钮和两个线条控件组成。表单运行效果如果图14-7所示。图147 登录表单运行效果图表单初始化过程中,需要定义三个变量,用于存储用户登录次数、用户ID和管理权限,表单Init过程的代码如下
28、:PUBLIC LogonTimes,User_ID,Power_IDLogonTimes=0命令按钮【确定】的Click事件代码如下:SET EXACT ON &改为精确比较LogonTimes=LogonTimes+1 &将登录次数加1 SELECT Adminsmps=THISFORM。txt密码。VALUEmpswd=pswd(mps) &调用自定义函数转换密码LOCATE FOR ALLTRIM(AdID)=THISFORM.txt帐号。VALUE &查找帐号IF FOUND() AND ALLTRIM(PsWord)=mpswd &如果找到并且密码相同 User_ID=ALLTRI
29、M(THISFORM.TXT帐号.VALUE) &将登录帐号值赋给全局变量User_ID Power_ID=AdPower SET EXACT OFF &改为模糊比较 PUBLIC Class_ID,Class_Name,Sch_Name & 定义班级相关的三个公用变量 SELECT AdClass SET ORDER TO ADPOWER & 选择索引顺序为ADPOWER(权限) LOCATE FOR AdID=User_ID IF NOT EOF() Class_ID=ClsID Power_ID=AdPower ELSE Class_ID=No duty * Power_ID=Defau
30、lt AdPower & 默认的权限在登录时确定 ENDIF SET SAFETY OFF DO CASE CASE Power_ID=1 如果是管理员,查询全部学生 SELECT * FROM Classes ORDER BY ClsID INTO TABLE TempCur_Class CASE Power_ID=2 & 如果是辅导员,查询属于自己管理的学院的全部学生 SELECT FROM Classes WHERE LEFT(ClsID,2)=LEFT(Class_ID,2); ORDER BY ClsID INTO TABLE TempCur_Class CASE Power_ID=
31、3 如果是班主任或班长,查询属于自己管理的班级的学生 SELECT * FROM Classes WHERE ClsID=Class_ID ;ORDER BY ClsID INTO TABLE TempCur_Class ENDCASE SELECT Cur_Class & 查询生成的表默认打开,并设置为当前工作区 GO TOP Class_ID=Cur_Class.ClsID Class_Name=Cur_Class。ClsName Sch_Name=Cur_Class.SchName DO FORM Main THISFORM。RELEASEELSE &如果帐号和密码不对 IF Logon
32、Times3 &如果次数小于3次 MESSAGEBOX(帐号或密码错误!,48,”警告窗口”) &弹出错误窗口 THISFORM。txt帐号.VALUE=” &清空帐号和密码栏 THISFORM.txt密码。VALUE=” THISFORM。txt帐号.SETFOCUS ELSE &如果次数已到3次 MESSAGEBOX(系统无法启动 ,48,”警告窗口) CLEAR ALL THISFORM。RELEASE ENDIFENDIF命令按钮【取消】的Click事件代码如下:YN=MESSAGEBOX(”放弃登录,确定退出系统? ”,4+32,”信息窗口)IF YN=6 CLOSE ALL SET
33、 SAFETY ON & 覆盖时要确认 SET STAT BAR ON & 将状态栏打开 SET SYSMENU ON & 打开VFP系统菜单之区域(Band) SET SYSMENU TO DEFAULT & 打开系统菜单 SET DATE LONG & 设置日期为长日期格式(9999年99月99日) THISFORM。RELEASEENDIF登录系统或进行账号维护时,需要多次使用密码转换程序,本系统采用字符映射简单加密算法进行明码与密码的转换。密码转换程序pswd。prg代码如下:FUNCTION pswdPARAMETERS mpsmps=ALLTRIM(mps)mpswd=”FOR i
34、=1 TO LEN(mps) mpswd=mpswd+CHR(ASC(SUBSTR(mps,i,1)+131-3i) & 密码转换ENDFOR RETURN MPSWDENDFUNC5主表单设计主表单是系统的主窗口,包含系统菜单,用于选择班级的下拉组合框。主表单运行效果如果图148所示。系统菜单通过主表单初始化过程加裁,表单Init过程的代码如下:*frmmain.Init*DO menuSIM。mpr WITH THIS, 。T。图148 主表单运行效果图对于系统管理员或辅导员,通常管理多个班级,为了方便在班级之间进行切换,采用下拉组合框实现选择班级。在下拉组合框的Init过程中完成被管理班
35、级的数据初始化,并生成该班的成绩数据表,其代码如下:IF USED(Cur_CLass”) SELECT Cur_ClassELSE USE Cur_Class IN 0ENDIF this.Value=Class_Name 通过查询生成本班成绩单SELECT Students.clsid, Students.sid, Students。sname, Sc.ayear, Sc。term,; Sc.score1, Sc.score2, Sc.cid, Courses。cname , Courses。period, Courses。credit; FROM sdb!students INNER J
36、OIN sdb!sc ON Students.sid = Sc.sid ; INNER JOIN sdb!courses ON Courses。cid = Sc。cid; WHERE ClsID=Class_ID; ORDER BY Students。clsid, Students。sid,Sc.ayear, Sc.term; INTO TABLE TempStu_ScoresINDEX on SID TAG SID & 对建生成的表建立学号索引 SELECT studentsSET FILTER TO ClsID=Class_ID & 设置过滤器GO top在下拉组合框的InterActiv
37、eChange过程中完成被管理班级的数据初始化,并生成该班的成绩数据表,其代码如下:Class_ID=Cur_Class。ClsIDClass_Name=Cur_Class。ClsNameSch_Name=Cur_Class。SchName* 通过查询生成本班成绩单SELECT Students.clsid, Students.sid, Students。sname, Sc.ayear, Sc.term,; Sc。score1, Sc.score2, Sc.cid, Came , Courses。period, Courses.credit; FROM sdb!students INNER J
38、OIN sdb!sc ON Students。sid = Sc。sid ; INNER JOIN sdb!courses ON Courses。cid = Sc.cid; WHERE ClsID=Class_ID; ORDER BY Students。clsid, Students。sid,Sc。ayear, Sc。term; INTO TABLE TempStu_ScoresINDEX on SID TAG SIDSELECT studentsSET FILTER TO ClsID=Class_ID & 设置过滤器GO top14。3 主要功能模块的设计与实现14。3.1 学生信息管理1定义
39、指针移动类指针移动功能在很多表单中都要用到,所以在进行主要功能模块设计之前先把指针移动命令按钮组定义为类,这样就可以在不同的表单中直接调用,从而实现代码复用。指针移动类的设计如图149所示。图14-9指针移动类设计效果图指针移动类的InterActiveChange事件代码如下:DO CASE CASE this。value=1 GO TOP CASE this.value=2 and NOT BOF() SKIP -1CASE this.value=3 and NOT EOF() SKIP 1CASE this.value=4 GO BOTTOM CASE this。value=5 this
40、form.Release & 用此命令关闭表单ENDCASE * 以下代码用于控制按钮的有效性 IF BOF() OR this.Value=1 this。command1。enabled=.f. this。command2.enabled=。f。ELSE mand1.enabled=.t. mand2。enabled=。t。ENDIF IF EOF() OR this.Value=4 mand3。enabled=.f. this。command4.enabled=。f. SKIP 1ELSE mand3.enabled=。t。 this。command4。enabled=。t。ENDIFthisform。Refresh2班级管理表单设计班级管理功能主要包括对班级资料的浏览、添加、删除、修改.表单运行效果如果图14