为什么声明的存储过程不能连续执行多次?????……………………

Thinkinger 2003-04-08 02:05:53
在我的保存的过程中,我声明了一个存储过程,当我第一次保存的时候,没有任何的问题;但当我第二次执行保存操作的时候,跟踪发生的错误是
“A cursor with the name 'pricerule' already exists.”,可我每次保存的时候,执行完存储过程都CLOSE了啊,这样还不能释放,那要怎么释放呢????
...全文
83 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bxcsoft 2003-04-08
  • 打赏
  • 举报
回复
关闭游标
shahand 2003-04-08
  • 打赏
  • 举报
回复
关闭游标
happy_0325 2003-04-08
  • 打赏
  • 举报
回复
你把代码贴出来看看吧
andyzq 2003-04-08
  • 打赏
  • 举报
回复
因为你的存储过程中用到了游标,用完之后你没有关闭游标,所以报错

CLOSE 游标名
DEALLOCATE 游标名
gwolfupb 2003-04-08
  • 打赏
  • 举报
回复
你定义的pricerule是不是个实例变量呢,你把代码贴出来看看吧,可能是定义语句用了两次
Thinkinger 2003-04-08
  • 打赏
  • 举报
回复
就返回了个值,用fetch pricerule into :li_return; 没干别的了!
Blackride 2003-04-08
  • 打赏
  • 举报
