设计通讯录管理系统

2022-09-22 版权声明 我要投稿

第1篇:设计通讯录管理系统

农田信息远程监控系统的通讯方式设计

【摘要】 介绍了农田监控系统数据传输的通讯工作原理,阐述了其关键技术的设计并对各种通讯技术进行比较。在一定范围的农田内, 实现了对农田土壤墒情、作物周围多种气象参数的采集与传输 ,为后续的数据处理提供了详实的基础数据,进而可实时指导农作物的生产管理,大大降低了农业科研人员的劳动强度。

【关键词】 农田 监控系统 通讯技术 信息传输 数据

一、引言

农作物的生长、发育和产量形成,同农田环境各因素之间有着密切的关系,尤其是土壤墒情和农作物生长关键期的气象参数,其中温度和湿度影响农作物的发育速度,光照影响作物的光合作用。

通过合理的调节这些因子,可以有效的增加农作物的产量或降低极端情况对作物产量的影响。通过获得土壤墒情和农作物生长关键期的气象参数并进行远程传输,可为农作物的精细化生产和产量预估提供坚实的数据支持,有效提高农田管理的信息化和自动化水平。

二、 各种通讯技术的对比

1、通信技术的快速发展,为农田信息化管理提供了一个良好的平台和技术支持。从最初的模拟信号方式全面升级到数字信号方式,通信的方式也越来越多元化。根据信号传输介质,农田信息传输方式可分为有线通信方式和无线通信方式,在有线通信方式之中,RS485、CAN总线通信方式和基于掌上电脑的通信方式是其主要形式,已被应用于农业机械多传感器集成和农田信息采集。

无线通信方式可分类为长距离通信(GSM、GPRS等)和短距离通信(蓝牙、ZIGBEE等)。显然的,由于有线通信方式传输距离有限、布线难、不易维护等局限性在农业监测领域得不到广泛应用,因此,采用无线通信方式成为进行远程监控的首选。

分析这几种通信方式,蓝牙、ZIGBEE和RFID等无线传输方式因为传输距离的不足主要用于温室环境监控、农业物流识别等方面;而无线广播系统等传播的是模拟信号并且单向传输,显然不适合应用于精准农业系统;专用数据传输网能达到通信要求,但是费用过于昂贵,工程过于庞大,可操作性太差;其它方式中无线局域网只能覆盖小范围地方,并且短波电台也是费用昂贵;而采用无线传感器网络[3],需要考虑节点携带能量,以及传感器网络的部署和监测及覆盖与连接的关系等方面问题,如果能量供应和相应的协议问题得不到解决,通常会导致网络崩溃。

三、通讯技术的原理及选择

GSM 是一个蜂窝型网络,可以运行在不同的无线电频率上,目前工作的两个主要频段分别是 900MHz 和1800MHz,其中 GSM900 频段的双工间隔是 45MHz,有效带宽是 25MHz,载频数为 124 个,每个载频拥有 8 个信道;GSM1800 频段的双工间隔是95MHz,有效带宽是 75MHz,载频数为 374 个,每个载频拥有 8 个信道。作为 GSM 技术的延续,GPRS 技术[4]应用 TDMA 信道,不必使用现行无线通信应用所需的中介转换器,就可以实现通信连接和数据中速传输。

在 GPRS 分组交换的通信过程中,无需提前分配信道建立连接,而是根据到达的数据包头信息临时寻找信道进行数据发送,这种共享使用信道的方式可以实现信道资源的合理利用。

四、方案设计与实现

数据信息传输模块的硬件包括CP1L-M30DT-D、CP1W-CIF01、GPRS DTU。监测区内农田环境数据信息经由相应的传感器模块采集和CP1W-AD041模拟量接收模块的AD转换,并将转换后的数字形式的数据信息存储到CP1LM30DT-D的数据存储区(DM)。CP1W-CIF01模块可以扩展CP1L-M30DT-D的功能,使CP1L-M30DT-D实现RS-32C数据通信,从而实现CP1L-M30DT-D模块与GPRS DTU模块的连接和数据通信,再由GPRS DTU模块将数据信息经无线网络上传至上位机。

五、结束语

以野外农田环境为研究对象,设计了一种基于 GPRS 技术的远程农田信息采集系统。试验证明:该系统实现了对农田的土壤墒情以及农作物周围的温度、湿度、光照强度和CO2浓度等环境信息的全面连续自动监测,大大提高了工作效率,提高了农业管理的自动化和信息化水平,都农业生产和科学试验具有一定的指导作用。

参 考 文 献

[1] 郜向阳,王库,李墨雪.GPRS无线数据传送在农情监测系统中的应用[J].农机化研究,2006(6):186-188.

[2] 杨玮,李民赞,王秀.农田信息传输方式现状及研究进展[J].农业工程学报,2008,24(5):297-300.

[3] 刘慧韬.基于GPRS的环境监测网络系统研究与实现[D].武汉:华中科技大学,2006.

[4] 韩斌杰.GPRS原理及其网络优化.机械工业出版社.2003.

[5] 何庆泥,周怀北. GPRS 数据传输技术及实时数据采集应用.通讯与计算机,2005,7:77-81.

作者:李凯 张新聚 岳彦芳

第2篇:嵌入式GPRS无线通讯系统设计研究

摘要:嵌入式GPRS无线通信系统不仅具有很强的实用性,其性价比也非常高,本文利用S3C244B0X芯片实现了一个能够收发短信的无线通信系统,希望可以为实践提供借鉴。

关键词:GPRS;无线通讯系统;串口

无线通信具有非常强的灵活性,是当前最有吸引力的一种通信方式。当前在GPRS无线数据应用方面,很多发达国家已经非常普及,为其生产工作提供了很大的便利。另一方面,嵌入式系统也已经融入到了我们生活的方方面面。因此,开发出一款嵌入式GPRS无线通信系统将能够在很多领域发挥出作用,具有很强的实践意义。

1 硬件设计

在无线通信的过程中,既要实现内容的输入,还要实现对于数据的网络传输,因此,系统的主体部分将包括CPU、ROM以及ROM等,这些构成了计算机最小系统。本文在硬件方面使用的是三星公司生产的S3C244B0X芯片,它是一款32位RISC处理器,主要面向的是低成本、低功耗以及体积下的一些应用以及手持设备。

在硬件结构设计方面,S3C244B0X芯片的最下系统主要系统电源、系统晶振电路、复位电路、JTAG接口电路。下图为S3C244B0X芯片:

2 GPRS模块通信

2.1 PPP拨号脚本.GPRS系统在接入Internet的时候使用的是PPP协议。这一协议的设计主要是为两个实体间的数据包传输而服务的。对于GPRS模块来说,它提供了RS——232接口,在嵌入式系统中可以进行PPP脚本拨号程序的编写,对GPRS模块进行直接驱动使其连接的Internet和GPRS骨干网中,由此数据就能够经过TCP/IP通道发送至具备GPRS网络的私有或公网IP地址主机上,进而实现了数据无线传输。

在Linux的系统下,拨号脚本程序所需要使用的程序有pppt以及chat,其中PPP的守护程序为pppd程序,这一程序主要对PPP协议提供支持,主要的作用是建立服务器的PPP连接,并对其进服务使其更好地用以数据的传输。chat程序的作用主要是拨号并对等待进行提示,以及对输入用户名及密码等信息进行提示。具体来说,pppd及chat之间的调用关系为:(1)pppd程序将会对chat会话程序进行调用;(2)chat程序负责拨号,将会启动pppd程序,进行身份的验证,然后结束chat会话程序;(3)pppd程序将会继续chat程序的工作,和服务器端的pppd程序握手,实现PPP连接。

嵌入式Linux系统中通过shell脚本实现GPRS拨号脚本程序,这些脚本程序有些类似于DOS中的批处理程序,能够是系统实现一些特定任务。为了远程终端能够接入GPRS,我们需要3个文件的编写,即:pppd—option,chat—diseonnect,chat—ocnnect。

2.2 SMS短消息服务。在SMS/GPRS规范中,短消息收发方面的规范主要有GSM03.38、GSM03.40以及GSM07.05。其中GSM03.38、GSM03.40主要对SMS技术实现进行描述,这里面包括编码方式。而GSM07.05则是对DTE—DCE的接口标准进行了规定,其中包含了AT命令集。

针对短消息的控制,主要有BlockMdoe,、PDuMdoe以及TextMdoe这三种模式,其中,Block模式在使用的过程中需要厂家的驱动支持,它已经被PDuMdoe取代,至于TextMdoe则属于纯文本方式,能够利用不同字符集,技术上来分析的话也可以应用到中文短消息的发送,主要应用于欧美一些地区。PDuMdoe是手机默认编码方式,能够应用所有字符集。

