第一篇:java课程设计管理系统
人员信息管理系统 java课程设计
大学人员信息管理系统
1 / 29
目录
目录 ....................................................................................................................................... 1 设计任务书 ............................................................................................................................... 2 课程设计任务 ........................................................................................................................... 2 程序功能实现: ....................................................................................................................... 3 1.程序主体 ............................................................................................................................ 3 2.流程图: ............................................................................................................................ 4 3.模块说明 ............................................................................................................................ 4 3.1、主菜单四个选项 ...................................................................................................... 4 3.
2、教师功能菜单 .......................................................................................................... 5 3.3、学生功能菜单 .......................................................................................................... 5 3.
4、查找菜单 .................................................................................................................. 6 4.源代码及说明 ................................................................................................................. 6 4.1、listStuTea 类 ............................................................................................................ 6 4.
2、Menu 类 ................................................................................................................ 10 4.3、StudnTeach 类 ....................................................................................................... 16 4.
4、Student 类 ............................................................................................................. 19 4.5、Teacher 类 ............................................................................................................. 19 4.
6、Person 类 ............................................................................................................... 20 4.7、lkExecption类 ........................................................................................................ 21 4.
8、MainStuTea类........................................................................................................ 23 5.操作方法和测试结果 ...................................................................................................... 24 5.1.1、教师信息显示 ..................................................................................................... 24 5.1.
2、教师信息添加 ..................................................................................................... 24 5.1.3、教师信息删除 ..................................................................................................... 25 5.1.
4、教师信息查找 ..................................................................................................... 26 5.2、学生菜单实现 ........................................................................................................ 28 6.设计体会 .......................................................................................................................... 28
Java程序设计 大学人员信息管理系统
2 / 29
设计任务书
问题描述:
编写程序对大学里的人员进行管理。大学里的人员主要由学生、教师和在职进修教师(既是学生又是教师)组成,各类人员均有姓名、电话和住址等信息,学生另有所属专业信息,教师另有所在系部、授课信息及工资信息,在职进修教师具备以上各类人员的信息。
要求:
1、设计Person类,保存各类人员均有的姓名、电话和住址等信息。
2、设计Student类或接口,继承Person类,并添加所属专业班级信息。
3、设计Teacher类接口,继承Person类,并添加所在系部信息,授课信息及工资信息。
4、设计StudenTeacher类,继承Student类接口和Teache类接口。其具备以上各类人员信息。
5、把创建的所有StudenTeacher对象按照其所属系部依次组织在一个文件中方便查询、修改、删除及添加等操作。
6、对各类的对象进行信息输入操作,输入信息包括该类对象的所有信息。
7、对各类的对象进行输出操作,显示输出该类对象的所有信息
课程设计任务及设计人
设计任务:
大学人员信息管理系统 课程目的:
1、复习、巩固Java语言的基础知识,进一步加深对Java语言的理解和掌握;
2、课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力;
Java程序设计 大学人员信息管理系统
3 / 29
3、培养学生在项目开发中团队合作精神、创新意识及能力。
课程要求:
1、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;
2、系统设计要实用,编程简练,可用,功能全面
3、说明书、流程图要清楚
4、记录设计情况(备查,也为编写设计说明书作好准备);
5、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。
6、本设计需要实现Java的面向对象开发运用到的有Java的接口,Java的继承,Java的异常处理,Java类的封装。能够在异常输入的情况下,能正确处理。最后得到正确结果。
程序功能实现:
一、
二、
三、
四、
五、
六、
按照课程的要求实现学生和教师的基本信息的录入。 把输入的教师和学生信息显示出来。
有姓名和专业两种查找方式去分别把老师和学生的信息查找并且显示出来。 删除选项可以删除相应学生和老师信息。
用switch语句实现菜单功能,字符界面做到简洁清晰
异常处理处理错误的输入并且返回错误的提示,更正后填入正确数据。
1.程序主体
1、 设计分析:
1.1、 实体是实现程序思想的主要方式,首先应该分为学生和老师2个入口,分别做查询和信息添加、显示、删除和查找的功能。
1.2、 学生和老师的信息输入考虑要求多名信息考虑用对象数组去实现。但是对象数组的删除不是本学期的内容。且排序麻烦。考虑用其他方式实现信息录入,查阅相关信息发现可以使用list对象实现信息录入和删除。
1.3、 菜单使用switch语句实现菜单功能,菜单的相互调用实现功能的循环。
Java程序设计 大学人员信息管理系统
4 / 29
2.流程图:
3.模块说明
3.1、主菜单四个选项
学生入口:
Java程序设计 大学人员信息管理系统
5 / 29
这个模块与学生功能模块相连。
教师入口:
这个模块与教师功能模块相连
显示全部信息:
这个模块显示所有的老师和学生信息
3.2、教师功能菜单
显示教师信息:
这个模块显示输入的教师信息,如果不存在提示输入信息
添加教师信息:
这个模块添加教师基本信息
删除教师信息:
这个模块按照序号删除教师信息,如果不存在提示信息输入
查找教师信息:
按照姓名和专业查找教师信息
返回上一级菜单: 返回主菜单
3.3、学生功能菜单
显示学生信息:
这个模块显示输入的教师信息,如果不存在提示输入信息
添加学生信息:
这个模块添加教师基本信息
删除学生信息:
这个模块按照序号删除教师信息,如果不存在提示信息输入
查找学生信息:
按照姓名和专业查找学生信息
返回上一级菜单: 返回主菜单
Java程序设计 大学人员信息管理系统
6 / 29
3.4、查找菜单
按照姓名查找:
查找模块,按照姓名查找,如果不存在则提示输入信息。 按照专业查找:
查找模块,按照专业查找,如果不存在则提示输入信息。
返回上一级菜单: 返回主菜单
4.源代码及说明
4.1、listStuTea 类
用来实现学生和教师数据添加、删除、查找的方法
import java.util.*; import lkExecption.LKExecption; public class listStuTea extends StudnTeach{
final int SIZE = 50;//最大学生和教师人数
listStuTea[] st = new listStuTea[SIZE];//学生和老师对象数组 Scanner into = new Scanner(System.in); List list1=new ArrayList(); List list2=new ArrayList(); public int getTeaNumber() //返回教师链表长度 { } public int getStuNumber() //返回学生链表长度 { } public int getNumber() { // TODO Auto-generated method stub return list2.size()+list1.size(); return list2.size(); return list1.size(); Java程序设计 大学人员信息管理系统
7 / 29
} public void FindStuName() {
} public void FindTeaName() {
String tpname; boolean zy = true; StudnTeach point; System.out.println("请输入教师姓名:"); tpname = into.nextLine(); for(int i = 0;i
} point =list1.get(i); if(tpname.equals(point.name)) {
} //break; System.out.println("要查找的姓名存在"); { showTea(i,point); zy = false; //标志位 } String tpname; boolean zy = true; StudnTeach point; System.out.println("请输入学生姓名:"); tpname = into.nextLine(); for(int i = 0;i
} if(zy) System.out.println("没有该学生"); if(getStuNumber()==0) System.out.println("警告!!!学生数据为空请添加数据"); point =list2.get(i); if(tpname.equals(point.name)) {
} System.out.println("要查找的姓名存在"); showStu(i,point); zy = false; Java程序设计 大学人员信息管理系统
8 / 29
if(zy) System.out.println("没有该老师"); if(getTeaNumber()==0) System.out.println("警告!!!老师数据为空请添加数据");
} {
public void FindteaSpec() String tpSpec; boolean zy = true; StudnTeach point; System.out.println("请输入教师专业:"); tpSpec = into.nextLine(); for(int i = 0;i
} if(zy) System.out.println("没有该专业的老师"); if(getTeaNumber()==0) System.out.println("警告!!!老师数据为空请添加数据"); point =list1.get(i); if(tpSpec.equals(point.getteaSpeciality())) { showTea(i,point); zy = false;//标志位 }
} {
public void FindstuSpec() String tpStu; boolean zy = true; StudnTeach point; System.out.println("请输入学生专业:"); tpStu = into.nextLine(); for(int i = 0;i
} if(zy) System.out.println("没有选修该专业的学生"); point =list2.get(i); if(tpStu.equals(point.getstuSpeciality())) { showStu(i,point); zy = false;//标志位 } Java程序设计 大学人员信息管理系统
9 / 29
if(getStuNumber()==0) System.out.println("警告!!!学生数据为空请添加数据"); } public void showStu(int n,StudnTeach point) { point=list2.get(n); System.out.println("学生编号:"+n);
System.out.println("姓名:"+point.name+" 性别:"+point.sex+" 年龄:"+point.age);
System.out.println("电话:"+point.phone); System.out.println("地址:"+point.address); System.out.println("专业:"+point.getstuSpeciality()); System.out.println("班级:"+point.getClassname()); }
public void showTea(int n,StudnTeach point) { point=list1.get(n); System.out.println("教师编号:"+n);
System.out.println("姓名:"+point.name+" 性别:"+point.sex+" 年龄:"+point.age);
System.out.println("电话:"+point.phone); System.out.println("地址:"+point.address); System.out.println("专业:"+point.getteaSpeciality()); System.out.println("工资:"+point.getPay()); }
public void addstu(int n) throws LKExecption {
st[n] = new listStuTea(); st[n].add(); st[n].setClassname(); st[n].setstuSpeciality(); list2.add(st[n]); if(list2.size()!=0) System.out.println("添加学生成功");
}
public void addtea(int n) throws LKExecption {
st[n] = new listStuTea(); st[n].add(); st[n].setteaSpeciality(); Java程序设计 大学人员信息管理系统
10 / 29
}
st[n].setPay(); list1.add(st[n]); if(list1.size()!=0) System.out.println("添加教师成功");
}
public void delTea() {
}
public void delStu() {
} System.out.println("请输入被删的学生编号"); int k =into.nextInt(); if(list2.size()<=k||k<0) System.out.println("删除失败!编号不存在请重新输入!"); else { list2.remove(k); System.out.println("删除成功"); } System.out.println("请输入被删的教师编号"); int k =into.nextInt(); if(list1.size()<=k||k<0) System.out.println("删除失败!编号不存在请重新输入!"); else { list1.remove(k); System.out.println("删除成功"); } 4.2、Menu 类
字符菜单的实现
import java.util.*; import lkExecption.LKExecption; public class Menu {
Scanner into = new Scanner(System.in); int num = 0; List list=new ArrayList(); Java程序设计 大学人员信息管理系统
11 / 29
StudnTeach point = new listStuTea();//遍历指针 public Menu() throws LKExecption{ } public int setIn() {
} void MainMenu() throws LKExecption//主菜单 { System.out.println("================"); System.out.println("1.教师入口"); System.out.println("2.学生入口"); System.out.println("3.显示全部信息"); System.out.println("4.退出管理"); switchMainMenu(); } void FindMenu()//查找菜单 {
} void MenuTea1_1() throws LKExecption//老师菜单 {
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("----------------"); System.out.println("1.按照姓名查找"); System.out.println("2.按照专业查找"); System.out.println("3.返回上一级菜单"); //switchMainMenu(); int t; String tpNum = null; try{
} catch(NumberFormatException e) { } return t; t = new LKExecption().Num1Execption(tpNum); System.out.println("请输入选项"); tpNum = into.nextLine(); t = Integer.parseInt(tpNum); MainMenu(); Java程序设计 大学人员信息管理系统
12 / 29
} switchMenuTea1_1(); void MenuStu1_1() throws LKExecption//学生菜单 {
} void switchFindStuMenu() throws LKExecption//查找学生菜单 {
} void switchFindTeaMenu() throws LKExecption//查找教师菜单 {
int t; t = setIn(); switch(t) { case 1: int t; t = setIn(); switch(t) { case 1:
} point.FindStuName(); FindMenu(); switchFindStuMenu(); break; point.FindstuSpec(); FindMenu(); switchFindStuMenu(); break; MenuStu1_1(); switchMenuStu1_1(); break; System.out.println("输入错误请重新输入"); switchFindStuMenu(); System.out.println("----------------"); System.out.println("1.显示学生信息"); System.out.println("2.添加学生信息"); System.out.println("3.删除学生信息"); System.out.println("4.查找学生信息"); System.out.println("5.返回上一级菜单"); switchMenuStu1_1(); case 2: case 3: default: Java程序设计 大学人员信息管理系统
13 / 29
} void switchMainMenu() throws LKExecption//主菜单 {
int t; t = setIn(); switch(t) { case 1:
MenuTea1_1();//老师显示菜单
break; MenuStu1_1();//学生显示菜单
break; if(point.getNumber()==0) System.out.println("警告!!!数据为空请添加数据"); else{
} for(int i = 0;i
point.showTea(i,point); point.showStu(i,point); for(int i = 0;i
} point.FindteaSpec(); FindMenu(); switchFindTeaMenu(); break; MenuTea1_1(); switchMenuTea1_1(); break; System.out.println("输入错误请重新输入"); switchFindTeaMenu();
point.FindTeaName(); FindMenu(); switchFindTeaMenu(); break; case 2: case 3: default: case 2: case 3: Java程序设计 大学人员信息管理系统
14 / 29
}
} MainMenu(); break; System.out.println("欢迎再次光临!大学人员信息管理系统!!"); break; System.out.println("输入错误请重新输入"); switchMainMenu(); case 4: default: void switchMenuTea1_1() throws LKExecption {
System.out.println("----------------"); int t; t = setIn(); switch(t) { case 1:
if(point.getTeaNumber()==0) System.out.println("警告!!!教师数据为空请添加数据"); for(int i = 0;i
FindMenu(); switchFindTeaMenu(); break; MainMenu(); break; case 2: case 3: case 4: case 5: Java程序设计 大学人员信息管理系统
15 / 29
}
} default:
} System.out.println("输入错误请重新输入"); switchMenuTea1_1(); void switchMenuStu1_1() throws LKExecption {
} System.out.println("----------------"); int t; t = setIn(); switch(t) { case 1:
} if(point.getStuNumber()==0) System.out.println("警告!!!学生数据为空请添加数据"); for(int i = 0;i
Java程序设计 大学人员信息管理系统
16 / 29
4.3、StudnTeach 类
继承于教师和学生接口实现它们抽象方法,且继承人类属性。
import java.util.*;
import lkExecption.LKExecption; class StudnTeach extends Person implements Student,Teacher{
Scanner into = new Scanner(System.in); float pay = 0;//工资
String classname = null;//班级 String stuSpec = null;//老师专业 String teaSpec = null;//学生专业
void add() throws LKExecption {
}
public void addstu(int n) throws LKExecption{
}
public void addtea(int n) throws LKExecption{
}
public void setPay() {
String tpNum = null; try{ //add();
//setteaSpeciality(); //setPay() ; //add();
//setClassname(); //setstuSpeciality(); setName(); setSex(); setAge(); setPhone (); System.out.println("请输入地址"); address = into.nextLine();
Java程序设计 大学人员信息管理系统
17 / 29
}
} System.out.println("请输入工资:"); tpNum = into.nextLine(); pay = Integer.parseInt(tpNum); catch(NumberFormatException e) { } pay = new LKExecption().Num1Execption(tpNum); public float getPay() {
}
public void setClassname() {
}
public String getClassname() {
}
public void setstuSpeciality() {
}
public String getstuSpeciality() {
}
return stuSpec;
System.out.println("请输入专业:"); stuSpec = into.nextLine();
return classname;
System.out.println("请输入班级:"); classname = into.nextLine();
return pay; Java程序设计 大学人员信息管理系统
public void setteaSpeciality() {
System.out.println("请输入专业:");
teaSpec = into.nextLine();
}
public String getteaSpeciality() {
return teaSpec; }
public void show(boolean b, int num, StudnTeach point) {
}
public void showStu(int num, StudnTeach point) {
}
public void showTea(int num, StudnTeach point) {
}
public int getStuNumber() {
return 0; }
public int getTeaNumber() {
return 0; }
public int getNumber() {
return 0; }
public void delStu() {
} Java程序设计
18 / 29 大学人员信息管理系统
19 / 29
} public void FindteaSpec() { } public void FindTeaName() { } public void FindstuSpec() { } public void FindStuName() { } public void delTea() { }
4.4、Student 类
接口、学生的抽象方法
public interface Student {
} abstract void setstuSpeciality(); abstract String getstuSpeciality(); abstract void setClassname(); abstract String getClassname();
4.5、Teacher 类
接口、教师的抽象方法
public interface Teacher { Java程序设计 大学人员信息管理系统
20 / 29
} abstract void setteaSpeciality(); abstract String getteaSpeciality(); abstract void setPay(); abstract float getPay();
4.6、Person 类
定义人类的基本属性
import java.util.*; import lkExecption.LKExecption; public class Person {
Scanner into = new Scanner(System.in); String name; int phone; String address; String sex; int age; public void setName() {
} public void setSex() throws LKExecption {
} public void setAge() { String tpAge = null; try{ System.out.println("请输入性别:"); sex = into.nextLine(); if(sex.equals("man")||sex.equals("woman")) {} else
} catch(LKExecption lk) { } sex = new LKExecption().sexExecption(sex); throw new LKExecption(); System.out.println("请输入姓名:"); name = into.nextLine(); Java程序设计 大学人员信息管理系统
21 / 29
}
} try{
} catch(NumberFormatException e) { } age = new LKExecption().NumExecption(tpAge); System.out.println("请输入年龄:"); tpAge = into.nextLine(); age = Integer.parseInt(tpAge); public void setPhone () {
} String tpNum = null; try{
} catch(NumberFormatException e) { } phone = new LKExecption().Num1Execption(tpNum); System.out.println("请输入电话号码:"); tpNum = into.nextLine(); phone = Integer.parseInt(tpNum);
4.7、lkExecption类
自定义异常类
package lkExecption; import java.util.Scanner; public class LKExecption extends Exception {
Scanner into = new Scanner(System.in); public String sexExecption(String mg) {
String str; boolean pd = true; do{
System.out.println(mg+" 不是正确的性别,正确的性别为 man 或者 woman"); str = into.next(); Java程序设计 大学人员信息管理系统
22 / 29
} //System.out.println(mg+" 验证");
if(str.equals("man")||str.equals("woman")) { } }while(pd); return str; pd = false; public int NumExecption(String mg) {
String num = null; int tpNum = 0; boolean pd = true; System.out.println(mg+" 请正确的数字或者不在范围内!请重新输入!!"); do{
try{
} catch(NumberFormatException e) { System.out.println(num+" 请正确的数字或者不在范围内!请重新输num = into.nextLine(); tpNum = Integer.parseInt(num); if(tpNum>120||tpNum<0) //范围判断 throw new NumberFormatException(); else pd = false; 入!!");
}
} public String charExecption(String mg) {
final String[] str={"null"};//这里指定 规定字段 boolean pd = true; do{ System.out.println(mg+" 不是正确字段,请输入指定的字段"); mg = into.next(); for(int i =0;i
23 / 29
}
} } }while(pd); return mg; public int Num1Execption(String mg) {
} String num; int tpNum = 0; System.out.println(mg+" 不是数字!请输入数字!!"); do{
try{
} catch(NumberFormatException e) { System.out.println(mg+" 不是数字!请输入数字!!"); } num = into.nextLine(); tpNum = Integer.parseInt(num); break; }while(true); return tpNum; 4.8、MainStuTea类
主函数调用
import lkExecption.LKExecption; public class MainStuTea {
} public static void main(String[] args) throws LKExecption { Menu lk = new Menu(); }
Java程序设计 大学人员信息管理系统
24 / 29
5.操作方法和测试结果 5.1.1、教师信息显示
选择一进入教师信息入口
选择一进入教师信息查看
因为我们没有添加教师信息,所以他要求我们添加教师信息
5.1.2、教师信息添加
选择二进入教师信息添加
Java程序设计 大学人员信息管理系统
25 / 29
教师信息添加成功,如果不是指定字段输入,出现异常则重新输入 如下为添加的信息输入显示
5.1.3、教师信息删除
Java程序设计 大学人员信息管理系统
26 / 29
5.1.4、教师信息查找
专业查找
现在添加三个教师信息,如下显示
首先使用专业查找,我们查找computer专业的
Java程序设计 大学人员信息管理系统
27 / 29
查找其他math专业
查找不存在的专业
姓名查找
再添加一个同名的教师
查找lisi Java程序设计 大学人员信息管理系统
28 / 29
5.2、学生菜单实现
学生信息采取同样测试
6.设计体会
这个课程设计可以的设计心得,可谓十分波折。全部的源代码都出自自己,其中的list排列我们还没有学习。在这里要感谢google感谢baidu。没有他们就没有今天的代码。当然网上只有相似的课题没有相同的代码,list排列经过自己一小时的摸索可以了解了部分的运用,首先写了一个test类来测试这个用法
import java.util.ArrayList; import java.util.LinkedList; import java.util.Iterator; import java.util.List; import java.util.Scanner;
public class test { public static void main(String[] args) {
System.out.println("开始:"); String a = "A", b = "B", c = "C", d = "D", e = "E"; List list = new LinkedList(); list.add(a); list.add(e); list.add(d); Java程序设计 大学人员信息管理系统
29 / 29
list.set(1, b);// 将索引位置为1的对象e修改为对象b list.add(2, c);// 将对象c添加到索引位置为2的位置 list.add(e); list.remove(1); Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }
System.out.println("结束!"); } } 再想了一下把它添加进了listStuTea对象,全都的代码完成用了一天的时间,在原来想起写500多行的代码几乎是不可能的,但是在这个课程设计中实现了。这个课程设计真的使自己学到了很多的东西。在接口的使用还不是很好的和实际模型很多的结合起来,这是锻炼较少的原因,前期的分析也幼稚的表现了自己在这方面的不足,在层次结构上浪费了较多的时间。 总之在这方面的锻炼还是比较少,我想不管是在以后布置下来的课程设计才去编写代码,这是不可行的,得在平时多多锻炼。
Java程序设计
第二篇:大学JAVA课程设计——学生信息管理系统
沈阳理工大学课程设计
沈阳理工大学课程设计
摘要
Java语言是当前最为流行的程序设计语言之一,诸多优秀的的特性使其成为被业界广泛认可和采用的工具。本设计可以帮助同学掌握和应运所学的面向对象程序设计学生学籍信息管理系统的编程内容,培养同学们建立对象模型,处理对象和对象集关系和对图形用回界面设计编程以及文件和流的编程问题的能力,训练同学为解决实际问题而创建较完整的简单面向对象和管理系统编程应运程序的独立编程能力.本设计是一个常见的学生学籍管理系统应运程序.
系统实现的功能: 界面操作实现学生学籍信息的添加、删除、查询、修改功能,在文本文件中的的信息的动态处理。
关键词:
学生学籍管理系统;图形用户界面设计;文件和流;java
I
沈阳理工大学课程设计
目 录
一、课程设计的目的与意义 .......................................................................................... 1
1.目的 .......................................................... 1 2.意义 .......................................................... 1
二、需求分析 .......................................................................................................................... 1
1. 学生学籍管理系统主界面模块 ................................ 1 2. 录入学生基本信息模块 ...................................... 1 3. 修改学生基本信息模板 ...................................... 1 3. 查询学生基本信息模板 ...................................... 1 4. 删除学生基本信息模板 ...................................... 1
三、分案设计 .......................................................................................................................... 3
1. 定义四个Panel面板 ...................................... 3
四、方案的实施 ...................................................................................................... 3
五、心得体会 ......................................................................................................... 15
六、参考文献 ......................................................................................................... 16
II
沈阳理工大学课程设计
一、课程设计的目的与意义
目的:深入理解java语言的语法规则及其优势,掌握类与方法的构造方法,掌 握基于java的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。
意义:熟练运用java语言、基本构造方法和算法的基础知识,独立编制一个具有中等难度的、解决实际应用问题的应用程序。通过题意分析、选择类结构、算法设计、编制程序、调试程序、软件测试、结果分析、撰写课程设计报告等环节完成软件设计的全过程,不断地完善程序以提高程序的性能。
二、需求分析
该学生学籍管理系统的所有功能均在一个Frame窗体中实现。 1.学生学籍管理系统主界面模块:
采用Frame窗体来设置欢迎界面包括背景图片及字幕(可以设计成滚动字幕效果),左上方的菜单条设计成下拉式。包括“录入学生基本信息”、“修改学生基本信息”、“删除学生基本信息”、“查询学生基本信息”和“退出系统”五项菜单项。 2.录入学生基本信息模块:
采用Panel面板来设置该部分内容信息并采用方位布局(边缘布局)和Box轻量级组件来设置“学号”、“姓名”、“性别”、“专业”、“年级”、“出生”,并在该面板中添加了“录入”和“重置”两个按钮进行监听,最后将该面板加入到Frame窗体中去。 3.修改学生基本信息模板:
采用Panel面板来设置该部分内容信息,同样是采用方位布局及Box组件来设置相关信息,并在学号旁设置了“开始修改”按钮。在面板南部方位添加了“确定修改”和“重置”两按钮进行监听。 4.查询学生基本信息模板:
采用Panel面板来设置该部分内容信息,并将该面板加入到主窗体中去,采用边缘布局进行方位设置,在上方加入“查询”按钮进行监听。
5.删除学生基本信息模板:
也是采用Panel面板进行设置相关内容,并用边缘布局进行布局,并在上方添加“确定”按钮,在下方添加“确定删除”按钮实现监听。
三、模块设计
定义四个Panel面板
1.定义Reg(录入学生基本信息)面板
采用BorderLayout(构造一个组件之间没有间距的新边界布)和Box轻量级组件进行布局,在面板的Nother方位添加一个“录入学生基本信息”的标签,并更改字体,颜色等。接着用JTextField轻量级组件来设置单行文本编辑,并将其加入到用
1
沈阳理工大学课程设计
createHorizontalBox()方法创建具有一个从左到右显示其组件的Box和用createHorizontalStrut()创建一个不可见的、固定宽度的组件,使其在一个横向 box 中,通常使用此方法强行使两个组件之间具有某一空间量。然后Box与Box之间用createVerticalBox()创建一个从上到下显示其组件的 Box,并用createVerticalStrut()方法创建一个不可见的、固定高度的组件,使其在一个纵向 box 中,通常使用此方法强行使两个组件之间具有某一空间量。然后在面板的South方位设置“录入”与“重置”两按钮。最后实现与数据库的桥接,能够将从文本框获得的信息存储到数据库中去。
2.定义Search(查询学生基本信息)面板
该部分同样采用BorderLayout(构造一个组件之间没有间距的新边界布)和Box轻量级组件进行布局,在面板的Nother方位添加一个“查询学生基本信息”的标签,并更改字体,颜色等。接着用JTextField轻量级组件来设置单行文本编辑,在学号这一文本框后再添加一个“查询”按钮。并将其加入到用createHorizontalBox()方法创建具有一个从左到右显示其组件的Box和用createHorizontalStrut()创建一个不可见的、固定宽度的组件,使其在一个横向 box 中,通常使用此方法强行使两个组件之间具有某一空间量。然后Box与Box之间用createVerticalBox()创建一个从上到下显示其组件的 Box,并用createVerticalStrut()方法创建一个不可见的、固定高度的组件,使其在一个纵向 box 中,通常使用此方法强行使两个组件之间具有某一空间量。最后实现与数据库的桥接,能够将从数据库中获取信息并显示到文本框中去。
3.定义Modify(修改学生基本信息)面板
该部分同样也是采用BorderLayout(构造一个组件之间没有间距的新边界布)和Box轻量级组件进行布局,在面板的Nother方位添加一个“修改学生基本信息”的标签,并更改字体,颜色等。接着用JTextField轻量级组件来设置单行文本编辑,并将其加入到用createHorizontalBox()方法创建具有一个从左到右显示其组件的Box和用createHorizontalStrut()创建一个不可见的、固定宽度的组件,使其在一个横向 box 中,通常使用此方法强行使两个组件之间具有某一空间量。并在 “学号”该文本框后添加一个“开始修改”按钮用来监听。然后Box与Box之间用createVerticalBox()创建一个从上到下显示其组件的 Box,并用createVerticalStrut()方法创建一个不可见的、固定高度的组件,使其在一个纵向 box 中,通常使用此方法强行使两个组件之间具有某一空间量。最后实现与数据库的桥接,能够将从数据库中获取信息并显示到文本框中去,并将修改后的信息存储到数据库中去。
4.定义Delete(删除学生基本信息)面板
该部分还是采用BorderLayout(构造一个组件之间没有间距的新边界布)和Box轻量级组件进行布局,在面板的Nother方位添加一个“修改学生基本信息”的标签,并更改字体,颜色等。接着用JTextField轻量级组件来设置单行文本编辑,在学号这一文本框后再添加一“确定”按钮实现监听。并将其所有文本框和标签加入到用createHorizontalBox()方法创建具有一个从左到右显示其组件的Box和用createHorizontalStrut()创建一个不可见的、固定宽度的组件,使其在一个横向 box 中,通常使用此方法强行使两个组件之间
2
沈阳理工大学课程设计
具有某一空间量。并在 “学号”该文本框后添加一个“开始修改”按钮用来监听。然后Box与Box之间用createVerticalBox()创建一个从上到下显示其组件的 Box,并用createVerticalStrut()方法创建一个不可见的、固定高度的组件,使其在一个纵向 box 中,通常使用此方法强行使两个组件之间具有某一空间量,还在本面板的South方位添加“确定删除”按钮。最后实现与数据库的桥接,能够将从数据库中获取信息并显示到文本框中去,删除后同时在数据库中也删除该信息并保存该操作。
四、方案的实施
1、学生信息管理系统的登录
学生信息管理系统可由管理员和学生两种身份的人使用。管理员和学生身份登录所能操作的功能有很大的区别。系统初始化一个系统管理员,登录名:admin 密码:admin 学生登录系统的登录名为学号,密码也为学号(如:10001),登录后可以修改密码。
登录界面
登录系统后的界面
3
沈阳理工大学课程设计
注册学生信息界面
4
沈阳理工大学课程设计
修改学生信息界面
查询学生信息界面
5
沈阳理工大学课程设计
删除学生信息界面
6
沈阳理工大学课程设计
1 程序类的设计
DeleteListener.java:删除监听 JTMouseListener.java:树状视图 LoginListener.java:登陆监听 ResetListener.java:重置监听 SaveListener.java:保存监听
SearchAllListener.java:搜索所有学生信息 SearchDListener.java:搜索一个学生信息 SearchListener.java:搜索一个学生信息 SearchRListener.java:搜索一个学生信息 SubmitListener.java:提交信息监听
2 系统的使用说明及环境配置
学生信息管理系统提供了管理员和学生这两个角色登录系统,管理员通过用户名:admin 密码:admin 登录系统后可以进行相应的操作。学生通过以自己的学号(如10001)作为用户名和密码登录系统后进行相应的学生权限范围内的操作。 数据库:Mysql 连接数据库的登录名:root 密码:zfz 代码:
DeleteListener.java:删除监听 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JOptionPane;
import manager.dao.JdbcIcpCURD; import manager.ui.conponent.DeletePanel;
public class DeleteListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
DeletePanel dp=(DeletePanel) jb.getParent();
String xuehao=dp.xuehaoFd.getText();
String msg= "你确定要删除学号为"+xuehao+"的学生信息么?";
int i=JOptionPane.showConfirmDialog(dp,msg,"提",JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
if(i==0){
JdbcIcpCURD curd=new JdbcIcpCURD();
boolean b=curd.deleteByXuehao(Integer.parseInt(xuehao));
if(b){
dp.errorLb.setText("删除成功");
}
else{
dp.errorLb.setText("删除失败");
}
}
return; }
7
示信息
沈阳理工大学课程设计
} JTMouseListener.java:树状视图 package manager.ui.listener;
import java.awt.CardLayout; import java.awt.Component; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;
import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeNode; import javax.swing.tree.TreePath;
import manager.ui.conponent.MainFrame; import manager.ui.conponent.PLeft;
public class JTMouseListener implements MouseListener {
@Override public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub JTree jt=(JTree) e.getSource(); PLeft p=(PLeft) jt.getParent(); MainFrame f=(MainFrame) p.getParent().getParent().getParent().getParent(); TreePath path = jt.getPathForLocation(e.getX(), e.getY()); if(path==null){ return; } DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent(); String s=node.toString(); CardLayout cl=f.getPright().getLayout(); if(s.equals("注册学生")){ cl.show(f.getPright(), "register"); } if(s.equals("修改学生信息")){ cl.show(f.getPright(), "modify"); } if(s.equals("查询学生信息")){ cl.show(f.getPright(), "search"); } if(s.equals("删除学生信息")){ cl.show(f.getPright(), "delete"); } if(s.equals("学生信息管理")){ cl.show(f.getPright(), "welcom"); } }
@Override public void mouseEntered(MouseEvent e) {
8
沈阳理工大学课程设计
} } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } // TODO Auto-generated method stub LoginListener.java:登陆监听
package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JOptionPane;
import manager.ui.conponent.Login; import manager.ui.conponent.MainFrame;
public class LoginListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton bt=(JButton) e.getSource();
Login frame=(Login) bt.getParent().getParent().getParent().getParent();
String username=frame.usernameTa.getText().trim();
String password=frame.passwordTa.getText().trim();
if(username!=null||password!=null){
if("admin".equals(username)&&"123".equals(password)){
new MainFrame().setVisible(true);
frame.dispose();
}
else{
frame.messageLb.setText("用户名或密码错误");
}
}
9
沈阳理工大学课程设计
else{
frame.messageLb.setText("用户名或密码错误");
} } } ResetListener.java:重置监听 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.ui.conponent.RegPanel;
public class ResetListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) { JButton jb=(JButton) e.getSource(); RegPanel jp=(RegPanel) jb.getParent(); jp.xuehaoFd.setText(""); jp.nameFd.setText(""); jp.addressFd.setText(""); } } SaveListener.java:保存监听 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.ModifyPanel;
public class SaveListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
ModifyPanel mp=(ModifyPanel) jb.getParent();
String xuehao=mp.xuehaoTf.getText().trim();
String name=mp.nameTf.getText().trim();
String gender=mp.genderTf.getText().trim();
String address=mp.addressTf.getText().trim();
String oldXuehao=mp.xuehaoFd.getText().trim();
if(oldXuehao==null||xuehao.equals("")){
10
沈阳理工大学课程设计
}
} oldXuehao=xuehao; } if(xuehao==null||xuehao.equals("")){ mp.errorLb.setText("请输入修改后的学号..."); return; } if(name==null||name.equals("")){ mp.errorLb.setText("请输入修改后的姓名..."); return; } if(gender==null||gender.equals("")){ mp.errorLb.setText("请输入修改后的性别..."); return; } if(address==null||address.equals("")){ mp.errorLb.setText("请输入修改后的地址..."); return; } Student stu=new Student(); stu.setXuehao(Integer.parseInt(xuehao)); stu.setName(name); stu.setGender(gender); stu.setAddress(address); int old=Integer.parseInt(oldXuehao); JdbcIcpCURD curd=new JdbcIcpCURD(); if(curd.modify(stu, old)){ mp.errorLb.setText("修改成功..."); }
SearchAllListener.java:搜索所有学生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector;
import javax.swing.JButton; import javax.swing.JTextArea;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.SearchPanel;
public class SearchAllListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
SearchPanel sp=(SearchPanel) jb.getParent();
11
沈阳理工大学课程设计
}
} JTextArea jt=sp.resultTa; JdbcIcpCURD curd=new JdbcIcpCURD(); Vector students=curd.getAllStudent(); StringBuilder sb=new StringBuilder(); for(Student s:students){ sb.append(" "); sb.append(s.getXuehao()); sb.append(" "); sb.append(s.getName()); sb.append(" "); sb.append(s.getGender()); sb.append(" "); sb.append(s.getAddress()); sb.append(" "); sb.append(s.getRegTime().toString()); sb.append(" "); } jt.setText(sb.toString()); SearchDListener.java:搜索一个学生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.DeletePanel; import manager.ui.conponent.ModifyPanel; import manager.ui.conponent.SearchPanel;
public class SearchDListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
DeletePanel dp=(DeletePanel) jb.getParent();
JdbcIcpCURD curd=new JdbcIcpCURD();
String s=dp.xuehaoFd.getText().trim();
Student stu=curd.searchByXuehao(Integer.parseInt(s));
if(stu==null){
dp.errorLb.setText("没有查询到此学生");
return;
}
dp.xuehaoTf.setText(new Integer(stu.getXuehao()).toString());
dp.nameTf.setText(stu.getName());
dp.genderTf.setText(stu.getGender());
dp.addressTf.setText(stu.getAddress());
12
沈阳理工大学课程设计
} } SearchListener.java:搜索一个学生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.ModifyPanel;
public class SearchListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
JButton jb=(JButton) e.getSource();
ModifyPanel mp=(ModifyPanel) jb.getParent();
String s=mp.xuehaoFd.getText().trim();
if(s==null||s.equals("")){
mp.errorLb.setText("请输入学号..");
return;
}
JdbcIcpCURD curd=new JdbcIcpCURD();
Student stu=curd.searchByXuehao(Integer.parseInt(s));
mp.xuehaoTf.setText(new Integer(stu.getXuehao()).toString());
mp.nameTf.setText(stu.getName());
mp.genderTf.setText(stu.getGender());
mp.addressTf.setText(stu.getAddress()); } } SearchRListener.java:搜索一个学生信息 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener;
import javax.swing.JButton;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.ModifyPanel; import manager.ui.conponent.SearchPanel;
public class SearchRListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) {
13
沈阳理工大学课程设计
}
} JButton jb=(JButton) e.getSource(); SearchPanel sp=(SearchPanel) jb.getParent(); JdbcIcpCURD curd=new JdbcIcpCURD(); String s=sp.xuehaoTf.getText().trim(); Student stu=curd.searchByXuehao(Integer.parseInt(s)); if(stu==null){ return; } StringBuilder sb=new StringBuilder(); sb.append(" "); sb.append(stu.getXuehao()); sb.append(" "); sb.append(stu.getName()); sb.append(" "); sb.append(stu.getGender()); sb.append(" "); sb.append(stu.getAddress()); sb.append(" "); sb.append(stu.getRegTime().toString()); sb.append(" "); sp.resultTa.setText(sb.toString());
SubmitListener.java:提交信息监听 package manager.ui.listener;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date;
import javax.swing.JButton; import javax.swing.JLabel;
import manager.dao.JdbcIcpCURD; import manager.domain.Student; import manager.ui.conponent.RegPanel;
public class SubmitListener implements ActionListener {
@Override public void actionPerformed(ActionEvent e) { JButton jb=(JButton) e.getSource(); RegPanel jp=(RegPanel) jb.getParent(); String xuehao=jp.xuehaoFd.getText(); String name=jp.nameFd.getText(); String address=jp.addressFd.getText(); String gender=""; boolean b1=jp.maleRB.isSelected(); boolean b2=jp.femaleRB.isSelected();
14
沈阳理工大学课程设计
if(b1){ } JLabel errorLabel=jp.errorLabel; if(xuehao==null||xuehao.trim().equals("")){ errorLabel.setText("没有填写学号.."); return; } if(name==null||name.trim().equals("")){ errorLabel.setText("没有填写姓名.."); return; } if(address==null|address.trim().equals("")){ errorLabel.setText("没有填写地址.."); return; } if(!(b1||b2)){ errorLabel.setText("请选择性别..."); return; } if(b1){ gender="男"; } if(b2){ gender="女"; } Student stu=new Student(Integer.parseInt(xuehao),name,gender,new Date(System.currentTimeMillis()),address); JdbcIcpCURD curd=new JdbcIcpCURD(); boolean b=curd.insert(stu); if(b){ errorLabel.setText("注册成功!!"); jp.xuehaoFd.setText(""); jp.nameFd.setText(""); jp.addressFd.setText(""); } } }
五、心得体会
我们刚学习java这门课程,对专业的java编程知识并未有深入的学习和探索。但是当我们查找过一些书籍资料后,在不断努力下我们还是把课程设计题目顺利的完成了。通过此次学生学籍管理系统的设计,使我们对java编程语言有了更深层次的了解。不过在编写的过程中也存在一些问题,例如在选择适宜的方法实现修改和删除功能的时候,由于对
15
沈阳理工大学课程设计
数组的理解还不能满足当前的编程需要,并未选择更加简单的数组来处理数据,以至于当删除指定内容后在文本文件中留有空行,从而导致了在接下来的查询异常和再次修改和删除功能无法正常实现,还需人工删除掉文本文件中的空行以保证程序的正常运行。我们也可以选用其他的更加方便的处理方法使得程序更加优化和简洁。
“书山有路勤为径,学海无涯苦作舟”,我们现今所学的知识还远远不够,在今后的学习过程中我们要进一步学习java的更多的知识,此次课程设计不仅锻炼了我们独立思考和团队合作的能力,而且提高了我们动手的能力,我会继续努力学习此课程的。
六、参考文献
1 郑阿奇 编著《Java实用教程(第二版)》电子工业出版社 2 良葛格 编著《Java学习笔记》清华大学出版
16
第三篇:JAVA课程设计-ATM机模拟系统
《Java语言程序设计》
课程设计报告
题
目:
ATM柜员机
专
业:
信息与计算科学
学
号:
23
姓
名:
单
焱
指导教师:
李
又
良
成
绩:
2010 年 12 月 10 日
目 录
1课程设计研究背景及意义 ....................................... 2 2 课程设计题目描述和基本功能设计要求 ........................... 2 3 系统需求分析 ................................................. 2 3.1 功能需求分析 ............................................ 2 3.2 其他需求分析 ............................................ 3 4 系统设计 ..................................................... 3 4.1 总体设计 ................................................ 3 4.2 ATM柜员机界面设计 ...................................... 4 4.3 各功能模块设计 .......................................... 5
4.3.1 登陆页面模块设计 ................................ 5 4.3.2 选择服务模块设计 ................................ 6 4.3.3 取款模块设计 .................................... 7 4.3.4 修改密码模块设计 ................................ 8 4.3.5 查询余额模块设计 ................................ 9 4.3.6 退卡模块设计 .................................... 9 4.4 异常处理情况说明 ....................................... 10 5 系统实现与测试 .............................................. 10 6 课程设计总结 ................................................ 13 6.1 遇到的问题及解决办法 ................................... 13 6.2 心得体会 ............................................... 14 参考文献 ...................................................... 14 附录(源码) .................................................. 14
1课程设计研究背景及意义
这次课程设计是通过JAVA编程来实现ATM柜员机的功能。以前,人们用手算取钱,不管从方便的角度还是速度的角度来看都不及现在。电子技术的不断发展使得ATM自动化的功能不断完善。在二十一世纪的今天,ATM柜员机是人们生活中重要的工具,所以,对ATM柜员机的研究的课程设计具有重大意义。
这次课程设计的主要目的是结合面向对象程序设计课程,培养我们面向对象开发的思维,初步了解软件开发的一般流程,提高用JAVA编程的实际动手能力并增强大家对面向对象的了解。这次课程设计的主要内容是独立用JAVA语言开发一个小的应用程序。
2 课程设计题目描述和基本功能设计要求
本次设计的ATM柜员机主要是由各个Windows窗口组成,它是由登录页面、选择服务、取款、查询余额、修改密码和退卡等功能。它的各种按钮的事件和功能可以简单的模拟ATM柜员机的要求。 组员分工:
组长(单焱): 负责分配其他组员的任务,构建需求分析,系统实现及异常处理情况, 调试程序等,把握ATM柜员机的整体布局。
组员1(刘星):负责登陆界面模块,选择服务模块及退卡模块,编写相应代码。 组员2(王玲玲):负责取款、修改密码、查询余额模块,编写相应代码。
3 系统需求分析 3.1 功能需求分析
本ATM柜员机的主要功能如下所述:
要求使用图形用户界面。当输入给定的卡号和密码(初始卡号为000000和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:
查询余额:初始余额为50000元
ATM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
ATM存款:不能出现负存款。
修改密码:只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
3.2 其他需求分析
(1)性能描述
实时性好、灵活性强、易于不同年龄阶段的人操作。 (2)设计约束 开发工具:Eclipse3.2. 运行环境:Windows 2000以上。 (3)界面要求
以Windows窗口形式显示,标题栏为ATM柜员机名称,右上角有最小化按钮、最大化按钮、关闭按钮,不同的窗口中有不同的按钮和选择菜单。
4 系统设计 4.1 总体设计
本次设计的ATM柜员机主要是由登录页面模块还由选择服务模块组成,其中选择服务模块又由取款模块、查询余额模块、修改密码模块、退卡模块组成。如图:
图1
ATM功能结构示意图
4.2 ATM柜员机界面设计
一个系统的界面应该要简单明了,当然样式美观就更好了。本次设计的界面主要是由窗体组成,操作简单。而每一个窗口则执行相应的功能。
一个系统界面的好坏直接影响到用户的操作,界面设计要求样式美观、简单明了、方便易操作。界面主要分为窗体、菜单、按钮和文本输入框几个部分,分别执行相应的操作。
(1)窗体的设计
窗体整个框架使用Frame类构造,Frame有自己的外边框和自己的标题,创建Frame时可以指定其窗口标题,我创建的窗口标题是各个不同功能的模块的名字,比如说查询余额,还有取款等。相应源代码为:WindowBox(String s){super(s);} 、Selection(String s,Account act){ } 向Frame窗口中添加组件使用add()。 例如:button1 = new Button("存款");
p1.add(button1); this.add(p1); super(s); 每个Frame在其右上角都有三个控制图标,分别代表将窗口最小化、窗口最大化和关闭的操作,其中最小化和最大化操作Frame可自动完成,而关闭窗口操作实现需要书写有关的代码,在我的程序中我采用的是对WINDOWS_CLOSING事件做出响应,调用dispose()方法关闭窗口。Frame也可以引发WindowsEvent类代表的窗口事件。相应源代码为:
addWindowListener(new WindowAdapter() //窗口侦听器,以从此窗口接收窗口事件 {public void windowClosing(WindowEvent e) //处理窗口关闭事件
{ System.exit(0); } }); } (2)窗体的主要结构的设计(网格布局)
我所设计的窗口的主要结构的特点就是每个窗口都对应着一个特定的功能。比如说报各种各样的错,还有各种查询余额、取款、选择服务等,所以它们都是由各种按钮和文本框,标签组成的,而联系各个窗体成为一个整体的就是各个按钮的监听事件。所以整个设计就趋向简单化了。
为了定义各个按钮所对应的命令和操作,首先需要将各个按钮注册给实现了动作事件的监听接口ActionListener的监听者,然后为监听者定义actionPerformed(ActionEvent e)方法,在这个方法中调用e.getSource()或e.getActionCommand()来判断用户点击的菜单子项,并完成这个菜单子项定义的操作。
4.3 各功能模块设计 4.3.1 登陆页面模块设计
与ATM柜员机打交道比较多的,也是大家对安全比较关心的问题:密码。所以第一个界面就是要输入密码和卡号才能继续服务。
我定义了文本框累的对象tf1,tf2。抓药是用于输入单行的文本;文本区调用public String getText()方法,获取用户想要的字符串。用来判断输入的密码和卡号是否正确,如果不正确的话,则弹出密码或卡号错误的警告框,并用dispose()关掉窗口。此模块相应的部分源代码为:
public void actionPerformed(ActionEvent e){
Account act;
String card;
String pwd;
act=new Account("000000","Devil","123456",50000);//初始化
/*选择各种服务*/
if(e.getSource() == button1){
String number1,number2;
number1=tf1.getText();
number2=tf2.getText();
/*判断密码和卡号是否正确*/ if((act.get_Code().equals(number1))&&(act.get_Password().equals(number2))){
dispose();
/*卡号和密码都正确则进入功能选择窗口*/
Selection s = new Selection("选择服务",act);
}else{
dispose();
5
JOptionPane.showMessageDialog(null, "您输入的卡号或密码不正确,请核实后再确定",
"消息!", JOptionPane.INFORMATION_MESSAGE);
new WindowBox("登录界面");
}
}
/*退卡*/ if(e.getSource()==button2){
dispose();
JOptionPane.showMessageDialog(null, "谢谢使用!", "消息!",
JOptionPane.INFORMATION_MESSAGE); System.exit(0);
} } 4.3.2 选择服务模块设计
在选择服务模块中,有各种ATM的服务功能,只要用户在该界面中选择按钮,它就会弹出各个相应的界面。每一个按钮都有监听器,在选择了按钮后,java.awt.event中的ActionEvent类创建一个事件对象,并将它传递给方法public void actionPerformed(ActionEvent e)中的参数e,监视器就会知道所发生的事件,对此事件进行处理。其中的部分源代码为:
p.add(new Label("请选择你要的服务"));
this.add(p);
button1 = new Button("存款");
p1.add(button1);
this.add(p1);
button2 = new Button("取款");
p2.add(button2);
this.add(p2);
button3 = new Button("查询余额");
p3.add(button3);
this.add(p3);
button4 = new Button("退出");
p4.add(button4);
this.add(p4);
button5 = new Button("修改密码");
p5.add(button5);
this.add(p5);
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
}); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); setBounds(300,300,300,300); setVisible(true); validate(); } public void actionPerformed(ActionEvent e){ if(e.getSource()==button2){//取款
dispose();
GetBalance gb = new GetBalance("取款",act); } if(e.getSource()==button3){//查询余额
Query q =new Query("查询余额",act);
dispose(); } else if(e.getSource()==button4){//退出
dispose();
} JOptionPane.showMessageDialog(null, "谢谢使用!", "消息!",
JOptionPane.INFORMATION_MESSAGE); System.exit(0);
} else if(e.getSource()==button5){//修改密码
ChangePassword cp = new ChangePassword("修改密码",act);
dispose(); } 4.3.3 取款模块设计
在取款模块中,和其他的界面也是同样的结构。也是有一个文本框和一个按钮还有标签组成的。用户在文本框中输入他想取的数额,但是必须是100的倍数,而且每一次最多只能取5000块。当然了取款的时候也不能超过卡里的余额,再就是卡里的余额不可以为负,否则就会弹出报错的窗口。其方法为:
if (e.getSource() == button) {
if (act.get_Money() < 0) {// 判断余额是否为负
dispose(); JOptionPane.showMessageDialog(null, "余额为负数", "消息",
JOptionPane.INFORMATION_MESSAGE); } else if (money <= act.get_Money()) {// 取钱的数额不大于余额
if (money % 100 == 0) {
dispose();
JOptionPane.showMessageDialog(null, "取款成功!", "消息",
JOptionPane.INFORMATION_MESSAGE); act.set_Balance(money); this.setVisible(false); Selection s = new Selection("选择服务", act); }
if ((money % 100 != 0) || (money >= 5000)) {// 取钱数为100的倍数或不大于5000
dispose();
JOptionPane.showMessageDialog(null,
的钱!", "消息",
务窗口
}
"每次只能取100的倍数,而且不能超过5000,请重新输入你想取
JOptionPane.INFORMATION_MESSAGE); act.get_Money(); this.setVisible(false); Selection s = new Selection("选择服务", act);// 返回选择服} else if (money > act.get_Money()) {// 判断取款数额是否大于余额
dispose();
JOptionPane.showMessageDialog(null, "超过已有的钱数,请重新输入你想取的钱!",
"消息", JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false);
} Selection s = new Selection("选择服务", act); } 4.3.4 修改密码模块设计
在修改密码模块中,首先你必须要输入你的旧密码是否正确,否则就会报错。再一个就是要两次输入你的新密码,且两次药匹配,否则也会报错,然后再重新回到修改密码的界面。在修改密码时用到的方法为:
/*判断旧密码是是否正确*/ if(pwd2.equals(act.get_Password())){ /*判断两次输入的密码是否匹配*/
if(pwd3.equals(pwd4)){
/*如果都正确的话就设置新密码*/
act.setPassword(pwd3);
dispose();
Selection s = new Selection("选择",act); }else{
dispose();
ErrorWarn2 ew2 = new ErrorWarn2("消息",act);
} }else{
this.setVisible(false);
ErrorWarn3 ew1 = new ErrorWarn3("消息",act);
dispose(); } 4.3.5 查询余额模块设计
在查询余额模块设计中, 和其他的界面的结构相差不多。有一个余额显示和一个按钮还有标签组成的。查询时用到的方法:
Query(String s, Account act) {// 构造函数
super(s); this.act = act; button = new Button("确定"); // TextField tf = new TextField(6); Panel panel1 = new Panel(); Panel panel = new Panel(); panel1.add(new Label("你的余额为: " + act.get_Money()));// 查询余额的button.addActionListener(this); panel.add(button); this.add(panel); this.add(panel1); this.setLayout(new GridLayout(2, 1)); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
System.exit(0); } }); setBounds(300, 300, 300, 300); setVisible(true);
方法
} 4.3.6 退卡模块设计
在退卡模块设计中,这个方法就更加的简单了,它只是用了if(e.getSource()==button4){//退出
dispose(); JOptionPane.showMessageDialog(null, "谢谢使用!", "消息!",
JOptionPane.INFORMATION_MESSAGE); System.exit(0); } 这个方法就可以实现了,这里就不再多说了。
4.4 异常处理情况说明
(1)打开、保存文件时的异常处理 需要处理的异常:IOException (2)数据库访问时的异常处理 需要处理的异常:SQLException (3)加载类时的异常处理
需要处理的异常:ClassNotFindException,当应用程序试图使用Class类中的forName方法通过字符串名加载类时,但是没有找到具有指定名称的类的定义。
(4)加载URL时的异常
需要处理的异常:MalformedURLException,抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串。
5 系统实现与测试
(1)编译运行程序后,将会看到如下的界面,如图2所示。如果输入的密码或卡号不正确的话就会报右下图的错误。
图2 主界面—登陆页面
(2)选择服务界面效果
当输入的密码和卡号正确,单击确定后就会进入到选择服务的界面,如图3所示。然后就可以选择所需要的服务了。
图3 选择服务界面
(3)取款界面,如图4所示。
图4 取款界面
当输入的钱数不是100的倍数或每一次大于5000时就会报图5的错误。
图5 输入错误1 当取款时如果超过卡里的余额的话就会报图6的错误。
图6 输入错误2 (4)查询余额界面,如图7所示。
图7 查询余额界面
(5)修改密码界面,如图8所示。
图8 修改密码界面
当输入的初始密码不正确会报图9所示错误。
图9 输入错误1
当2次输入的新密码不同会报图10所示错误。
图10 输入错误2
经过测试,所有的功能基本上都实现了,而且运行正常。
6 课程设计总结
6.1 遇到的问题及解决办法
在此次课程设计中遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。
对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,对于书上以及网站上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进
行实际的练习与操作,才能有大的进步。
6.2 心得体会
在这次的课程设计中,主要运用了Java语言的界面设计、异常处理、、Awt控件、Swing控件,输入输出流等,综合运用了Java语言。深刻感受到了面向对象语言中类库的强大功能,掌握了运用Java中的类实现某些基本功能,并学会了自己查询使用类的方法,为以后的面向对象语言的自学奠定了基础。
通过这次课程设计我学到了一些东西,这次的课程设计中,主要是运用JAVA语言来编写一个小的应用程序,当然还可以用其他的技术来辅助。在这个小应用程序当中,我用了Java外还用了Swing控件。输入输出流等。由于以前学的不是很扎实,而且还有些知识我们都是没有学过的,这就要求我们去查相关的书籍,还有就是和同学之间的交流。正因为这样,才锻炼了我的自学的能力,还有就是加深了我对各个知识点的认识,并且提高了我对专业的学习的兴趣,为我以后的学习打下了基础。此外,还感受到了面向对象语言的类库的强大的功能,掌握了运用JAVA中的类实现某些基本功能,并学会了自己查询使用类的方法,也就是要会用API文档,为以后更好的学习面向对象语言奠定了基础。
通过努力,这次课程设计终于完成了,在这个过程当中,学到了很多的知识,同时也感谢我的同学的帮助和指导。在以后的学习当中,我会更加努力的学习好专业知识,并将所学的知识用于实践当中去,以便牢固掌握知识。
参考文献
[1] 王萌,刘婧,来宾著.JAVA程序设计[M]北京 冶金工业出版社,2004 [2] 黄聪明 精通 JAVA2程序设计[M]北京:清华大学出版社,2004.4 [3] 王文涛,袁海燕 JAVA实用程序设计100例[M]北京:人民邮电出版社,2005.5 [4] 雍俊海 JAVA程序设计[M]北京:清华大学出版社,2006.8 [5] 刘宝林 JAVA程序设计与案例[M]北京:高等教育出版社,2006.11 附录(源码)
/******登陆页面首窗口*******/ import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*;
import java.io.*;
public class WindowBox extends Frame implements ActionListener { Box baseBox, box1, box2; TextField tf1, tf2; Button button1; Button button2;
WindowBox(String s) {// 构造方法
super(s); tf1 = new TextField(6); tf2 = new TextField(6); box1 = Box.createVerticalBox();
box1.add(new Label("请输入你的卡号")); // 输入卡号 box1.add(Box.createVerticalStrut(8)); box1.add(new Label("请输入你的密码"));// 输入密码 box2 = Box.createVerticalBox(); box2.add(tf1); // box2.add(new TextField(16));
box2.add(Box.createVerticalStrut(8)); box2.add(tf2); // box2.add(new TextField(16));
baseBox = Box.createHorizontalBox(); baseBox.add(box1); baseBox.add(Box.createHorizontalStrut(10)); baseBox.add(box2); add(baseBox); button1 = new Button("确定");// 加入按钮 button1.addActionListener(this); add(button1); button2 = new Button("退卡");// 退卡按钮 button2.addActionListener(this); add(button2); setLayout(new FlowLayout()); /* 监听器 */
this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
System.exit(0); } }); setBounds(300,300,220,220); setVisible(true); } public void actionPerformed(ActionEvent e) {
Account act; String card; String pwd; act = new Account("000000", "Devil", "123456", 50000);// 初始化 /* 选择各种服务 */
if (e.getSource() == button1) {
String number1, number2;// 输入的两个卡号和密码的变量 number1 = tf1.getText(); number2 = tf2.getText(); /* 判断两次输入的卡号和密码是否正确 */
if ((act.get_Code().equals(number1))
&& (act.get_Password().equals(number2))) { dispose(); Selection s = new Selection("选择服务", act); } else { dispose();
JOptionPane.showMessageDialog(null, "您输入的卡号或密码不正确,请核实后再确定",
"消息!", JOptionPane.INFORMATION_MESSAGE);
// 报输入密码或卡号不正确
new WindowBox("登录界面");
}
}
if (e.getSource() == button2) {
System.exit(0);
dispose();// 退出
} } }
/*************主函数****************/ public class ATM { public static void main(String[] args) {
new WindowBox("登录页面"); } } /********* 选择服务窗口 ***************/ import java.awt.*; import java.awt.event.*;
public class Selection extends Frame implements ActionListener { Button button1, button2, button3, button4, button5;
16
Panel p1 = new Panel(); Panel p2 = new Panel(); Panel p3 = new Panel(); Panel p4 = new Panel(); Panel p5 = new Panel(); Panel p = new Panel(); Account act; public Selection() { } Selection(String s, Account act) { super(s); this.act = act; this.setLayout(null); this.setLayout(new GridLayout(6, 1));
p.add(new Label("请选择你要的服务")); this.add(p); /* 各种服务功能 */
button1 = new Button("存款"); p1.add(button1); this.add(p1); button2 = new Button("取款"); p2.add(button2); this.add(p2); button3 = new Button("查询余额"); p3.add(button3); this.add(p3); button4 = new Button("退出"); p4.add(button4); this.add(p4); button5 = new Button("修改密码"); p5.add(button5); this.add(p5); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
System.exit(0); } }); button2.addActionListener(this); button3.addActionListener(this); button4.addActionListener(this); button5.addActionListener(this); setBounds(300, 300, 300, 300); setVisible(true); validate();
} } public void actionPerformed(ActionEvent e) {
} if (e.getSource() == button2) {// 取款
dispose(); GetBalance gb = new GetBalance("取款", act); } if (e.getSource() == button3) {// 查询余额
Query q = new Query("查询余额", act); dispose(); } else if (e.getSource() == button4) {// 退出
dispose();
JOptionPane.showMessageDialog(null, "谢谢使用!", "消息!",
JOptionPane.INFORMATION_MESSAGE); System.exit(0); } else if (e.getSource() == button5) {// 修改密码
ChangePassword cp = new ChangePassword("修改密码", act); dispose(); } /**********取款功能************/ import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*;
public class GetBalance extends Frame implements ActionListener { Box baseBox, box1, box2; Button button; TextField tf; Account act;
GetBalance(String s, Account act) {// 构造函数
super(s); this.act = act;
button = new Button("确定"); Panel panel = new Panel(); Panel panel1 = new Panel(); tf = new TextField(6); this.setLayout(new GridLayout(2, 1)); panel1.add(new Label("请输入你想取钱的数目")); panel1.add(tf); panel.add(button); this.add(panel1);
this.add(panel); button.addActionListener(this); this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
} }); setBounds(300, 300, 300, 300); this.setVisible(true); } public void actionPerformed(ActionEvent e) { // System.out.println(e.getActionCommand());
double money; money = Double.parseDouble(tf.getText().trim()); if (e.getSource() == button) {
if (act.get_Money() < 0) {// 判断余额是否为负
dispose(); JOptionPane.showMessageDialog(null, "余额为负数", "消息",
JOptionPane.INFORMATION_MESSAGE); } else if (money <= act.get_Money()) {// 取钱的数额不大于余额
if (money % 100 == 0) {
dispose();
JOptionPane.showMessageDialog(null, "取款成功!", "消息",
JOptionPane.INFORMATION_MESSAGE); act.set_Balance(money); this.setVisible(false); Selection s = new Selection("选择服务", act); }
if ((money % 100 != 0) || (money >= 5000)) {// 取钱数为100的倍数或不大于5000
dispose();
JOptionPane.showMessageDialog(null,
的钱!", "消息",
务窗口
"每次只能取100的倍数,而且不能超过5000,请重新输入你想取
JOptionPane.INFORMATION_MESSAGE); act.get_Money(); this.setVisible(false); Selection s = new Selection("选择服务", act);// 返回选择服 // dispose(); } } else if (money > act.get_Money()) {// 判断取款数额是否大于余额
dispose(); JOptionPane.showMessageDialog(null, "超过已有的钱数,请重新输入
你想取的钱!","消息", JOptionPane.INFORMATION_MESSAGE);
this.setVisible(false); 口
Selection s = new Selection("选择服务", act);// 返回选择服务窗
} } } }
/********修改密码功能*************/ import java.awt.Button; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JOptionPane;
public class ChangePassword extends Frame implements ActionListener { Panel panel1 = new Panel(); Panel panel2 = new Panel(); Panel panel3 = new Panel(); Panel panel = new Panel(); TextField tf4, tf5, tf6; Button button; Account act; ChangePassword(String s, Account act) {
super(s);
this.act = act;
tf4 = new TextField(6);
tf5 = new TextField(6);
tf6 = new TextField(6);
button = new Button("确定"); button.addActionListener(this); /* 建立新密码 */
panel1.add(new Label("请输入你的旧密码:")); panel1.add(tf4); panel2.add(new Label("请输入你的新密码:")); panel2.add(tf5);
} panel3.add(new Label("请再次输入你的新密码")); panel3.add(tf6); panel.add(button); this.add(panel1); this.add(panel2); this.add(panel3); this.add(panel); setLayout(new GridLayout(4, 1)); setBounds(300, 300, 300, 300); this.setVisible(true); /* 窗口事件 */
this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {
System.exit(0); } }); /* 判断事件源,看条件是否成立再修改密码 */
public void actionPerformed(ActionEvent e) { if (e.getSource() == button) {
String pwd2, pwd3, pwd4;
pwd2 = tf4.getText();
pwd3 = tf5.getText();
pwd4 = tf6.getText();
if (pwd2.equals(act.get_Password())) {// 判断旧密码是否正确
if (pwd3.equals(pwd4)) {// 判断两次输入的新密码是个匹配
act.setPassword(pwd3);// 启用新的密码
dispose();
JOptionPane.showMessageDialog(null, "密码修改成功!", "消息
JOptionPane.INFORMATION_MESSAGE);
",
Selection s = new Selection("选择", act);// 返回服务窗口 } else { this.setVisible(true);
// ErrorWarn2 ew = new ErrorWarn2("消息",act); dispose(); JOptionPane.showMessageDialog(null, "两次密码输入不匹配", "
JOptionPane.INFORMATION_MESSAGE);
消息",
Selection s = new Selection("选择", act);// 返回服务窗口
} } else { this.setVisible(false); dispose();
21
",
} JOptionPane.showMessageDialog(null, "初始密码输入错误", "消息
JOptionPane.INFORMATION_MESSAGE);
Selection s = new Selection("选择", act);// 返回选择服务窗口
} } } /**************查询余额功能******************/ import javax.swing.*; import java.awt.*; import javax.swing.border.*; import java.awt.event.*;
public class Query extends Frame implements ActionListener { Button button; Account act;
Query(String s, Account act) {// 构造函数
super(s); this.act = act;
button = new Button("确定"); // TextField tf = new TextField(6); Panel panel1 = new Panel(); Panel panel = new Panel();
panel1.add(new Label("你的余额为: " + act.get_Money()));// 查询余额的方法
// panel1.add(tf);
button.addActionListener(this);
panel.add(button);
this.add(panel);
this.add(panel1);
this.setLayout(new GridLayout(2, 1));
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(300, 300, 300, 300);
setVisible(true); } public void actionPerformed(ActionEvent e) {
if (e.getSource() == button) {
dispose();
22
Selection s = new Selection("选择服务", act);// 返回选择服务窗口
} } }
/***********账户****************/ import java.io.*; /* 该类为实现客户信息及部分功能 */ public class Account {
{
} private String code = null; // 信用卡号 private String name = null; // 客户姓名
private String password = null; // 客户密码 private double money = 0.0; // 卡里金额
public Account(String code, String name, String password, double money)
} this.code = code; this.name = name; this.password = password; this.money = money; public String get_Code() {// 取得卡号
return code; } public String get_Name() {// 取得名字
return name; } public String get_Password() {// 取得密码
return password; } public double get_Money() {// 重置余额
return money; } /* 得到剩余的钱的数目 */
protected void set_Balance(double mon) { money -= mon; } /* 重置密码的方法 */
public String setPassword(String pwd) { password = pwd; return password; }
23
第四篇:数据结构课程设计—java通讯录管理系统
import java.io.*; import java.util.*; public class LittleProgram {
static boolean isDelete = true;
static boolean isFind = true;
public static void main(String [] args)//主方法,程序从这里开始运行
throws IOException,NumberNotFoundException
{
int choice=-1;
do{
LittleProgram lp = new LittleProgram();
System.out.println();
System.out.println("
#");
System.out.println();
System.out.println(" 通訊錄管理系统");
System.out.println("
请用号码插入,查找,修改,删除数据");
System.out.println();
System.out.println("
# ");
System.out.print("1.增加号码: "+
"2.查找号码: "+
"3.删除号码: "+ "4.清除所有号码: "+ "5.把号码全部打印到屏幕 "+ "6.把通讯录按号码排序 "+
"7.修改号码 "+
"8.统计通码讯录的总人数 "+
"9.关于作者 "+
"0.退出程序. " +
"输入:");
BufferedReader in =
//从终
new BufferedReader(
//端接
new InputStreamReader(System.in));//收数
String inputLine = in.readLine();
//字选
choice= Integer.valueOf(inputLine).intValue();//项;
switch(choice)
{
case 1: {//1.增加号码
String str = lp.inputData();
lp.addData(str);
System.out.println("增加号码成功.");
timeOut(1);
}break;
case 2: {//2.查找号码
long find = 0;
System.out.print("请输入你要查找的号码:");
BufferedReader inn =
new BufferedReader(
new InputStreamReader(System.in));
String inputLi = inn.readLine();
find = Integer.valueOf(inputLi).longValue();
lp.findData(find);
timeOut(2);
}break;
case 3: {//3.删除号码
long deleteNumber = 0;
System.out.print("请输入你想删除号码:");
BufferedReader bf =
new BufferedReader (
new InputStreamReader(System.in));
String inputL = bf.readLine();
deleteNumber = Integer.valueOf(inputL).longValue();
lp.deleteData(deleteNumber);
if(isDelete)
System.out.println("删除号码成功!");
timeOut(1);
}break;
case 4: {
lp.clearData();//4.清除所有号码
timeOut(1);
}break;
case 5: {
print();//5.把号码全部打印到屏幕
timeOut(2);
}break;
case 6: {
lp.numSort();//6.把号码按号码排序
System.out.println("按照号码从小到大排序成功! "+
"排序后: ");
print();
timeOut(2);
}break;
case 7: {
lp.rewrite();//7.修改号码
timeOut(2);
}break;
case 8: {
int count = lp.count();
System.out.println("共有"+count+"个号码记录.");
timeOut(2);
}break;
case 9: {
System.out.print(" 李雪萍 "+
" 安徽理工大學理學院 "+
" QQ:1154646392 ");
timeOut(4);
}break;
}}while (choice != 0);
System.out.println("Bye! ^-^");
System.exit(0);
}
public String inputData()//从终端接收数据的方法,返回字符串
throws IOException,NumberFormatException
{
System.out.print("请依次输入 :号码 姓名 地址 生日 " +
"每项数据请用空格隔开:");
String all = "";
try{
BufferedReader in =
//从终
new BufferedReader (
//端接
new InputStreamReader(System.in));
//收数
String inputLine = in.readLine();
//据
StringTokenizer str =
new StringTokenizer(inputLine," ");//接收的数据用空格隔开,这个类用来提取每个字符串
long num = Integer.valueOf(str.nextToken()).longValue();//号码
String name = (String)str.nextToken();
//姓名
String add = (String)str.nextToken();
// 地址
String birth = (String)str.nextToken();//出生年月
all = String.valueOf(num) +" , "+
name +" , "+
add +" , "+
String.valueOf(birth);//把所有的数据用" , "隔开然后在连起来放进字符串all
}catch (IOException e){}
catch (NumberFormatException e){}
return all;//返回字符串all
}
public void addData(String str)//增加号码的方法
throws IOException
{
String s1 ="",s2="" ,s3= "";
File file = new File("c:data.txt");
if (file.exists())//如果文件data.txt存在
{
try{
BufferedReader in =
new BufferedReader(
new FileReader(file));
while ((s1=in.readLine())!=null)
s2+=s1+" ";//把文件中的每行数据全部放进一个字符串s2
s2+=str+" ";
//再把s2于形参str相连放进s2
BufferedReader in2 =
//把字符
new BufferedReader(
//串s2也
new StringReader(s2));
//就是原
PrintWriter out =
//文件+
new PrintWriter(
//形参str(新输入的一行数据)
new BufferedWriter(
//重新写进data.txt
new FileWriter(file)));
//覆盖原来的数据
while ((s3=in2.readLine())!= null)
{
out.println(s3);
}
out.close();
//System.out.println("write data true.");
}catch (IOException e){}
}else{
System.err.println("File "data" Missing!");
}
}
public void clearData()//清除data.txt的所有数据的方法
throws IOException
{
File file = new File("c:data.txt");
if(file.exists())//如果文件在
{
try{
PrintWriter out =
new PrintWriter(
new BufferedWriter(
new FileWriter(file)));
out.print("");//在文件data.txt里写进一个空字符,所以清除了原来的内容
out.close(); //关闭文件
System.out.println("clear data true!");
}catch(IOException e){}
}else{
System.err.println("File "data" Missing!");
}
}
public void deleteData(long deleteNumber)//删除某条号码数据
throws IOException,FileNotFoundException
{
isDelete = true;
try{
DataMap mp = new DataMap();//生成一个自己编写的容器
long j=0;
String s1="",s2="",s3="";
BufferedReader in =
new BufferedReader(
new FileReader("c:data.txt"));
while ((s1=in.readLine())!=null)
{
j=numberTokenizer(s1);
mp.put(j,s1);
}
try{
if(mp.containsKey( String.valueOf(deleteNumber).toString()))
{
mp.remove(deleteNumber);
}else
throw new NumberNotFoundException();
Collection c = mp.values();
Iterator iter = c.iterator();
while(iter.hasNext())
{
s1 = (String)iter.next();
s3 +=s1+" ";
}
BufferedReader in2 =
new BufferedReader(
new StringReader(s3));
PrintWriter out =
new PrintWriter(
new BufferedWriter(
new FileWriter("c:data.txt")));
//System.out.println("delete No"+deleteNumber);
while( (s1 = in2.readLine())!=null)
{
out.println(s1);
} out.close(); }catch (NumberNotFoundException e) {
isDelete = false;
System.out.println(deleteNumber+" no found :(");
}
}catch(IOException e){}
}
public long numberTokenizer(String s)
throws IOException
{
StringTokenizer st =
new StringTokenizer(s," ");
return Integer.valueOf((st.nextToken())).longValue();
}
public void findData(long find)//查找数据
throws IOException,NumberNotFoundException
{
isFind = true;
String s = "",findString =""; long i; DataMap dm = new DataMap(); BufferedReader in =
new BufferedReader(
new FileReader("c:data.txt"));
while ((s=in.readLine())!=null)
{
i=numberTokenizer(s);
dm.put(i,s);
}
//in.close();
try{
if(dm.containsKey( String.valueOf(find).toString()))
{
findString = dm.get(find);
System.out.println("学号"+find+"学生的资料是:");
System.out.println(findString);
}else
throw new NumberNotFoundException();
}catch (NumberNotFoundException e){
System.out.println(find+" no found :(");
isFind = false;
}
}
public static void print()//读取文本文件把数据打印到终端的方法
throws IOException
{
try{
BufferedReader in =
new BufferedReader(
new FileReader("c:data.txt"));
String read = "";
while ((read = in.readLine())!=null)
System.out.println(read);
}catch(IOException e){}
}
public static void timeOut(double sec)//停顿短暂时间的一个方法完全可以不要这个功能
{
double seconds = sec;
long t = System.currentTimeMillis()+(int)(seconds*1000);
while ((System.currentTimeMillis())
;
}
public void numSort()//按学号排序
throws IOException
{
long i = 0;
String s = "";
try{
DataArrayList dal = new DataArrayList();
BufferedReader in =
new BufferedReader(
new FileReader("c:data.txt"));
while ((s=in.readLine())!=null)
{
i=numberTokenizer(s);
dal.add(i);
}
Collections.sort(dal);
DataMap dm = new DataMap();
BufferedReader in2 =
new BufferedReader(
new FileReader("c:data.txt"));
while ((s=in2.readLine())!=null)
{
i=numberTokenizer(s);
dm.put(i,s);
}
PrintWriter out =
new PrintWriter (
new BufferedWriter(
new FileWriter("c:data.txt")));
Iterator it = dal.iterator();
long temp = 0;
String tempStr = "";
while (it.hasNext())
{
temp = Integer.valueOf((String)it.next()).longValue();
tempStr = dm.get(temp);
out.println(tempStr);
}
out.close();
}catch(IOException e){}
}
public void rewrite()
throws IOException,NumberNotFoundException
{
try{
System.out.print("请输入你要修改的学生号码:");
BufferedReader in =
new BufferedReader (
new InputStreamReader(System.in));
String inputLine = in.readLine();
long num = Integer.valueOf(inputLine).longValue();
findData(num);
if(isFind)
{ deleteData(num); System.out.print("请重新输入该号码:"); String str = inputData();
addData(str);
System.out.println("rewrite true!");
}
}catch(IOException e){}
catch(NumberNotFoundException e){}
}
public int count()
throws IOException
{
DataArrayList dal = new DataArrayList();
try{
String s = "";
long i =0;
BufferedReader in =
new BufferedReader(
new FileReader("c:data.txt"));
while ((s=in.readLine())!=null)
{
i=numberTokenizer(s);
dal.add(i);
}
}catch(IOException e){}
return dal.size();
} } /* *
* @author RangWei * TODO 这是个写的一个容器,继承公共类HashMap * 大概的功能就相当一个数组
*
*/ class DataMap extends HashMap//一个存储数据的Map
{
public void put(long i,String str)//把学号和数据放进这个Map
{
//以后一个学号(key)对应的是一个人的数据(value)
put(String.valueOf(i).toString(),str);
}
public void remove(long i)//接收学号,然后删除学号(key)和它对应的数据(value)
{
remove(String.valueOf(i).toString().toString());
}
public String get(long i)//接收一个学号,然后返回这个key对应的value
{
String s = String.valueOf(i).toString();
if (!containsKey(s))
{
System.err.println("Not found Key: "+s);
}
return (String)get(s);
} } /*
*
* @author RangWei * * TODO 这个类继承ArrayList * 用来按数字排序,在用号码排序时要用到它
*
*/ class DataArrayList extends ArrayList {
public void add(long num)
{
String numToString = String.valueOf(num).toString();
add(numToString);
} } /* *
* @author RangWei * * TODO 增加的一个Exception,主要是在文件里没有要找
* 的号码就抛出
*
*/ class NumberNotFoundException extends Exception {
public NumberNotFoundException()
{} }
第五篇:JAVA课程设计
JAVA程序设计课程设计报告
目 录
一、 项目背景及意义: ............................................... 2
二、 系统描述 ............................................................... 2
三、 分析与设计 ........................................................... 3 1. 分析 ....................................................................... 3 2. 功能模块划分 ....................................................... 3 3. 功能模块流程图 ................................................... 5 4. 各模块的关键代码 ............................................... 5
四、 系统测试 ............................................................... 5
五、 课程设计进度 ..................................................... 13
六、 心得体会 ............................................................. 13
七、 参考文献 ............................................................. 14
八、 附录 ..................................................................... 14
一、 项目背景及意义:
记事本千百年来都在人类的工作生活中起到重要的作用,计算机革命电子产品未出现之前,人们的记事都是基于纸质加笔两者的简单记事,也即单纯的文本记录。直到计算机的出现和更新换代,高科技电子产品大行其道,人们日益将在纸质上的记事转移到将事件记录在个人电子设备如PC上,现在基于电子移动设备如手机和平板等的记事本app开发更是迅猛,功能更加丰富多彩,能记录的不单纯是文本了,人们能将声音和图片甚至视频结合起来,将一件事“有声有色”地记录下来,保存在个人电子设备产品中。近年来产生的采用云存储技术的“云笔记”,更是能让人们随时随地将集文本、语音、图像和视频于一体的事件记录保存在所谓的“云端”,能同步到个人其他设备中,解决了个人资料和信息跨平台跨地点的管理问题。
现在我们以有限的资源以及智慧力量,用Java语言编写一个可以在装有jar模拟器的个人电子移动设备上使用的简单记事本软件,没视频记录功能和基于网络功能但却能集文本、声音和图像于一起记录的功能的记事本,我们将轻便和简洁走向极致!所以此记事本软件操作起来简单易上手,能给带来同学简单便捷的记事体验。另外,这不单纯是个人人都可以打开的记事本,使用时需要账号密码登陆,因此能较好地保障个人隐私。
二、 系统描述
Java的前身是Oak,它一开始只是被应用于消费性电子产品中。后来它的开发者们发现它还可以被用于更大范围的Internet上。1995年,Java语言的名字从Oak编程了Java。1997年J2SE1.1发布。1998年J2SE1.2发布,
2 标志Java2的诞生。十多年来,Java编程语言及平台成功地运用在网络计算及移动等各个领域。Java的体系结构由Java语言、Java class、Java API、Java虚拟机组成。它具有简单、面向对象、健壮、安全、结构中立、可移植和高效能等众多优点。Java支持多线程编程,Java运行时系统在多线程同步方面具有成熟的解决方案。Java的平台标准有Java ME,Java SE和Java EE。Java发展到今天,它的卓越成就及在业界的地位毋庸置疑。目前在众多的支持Java的开发工具中主要的7有Java Development Kit,NetBeans,Jcreator,JBuilder,JDeveloper和Eclipse等。其中Java Development Kit 简称JDK是大多开发工具的基础。以上的每种开发工具都有优缺点,对于开发者来说,重要的是要根据自己的开发规模、开发内容和软硬件环境等因素来选择一种合适的开发工具。
在本程序设计中,因为需要开发的是记事本程序,规模较小,内容较少,所以选择了适合初学者使用的eclipse开发工具。
三、 分析与设计
1. 分析
现在网络上各种文档编辑器数不胜数,有EmEditor ,UEStudio ,GridinSoft Notepad ,Notepad++,win32pad ,SkimEdit,UniRed, xint 。功能也是应有尽有,有能改变字体的,有能改变文字颜色的。但是,这些软件又存在各种各样的瑕疵或问题:有的文件体积相对于一般文字编辑来说太大;有的功能太繁杂,使初级使用者一时难以掌握。仅从日常应用方面来说,一个文本编辑器只需一些简单实用的功能就够了。本程序设计就是依照这样一种使用需要设计了一个简单的笔记本程序。 2. 功能模块划分
程序构建的记事本程序具有Windows系统记事本工具基本功能,并且能够创
3 建多个不同的用户和保存图片功能。以下是具体说明: 第一部 登陆界面
(1) 用户名和密码输入文本框,供已注册的用户输入用户名和密码。 (2) 登陆控件,在用户名和密码正确的前提下,进入软件主界面。
(3) 注册控件,点击此按钮,将进入用户创建,创建之后用户名和密码会自动保存在电脑的相应文件中。 第一部分 菜单栏
(1)菜单中有“新健”,“删除”,“显示”,“菜单”,“帮助”五个主菜单。 (2)“新建”有“新建笔记”“新建笔记本”二个子菜单:分别用于创建新的笔记和新的笔记本。
(3)“删除”中有“删除笔记”和“删除笔记本”二个子菜单,和“新建”相对应。
(4)“显示”中可以选择界面的风格,有Metal风格、Windows风格、Motif风格、Nimbus风格;还有界面排版的选择,可以选择水平显示或垂直显示。 (5)“帮助”菜单中有关于笔记本程序的说明,作者等信息。 第二部分 笔记本排列区
显示用户创建的所有笔记本。 第三部分 笔记显示排列区
此处主要显示选中笔记本中的所有笔记,并且可以在此区右击来创建、删除笔记、查看笔记,当然也可以在菜单栏中的“新建”和“删除”菜单中创建和删除笔记。
第四部分 笔记编辑区
此部分为用户设计选择操作和右键操作,可以在笔记中插入图片、更改字体颜色、和插入时间;方便用户进行一系列的编辑操作,增强本记笔记本的用户体验性能。
4 3. 功能模块流程图
4. 各模块的关键代码
1构造函数创建窗口界面 主菜单,子菜单
public MainFrame(String name) {
this.name=name;
this.setUser_path("Users/"+name);
this.setBook_Path(this.getUser_path()+"/默认笔记本");
this.setNote_Path(this.getBook_Path()+"/默认笔记"); //
一、菜单界面
menu=new Menu(this);
/**
二、 创建三个JPanel *1.l笔记正文 TextPanel
*2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */
/*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this);
} /*文件名目录部分******/
DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/
NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view();
//
三、处理拆分窗格
splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M);
//
四、设置标题等
this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); 2 添加右键菜单并为其添加监听器
public RightPanel(JPanel panel,MainFrame mainFrame)
{ this.mainFrame=mainFrame; this.panel=panel;
//创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行
textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮
//设置鼠标右击弹框效果
//cut
cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png"));
cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x"
cutItem.addActionListener(this);
//copy
copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png"));
copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置
6 快捷键 "ctrl O"
copyItem.addActionListener(this);
//paste
pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png"));
pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v"
pasteItem.addActionListener(this);
saveItem=new JMenuItem("Save",new ImageIcon("image/save.png"));
saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s"));
saveItem.addActionListener(this);
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand()=="Cut"){//剪切
textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制
textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴
textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存
this.book_Save(); }else if(e.getSource()==image_Button){//插入图片
String temp=Tools.open_Choose(); if(!temp.equals("not")){
textPane.insertIcon(new ImageIcon(temp)); }
}else if(e.getSource()==font_Button){//修改字体颜色
Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间
Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式
String hehe = dateFormat.format( now );
textPane.replaceSelection(hehe);
}
3 设为Document类型
public static void setDocument(File file) {
try {
} JTextPane tempPane=new JTextPane(); FileOutputStream outputStream=new FileOutputStream(file); ObjectOutputStream oos=new ObjectOutputStream(outputStream); oos.writeObject(tempPane.getDocument());
oos.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block
e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); } 系统测试
1、笔记本登陆
2 、用户注册
3、菜单栏 a.总菜单
b.新建菜单
8
c.删除菜单
d.显示菜单
e.“菜单”菜单
f.帮助
10 4.导入笔记、导出笔记、及插入图片选择
5.字体颜色选择
6.插入时间
7、插入图片
四、 课程设计进度
我们进行了若干阶段的部署,令课题研究可以在每个阶段有条不紊地进行。具体如下:
(一)理论学习和开题论证
1.浏览相关网站,查阅与课题研究的相关理论、研究方法; 2.运用文献研究法,深入学习java理论,对要有关课题研究的知识进行理论上的研究和探讨。 3,制订研究计划和方案 。
(二)第一阶段
1.以调查法为主开展研究。(1)对有关java的课题设计进行调查,查阅网络上java应用的设计案例,并分析和总结,寻找思路。(2)对更新频率快的java应用进行追踪,采取观察,评价、讨论的方式分析和总结。
2.制订第二阶段实验方案,为下阶段实验做准备。
(三)第二阶段
1.按计划在继续第一阶段实验的基础上,进一步加强java应用的实施和研究。采用实验法对上一阶段的总结的结论进行验证和拓展。
2.让同学体验一下我们初步完成的作品,根据他们用完之后的感受,进一步修正作品存在的问题,完善作品。
(四),总结阶段
1.收集和整理研究资料,参照相关书籍分析和研究实验情况 2.制订总结阶段计划 3.总结和提炼研究成果 4.全面总结实验工作 5.解题论证
6.成果展示(课题报告) (五) 总结阶段(2013.12) 整理材料,撰写课题报告。
五、 心得体会
此次课程设计由我们小组一起共同合作完成,花费了差不多两个月的时间。在这期间我们共同协作,互帮互助取得了很好的效率,也为我们构建友好的同学关系,学习气氛良好做出了一定的贡献。在这期间我领略到了团队协作的重要性, 13 也看到了团队合作的高效率性。还有通过这次试验我们领悟到了团队的力量是巨大的,也学习到的一些学习方法,比如追查API,如何在短时间内学习一个自己不懂的东西那就是利用好所有的搜索引擎,多去图书馆找资料。总之此次课程设计我们不仅长了学科知识,在生活上我也长了见识。
六、 参考文献
a.黄晓东 等编著 Java课程设计案例精编(第二版)[M].北京:中国水利水电出版社,2007 b.李兴华 等编著 Java开发实战经典Java开发实战经典 北京:清华大学出版社,2009 C.李尊朝 苏军 Java程序设计(第二版) 图形用户界面设计、Swing组件 中国铁道出版社,2007
七、 附录
1.程序结构
14 2.程序
(1)Tools.java package common;
import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream;
import javax.swing.*;
public class Tools {
/**打开选择框 返回详细地址*/ public static String open_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showOpenDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not"; } /**保存选择框 返回详细地址*/ public static String save_Choose() {
JFileChooser jfc1=new JFileChooser();
jfc1.setDialogTitle("请选择...");
int judge=jfc1.showSaveDialog(null);
jfc1.setVisible(true);
//得到文件的完全路径
if(judge==JFileChooser.APPROVE_OPTION)
return (jfc1.getSelectedFile().getAbsolutePath());
else
return "not";
}
/**显示对话框,需要传递 标题和显示内容*/ public static void showMessage(String text,String title)
15 {
JOptionPane.showMessageDialog(null,text,title,
JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); } /**新建笔记时将笔记设为Document类型,方便存储图片,在本地不能打开*/ public static void setDocument(File file) {
try {
JTextPane tempPane=new JTextPane();
FileOutputStream outputStream=new FileOutputStream(file);
ObjectOutputStream oos=new ObjectOutputStream(outputStream);
oos.writeObject(tempPane.getDocument());
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**删除文件 传一个文件地址 返回一个boolean 为了方便删除文件夹才将此方法提取出来*/ public static boolean deleteFile(String path) {
File file=new File(path);
return (file.delete()); }
/**删除文件 传一个文件地址
返回一个boolean 先删除里面的文件再删除文件夹*/ public static boolean deleteFolder(String path) {
File folder=new File(path);
File[] list=folder.listFiles();
for(int i=0;i deleteFile(path+"/"+list[i].getName()); return (folder.delete()); } } (2)User.java package common; /** 16 * 处理用户属性 * 为用户创建自己的专有途径 * 如果有了则不创建 */ import java.io.*; import javax.swing.JTextPane; import javax.swing.text.Document; import view.MainFrame; public class User { public User(String name) { //如果第一次登录的话,为用户新建一个专属区 File file=new File("Users/"+name); if(!file.exists()) { try { file.mkdir(); } catch (Exception e1) { e1.printStackTrace(); } //第一次登录创建默认笔记本 File book=new File("Users/"+name+"/默认笔记本"); try { book.mkdir(); } catch (Exception e1) { e1.printStackTrace(); } //第一次登录创建默认笔记 File note=new File("Users/"+name+"/默认笔记本"+"/默认笔记.ser"); try { note.createNewFile(); Tools.setDocument(note); } catch (Exception e1) { e1.printStackTrace(); } } //构造完毕 正式进入笔记本 new MainFrame(name); } } (3)login_zhuce.java package login; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import common.User; import view.MainFrame; public class login_zhuce extends JFrame implements ActionListener { JPanel jp0; JPanel jp1,jp2,jp3,jp4,jp5; JTextField jtf; JPasswordField jpf; JLabel jl1,jl2,jl3; JButton jb1,jb2,jb3; ImageIcon bg; public static void main(String[] args) { // TODO Auto-generated method stub login_zhuce lz = new login_zhuce(); } public login_zhuce(){ try {//默认 NImbus风格 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { // TODO Auto-generated catch block e.printStackTrace(); } jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp1.setOpaque(false); jp2.setOpaque(false); jp3.setOpaque(false); jp4.setOpaque(false); //no.1 jl1 = new JLabel("用户名"); jtf = new JTextField(10); jp1.add(jl1); jp1.add(jtf); //no.2 jl2 = new JLabel("密 码"); jpf = new JPasswordField(10); jp2.add(jl2); jp2.add(jpf); //3 jb1 = new JButton("登陆"); jb1.addActionListener(this); jb1.setActionCommand("denglu"); jb2 = new JButton("取消"); jb2.addActionListener(this); jb2.setActionCommand("quxiao"); jb3 = new JButton("注册"); jb3.addActionListener(this); jb3.setActionCommand("zhuce"); jp3.add(jb1); jp3.add(jb2); jp3.add(jb3); this.setLayout(new GridLayout(4,1)); this.add(jp4); this.add(jp1); this.add(jp2); this.add(jp3); bg = new ImageIcon("image//huashi.jpg"); jl3 = new JLabel(bg); jl3.setBounds(0, 0, 300, 200); this.getLayeredPane().add(jl3,new Integer(Integer.MIN_VALUE)); jp5 = (JPanel)this.getContentPane(); jp5.setOpaque(false); //设置透明 this.setTitle("笔记本登陆"); this.setSize(300,200); // 获取屏幕分辨率,以此设置程序出现在屏幕中央 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension testSize = getSize(); this.setLocation((screenSize.widthtestSize.width) / 2, (screenSize.height - testSize.height) / 2); this.setResizable(false); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 24 public void actionPerformed(ActionEvent e){ if(e.getActionCommand().equals("queding")){ String st1 = "ff"; String st2 = ".txt"; String st3 = this.jtf1.getText(); String st4 = st1 + st3 +st2 ; System.out.println(st4); File f = new File(st4); if(!f.exists()){ String password1=new String(jtf2.getPassword()); String password2=new String(jtf3.getPassword()); System.out.println(password1); System.out.println(password2); if (!(password1.equals(password2))){ JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); this.jtf2.setText(null); this.jtf3.setText(null); } else { try { f.createNewFile(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } FileWriter fw = null; BufferedWriter bw = null; try { fw = new FileWriter(st4,true); bw = new BufferedWriter(fw); bw.write(st3+""); bw.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally{ try { fw.close(); } catch (IOException e1) { 25 // TODO Auto-generated catch block e1.printStackTrace(); } } try { fw = new FileWriter(st4,true); bw = new BufferedWriter(fw); bw.write(this.jtf2.getPassword()); bw.close(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } finally{ try { fw.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } JOptionPane.showMessageDialog(null, "创建账户成功", "恭喜你", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); this.dispose(); login_zhuce lz = new login_zhuce(); } } else { JOptionPane.showMessageDialog(null,"该用户名已被占用,请重新输入用户名","错误提示", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); System.out.println("该用户名已被占用,请重新输入用户名"); this.jtf1.setText(null); } // if (this.jpf1.getText()!=this.jpf2.getText()){ // JOptionPane.showMessageDialog(null, "两次密码输入不一样,请重新输入", "错误提示", // JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); // this.jpf1.setText(null); // this.jpf2.setText(null); // } } 26 else if(e.getActionCommand().equals("quxiao")){ this.dispose(); System.exit(0); } } } (5)LefgPanle.java package view; /** * 将卡片布局修改 修改成仅有两片 * 第一片 所有笔记 按钮 * 第二片 所有笔记 目录 */ import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class LeftPanle extends JPanel implements ActionListener,MouseListener{ /**************笔记本类型部分声明*****************/ CardLayout cardLayout;//卡片布局的方式 JPanel firstPanel,secondPanel;//分别存储两片 //第一片声明 JPanel allBookPanel,firstTempPanel;//所有笔记 JButton allBook;//所以笔记,排序,回收站的按钮 JScrollPane allBookjsp; //第二片声明 JPanel secondTempPanel,timePaenl_o; JButton allBook_o;//所以笔记,排序,回收站的按钮 JScrollPane timePaenljsp_o; //处理文件部分内容 File book; String [] book_name; JLabel[] member; JPanel panel; MainFrame mainFrame; public final int TOTAL=20; /**************笔记本类型部分声明结束*****************/ 27 public LeftPanle(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //处理第一片11111111111111111111111111 //设置初始界面 显示 所以笔记,排序,回收站的按钮 //ImageIcon imageIcon=new ImageIcon("image/note.png"); allBook=new JButton("所有笔记",new ImageIcon("image/expand.png")); allBook.addActionListener(this);//点击按时间排序时显示第二片 allBookPanel=new JPanel(new GridLayout(TOTAL,1,1,4)); member=new JLabel[TOTAL]; for(int i=0;i member[i]=new JLabel(""); member[i].addMouseListener(this); } allBookjsp=new JScrollPane(allBookPanel);//滚动 firstPanel=new JPanel(new BorderLayout());//将第一片设置为边界布局 firstPanel.add(allBook,"North"); firstPanel.add(allBookjsp); //处理第二片222222222222222222222 //仅有一个按钮 allBook_o=new JButton("所有笔记",new ImageIcon("image/collapse.png")); allBook_o.addActionListener(this);//点击所有笔记时 显示第一片 secondPanel=new JPanel(new BorderLayout());//将第二片设为 边界布局 secondPanel.add(allBook_o,"North"); //进行卡片布局 cardLayout=new CardLayout(); panel.setLayout(cardLayout); panel.add(firstPanel,"1"); panel.add(secondPanel,"2"); } //更新leftPanel中的笔记本,在新建或删除笔记本是需要刷新 并附带刷新右边两个 28 Panel public void update_Left_view() { book=new File(mainFrame.getUser_path()); book_name=book.list(); if(book.exists()) { for(int i=0;i { member[i].setText(""); member[i].setIcon(null); member[i].removeMouseListener(this); } for(int i=0;i { //为每个好友设置头像和名字,每一个好友用 JLabel组件 存放 ImageIcon imageIcon=new ImageIcon("image/note.png"); member[i].setText(book_name[i]); member[i].setIcon(imageIcon); member[i].addMouseListener(this);//为每一种笔记的排序方式注册监听 allBookPanel.add(member[i],i);//将笔记添加到所有笔记面板 } mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name[0]); mainFrame.midPanel.update_Mid_View(); } } @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub //将选中部分字体设为红色 JLabel jl = null; for(int i=0;i { if(e.getComponent().equals(member[i])) { jl=(JLabel)e.getSource(); jl.setForeground(Color.red); } else { member[i].setForeground(Color.black); 29 // // // // } } //保存当前笔记本的路径 如 ... mainFrame.setBook_Path(book.getAbsolutePath()+""+jl.getText()); //点击打开一个笔记本 刷新中间的目录 mainFrame.midPanel.update_Mid_View(); } @Override public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.red); //jl.setFont(new Font("",1,30)); //在笔记本界面操作 允许删除笔记本 不允许删除笔记 mainFrame.menu.delete_item[0].setEnabled(false);//不允许删除笔记 mainFrame.menu.delete_item[1].setEnabled(true);//允许删除笔记本 } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub JLabel jl=(JLabel)e.getSource(); jl.setForeground(Color.black); //jl.setFont(new Font("",1,12)); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource()==allBook) { //cardLayout.show(this.getContentPane(), "2"); cardLayout.next(panel); }else if(e.getSource()==allBook_o){ 30 //cardLayout.show(this.getContentPane(), "1"); cardLayout.next(panel); } } } (6)MainFrame.java package view; /** * 笔记本 java版 * 1、将主界面分为四块 北边的菜单 以及左中右的笔记本目录,笔记目录和笔记内容 * 2、左边目录为卡片布局,实现点了"所有笔记"弹出所有笔记的效果 * 3、中间显示笔记目录 采用网格布局 每个网格用了JMenuItem * 4、右边是一个JTextArea可能会改成JTextPane * 5、实现了新建删除笔记(本),但界面刷新有点问题 (会重叠) * 6、采用MVC的思想实现时事刷新界面的效果 * 7、鼠标右击删除新建 测试成功(鼠标右击是笔记本的新建与删除没有) * 8、注册登录系统 已测试成功 在包login里面 * 9、图片的问题已成功解决 * 10、可以更改字体颜色(大小没有写),以及插入时间等 * 11、显示处添加实现多种版本的切换(如可切换成windows) */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import common.User; public class MainFrame extends JFrame implements ActionListener{ Menu menu;//连接菜单栏 JPanel NoteTypePanel,DirectoryPanel,TextPanel;//三个大Panel JSplitPane splitM_R,splitL_M; LeftPanle leftPanel;//左边第一个Panel MidPanel midPanel;//连接中间Panel RightPanel rightPanel;//连接右边Panel //存放路径 31 public String name=null; public String user_path=null; public String book_Path=null; public String note_Path=null; public MainFrame(String name) { this.name=name; this.setUser_path("Users/"+name); this.setBook_Path(this.getUser_path()+"/默认笔记本"); this.setNote_Path(this.getBook_Path()+"/默认笔记"); // 一、菜单界面 menu=new Menu(this); /** 二、 创建三个JPanel *1.l笔记正文 TextPanel *2.笔记名目录及查找方式 DirectoryPanel *3.笔记类型目录及排序方式选择 NoteTypePane */ /*笔记正文部分*******/ TextPanel=new JPanel(); rightPanel=new RightPanel(TextPanel,this); /*文件名目录部分******/ DirectoryPanel=new JPanel(); midPanel =new MidPanel(DirectoryPanel,this); /*笔记类型目录部分*****/ NoteTypePanel =new JPanel(); leftPanel=new LeftPanle(NoteTypePanel,this); leftPanel.update_Left_view(); // 三、处理拆分窗格 splitM_R =new JSplitPane(1,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); // 四、设置标题等 this.setTitle(name+" 的笔记本"); this.setLocation(200,100); this.setSize(1000,600); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 32 } this.setVisible(true); } //为了方便后面的垂直和水平显示 public void showStyle(int show) { this.remove(splitL_M);//先把以前的去掉重新添加 splitM_R =new JSplitPane(show,DirectoryPanel,TextPanel); splitM_R.setOneTouchExpandable(true); splitL_M =new JSplitPane(1,NoteTypePanel,splitM_R); splitL_M.setOneTouchExpandable(true); this.add(splitL_M); this.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } public String getUser_path() { return user_path; } public void setUser_path(String user_path) { this.user_path = user_path; } public String getBook_Path() { return book_Path; } public void setBook_Path(String book_Path) { this.book_Path = book_Path; } public String getNote_Path() { return note_Path; } public void setNote_Path(String note_Path) { this.note_Path = note_Path; } 33 (7) package view; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import javax.swing.text.Document; import javax.swing.text.StyledDocument; import common.Tools; import common.User; import login.login_zhuce; public class Menu extends JFrame implements ActionListener{ //菜单部分声明 JMenuBar menuBar=null;//菜单主干 JMenu newNote_menu,deliteNote_menu,show_menu,menu_menu,help_menu;//菜单组件 树干 //处理新建笔记菜单 newNote_menu JMenuItem[] newNote_item={ new JMenuItem("新建笔记"), new JMenuItem("新建笔记本") }; //处理删除deliteNote_menu JMenuItem[] delete_item={ new JMenuItem("删除笔记"), new JMenuItem("删除笔记本") }; //处理显示 JMenuItem[] show_item={ new JMenuItem("Metal风格"), new JMenuItem("Windows风格"), new JMenuItem("Motif风格"), new JMenuItem("Nimbus风格"), new JMenuItem("水平显示"), new JMenuItem("垂直显示") }; //处理menu_menu JMenuItem[] menu_item={ new JMenuItem("丨账户"), new JMenuItem("丨导入"), 34 new JMenuItem("丨导出"), new JMenuItem("丨注销"), new JMenuItem("丨退出") }; //处理help_menu JMenuItem[] help_item={ new JMenuItem("关于作者"), new JMenuItem("关于笔记本") }; MainFrame mainFrame; public Menu(MainFrame mainFrame) { this.mainFrame=mainFrame; // 一、先处理菜单 menuBar=new JMenuBar(); //各菜单menu[0]menu[1]menu[2]menu[3]menu[4] newNote_menu=new JMenu("新建"); deliteNote_menu=new JMenu("删除"); deliteNote_menu.setToolTipText("选中笔记(本)时才可删除"); show_menu=new JMenu("显示"); help_menu=new JMenu("帮助"); menu_menu=new JMenu("菜单"); //将菜单项添加到各菜单 for(int i=0;i 菜单 newNote_menu.add(newNote_item[i]); for(int i=0;i deliteNote_menu.add(delete_item[i]); for(int i=0;i show_menu.add(show_item[i]); for(int i=0;i help_menu.add(help_item[i]); for(int i=0;i { menu_menu.add(menu_item[i]); if(i==0||i==2)//添加分隔线 将导入和导出框起来 menu_menu.addSeparator(); } 35 //添加事件监听 for(int i=0;i newNote_item[i].addActionListener(this); for(int i=0;i delete_item[i].addActionListener(this); for(int i=0;i show_item[i].addActionListener(this); for(int i=0;i help_item[i].addActionListener(this); for(int i=0;i menu_item[i].addActionListener(this); //将菜单 添加到主干中 menuBar.add(newNote_menu); menuBar.add(deliteNote_menu); menuBar.add(show_menu); menuBar.add(menu_menu); menuBar.add(help_menu); mainFrame.add(menuBar,"North"); } //构造完毕 //实现风格转换 private void changeFlavor(int flavor)throws Exception { switch(flavor) { case 1: UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); break; case 2: UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); break; case 3: UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel"); break; case 4: UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); break; 36 } SwingUtilities.updateComponentTreeUI(this.getContentPane()); SwingUtilities.updateComponentTreeUI(mainFrame); } //实现监听后的动作 @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String str=e.getActionCommand(); if(str.equals("新建笔记")){ String note_name=null; note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记", JOptionPane.INFORMATION_MESSAGE |JOptionPane.OK_OPTION); //如果用户点取消 或没有输入文件名 则不用新建 if(note_name!=null){ File file=new File(mainFrame.book_Path+"/"+note_name+".ser"); if(!file.exists()) { try { file.createNewFile(); //将新建的笔记格式设为Document对象 Tools.setDocument(file); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //刷新中间和左边的Panel mainFrame.midPanel.update_Mid_View(); } } }else if(str.equals("新建笔记本")){ String book_name=null; book_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); if(book_name!=null){ File file=new File(mainFrame.getUser_path()+"/"+book_name); //System.out.println("User_path:"+mainFrame.getUser_path()); if(!file.exists()) { try { file.mkdir(); //将笔记本路径设为新建笔记本的路径 37 mainFrame.setBook_Path(mainFrame.getUser_path()+"/"+book_name); mainFrame.leftPanel.update_Left_view(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //改变的笔记本总数 刷新左边Panel mainFrame.leftPanel.update_Left_view(); } } }else if(str.equals("删除笔记")){ Tools.deleteFile(mainFrame.getNote_Path()); //删除笔记之后需要刷新右边的两个Panel mainFrame.midPanel.update_Mid_View(); }else if(str.equals("删除笔记本")){ Tools.deleteFolder(mainFrame.book_Path); //笔记本目录发生改变 mainFrame.leftPanel.update_Left_view(); }else if(str.equals("关于作者")){ Tools.showMessage("邓伟杰、苏俊钦、陈通、陈盛锋、林健祺、尹国瑜、温天宇、赵潮顺", "帮助"); }else if(str.equals("关于笔记本")){ Tools.showMessage("还存在许多BUG,望老师指正", "呵呵"); }else if(str.equals("丨账户")){ Tools.showMessage("姓名:"+mainFrame.name, "用户信息"); }else if(str.equals("丨导入")){//即打开一个笔记 String temp=Tools.open_Choose(); if(!temp.equals("not")) { FileInputStream inputStream=null; ObjectInputStream ois=null; try { inputStream=new FileInputStream(Tools.open_Choose()); ois=new ObjectInputStream(inputStream); mainFrame.rightPanel.textPane.setDocument((Document) ois.readObject()); mainFrame.rightPanel.book_Save(); } catch (Exception e1) { // TODO Auto-generated catch block 38 e1.printStackTrace(); }finally{ try { ois.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }else if(str.equals("丨导出")){//即另存为一个笔记 String temp=Tools.open_Choose(); if(!temp.equals("not")) { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try { outputStream=new FileOutputStream(Tools.save_Choose()); oos=new ObjectOutputStream(outputStream); oos.writeObject(mainFrame.rightPanel.textPane.getDocument()); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); }finally{ try { oos.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } }else if(str.equals("丨注销")){ mainFrame.dispose(); new login_zhuce();//注销之后重新登录 }else if(str.equals("丨退出")){ System.exit(0); }else if(str.equals("垂直显示")){ mainFrame.showStyle(0);//重新调用一下拆分窗格 }else if(str.equals("水平显示")){ mainFrame.showStyle(1); }else { 39 try{ if(str.equals("Metal风格")){ this.changeFlavor(1); }else if(str.equals("Windows风格")){ this.changeFlavor(2); }else if(str.equals("Motif风格")){ this.changeFlavor(3); }else if(str.equals("Nimbus风格")){ this.changeFlavor(4); } }catch(Exception e1){ e1.printStackTrace(); } } } } (8)Midpanel.java package view; import java.awt.*; import javax.swing.*; import javax.swing.text.Document; import common.Tools; import java.awt.event.*; import java.io.*; public class MidPanel extends JPanel implements ActionListener,MouseListener{ JPanel panel; MainFrame mainFrame; /// JScrollPane jscroll2; JMenuItem[] items; File lists[]; JPanel jp1; 40 //鼠标右击部分 JPopupMenu right_Click; JMenuItem delete_book,properties_book,new_book; public final int TOTAL=20; public String filename; public String temp_path=null;//右击时记录选中笔记的途径 public MidPanel(JPanel panel, MainFrame main) { this.panel=panel; this.mainFrame=main; jp1=new JPanel(); jp1.setLayout(new GridLayout(TOTAL,1,1,4)); //初始化20个MenuItem items =new JMenuItem[TOTAL]; for(int j=0;j items[j]=new JMenuItem(""); items[j].addMouseListener(this); } //处理鼠标右击问题 right_Click=new JPopupMenu(); new_book=new JMenuItem("New");//新建笔记 delete_book=new JMenuItem("Delete"); //删除笔记 properties_book=new JMenuItem("Properties"); delete_book.addActionListener(this); properties_book.addActionListener(this); new_book.addActionListener(this); //right_Click. right_Click.add(new_book); right_Click.addSeparator(); right_Click.add(delete_book); right_Click.add(properties_book); JLabel label=new JLabel("All Note & Note All "); label.setEnabled(false); label.setBackground(Color.gray); 41 jscroll2 = new JScrollPane(jp1);//为Panel添加滚动条 panel.setLayout(new BorderLayout()); panel.add(label,"North"); panel.add(jscroll2); } //在新建或删除是需要刷新,并附带刷新 RightPanel中的内容 public void update_Mid_View() { File file = new File(mainFrame.getBook_Path()); if(file.isDirectory()) { lists = file.listFiles(); for(int j=0;j items[j].setText(""); items[j].setArmed(false); items[j].removeMouseListener(this);//避免某个笔记被删除之后还可以被点的情况 } for(int i=0;i items[i].setText(lists[i].getName());//创建20个JLanel items[i].addActionListener(this); items[i].addMouseListener(this); jp1.add(items[i],i ); //在该项上右击弹出一个选择框 items[i].setComponentPopupMenu(right_Click); } //更新右边的Panel 里面应该没有内容 mainFrame.rightPanel.update_Right_view(); } } public void showfile(int y) { String filename1 = lists[y].getAbsolutePath(); FileInputStream inputStream=null; ObjectInputStream ois = null; try { inputStream=new FileInputStream(filename1); ois=new ObjectInputStream(inputStream); 42 mainFrame.rightPanel.textPane.setDocument((Document)ois.readObject()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { ois.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand().equals("New")){ String note_name=JOptionPane.showInputDialog(null,"请输入笔记的名字","新笔记", JOptionPane.INFORMATION_MESSAGE | JOptionPane.OK_OPTION); //如果用户点了取消 则不用新建笔记 if(!note_name.equals("null")){ File file=new File(mainFrame.book_Path+"/"+note_name+".ser"); if(!file.exists()) { try { file.createNewFile(); //为新建的笔记写入一个空白的对象 避免打开时报指针的错误 Tools.setDocument(file); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } //刷新中间和左边的Panel mainFrame.midPanel.update_Mid_View(); } }else if(e.getActionCommand().equals("Delete")){ File file=new File(this.getTemp_path()); file.delete(); //删除笔记之后需要刷新右边的两个Panel 43 mainFrame.midPanel.update_Mid_View(); }else if(e.getActionCommand().equals("Properties")){ Tools.showMessage(this.getTemp_path(),"笔记"); }else { mainFrame.rightPanel.textPane.setEditable(true); mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+e.getActionCommand()); for (int x=0;x if (e.getActionCommand().endsWith(lists[x].getName())) this.showfile(x); } } } @Override public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub //设置选中部分的情况 JMenuItem jmtemp=null; for(int i=0;i if(arg0.getComponent().equals(items[i])) { jmtemp=(JMenuItem)arg0.getSource(); jmtemp.setArmed(true); }else{ items[i].setArmed(false); } } //记录被要在右边显示出内容的笔记途径 可以在菜单中删除该笔记 mainFrame.setNote_Path(mainFrame.getBook_Path()+"/"+jmtemp.getText()); mainFrame.menu.delete_item[0].setEnabled(true);//允许删除笔记 mainFrame.menu.delete_item[1].setEnabled(false);//不允许删除笔记本 } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub JMenuItem jm=(JMenuItem)arg0.getSource(); //将当前笔记的途径 存到辅助路径中 44 this.setTemp_path(mainFrame.getBook_Path()+"/"+jm.getText()); } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub JMenuItem jm=(JMenuItem)arg0.getSource(); //jm.setBackground(new Color(238,238,238)); } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } public String getTemp_path() { return temp_path; } public void setTemp_path(String temp_path) { this.temp_path = temp_path; } } (9) RightPanel.java package view; /** * 改用JTextPane实现图片即单个文字更改字体或颜色的功能 */ import java.awt.*; import java.awt.event.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.*; import javax.swing.text.Document; import common.Tools; 45 public class RightPanel extends JPanel implements ActionListener{ JPanel panel; MainFrame mainFrame; //文本域 JTextPane textPane; JScrollPane jsp_Pane; //鼠标右击部分 JPopupMenu right_Click; JMenuItem cutItem,copyItem,pasteItem,saveItem; //插入图片与更改字体 JToolBar toolBar; JButton image_Button,font_Button,timeButton; public RightPanel(JPanel panel,MainFrame mainFrame) { this.mainFrame=mainFrame; this.panel=panel; //创建一个 文本域存放文字 JTextArea textPane =new JTextPane(); //设置自动换行 textPane.setFont(new Font("", 1, 12)); jsp_Pane=new JScrollPane(textPane);//滚轮 //设置鼠标右击弹框效果 //cut cutItem=new JMenuItem("Cut",new ImageIcon("image/cut.png")); cutItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl x" cutItem.addActionListener(this); //copy copyItem=new JMenuItem("Copy",new ImageIcon("image/copy.png")); copyItem.setAccelerator(KeyStroke.getKeyStroke("ctrl x"));//设置快捷键 "ctrl O" copyItem.addActionListener(this); //paste pasteItem=new JMenuItem("Paste",new ImageIcon("image/haha.png")); pasteItem.setAccelerator(KeyStroke.getKeyStroke("ctrl v"));//设置快捷键 "ctrl v" pasteItem.addActionListener(this); saveItem=new JMenuItem("Save",new ImageIcon("image/save.png")); saveItem.setAccelerator(KeyStroke.getKeyStroke("ctrl s")); saveItem.addActionListener(this); //将各菜单项添加到 右击菜单组中 right_Click=new JPopupMenu(); //right_Click. right_Click.add(cutItem); 46 right_Click.add(copyItem); right_Click.add(pasteItem); right_Click.addSeparator(); right_Click.add(saveItem); //为右击注册监听 textPane.setComponentPopupMenu(right_Click); //可以懂工具条部分 toolBar=new JToolBar("工具"); image_Button=new JButton("插入图片"); image_Button.addActionListener(this); font_Button=new JButton("更改字体颜色"); font_Button.addActionListener(this); timeButton = new JButton("插入时间"); timeButton.setToolTipText("点击可以插入当前时间"); timeButton.addActionListener(this); toolBar.add(image_Button); toolBar.add(font_Button); toolBar.add(timeButton); //将工具条和textPane添加到panel panel.setLayout(new BorderLayout()); panel.add(toolBar,"North"); panel.add(jsp_Pane); } //更新文本框 在新建或删除 笔记或笔记本 的时候需要刷新 public void update_Right_view() { textPane.setText(""); textPane.setEditable(false); } //保存当前笔记 public void book_Save() { FileOutputStream outputStream=null; ObjectOutputStream oos=null; try { outputStream=new FileOutputStream(mainFrame.getNote_Path()); oos=new ObjectOutputStream(outputStream); oos.writeObject(textPane.getDocument()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); 47 }finally{ try { oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getActionCommand()=="Cut"){//剪切 textPane.cut(); }else if(e.getActionCommand()=="Copy"){//复制 textPane.copy(); }else if(e.getActionCommand()=="Paste"){//粘贴 textPane.paste(); }else if(e.getActionCommand()=="Save"){//保存 this.book_Save(); }else if(e.getSource()==image_Button){//插入图片 String temp=Tools.open_Choose(); if(!temp.equals("not")){ textPane.insertIcon(new ImageIcon(temp)); } }else if(e.getSource()==font_Button){//修改字体颜色 Color c=JColorChooser.showDialog(this, "Color", Color.black); textPane.setForeground(c); }else if(e.getSource()==timeButton){//插入时间 Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");//可以方便地修改日期格式 String hehe = dateFormat.format( now ); textPane.replaceSelection(hehe); } } } 48 【java课程设计管理系统】相关文章: java课程设计人事管理06-20 java课程设计题目09-21 java课程设计选题09-21 java课程设计题目106-03 java课程设计学生信息06-19 java课程设计报告小组06-20 Java技术综合课程设计论文04-29 java课程设计带源代码06-20 【Java程序设计】课程教学大纲04-20