欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    JAVA课程设计(论文)通讯录系统程序设计.doc

    • 资源ID:10386118       资源大小:498.50KB        全文页数:23页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    JAVA课程设计(论文)通讯录系统程序设计.doc

    程序设计报告题 目:通信录管理系统 专 业 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机学院软件教学中心日 期 评 分 细 则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简 短 评 语教师签名: 评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格通讯录管理系统一、 课题内容和要求本课题是设计通信录管理系统。从通信录的数据信息构成上,假设其有四项信息,数据类型均以字符串类型存储。数据项:姓名、地址、邮政编码、电话号码数据类型:均为String类数据存储结构:单链表结合文本文件实现功能:数据项存取、显示、删除记录、查询记录等功能。功能细则:增加功能:通讯录文件中,当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入; 显示功能:可显示通讯录中所有联系人; 查询功能:输入某个人的姓名时,可以查询联系人相关信息;修改功能:输入某个人的姓名时,可对此人在通讯录中的相应数据进行修改;删除功能:输入某个人的姓名时,可对此人在通讯录中的相应数据进行删除。主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。二、 需求分析本程序设计在Java project(H10000724)内共有两个类。Linklist类:实现了单链表的存储结构。Fileimport类:实现了主方法,以及各个功能的方法。(对于主方法起名Fileimport表示抱歉,初衷只是想创建Import导入方法从文本文件向链表导入信息,后来思路改变,逐渐发展成主方法所在类)主方法(public static void main(String args))为Switch-Case选择语句与do-while循环构成的菜单。添加方法对应Addperson(),可以将新增联系人添加到链表的最后,当联系人重复则取消添加。显示方法对应Display(),可以打印出所有联系人的信息。搜索方法对应Search(),当输入联系人姓名时可以搜索相关信息。修改方法对应Update(),当输入联系人姓名时,可以根据操作提示修改联系人信息。删除方法对应Delete(),输入联系人姓名可以删除此人相关信息。导入方法Import(),将源文件所在目录下文本文件中的信息导入到链表中。导出方法Export(),将链表中的信息导出,存储在源文件所在目录下的文本文件中。清空方法Clear(),将链表中的内容清空,便于下一次导入Import()。三、 概要设计 Linklist 类/此类构造链表类,数据域由Group类构成,包含Name,Number,Mailcode,和Address四个成员./地址域由Linknode类构成.public class Linklist public static class Group )Group类中包含四种联系人信息/以下为Group的构造方法 public Group(String newname,String newnumber,String newmail, String newadress) public static class Linknode /以下为Linknode的构造方法 public Linknode(Group newperson, Linknode newlink) /四种对Linknode的数据域和地址域的操作方法定义 public void setGroup(Group newperson) public Group getGroup() public void setlink(Linknode newlink) public Linknode getlink() 开始3对应调用搜索方法4对应调用显示方法5对应调用删除方法1对应调用添加方法2对应调用修改方法键入想要操作所对应的值判断是否为0N欢迎使用,结束Y循环Fileimport 类(流程图如上图)此类包含程序运行各种方法和主函数入Fileimport类各方法算法设计:首先,要创建数据存储对象-单链表,这里声明了Start和Last两个节点,分别指向链表的头和尾。主方法采用了循环和Switch-case语句的形式,采用菜单方式工作。Export()方法程序创建了一个源文件所在路径的TXT文件,user1.txt。但是因为每次链表操作后数据都有变化,所以我们先写入一个空字符串,清空原来的文本信息,然后使用File类和BufferedWriter类从链表中向文件写入信息,以姓名,号码,邮编,地址的顺序各占一行写入,一个联系人信息完成后录入一个“*”字符作为结尾,录入原因在Import()中解释。Import()方法该方法就是从Export()创建的user1.txt中读取数据导入链表中。由于文本文件中每四行存储一个联系人信息,且每行都是不同信息,所以在对Group类中的变量进行初始化时使用了循环和Switch-Case语句保证录入顺序不会错乱,并且为保证录入信息和所存储的节点一致,每个联系人结束后有一个“*”字符,它并不录入,而是起到调节循环的作用。Clear()方法因为每次菜单都会循环,上一次的链表中的信息会阻碍Import方法的导入,导致信息重复,所以定义清空链表的方法。Addperson()方法增加联系人在链表最后,先比较姓名如果姓名重复,在比较后会取消增加。Searchperson()方法就是查找所输入的联系人姓名,打印其所有信息。如果不存在联系人,输出不存在。Display()方法对已经初始化好的链表进行遍历,并打印出所有信息。Delete()方法单链表的基本操作,如果不存在联系人,输出不存在。Update()方法在定位所要操作的联系人后,采用Switch-case语句选择所要修改的项目,用Group类所提供的方法给所要修改的信息赋值。四、 源程序代码Linklist 类/此类构造链表类,数据域由Group类构成,包含Name,Number,Mailcode,和Address四个成员./地址域由Linknode类构成.public class Linklist public static class Group public String Name=null; public String Number=null; public String Mailcode=null; public String Address=null;/以下为Group的构造方法 public Group(String newname,String newnumber,String newmail, String newadress) Name=newname; Number=newnumber; Mailcode=newmail; Address=newadress; public static class Linknode public Group person=null; public Linknode link=null;/以下为Linknode的构造方法 public Linknode(Group newperson, Linknode newlink) person=newperson; link=newlink; /四种对Linknode的数据域和地址域的操作方法定义 public void setGroup(Group newperson) person=newperson; public Group getGroup() return person; public void setlink(Linknode newlink) link=newlink; public Linknode getlink() return link; Fileimport 类import java.io.BufferedReader;public class Fileimport static Linklist.Group startperson=new Linklist.Group(null, null, null, null);static Linklist.Linknode Start=new Linklist.Linknode(startperson, null);static Linklist.Group lastperson=new Linklist.Group(null, null, null, null);static Linklist.Linknode Last=new Linklist.Linknode(lastperson, null);public static void main(String args) int i;do System.out.println("欢迎使用H10000724通讯录系统"); System.out.println("="); System.out.println("1-添加"); System.out.println("2-修改"); System.out.println("3-搜索"); System.out.println("4-显示"); System.out.println("5-删除"); System.out.println("0-退出"); Fileimport Demo=new Fileimport(); Scanner keyboard=new Scanner(System.in); i=keyboard.nextInt(); switch(i) case 1: Demo.Import(); Demo.Addperson(); Demo.Export(); break; case 2: Demo.Import(); Demo.Update(); Demo.Export(); break; case 3:Demo.Import(); Demo.Searchperson(); break; case 4:Demo.Import(); Demo.Display(); break; case 5:Demo.Import(); Demo.Delete(); Demo.Export(); break; case 0: System.out.println("欢迎使用,谢谢"); System.exit(0); while(i!=0);/增加新联系人public void Addperson()if(Start.getlink()=null)System.out.println("通讯录现在为空,准备添加");System.out.println("请以姓名 空格 电话 空格 邮编 空格 地址 回车键入方式录入。");String newname1; String newnumber1; String newcode1; String newaddress1; Scanner keyboard=new Scanner(System.in); newname1=keyboard.next(); newnumber1=keyboard.next(); newcode1=keyboard.next(); newaddress1=keyboard.next(); Linklist.Group newperson1=new Linklist.Group(newname1, newnumber1,newcode1,newaddress1); Linklist.Linknode newnode1 = new Linklist.Linknode(newperson1, null);Start.setlink(newnode1);Last=newnode1;Last.setlink(null);System.out.println("新增联系人录入成功!");elseSystem.out.println("请以姓名 空格 电话 空格 邮编 空格 地址 回车键入方式录入。");String newname1; String newnumber1; String newcode1; String newaddress1; Scanner keyboard=new Scanner(System.in); newname1=keyboard.next(); newnumber1=keyboard.next(); newcode1=keyboard.next(); newaddress1=keyboard.next(); Linklist.Group newperson1=new Linklist.Group(newname1, newnumber1,newcode1,newaddress1); Linklist.Linknode newnode1 = new Linklist.Linknode(newperson1, null);Linklist.Linknode currentnode=Start.getlink();do if(currentnode.getGroup().Name.equalsIgnoreCase(newname1)=true) System.out.println("所添加的联系人已经存在,您可以使用修改功能更新原有信息"); break; else currentnode=currentnode.getlink(); while(currentnode!=null);if(currentnode=null) Last.setlink(newnode1); Last=newnode1; Last.setlink(null); System.out.println("新增联系人录入成功!"); /显示所有联系人 public void Display() System.out.println("现在将联系人显示如下:"); System.out.println("姓名 电话 邮编 地址"); if(Start.getlink()=null)Start=null;System.out.println("通讯录为空,请选择添加,系统退出。");System.exit(0); Linklist.Linknode currentnode=Start.getlink(); while(currentnode!=null) System.out.print(currentnode.getGroup().Name+" "); System.out.print(currentnode.getGroup().Number+" "); System.out.print(currentnode.getGroup().Mailcode+" "); System.out.println(currentnode.getGroup().Address); currentnode=currentnode.getlink(); /搜索联系人信息 public void Searchperson() if(Start.getlink()=null)Start=null;System.out.println("通讯录为空,请选择添加,系统退出。");System.exit(0); System.out.println("请录入待查找人姓名,回车键结束"); String target; Scanner keyboard=new Scanner(System.in); target= keyboard.next(); Linklist.Linknode currentnode=Start.getlink(); do if(currentnode.getGroup().Name.equalsIgnoreCase(target)=true) System.out.println("姓名 电话 邮编 地址"); System.out.print(currentnode.getGroup().Name+" "); System.out.print(currentnode.getGroup().Number)+" "); System.out.print(currentnode.getGroup().Mailcode+" "); System.out.println(currentnode.getGroup().Address); break; else currentnode=currentnode.getlink(); while(currentnode!=null); if(currentnode=null) System.out.println("联系人还未被存储,使用添加功能添加新联系人"); /修改联系人信息 public void Update() if(Start.getlink()=null)Start=null;System.out.println("通讯录为空,请选择添加,系统退出。");System.exit(0); System.out.println("请输入要更新联系人姓名,以回车结束"); String target; Scanner keyboard=new Scanner(System.in); target= keyboard.next(); Linklist.Linknode currentnode=Start.getlink(); do if(currentnode.getGroup().Name.equalsIgnoreCase(target)=true) System.out.println("更新联系人确定,准备接收更新信息"); System.out.println("1-姓名"); System.out.println("2-电话"); System.out.println("3-邮编"); System.out.println("4-地址"); int i; i=keyboard.nextInt(); switch(i) case 1: String newname; System.out.println("请输入新姓名,回车键结束"); newname= keyboard.next(); currentnode.getGroup().Name=newname; System.out.println("修改成功!"); break; case 2: String newnumber; System.out.println("请输入新号码,回车键结束"); newnumber=keyboard.next(); currentnode.getGroup().Number=newnumber; System.out.println("修改成功!"); break; case 3: String newmail; System.out.println("请输入新邮编,回车键结束"); newmail= keyboard.next(); currentnode.getGroup().Mailcode=newmail; System.out.println("修改成功!"); break; case 4: String newadress; System.out.println("请输入新地址,回车键结束"); newadress= keyboard.next(); currentnode.getGroup().Address=newadress; System.out.println("修改成功!"); break; break; else currentnode=currentnode.getlink(); while(currentnode!=null); if(currentnode=null) System.out.println("更新联系人还未被存储,请使用添加功能添加"); / 删除联系人信息 public void Delete()if(Start.getlink()=null)Start=null;System.out.println("通讯录为空,请选择添加,系统退出。");System.exit(0);elseSystem.out.println("请输入你要删除联系人姓名,回车键结束");Scanner keyboard=new Scanner(System.in);String target;target=keyboard.next();Linklist.Linknode currentnode = null;Linklist.Linknode prenode = null;if(Start.getlink().getGroup().Name.equalsIgnoreCase(target)=true)Linklist.Linknode firstnode=null;firstnode=Start;Start=Start.getlink();firstnode=null;System.out.println("删除成功!"); else currentnode=Start.getlink(); do if(currentnode.getGroup().Name.equalsIgnoreCase(target)=true) prenode.setlink(currentnode.getlink(); currentnode=null; System.out.println("删除成功!"); break; else prenode=currentnode; currentnode=currentnode.getlink(); if(prenode=Last) System.out.println("删除联系人还未被存储,使用添加功能可以增加新联系人"); break; while(currentnode!=null); /此方法为导入文本文件到链表 public void Import() File file=new File("user1.txt");tryFileReader fr=new FileReader(file);BufferedReader bufr=new BufferedReader(fr);String s=null;int i=0;while(s=bufr.readLine()!=null)Linklist.Group newperson=new Linklist.Group(null, null, null, null);Linklist.Linknode newnode=new Linklist.Linknode(newperson, null);for(int j=i;j<=i+3;j+)int k=j%5;switch(k)case 0:newnode.getGroup().Name=s;break;case 1:newnode.getGroup().Number=s;break;case 2:newnode.getGroup().Mailcode=s;break;case 3:newnode.getGroup().Address=s;break; s=bufr.readLine(); if(Start.getlink()=null) Start.setlink(newnode); Last=newnode; Last.setlink(null); else Last.setlink(newnode); Last=newnode; Last.setlink(null); i=i+5;bufr.close();fr.close();catch(Exception e)e.printStackTrace(); /此方法为将链表中信息更新到文本文件 public void Export() File file=new File("user1.txt");Linklist.Linknode currentnode=Start.getlink(); try FileWriter del=new FileWriter(file); del.write(""); catch(Exception e) e.printStackTrace(); try while(currentnode!=null) FileWriter fw=new FileWriter(file,true); BufferedWriter bufw=new BufferedWriter(fw); bufw.write(currentnode.getGroup().Name); bufw.newLine(); bufw.write(currentnode.getGroup().Number); bufw.newLine(); bufw.write(currentnode.getGroup().Mailcode); bufw.newLine(); bufw.write(currentnode.getGroup().Address); bufw.newLine(); bufw.write("*"); bufw.newLine(); bufw.close(); fw.close(); currentnode=currentnode.getlink(); catch(Exception e) e.printStackTrace(); /清空单链表 public void clear() if(Start.getlink()!=null) Start.setlink(null); Last=null; 五、 测试数据及其结果分析文本数据文件为“user1.txt”这里就不复制到Word中,请老师自行在文件中查看。Import()和Export()方法在测试其他方法是已经说明其可以正常运行。Addperson()方法测试:当通信录为空时:添加人姓名相同时:Displsy()方法测试通信录为空时:Search()方法测试:联系人不存在时:通信录为空时:Update()方法测试:联系人不存在时:通信录为空时:Delete()方法测试:联系人不存在时:通信录为空时:主函数循环运行的情况:六、调试过程中的问题通信录程序的设计过程中主要的问题就是如何能够正确有效地做到对Group类的对象中四个数据存取和修改。第一,在设计通信录程序中采用链表形式存储时,其数据域实际是存储一个Group类,此类中包含四个字符串类型的数据。所以在调用Import()方法从文本文件读取数据到链表数据域时,应该是每四行读取到一个Group类的对象中,而且还有保证数据存储不会发生错乱,所以我使用了一个四步的FOR循环结构并结合Switch-Case语句,并且由于每次读取数据后,BufferedReader的bufw.newline方法会指向下一行,所以当每四行结束后,指针其实指向第四行后的下一行,但是循环判断的条件是s=bufr.readLine()!=

    注意事项

    本文(JAVA课程设计(论文)通讯录系统程序设计.doc)为本站会员(土8路)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开