2.3 GPRS模块的使用。(1)GPRS模块的开关机。GPRS模块的开关机需要在其ON/OFF的引脚上发低电平,这种低电平的宽度为1s,如果模块已经是关机的状态,则一旦检测到这种低电平,OFF状态将会产生超时,进而将整个模块启动。如果模块处于开机的状态,则一旦检测到低电平,ON状态将进行一个中断的初始化,形成超时定时器,一般8秒之后就会进入到OFF状态。另外,全部AT命令操作都要在开机状态中才能够使用。(2)AT命令语法。ASCll字符构成了AT命令,其中除了+++以及A/这两个命令之外,其他的命令都是AT开头的,并以回车+换行作为结束,在一个命令行中,可以存在多条命令,不过总的字符数要低于200。其中AT命令中除了一些字符串参数以外对大小写是不敏感的,大部分命令在执行之后,都会返回参数。(3)初始操作AT命令。在开机以后,先要对模块进行一些测试、查询及配置,使其能够满足CPU的需求:测试串口,在开机的3到5s之后,将会把AT发送给模块,检查模块是否能够返回到OK,以此来检验串口激活与否,如果没有响应则表示开机操作中出现了问题。关闭回显,将ATEO命令发送至模块,关闭其串口的回显功能,这一功能主要是用来进行串口的测试以及方便对串口进行调试。在应用中,应把这一功能关闭,否则返回参数将和回显字符混合在一起。

2.4 PDU数据格式。在PDU串的表面,主要是由一串表面上是一串ASCll组成,它们为十六进制数或者为十进制数。在PDU串中,除了包含了消息本身,还包括一些其他的信息,比如SMS服务中心号码、回复号码、目标号码、服务时间以及编码方式等。另外,接受和发送的和PDU串在结构上也存在着一些差异。

对于发送内容的编码我们可以通过三种编码方式实现,具体来说有:7—bit编码、8—bit编码以及UCS2编码。在用户信息段中,容量最大为140字节,因此,三种编码方式所对应的短消息最大字符数分别为160、140以及70。

2.5 GPRS短消息发送及接收。(1)模块初始化。当我们将系统启动之后,要进行初始化工作:调用gprs_init()函数实现初始化,这包括了串口的初始化;调用gprs_pwr_on_off(GPRS_PWR_ON)函数进行模块复位。(2)键盘输入。在对信息进行发送的过程中要利用键盘对呼叫号码进行输入,因此我们要做好键盘的输入工作,主要是利用char gprs_get_key()这一函数获得输入的键值。(3)AT命令接收及发送。这一过程中是通过void gprs_send_cmd(char*cmdstring)函数将AT命令发送至GPRS模块之中;对于GPRS模块数据的接收则主要是利用int_gprs_recv_cmd(char*cmd)来实现的。(4)GPRS发送短消息。这一过程主要是通过对gprsSendMessage()函数进行调用来实现的,其声明为:BOOLgprsSendMessage(const SM_PARAM*pSrc);当发送成功的时候会返回TRUE,失败则返回FALSE。

3 结束语

本文只是对嵌入式GPRS无线通信系统设计中的短信应用方面进行了一定的探索,虽然能够实现一些无线数据的传输,但是在语音图像的传输、传输数据的认知加密以及如何提高数据传输的实时性方面都还有很多工作没有做,因此,还需要进一步的深入探讨。

参考文献

[1]崔登志,戴学丰,刘树东,单乘刚.用ARM控制CDMA无线Modem发送短消息[J].微计算机信息,2009,32.

[2]蔡其新,俞旭东.车载GPRS无线上网系统的设计[J].电脑与电信,2009,10.

作者:谢碚钢

第3篇:论VSAT卫星通讯地面站系统设计思路

【摘要】 VSAT卫星通讯地面站,对于接入型卫星天线及系统的建设,系统设计上需要考虑诸多因素,设计环节还需视系统实际建站情况具体分析。只要设计思路清晰严谨,具备理论及数据支撑,便能够有效的服务于生产建设工作。

【关键词】 VSAT 卫星通讯 设计思路

一、前言

目前VSAT(甚小天线地球站)系统广泛应用于陆地及海洋多种行业中,作为更为便捷、高效、稳定的通讯手段,尤以灾备、应急、救援、指挥、生产、娱乐等应用更为突出,广泛使用于地面应急指挥中心、偏远山区、海上钻采平台、船舶等环境。卫星通讯具有传输距离远,覆盖面广,对地理环境要求不高,建设快等优点,特别适合远离中心城市地面线路网络的通讯建设,通过电磁波作为传输介质,以同步卫星作为中转站,快速连接大型中心卫星地面站网络至远端,通过卫星调制解调器调制解调载波,实现双向网络数据传输,进而通过复用实现语音、数据等拓展应用。对于接入型衛星天线及系统的建设,系统设计上需要考虑诸多因素,设计环节还需视系统实际建站情况具体分析。

二、设计思路

卫星通讯地面站的建设及组网,无论是中小型中心站还是远端站,在设计上,需要满足如下规范:

《国内卫星通信地球站工程设计规范》(YD 5050-2005)

《国内卫星通信地球站设备安装工程验收规范》(YD/ T5017-2005)

《國内卫星通信小型地球站(VSAT)通信系统工程验收规范》(YD/T5028-2005)

在系统设计思路上,一切设计最终围绕建站的目的以及使用者的需求进行分析,即使用用户所需求的网络带宽多大,利用卫星链路传输的网络上承载什么业务。当了解用户需求后,设计一个卫星地面站的系统组成,需要考虑的因素有:

1、建设卫星地面站的地理位置,经纬度;

2、使用的卫星资源;

3、设备选取;

4、链路计算;

5、线缆选取。

具体来讲,当拿到用户需求后,分析出满足用户需求所使用的网络带宽,根据建站的地理位置经纬度,查找能够同时覆盖接入中心站和建设远端站的卫星资源,并需要掌握所使用卫星的参数。根据建站地点约束、环境、气候等选取卫星频段为C波段或者Ku波段,以及建站使用卫星天线的口径。通常情况下,使用QPSK的调制方式,2Mbps(上行+下行)卫星频宽资源,C波段卫星天线2.4米至4.5米口径或Ku波段1.2米至4.5米口径天线均满足使用。

在制定的天线口径条件下,根据需要使用的卫星与频宽,使用的调制方式,建站的经纬度作为前提条件,进行链路计算。其中需要考虑运行业务上保留3dB功率回退余量,保证卫星链路载波传输的稳定性。根据链路计算,匹配使用卫星功放的功率大小,同时听取卫星公司的建议选取合适的天线口径。

此外,还需要根据接入中心站的情况,以及使用的卫星转发器,确定天线使用的极化方式及极化方向。选取的卫星调制解调器也需要同中心站规格匹配。

线缆的选取是整套卫星地面站系统中最为重要的部分,线缆承载着载波传输、系统供电两个任务,整套系统信号质量是否良好,噪声余量调节是否富足,全部在于选取合适的传输线缆。根据卫星天线功放及低噪声放大器的匹配,现阶段最常用的设备载波传输工作在L波段(950-2150MHz)。Ku波段卫星天线,室内至室外敷设的电缆,基本上采用两根L波段低损电缆作为载波传输媒介,一收一发。C波段卫星天线,根据功放送电的需求,还需要额外敷设一根三芯电源线。

即使采用的L波段传输的低损耗信号线缆,在传输路径上依然存在损耗,这就需要根据实际室外部分至室内设备之间的线缆长度,选取合适的线缆标号(同轴电缆横截面积),计算路径损耗,达到室内外载波传输经过线缆路径的损耗后,依然能够落入卫星调制解调器使用最大频带需求的调解范围,并保留噪声余量的目的,使得载波有效传输。下面举一个设计案例,分析系统中信号线缆选取的设计思路。

图2是一套4.5米口径C波段中小型中心站系统设计图,主要展示了整套系统载波传输路径上噪声损耗的计算。

示例图中,采用100W收发一体机卫星功放,输出功率P1dB为49dBm,因该功放具备20dB增益补偿,最大增益为69dB。系统中总共含有7台卫星调制解调器工作,因此采用1:8合路器进行分路接入,衰减损耗9dB。采用的卫星调制解调器,噪声输出功率在-40至0dB之间,其最大输出噪声功率为0dB。

