码云地址:https://gitee.com/girlchujiu/practical_training_two
队名:超越队,团队宣言:超越梦想,勇攀高峰!
组员:徐小东(9),李雪(8),李鑫(14),张智贤(12:组长)(*^▽^*)
拟作的团队项目描述:为解决对文章中重要词汇出现的次数进行统计与分析的问题,进行文本挖掘。
队员风采:
徐小东:负责任务(Java连接数据库),擅长java语言,项目主力军,协调团队内部的工作及开发团队之间的工作。
李雪:负责任务(页面跳转方面),擅长java语言,项目主力军,数据库offer,收集所需的需求,建库,调试,数据入库等工作。
李鑫:负责任务(页面注册与登录方面),擅长java语言,项目主力军,充分授权和信任,负责后台的代码。
张智贤:这次主要负责编写博客园,编写部分代码,柱状图(没办法,队友太强悍,个个都是大腿,我只能打杂度日,痛并快乐着),擅长java语言,推动信息共享与沟通。各司其职,对项目共同负责。
团队贡献分值:(*^▽^*)我们都很优秀,可要怎么拌?
团队特色:由于我们队伍全都是女生,细心,认真,负责成为我们的标签,但我们努力依旧。大家优点不同,想法不同,但是值得庆幸的是,我们是当代大学生,我们有数不完的idea,大家集思广益,打造最完美的项目,收获颇丰。
团队风采:(我们有图有真相)
选题:
词频统计
老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量怎么可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。
希望实现以下效果:
- 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符。
- 2.统计英文单词在本文件的出现次数
- 3.将统计结果排序
- 4.显示排序结果
在实训一的基础上,将词频统计开发成一个个图形界面,在局域网内,全班同学可以一起使用的小程序。提供用户注册登录功能,与数据库进行连接,可以查看所有用户以往提交的词频统计记录,并能将本机希望进行词频统计的文件提交至服务器,服务器提供一个柱状图的词频统计结果,并给出进行本次词频统计所使用的时间和用户所提交的文件的单词总数。
设计思路:
我这里用的开发平台是Eclipse,这里我把操作简单说一下:
1,首先建立java项目,在这个项目在建立一个词频统计的文件,并且根据第一次实训内容,将代码“词频统计”写入;
2,设计注册,登录页面,功能选择页面,使各页面之间实现跳转并与数据库相连接,而另一端,数据库与“词频统计”相连;
3,确保数据库正常使用,并且可以将用户注册信息和登录信息以及词频统计结果和自动存储每次查询的语句录入数据库;
4,修建工作,使登录页面和词频统计页面,保持整洁,美观;
准备工作完成后,就可以去操作eclipse了;
代码片段:
-- 用户注册与登录
package p4;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class Login extends JFrame implements ActionListener {
private JPanel pan = new JPanel();
private JLabel namelab = new JLabel("用户名");
private JLabel passlab = new JLabel("密 码");
private JTextField nametext = new JTextField();
private JPasswordField passtext = new JPasswordField();
public JButton denglu = new JButton("登录");
public JButton zhuce = new JButton("注册");
public Login(){
Font font = new Font("宋体",Font.BOLD,12);
super.setTitle("欢迎登录本系统");
pan.setLayout(null);
namelab.setBounds(20,20,60,30);
nametext.setBounds(90,20,140,30);
passlab.setBounds(20,60,60,30);
passtext.setBounds(90,60,140,30);
denglu.setBounds(30,120,90,20);
zhuce.setBounds(140,120,90,20);
pan.add(namelab);
pan.add(nametext);
pan.add(passlab);
pan.add(passtext);
pan.add(denglu);
pan.add(zhuce);
passtext.setFont(font);
zhuce.setFont(font);
denglu.addActionListener(this);
zhuce.addActionListener(this);
super.add(pan);
super.setSize(300,250);
super.setVisible(true);
}
public static void main(String []args){
new Login();
}
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource()==denglu){
denglu();
}else if (arg0.getSource()==zhuce){
zhuce();
}
}
//登录按钮的事件处理函数
public void denglu(){
jdbc d = new jdbc();
String username = nametext.getText();
String password = passtext.getText();
if(d.compare(username, password)){
JOptionPane aJOptionPane = null;
aJOptionPane.showMessageDialog(null,"登录成功!");
super.setVisible(false);
}
}
//注册按钮触发后的事件处理函数
public void zhuce(){
jdbc d = new jdbc();
String username = nametext.getText();
String password = passtext.getText();
d.insert(username,password);
}
//修改密码按钮触发后的事件处理函数
public void updatepass(){
pan.setEnabled(false);
final JFrame frame1 = new JFrame("密码修改");
frame1.setSize(250, 200);
JPanel updatepass = new JPanel();
JLabel namelab1 = new JLabel("用户名");
JLabel passlab1 = new JLabel("旧密码");
JLabel newpasslab = new JLabel("新密码");
final JTextField nametext1 = new JTextField(""+nametext.getText());
final JPasswordField passtext1 = new JPasswordField();
final JPasswordField newpasstext = new JPasswordField();
JButton ok = new JButton("修改");
JButton resert = new JButton("重置");
updatepass.setLayout(null);
namelab1.setBounds(5,5,70,20);
nametext1.setBounds(80,5,120,20);
passlab1.setBounds(5,30,70,20);
passtext1.setBounds(80,30,120,20);
newpasslab.setBounds(5,60,70,20);
newpasstext.setBounds(80,60,120,20);
ok.setBounds(10,110,60,20);
resert.setBounds(90,110,60,20);
updatepass.add(namelab1);
updatepass.add(nametext1);
updatepass.add(passlab1);
updatepass.add(passtext1);
updatepass.add(newpasslab);
updatepass.add(newpasstext);
updatepass.add(ok);
updatepass.add(resert);
frame1.add(updatepass);
frame1.setVisible(true);
ok.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
jdbc d = new jdbc();
String username = nametext1.getText();
String password1 = passtext1.getText();
String newpassword = newpasstext.getText();
}
});
//重置文本框 里的内容
resert.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
nametext1.setText("");
passtext1.setText("");
newpasstext.setText("");
}
});
}
//删除用户按钮触发后的事件处理函数
public void deleteuser(){
String username = nametext.getText();
String password = passtext.getText();
jdbc s = new jdbc();
}
}
--用户登录信息插入数据库
package p4;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class jdbc {
Connection con = null;
Statement statement = null;
ResultSet res = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/user";
String name = "root";
String passwd = "111111";
public jdbc(){
try{
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url,name,passwd);
statement = con.createStatement();
}catch(ClassNotFoundException e){
System.out.println("对不起,找不到这个Driver");
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
//用户注册功能的实现,添加数据
public void insert(String username,String password){
String sql = "insert into user(username,password) values(\""+username+"\",\""+password+"\")";
try{
int a = statement.executeUpdate(sql);
con.close();
statement.close();
if(a==1){
JOptionPane.showMessageDialog(null,"注册成功!");
}
}catch(SQLException e){
JOptionPane.showMessageDialog(null, "对不起该用户名已经有了!");
e.printStackTrace();
}
}
//对比用户名和密码是不匹配
public boolean compare(String username,String password){
boolean m = false;
String sql = "select password from user where username=\""+username+"\"";
try{
res = statement.executeQuery(sql);
if(res.next()){
String pa = res.getString(1);
System.out.println(pa+" " +password);
if(pa.equals(password)){
m = true;
}else {
JOptionPane.showMessageDialog(null, "密码错误!");
}
}else {
JOptionPane.showMessageDialog(null, "用户名不存在!");
}
res.close();
con.close();
statement.close();
}catch(SQLException e){
e.printStackTrace();
}
return m;
}
}
--数据库插入数据
package org.user.util;
import java.sql.*;
/**
* 1:向数据库中添加数据
* @author biexiansheng
*
*/
public class Test01 {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动
System.out.println("加载数据库驱动成功");
String url="jdbc:mysql://localhost:3306/test";//声明数据库test的url
String user="root";//数据库的用户名
String password="111111";//数据库的密码
//建立数据库连接,获得连接对象conn(抛出异常即可)
Connection conn=DriverManager.getConnection(url, user, password);
System.out.println("连接数据库成功");
//生成一条mysql语句
String sql="insert into users(username,password,age,sex) values('l','111111',21,0)";
Statement stmt=conn.createStatement();//创建一个Statement对象
stmt.executeUpdate(sql);//执行sql语句
System.out.println("插入到数据库成功");
conn.close();
System.out.println("关闭数据库成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//
catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--图形界面
MyBorderLayout
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class MyBorderLayout extends JFrame implements ActionListener{
public static void main(String[] args) {
MyBorderLayout mb = new MyBorderLayout();
}
private JButton jb;
public MyBorderLayout()
{
JFrame frm = new JFrame("Fighting");
// 创建布局管理器实例border,水平间隔为5,垂直间隔为7,
BorderLayout border = new BorderLayout(8, 10);
// 设置frm的页面布局为border
frm.setLayout(border);
frm.setSize(280, 200);
JButton b1 = new JButton("词频统计");
JButton b2 = new JButton("功能一");
JButton b3 = new JButton("功能二");
JButton b4 = new JButton("功能三");
JButton b5 = new JButton("Welcome");
// 将按钮添加到frm的上、下、左、右、中
frm.add(b1, BorderLayout.NORTH);
frm.add(b5, BorderLayout.SOUTH);
frm.add(b2, BorderLayout.WEST);
frm.add(b4, BorderLayout.EAST);
frm.add(b3, BorderLayout.CENTER);
//b2.setActionCommand();
//this.add(frm);
b2.addActionListener(this);//加入事件监听
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setVisible(true);
//this.setSize(300, 200);
//this.setLocation(300, 400);
//jb=new JButton("跳转");
//this.add(b2);
//jb.addActionListener(this);//加入事件监听
//this.setVisible(true);
}
//public static void main(String[] args) {
// // TODO Auto-generated method stub
// Frm frame=new Frm();
//
//}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
this.dispose();
new Frm();
}
}
Frm
import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class Frm extends JFrame implements ActionListener{
/**
* @param args
*/
private JButton jb;
public Frm()
{
this.setSize(300, 200);
this.setLocation(300, 400);
jb=new JButton("按钮");
this.add(jb);
jb.addActionListener(this);//鍔犲叆浜嬩欢鐩戝惉
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Frm frame=new Frm();
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==jb)
{
this.dispose();
new JTextArea();
}
}
}
class JTextArea extends JFrame{
/**
* @param args
*/
public JTextArea()
{
this.setSize(300, 200);
this.setLocation(300, 400);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
JTextArea frame=new JTextArea();
}
}
Spider
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class Spider extends JFrame
{
private static final long serialVersionUID = 1L;
public Spider()
{
setTitle("text");
setSize(500, 190);
setResizable(false);
setLayout(new BorderLayout());
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private Spider addComponents()
{
final JTextArea area = new JTextArea();
JScrollPane pane = new JScrollPane(area);
add(pane, BorderLayout.CENTER);
JPanel bottom = new JPanel(new FlowLayout(FlowLayout.LEFT));
JButton btn1 = new JButton("auto");
btn1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
area.setLineWrap(true);
area.setWrapStyleWord(true);
}
});
JButton btn2 = new JButton("unauto");
btn2.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
area.setWrapStyleWord(false);
area.setLineWrap(false);
}
});
bottom.add(btn1);
bottom.add(btn2);
add(bottom, BorderLayout.SOUTH);
return this;
}
public static void main(String[] args)
{
new Spider().addComponents().setVisible(true);
}
}
结果显示:
(结果视图,顺序可能有点瑕疵,但不影响结果)
总结感悟:这次实训,我们深深地认识到,小组搭配的重要性,大家一起合作,很好的提高了整体速度,在思考,纠错等问题上,我们也充分发挥人多的优势,大家在遇到问题上的思考方式不同,解决方案也不同,这就很好地展示了我们思路多,办法多,在遇到艰难险阻的时候,解决问题的时间是之前几倍不止,并且,这远远不止,我们在敲代码的时候还经常互相督促,大大减少敲错,编错的问题。重要的是,大家优点不同,分工明确,减少不必要的麻烦。在这个过程中,我们每个人都学到了相当多的知识和经验,收获颇丰。