信息管理系统(java)

摘要:

该项目开发的软件为网络QQ账户信息管理系统软件,是鉴于目前人们QQ的使用领域的增加,QQ信息呈爆炸性增长的前提下人们对自己的QQ信息管理的自动化与准确化的要求日益强烈的背景下构思出来的,该软件设计完成后可用于使用QQ人群的QQ信息的管理.

目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息个人管理系统也是有了很大的发展,商业化的各类信息管理软件也不少. 本系统具有QQ信息的添加、修改、删除、查询等功能。他是基于文本格式,方便快捷。但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作。

【关键字】:

QQ信息管理系统、Java、SMTP、Base64编码;

绪论

课程目的

随着社会的不断发展,社会的竞争也越来越激烈,这就在无形中增加了人们的生活压力,要做的事情太多,在这种环境下有些事情顾及不到是在所难免的。信息化的发展帮助人们解决了这个难题,信息管理使生活有条不紊的进行着。个人QQ账号信息管理系统实现了管理的信息化,它记录着个人QQ账号的相关信息,用户可以在系统中任意添加、修改、删除个人数据。

课程研究的意义

目前社会上信息管理系统发展飞快,各个企事业单位都引入了信息管理软件来管理自己日益增长的各种信息个人管理系统也是有了很大的发展,商业化的各类信息管理软件也不少. 本系统具有QQ信息的添加、修改、删除、查询等功能。他是基于文本格式,方便快捷。但本系统完全独立开发,力求使系统功能简洁明了,但功能齐全且易于操作。

一、 java课程设计目的和要求

1.1课程设计目的

课程设计是重要的实践性环节之一,是在学生学习完《面向对象程序设计语言》课程后进行的一次全面的综合练习。本课程设计的目的和任务:

1. 巩固和加深学生对java语言课程的基本知识的理解和掌握

2. 掌握java语言编程和程序调试的基本技能

3. 利用java语言进行基本的软件设计

4. 掌握书写程序设计说明文档的能力

5. 提高运用java语言解决实际问题的能力

1.2课程设计要求

1. 分析课程设计题目的要求

2. 写出详细设计说明

3. 编写程序代码,调试程序使其能正确运行

4. 设计完成的软件要便于操作和使用

5.设计完成后提交课程设计报告

1.3系统功能图

二、 程序的设计与实现

2.1登陆界面的设计与实现

登录界面的展示图:

采用QQ登录的界面进行设计,也突出了这次QQ信息管理界面的主题是围绕QQ进行的。

功能介绍:

这个界面上面有注册功能,还有找回密码,分别用标签组件和图片组成。当鼠标放上以后会显示不同的颜色,点击后即可实现相应的功能。记住密码,和自动登录为灰色,表明无法使用,功能有待以后的补充实现。

2.2密码注册界面的设计和实现

注册界面展示图

功能介绍:

上面可以进行注册,输入用户名和密码,还有邮箱,这写都会记录在user.xx文件中。输入邮箱验证码后点击立即注册,才可以注册。注册时会根据输入的邮箱帐号发送一个验证码,输入即可,完成注册。

功能实现:

验证码会用邮箱发送到你所注册的邮箱中,点击获取验证码时,系统会根据相应的设置,登录到邮件服务器上,使用相应的帐号来发送到你的邮件Base64Util.java是将要登录邮件服务器的用户名和密码进行编码,在SMTPMain.java中调用Base64Util.java这个类来实现登录。

1. String str1 =""+(int)(Math.random()*10)+(int)(Math.random()*10)+(int)(Math.random()*10)+(int)(Math.random()*10);

这行代码实现了验证码的随机出现,在SMTPMain的这个类中有一个setMain的静态方法,返回值则是str1这个字符串,然后和用户输入的验证码进行对比。

1. Socket socket = new Socket("smtp.sina.com", 25);

2.          InputStream inputStream = socket.getInputStream();

3.          OutputStream outputStream = socket.getOutputStream();

4.          BufferedReader reader = new BufferedReader(new InputStreamReader(

5.                inputStream));

6.          PrintWriter writter = new PrintWriter(outputStream, true);

这几行代码来创建一个socket连接,登录邮件服务器,然后用输入流使用SMTP命令发送邮件。

2.3密码找回界面的设计和实现

找回密码界面展示图:

功能介绍:

第一个界面输入你要找的帐号和注册时的邮箱,同样也会发送验证码,点击确认后进入密码修改界面。

功能实现:

这是用一个多选项界面,在Find_Fram.java中添加了两个JInternalFrame窗口,当输入信息点击确定时,它会读取user.xx文件下的内容,若账户和邮箱存在,才会发送验证码,否则不会,等一切验证完毕后,这个面板为隐藏,密码修改面板就会显示出来,修改完成后,更新user.xx中的内容,下次登陆时调用。

2.4信息管理主界面设计和实现

主界面展示图:

添加后

功能介绍:

在次界面上可以将QQ信息添加进入,其中包含修改选中项,删除选中项,删除,查找关键字。输入你要录入的信息,点击确认即可添加,点击清除可清除刚才输入的内容。在界面上选中任意个数的数据点击修改选中项,即可跳入到修改的页面,对选中的数据进行修改,惦记你删除选中项,即可将选中的内容删除掉,点击删除,即可全部删除,在查找的下拉框中选择“请选择你要查找的关键字”,回车即可显示全部信息;在下拉框中选择你要查找的内容,输入关键字,回车即可查找出你需要内容(注:所有的查找都使用模糊查找的方法)。

功能实现:

添加功能

1. public void adds(String str){//添加数据是的函数

2.       Person person;

3.       String[]strs = str.split(",");

4.        person = new Person(strs[0], strs[1],strs[2], strs[4] +","+strs[5],strs[3] );

5.        persons.addElement(person);

6.    }

点击确认按钮调用adds方法,获取录入的信息。添加时将QQ号设为主键,要是添加相同QQ号的则添加失败。

修改选中项

1. private List<String> strings;

2.        strings =list.getSelectedValuesList();

3.       setVisible(false);

4.       swt_37.setVisible(true);

5.

6.              strings =list.getSelectedValuesList();

7. if (strings.isEmpty()) {

8.                   setVisible(true);

9.                }

10.             swt_37.edit(strings);

11. for (String str : strings) {

12. try {

13.                      delet(str);

14.                   } catch (IOException e1) {

15.

16.                   }

17.                }

18.             update();

19.          }

1. 将选中的内容传入到修改的界面中然后将选中的内容删除掉,添加修改界面返回的内容。public void delet(String str) throws IOException{//删除数据是的函数

2.       String[]strs = str.split(",");

3. for (Person person : persons) {

4. if(strs[1].equals(person.getQQ())){

5.    persons.remove(person);

6. throw new IOException();

7.    }

8.       }

9.    }

次代码在删除选中项是也调用来删除选中的内容。

1. 点击删除按钮是,调用persons.removeAllElements();

2. update();

update方法为显示数据是的更新方法

1. public void update(){//更新显示数据的函数

2.       model.removeAllElements();

3. for (Person person : persons) {

4. try {model.addElement(person.toString());}

5. catch (Exception e2) {}

6.       list.setModel(model);

7.       }}

在查找时实现模糊查找的方法

1. public int ifSame(String str){

2. int k=0;

3.       String [] stres = new String[textField_2.getText().length()];

4.       String [] stres1 = new String[str.length()];

5. for(int i =0;i<textField_2.getText().length();i++)

6.       {

7.          stres[i]=textField_2.getText().substring(i, i+1

8.       }

9. for(int i =0;i<str.length();i++)

10.       {

11.          stres1[i]=str.substring(i, i+1);

12.          System.out.println(stres1[i]);

13.       }

14. if(stres.length<stres1.length){

15. for(int i=0;i<stres.length;i++){

16. if(stres[i].equals(stres1[i]))

17.

18.                {

19.                   k=k+1;

20.                }

21.       }

22.       }

23. if(stres1.length<=stres.length) {

24. for(int i=0;i<stres1.length;i++){

25. if(stres[i].equals(stres1[i]))

26.                   {

27.                      k=k+1;

28.                         }

29.

30.          }

31.       }

32. return k;

33.    }

此函数接收查找的关键字,与信息集合的所有对应的元素进行判断,若有一处相同的地方,则函数的返回值不为0,然后就将该数据显示出来。

2.5信息修改界面的设计和实现

界面展示图:

没有选中修改项时的界面

选中两项内容时的界面

功能介绍

在信息修改界面中的下拉框中,选中你要修改的内容,在里面的信息框中填入你要修改的内容,点击确认修改,即可完成内容的修改,选择请选择修改项修改时,不会产生任何作用。

功能实现:

这是用一个多选项界面,在Modify_Fram.java中添加了两个JInternalFrame窗口,当没有在主界面选中内容时,就会调用提示没有选中信息,如果选中信息,就会跳到信息修改的界面。获取要修改的内容,在修改界面的下拉框中选中要修改的内容,在修改后,然后在集合中删除刚才选中的内容。到时返回时调用update()方法就可以更新数据。

1. btnNewButton.addActionListener(/**

2.        * @author 冷血

3.        *

4.        */

5. new ActionListener() {//修改数据后的操作

6.          String[] string;

7.          @Override

8. public void actionPerformed(ActionEvent e) {

9. if (!textField.getText().equals("")&&!textField_1.getText().equals("")&&(rdbtnNewRadioButton.isSelected()||rdbtnNewRadioButton_1.isSelected())) {

10.             string= comboBox_2.getSelectedItem().toString().split(",");

11.             string[0]=textField.getText();

12.             string[1]=textField_1.getText();

13. if (rdbtnNewRadioButton.isSelected()) {

14.             string[2] = rdbtnNewRadioButton.getText();

15.          }

16. else{

17.             string[2] = rdbtnNewRadioButton_1.getText();

18.          }

19.          string[3] = comboBox_3.getSelectedItem().toString();//QQage

20.          string[4] = comboBox.getSelectedItem().toString();//sheng

21.          string[5] = comboBox_1.getSelectedItem().toString();//shi

22.                delet(comboBox_2.getSelectedItem().toString()); adds(string[0]+","+string[1]+","+string[2]+","+string[3]+","+string[4]+","+string[5]);

23.          update();

24.          }

25.          }

26.       });

27.

28.    }