该系统室内1:8合路器至室外卫星功放之间的距离约为100米,拟定采用安德鲁LDF5-50(7/8)低损同轴电缆,该标号线缆100米损耗为5.18dB。为了验证所选用线缆是否合适,进行系统每调制解调器载波最大允许输出噪声功率计算。卫星功放考虑3dBm功率回退余量,调制解调器发射噪声功率以10dB有效值为基准。因此综合计算,在1:8合路器下,卫星调制解调器每载波最大允许噪声功率计算方法为:

49dBm(P1dB)-3dBm(回退余量)-10dB(有效值)-69dB(最大增益)+5.18dB(100米线缆损耗)+9dB(1:8合路器衰减)=-18.82dBm

通过计算得知,案例中卫星调制解调器每载波最大允许噪声功率完全在调制解调范围内,且在单个卫星调制解调器上具备约19dB的功率余量,即使卫星功放上行增益回退5dB,卫星调制解调器仍有14dB功率余量,这对于采用QPSK调制、3/4编码方式将是非常理想的数值,卫星链路将会非常稳定。这也就验证选取的线缆标号非常合适,不会因线路上的衰减影响了载波的传输,进而保证了卫星链路传输的稳定性。

三、卫星地面站建站流程及注意事项

建设卫星地面站如果是在陆地特别是城市中长期使用,需要至相关部门进行备案。影响楼宇等整体结构的建设,需要到当地建设委员会进行备案。卫星地面站具备一定的电磁辐射,还需要至建站当地无线电委员会进行申请备案,提供相应站点相关信息材料,由无线电委员会对站点进行电磁环境检测,出具合格使用报告后颁发电台运营执照,此后方可建设卫星地面站。

天线安装位置选取需保持周围环境空旷,对预计使用的卫星指向方向上避免楼群等高建筑物的遮挡。天线基础生根牢固,必须采取相应安全防护措施。室内外设备之间连接的线缆不宜过长,从经济成本上及施工难度上考虑避免使用过长、过粗信号线缆。特定的环境下,还需要考虑防雷措施及接地的良好性。

四、结语

设计一套VSAT卫星通讯系统方案考虑的因素有很多,但只要设计思路清晰严谨,具备理论及数据支撑,便能够有效的服务于生产建设工作。一套好的系统设计方案能够使实际应用建设工作更加便捷及高效,使建设后的系统运行更加稳定。

作者:赵希

第4篇:C语言课程设计学生通讯录管理系统设计

一、题目内容的描述

学生通讯录管理系统设计

设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:姓名、家庭地址、邮政编码、电话号码等等),通信录数据类型定义为结构体类型。由键盘输入数据(最好要考虑输入数据输入的格式及输入数据的有效性),然后进行以下的功能实现。程序要求主函数是一个功能选择菜单,其它各功能都用各自的函数实现。

功能要求如下:

1、能建立、修改和增删学生通讯录

2、能够按多种方式进行查询,例如按姓名、按电话号码等。

3、通讯录的数据保存在文件中,运行程序时将通讯录数据从文件读取到内存中。对通讯录进行增加、删除、修改学生数据后,提供功能菜单,可以将内存中修改过的通讯录重新保存至文件。

二、应用程序功能的详细说明

1、应用程序实现了可视化的系统操作界面。

2、对学生通讯录形成了系统化的管理,操作简便明了。

3、程序具有系统帮助,添加、显示、查询、刷新、删除、排序、保存、修改、读取学生通讯录的功能。各项功能均可按照文字提示操作,浅显易懂。

4、系统的各个功能模块都用函数的形式来实现(readfile()、seek()、modify()、sort()、insert()、del()、save()、menu())方便查看。

5.可以将信息保存在文件(“student.txt“)中,亦可将信息从文件中读取出来,灵活方便。

三、主要模块的算法描述

学生通讯录管理系统

刷新学生信息readfile()

查询学生信息seek()

增加学生信息insert()

显示学生信息display()

退出系统

修改学生信息modify()

删除学生信息del()

保存当前学生信息save()

汇总当前学生数目number()

系统帮助help()

查询学生信息

按姓名查询

退出

按学号查询

开始

以可读写的方式打开一个数据文件

将此文件的内容读出,并存入一个新的结构体类型的数组中。

调用menu()菜单函数

进入while()主循环

输入1-8中的一数值,选择相应操作。

输入是否为0

判断键值,调用相应函数,完成相应功能。

是否已对修改存盘

调用函数save()函数,进行写数据文件操作

结束

模块一:头文件,变量定义,函数的声明

对系统所使用的变量进行定义,对函数进行声明。

模块二:录入学生信息

声明函数void

readfile(),说明一个文件指针FILE

*fp打开文

件“student.txt“。

模块三:学生信息的查找

声明void

seek()为查找函数,通过switch(item)设定用学号查找,

用姓名查找两个分支。

模块四:学生信息的修改

声明void

modify()为学生信息修改函数,通过switch(item)设定

所要修改的项目。

模块五:刷新学生信息

声明void

sort()将录入学生系按升序排列,用的是“冒泡排序法”

实现排序。

模块六:增加学生信息

声明void

insert()插入学生信息,先通过判断学生是否存在,若

否则继续输入,若是则跳出,重新循环。

模块七:删除学生信息

声明void

del()实现学生信息删除,通过学号对比确定要删除的信

息,然后用后一个替换掉。

模块八:显示学生信息

通过display()函数输出学生信息。

模块九:保存信息

通过fp=fopen(“student.txt“,“w“);写入信息。

模块十:汇总学生数目

通过number()函数将已有男女生及总学生数目汇总出来。

模块十一:系统帮助

通过help()函数帮助操作。

模块十二:界面菜单

通过switch(num)调用以上各函数,实现功能。

1、程序采用模块化设计,各模块独立,可分块调试,个模块由主函数控制调用。

2、其中主要模块(readfile()、seek()、modify())都是利用数组,指针来实现数据结构设计。

3、数据库设计的任务是确定系统所需要的数据库。数据库是表的集合,通常一个系统只需一个数据库。设计人

是根据需求分析,确定数据库所包含的表及字段、表间的关系,然后具体确定表的结构,包括字段名、字段类型及宽度,需要的索引等。根据对需求得到的数据结构进行分析,按数据输入输出的要求,确定表和表间的关系,进行验证、调整、修改、完善,使其能够实现用户对数据和功能的要求。通讯信息表包括以下字段:学号,

姓名,年龄,性别,出生年月,地址,电话,

E-mail。学号为主索引。

四、结束语

我设计的程序总体功能大都能够运行顺利,但有许多地方比较复杂,需要进一步修改,进行简化。通过这次课程设计的锻炼,我收获很多,具体归纳为以下几点:

1、首先,也是最重要的一点,学会如何将一个复杂的问题简化,将一个较大的问题分成几个小问题,再一一解决这些小问题。在设计一个程序之前,要学会对程序功能进行规划,将其分为几个不同的功能模块,要思路清晰,简单易用;

2、学会灵活运用已有的知识,同时适当的拓展一些知识;比如,这次设计过程中,有一些函数以前就很少用到,甚至没有见过,但对程序的设计及用户界面的改善带来方便;

3、解决问题时,要尽可能考虑全面。每一个细节都很重要,既要避免功能的重复,也要避免功能疏漏的地方!

4、在这次课程设计过程中,参考了许多资料,发现C语言真的很有意思!比如我看到一个关于用C语言编写的小程序:五子棋、俄罗斯方块、推箱子等,等这次课程结束后,我就想利用C语言编写这些小游戏。曾经认为C是个挺枯燥的课程,现在发现这不仅仅是个简单的课程,而是个很实用的计算机工具!

五、程序源代码清单

#include

#include

#include

#define

BUFLEN

100

#define

LEN

15

#define

N

100

struct

record

{

char

code[LEN+1];

char

name[LEN+1];

int

age;

char

sex[3];

char

time[LEN+1];

char

add[30];

char

tel[LEN+1];

char

mail[30];

}stu[N];

int

k=1,n,m;

void

readfile();

void

seek();

void

modify();

void

insert();

void

del();

void

display();

void

save();

void

number();

void

menu();

int

main()

{

while(k)

menu();

system(“pause“);

return

0;

}

void

readfile()//刷新学生信息

