目录
摘要:
该项目开发的软件为网络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