29. public List<String> getList(){//修改完退出时执行的动作

30.       delet("请选择修改项");

31.       model.removeAllElements();

32. return strings;

33.    }

2.6新建文件的设计和实现

界面展示:

功能介绍:

点击新建文件,主界面会变空白,这是会提示你保存文件以前的文件,默认的保存路径为程序目录下的data目录。

功能实现:

1. mntmNewMenuItem.addActionListener(new ActionListener() {//新建文件

2.          @Override

3. public void actionPerformed(ActionEvent e) {

4. int i = JOptionPane.showConfirmDialog(null, "是否保存文件");

5. //0是1否2取消

6. if(i==0&&strFileName.equals(""))

7.          {

8.             persons.removeAllElements();

9.             update();

10.             strFileName=JOptionPane.showInputDialog("请输入文件名", "");

11. if (strFileName==null) {

12.             JOptionPane.showMessageDialog(null, "请输入文件名",strFileName,JOptionPane.WARNING_MESSAGE);

13.          }

14.          }

15. if(i==0&&!strFileName.equals("")){

16.             update();

17.             Save();

18.             strFileName="";

19.             persons.removeAllElements();

20.             update();

21.          }

22.          }

23.       });

2.7保存文件、文件另存为和打开的实现

界面展示:

功能介绍:

以上的可以实现最基本的文件保存,另存为,打开的功能。保存时默认路径为程序目录下的data目录;另存为自己可以选择目录,打开时的默认路径为程序目录下的data目录。

功能实现:

1. jfChooser = new JFileChooser("data/");

2.      FileNameExtensionFilter jfExtensionFilter = new FileNameExtensionFilter(Constant.FILE_TYPE, Constant.FILE_SUFFIX);

3.      jfChooser.addChoosableFileFilter(jfExtensionFilter);

4.      jfChooser.setFileFilter(jfExtensionFilter);

5.      jfChooser.setSelectedFile(new File(Constant.SAVA_FILE_NAME));

6.      setVisible(false);

创建JFChooser是输入JFileChooser("data/");来设置文件打开和保存时的默认路径,

FileNameExtensionFilter jfExtensionFilter来设置文件过滤器,只打开所需后缀的文件。

三、 程序的设计思路

3.1程序设计思路

程序用截图来获取所需要的一系列图片,这些图片保存在程序主目录下:/src/information/icons目录下,程序编写采用先设计后编写的模式,从注册,登录,录入信息等一步一步逐渐完成。其中文件的读写全部用ObjectStream的方式来读写,用集合来保存QQ用户的信息,这样可以方便后期的读写操作,一次性对集合里的元素进行操作,方便来增删改查。程序中有两个包,一个是装有关于登录所需要的类,另一个是主界面所需要的类。

3.2程序必要的jar包

此程序要发送邮件,所以需要java程序设计的密码库支持,对登录邮件服务器的帐号和密码进行Base64编码,此java包为sun.misc.BASE64Decoder.jar

3.3程序中的工具类