{

char

*p=“student.txt“;

FILE

*fp;

int

i=0;

if

((fp=fopen(“student.txt“,“r“))==NULL)

{

printf(“Open

file

%s

error!

Strike

any

key

to

exit!“,p);

system(“pause“);

exit(0);

}

while(fscanf(fp,“%s

%s%d%s

%s

%s

%s

%s“,stu[i].code,stu[i].name,&stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)

{

i++;

i=i;

}

fclose(fp);

n=i;

printf(“录入完毕! “);

}

void

seek()//查询学生信息

.

.

.

.

.

.

void

modify()//修改学生信息

.

.

.

.

.

.

void

sort()//对学生信息按学号排序

{

int

i,j,*p,*q,s;

char

temp[10];

for(i=0;i

{

for(j=n-1;j>i;j--)

if(strcmp(stu[j-1].code,stu[j].code)>0)

{

strcpy(temp,stu[j-1].code);

strcpy(stu[j-1].code,stu[j].code);

strcpy(stu[j].code,temp);

strcpy(temp,stu[j-1].name);

strcpy(stu[j-1].name,stu[j].name);

strcpy(stu[j].name,temp);

strcpy(temp,stu[j-1].sex);

strcpy(stu[j-1].sex,stu[j].sex);

strcpy(stu[j].sex,temp);

strcpy(temp,stu[j-1].time);

strcpy(stu[j-1].time,stu[j].time);

strcpy(stu[j].time,temp);

strcpy(temp,stu[j-1].add);

strcpy(stu[j-1].add,stu[j].add);

strcpy(stu[j].add,temp);

strcpy(temp,stu[j-1].tel);

strcpy(stu[j-1].tel,stu[j].tel);

strcpy(stu[j].tel,temp);

strcpy(temp,stu[j-1].mail);

strcpy(stu[j-1].mail,stu[j].mail);

strcpy(stu[j].mail,temp);

p=&stu[j-1].age;

q=&stu[j].age;

s=*q;

*q=*p;

*p=s;

}

}

}

void

insert()//增加学生信息

.

.

.

.

.

.

void

display()//显示当前学生信息

{

int

i;

printf(“所有学生的信息为: “);

printf(“学生学号,

学生姓名,

年龄,

性别,

出生年月,

地址,

电话,

E-mail “);

printf(“-------------------------------------------------------------------- “);

for(i=0;i

{

printf(“%6s,

%7s,

%5d,

%5s,

%9s,

%8s,

%10s,

%14s “,stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

}

void

save()//保存当前学生信息

{

int

i;

FILE

*fp;

fp=fopen(“student.txt“,“w“);

for(i=0;i

{

fprintf(fp,“%s,

%s,

%d,

%s,

%s,

%s,

%s,

%s “,stu[i].code,stu[i].name,stu[i].age,

stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);

}

fclose(fp);

}

void

number()//汇总学生数目

{

int

i,girl,boy=0;

for(i=0;i

if(strcmp(stu[i].sex,“1“)==0)

{boy++;}

girl=n-boy;

printf(“男生人数是:%d 女生的人数是:%d “,boy,girl);

printf(“总的学生人数为:%d“,n);

}

void

help()//系统帮助

{

printf(“输入性别时男为1,女为2“);

printf(“ 3.增加学生信息后,切记保存按7; “);

printf(“ 4.谢谢您的使用! “);

}

void

menu()//可视化的系统操作界面

{

int

num;

printf(“

学生通讯录管理系统

“);

printf(“

*********************系统功能菜单************************

“);

printf(“

--------------------------------

-------------------------------

“);

printf(“

1.刷新学生信息

2.查询学生信息

“);

printf(“

*********************************************

“);

printf(“

3.修改学生信息

4.增加学生信息

“);

printf(“

*********************************************

“);

printf(“

5.按学号删除信息

6.显示当前信息

“);

printf(“

*********************************************

“);

printf(“

7.保存当前学生信息

8.汇总学生数目

“);

printf(“

*********************************************

“);

printf(“

9.系统帮助

10.退出系统

“);

printf(“

---------------------------------

------------------------------

“);

printf(“

************************************************************

“);

printf(“请选择菜单编号:“);

scanf(“%d“,&num);

switch(num)

{

case

1:readfile();break;

case

2:seek();break;

case

3:modify();break;

case

4:insert();break;

case

5:del();break;

case

6:display();break;

case

7:save();break;

case

8:number();break;

case

9:help();break;

case

10:k=0;break;

default:printf(“请在1-10之间选择 “);

}

}

第5篇:学校通讯录管理系统数据库设计

4.2 数据库设计

在本实例中使用的是SQL Server 2000数据库管理系统。数据库服务器安装的位置为本机,数据库名称为communicationserver。下面将介绍数据库分析和设计、数据表的创建、数据表关系图和创建存储过程的内容。

4.2.1 数据库分析和设计

在本节中,将根据上一节系统功能的设计分析创建各数据表的实体E-R关系图,它是数据库设计非常重要的一步,下面用E-R图的形式表示出各实体的属性。

1. 用户E-R实体图

用户的实体具有用户ID、密码、姓名、性别、电话、E-mail、用户权限7个属性,ER图如图4-5所示。

姓名用户权限性别电话用户E-mail用户ID图4-5 用户E-R实体图

密码 2. 地区E-R实体图

地区的实体具有地区编号、地区名称2个属性,E-R图如图4-6所示。

地区编号地区图4-6 地区E-R实体图

地区名称 3. 职务E-R实体图

职务的实体具有职务编号、职务名称2个属性,E-R图如图4-7所示。

职务编号职务图4-7 职务E-R实体图

职务名称 4. 学校E-R实体图

学校的实体具有学校名称、学校所在地区、在校学生人数3个属性,可用E-R图表示,如图4-8所示。

学校名称学校在校学生人数学校编号学校所在地区

图4-8 学校E-R实体图

5. 通讯录E-R实体图

通讯录的实体具有联系人姓名、地址、联系电话、所属职务、所在学校、所在单位、所属地区7个属性,E-R图如图4-9所示。

联系人姓名联系电话所在单位通讯录所在学校图4-9 通讯录E-R实体图

所属地区地址所属职务

4.2.2 数据表的创建

在上面一节中讲解了实体的E-R图,本节中将根据E-R图的内容,创建企业信息管理系统中的各数据表,在此系统中共涉及到5个数据表的应用,分别为如下。

1、字段采用camel 风格定义

2、用不同颜色区分字段 主键:蓝色 外键:白色

既是主键又是外键:淡蓝色 普通字段:青绿 1. 用户信息表

用户信息表(Users)用于存放校园通讯录信息管理系统中所有系统管理用户的信息,用户管理是每个管理系统中必不可少的,也是比较重要的一部分,本系统中进行了较详细的设计,表中各个字段的数据类型、大小以及简短描述如表4-1所示。

表4-1 用户信息表 TB_Users 字段名称 sUserID sUserName sUserPassword sUserSex sUserEmail sUserPhone sUserPurview 2.地区信息表

地区信息表(Client)用于存放校园通讯录信息管理系统中所有地区的信息,地区信息的管理是系统中比较重要的内容,地区的名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-2所示。

表4-2 地区信息表

TB_Area 字段名称 sAreaID sAreaName 3. 职务信息表

职务信息表(Compact)用于存放校园通讯录信息管理系统中所有职务的信息,职务信息的管理是系统中比较重要的内容,职务的名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-3所示。

表4-3 职务信息表

TB_Duty

字段名称 sDutyID sDutyName

字段类型 varchar(20) varchar(50)

字段描述 职务编号[PK] 职务名称

字段类型 varchar(20) varchar(50)

字段描述 地区编号[PK] 地区名称

字段类型 varchar(10) varchar (20) varchar(10) char(2) varchar(20) varchar(20) char(1)

字段描述 用户ID [PK] 用户姓名

记录用户登入本系统时的用户密码

用户性别 用户E-mail 用户的联系电话 用户权限 4. 学校信息表

学校信息表(Com_detail)用于存放校园通讯录信息管理系统中所有学校的信息,学校信息的管理是系统中比较重要的内容,学校名称是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-4所示。

表4-4 学校信息表

TB_School 字段名称 sSchoolID sSchoolName iStudentNum sAreaID_FK 5. 通讯录信息表

通讯录信息表(product)用于存放校园通讯录信息管理系统中所有通讯录的信息,通讯录信息的管理是系统中比较重要的内容,联系电话是其中的关键信息,表中各个字段的数据类型、大小以及简短描述如表4-5所示。

表4-5 通讯录信息表

TB_AddrList

字段类型 varchar(20) varchar(50) int varchar(20)

字段描述 学校编号[PK] 学校名称 学校人数 地区编号[FK] 字段名称 iAddrID sLinkName sAddress sLinkPhone sUnitName sSchoolID_FK sDutyID_FK sAreaID_FK

字段类型 int varchar(50) varchar(20) varchar(20) varchar(50) varchar(20) varchar(20) varchar(20)

字段描述

通讯录编号(自动编号)[PK] 联系人姓名 地址 联系电话 工作单位 学校编号[FK] 职务编号[FK] 地区编号[PK] 4.2.3 创建视图

学校信息视图表V_SchoolInfo 字段名称 sSchoolName sAreaName

字段类型 varchar(50) varchar(50)

字段描述 学校名称 地区名称 sLinkName sDutyName sLinkPhone

create view V_SchoolInfo as

varchar(20) varchar(20) varchar(20)

联系人姓名 职务名称 联系电话

select sSchoolName,sAreaName,sLinkName,sDutyName,sLinkPhone from TB_AddrList,TB_School,TB_Duty,TB_Area where TB_AddrList.sSchoolID_FK=TB_School.sSchoolID

and and TB_AddrList.sDutyID_FK=TB_Duty.sDutyID TB_AddrList.sAreaID_FK=TB_Area.sAreaID 4.2.4 数据表关系图

在学校通讯录信息管理系统中各数据表的关系图,如图4-10所示。在TB_School数据表中,TB_Area数据表的sDutyID_FK字段作为外键。在TB_AddrList数据表中,TB_School数据表的sSchoolID_FK字段、TB_Area数据表中的sAreaID_FK字段和TB_Duty数据表中的sDutyID_FK字段作为外键。

图4-10 数据表关系图 4.2.5 创建存储过程

因为使用存储过程可以给系统带来优化,所以系统将很大程度地使用存储过程,在系统中共应用了10个存储过程,以Add开头的存储过程为系统中信息添加的存储过程,以Update开头的存储过程为系统中信息修改的存储过程,这些存储过程将会在系统程序文件的后台应用中调用,下面将对系统中应用的存储过程进行解释。

1. AddTB _Users存储过程

AddTB _Users存储过程用于向用户信息表中添加新的用户信息。以下代码表示了这一存储过程。 CREATE PROCEDURE AddTB_Users @sUserID varchar(10), @sUserName varchar(20), @sUserPassword varchar(10), @sUserSex char(2), @sUserEmail varchar(20), @sUserPhone varchar(20), @sUserPurview char(1) AS

INSERT INTO TB_Users ( sUserID, sUserName, sUserPassword, sUserSex, sUserEmail, sUserPhone,

sUserPurview )

VALUES ( @sUserID, @sUserName, @sUserPassword, @sUserSex, @sUserEmail, @sUserPhone, @sUserPurview ) GO 2. Add 存储过程 Add TB_Area存储过程用于往地区信息表中添加新的地区信息。以下代码表示了这一存储过程。

CREATE PROCEDURE AddTB_Area

@sAreaID varchar(20),

@sAreaName varchar(50) AS

INSERT INTO TB_Area (

sAreaID,

sAreaName )

VALUES (

@sAreaID,

@sAreaName ) GO 3. AddTB_Duty存储过程

AddTB_Duty存储过程用于往职务信息表中添加新的职务信息。以下代码表示了这一存储过程。 CREATE PROCEDURE AddTB_Duty

@sDutyID varchar(20),

@sDutyName varchar(50) AS

INSERT INTO TB_Duty (

sDutyID,

sDutyName )

VALUES (

@sDutyID,

@sDutyName ) GO 4.AddTB_School存储过程

AddTB_School 该存储过程用于往学校信息表中添加新的学校信息。以下代码表示了这一存储过程。 CREATE PROCEDURE AddTB_School

@sSchoolID varchar(20),

@sSchoolName varchar(50),

@iStudentNum int,

@sAreaID_FK varchar(20) AS

INSERT INTO TB_School (

sSchoolID,

sSchoolName,

iStudentNum,

sAreaID_FK )

VALUES (

@sSchoolID,

@sSchoolName,

@iStudentNum,

@sAreaID_FK ) GO 5. AddTB_AddrList存储过程

AddTB_AddrList存储过程用于往通讯录信息表中添加新的通讯录信息。以下代码表示了这一存储过程。 CREATE PROCEDURE AddTB_AddrList

@sLinkName varchar(20),

@sAddress varchar(50),

@sLinkPhone varchar(20),

@sUnitName varchar(20),

@sSchoolID_FK varchar(20),

@sDutyID_FK varchar(20) AS

INSERT INTO TB_AddrList (

sLinkName,

sAddress,

sLinkPhone,

sUnitName,

sSchoolID_FK,

sDutyID_FK )

VALUES (

@sLinkName,

@sAddress,

@sLinkPhone,

@sUnitName,

@sSchoolID_FK,

@sDutyID_FK ) GO 6. UpdateTB _Users存储过程

UpdateTB _Users存储过程用于修改用户信息表中,符合条件的用户信息,其中密码信息不可以更新。以下代码表示了这一存储过程。 CREATE PROCEDURE UpdateTB_Users

@sUserID varchar(10),

@sUserName varchar(20),

@sUserSex char(2),

@sUserEmail varchar(20),

@sUserPhone varchar(20),

@sUserPurview char(1) AS

UPDATE TB_Users SET

sUserID =@sUserID,

sUserName =@sUserName,

sUserSex=@sUserSex,

sUserEmail=@sUserEmail,

sUserPhone=@sUserPhone,

sUserPurview=@sUserPurview WHERE

sUserID =@sUserID GO 7. UpdateTB_Area存储过程

UpdateTB_Area存储过程用于修改地区信息表中的地区信息。以下代码表示了这一存储过程。 CREATE PROCEDURE UpdateTB_Area

@sAreaID varchar(20),

@sAreaName varchar(50) AS

UPDATE TB_Area SET

sAreaID =@sAreaID,

sAreaName =@sAreaName WHERE

sAreaID =@sAreaID GO 8. UpdateTB_Duty存储过程

UpdateTB_Duty存储过程用于修改职务信息表中的职务信息。以下代码表示了这一存储过程。

CREATE PROCEDURE UpdateTB_Duty

@sDutyID varchar(20),

@sDutyName varchar(50) AS

UPDATE TB_Duty SET

sDutyID =@sDutyID,

sDutyName =@sDutyName WHERE

sDutyID =@sDutyID GO 9. UpdateTB_School存储过程

UpdateTB_School存储过程用于修改学校信息表中的学校信息。以下代码表示了这一存储过程。 CREATE PROCEDURE UpdateTB_School

@sSchoolID varchar(20),

@sSchoolName varchar(50),

@iStudentNum int,

@sAreaID_FK varchar(20) AS

UPDATE TB_School SET

sSchoolID =@sSchoolID,

sSchoolName =@sSchoolName,

iStudentNum =@iStudentNum,

sAreaID_FK=@sAreaID_FK WHERE

sSchoolID =@sSchoolID GO 10. UpdateTB_AddrList存储过程

UpdateTB_AddrList存储过程用于修改通讯录信息表中的通讯录信息。以下代码表示了这一存储过程。

CREATE PROCEDURE UpdateTB_AddrList

@iAddrID int,

@sLinkName varchar(20),

@sAddress varchar(50),

@sLinkPhone varchar(20),

@sUnitName varchar(20),

@sSchoolID_FK varchar(20),

@sDutyID_FK varchar(20) AS

UPDATE TB_AddrList SET

sLinkName =@sLinkName,

sAddress =@sAddress,

sLinkPhone =@sLinkPhone,

sUnitName=@sUnitName,

sSchoolID_FK=@sSchoolID_FK,

sDutyID_FK=@sDutyID_FK WHERE

iAddrID =@iAddrID GO

第6篇:数据结构课程设计—java通讯录管理系统

import java.io.*; import java.util.*; public class LittleProgram {

static boolean isDelete = true;

static boolean isFind = true;

public static void main(String [] args)//主方法,程序从这里开始运行

throws IOException,NumberNotFoundException

{

int choice=-1;

do{

LittleProgram lp = new LittleProgram();

System.out.println();

System.out.println("

#");

System.out.println();

System.out.println(" 通訊錄管理系统");

System.out.println("

请用号码插入,查找,修改,删除数据");

System.out.println();

System.out.println("

# ");

System.out.print("1.增加号码: "+

"2.查找号码: "+

"3.删除号码: "+ "4.清除所有号码: "+ "5.把号码全部打印到屏幕 "+ "6.把通讯录按号码排序 "+

"7.修改号码 "+

"8.统计通码讯录的总人数 "+

"9.关于作者 "+

"0.退出程序. " +

"输入:");

BufferedReader in =

//从终

new BufferedReader(

//端接

new InputStreamReader(System.in));//收数

String inputLine = in.readLine();

//字选

choice= Integer.valueOf(inputLine).intValue();//项;

switch(choice)

{

case 1: {//1.增加号码

String str = lp.inputData();

lp.addData(str);

System.out.println("增加号码成功.");

timeOut(1);

}break;

case 2: {//2.查找号码

long find = 0;

System.out.print("请输入你要查找的号码:");

BufferedReader inn =

new BufferedReader(

new InputStreamReader(System.in));

String inputLi = inn.readLine();

find = Integer.valueOf(inputLi).longValue();

lp.findData(find);

timeOut(2);

}break;

case 3: {//3.删除号码

long deleteNumber = 0;

System.out.print("请输入你想删除号码:");

BufferedReader bf =

new BufferedReader (

new InputStreamReader(System.in));

String inputL = bf.readLine();

deleteNumber = Integer.valueOf(inputL).longValue();

lp.deleteData(deleteNumber);

if(isDelete)

System.out.println("删除号码成功!");

timeOut(1);

}break;

case 4: {

lp.clearData();//4.清除所有号码

timeOut(1);

}break;

case 5: {

print();//5.把号码全部打印到屏幕

timeOut(2);

}break;

case 6: {

lp.numSort();//6.把号码按号码排序

System.out.println("按照号码从小到大排序成功! "+

"排序后: ");

print();

timeOut(2);

}break;

case 7: {

lp.rewrite();//7.修改号码

timeOut(2);

}break;

case 8: {

int count = lp.count();

System.out.println("共有"+count+"个号码记录.");

timeOut(2);

}break;

case 9: {

System.out.print(" 李雪萍 "+

" 安徽理工大學理學院 "+

" QQ:1154646392 ");

timeOut(4);

}break;

}}while (choice != 0);

System.out.println("Bye! ^-^");

System.exit(0);

}

public String inputData()//从终端接收数据的方法,返回字符串

throws IOException,NumberFormatException

{

System.out.print("请依次输入 :号码 姓名 地址 生日 " +

"每项数据请用空格隔开:");

String all = "";

try{

BufferedReader in =

//从终

new BufferedReader (

//端接

new InputStreamReader(System.in));

//收数

String inputLine = in.readLine();

//据

StringTokenizer str =

new StringTokenizer(inputLine," ");//接收的数据用空格隔开,这个类用来提取每个字符串

long num = Integer.valueOf(str.nextToken()).longValue();//号码

String name = (String)str.nextToken();

//姓名

String add = (String)str.nextToken();

// 地址

String birth = (String)str.nextToken();//出生年月

all = String.valueOf(num) +" , "+

name +" , "+

add +" , "+

String.valueOf(birth);//把所有的数据用" , "隔开然后在连起来放进字符串all

}catch (IOException e){}

catch (NumberFormatException e){}

return all;//返回字符串all

}

public void addData(String str)//增加号码的方法

throws IOException

{

String s1 ="",s2="" ,s3= "";

File file = new File("c:data.txt");

if (file.exists())//如果文件data.txt存在

{

try{

BufferedReader in =

new BufferedReader(

new FileReader(file));

while ((s1=in.readLine())!=null)

s2+=s1+" ";//把文件中的每行数据全部放进一个字符串s2

s2+=str+" ";

//再把s2于形参str相连放进s2

BufferedReader in2 =

//把字符

new BufferedReader(

//串s2也

new StringReader(s2));

//就是原

PrintWriter out =

//文件+

new PrintWriter(

//形参str(新输入的一行数据)

new BufferedWriter(

//重新写进data.txt

new FileWriter(file)));

//覆盖原来的数据

while ((s3=in2.readLine())!= null)

{

out.println(s3);

}

out.close();

//System.out.println("write data true.");

}catch (IOException e){}

}else{

System.err.println("File "data" Missing!");

}

}

public void clearData()//清除data.txt的所有数据的方法

throws IOException

{

File file = new File("c:data.txt");

if(file.exists())//如果文件在

{

try{

PrintWriter out =

new PrintWriter(

new BufferedWriter(

new FileWriter(file)));

out.print("");//在文件data.txt里写进一个空字符,所以清除了原来的内容

out.close(); //关闭文件

System.out.println("clear data true!");

}catch(IOException e){}

}else{

System.err.println("File "data" Missing!");

}

}

public void deleteData(long deleteNumber)//删除某条号码数据

throws IOException,FileNotFoundException

{

isDelete = true;

try{

DataMap mp = new DataMap();//生成一个自己编写的容器

long j=0;

String s1="",s2="",s3="";

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s1=in.readLine())!=null)

{

j=numberTokenizer(s1);

mp.put(j,s1);

}

try{

if(mp.containsKey( String.valueOf(deleteNumber).toString()))

{

mp.remove(deleteNumber);

}else

throw new NumberNotFoundException();

Collection c = mp.values();

Iterator iter = c.iterator();

while(iter.hasNext())

{

s1 = (String)iter.next();

s3 +=s1+" ";

}

BufferedReader in2 =

new BufferedReader(

new StringReader(s3));

PrintWriter out =

new PrintWriter(

new BufferedWriter(

new FileWriter("c:data.txt")));

//System.out.println("delete No"+deleteNumber);

while( (s1 = in2.readLine())!=null)

{

out.println(s1);

} out.close(); }catch (NumberNotFoundException e) {

isDelete = false;

System.out.println(deleteNumber+" no found :(");

}

}catch(IOException e){}

}

public long numberTokenizer(String s)

throws IOException

{

StringTokenizer st =

new StringTokenizer(s," ");

return Integer.valueOf((st.nextToken())).longValue();

}

public void findData(long find)//查找数据

throws IOException,NumberNotFoundException

{

isFind = true;

String s = "",findString =""; long i; DataMap dm = new DataMap(); BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in.readLine())!=null)

{

i=numberTokenizer(s);

dm.put(i,s);

}

//in.close();

try{

if(dm.containsKey( String.valueOf(find).toString()))

{

findString = dm.get(find);

System.out.println("学号"+find+"学生的资料是:");

System.out.println(findString);

}else

throw new NumberNotFoundException();

}catch (NumberNotFoundException e){

System.out.println(find+" no found :(");

isFind = false;

}

}

public static void print()//读取文本文件把数据打印到终端的方法

throws IOException

{

try{

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

String read = "";

while ((read = in.readLine())!=null)

System.out.println(read);

}catch(IOException e){}

}

public static void timeOut(double sec)//停顿短暂时间的一个方法完全可以不要这个功能

{

double seconds = sec;

long t = System.currentTimeMillis()+(int)(seconds*1000);

while ((System.currentTimeMillis())

;

}

public void numSort()//按学号排序

throws IOException

{

long i = 0;

String s = "";

try{

DataArrayList dal = new DataArrayList();

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in.readLine())!=null)

{

i=numberTokenizer(s);

dal.add(i);

}

Collections.sort(dal);

DataMap dm = new DataMap();

BufferedReader in2 =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in2.readLine())!=null)

{

i=numberTokenizer(s);

dm.put(i,s);

}

PrintWriter out =

new PrintWriter (

new BufferedWriter(

new FileWriter("c:data.txt")));

Iterator it = dal.iterator();

long temp = 0;

String tempStr = "";

while (it.hasNext())

{

temp = Integer.valueOf((String)it.next()).longValue();

tempStr = dm.get(temp);

out.println(tempStr);

}

out.close();

}catch(IOException e){}

}

public void rewrite()

throws IOException,NumberNotFoundException

{

try{

System.out.print("请输入你要修改的学生号码:");

BufferedReader in =

new BufferedReader (

new InputStreamReader(System.in));

String inputLine = in.readLine();

long num = Integer.valueOf(inputLine).longValue();

findData(num);

if(isFind)

{ deleteData(num); System.out.print("请重新输入该号码:"); String str = inputData();

addData(str);

System.out.println("rewrite true!");

}

}catch(IOException e){}

catch(NumberNotFoundException e){}

}

public int count()

throws IOException

{

DataArrayList dal = new DataArrayList();

try{

String s = "";

long i =0;

BufferedReader in =

new BufferedReader(

new FileReader("c:data.txt"));

while ((s=in.readLine())!=null)

{

i=numberTokenizer(s);

dal.add(i);

}

}catch(IOException e){}

return dal.size();

} } /* *

* @author RangWei * TODO 这是个写的一个容器,继承公共类HashMap * 大概的功能就相当一个数组

*

*/ class DataMap extends HashMap//一个存储数据的Map

{

public void put(long i,String str)//把学号和数据放进这个Map

{

//以后一个学号(key)对应的是一个人的数据(value)

put(String.valueOf(i).toString(),str);

}

public void remove(long i)//接收学号,然后删除学号(key)和它对应的数据(value)

{

remove(String.valueOf(i).toString().toString());

}

public String get(long i)//接收一个学号,然后返回这个key对应的value

{

String s = String.valueOf(i).toString();

if (!containsKey(s))

{

System.err.println("Not found Key: "+s);

}

return (String)get(s);

} } /*

*

* @author RangWei * * TODO 这个类继承ArrayList * 用来按数字排序,在用号码排序时要用到它

*

*/ class DataArrayList extends ArrayList {

public void add(long num)

{

String numToString = String.valueOf(num).toString();

add(numToString);

} } /* *

* @author RangWei * * TODO 增加的一个Exception,主要是在文件里没有要找

* 的号码就抛出

*

*/ class NumberNotFoundException extends Exception {

public NumberNotFoundException()

{} }

第7篇:通讯录详细设计说明书

通讯录管理系统

详细设计说明书

组员:

1210431107

孟磊(项目组长) 1210431119

张静 1210431039

左依婷 1210431041

王庆喜 1210431075

杨江峰

12级计算机软件一班

目录

1. 引言

1.1编写目的 1.2 背景 1.3 定义

1.4 参考材料

2.程序系统的结构 2.1 运行环境 2.2 系统组织结构

3. 程序主要模块设计说明 3.1 程序描述

3.2 主要功能模块设计 3.3 性能 3.4 输入输出 3.5 算法 3.6 流程逻辑 3.7 接口 3.8 存储分配 3.9 注释设计 3.10 测试设计 3.11 限制条件

3.12 尚未解决的问题

1引言

1.1编写目的

本文档将对通讯录系统软件开发的详细设计进行描述,本文档的读者是项目策划、设计和评审人员。

1.2背景

本项目作为《软件文档写作》课程的训练项目提出,将学生分成若干项目开发小组进行管理。希望学生通过通讯录系统软件设计开发,了解软件文档的相关标准和编写原则,训练并掌握软件各类文档写作的技巧,同时提高学生使用Java开发应用程序的能力。

本项目的名称:通讯录管理系统 本项目的提出者:指导老师 本项目的开发者:本小组 项目需求方:日常管理 用户:管理员

1.3定义

通讯录管理系统名称

1.4参考资料

《开发要求说明》. 《软件需求说明书》。 《概要设计说明书》。

2程序系统的结构

2.1运行环境

(1) 设备

硬件最低要求:CPU PⅢ 以上PC服务器,内存32MB以上,硬盘15MB以上。

(2) 支持软件

操作系统:Windows 98,Windows NT、Windows 2000、Windows XP,Windows Server 2003等能

3程序主要模块设计说明

3.1 程序描述

给出对该程序的简要描述,主要说明安排设计本程序的目的意义,并且,还要说明本程序的特点(如 是常驻内存还是非常驻?是否子程序?是可重人的还是不可重人的?有无覆盖要求?是顺序处理还是并发处理等)。

3.2 主要功能模块设计

(1) 打开通讯录系统显示欢迎界面: 具体实现函数

(2) 菜单处理函数管理程序的用户界面操作,用户通过提示选择想要进行的操作:具体实现函数

(3) 本模块主要完成对已有输入的通讯信息进行显示浏览,浏览同时可以进行修改、删除等操作。

(4) 在通讯录查询模块中,用户可以通过查询尽快找到希望查找的联系人,查询支持模糊查询,可以匹配多个字段;给出查询记录的信息;如果查询的信息不存在,输出提示信息。

(5) 根据系统的输入要求添加各项信息,每次可以添加一个或多个新的记录,新增的记录可以不存入原文件中,也可以指定文件追加内容;能给出新添加记录的信息;添加后提示添加是否成功。

(6) 根据特定信息选择所要删除的对象

(7)修改记录:具体实现函数

保存记录:具体函数实现

读取记录:具体实现函数

清空当前记录:具体实现函数

3.3 性能

满足个人使用的需求(记录量控制在1000项内)。对前面提到的运行环境要求不应存困难。本软件采用可视化界面,用户通过单击界面上的相关按钮就可以完成各项操作。一般操作的响应时间应在1~2秒内,对软磁盘和打印机的操作也应在可接受的时间内完成。查询时应保证查全率,所有相应域包含查询关键字的记录都应能查到。因为通常的ISCDS规模在几十到几百项记录,以查全率为标准所带来的对查准率的影响并不大。

3.4 输人输出项

数据名称:联系人姓名、联系人邮箱、联系人电话

数据类型:char,

数据格式:例Lily,Note@gm.com,123321;

3.5 算法

本程序没有采取特殊的算法

3.6 流程逻辑

用户(1)浏览功能(2)查询信息用户登录是否是管理员Y进入管理员管理N权限级别根据级别不同提供给不同的服务 该流程图表示通讯录系统的逻辑流程,用户可以直接浏览和查询通讯录简单信息,也可以先登录,如果是管理员则具有管理权限,可进入管理员的管理页面;如果不是管理员,则判断用户权限级别,根据用户的权限级别提供不同的服务。

3.7 接口

部分用户接口视图

3.8 存储分配

无特殊要求

3.9 注释设计

①加在程序单元首部,说明本程序的作用。 ②对程序中的变量代表的意思、范围进行注释。 ③对程序中的函数或过程所起的作用进行注释。 具体注释见类图部分。

3.10 测试计划

(1) 界面测试

主要包括以下几个方面内容:

a. 页面在窗口中的现实是否正确,美观(在调整浏览器窗口大小时,屏幕刷新是否正确,表样式大小,格式,是否对提交数据进行验证(如果在页面部分进行验证的话)等,连接的形式,位置是否易于理解等。

b. 站定地图和导航条位置是否合理,是否可以导航,是否覅和用户要求。

c. 页面元素基本功能是否实现,容错性是否存在,页面元素外形,是否现实正确。

测试技术:结合兼容性测试对不同分辨率下页面现实效果,如果有影响则提出解决方案,可以结合数据定义文档查看表单项的内容,长度等信息。 界面测试要素:符合标准和规范,灵活性,正确性,直观性,舒适性,实用性,一致性。

(2)功能测试

测试分为白盒测试和黑盒测试。

白盒测试是指跟踪代码以人工检查追踪的方式查找BUG。

黑盒测试是指使用者对代码不可见,直接使用系统,把出现的异常记录下来,整理成测试报告,主要是覆盖全部的功能,可以结合兼容,性能测试等方面进行,考虑正确性,可用性,边界条件,性能,压力测试。多用户情况考虑压力测试工具,建议压力和性能结合起来进行,可以查看CPU使用率,内存占用情况,还可以模拟大量数据输入,对硬盘的影响等信息。其中压力测试包括错误恢复错误处理,页面数据验证,包括突然间断电,输入脏数据等。兼容性,不同浏览器,不同应用程序版本在实现功能时的表现,不同的上网方式。

本系统在最后阶段经过了测试,主要是黑盒测试,由于系统模块并不十分复杂,在继承测试的过程中出现的问题并不多, 相对而言比较顺利。

3.11 限制条件

说明本程序运行中所受到的限制条件。

3.12 尚未解决的问题

人机界面设计,系统安全性验证用户界面设计,登录窗口是用户进入系统的第一个界面,也是进入系统的首道“关卡”。因此,简洁、友好、清晰醒目是设计时要考虑的风格。及系统主模块与数据库的很好连接,是尚未解决的问题。

第8篇:第9课 制作通讯录 教学设计

1教学目标

知识目标:了解表格的基本构成和表格在生活中的作用;

技能目标:掌握通过菜单方式制作基本的表格,通过班级通讯录的制作、编辑表格的方法,培养学生的动手操作能力;

情感目标:通过对名片信息的分析培养学生的信息搜集和整理能力。 2学情分析

制作通讯录是小学四年级的授课内容;学生的鼠标使用、汉字输入、操作系统作用等计算机基本操作技能有了一定的基础,具备了初步的信息技术素养;从学生的年龄特征来看,四年级的学生求知欲强,对探索新知具有浓厚的兴趣。 3重点难点

重点:认识表格的行、列和单元格。

难点:规则的表格的插入,表格中文本式的设置。 4教学过程

活动1【导入】

一、游戏导入

师:今天上课前老师给同学们带来了一个小游戏,请同学们看屏幕。

师:这么多文字同学们看了有点混淆,现在我再给同学们一个材料,以表格的形式呈现。现在同学们知道了小赵的右边是谁吗?小王的右边是谁?

师:两份材料,哪一份更容易看懂,当然是第二份表格材料。表格可以将很复杂的文字内容变得井井有条。今天我们就一起来探索表格的奥秘。(揭题) 活动2【活动】

二、认识表格

师:在生活中经常看到很多表格。比如:

师:在生活中你还看到过哪些信息用表格来呈现的?

师:之所以表格有这么多优点,刘老师将学校的老师信息也做成了一个表格。 师:这个表格和前面同学们看到的表格有什么样共同的特点?想一想?

师:每个表格的行与列的信息都是有关联的。这个列由同一类组成,列叫表格的列。而行是由一个人的信息组成,行叫表格的行。那么这个表格有几列、几行。 活动3【活动】

三、自主探究

师:如果你要将你要将班里的同学信息用表格的形式做成一个通讯录,先要考虑什么? 师:请同学们打开任务一,将括号里填写完整。

师:打开书本25页,根据书本上的方法,试着插入一个表格。 师:请同学说一说你是怎么样填的,师板书。 注意:插入先要将光标定位。

师:同学们真棒,在WORD中能建立表格了。

师:同学们桌面上“407班通讯录集”。上面有我们班同学的姓名、电话、地址、QQ号码。那你能不能将我们班的名片上的信息用表格形式呈现呢? 师:制作通讯录前,我们先看任务二里的要求。

师:现在我们请同学来汇报一下自己的通讯录是怎么样的。

师:那么今天这节课我们就通过WORD中的表格功能制作一份“好友通讯录”。 活动4【活动】

四、精益求精,美化表格

师:我看有的同学的通讯录中已经有很多朋友的名单了,但是你觉得你的通讯录还缺少了些什么吗? 师:同学们想得非常周到仔细,要是我们能给通讯录添上背景那这个通讯录就更加漂亮了(展示范例),怎么添加呢,大家到帮助文件中去寻找吧,等一下我们来比一下谁的通讯录的最漂亮了。

师:示范表格插入行、列,删除行、列 师:给予学生适当的提示(教师简单演示) 活动5【活动】

五、展示作品,评价交流

师:我看很多同学都做好自己的通讯录,而且有的同学已经等不及想把自己的作品给其它同学欣赏了,好,接下来我们来欣赏几位同学的作品。 师:你觉得这位同学的作品怎么样“ 活动6【活动】

六、小结

师:马上要下课了,我们再来回忆一下这节课你学会了什么?

师:对,这节课我们通过制作小小通讯录学会了在WORD中怎样插入一个表格,其实在我们日常生活中除了通讯录,还有很多表格,像我们一开始提到过的课程表等等,因为表格能让我们的信息变得更加有条理。

第9篇:即时通讯 教学设计

语言组集体备课

(科目:信息技术)

执教教师:摆世强 2008年6月5日

即时通讯软件 教学设计

教学目标: 1.了解即时通讯软件的定义

2.学会使用一款即时通讯软件 教学重难点:

1.对于一款即时通讯软的灵活应用。 教学过程: 教学过程

一、 情景导入

展示课件:本课件主要展示各种各样的即时通讯软件,然后选择其中一款导入课题。

老师:亲爱的同学们,刚才你看了这些图片,你们用过哪些即时通讯软件呢?

学生:踊跃举手发言

老师:这么多同学举手,我该听谁的意见呢。这样吧,老师有个办法,我们一起在一款名叫飞秋即时通讯软件里面进行交流。

讲述新课

即时通讯软件的定义、内容扩展。 教师演示

师问:那么怎么样获得对方的账号或呢称呢? 生答: 师:在网上要增强自我保护意识,问怎么样更好的保护自己呢??

生答:总结回答,如不要轻易把姓名、家庭住址、电话号码等有关个人身份的信息及个人照片留给他人。以免身心受到伤害。

试一试:

1、设置个人“身份验证”的方法

2、如保把不友善的“好友”拖到“黑名单”

三、收发信息:

通过发送文字实现与对方的实时交流以,是即时通讯的基本功能

师问:文字交流有好何益处? 生答:------- 实践过程:让学生自已动手操作,然后演示交流 第一步:登录飞秋,从在线“好友“中选择联系人。 第二步:双击“好友“头象,进入对话窗口

第三步:以对话输入窗口中输入要发送给对方的文字,单击“发送”按钮,文字在即时传送给对方的同时,也出现在上方的对话显示窗口中,同样,对方发送过来的文字也会出现在对话显示窗口中。

师问:如果对方不在线,会怎么样啊??

生答:发送的信息会暂时由服务器保存,待“好友”上线时再转发给他。 教师巡堂查看学生操作情况,提醒学生在聊天室要注意使用文明健康的语言。并要特别强调网络上很多东西是虚拟的,我们应加强自我保护意识,不要沉迷于网络交友、网络聊天等。

三、授课完毕,课程总结 本节课主要讲了三个知识点:

1.了解即时通讯软件飞秋 的基本功能和使用方法; 3.学会使用飞秋软件进行交流。

四、总结

即时通讯软件说课稿

教材简析 自备

说教学目标: 1.知识目标

了解即时通讯软件的定义 学会使用一款即时通讯软件 2.能力目标

能熟练使用即时通讯软件发表意见,探讨交流,解决问题。 3.情感目标

让学生体会网络给我们的生活方式带来的巨大改变,激发学生热爱信息技术的情感。增强网络是非观能力。 说教学重点 即时通讯软的使用 飞秋软件的的使用; 网络道德。 说教学难点

即时通讯软件(飞秋软件)的掌握 网络道德。 学情分析

本课是面向五年级下期的学生,对学习、生活等各方面都有自己的看法,网络为学生发表和交流自己的意见提供了一个平台,学生参与的积极性肯定很高,同时很多同学已有了自己的QQ号,对QQ的使用也很熟悉,也很喜欢聊天。所以本课是一节操作性很强的课,内容丰富有趣的课,学生动手操作欲望强烈。但五年级学生毕竟是小学生,对事物的看法相对幼稚,是非观不强,自制力也比较差。故在本课教学过程中,用一款名为飞秋的局域网即时通讯软件代替QQ作为交流的工具。

要特别注意引导学生的兴趣和操作欲望。在培养学生发表意见、交流意见时,教师要特别对学生进行网络道德教育。 说教学方法

情景导入法、任务驱动法、引导讲解法。 所用课时 1课时。 教学环境 校机房。 教学过程

二、 情景导入

展示课件:本课件主要展示各种各样的即时通讯软件,然后选择其中一款导入课题。

老师:亲爱的同学们,刚才你看了这些图片,你们用过哪些即时通讯软件呢?

学生:踊跃举手发言 老师:这么多同学举手,我该听谁的意见呢。这样吧,老师有个办法,我们一起在一款名叫飞秋即时通讯软件里面进行交流。

讲述新课

即时通讯软件的定义、内容扩展。 教师演示

师问:那么怎么样获得对方的账号或呢称呢? 生答:

师:在网上要增强自我保护意识,问怎么样更好的保护自己呢??

生答:总结回答,如不要轻易把姓名、家庭住址、电话号码等有关个人身份的信息及个人照片留给他人。以免身心受到伤害。

试一试:

1、设置个人“身份验证”的方法

2、如保把不友善的“好友”拖到“黑名单”

三、收发信息:

通过发送文字实现与对方的实时交流以,是即时通讯的基本功能

师问:文字交流有好何益处? 生答:------- 实践过程:让学生自已动手操作,然后演示交流 第一步:登录飞秋,从在线“好友“中选择联系人。 第二步:双击“好友“头象,进入对话窗口

第三步:以对话输入窗口中输入要发送给对方的文字,单击“发送”按钮,文字在即时传送给对方的同时,也出现在上方的对话显示窗口中,同样,对方发送过来的文字也会出现在对话显示窗口中。

师问:如果对方不在线,会怎么样啊??

生答:发送的信息会暂时由服务器保存,待“好友”上线时再转发给他。

教师巡堂查看学生操作情况,提醒学生在聊天室要注意使用文明健康的语言。并要特别强调网络上很多东西是虚拟的,我们应加强自我保护意识,不要沉迷于网络交友、网络聊天等。

三、授课完毕,课程总结 本节课主要讲了三个知识点:

1.了解即时通讯软件飞秋 的基本功能和使用方法; 3.学会使用飞秋软件进行交流。

四、布置作业

1.在飞秋软件上跟老师交流学习心得。

五、教学反思

1.对于通讯和电脑知识学生较感兴趣,因此课堂气氛比较活跃,学生能根据我设计的内容及时的做出回应。在操作中也能及时完成,能做到对电脑知识的自主探究,我也给了他们自主发挥的空间。完成了本课的教学任务。

2.学生对一些通讯软件不够了解,在课前应让学生自己先接触通过网络了解。在学生回答问题时对于学生的心理掌握的不是很好。信息技术的层次性教学不够强。

上一篇:传染病基本知识问答下一篇:社区打非治违活动总结