![Java课程设计 -通讯录管理程序_第1页](http://file4.renrendoc.com/view10/M01/2D/2B/wKhkGWWtu5mAcgqHAAGf5NItc60331.jpg)
![Java课程设计 -通讯录管理程序_第2页](http://file4.renrendoc.com/view10/M01/2D/2B/wKhkGWWtu5mAcgqHAAGf5NItc603312.jpg)
![Java课程设计 -通讯录管理程序_第3页](http://file4.renrendoc.com/view10/M01/2D/2B/wKhkGWWtu5mAcgqHAAGf5NItc603313.jpg)
![Java课程设计 -通讯录管理程序_第4页](http://file4.renrendoc.com/view10/M01/2D/2B/wKhkGWWtu5mAcgqHAAGf5NItc603314.jpg)
![Java课程设计 -通讯录管理程序_第5页](http://file4.renrendoc.com/view10/M01/2D/2B/wKhkGWWtu5mAcgqHAAGf5NItc603315.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
23目录TOC\o"1-3"\u第1章课题概述 第1章课题概述制作的JAVA课程设计是设计班级同学通讯录,实现一些信息存储和提取。1.1课题的目的收集采取学生信息是每个班级很重要的事情。在现在信息化社会的时代,纸质存储已经跟不上时代,电子版通讯录才能很好的查找需要的信息,方便快捷,还能实现更多更好的功能,同时还能简单快捷的实现信息的转换和更改。1.2课题的要求(1)点击程序运行后首先跳出一个主菜单,并将所有的添加、删除、修改等功能罗列在主菜单上供用户进行选择,以便进行相应的操作。(2)能保存以下数据项:姓名、性别、关系、电话、手机、地址、邮编、E-mail。(3)各项信息能够从键盘输入,并且整理过程中可以不断更新信息。用户每次更新输入信息并选择功能菜单后,应能立即实现相应的功能。(4)可以从文student.dat中读入数据到通讯录。并且修改后的各项信息也能保存到文件中,以便程序下次启动时能够从指定文件读入相应的信息。第2章概要设计2.1整个程序的模块结构及流程根据课题要求,整个程序按功能可分为添加、删除、修改、查找四个主要模块。除上述主要功能模块之外,程序还应提供退出程序、显示全部等辅助模块。程序各功能模块的划分。2.2信息存储方式的选择信息的存储需要信息就是将对象序列化到文件中,同时每一步的操作都会更新到文件中,实现对信息的实时同步,退出时也会自动添加到此文件中,当再一次打开程序时,也会再次读入此文件,显示出上次退出时保存到的信息,实现对信息的保存。用户输入信息本质上是一个字符串,信息就是通过字符串转换出我们需要的存储信息。用集合把每个人的信息以字符串的形式作为一项,在集合中提取一项即可完成对整体的操作。2.3对信息匹配的处理由信息以字符串的形式存储在集合中,所以只需要调用学生的姓名即可调出所有信息,在每次操作前,点击运行出现对画框,点击分栏要求输入学生姓名,然后会调用判断字符串相等的equals()方法,当调用的文件信息中存在与此字符串相等的内容时,即可完成匹配,调出此学生信息,否则不会出现任何信息。2.4各个功能实现的描述2.4.1显示全部 点击运行,然后界面会出现一个整体框架,上面会有各种所需要的信息的选择项目2.4.2添加功能添加是在集合中实现的,也即添加到集合中,调用添加方法时,添加的内容是以条状框架出来,输入的内容赋值到集合中,即可保存到文件,实现添加功能。通过建立一个框架,实现各模块功能,然后用get()方法把输入的每一项添加到字符串里,各项输出,即可完成添加,保存到文件里。2.4.3删除功能点击删除选项,首先会出现一片信息,输入的姓名字符串会对集合里的每一项进行比较,如果没有得到相等的,即会跳出提示框显示学生信息不存在;如果得到相等的,即会以姓名为代表调用remove()方法删除集合里面这一项的各个信息,完成删除,保存到文件里。2.4.4修改功能修改也会首先以相同的方法对姓名进行匹配,如果没找到相等的,即会跳出提示框显示学生信息不存在;如果匹配成功,就会通过调用跳出和添加时相同的布局框,输出以这个姓名字符串为代表的各项信息,然后直接在文本框里面对学生的各项信息进行修改,点击确认修改即会保存修改后的内容就可以,自动实现信息的存储。2.4.5查找功能点击查找按钮,会跳出一个要求输入姓名的窗口,同样会对学生进行匹配,当匹配成功时,即会在下方的文本框中出现学生的各项信息。第3章程序功能的实现3.1主方法的实现首先做出显示全部按钮的主界面,对主界面设置窗口位置和大小进行修改美化,然后进行布局,主界面下方以按钮的形式一行一行列出菜单项,点击按钮就会调用相应的类,实现应有的功能。同时学生的信息以IO流保存在特定的文件中,每次打开程序就会读取文件,退出也会保存信息到文件,同时实现功能过程中的每一步都会更新文件,实现对信息的同步保存。publicclasstongxun{ JFramejf; JButtonb1,b2,b3,b4,b5,b6; Filef=newFile("C:/stodents.dat"); Stringst; Stringstc1,stc2,stc3; HashMap<String,String>name1,name2; ArrayList<String>al; //构造初始界面 publictongxun(){ jf=newJFrame("学生通讯录"); b1=newJButton("显示全部"); b2=newJButton("修改"); b3=newJButton("添加"); b4=newJButton("删除"); b5=newJButton("查找"); b6=newJButton("排序"); Containerc=jf.getContentPane(); jf.setLayout(newGridLayout(7,1)); jf.setBounds(70,70,400,600); c.add(b1); c.add(b4); c.add(b2); c.add(b5); c.add(b3); c.add(b6); //显示全部按钮 MyMonitorb1mm1=newMyMonitorb1(); b1.addActionListener(mm1); //修改 MyMonitorb2mm2=newMyMonitorb2(); b2.addActionListener(mm2); //添加 MyMonitorb3mm3=newMyMonitorb3(); b3.addActionListener(mm3); //删除 MyMonitorb4mm4=newMyMonitorb4(); b4.addActionListener(mm4); //查找 MyMonitorb5mm5=newMyMonitorb5(); b5.addActionListener(mm5); //排序 MyMonitorb6mm6=newMyMonitorb6(); b6.addActionListener(mm6); jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE); jf.setVisible(true); }publicstaticvoidmain(String[]args){ newtongxun();}//显示全部按钮动作的构造按下后初识界面消失classMyMonitorb1implementsActionListener{ JDialogmy1; publicvoidactionPerformed(ActionEvente){ my1=newJDialog(jf); my1.setTitle("全部信息"); JPaneljp=newJPanel(); jp.setLayout(newGridLayout(2,1)); BorderLayoutbl=newBorderLayout(); my1.setLayout(bl); Containerc=my1.getContentPane(); my1.setBounds(30,30,800,500); JTextAreaja=newJTextArea(); //将文件内容读在文本域中 try{ FileInputStreamfi=newFileInputStream(f); ObjectInputStreamoi=newObjectInputStream(fi); name1=newHashMap<String,String>(); name1=(HashMap<String,String>)oi.readObject(); al=newArrayList<String>(); al=(ArrayList<String>)oi.readObject(); Strings=(String)oi.readObject(); fi.close(); oi.close(); Fontz=newFont("黑体",0,20); ja.setFont(z); ja.setText(s); System.out.println(name1); ja.setEditable(false); }catch(ClassNotFoundException|IOExceptione1){ e1.printStackTrace(); } jp.setBounds(70,70,200,200); JScrollPanejs=newJScrollPane(ja); js.setVerticalScrollBarPolicy(js.VERTICAL_SCROLLBAR_AS_NEEDED); js.setHorizontalScrollBarPolicy(js.HORIZONTAL_SCROLLBAR_AS_NEEDED); jp.add(js); JButtonb=newJButton("返回"); b.setBounds(10,10,50,50); c.add(jp,BorderLayout.CENTER); c.add(b,BorderLayout.SOUTH); //返回按钮动作 MyMonitorb11mm=newMyMonitorb11(); b.addActionListener(mm); jf.setVisible(false); my1.setVisible(true); } //返回按钮动作初始界面出现3.2各个功能模块的实现3.2.1显示全部方法的实现显示全部调用了新的类,在表格里面输出学生信息。classMyMonitor22implementsActionListener{ JDialogjd2; publicvoidactionPerformed(ActionEvente){ Stringsnname=null; inti=ja.getText().indexOf(jt.getText()); intj=ja.getText().indexOf("姓名:"); if(i==-1){ snname=ja.getText().substring(j+3,8).trim(); }else{ snname=jt.getText(); } Stringc1=name1.get("同学"); Stringc2=name1.get("同学、室友"); Stringc3=name1.get("同学、老乡"); Stringc4=name1.get("同学、室友、老乡"); Stringc5=name1.get("室友"); Stringc6=name1.get("室友、老乡"); Stringc7=name1.get("老乡"); intt1=name1.get(jt.getText()).indexOf("同学"); ints1=name1.get(jt.getText()).indexOf("室友"); intl1=name1.get(jt.getText()).indexOf("老乡"); intt2=ja.getText().indexOf("同学"); ints2=ja.getText().indexOf("室友"); intl2=ja.getText().indexOf("老乡"); //去除旧有 Stringstr11=name1.get(jt.getText());3.2.2添加功能的实现添加是调用新的布局框,在框的文本域里面输入学生的各项信息,完成即可添加到集合里保存到文件。添加功能的代码实现如下:classMyMonitorb3implementsActionListener{ JDialogmy3; JTextFieldjt1; JRadioButtonjr1; JRadioButtonjr2; JCheckBoxjc1; JCheckBoxjc2; JCheckBoxjc3; JTextFieldjt4; JTextFieldjt5; JTextFieldjt6; JTextFieldjt7; JTextFieldjt8; JComboBox<?>jcb; publicvoidactionPerformed(ActionEvente){ my3=newJDialog(jf); my3.setTitle("添加"); my3.setBounds(30,30,400,500); //设置为1列9行的网状布局 GridLayoutgl=newGridLayout(9,1,0,5); my3.setLayout(gl); Containerc=my3.getContentPane(); //姓名 JPaneljp1=newJPanel(); FlowLayoutfl1=newFlowLayout(); jp1.setLayout(fl1); Fontz1=newFont("黑体",5,18); JLabeljl1=newJLabel("姓名:"); jl1.setFont(z1); jt1=newJTextField(); jt1.setColumns(10); //性别 JPaneljp2=newJPanel(); FlowLayoutfl2=newFlowLayout(); jp2.setLayout(fl2); Fontz2=newFont("黑体",5,18); JLabeljl2=newJLabel("性别:"); jl2.setFont(z2); jr1=newJRadioButton("女"); MyMonitorb31mm1=newMyMonitorb31(); jr1.addActionListener(mm1); jr2=newJRadioButton("男"); MyMonitorb32mm2=newMyMonitorb32(); jr2.addActionListener(mm2); ButtonGroupbg1=newButtonGroup(); bg1.add(jr1); bg1.add(jr2); //关系 JPaneljp3=newJPanel(); FlowLayoutfl3=newFlowLayout(); jp3.setLayout(fl3); Fontz3=newFont("黑体",6,18); JLabeljl3=newJLabel("关系:"); jl3.setFont(z3); jc1=newJCheckBox("同学"); jc2=newJCheckBox("室友"); jc3=newJCheckBox("老乡"); //电话 JPaneljp4=newJPanel(); FlowLayoutfl4=newFlowLayout(); jp4.setLayout(fl4); Fontz4=newFont("黑体",6,18); JLabeljl4=newJLabel("电话:"); jl4.setFont(z4); jt4=newJTextField(); jt4.setColumns(16); //手机 JPaneljp5=newJPanel(); FlowLayoutfl5=newFlowLayout(); jp5.setLayout(fl5); Fontz5=newFont("黑体",6,18); JLabeljl5=newJLabel("手机:"); jl5.setFont(z5); jt5=newJTextField(); jt5.setColumns(16); //地址 JPaneljp6=newJPanel(); FlowLayoutfl6=newFlowLayout(); jp6.setLayout(fl6); Fontz6=newFont("黑体",6,18); JLabeljl6=newJLabel("地址:"); jl6.setFont(z6); jt6=newJTextField(); jt6.setColumns(8); //邮编 JPaneljp7=newJPanel(); FlowLayoutfl7=newFlowLayout(); jp7.setLayout(fl7); Fontz7=newFont("黑体",6,18); JLabeljl7=newJLabel("邮编:"); jl7.setFont(z7); jt7=newJTextField(); jt7.setColumns(10); //E-mail JPaneljp8=newJPanel(); FlowLayoutfl8=newFlowLayout(); jp8.setLayout(fl8); Fontz8=newFont("黑体",6,18); JLabeljl8=newJLabel("E-mail:"); jl8.setFont(z8); jt8=newJTextField(); jt8.setColumns(12); String[]str={"","@","@163.com","@126.com","@"}; jcb=newJComboBox<Object>(str); //保存、取消键 JPaneljp9=newJPanel(); FlowLayoutfl9=newFlowLayout(1,50,0); jp9.setLayout(fl9); JButtonjb1=newJButton("保存"); MyMonitorb36mm6=newMyMonitorb36(); jb1.addActionListener(mm6); JButtonjb2=newJButton("取消"); MyMonitorb37mm7=newMyMonitorb37(); jb2.addActionListener(mm7); jp1.add(jl1); jp1.add(jt1); jp2.add(jl2); jp2.add(jr1); jp2.add(jr2); jp3.add(jl3); jp3.add(jc1); jp3.add(jc2); jp3.add(jc3); jp4.add(jl4); jp4.add(jt4); jp5.add(jl5); jp5.add(jt5); jp6.add(jl6); jp6.add(jt6); jp7.add(jl7); jp7.add(jt7); jp8.add(jl8); jp8.add(jt8); jp8.add(jcb); jp9.add(jb1); jp9.add(jb2); c.add(jp1); c.add(jp2); c.add(jp3); c.add(jp4); c.add(jp5); c.add(jp6); c.add(jp7); c.add(jp8); c.add(jp9); jf.setVisible(false); my3.setVisible(true); }3.2.3删除功能的实现删除是首先对学生姓名进行匹配。删除功能的代码实现如下:JButtonb1,b2; JTextFieldjtf; publicDeleteDialog(JFrameframe){ super(frame,"删除信息",true); Containerc=this.getContentPane(); setLayout(newBorderLayout()); setBounds(720,320,280,180); JPaneljp1=newJPanel(); JLabeljl1=newJLabel("姓名:"); jtf=newJTextField(10); jp1.add(jl1); jp1.add(jtf); JPaneljp2=newJPanel(); jp2.setLayout(newFlowLayout(FlowLayout.RIGHT,20,10)); b1=newJButton("确定"); b2=newJButton("返回"); jp2.add(b1); jp2.add(b2); c.add(jp1,BorderLayout.CENTER); c.add(newJPanel(),BorderLayout.NORTH); c.add(jp2,BorderLayout.SOUTH); b1.addActionListener(this); b2.addActionListener(this); this.setVisible(true); } @Override publicvoidactionPerformed(ActionEvente){ if(e.getSource()==b1){ Stringstr=jtf.getText().trim(); for(inti=0;i<MainFrame.list.size();i++){ Students=MainFrame.list.get(i); if(str.equals(s.getName())){ intk=JOptionPane.showConfirmDialog(this,"确认删除?"); if(k==0){ MainFrame.list.remove(i); MainFrame.save(); dispose(); JOptionPane.showMessageDialog(this,"删除成功!"); return; }else{ return; } } } JOptionPane.showMessageDialog(this,"信息不存在!"); }elseif(e.getSource()==b2){ dispose(); } }}3.2.4修改功能的实现修改功能先调用匹配学生的判断类,匹配成功即跳出与添加功能相同的窗口,输出学生的各项信息,在文本框里面即可完成修改。(1)修改功能判断学生类的代码实现如下:JButtonb1,b2; staticJTextFieldjtf; publicstaticbooleanflag=false; publicComfirmNameDialog(JFrameframe){ super(frame,"修改信息",true); Containerc=this.getContentPane(); setLayout(newBorderLayout()); setBounds(720,320,280,180); JPaneljp1=newJPanel(); JLabeljl1=newJLabel("姓名:"); jtf=newJTextField(10); jp1.add(jl1); jp1.add(jtf); JPaneljp2=newJPanel(); jp2.setLayout(newFlowLayout(FlowLayout.RIGHT,20,10)); b1=newJButton("确定"); b2=newJButton("返回"); jp2.add(b1); jp2.add(b2); c.add(jp1,BorderLayout.CENTER); c.add(newJPanel(),BorderLayout.NORTH); c.add(jp2,BorderLayout.SOUTH); b1.addActionListener(this); b2.addActionListener(this); this.setVisible(true); } @Override publicvoidactionPerformed(ActionEvente){ if(e.getSource()==b1){ flag=false; dispose(); }elseif(e.getSource()==b2){ flag=true; dispose(); } } publicstaticStringgetMessage(){ returnjtf.getText(); }}(2)修改功能主体类的代码实现如下:JButtonb1,b2; JTextFieldjtf1,jtf2,jtf3,jtf4,jtf5,jtf6,jtf7; Stringname; booleanisFind=false; publicModifyDialog(JFrameframe,Stringstr){ super(frame,"修改信息",true); =str; Containerc=this.getContentPane(); setLayout(newBorderLayout()); setBounds(700,250,400,300); JPaneljp=newJPanel(); jp.setLayout(newGridLayout(4,1)); JPaneljp1=newJPanel(); jp1.setLayout(newFlowLayout(FlowLayout.LEFT,20,5)); JLabeljl1=newJLabel("姓名:"); jtf1=newJTextField(10); jtf1.setEditable(false); jp1.add(jl1); jp1.add(jtf1); JLabeljl5=newJLabel("地址:"); jtf5=newJTextField(10); jp1.add(jl5); jp1.add(jtf5); JPaneljp2=newJPanel(); jp2.setLayout(newFlowLayout(FlowLayout.LEFT,20,5)); JLabeljl2=newJLabel("性别:"); jtf2=newJTextField(10); jp2.add(jl2); jp2.add(jtf2); JLabeljl6=newJLabel("邮编:"); jtf6=newJTextField(10); jp2.add(jl6); jp2.add(jtf6); JPaneljp3=newJPanel(); jp3.setLayout(newFlowLayout(FlowLayout.LEFT,20,5)); JLabeljl3=newJLabel("关系:"); jtf3=newJTextField(10); jp3.add(jl3); jp3.add(jtf3); JLabeljl7=newJLabel("E-mail:"); jtf7=newJTextField(10); jp3.add(jl7); jp3.add(jtf7); JPaneljp4=newJPanel(); jp4.setLayout(newFlowLayout(FlowLayout.LEFT,20,5)); JLabeljl4=newJLabel("电话:"); jtf4=newJTextField(10); jp4.add(jl4); jp4.add(jtf4); JPanelj=newJPanel(); j.setLayout(newFlowLayout(FlowLayout.RIGHT,20,10)); b1=newJButton("修改"); b2=newJButton("返回"); j.add(b1); j.add(b2); jp.add(jp1); jp.add(jp2); jp.add(jp3); jp.add(jp4); c.add(jp,BorderLayout.CENTER); c.add(j,BorderLayout.SOUTH); b1.addActionListener(this); b2.addActionListener(this); Studenttmp; for(inti=0;i<MainFrame.list.size();i++){ tmp=MainFrame.list.get(i); if(tmp.getName().equals(name)){ jtf1.setText(tmp.getName()); jtf2.setText(tmp.getSex()); jtf3.setText(tmp.getRelation()); jtf4.setText(tmp.getTel()); jtf5.setText(tmp.getAddress()); jtf6.setText(tmp.getPost()); jtf7.setText(tmp.getEmail()); isFind=true; break; } } if(!isFind){ JOptionPane.showMessageDialog(this,"学生信息没有找到......"); return; } this.setVisible(true); } @Override publicvoidactionPerformed(ActionEvente){ if(e.getSource()==b1){ Studenttmp; for(inti=0;i<MainFrame.list.size();i++){ tmp=MainFrame.list.get(i); if(tmp.getName().equals(name)){ Strings1=jtf1.getText().trim(); Strings2=jtf2.getText().trim(); Strings3=jtf3.getText().trim(); Strings4=jtf4.getText().trim(); Strings5=jtf5.getText().trim(); Strings6=jtf6.getText().trim(); Strings7=jtf7.getText().trim(); MainFrame.list.remove(i); Students=newStudent(s1,s2,s3,s4,s5,s6,s7); MainFrame.list.add(s); MainFrame.save(); dispose(); JOptionPane.showMessageDialog(this,"学生信息修改成功!"); break; } } }elseif(e.getSource()==b2){ dispose(); } }}3.2.5查找功能的实现查找首先匹配学生,匹配成功即在下方文本框位置显示找到的学生信息。查找功能的代码实现如下: publicvoidactionPerformed(ActionEvente){ if(e.getSource()==b1){ Strings1; for(inti=0;i<MainFrame.list.size();i++){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子商务物流信息的存储效率提升
- 员工办公自动化系统使用指南
- 幼儿园教育故事小熊的圣诞节
- 2025年DVD播放设备合作协议书
- Sulfamonomethoxine-sodium-Standard-生命科学试剂-MCE
- 工作解决方案方案
- 艺术品展览销售合作合同
- Antimycin-A2-生命科学试剂-MCE
- 8-Hydroxyquinoline-hemisulfate-Standard-生命科学试剂-MCE
- 物流仓储设备采购与维护服务合同
- 瓶装液化气送气工培训
- 道德经全文完整版本
- 透析患者心理问题护理干预
- 潍坊市人民医院招聘真题
- 销售人员薪资提成及奖励制度
- 《大学生安全教育》课件 项目四 军事安全
- 10KV电力配电工程施工方案
- 2023年宏观经济学考点难点
- 先兆流产课件-课件
- 人教版数学六年级上册第一单元测试卷
- 黑龙江申论真题2021年(乡镇)
评论
0/150
提交评论