程序中有三个工具类分别为1、Base64Util.java,此类用来对邮件帐号和密码进行编码;2、ToolImage.java,图片读写的工具类,用来读写程序中需要的图片;3、Constant.java,里面保存着程序所用到的一些常量,它可以使程序后期的修改跟更方便,更加体现了程序的扩展性。

四、 总结

4.1程序反思

这是一个关于QQ信息的管理系统,但所需的功能实现还有许多,从登录开始,设计了注册,和找回密码,但是在获取验证码上,当程序调用获取验证码的方法上还不好,当发送时程序就会卡住,没有获取验证码倒计时的功能,这会让用户无奈,有待改进。程序的文件新建上,当保存一次后不能判断是否保存过,如果保存了,还需要继续保存;信息查找时模糊查找的功能有待改进,不能像QQ那样查找联系人一样,搜索顺序有待改进;还有在录入时数据对错,和格式的判断。总体存在一些数据格式和正确性的判断,还有一些异常的处理,在界面的编写上采用拖拉的方式,这使得程序的扩张性不高,没有达到程序高内聚,低耦合的要求,存取文件信息全是在本地完成,若是使用数据库就更好了。

4.2心得体会

很快一周的时间就过去了,在这短暂的课程设计过程中,我们一起学习,加深了我对JAVA的认识,明白了学好一门编程语言的重要性。在做的过程中我遇到了许多问题,有些是自己不会,有的是自己马虎造成的,在程序设计过程中,要注意每一个细节,无论或大或小的错误都要尽量避免发生。这次独立的课程实验中,锻炼了我用程序设计的思想独立分析问题,解决问题的思维。在程序设计的道路上是艰苦的,要努力学习,遇到自己不会的问题要努力尝试,结合理论知识,在实践中不断的去练习,来提高自己的编程水平。

五、 参考文献

[1][中]叶核亚.《Java程序设计使用教程》(第四版).电子工业出版社。

[2]极客学院.java语言开发学习(提供jar包和视频教程)。

[3]腾讯QQ提供图片。

源代码地址:https://yunpan.cn/cuuYItQATFP5d 访问密码 e058

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

CTF---Web入门第二题 上传绕过

上传绕过分值:10 来源: Justatest 难度:易 参与人数:5847人 Get Flag:2272人 答题人数:2345人 解题通过率:97% by...

48380
来自专栏小樱的经验随笔

CTF---Web入门第十三题 拐弯抹角

拐弯抹角分值:10 来源: cwk32 难度:易 参与人数:5765人 Get Flag:2089人 答题人数:2143人 解题通过率:97% 如何欺骗服务...

421110
来自专栏微服务生态

Akka简单的性能测试

这种方案是采用MQ作为中间的媒介,在服务端采用线程池异步处理任务,处理完成之后将结果发送到MQ中,客户端采用侦听的方式得到结果继续进行处理。

21110
来自专栏日常学python

利用python爬取网易云音乐,并把数据存入mysql

这是我的第四篇原创文章 在简单学习了python爬虫后,又想继续折腾,进而找到了这个网易云音乐,因为本人平时就是用它听的歌,也喜欢看歌里的评论,所以就爬网易云...

1.5K120
来自专栏云飞学编程

新手也能做爬虫!一起来爬电影信息吧

第二篇练手的东西来了,当然这里的电影信息并不是那些评论或者评分什么的,今天咱们来试试直接爬电影链接!

9630
来自专栏玄魂工作室

CTF实战32 综合实战和讲解二(讲解部分)

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

9340
来自专栏非典型技术宅

Swift多线程之Operation:按优先级加载图片1. 进程和线程2. Operation3. Basic Demo4. 案例实现

15330
来自专栏Golang语言社区

golang websocket总结(问题贴)

因为工作的需要,接触了websocket,开始的一些很简单的代码,都不知道该怎样运行起来,所以,总是有一层神秘感,却没有太多的兴趣去研究它。不过,还是免不了要了...

43570
来自专栏企鹅号快讯

Scrapy爬虫教程二 浅析最烦人的反爬虫手段

最近一直在弄爬虫,也爬取了知名网站的一些数据(这里只是个人学习使用,不是商用!!!),大家都知道,爬虫和反爬虫一直以来都是相爱相杀的,爬虫程序员希望破解反爬虫手...

50500
来自专栏码神联盟

网络爬虫 | Java 实现 AI人工智能技术 - 网络爬虫功能

目前网络上充斥着越来越多的网页数据,包含海量的数据,但是很多时候,不管是出于对产品需求还是数据分析的需要,我们需要从这些网站上搜索一些相关的、有价值的数...

2.3K50

扫码关注云+社区

领取腾讯云代金券