回复
你存储过程是不是创建 游标了@@
如果有 看看游标是不是释放了@@
缩位拨号(Abbreviated Dialing) ………………………………………………… 帐目码(Account Code) ………………………………………………………… 闹钟(Alarm) ……………………………………………………………………… 文字显示(Alphanumeric Display)………………………………………………… 模拟通信接口(ACI)(Analogue Communications Interface) ………………… 话务台电话排队(Attendant Call Queuing) ……………………………………… 自动呼叫分配(ACD)(Automatic Call Distribution)…………………………… 自动呼叫分配:排队状态显示 (Automatic Call Distribution: Queue Status Display) 自动路由选择(F-路由)(Automatic Route Selection (F-Route))………………… 背景音乐(Background Music) …………………………………………………… 强插(Barge In)…………………………………………………………………… 占线状态显示(Busy Status Display)…………………………………………… 呼叫转移(Call Forwarding)………………………………………………………… 呼叫转移 – 固定目标(Call Forwarding, Fixed)………………………………… 呼叫转移 – 外部电话(Call Forwarding, Off-Premise)…………………………… 呼叫转移 –缩位拨号(Call Forwarding to Abbreviated Dial)…………………… 跟随转移(Call Forwarding with Follow Me)……………………………………… 呼叫转移/勿打扰的临时解除(Call Forwarding/Do Not Disturb Override)……… 呼叫改址(Call Redirect)…………………………………………………………… 呼叫计时(Call Timer)……………………………………………………………… 呼叫等待/预占线(Call Waiting / Camp On)……………………………………… 回叫(Callback)……………………………………………………………………… 来电显示(Caller-ID)……………………………………………………………… 来电显示发送(Caller-ID - Sending)……………………………………………… 中继线应答(Central Office Calls, Answering)…………………………………… 中继线呼出(Central Office Calls, Placing)………………………………………… 服务等级(Class of Service)………………………………………………………… 电话会议(Conference)…………………………………………………………… 语音呼叫会议/保密解除(Conference, Voice Call/Privacy Release)…………… 继续拨号(Continued Dialing)……………………………………………………… 计费中心码(Cost Centre Code)…………………………………………………… 数据通信(Data Communication) 7 11 16 18 19 23 24 30 33 34 35 37 38 40 42 45 48 50 51 53 54 56 58 63 64 65 68 79 82 83 84 85 Aspila EX 用户手册 - ii - 部门组呼叫(Department Calling)………………………………………………… 部门组 – 呼叫前转(Department Group – Call Forward)………………………… 部门组分步呼叫(Department Step Calling)……………………………………… 拨号预览(Dial Number Preview)………………………………………………… 拨号盘证实音(Dial Pad Confirmation Tone)……………………………………… 拨号音检测(Dial Tone Detection)………………………………………………… 数字普通电话机(Digital Single Line Telephone (DSLT))………………………… 直接拨入(Direct Inward Dialing (DID) or Direct Dial In (DDI)) ……………… 直入外线(Direct Inward Line (DIL))……………………………………………… 直接呼入系统(Direct Inward System Access (DISA))…………………………… 直选台(Direct Station Selection (DSS) Console)………………………………… 直接呼叫代答(Directed Call Pickup)……………………………………………… 区分振铃,信号音和指示灯(Distinctive Ringing, Tone and Flash Patterns)…… 勿打扰(Do Not Disturb)…………………………………………………………… 门电话(Door Box)………………………………………………………………… DSTU – DXE 专用电话机(DSTU – DXE System phone)………………………… 双线显示(Dual Line Appearance)………………………………………………… 传真机兼容(Fax Machine Compatibility)……………………………………… 闪断(Flash)………………………………………………………………………… 灵活的系统号码(Flexible System Numbering)…………………………………… 强制中继线切断(Forced Trunk Disconnect)……………………………………… 分组代答(Group Call Pickup)……………………………………………………… 分组监听(Group Listen)…………………………………………………………… 免提扬声和监听(Handsfree and Monitor)………………………………………… 不摘机回话/内线振铃呼叫(Handsfree Answerback/Forced Intercom Ringing)… 头戴耳机(Headset Operation)……………………………………………………… 保持(Hold)………………………………………………………………………… 饭店功能(Hotel / Motel)…………………………………………………………… 热线(Hotline)……………………………………………………………………… InDepth ……………………………………………………………………………… 内线(Intercom)…………………………………………………………………… 内线放弃呼叫显示(Intercom Abandoned Call Display)………………………… ISDN 兼容(ISDN Compatibility)…………………………………………………… 标签(Lablemaker)………………………………………………………………… 重拨(Last Number Redial)………………………………………………………… 最经济路由(LCR (Least Cost Routing))…………………………………………… 87 91 94 95 96 97 99 101 105 107 111 119 120 125 127 129 134 135 137 138 140 141 143 144 146 148 150 153 166 168 170 172 173 175 176 178 Aspila EX 用户手册 - iii - 呼入线/呼出线优先(Line Preference)…………………………………………… 反极 - COIU 中继线(Line Reversal – COIU Trunk)……………………………… 长时间通话切断(Long Conversation Cutoff)……………………………………… 外线循环键(Loop keys)………………………………………………………… 会议回应(Meet Me Conference)…………………………………………………… 群呼回应(Meet Me Paging)……………………………………………………… 群呼转移回应(Meet Me Paging Transfer)………………………………………… 备忘拨号(Memo Dial)……………………………………………………………… 信息等待(Message Waiting)……………………………………………………… 关断麦克风(Microphone Cutoff)………………………………………………… 虚拟分机/呼叫覆盖(Multiple Directory Numbers / Call Coverage)……………… 保持音乐(Music on Hold)………………………………………………………… 名称存储(Name Storing)………………………………………………………… 夜服(Night Service)………………………………………………………………… 摘机信号音(Off Hook Signaling)………………………………………………… 单触键拨号(One-Touch Calling)………………………………………………… 群呼,外部(Paging, External)……………………………………………………… 群呼,内部(Paging, Internal)……………………………………………………… 驻留保持(Park)…………………………………………………………………… PBX 兼容(PBX Compatibility)…………………………………………………… 首要中继线选择(Prime Line Selection)………………………………………… 专用线(Private Line)……………………………………………………………… 可编程功能键(Programmable Function Keys)…………………………………… 脉冲至音频转换(Pulse to Tone Conversion)……………………………………… 多次重拨(Repeat Redial)…………………………………………………………… 转移原由显示(Reason of Tansfer Display)………………………………………… 反向语音插入(Reverse Voice Over)……………………………………………… 振铃组(Ring Groups)……………………………………………………………… 直达分机,内部/外部(Ringdown Extension, Internal / External)………………… 室内监听(Room Monitor)………………………………………………………… 存储号码重拨(Save Number Dialed)……………………………………………… 秘书电话(Secretary Call) ………………………………………………………… 秘书电话代答(Secretary Call Pickup)…………………………………………… 可选择的显示信息(Selectable Display Messaging)……………………………… 可选振铃音(Selectable Ring Tones)……………………………………………… 系列呼叫(Serial Call)……………………………………………………………… 183 185 186 187 189 191 193 195 197 201 202 206 208 210 213 215 220 222 224 227 229 231 232 234 235 236 237 239 240 242 245 247 249 250 253 255 Aspila EX 用户手册 - iv - 普通电话机,模拟装置(Single Line Telephones, Analogue Sets)………………… 软功能键(Soft Keys)……………………………………………………………… 分机信息详细记录(Station Message Detail Recording)…………………………… 大屏幕显示专用电话(Super Display System Phone)……………………………… 中继线汇接(Tandem Trunking (Unsupervised Conference))…………………… 专用线(Tie lines)………………………………………………………………… 日期和时间(Time and Date)……………………………………………………… 长途限制(Toll Restriction)………………………………………………………… 长途限制,拨号锁(Toll Restriction, Dial Block)…………………………………… 长途限制,呼入线上的呼出限制 (Toll Restriction, Outgoing Disable on Incoming Call)…………………………… 临时解除长途限制(Toll Restriction Override)…………………………………… 转移电话到会议(Transfer Call into Conference)………………………………… 转移(Transfer)……………………………………………………………………… 中继线组路由(Trunk Group Routing)…………………………………………… 中继线组(Trunk Groups)…………………………………………………………… 中继线电话排队(Trunk Queuing/Camp On)……………………………………… 中继线到中继线前转(Trunk to Trunk Forwarding)……………………………… 中继线到中继线转移(Trunk to Trunk Transfer)…………………………………… UPS - 不间断电源(UPS – Un interruptable Power Supply)……………………… 语音信箱(Voice Mail)……………………………………………………………… 语音插入(Voice Over)……………………………………………………………… 语音应答系统(Voice Response System (VRS))…………………………………… 语音应答系统 – 语音信箱 (Voice Response System (VRS) – Massge Manager Lite)………………………… 音量控制(Volume Controls)……………………………………………………… 长时间通话提醒音(Warning Tone For Long Conversation)……………………… 256 259 260 267 271 274 278 279 282 284 286 287 289 292 293 295 297 299 302 303 310 312 321 330 331
目录 摘要 ………………………………………………………………………………………………………….. 第一章 绪论 ………………………………………………………………………………………………. 1.1题目来源 ……………………………………………………………………………………………… 1.1.1业务背景 …………………………………………………………………………………………… 1.1.2网络背景 ………………………………………………………………………………………….. 1.2课题的目的意义以及内容………………………………………………………………………. 1.2.1课题研究的目的意义………………………………………………………………………….. 1.2.2国内研究现状……………………………………………………………………………………… 1.2.3课题研究内容…………………………………………………………………………………. 第二章 系统开发技术………………………………………………………………………………….. 2.1Web数据库技术……………………………………………………………………………………… 2.2访问Web数据库的五种方法…………………………………………………………………… 2.3运用ASP开发Web数据库……………………………………………………………………….. 2.3.1建立ADO数据环境…………………………………………………………………………….. 2.3.2处理返回集…………………………………………………………………………………………. 2.3.3释放环境变量……………………………………………………………………………………. 第三章 系统设计………………………………………………………………………………………… 3.1工作分析与设计目的……………………………………………………………………………. 3.1.1日常工作分析…………………………………………………………………………………….. 3.1.2系统设计目的…………………………………………………………………………………… 3.2系统设计方案……………………………………………………………………………………… 3.2.1使用对象分析………………………………………………………………………………….. 3.2.2平台逻辑设计……………………………………………………………………………………. 3.2.3开发技术、开发平台以及开发工具…………………………………………………………. 3.3系统特点……………………………………………………………………………………………….. 3.4数据流程设计…………………………………………………………………………………………. 3.4.1系统使用人员间的书库流程………………………………………………………………………… 3.4.2教务助理子系统的数据流程………………………………………………………………………….. 3.5系统功能模块设计…………………………………………………………………………………………. 第四章 系统实现…………………………………………………………………………………………….. 4.1学籍管理数据平台实现………………………………………………………………………………….. 4.1.1数据表………………………………………………………………………………………………………… 4.1.2数据表间的关系…………………………………………………………………………………………. 4.2典型功能设计 ………………………………………………………………………………………………… 4.2.1身份进入原则………………………………………………………………………………………………. 4.2.2同音字查询………………………………………………………………………………………………….. 4.2.3成绩录入模块………………………………………………………………………………………………. 4.2.4成绩管理………………………………………………………………………………………………………. 4.2.5学籍处理……………………………………………………………………………………………………. 4.3提高查询速度的解决………………………………………………………………………………………. 4.3.1利用索引系统系统性能……………………………………………………………………………………. 4.3.2程序过程的查询优化……………………………………………………………………………………….. 4.4系统运行平台………………………………………………………………………………………… 第五章 结论……………………………………………………………………………………………………. 致谢…………………………………………………………………………………………………………………. 第一章 绪 论 (1) 系统设计介绍 管理系统(简称MIS)是介于信息论,经济管理理论,统计学与运筹学及计算机科学之间的一门边缘性,综合性,系统性的交叉科学,它是随着管理科学。信息技术,计算机技术等的发展而产生和发展起来的。 学籍管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备、易使用等特点。 上一代的学籍管理系统主要为单机单用户的系统。其特点是单机单用户方式,开发简单,能充分利用数据库的特性。其缺点是开发出的系统依赖性强,运用必须依托数据库环境;不容易升级与扩展;无法实现数据的共享与并行操作;代码重用性差。 随着计算机网络的发展,特别是校园网的建立。原有学籍管理系统数据共享差的问题更加突出,而新需求的提出也越来越多,越来越频繁。这就要求系统在可扩展性和标准化的要求更高。而原有的系统由于其与生俱来的缺点而无法适应现有的需求了。 (2) 系统的研究的目的及意义 学籍管理系统使用最新开发工具开发,运行稳定、效率高。学籍管理系统对硬件要求低,350M以上剩余硬盘空间即可保证软件顺利运行。学籍管理系统可扩展性和灵活性强,用户可以自由定义所需掌握的学籍信息并根据需要随时调用和查询已录入信息。学籍管理系统操作简便、快捷,使用我们的阅读机和配套信息卡,所有学生入学、退学、升级等业务仅需点击几次鼠标即可轻松完成。在新生入学等大批量人员操作时,更可以节省录入时间、提高正确率。学籍管理系统所有信息也可人工录入和修改,以方便没有阅读机的用户。 学籍管理是高校教学工作的一个重要的组成部分,学籍管理水平的高低体现了学校教学管理水平的高低。由于缺乏现代化的管理手段,学籍管理人员常常面对大量的信息资料却不能及时调整出自己所需要的数据。学籍管理还处于半手工处理阶段,工作既繁琐又效率低,学生学籍发生异动,其相应的信息资料不能及时进行修改,往往会出现信息处理不一致的情况。每学期期末的成绩登出容易出现错,漏等情况。学生成绩的查询工作也极不方便。 事实证明传统的管理模式既浪费人力资源,又不利于提高工作效率,保密性也差。随着时间的推移,产生大量的文件和资料,给查找更新和维护带来了很大的困难。随着学校专业设置的多样化,学校规模的不断扩大,招生人数逐年攀升以及教学计划的不断完善,学籍管理的数据量急剧增加,使得学籍管理老公强度大大增强,采用这种方式进行学籍管理是难以胜任的。所以,建立一个完善的集成化的计算机学籍管理系统势在必行,它具有手工管理无法比拟的优点,可以做到检索迅速、查找方便、可靠性高、保密性好、寿命长、成本低等,这些有点能够极大地提高效率,也能对学校科学化、正规化管理起到重要的作用。 现在我国的中小学校中档案的管理水平还停留在书面记载的基础上,这样的机制已经不能适应时代的发展,因为它浪费人力、物力,在信息时代这种传统的管理方法必然会被以计算机为基础的MIS所取代。 我作为计算机科学与技术专业的学生,希望自己可以在学籍管理系统这方面有所贡献。基本实现 A安全、高效地存储历届的学生档案 B只需一到二名档案录人员即可操作系统 C 可以迅速查到所需要的信息
数据库课程设计报告 ——在线图书销售管理系统 专 业: 班 级: 学 号: 姓 名: 目 录 1.需求分析…………………………………………………………………………2 1.1系统现状……………………………………………………………………2 1.2用户需求……………………………………………………………………2 2.概念结构设计……………………………………………………………………3 2.1抽象出系统实体……………………………………………………………3 2.2设计分E-R图………………………………………………………………5 2.3生成初步E-R图……………………………………………………………6 2.4生成全局E-R图……………………………………………………………6 3.逻辑结构设计……………………………………………………………………7 3.1关系模式……………………………………………………………………8 3.2各表关系分析………………………………………………………………8 3.3各表字段说明………………………………………………………………8 3.4数据模型的优化……………………………………………………………10 3.5设计用户子模式……………………………………………………………11 4.存储结构…………………………………………………………………………11 5.触发器……………………………………………………………………………11 6.总结………………………………………………………………………………12 随着信息时代的来临,电子商务的出现给人们的生活带来了巨大的影响,伴随着电子商 务的发展,越来越多的用户选择在网上购买图书,网上书店系统应运而生。没有中间商 的参与,使网上书店具有物美价廉等特性,同时还给人们节省了大量时间,这些实体书 店无法比拟的功能使其必将发展成为一种经营趋势。 接下来以一个简单的在线图书销售管理为例,介绍在线图书销售管理系统数据库设计 与实现的过程。 1.需求分析 近年来,计算机和网络技术有了快速的发展和进步,商业销售方式从传统的店铺经营逐 步发展到网络经营,顾客购买方式也从店铺购买逐步发展到网上购买。在线图书销售管 理系统也随着网上购物的浪潮应运而生。 1.1系统现状 在线图书销售管理系统对于网上图书销售管理和图书购买时非常重要的。现在许多商业 销售部门都有自己的销售管理系统。用户可以再Internet上查询自己所需要的购买信息 ,足不出户就可以了解各方面的信息,进行网上交易,再利用物流公司就可以达到远程 购买的目的。通过远程登录图书销售管理系统,查询出自己所需要的图书的详细信息并 提交购买信息,这样既方便用户,同时也方便了销售人员销售管理。 在线图书销售管理系统是Internet上最常见的销售管理系统之一,它是一个基本作用就 是为图书销售部门提供所销售图书信息发布的平台。使用SQL数据库,将减轻管理人员的 工作量,使系统便于维护和管理。 对于图书销售企业来说,利用现代计算机网络和通信技术、数据库技术,实现供应、销 售等相关业务管理、共享数据资源,业务办理过程网络化、电子化。这样能够进一步畅 通销售渠道,大大提高工作效率。 在线图书销售管理系统利用Internet的优势实现在线的图书销售管理,主要实现会员信 息管理、图书信息管理、订单信息管理等功能。 1.2用户需求 考察用户网上购书的行为,大致都是如下的模式:用户进入网上书店,浏览各种图书信 息,或者根据自己感兴趣的类别、特定图书信息等来进行搜索、查询图书信息。普通用 户可以查询图书,我们这个系统规定在线图书销售系统只允许会员执行购买图书的操作 。会员在购买图书时,首先将选定的图书加入购物车,可以一次购买多本图书,每本图 书的数量也可以不同。对购物车中的图书进行确认付款以后,生成正式订单,管理员可 以根据会员购买生成的订单,为其进行发货处理。管理员还可以对网上书店的图书进行 增加、删除、更新等管理操作。 对于在线图书销售管理系统中普通用户、会员和管理员的具体功能描述如下。 (1)普通用户 1)浏览图书、按类别查询图书、查看图书详细信息。 2)注册成为会员。 (2)会员 1)浏览图书、按类别查询图书、查看图书详细信息。 2)加入购物车、修改购物车、订购图书、生成订单、查看订单等。 3)查看、修改个人信息。 (3)管理员 1)浏览图书、按类别查询图书、查看图书详细信息,核查购买图书费用信息。 2)查看订单、处理订单进行发货处理等。 3)查看、修改个人信息。 4)更新图书信息,如新增、删除图书、更新库存量、商品名称、增加图书的属性列等。 从上述的功能分析可以得出,在线图书销售管理系统中需要有会员、管理员、图书、订 单等信息。对于会员,需要有会员的账号、密码、姓名、邮箱、电话
攀枝花学院本科学生课程设计任务书 题 目 二叉排序树与平衡二叉树的实现 1、课程设计的目的 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。 使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。 3) 使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。 2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等) (1) (1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T; (2)对二叉排序树T作中序遍历,输出结果; (3)计算二叉排序树T查找成功的平均查找长度,输出结果; (4)输入元素x,查找二叉排序树T,若存在含x的结点,则删该结点,并作中序遍历(执行操作2);否则输出信息“无x”; (5)用数列L,生成平衡的二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡的二叉排序树,则立即将它转换成新的平衡的二叉排序树BT; (6)计算平衡的二叉排序树BT的平均查找长度,输出结果。 3、主要参考文献 [1]刘大有等,《数据结构》(C语言版),高等教育出版社 [2]严蔚敏等,《数据结构》(C语言版),清华大学出版社 [3]William Ford,William Topp,《Data Structure with C++》清华大学出版社 [4]苏仕华等,数据结构课程设计,机械工业出版社 4、课程设计工作进度计划 第1天 完成方案设计与程序框图 第2、3天 编写程序代码 第4天 程序调试分析和结果 第5天 课程设计报告和总结 指导教师(签字) 日期 年 月 日 教研室意见: 年 月 日 学生(签字): 接受任务时间: 年 月 日 注:任务书由指导教师填写。 课程设计(论文)指导教师成绩评定表 题目名称 二叉排序树与平衡二叉树的实现 评分项目 分值 得分 评价内涵 工作 表现 20% 01 学习态度 6 遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。 02 科学实践、调研 7 通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。 03 课题工作量 7 按期圆满完成规定的任务,工作量饱满。 能力 水平 35% 04 综合运用知识的能力 10 能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。 05 应用文献的能力 5 能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。 06 设计(实验)能力,方案的设计能力 5 能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。 07 计算及计算机应用能力 5 具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。 08 对计算或实验结果的分析能力(综合分析能力、技术经济分析能力) 10 具有较强的数据收集、分析、处理、综合的能力。 成果 质量 45% 09 插图(或图纸)质量、篇幅、设计(论文)规范化程度 5 符合本专业相关规范或规定要求;规范化符合本文件第五条要求。 10 设计说明书(论文)质量 30 综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。 11 创新 10 对前人工作有改进或突破,或有独特见解。 成绩 指导教师评语 指导教师签名: 年 月 日 摘要及关键字 本程序中的数据采用“树形结构”作为其数据结构。具体采用的是“二叉排序树”。 二叉排序树(又称二叉查找树):(1)若左子树不空,则左子树上所有节点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有节点均大于它的根结点的值;(3)它的左右子树分别为二叉排序树。 二叉平衡树:若不是空树,则(1)左右子树都是平衡二叉树;(2)左右子树的深度之差的绝对值不超过1。 本次实验是利用二叉排序树和平衡二叉树达到以下目的:(1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;(2)对二叉排序树T作中序遍历,输出结果;(3)计算二叉排序树T查找成功的平均查找长度,输出结果; (4)输入元素x,查找二叉排序树T,若存在含x的结点,则删该结点,并作中序遍历(执行操作2);否则输出信息“无x”;(5)用数列L,生成平衡的二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡的二叉排序树,则立即将它转换成新的平衡的二叉排序树BT; (6)计算平衡的二叉排序树BT的平均查找长度,输出结果。 关键字:数列L,结点,二叉排序树,平衡二叉树        目录 摘要…………………………………………………………………………… 3 1 绪论………………………………………………………………………… 5 1.1 课程设计的目的…………………………………………………………… 5 1.2 相关知识的阐述…………………………………………………………… 5 1.2.1一位数组的存储结构…………………………………………………… 5 1.2.2建立二叉排序树……………………………………………………… 5 1.2.3中序遍历二叉树………………………………………………………… 5 1.2.4平均查找长度…………………………………………………………… 6 1.2.5平均二叉树(AVL树)…………………………………………………… 6 1.2.6平衡因子………………………………………………………………… 7 1.2.7平衡二叉树的调整方法…………………………………………………… 7 2 方案设计……………………………………………………………… 8 2.1 模块功能………………………………………………………………………8 3 算法设计…………………………………………………………………… 8 3.1 算法流程图…………………………………………………………………… 8 4 详细设计……………………………………………………………… 10 4.1 主程序………………………………………………………………… 10 4.2 定义二叉树结构……………………………………………………………… 11 4.3 建立二叉树…………………………………………………………………… 11 4.3.1二叉排序树的查找…………………………………………………………11 4.3.2二叉排序树的插入…………………………………………………………11 4.4 中序遍历…………………………………………………………………12 4.5 平均查找长度…………………………………………………………………12 4.6 删除节点…………………………………………………………………12 4.7 判断平衡二叉树……………………………………………………………… 13 5 调试分析………………………………………………………………………… 14 5.1 时间复杂度的分析………………………………………………………………14 5.2 运行结果………………………………………………………………… 14 5.3 结果分析………………………………………………………………… 15 6 课程设计总结…………………………………………………………………… 16 参考文献………………………………………………………………………… 17 1 绪论 1.1 课程设计的目的 (1)使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。 (2)使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。 (3)使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。 1.2 相关知识的阐述 1.2.1 一维数组的存储结构 建立二插排序树,首先用一个一维数组记录下读入的数据,然后再用边查找边插入的方式将数据一一对应放在完全二叉树相应的位置,为空的树结点用“0” 补齐。 1.2.2 建立二叉排序树 二叉排序树是一种动态树表。其特点是:树的结构通常不是一次生成的,而是在查找过程中,当树中不存在关键字等于给定值的节点时再进行插入。新插入的结点一定是一个新添加的叶子节点,并且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。 插入算法: 首先执行查找算法,找出被插结点的父亲结点; 判断被插结点是其父亲结点的左、右儿子。将被插结点作为叶子结点插入; 若二叉树为空,则首先单独生成根结点。 注意:新插入的结点总是叶子结点。 1.2.3 中序遍历二叉树 中序遍历二叉树算法的框架是: 若二叉树为空,则空操作; 否则(1)中序遍历左子树(L); (2)访问根结点(V); (3)中序遍历右子树(R)。 中序遍历二叉树也采用递归函数的方式,先访问左子树2i,然后访问根结点i,最后访问右子树2i+1.先向左走到底再层层返回,直至所有的结点都被访问完毕。 1.2.4 平均查找长度 计算二叉排序树的平均查找长度时,采用类似中序遍历的递归方式,用s记录总查找长度,j记录每个结点的查找长度,s置初值为0,采用累加的方式最终得到总查找长度s。平均查找长度就等于s/i(i为树中结点的总个数)。  假设在含有n(n>=1)个关键字的序列中,i个关键字小于第一个关键字,n-i-1个关键字大于第一个关键字,则由此构造而得的二叉排序树在n个记录的查找概率相等的情况下,其平均查找长度为:          ASL(n,i)=[1+i*(P(i)+1)+(n-i-1)(P(n-i-1)+1)]/n 其中P(i)为含有i个结点的二叉排序树的平均查找长度,则P(i)+1为查找左子树中每个关键字时所用比较次数的平均值,P(n-i-1)+1为查找右子树中每个关键字时所用比较次数的平均值。又假设表中n个关键字的排列是“随机”的,即任一个关键字在序列中将是第1个,或第2个,…,或第n个的概率相同,则可对上式从i等于0至n-1取平均值。最终会推导出:          当n>=2时,ASL(n)<=2(1+1/n)ln(n) 由此可见,在随机的情况下,二叉排序树的平均查找长度和log(n)是等数量级的。 另外,含有n个结点的二叉排序树其判定树不是惟一的。对于含有同样一组结点的表,由于结点插入的先后次序不同,所构成的二叉排序树的形态和深度也可能不同。 而在二叉排序树上进行查找时的平均查找长度和二叉树的形态有关:  ①在最坏情况下,二叉排序树是通过把一个有序表的n个结点依次插入而生成的,此时所得的二叉排序树蜕化为棵深度为n的单支树,它的平均查找长度和单链表上的顺序查找相同,亦是(n+1)/2。  ②在最好情况下,二叉排序树在生成的过程中,树的形态比较匀称,最终得到的是一棵形态与二分查找的判定树相似的二叉排序树,此时它的平均查找长度大约是lgn。  ③插入、删除和查找算法的时间复杂度均为O(lgn)。 1.2.5 平衡二叉树( AVL树 ) ①平衡二叉树(Balanced Binary Tree)是指树中任一结点的左右子树的高度大致相同。     ②任一结点的左右子树的高度均相同(如满二叉树),则二叉树是完全平衡的。通常,只要二叉树的高度为O(1gn),就可看作是平衡的。     ③平衡的二叉排序树指满足BST性质的平衡二叉树。     ④AVL树中任一结点的左、右子树的高度之差的绝对值不超过1。在最坏情况下,n个结点的AVL树的高度约为1.44lgn。而完全平衡的二叉树高度约为lgn,AVL树是最接近最优的。 1.2.6 平衡因子 二叉树上任一结点的左子树深度减去右子树的深度称为该结点的平衡因子,易知平衡二叉树中所有结点的因子只可能为0,-1和1。 平衡二叉排序树的在平衡因子绝对值等于2时开始调整到绝对值为1或0,在平衡因子绝对值为2时,二叉排序树会出现四种不同的情况的树形,因此这时需要分别单独讨论来降低平衡因子。 1.2.7 平衡二叉树的调整方法   平衡二叉树是在构造二叉排序树的过程中,每当插入一个新结点时,首先检查是否因插入新结点而破坏了二叉排序树的平衡性,若是,则找出其中的最小不平衡子树,在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。具体步骤如下: (1)每当插入一个新结点,从该结点开始向上计算各结点的平衡因子,即计算该结点的祖先结点的平衡因子,若该结点的祖先结点的平衡因子的绝对值均不超过1,则平衡二叉树没有失去平衡,继续插入结点; (2)若插入结点的某祖先结点的平衡因子的绝对值大于1,则找出其中最小不平衡子树的根结点; (3)判断新插入的结点与最小不平衡子树的根结点的关系,确定是哪种类型的调整; (4)如果是LL型或RR型,只需应用扁担原理旋转一次,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突;如果是LR型或LR型,则需应用扁担原理旋转两次,第一次最小不平衡子树的根结点先不动,调整插入结点所在子树,第二次再调整最小不平衡子树,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突; (5)计算调整后的平衡二叉树中各结点的平衡因子,检验是否因为旋转而破坏其他结点的平衡因子,以及调整后的平衡二叉树中是否存在平衡因子大于1的结点。 2 方案设计 2.1 模块功能 1.建立二叉树:要求以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T。 2.中序遍历并输出结果:要求将第一步建立的二叉树进行中序遍历,并将结果输出。 3.平均查找长度并输出:要求计算二叉排序树T查找成功的平均查找长度,输出结果。 4.删除节点:要求输入元素x,查找二叉排序树T,若存在含x的结点,则删该结点,并作中序遍历(执行操作2);否则输出信息“无x”。 5.生成平衡二叉树:要求用数列L,生成平衡的二叉排序树BT:当插入新元素之后,发现当前的二叉排序树BT不是平衡的二叉排序树,则立即将它转换成新的平衡的二叉排序树BT; 6.平均查找长度:计算平衡的二叉排序树BT的平均查找长度,输出结果。 3 算法设计 3.1 算法流程图 建立二叉树流程图: YES NO 主程序流程图: 中序遍历流程图: 删除节点流程图: 4 详细设计 4.1 主程序 void main() { node T=NULL; int num; int s=0,j=0,i=0; int ch=0; node p=NULL; printf("请输入一组数字并输入0为结束符:"); do{ scanf("%d",&num); if(!num) printf("你成功完成了输入!\n"); else insertBST(&T,num); }while(num); printf("\n\n---操作菜单---\n"); printf("\n 0: 退出" ); printf("\n 1: 中序遍历"); printf("\n 2: 平均查找长度"); printf("\n 3: 删除"); printf("\n 4: 判断是否是平衡二叉树"); while(ch==ch) { printf("\n 选择操作并继续:"); scanf("%d",&ch); switch(ch){ case 0: exit(0); /*0--退出*/ case 1: printf(" 中序遍历结果是:\n "); inorderTraverse(&T); break; case 2: s=0;j=0;i=0; calculateASL(&T,&s,&j,i); printf(" ASL=%d/%d",s,j); break; case 3: printf(" 请输入你想删除的数字:"); scanf("%d",&num); if(searchBST(T,num,NULL,&p)) { T=Delete(T,num); printf(" 你已成功删除该数字!\n "); inorderTraverse(&T); else printf(" 没有你想要删除的节点 %d!",num); break; case 4: i=0; balanceBST(T,&i); if(i==0) printf(" OK!这是平衡二叉树!"); else printf(" NO!"); break; default: printf("你的输入有误!请重新输入!\n"); break; } } } 4.2 定义二叉树结构 #include typedef struct Tnode { int data; struct Tnode *lchild,*rchild; }*node,BSTnode; 4.3 建立二叉树 4.3.1 二叉排序树的查找 searchBST(node t,int key,node f,node *p){ /*在根指针t所指二叉排序树中递归地查找其关键字等于key的数据元素,若查找成功,则指针p指向该数据元素节点,并返回(1),否则指针p指向查找路径上访问的最后一个节点并返回(0),指针f指向t的双亲,其初始调用值为NULL*/ if(!t) {*p=f;return (0);} /*查找不成功*/ else if(key==t->data) {*p=t;return (1);} /*查找成功*/ else if(keydata) searchBST(t->lchild,key,t,p); /*在左子树中继续查找*/ else searchBST(t->rchild,key,t,p); /*在右子树中继续查找*/ } 4.3.2 二叉排序树的插入 insertBST(node *t,int key){ /*当二叉排序树t中不存在关键字等于key的数据元素时,插入key并返回(1),否则返回(0)*/ node p=NULL,s=NULL; if(!searchBST(*t,key,NULL,&p)) /*查找不成功 */ { s=(node)malloc(sizeof(BSTnode)); s->data=key; s->lchild=s->rchild=NULL; if(!p) *t=s; /*被插入节点*s为新的根节点*/ else if(keydata) p->lchild=s; /*被插节点*s为左孩子*/ else p->rchild=s; /*被插节点*s为右孩子*/ return (1); } else return (0); /*树中已有关键字相同的节点,不再插入*/ } 4.4 中序遍历 inorderTraverse(node *t) /*中序遍历*/ { if(*t){ if(inorderTraverse(&(*t)->lchild)) { printf("%d ",(*t)->data); if(inorderTraverse(&(*t)->rchild)); } } else return(1); } 4.5 平均查找长度 calculateASL(node *t,int *s,int *j,int i) /*计算平均查找长度*/ {if(*t){ i++; *s=*s+i; if(calculateASL(&(*t)->lchild,s,j,i)) { (*j)++; if(calculateASL(&(*t)->rchild,s,j,i)) {i--; return(1);} } } else return(1); } 4.6 删除节点 node Delete(node t,int key) { /*若二叉排序树t中存在关键字等于key的数据元素时,则删除该数据元素节点 */ node p=t,q=NULL,s,f; while(p!=NULL) { if(p->data==key) break; q=p; if(p->data>key) p=p->lchild; else p=p->rchild; } if(p==NULL) return t; if(p->lchild==NULL) { if(q==NULL) t=p->rchild; else if(q->lchild==p) q->lchild=p->rchild; else q->rchild=p->rchild; free(p); } else{ f=p; s=p->lchild; while(s->rchild) { f=s; s=s->rchild; } if(f==p) f->lchild=s->lchild; else f->rchild=s->lchild; p->data=s->data; free (s); } return t; } 4.7 判断平衡二叉树 int balanceBST(node t,int *i) /*判断平衡二叉树*/ { int dep1,dep2; if(!t) return(0); else { dep1=balanceBST(t->lchild,i); dep2=balanceBST(t->rchild,i); } if((dep1-dep2)>1||(dep1-dep2)dep2) return(dep1+1); else return(dep2+1); } 5 调试分析 5.1 时间复杂度的分析 为了保证二叉排序树的高度为lgn,从而保证然二叉排序树上实现的插入、删除和查找等基本操作的时间复杂度为O(lgn)。 5.2 运行结果 图5.1.1 调试界面 在程序调试过程当中,编译时并没有报错,但是运行时总是出错,在查阅资料和同学的帮助下,发现程序未对数组初始化。添加数组初始化代码: s=(node)malloc(sizeof(BSTnode)) 输入一组数列,以结0结束: 图5.2.2运行界面一 中序遍历: 图5.2.3运行界面二 计算平均查找长度 图5.2.4运行界面三 删除已有结点: 图5.2.5运行界面四 删除失败: 图5.2.6运行界面五 判断是否是平衡二叉树: 图5.2.7运行界面六 5.3 结果分析 通过运行程序和严密的求证,运行结果无误,不过对于转换平衡二叉树和平衡二叉树平均查找长度未能实现,同时也无法实现图像显示。 6 课程设计总结 在这一周的课程设计中,其实对我来说还是收获颇多。这不光提高了我的程序设计能力,更为我的就业增加了筹码。对我们来说,独立完成这样课程设计是比较困难,其中包括模块的组成分析和模块功能的实现。最后我不得不从网上下载源程序,借助课本,困难地将几个模块串起来。最后终于完成了自己的课程设计。 这次实验中我也出现过一些比较严重的错误。在用一维数组顺序表结构编写程序时我错误的运用静态链表来实现函数功能。这是我对基本概念理解的模糊不清造成的。我原以为只要采用一维数组作为存储结构它就一定也是顺序表结构,而实质上这根本是两个不相干的概念。后来在同学的指点下我意识到自己的错误。不过收获也很不少。至少我又练习了运用静态链表来实现同样的功能,同时我也发现两者在很多函数上是互通的,只需稍作修改即可移植。 另外程序的不足之处是不能实现对0这个数字的存储,可以通过改变数字的存储结构方式来实现,如使用二叉链表来作为数据的存储结构,即可实现该功能。还有就是可能自己学的还不够,对于最后两个要求未能完成,不得不说这是自己学艺不精。 现在觉得以前我对数据结构的认识是那么的肤浅,因此我下定决心寒假一定好好的把数据结构复习一遍。而且本次课程设计不光增强了我程序调试的能力,还有在面对一个较大的程序要冷静,不要浮躁,先分析模块要实现的功能,再把模块划分,最后到一个一个得模块实现,并且要不断地练习,这样,一个大的程序对我来说将不成问题。 参考文献 [1]刘大有等,《数据结构》(C语言版),高等教育出版社 [2]严蔚敏等,《数据结构》(C语言版),清华大学出版社 [3]William Ford,William Topp,《Data Structure with C++》清华大学出版社 [4]苏仕华等,数据结构课程设计,机械工业出版社
"成 " " "绩 " " 《C语言程序设计》 课程设计报告 专 业: 班 级: 姓 名: 指导教师: 二零一二年十二月 二十六日 目 录 一、设计题目……………………………………………………………2 二、设计目的……………………………………………………………2 三、设计内容……………………………………………………………2 3.1需求分析……………………………………………………………2 3.2 概要设计…………………………………………………………3 3.3 详细设计…………………………………………………………6 3.5 编写过程中遇到的问题及解决办法……………………………7 3.4 调试结果…………………………………………………………8 3.6课程设计总结……………………………………………………16 四、参考书目…………………………………………………………17 附录A 程序源代码…………………………………………………18 一、设计题目:课程信息管理系统 二、设计目的 1、熟练掌握C语言课程中所学的理论知识; 2、通过综合C语言的基本知识来解决实际问题; 3、加强分析和解决问题的能力。 三、设计内容 3.1 需求分析 设计对n门课程进行管理的课程信息管理系统,每门课程有课程编号,课程名称,课 程性质(B为必修,X为选修),总学时,学分等。系统功能包括: 1、系统以菜单方式工作,密码登陆。 2、课程信息的录入功能(增加数据)。用数组数据类型赋初值的方法把课程信息送 到各个数组中(但注意要是合法数据),然后把它们输出显示。 3、课程信息的删除(删除数据)。任意输入一门课程的编号,将它所有的信息从数 组中删除。 4、课程信息的浏览功能(查找数据)。任意输入一门课程的编号,打印出所有 相关数据。要求能多次查找。 5、课程信息的删除(修改数据)。任意输入一门课程的编号,打印出所有相关信息 后,可对某一项信息进行修改并保存。 6、课程信息的计算并排序。计算所有课程的总学分及平均学分(aver,单精度,输 出一位小数),将包括所有数据的数组元素按价格从高到低的顺序排序打印出来。 3.2 概要设计 程序流程图: 模块分解: void pasd(); //声明密码函数 声明部分 (1)主函数模块 void zhujie(); //声明zhujie()函数 zhujie(); //调用zhujie()函数 调用部分 pasd(); //调用密码函数 联系 联系 声明部分:void yewu(); //声明业务函数 (2)密码模块 调用部分:yewu(); //调用业务函数 联系 联系 void inputcouinfo(void); //声明输入函数 void updatecouinfo(void); //声明修改函数 void addcouinfo(void); //声明添加函数 声明部分 void findcouinfo(void); //声明查询函数 void ordercouinfo(void); //声明排序函数 (3)业务模块 void delcouinfo(void); //声明删除函数 inputcouinfo(); //调用输入函数 case '1':findcouinfo();break; //调用课程信息查询 调用部分 case '2':delcouinfo();break; //调用课程信息删除 case '3':updatecouinfo();break; //调用课程信息修改 case '4':ordercouinfo();break; //调用课程信息排序 case '5':addcouinfo(); break; //调用课程信息添加 数据结构的说明: #define n1 20 //控制课程个数的存储空间 #define m1 5 //控制课程属性个数的存储空间空间 char couinfo[n1][m1][16]; //定义全局数组 char password[]={"123456"}; //原密码 int a, i,j,t=0,c=0,n=4,m=5; //定义全局变量 密码模块: char p[9]; //定义密码数组 p[i]==8 //控制退格 p[i]==13 //回车控制 strcmp(p,password)==0 //密码匹配 字符串比较函数 int n=3; //密码输入次数控制 业务模块: system("cls"); //清屏函数 3.3 详细设计 密码模块: 注释 Y (是) N(否) Y N 删除模块: 注释 注释 Y N Y N 3.4 编写过程中遇到的问题及解决办法 (1)在调试函数的过程时,一般高级语言要求函数实参与形参个数与类型一致,但 在C语言编译在该点检查不严格。当出现实参与形

1,076

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