第一篇:新系统辅助查询系统开发与应用
[内容提要:税务机关加快信息化建设是征管改革形势发展的客观需要,目前北京市地税系统信息化建设已经迈上了新的发展阶段。在推进信息化建设的过程中,顺义地税局紧密结合实际工作,自主开发了新系统辅助查询系统,取得了较好地应用效果,使其成为核心征管系统的有力补充和深化,在税收征管方面发挥了积极的作用。]
当前,各级税务机关围绕税源科学化、精细化管理积极实践,取得了明显的进展和成效。在这场变革中,顺义地税局以发挥信息技术增值效能为抓手,对提高税收管理质量和效率的方法和途径进行了有益的探索和尝试。
一、开发初衷
科学化、精细化管理要贯穿到税收工作的方方面面,必须依托强有力的信息化手段为支撑。目前,顺义地税局各项征管工作主要基于核心征管系统(新系统)而开展。该系统以数据集中化和网络化为主要特征,切实改变了以往信息相互分割、数据重复处理、涉税流程不畅等现象,在开发设计、管理理念等方面均达到了较高的水平,对全市地税系统税收征管工作提供了有力的支持。然而,随着经济形势的不断发展以及税收管理工作的不断深入,不同的需求对象对税收数据的要求越来越高,核心征管系统中通用统一的查询统计功能难以完全满足基层多样化的查询需求,特别是具有部门或地域特色的一些数据统计与分析,往往需要税务干部手工进行操作。其次,核心征管系统与发票管理等系统之间相互独立,数据关联性不够,制约了数据的整体使用效率。再者,核心征管系统的查询受到现有网络带宽及服务器资源的限制,在支持全市系统用户同时使用时,速度会受到影响。此外,面对实际工作中出现的新情况、新问题,基层税务机关在运用信息化做精管理方面需要加大研究力度。基于上述情况,为了进一步发挥信息技术在科学化、精细化管理中的重要作用,顺义地税局自主开发了新系统辅助查询系统,使其成为核心征管系统数据查询功能的有利补充,取得了明显的成效。
二、基本功能及应用效果
新系统辅助查询系统以oracle为核心数据库,利用oracle的快照机制建立了每天定时刷新的快照,将市局后台数据及时更新到本局查询服务器上,以达到与核心征管系统的数据同步,并且将全部查询过程建立在本地服务器上,保证了查询的速度。
(一)基本功能介绍
1、税收快报鉴于计划统计部门每日要对大量的税收数据进行统计、分析,辅助查询系统中设计了税收快报模块。运用此模块可方便地按税收合计、税收收入、其它收入、区级收入口径统计税务机关每日、每月以及去年同期实现的税收数据。在此基础上创建两级链接,将税收快报数据分为税务所级和逐户级,还可随时详细的查看税收任务的完成情况。同时,还添加了征管行业、国家标准行业、经济类型等查询条件,为使用者提供了更加充分的查询功能。
2、税费查询税费查询模块中建立了房土税源登记、企业申报方式、企业所得税征收方式、房土变更、个体户税款入库方式、企业基本财务指标表、退税情况统计表、减免税统计表等八种查询功能,可为用户提供更为详实的数据。
3、逐户入库统计表逐户入库统计表包含了六项内容,即最终主管部门、所属街乡、不含个体经济、上年同期对比、入库大户、重点户查询。此模块的统计口径与核心征管系统中综合查询的口径相同,可在一行显示纳税人所有税种的入库信息,为统计、分析人员提供更为直观、全面的数据。
4、净入库逐户统计表该统计表用来统计税款的净入库数据,内容包括税务所净入库、街乡(主管部门)净入库、不含个体经济净入库、上年同期对比、入库大户、三级重点户、按税种查询入库大户七项内容,其数据的统计口径与会计账的统计口径相同。在统计纳税金额时,多数部门是按税款的净入库数据进行计算的,此模块将税款的入库数据、账务的调整和更正等数据进行综合,计算出净入库数,大大提高了数据统计工作效率,满足了有关部门的特殊需求。
5、税收管理员查询税收管理员的查询模块涵盖了逐户统计表、净入库逐户统计表、连续未申报、无缴纳税款、申报与入库不符、企业申报方式、申报未入库、逐户同期对比八项内容。该查询模块以管理员为基础,可为管理员提供及时有效的管户信息,便于税收管理员直观了解管户情况,有针对性地加强税源监控。
6、评估查询针对目前纳税评估系统查询模块尚未完善的现状,为解决评估选案的问题,增设了评估查询模块,为评估工作的顺利开展提供了支持。
7、计会统报表日常工作中计会统计报表所含数据量大,涉及的类别较多,在掌握这一特点的基础上,新系统辅助查询系统中添加了计会统计表模块。该统计表模块包括分税种同期对比、登记户数分行业统计表、镇(地区、办事处)完成情况表、直单位税收完成情况表、私营税收情况统计表(按街乡、行业)、个体税收情况统计表(按行业、街乡)、各税务所税收完成情况表(净)。应用此模块有效缩短了制表时间,同时保证了数据的准确性。
8、稽查电子台账此模块将稽查部门登记的手工台账转变为电子台账,目前包含稽查审理台账和稽查台账两类,提高了稽查人员的工作效率,便于案件管理。
9、征管查询征管查询模块的适用范围较广泛,可用来统计各税务所管辖范围内的企业申报情况及税源变更情况,包括未申报、申报未入库、申报与入库金额不符、分局间转入户统计表、无缴纳税款户、征期内无税申报、征期后无税申报、征期后有税申报、税务所间转户等。
10、发票查询现有发票系统只能对发票库存及使用税控装置的纳税户进行统计,发票数据与入库数据之间无关联,不利于发票比对。针对这一情况,新系统辅助查询系统建立了发票查询模块,此模块可用来统计发票的核定情况与发票的销售情况,同时在发票核定数据与纳税人的入库数据之间建立了关联,促进了“以票控税”作用的发挥。
(二)应用效果
经过一年多的使用与完善,新系统辅助查询系统深化了核心征管系统回放数据的应用,满足了不同对象的数据查询需求,拓展细化了查询系统的功能,成为核心征管系统的有力补充,支撑了精细化管理工作的开展,其应用效果主要体现在:
1、提高了工作效率。作为日常工作中重要的查询工具,新系统辅助查询系统将全部查询过程建立在本地服务器上,对复杂的查询建立了中间表,依托内部网络资源优势,保证了查询的速度,使繁杂的数据统计工作得到了改善。以计统部门的《镇、地区、办事处税收完成情况表》为例,以往在网络条件好的情况下,至少需要两三天才能完成,个别情况下还需要加班加点,现在应用新系统辅助查询系统轻点鼠标即可实现。
2、保证了数据的准确性。新系统辅助查询系统的另一个优势在于能够提供准确的查询结果。为了做到这一点,开发人员在开始编写系统查询语句前,仔细征求了相关科室、税务所的查询需求,对可能用到的表及表与表之间的逻辑关系进行了反复研究。在语句的编写过程中认真与核心征管系统及会计账数据进行了比对,同时仔细研究新系统辅助查询系统所涉及的约束条件。经过严格的设计流程,新系统辅助查询系统中创建的统计表全部符合不同对象的要求。如:辅助查询系统中入库统计表的数据口径与核心征管系统查询的数据口径完全一致,净入库统计表提供的数据口径与会计账上反映的数据口径完全吻合。
3、满足了不同的查询需求。新系统辅助查询系统不仅满足了业务科室、税务所、管理员及稽查部门等用户的需求,还根据区级财政及镇财政所对地税报表的需求制定了完整的报表,满足了各方面的查询需要。
4、提高了税源管理水平。为了进一步推动税收征管工作,新系统辅助查询系统一是对核心征管系统、发票管理系统等有关数据进行了整合,将发票的核定情况、使用情况与税款入库数据相关联,有助于异常情况的发现;二是增加了税收管理员查询模块,将税收管理员与其所管辖的纳税户进行关联,建立统计表,使税收管理员能够全面地掌握其管户的入库数据、申报数据、发票数据,从而有的放矢地开展监控工作;三是添加了评估系统选案设置,便于评估人员开展工作;四是建立了稽查电子台账,按照稽查部门的要求,可随时生成电子台账,便于查询和管理。上述功能的完善,进一步丰富了税务机关的管理手段,促进了税源管理更加全面、深入、细致。
三、对税收工作的启示及今后完善的方向
随着新系统辅助查询系统的深入应用,其作为核心征管系统有力补充的作用进一步增强,同时也逐渐显现出该系统自身的特色,推动了税务机关的各项工作向精细化管理迈进。上述实践使我们认识到,提高税收征管的质量和效率,必须充分运用信息技术手段解决管理工作中人力难以解决的大量细致而具体的工作,使管理从粗放走向精确,从模糊走向清晰。总之,信息化建设是一个不断发展完善的过程,对于新系统辅助查询系统而言,今后仍需要在以下几方面加以完善。
1、进一步完善系统功能
利用信息技术有效推动税收工作的根本在于对工作实际需求的准确把握。今后要加强对新系统辅助查询系统应用情况的调研,整合、优化查询语句,继续完善数据查询、统计功能,使该系统更加科学、实用,促进税收征管质量不断提升。一是增加个人所得税模块,充分应用个人所得税明细申报系统回放的数据,与核心征管系统数据进行比对,通过个人所得税未申报、未入库查询设置,及时发现异常;二是增加交换数据模块,做好与国税、工商等部门的数据交换工作,应用新系统辅助查询系统查询、比对相应的数据,增强税源监控的实效性。此外,根据实际的业务需要,增加票证查询、税务档案查询、征管“五率”查询等设置,使新系统辅助查询系统功能更为丰富。
2、加强数据挖掘
数据挖掘(DataMining)就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中,提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。目前,税务部门内部集中了大量税收数据,如何最大限度的实现数据的使用价值是各级税务机关需要研究的重要课题。因此,当前要加强对数据相关性的分析与研究,根据现有系统数据间的逻辑关系,进行合理的推断与假设,在考虑一定风险因素的基础上建立数学模型,通过数学模型进行数据分析、预测,提高数据的使用效能,使之更好地服务于税收工作。如,配合发票、税控装置的管理,在辅助查询系统中建立发票的使用情况与税款入库数据之间的数学模型,为管理者提供有力的决策支持;对重点税源户历年纳税情况进行深入分析,建立纳税曲线,根据曲线的变化趋势预测企业税收情况等等。
3、提高智能化水平
目前,新系统辅助查询系统中的查询语句是将查询条件、查询内容固化在查询过程当中,不够灵活多样。今后,在数据查询方面要加大智能化开发力度,建立智能化查询平台,使每个干部可以根据自身工作特点设计表样,自己限定查询条件,从而进一步满足不同岗位多样性化的查询需求。[,感谢原作者]
www.xiexiebang.com【xiexiebang.com范文网】
第二篇:系统档案查询
基础档案 索证管理 卖场管理
口部类编码 口设置证书种內 口POS机登记 口供应商档案 口证书登记 口POS机设置
口货位编码 口商品证书查验 口支付类型定义 口品牌编码 口收款员设置 口商品建档 口营业员设置
口商品修改或删除 口商品促销方案 口组合商品销售商品设置 口买立减方案
口下传电子秤 口商品销售控制 口设置商品提成率 口POS机数据下载 口标准商品档案 口POS机消息广播
口设置商品黑名单 口POS机交易流水
口条码签打印 口POS机时段销售查询 口标价签打印 口POS机销售图示 口商品改编码
口POS机对账报表
口POS机结账控制
口POS机进销存日结
日常处理 口商品台帐查询 口库存限量报警
口商品定时优惠 口批量销售优惠 口商品保质期预警 口在途商品查询 口会员限量优惠 口商品销售控制 口进货批次查询 口商品验收汇总 口基础数据下载 口商品资料下载
口定时优惠下载 口会员资料下载 口POS机消息广播 口条码签打印
口标价签打印 口POS机结账控制 口进销存日结
分店处理 销售查询 口分店要货 口配送收货
口协配收货 口分店退货申请 口支付类型对账报表
口配送退货 口商品协退 口收款员对账报表 口营业员对账报表 口分店间调入 口分店间调出 口商品对账报表 口部门对账报表 口通讯参数设置 口上传数据生成 口供应商对账报表 口供应商支付类型 口上传数据 口接受数据 口收款员销售汇总 口营业员销售汇总 口接受数据予处理 口数据通讯日志 口支付类型汇总 口商品销售汇总 口分店要货单查询 口配送收货单查询 口部门销售汇总 口品类销售汇总 口协配收货单查询 口退货申请单查询 口供应商销售汇总 口按税率销售汇总
口配送退货单查询 口协配退货单查询 口按日期查询部门销售 口按日期查询品类销售 口分店间调入查询 口分店间调出查询 口按日期查询供应商销售口指定商品销售查询 口待处理协配采购单 口待处理商品配送单 口不动销商品查询 口商品销售预测 口待处理分店间调入单 口待处理分店间调出单 口部门销售预测 口品类销售预测 口待处理变价通知单
业务处理 业务查询
口补货申请 口采购订货 口基本档案查询 口供应商信息查询 口采购单审核 口商品验收 口供应商应付款查询 口供应商台帐查询 口供应商退货 口供应商结算 口客户信息查询 口客户应收款查询 口售价调整 口进价调整 口客户台帐查询 口商品批发汇总 口仓库调拨 口部门调拨 口品类批发汇总 口部门批发汇总
口商品损益 口加工领料 口进销存业务速报 口部门进销存报表 口加工退料 口成品入库 口系统日志 口保存盘存数据 口账面库存查询 口商品盘存 口POS机盘存控制
口POS机盘存数据汇总 口漏盘商品查询 口盘存结果查询 口批发报价查询 口批发销货查询 口批发退货查询 口客户结算查询 口制定客户批发价
会员管理 联营管理 口新会员注册 口会员日常处理 口供应商联营合同 口设置个别商品扣点 口会员辅助处理 口会员存款 口月度联营费用核算 口联营供应商结算 口会员取款 口会员批量存款 口月度联营费用查询 口联营结算单查询
口磁卡会员卡制作 口IC卡会员卡制作 口联营商品销售汇总 口联营供应商销售汇总 口会员积分设置 口会员返利结算 口联营商品信息查询 口会员信息查询 口会员业务台帐 口存款单查询 口取款单查询 口返利单查询 口业务统计报表 口支付记录查询 口会员购物明细 口IC卡余额查询
第三篇:机械设计课程设计辅助系统
《机械设计课程设计辅助系统》
《机械设计课程设计辅助系统》使用说明
《机械设计课程设计辅助系统》是一组在autocad环境下运行的应用程序,主要功能包括:
1.典型零部件的设计计算及校核计算;
2.典型零部件及典型结构的设计与绘图;
3.典型零部件的标准数据查询。
使用这组程序需要按一下步骤操作:
1.将文件复制到一个专门的文件夹;
2.启动autocad;
3.通过下拉菜单——工具——选项——打开选项对话框如下图
4.点击“支持文件搜索路径“
5.点击“添加”按钮
6.将辅助设计软件所在的文件夹输入新添加的搜索路径
7.点击“应用”,“确定”关闭对话框
8.在命令行输入“menu”命令,打开选择菜单文件对话框如下图,“文件类型”选择菜单源代码文件(*.mns),根据所使用的autocad版本选择相应的菜单文件并打开。使用auto2006版本的用户应选择acad2006.cui。
9.通过下拉菜单“机械零件设计”可调用这组应用程序。
第四篇:智能辅助驾驶系统(本站推荐)
目前不少汽车智能驾驶辅助技术已被广泛应用,我们已经实现了部分无人自动驾驶功能。无人驾驶的实现方式是使汽车感测周围环境并通过控制装置自动行驶。这其中,摄像头就像汽车的眼睛,而雷达传感器则是触觉灵敏的感应器官,将传感器连在一起形成了汽车的神经系统,最后交给相当于大脑的运算设备,通过网络与背后庞大的数据库交换数据,下达准确的行驶指令。不少无人驾驶技术的法宝已经一一应用。
1、会踩刹车学名:预测性紧急制动系统
普及程度:中高档车为主,部分A级车开始普及
驾驶员能否避免追尾事故,取决于刹那间。预测性紧急制动系统(PEB)基于环境传感器与ESC系统的网络化,在即将发生追尾事故的情
况下帮助驾驶员防止事故的发生或者至少降低事故的严重程度,数据显示,它能降低72%的追尾事故数量。该系统包含预测性碰撞预警、紧急制动辅助和自动紧急制动三个部分。
2、会变道学名:车道偏离轨道警示、循迹辅助系统
普及程度:最新推出的中高档车均有
控制车辆自动变换车道的功能则是迈向无人驾驶的第二步,车道偏离警告系统或循迹辅助系统能降低26%的交通事故。以博世的车道偏离轨道警示系统为例,包括驾驶员提醒、驾驶员操作失误判断、紧急刹车等,利用视频传感器识别道路标线并探测无意的车道偏离,并通过视觉、声觉或触觉信号提醒驾驶员。这些技术是无人驾驶技术的前期阶
段。下一阶段,借助ABS、ESP执行器,当识别到偏离之后,汽车自动调整到正确的车道上。
3、会控制速度学名:自适应巡航控制(ACC)普及程度:大部分中高端车型,部分A级车开始普及
ACC是无人驾驶的基础技术,能主动帮助驾驶员与前方车辆保持安全距离,驾驶员无需操作油门踏板就能够跟随前车,车距与车速自动调节。在行驶过程中,ACC在车道探测摄像头和电子机械式转向系统的支持下,与电子稳定程序ESP相结合,构成无人驾驶的基础。ACC分为基本型和停走型。基本型ACC保持由驾驶员预先设定的车速,通过自行收油门、制动或加速而与变化的交通状况相适应。停走型ACC主动帮助驾驶员与前方车辆保持安全距离,能将车辆自行制动到停止,并在驾驶员确认后自动重新启动车辆。
4、泊车学名:自动泊车系统
普及程度:各级别车型都有,大多配置在高配车型上
自动驻车系统相信很多人已经耳熟能详。与传统的机械驻车系统相比,如博世的自动驻车系统极大地提升驾驶舒适性、安全性和车内空间。自动驻车系统可与博世电子稳定系统ESP协同工作,可实现一系列附加增值功能,如防止汽车在斜坡上停车后失控向前或向后滚动,在紧急情况下,实现可控的制动减速。
第五篇:软件工程 通讯录查询系统
《数据结构》课程设计报告
计算机学院 软件工程专业
题目: 通信录查询系统(查找应用)
班级:软件102班 第11组
组长:
姓名:李伟
学号:1006550222 组员:
姓名:李呢
学号:1006550219 姓名:李强
学号:1006550221
指导老师:xxx
日期:2011 年 12月 30日
程序设计书目录
一、程序设计目标
二、问题描述
三、需求分析(说明课程设计的任务)
四、概要设计(说明课程设计中用到的抽象数据类型的定义、主程序的流程以及各程序模块之间的调用关系等)
五、详细设计(实现程序模块的具体算法)
六、软件说明书(给出软件应如何使用,使用时的注意事项)
七、源程序清单(要求400行以上,要有注释说明)
八、测试报告(调试过程中遇到的问题及解决方法,并列出测试结果,包括输入和输出)
九、课程设计总结
一、程序设计目标
通过本次课设进一步的了解哈希表函数及哈希表等有关概念,2 掌握哈希表查找的过程及方法。复习巩固大一时期学过的c语言知识。进一步加深对c语言、数据结构、离散数学等基础技能的理解和掌握。
让我们有一个既动手又动脑,独立实践的机会,可以让我们将课本上的理论知识和实际邮寄的结合起来,锻炼我们的分析解决实际问题的能力。提高我们实践编程能力。
通过本项课程设计,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相 结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。
二、问题描述
设计散列表实现通讯录查找系统。
(1)设每个记录有下列数据项:电话号码、用户名、地址;
(2)从键盘输入各记录,分别以电话号码为关键字建立散列表;
(3)采用二次探测再散列法解决冲突;(4)查找并显示给定电话号码的记录;(5)通讯录信息文件保存;
(6)要求人机界面友好,使用图形化界面;
三、需求分析
一.查询:用户有一个电话号码,但不知道此电话号码是谁的,则需要输入号码来查询该号码是不是此通讯录中已记录的人的 号码,若是即显示该号码及姓名、所在地,若不是则显示“无记录”。
进入主菜单界面,输入4,进入通讯录查询模块。输入你想要搜索通讯人的电话号码。屏幕输出所搜通讯人的先关信息。二.通讯录信息添加:
若要向通讯录中添加新号码,也分两种情况:1若该通讯录是新的,既没有任何通讯记录的,则直接往里添加,需先输入姓名,随即输入号码和所在地,用于存储。2若通讯录不是空的,再添加新号码时则需在最后一个号码后面进行添加(输入姓名、电话号码及所在地),以此类推。
进入主菜单,输入1,进入通讯录信息添加模块。按照要求依次输入姓名、电话号码、住址。三.通讯录信息删除:
若要对通讯录中的内容进行删除: 然后输入所要删除的号码进行删除
删除成功。出现提示信息。按任意键回到主菜单。
四、概要设计
对功能键相对应的函数分别对各个函数在程序中进行定义如下:
void Menu()void Create()void Append()void CreateHash()void Find()void Delete()void Alter()void List()void Save()
void Load()
然后根据各功能键的选择主函数分别调用功能键相对应 4 的函数来实现通讯录的查询系统。
五、详细设计
1、定义结构体变量
typedef struct people //记录 { NA name;NA tel;//关键字
NA add;}Record;//查找表中记录类型
typedef struct //建立哈希表 { Record *elem[HASHSIZE];//数据元素存储基址 int count;//当前数据元素个数 int size;//当前容量 }HashTable;
2、定义显示函数 void Menu()
3、定义建立时间的函数 void benGetTime()
4、定义创建新的通讯录并添加信息的函数
void Create(Record* a)
5、定义关键字比较函数
Status eq(NA x,NA y)
6、定义添加信息函数
void Append(Record* a)
7、定义显示通讯录中所有信息函数
void List(Record* a)
8、定义哈希函数
int Hash(NA str)
9、定义冲突处理函数
Status collision(int p,int &c)
10、定义建立散列表的函数
void CreateHash(HashTable* H,Record* a)
11、定义通讯录查找的函数
void Find(HashTable* H,int &c)
12、定义修改信息的函数
void Alter(HashTable* H,int &c)
13、定义删除信息的函数
void Delete(HashTable* H,int &c)
14、定义保存信息到指定文件的函数
void Save(HashTable* H)
15、定义从指定文件中读取信息的函数
void Load()
16、定义主函数
int main(int argc, char* argv[]){ system(“color FO”);system(“CLS”);int c,flag=1;HashTable *H;H=(HashTable*)malloc(LEN);for(int i=0;i
case 0:Quit();return 0;break;case 10:;;break;default: printf(“你输错了,请重新输入!”);printf(“n”);}
system(“CLS”);} return 0;}
六、软件说明书
双击程序,程序运行后,进入通信录查询系统菜单的操作界面,然后采用键盘进行操作。各功能键的选择如下:
1、创建新的通讯录并写入新的信息
2、添加某人的信息
3、以电话号码建立散列表
4、查找并显示给定电话号码的记录
5、删除某人的信息
6、修改某人的信息
7、显示通讯录中所有记录
8、保存通讯录所有记录到指定文件
9、从指定文件中读取通讯录中的记录 0、退出选单
选择1,建立新的通讯录,通讯录创建成功,按Enter键进入添加信息界面,界面会出现
根据系统提示进行相应的添写,添加成功之后,按Enter键返回主菜单。
选择2,在通讯录的末尾写入新的信息,与上诉添加信息操作相同。同样按Enter键返回主菜单。
选择3,会立即调用冲突处理函数以及建立散列表,界面上会显示冲突次数,哈希表容量和当前储存记录的个数,按Enter键返回主菜单。3功能键必须在4、5、6功能键之前选择,才能使4、5、6功能键派上用场。
选择4,查找某人信息,写入查找的电话号码,如果通讯录中有则会出现查找成功否则出现此人不存在,查找不成功。按Enter键返回主菜单。
选择5,删除某人信息,写入删除的电话号码,如果通讯录中有则会出现删除成功否则出现此人不存在,删除不成功。按Enter键返回主菜单。
选择6,修改某人信息,写入修改的电话号码,通过查找函数找到要修改的信息,在对找的的信息进行修改,如果通讯录中 有则会出现原信息让用户输入修改后的信息,根据系统的提示输入修改后的信息,按Enter键会出现修改成功,否则出现此人不存在,修改不成功。按Enter键返回主菜单。
选择7,界面会输出全部成员的信息。按Enter键返回主菜单。选择8,利用存盘函数保存数据到指定文件,界面会出现保存成功,按Enter键返回主菜单。
选择9,载入存储过的电话、姓名、地址,界面会出现指定文件所存储的所有信息。按Enter键返回主菜单。选择0,显示再见,按Enter键退出系统。
七、源程序清单
#include
typedef struct people //记录 { NA name;NA tel;//关键字 NA add;}Record;//查找表中记录类型
typedef struct //建立哈希表
{ Record *elem[HASHSIZE];//数据元素存储基址 int count;//当前数据元素个数 int size;//当前容量 }HashTable;int i;void Menu(){ printf(“
n”);printf(“ ## ttt ―――――― ttt ##n”);printf(“
# ttt
丨
1.创建
丨 # n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
2.写入
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
3.建表
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
4.查找
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
5.删除
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
6.修改
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
7.查看
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
8.保存
丨
#n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
9.读取
丨 #n”);printf(“
# ttt
―――――― #n”);printf(“
# ttt
丨
0.退出
丨 #n”);printf(“
## ttt
―――――― ##n”);printf(“
n”);}
void benGetTime()//建立时间函数 { SYSTEMTIME sys;GetLocalTime(&sys);printf(“%4d/%02d/%02d %02d:%02d:%02d.%03d n”,sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds);}
Status NUM_BER;//记录的个数 Status NUM_BER1;
void Create(Record* a)//创建新的通讯录 { system(“CLS”);//调用DOS命令CLS能够清屏
FILE *fp1,*fp2;if((fp1=fopen(“record.txt”,“r”))!=NULL)//打开文件
{ fclose(fp1);//关闭文件
} else {
fp2=fopen(“record.txt”,“w”);//如果不存在record.txt就创建一个
fclose(fp2);11 }
printf(“n”);
printf(“
#####n”);printf(“==================== → 创建成功 ← ===================n”);
printf(“
#####n”);
printf(“n”);printf(“◇◆请按ENTER进入添加通讯信息菜单◇◆n”);getchar();system(“CLS”);system(“CLS”);//调用DOS命令CLS能够清屏
printf(“
#####n”);printf(“==================== → 用户信息记录表 ← ===================n”);
printf(“
#####n”);printf(“输入要添加的个数:n”);scanf(“%d”,&NUM_BER);for(i=0;i { printf(“请输入第%d个记录的用户名:n”,i+1);scanf(“%s”,a[i].name);printf(“请输入%d个记录的电话号码:n”,i+1);scanf(“%s”,a[i].tel);printf(“请输入第%d个记录的地址:n”,i+1);scanf(“%s”,a[i].add); } getchar(); printf(“ #n”); printf(“添加成功!!n”); benGetTime();printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #n”);12 getchar();} Status eq(NA x,NA y)//关键字比较,相等返回SUCCESS;否则返回UNSUCCESS { if(strcmp(x,y)==0){ return SUCCESS;} else return UNSUCCESS;} void Append(Record* a)//键盘输入各人的信息 { system(“CLS”);//调用DOS命令CLS能够清屏 printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);printf(“输入要添加的个数:n”);scanf(“%d”,&NUM_BER1);int j=i;for(i;i printf(“ #n”); printf(“添加成功!!n”); benGetTime();13 printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #n”);getchar();} void List(Record* a)//显示通讯录中所有记录 { Record *p;p=a;int i;system(“CLS”);//调用DOS命令CLS能够清屏 printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);if(a!=NULL){ printf(“nn姓名t电话号tt地址n”); printf(“_____________________________________________________n”);for(i=0;i { printf(“%st%stt%sn”,a[i].name,a[i].tel,a[i].add); printf(“_____________________________________________________n”); } } else { printf(“对不起!没有任何联系人记录!nn”); printf(“===============n”);} benGetTime();printf(“ #####n”);14 printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #####n”);getchar();} int Hash(NA str)//哈希函数 { system(“CLS”);//调用DOS命令CLS能够清屏 long n;int m;n = atoi(str);//整型数.m=n%HASHSIZE;//造哈希函数 return m;//} Status collision(int p,int &c)//用二次探测再散列法解决冲突 { int i,q;i=c/2+1;while(i { return q; } else { i=c/2+1; } } else { q=(p-i*i)%HASHSIZE;把字符串转换成用除留余数法构并返回模值 冲突处理函数,采15 c++;if(q>=0) { return q; } else { i=c/2+1; } } } return UNSUCCESS;} void CreateHash(HashTable* H,Record* a)//建表,以电话号码为关键字,建立相应的散列表 { system(“CLS”);//调用DOS命令CLS能够清屏 int i,p=-1,c,pp;for(i=0;i { pp=collision(p,c);//若哈希地址冲突,进行冲突处理 if(pp<0) { printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);printf(“第%d记录无法解决冲突”,i+1);//需要显示冲突次数时输出 continue; } //无法解决冲突,跳入下一循环 } H->elem[pp]=&(a[i]);//求得哈希地址,将信息存入 H->count++; printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);printf(“第%d个记录冲突次数为%d。n”,i+1,c);//需要显示冲突次数时输出 } printf(“n建表完成!n此哈希表容量为%d,当前表内存储的记录个数为%d.n”,HASHSIZE,H->count);benGetTime();printf(“ #####n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #####n”);getchar();} void Find(HashTable* H,int &c)//在通讯录里查找电话号码关键字,若查找成功,显示信息 { system(“CLS”);//调用DOS命令CLS能够清屏 printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);benGetTime();17 NA tele;printf(“n请输入要查找记录的电话号码:n”);scanf(“%s”,tele);int p,pp;p=Hash(tele);pp=p;while((H->elem[pp]!=NULL)&&(eq(tele,H->elem[pp]->tel)==-1))pp=collision(p,c);if(H->elem[pp]!=NULL&&eq(tele,H->elem[pp]->tel)==1){ printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);printf(“n查找成功!n查找过程冲突次数为%d.以下是您需要要查找的信息:nn”,c);// printf(“姓 名:%sn电话号码:%sn联系地址:%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add); printf(“nn姓名t电话号tt地址n”); printf(“_____________________________________________________n”); printf(“%st%stt%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add); printf(“_____________________________________________________n”);} else printf(“n此人不存在,查找不成功!n”);benGetTime();getchar();printf(“ #####n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #####n”);getchar();} void Alter(HashTable* H,int &c)//在通讯录里修改某人信息 { system(“CLS”);//调用DOS命令CLS能够清屏 printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);benGetTime();NA tele;printf(“n请输入要修改记录的电话号码:n”);scanf(“%s”,tele);int p,pp;p=Hash(tele);pp=p;while((H->elem[pp]!=NULL)&&(eq(tele,H->elem[pp]->tel)==-1))pp=collision(p,c);if(H->elem[pp]!=NULL&&eq(tele,H->elem[pp]->tel)==1){ printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”); printf(“n以下是您需要修改的信息:”); printf(“n”); printf(“nn姓名t电话号tt地址n”); printf(“_____________________________________________________n”); printf(“%st%stt%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add); printf(“_____________________________________________________n”); (H->elem)[pp]->tel[0]=' '; printf(“请输入修改后记录的用户名:n”);scanf(“%s”,H->elem[pp]->name);printf(“请输入修改后记录的电话号码:n”);scanf(“%s”,H->elem[pp]->tel);printf(“请输入修改后记录的地址:n”);scanf(“%s”,H->elem[pp]->add); printf(“修改成功!!”);} else { printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”); benGetTime(); printf(“n此人不存在,修改不成功!n”);} getchar();printf(“ #####n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #####n”);getchar();} void Delete(HashTable* H,int &c)//在通讯录里查找电话号码关键字,若查找成功,显示信息然后删除 { system(“CLS”);//调用DOS命令CLS能够清屏 printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);benGetTime();NA tele;printf(“n请输入要删除记录的电话号码:n”);m++;scanf(“%s”,tele);int p,pp;p=Hash(tele);pp=p;while((H->elem[pp]!=NULL)&&(eq(tele,H->elem[pp]->tel)==-1))pp=collision(p,c);if(H->elem[pp]!=NULL&&eq(tele,H->elem[pp]->tel)==1){ printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”);printf(“n以下是您需要要删除的信息:nn”,c); printf(“nn姓名t电话号tt地址n”); printf(“_____________________________________________________n”); printf(“%st%stt%sn”,H->elem[pp]->name,H->elem[pp]->tel,H->elem[pp]->add); printf(“_____________________________________________________n”); printf(“n”); (H->elem)[pp]->tel[0]=' '; printf(“删除成功!!”);} else printf(“n此人不存在,删除不成功!n”);benGetTime();getchar();printf(“ #####n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);21 printf(“ #####n”);getchar();} void Save(HashTable * H)//将记录保存到指定文件 { system(“CLS”); FILE* fp; if((fp=fopen(“record.txt”,“w”))!=NULL) { fprintf(fp,“ #####n”);fprintf(fp,“==================== → 用户信息记录表 ← ===================n”); fprintf(fp,“ #####n”);for(int i=0;i { if((H->elem)[i]!=' ') { fprintf(fp,“======n”);fprintf(fp,“联系人姓名:%sn”,H->elem[i]->name);fprintf(fp,“联系人电话:%sn”,H->elem[i]->tel);fprintf(fp,“联系人地址:%sn”,H->elem[i]->add); fprintf(fp,“======n”); } } fclose(fp); printf(“ #####n”);printf(“==================== → 用户信息记录表 ← ===================n”); printf(“ #####n”); benGetTime();22 printf(“nn恭喜你!成功储存,你能在record.txt找到相应纪录n”); printf(“ #####n”); system(“pause”); } else { benGetTime(); printf(“抱歉,保存记录失败!”); system(“pause”); } } void Load(){ system(“CLS”);ifstream inFile;inFile.open(“record.txt”);// 打开文件 string str;// 行字符串缓存 if(inFile.is_open())// 若成功打开文件 { while(!inFile.eof())// 若未到文件结束 { getline(inFile, str, 'n');// 读取一行内容,并存入缓存str中,'n'表示一行结束的回车符 cout << str << endl;// 把缓存内容输出到屏幕 } } inFile.close();printf(“ #####n”);printf(“◇◆请按ENTER返回功能操作菜单◇◆n”);printf(“ #####n”);getchar();} void Quit()//结束 { system(“cls”);23 system(“color F0”); printf(“ n”); printf(“☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★n”); printf(“ 谢谢使用!再见!!n”); printf(“☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★n”); printf(“ n”);} int main(int argc, char* argv[]){ system(“color F0”);system(“CLS”);//调用DOS命令CLS能够清屏 int c,flag=1;HashTable *H;H=(HashTable*)malloc(LEN);for(int i=0;i case 0:Quit();return 0;break;case 10:;;break;default: printf(“你输错了,请重新输入!”);printf(“n”);} system(“CLS”);} return 0;} 八、测试报告 首先在编程过程中最先遇到的问题是用int整形定义电话号只能存10位,而现在手机号都为11位,用double双精度浮点型在进行哈希函数时会有错误,我们组最后经查询与询问老师后确定的解决办法是以字符串形式进行存储,哈希函数进行计算时把字符串转换成整型数。 起初我们在进行本地保存和读取是数据时是以数据块的形式进行存储但是后期遇到问题在进行修改和删除时过于复杂和繁琐,违背了程序的本意,经网上与书籍查询和老师的指导最后换为以字符进行存储.在建立哈希函数后进行的二次探测在散列的(1,-1,4,-4,9,-9。。。)的算法没有及时总结出来,最后经我组讨论以如下方法解决: Status collision(int p,int &c)//冲突处理函数,采用二次探测再散列法解决冲突 { int i,q;i=c/2+1;while(i { return q; } else { i=c/2+1; } } else { q=(p-i*i)%HASHSIZE;c++;if(q>=0) { return q; } else { i=c/2+1; } } } return UNSUCCESS;} 第一次c传进来的值为0运行时i为1,c%2=0,c++(c为1),p+i*i(i*i=1)。 第二次c传进来的值为1运行时i仍然为1(因为i是整型),c%2不等于0,p-i*i(i*i=1),c++(c为2)。下面为程序的运行测试: 进入界面首先输入1创建通讯录; 提示创建成功输入回车直接进入添加功能; 输入添加数1,姓名电话和地址然后回车确认,提示添加成功; 回车退回选单输入2进入追加通讯信息功能; 输入2添加两个记录提示添加成功按回车回到选单; 输入3进入建表功能提示有三个记录冲突数为2,***与***冲突; 回车回到选单是,输入4进入查询功能; 输入电话号回车显示查询成功,显示信息; 如果不存在这显示不成功; 回车返回选单输入5进入删除功能,输入电话号; 显示删除信息,提示删除成功; 回车返回选单,输入6进入修改功能,输入电话号; 查询到信息则显示并提示输入新信息人,输入后提示成功; 没有提示侧人不存在; 回车返回选单,输入7查看所有信息; 回车返回选单,输入8保存信息到record.txt中; record.txt文件中的信息; 输入9读取信息,显示所有已存信息; 回车返回选单,输入0显示再见,退出程序。