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

上传人:土8路 文档编号:10386118 上传时间:2021-05-13 格式:DOC 页数:23 大小:498.50KB
返回 下载 相关 举报
JAVA课程设计(论文)通讯录系统程序设计.doc_第1页
第1页 / 共23页
JAVA课程设计(论文)通讯录系统程序设计.doc_第2页
第2页 / 共23页
JAVA课程设计(论文)通讯录系统程序设计.doc_第3页
第3页 / 共23页
JAVA课程设计(论文)通讯录系统程序设计.doc_第4页
第4页 / 共23页
JAVA课程设计(论文)通讯录系统程序设计.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《JAVA课程设计(论文)通讯录系统程序设计.doc》由会员分享,可在线阅读,更多相关《JAVA课程设计(论文)通讯录系统程序设计.doc(23页珍藏版)》请在三一文库上搜索。

1、程序设计报告题 目:通信录管理系统 专 业 学 生 姓 名 班 级 学 号 指 导 教 师 指 导 单 位 计算机学院软件教学中心日 期 评 分 细 则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简 短 评 语教师签名: 评分等级备注评分等级有五种:优秀、良好、中等、及格、不及格通讯录管理系统一、 课题内容和要求本课题是设计通信录管理系统。从通信录的数据信息构成上,假设其有四项信息,数据类型均以字符串类型存储。数据项:姓名、地址、邮政编码、电话号码

2、数据类型:均为String类数据存储结构:单链表结合文本文件实现功能:数据项存取、显示、删除记录、查询记录等功能。功能细则:增加功能:通讯录文件中,当录入了重复的姓名和电话号码时,则提示数据录入重复并取消录入; 显示功能:可显示通讯录中所有联系人; 查询功能:输入某个人的姓名时,可以查询联系人相关信息;修改功能:输入某个人的姓名时,可对此人在通讯录中的相应数据进行修改;删除功能:输入某个人的姓名时,可对此人在通讯录中的相应数据进行删除。主界面提供菜单选择的方法选择实现某一功能,一次运行程序能进行多次选择执行不同的功能。二、 需求分析本程序设计在Java project(H10000724)内共

3、有两个类。Linklist类:实现了单链表的存储结构。Fileimport类:实现了主方法,以及各个功能的方法。(对于主方法起名Fileimport表示抱歉,初衷只是想创建Import导入方法从文本文件向链表导入信息,后来思路改变,逐渐发展成主方法所在类)主方法(public static void main(String args))为Switch-Case选择语句与do-while循环构成的菜单。添加方法对应Addperson(),可以将新增联系人添加到链表的最后,当联系人重复则取消添加。显示方法对应Display(),可以打印出所有联系人的信息。搜索方法对应Search(),当输入联系人

4、姓名时可以搜索相关信息。修改方法对应Update(),当输入联系人姓名时,可以根据操作提示修改联系人信息。删除方法对应Delete(),输入联系人姓名可以删除此人相关信息。导入方法Import(),将源文件所在目录下文本文件中的信息导入到链表中。导出方法Export(),将链表中的信息导出,存储在源文件所在目录下的文本文件中。清空方法Clear(),将链表中的内容清空,便于下一次导入Import()。三、 概要设计 Linklist 类/此类构造链表类,数据域由Group类构成,包含Name,Number,Mailcode,和Address四个成员./地址域由Linknode类构成.publi

5、c 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

6、(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

7、-case语句的形式,采用菜单方式工作。Export()方法程序创建了一个源文件所在路径的TXT文件,user1.txt。但是因为每次链表操作后数据都有变化,所以我们先写入一个空字符串,清空原来的文本信息,然后使用File类和BufferedWriter类从链表中向文件写入信息,以姓名,号码,邮编,地址的顺序各占一行写入,一个联系人信息完成后录入一个“*”字符作为结尾,录入原因在Import()中解释。Import()方法该方法就是从Export()创建的user1.txt中读取数据导入链表中。由于文本文件中每四行存储一个联系人信息,且每行都是不同信息,所以在对Group类中的变量进行初始化时

8、使用了循环和Switch-Case语句保证录入顺序不会错乱,并且为保证录入信息和所存储的节点一致,每个联系人结束后有一个“*”字符,它并不录入,而是起到调节循环的作用。Clear()方法因为每次菜单都会循环,上一次的链表中的信息会阻碍Import方法的导入,导致信息重复,所以定义清空链表的方法。Addperson()方法增加联系人在链表最后,先比较姓名如果姓名重复,在比较后会取消增加。Searchperson()方法就是查找所输入的联系人姓名,打印其所有信息。如果不存在联系人,输出不存在。Display()方法对已经初始化好的链表进行遍历,并打印出所有信息。Delete()方法单链表的基本操作

9、,如果不存在联系人,输出不存在。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 Mailc

10、ode=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的构造方法 p

11、ublic 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; File

12、import 类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 Linkli

13、st.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-删除); Syst

14、em.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

15、; 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(请以姓名 空格 电话 空格 邮编 空格 地址

16、回车键入方式录入。);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,

17、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 new

18、address1; 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(

19、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); Las

20、t=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(); whi

21、le(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

22、(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.equalsIgnoreCa

23、se(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(

24、); 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(Syste

25、m.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=keybo

26、ard.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=new

27、number; 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

28、.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(通讯录为空,请选择添加,系统退

29、出。);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 firstnod

30、e=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=currentnod

31、e; 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

32、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:newnod

33、e.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.printStackTra

34、ce(); /此方法为将链表中信息更新到文本文件 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); BufferedWrite

35、r 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(); b

36、ufw.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()方法测试:当通信录

37、为空时:添加人姓名相同时:Displsy()方法测试通信录为空时:Search()方法测试:联系人不存在时:通信录为空时:Update()方法测试:联系人不存在时:通信录为空时:Delete()方法测试:联系人不存在时:通信录为空时:主函数循环运行的情况:六、调试过程中的问题通信录程序的设计过程中主要的问题就是如何能够正确有效地做到对Group类的对象中四个数据存取和修改。第一,在设计通信录程序中采用链表形式存储时,其数据域实际是存储一个Group类,此类中包含四个字符串类型的数据。所以在调用Import()方法从文本文件读取数据到链表数据域时,应该是每四行读取到一个Group类的对象中,而且还有保证数据存储不会发生错乱,所以我使用了一个四步的FOR循环结构并结合Switch-Case语句,并且由于每次读取数据后,BufferedReader的bufw.newline方法会指向下一行,所以当每四行结束后,指针其实指向第四行后的下一行,但是循环判断的条件是s=bufr.readLine()!=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


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