阶段二,综合项目

Posted bxblql

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阶段二,综合项目相关的知识,希望对你有一定的参考价值。

 

 

 

 

 

 

 

 

 

Java课程设计

(综合项目文档)

 

Yoga会员管理系统

 

 

 

 

 

 

 

二〇二〇年七月

 

   

1 绪论 1

1.1 项目概述 1

1.2 项目意义 1

2 开发工具和相关技术简介 1

2.1 Eclipse简介 2

2.2 Java语言介绍 2

2.3 mysql简介 3

2.4 JDBC技术简介 3

2.5 GUI简介 3

2.6 IDEA简介 3

3 系统需求分析 4

3.1 系统可行性分析 4

3.2 系统需求分析 4

3.3 组内成员分工 5

3.4 进度安排 5

4 系统设计 6

4.1 系统设计 6

4.2 数据库设计 6

系统实现 8

5.1 用户登录界面实现 8

5.2 管理员登录界面实现 20

系统测试 34

结论和心得 36

 

 

1 绪论

1.1 项目概述

普通用户注册后成为会员,登录后可以设置和修改个人信息、查看学时、查看课程安排,课程的价目表,老师的信息表以及签到。
管理员登录系统后可以产看到所有人的信息,可以修改个人信息(学时和消费金额)、课程安排、老师信息、价目表以及查看个人信息(学时及课程)。还可以添加管理员和老师。

1.2 项目意义

解决管理会员时每次需要用纸笔记录出勤记录的问题,更换课程表价目表时也无需再次打印整张实体表。
2 开发工具和相关技术简介

本项目是yoga会员管理系统。开发环境:Eclipse,MySQL,IDEA开发语言:Java语言;开发技术:JDBCGUI。本章将对开发工具和相关技术进行简单介绍。

2.1 Eclipse简介

Eclipse是一个开放可扩展的集成开发环境(IDE)。它不仅可以用于Java的开发,通过开发插件,它可以构建其他的开发工具。Eclipse是开放源代码的项目,并可以免费下载。

  1. 非常适合java语言,开发、编写、查错、编译、帮助等各方面非常方便
  2. 有中文版,上手较快
  3. 更新速度快
  4. 插件功能强大,免费
  5. 开源、免费

2.2 Java语言介绍

Java是由Sun公司1995年5月推出的面向对象的程序设计语言

Java继承C++语言面向对象技术的核心,又舍弃了C++语言中的指针、运算符重载以及多重继承的特性,同时引入了泛型编程类型安全的枚举等特性,使Java成为简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

Java优点

  1. Java为纯面向对象的语言。
  2. 平台无关性
  3. Java提供了很多内置的类库,通过这些类库,简化了开发人员的程序设计工作,同时缩短了项目的开发时间。
  4. 提供了对Web应用开发的支持,例如,Applet、Servlet和JSP可以用来开发Web应用程序;Socket、RMI可以用来开发分布式应用程序的类库。
  5. 具有较好的安全性和健壮性。
  6. 去除了C++语言中难以理解、容易混淆的特性,例如头文件、指针、结构、单元、运算符重载、虚拟基础类、多重继承等,使得程序更加严谨、简洁。

2.3 MySQL简介

MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司,结合了开放源码价值取向、方法和成功的商业模型。

体积小、速度快、总体拥有成本低、开放源代码、性能快捷、优化SQL语言、容易使用、多线程和可靠性、多用户支持、可移植性和开放源代码、遵守国际标准和国际化支持、为多种编程语言提供API

2.4 JDBC技术简介

JDBC是java database connectivity的缩写,是SUN公司提供的一套操作数据库的标准规范,其本质也就是一系列的接口。JDBC提供了一些操作数据库的API,开发者可以在java中使用这些API操作数据库,实现对表中数据的增删改查操作,JDBC相当于Java和数据库之间的一座桥梁。

 

2.5 GUI简介

GUI(Graphics User Interface),中文名称为图形用户界面,是指采用图形方式显示的计算机操作用户界面,是计算机与其使用者之间的对话接口,是计算机系统的重要组成部分。

 

2.6 IDEA简介

IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

优点:

1.更好的项目管理方式

2.更高的开发效率

3.历史记录功能

4.动态语法检测

5.丰富的导航模式
3 系统需求分析

3.1 系统可行性分析

1.技术可行性:需要技术:Java语言,GUI以及使用JDBC对进行数据库的增,改,查的操作。所需技术基本掌握,所以技术上可行。

2.经济可行性:使用软件(Eclipse,MySQL)免费, 经济上可行。

3.操作可行性:用户根据界面上显示内容使用键盘录入信息。  操作上可行。

3.2 系统需求分析

普通用户注册后成为会员,登录后可以设置和修改个人信息、查看学时、查看课程安排以及签到。管理员登录系统后可以修改个人信息(学时,是否签到以及课程)、课程安排以及查看个人信息(学时及课程)。

 

 技术图片

 

 

3-1 用户功能模块图

 技术图片

 

 

3-2 管理员功能模块图

3.3 组内成员分工

3-1 组内成员分工情况表

序号

姓名

组内角色

小组分工

备注

1

刘庆龙

项目经理

建立数据库,实现JDBC

 

2

纪凯文

编码

用户界面

 

3

田炳豪

编码

管理员界面

 

说明:组内角色:组长为项目经理;其他人分别为编码、测试、架构师等。

3.4 进度安排

进度安排如表3-2所示。

3-2 进度安排表

阶段

持续时间

阶段描述

输出

构思阶段

3h

需求分析

需求说明,功能模块图

设计阶段

4h

系统设计

设计说明-可以画流程图;数据库设计

实现阶段

10day

编写代码

项目工程源代码

4h

系统测试

进行黑盒测试(功能测试)-测试说明

运行阶段

10h

部署、运行

系统使用说明、运维报告-答辩

 

 


4 系统设计

4.1 系统设计

根据系统的实际功能需求分析,对系统功能部分进行了设计。

登录时如果密码或账户不对应设置了提示窗口,注册时id系统会随机给出,显示id的弹窗会一直存在直到用户手动关闭。用户登录后直接可以看到自己的信息,如果为刚刚注册用户。可以选择“保存/修改信息”按钮来进行信息的补充,课程选择时使用下拉框,让用户可以直接选择而不用再输入课程名称。剩余课时为0时仍可签到,后续选课的课时会剪去课时为0时签到的次数。管理员在修改会员信息时,输出所有注册的会员信息,根据输入的id进行修改课时和消费金额。

4.2 数据库设计

根据系统需求分析设计了7张表,分别为用户信息,用户账号密码表,管理员信息,老师信息表表,签到表,课程表,价目表。具体信息如表4-14-7所示。一下为参考,可以按照自己的需求修改

 

4-1  用户信息

序号

字段名

数据类型

约束

是否为空

说明

 

1

Id

varchar

主键

用户id

可设置

2

name

varchar

 

用户的姓名

2

age

int

 

用户的年龄

3

sex

cher

 

用户的性别

4

phone

bigint

 

用户的电话

5

card

varcher

 

用户所报课程

6

cost

int

 

消费金额

不可设置

7

times

int

 

用户学时(默认10)

 

4-2   管理员信息

序号

字段名

数据类型

约束

是否为空

说明

1

Id

varchar

主建

管理员id

2

cipher

varchar

 

管理员密码

 

4-3   课程表

 

序号

字段名

数据类型

约束

是否为空

说明

1

week

int

主键

星期天数

2

first

varchar

 

星期几的五节课程安排

3

second

varchar

 

4

third

varchar

 

5

fourth

varchar

 

6

fifth

varchar

 

 

4-4   价目表

序号

字段名

数据类型

约束

是否为空

说明

1

num

Int

主键

课程代码

2

Id

varchar

 

授课老师id

3

card

varchar

 

课程名称

4

course

varchar

 

时间(默认“一个疗程”)

5

times

int

 

学时(默认10)

6

price

int

 

价格

 

4-5  老师信息表

 

序号

字段名

数据类型

约束

是否为空

说明

1

Id

varchar

主建

老师员id

2

name

varchar

 

老师姓名

3

phone

bigint

 

老师电话

4

rank

varchar

 

老师级别

 

4-6  签到表

序号

字段名

数据类型

约束

是否为空

说明

1

qdid

varchar

主键

签到id

1

Id

varchar

 

签到会员id

2

name

varchar

 

签到人姓名

3

time

datetime

 

签到日期

 

 

4-7  密码表

序号

字段名

数据类型

约束

是否为空

说明

1

Id

int

主键

会员id

2

cipher

varchar

 

密码

 

系统实现

5.1 用户登录界面实现

用户通过输入账号密码来进行登录后台管理系统。

用户在输入ID和密码后,系统判断用户所输入的ID在数据库中是否存在,若存在则继续判断密码是否为该ID的正确密码,若密码正确则跳转到用户功能界面,否则会弹出错误提示框,提示用户密码或ID错误。

 技术图片

 

 

5-1  用户登录界面

 

public boolean customize(String id,String cipher) {

boolean sign=false;

try {

conn=DBUtil.getConnection();

String sql="select id,cipher from cipher where id = ? and cipher = ?";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

ps.setString(2,cipher);

rs=ps.executeQuery();

if(rs.next()) {

sign=true;

}

} catch (Exception e) {

e.printStackTrace();

}finally{

//释放资源

DBUtil.closee(conn, ps, rs);

}

return sign;

 

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == b2){

new Register();

dispose();

}else if (obj == b1) {

String id = tf1.getText();

gdid.setid(id);

String cipher = String.valueOf(pf1.getPassword());

if(i.customize(id, cipher)){

new SaveInformation();

dispose();

}else {

new Error();

//dispose();

}

}else if(obj == b3) {

new Administrators();

dispose();

}

}

 

 

public Error(){

GridLayout gridLayout = new GridLayout(0,1,1,1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(500, 400, 300, 150);

this.setTitle("Error");

p1 = new JPanel();

p2 = new JPanel();

this.add(p1);

this.add(p2);

l1 = new JLabel("账户或密码错误!请重新输入!");

p1.add(l1);

b1 = new JButton("返回");

b1.addActionListener(this);

p2.add(b1);

this.setVisible(true);

 

}

 

 

@Override

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == b1) {

dispose();

 

}

}

 

技术图片

 

 

 

 

5-2 用户注册界面

 

public String zc(String cipher) {

String where="cipher";

String id=ot.qtid(where);

mid.setzzid(id);

try {

conn=DBUtil.getConnection();

conn.setAutoCommit(false);

String sql ="insert into cipher(id,cipher) values (?,?)";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

ps.setString(2, cipher);

int count=ps.executeUpdate();

String sql1="insert into vip(id) values (?)";

ps=conn.prepareStatement(sql1);

ps.setString(1, id);

count+=ps.executeUpdate();

System.out.print(count==2 ? "注册成功"  :  "注册失败");

conn.commit();

} catch (Exception e) {

try {

conn.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

}finally {

DBUtil.closee(conn, ps, rs);

}

return id;

}

 

 

public Error2(){

GridLayout gridLayout = new GridLayout(0,1,1,1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(500, 400, 300, 150);

this.setTitle("Error");

p1 = new JPanel();

p2 = new JPanel();

this.add(p1);

this.add(p2);

l1 = new JLabel("两次密码不一样!请重新输入!");

p1.add(l1);

b1 = new JButton("返回");

b1.addActionListener(this);

p2.add(b1);

this.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == b1) {

dispose();

 

}

}

 

 

public GetId(String id){

GridLayout gridLayout = new GridLayout(0,1,1,1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(500, 400, 300, 150);

this.setTitle("尊敬的会员欢迎您");

p1 = new JPanel();

p2 = new JPanel();

this.add(p1);

this.add(p2);

l1 = new JLabel("您的ID:("+id+") 请务必记住");//gdid.getzzid()

p1.add(l1);

b1 = new JButton("返回");

b1.addActionListener(this);

p2.add(b1);

this.setVisible(true);

 

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == b1) {

dispose();

 

}

}

 

 技术图片

 

 

 

5-3 用户修改信息界面

 

public void inxx(String id,String name,int age,String sex,long phone) {

try {

conn=DBUtil.getConnection();

String sql="update vip set name = ?,age = ?,sex = ?,phone = ? where id = ?";

ps=conn.prepareStatement(sql);

ps.setString(1, name);

ps.setInt(2, age);

ps.setString(3, sex);

ps.setLong(4, phone);

ps.setString(5, id);

int count=ps.executeUpdate();

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

 

 

技术图片

 

  

5-4  用户课程选择界面

技术图片

 

  

5-5  用户查询信息界面

public class QueryClassHour extends JFrame implements ActionListener {

private JTextArea ta;

private JButton b1;

private JPanel p1,p2;

Outbiao ot=new Outbiao();

MadeId gdid=new MadeId();

String id=gdid.getid();

private String [] key =ot.outvip(id);

public QueryClassHour(){

 

GridLayout gridLayout = new GridLayout(0, 1, 1, 1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(600, 400, 400, 500);

this.setTitle("尊敬的会员欢迎您");

p1 = new JPanel();

p2 = new JPanel();

this.add(p1);

this.add(p2);

ta = new JTextArea("您当前课程为:"+key[0]+" 您剩余课时为:"+key[1]+" 消费金额:"+key[2]);

ta.setEditable(false);

b1 = new JButton("返回");

b1.addActionListener(this);

p1.add(ta);

p2.add(b1);

this.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == b1) {

new SaveInformation();

dispose();

}

}

}

public String[] outxx(String id) {

String[] xx=new String[4];

try {

conn=DBUtil.getConnection();

String sql="select name,sex,age,phone from vip where id = ?";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

rs=ps.executeQuery();

if(rs.next()) {

xx[0]=rs.getString("name");

xx[1]=rs.getString("sex");

xx[2]=rs.getString("age");

xx[3]=rs.getString("phone");

}

} catch (Exception e) {

e.printStackTrace();

}finally {

DBUtil.closee(conn, ps, rs);

}

return xx; 

 

技术图片

 

 

5-6  用户查询表格界面

 

三张表格输出代码基本一致,此处以价目表的代码为例。

public String[][] outjm() {

String[][] xx=new String [13][6];

try{

conn=DBUtil.getConnection();

String sql="select kcid,lsid,card,course,times,prices from jiamubiao";

ps=conn.prepareStatement(sql);

rs=ps.executeQuery();

for(int i=0;rs.next();i++) {

String c=rs.getString("kcid");

String id=rs.getString("lsid");

String cd=rs.getString("card");

String cr=rs.getString("course");

String t=rs.getString("times");

String p=rs.getString("prices");

xx[i][0]=c;

xx[i][1]=id;

xx[i][2]=cd;

xx[i][3]=cr;

xx[i][4]=t;

xx[i][5]=p;

}

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

return xx;

}

 

public class PriceList extends JFrame implements ActionListener {

Outbiao o=new Outbiao();

String[] ifm = new String[]{"课程ID","老师ID","课程","疗程","课时","价格"};

String[][] pri = o.outjm();

private JButton b1;

private JPanel p1,p2;

private JTable t1;

private JScrollPane sp;

public PriceList(){

GridLayout gridLayout = new GridLayout(0, 1, 1, 1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(600, 400, 550, 500);

this.setTitle("尊敬的会员欢迎您");

p1 = new JPanel();

p2 = new JPanel();

this.add(p1);

this.add(p2);

t1 = new JTable(pri,ifm);

sp = new JScrollPane(t1){

@Override

public Dimension getPreferredSize() {

return new Dimension(450, 200);

}

};

t1.setEnabled(false);

b1 = new JButton("返回");

b1.addActionListener(this);

p1.add(sp);

p2.add(b1);

this.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if (obj == b1) {

dispose();

}

}

}

 技术图片

5-7  用户签到成功提示界面

 

public class OutId {

Connection conn=null;

PreparedStatement ps=null;

ResultSet rs=null;

ZaXiang z=new ZaXiang();

public String sjid() {

String newid="null";

try {

conn=DBUtil.getConnection();

int sign=1;

String sql="select qdid from qiandao";

ps=conn.prepareStatement(sql);

rs=ps.executeQuery();

 

 

while(sign==1) {

int sign2=0;

newid=z.outid();

while(rs.next()) {

String i=rs.getString("qdid");

if(newid==i) {

sign2++;

}

if(sign2==0) {

sign=0;

}

}

}

System.out.println(newid);

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

return newid;

}

 

public class QianDao {

Connection conn=null;

PreparedStatement ps=null;

ResultSet rs=null;

ZaXiang z=new ZaXiang();

OutId qd=new OutId();

Change cg=new Change();

public void qd(String id) {

try {

conn=DBUtil.getConnection();

String qdid=qd.sjid();

String name=null ;

String time=z.time();

cg.cgtimes(id);

String sql1="select id,name from vip where id=?";

ps=conn.prepareStatement(sql1);

ps.setString(1, id);

rs=ps.executeQuery();

if(rs.next()) {

String nm=rs.getString("name");

System.out.print(nm);

name=nm;

String sql="insert into qiandao(qdid,id,name,time) values(?,?,?,?)";

ps=conn.prepareStatement(sql);

ps.setString(1, qdid);

ps.setString(2, id);

ps.setString(3, name);

ps.setString(4, time);

int count=ps.executeUpdate();

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

}

}

 

public void cgtimes(String id) {

try {

conn=DBUtil.getConnection();

int i = 10;

String sql="select id,times from vip where id = ?";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

rs=ps.executeQuery();

if(rs.next()) {

i=rs.getInt("times");

i-=1;

}

String sql1="update vip set times = ? where id = ?";

ps=conn.prepareStatement(sql1);

ps.setInt(1, i);

ps.setString(2, id);

int count = ps.executeUpdate();

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

}

5.2 管理员登录界面实现

 技术图片

 

 

5-8  管理员登录界面

public class Administrators extends JFrame implements ActionListener {

GLin in=new GLin();

private JTextField tf1;

private JPasswordField pf1;

private JLabel l1,l2;

private JButton b1;

private JPanel p1,p2,p3;

public Administrators(){

GridLayout gridLayout = new GridLayout(0,1,1,1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(400, 200, 400, 400);

this.setTitle("管理员登陆页");

p1 = new JPanel();

p2 = new JPanel();

p3 = new JPanel();

this.add(p1);

this.add(p2);

this.add(p3);

tf1 = new JTextField(10);

pf1 = new JPasswordField(10);

pf1.setEchoChar(‘*‘);

l1 = new JLabel("ID");

l2 = new JLabel("Password");

p1.add(l1);p1.add(tf1);

p2.add(l2);p2.add(pf1);

b1 = new JButton("登陆");

b1.addActionListener(this);

p3.add(b1);

this.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if(obj==b1) {

String id=tf1.getText();

String cipher=String.valueOf(pf1.getPassword());

if(in.denglu(id, cipher)) {

new GlyXiuGai();

dispose();

}else {

new Error();

}

 

}

}

}

 

public boolean denglu (String id,String cipher) {

boolean sign=false;

try {

conn=DBUtil.getConnection();

 

String sql="select id,cipher from administrator where id = ? and cipher = ?";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

ps.setString(2,cipher);

rs=ps.executeQuery();

if(rs.next()) {

sign=true;

}

} catch (Exception e) {

e.printStackTrace();

}finally{

DBUtil.closee(conn, ps, rs);

}

return sign;

}

 技术图片

 

 

 

5-9  管理员选择功能界面界面

 

public class GlyXiuGai extends JFrame implements ActionListener {

private JButton b1,b2,b3,b4,b5,b6,b7,b8;

private JPanel p1,p2,p3,p4,p5,p6,p7,p8;

public GlyXiuGai(){

GridLayout gridLayout = new GridLayout(0,1,1,1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(400, 200, 400, 400);

this.setTitle("管理员修改");

p1 = new JPanel();

p2 = new JPanel();

p3 = new JPanel();

p4 = new JPanel();

p5 = new JPanel();

p6 = new JPanel();

p7 = new JPanel();

p8 = new JPanel();

this.add(p1);

this.add(p2);

this.add(p3);

this.add(p4);

this.add(p5);

this.add(p6);

this.add(p7);

this.add(p8);

b1 = new JButton("修改课程表");

b2 = new JButton("修改价目表");

b3 = new JButton("修改老师信息");

b4 = new JButton("查看签到表");

b5 = new JButton("修改会员课程课时");

b7 = new JButton("添加管理员");

b8 = new JButton("添加老师");

b6 = new JButton("退出");

b1.addActionListener(this);

b2.addActionListener(this);

b3.addActionListener(this);

b4.addActionListener(this);

b5.addActionListener(this);

b6.addActionListener(this);

b7.addActionListener(this);

b8.addActionListener(this);

p1.add(b1);

p2.add(b2);

p3.add(b3);

p4.add(b4);

p5.add(b5);

p6.add(b7);

p7.add(b8);

p8.add(b6);

this.setVisible(true);

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

if(obj==b1){

new ModifyClassScheduleCard();

dispose();

}else if(obj==b2){

new ModifyPrice();

dispose();

}else if(obj==b3){

new MotifyTeacherInformation();

dispose();

}else if(obj==b4){

new Qiandao();

dispose();

}else if(obj==b5){

new ModifyLessonTime();

dispose();

}else if(obj==b7){

new Tianjia();

dispose();

}else if(obj==b8){

new Addteacher();

dispose();

}else if(obj==b6){

new Administrators();

dispose();

}

}

}

 技术图片

 

 

5-10  管理员修改课表,价目表,老师信息界面

 

三次修改代码基本一致,此处以修改课程表的代码为例。

public ModifyClassScheduleCard(){

GridLayout gridLayout = new GridLayout(0,1,1,1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(500, 300, 400, 400);

this.setTitle("修改课程表");

p1 = new JPanel();

p2 = new JPanel();

p3 = new JPanel();

p4 = new JPanel();

p5 = new JPanel();

p6 = new JPanel();

p7 = new JPanel();

this.add(p1);

this.add(p2);

this.add(p3);

this.add(p4);

this.add(p5);

this.add(p6);

this.add(p7);

tf2 = new JTextField(10);

tf3 = new JTextField(10);

tf4 = new JTextField(10);

tf5 = new JTextField(10);

tf6 = new JTextField(10);

l1 = new JLabel("星期数");

l2 = new JLabel("第一节课");

l3 = new JLabel("第二节课");

l4 = new JLabel("第三节课");

l5 = new JLabel("第四节课");

l6 = new JLabel("第五节课");

String [] week = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};

cb = new JComboBox(week);

p1.add(l1);p1.add(cb);

p2.add(l2);p2.add(tf2);

p3.add(l3);p3.add(tf3);

p4.add(l4);p4.add(tf4);

p5.add(l5);p5.add(tf5);

p6.add(l6);p6.add(tf6);

b1 = new JButton("确认修改");

b1.addActionListener(this);

p7.add(b1);

this.setVisible(true);

 

}

public void actionPerformed(ActionEvent e) {

int week=cb.getSelectedIndex();

String lesson1=tf2.getText();

String lesson2=tf3.getText();

String lesson3=tf4.getText();

String lesson4=tf5.getText();

String lesson5=tf6.getText();

Object obj = e.getSource();

if(obj==b1) {

int sign=glg.gaikb(week, lesson1, lesson2, lesson3, lesson4, lesson5);

if(sign==1) {

new Error2();

}

new GlyXiuGai();

dispose();

}

 技术图片

 

 

 

5-10  管理员添加管理员和老师界面

以添加管理员为例:

public void addgl(String id,String cipher) {

try {

conn=DBUtil.getConnection();

 

String sql="insert into administrator(id,cipher) values(?,?)";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

ps.setString(2, cipher);

int count=ps.executeUpdate();

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

}

 技术图片

 

 

5-10  管理员修改会员课时和消费界面

 

 

public class ModifyLessonTime extends JFrame implements ActionListener{

MadeId zzid=new MadeId();

GlCha glc=new GlCha();

GlChange glg=new GlChange();

String[] title = new String[] {"ID","姓名","性别","年龄","电话号码","所选课程","剩余课时","消费金额"};

String[][] course = glc.vip();

private JButton b1;

private JPanel p1,p2;

private JTable t1;

private JScrollPane sp;

private JLabel l1;

private JTextField tf1;

public ModifyLessonTime(){

GridLayout gridLayout = new GridLayout(0, 1, 1, 1);

this.setLayout(gridLayout);

this.setBackground(Color.WHITE);

this.setBounds(600, 400, 600, 500);

this.setTitle("课程时间");

p1 = new JPanel();

p2 = new JPanel();

this.add(p1);

this.add(p2);

tf1 = new JTextField(10);

l1 = new JLabel("会员ID");

t1 = new JTable(course,title);

sp = new JScrollPane(t1){

public Dimension getPreferredSize() {

return new Dimension(550, 200);

}

};

t1.setEnabled(false);

b1 = new JButton("确定");

b1.addActionListener(this);

 

p1.add(sp);

p2.add(l1);p2.add(tf1);p2.add(b1);

 

this.setVisible(true);

 

}

public void actionPerformed(ActionEvent e) {

Object obj = e.getSource();

String id=tf1.getText();

zzid.setzzid(id);

if (obj == b1) {

if(glg.foundid(id)) {

new ModifyLessonTime2();

dispose();

}

else {

new Error1();

}

}

}

}

 

public boolean foundid(String id) {

boolean sign=false;

try {

conn=DBUtil.getConnection();

String sql="select id from vip where id = ? ";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

rs=ps.executeQuery();

if(rs.next()) {

sign=true;

}

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

return sign;

}

 

public String outname(String id) {

String name=null;

try {

conn=DBUtil.getConnection();

String sql="select name from vip where id = ?";

ps=conn.prepareStatement(sql);

ps.setString(1, id);

rs=ps.executeQuery();

 

if(rs.next()) {

String nm=rs.getString("name");

name=nm;

}

} catch (Exception e) {

}finally {

DBUtil.closee(conn, ps, rs);

}

return name;

}

 

系统测试

6-1 用户功能模块测试

编号

测试功能

输入描述

预期结果

运行结果

01

保存/修改信息

1.登录管理系统

2.点开保存/修改信息界面

3.输入相应的信息

4.点击确定保存

信息保存或被修改

正常,与预期结果一致

02

查看课程表

5.1.登录管理系统

2.点开查看课程表

以表格形式输出课程表

正常,与预期结果一致

03

查看价目表

1.登录管理系统

2.点开查看价目表

以表格形式输出价目表

正常,与预期结果一致

04

查看老师信息

1.登录管理系统

2.点开查看老师信息

以表格形式输出老师信息

正常,与预期结果一致

05

查看个人课时和消费

1.登录管理系统

2.点开查看课时

输出剩余课时和消费金额

正常,与预期结果一致

06

签到

1.登录管理系统

2.点击签到

签到,课时减一,并提示

正常,与预期结果一致

 

 

 

 

6-2 管理员功能模块测试

编号

测试功能

输入描述

预期结果

运行结果

01

修改课程表信息

1.登录管理员系统界面

2.点开修改课程表信息界面

3.输入相应的信息

4.点击确定保存

信息被修改

正常,与预期结果一致

02

修改价目表

1.登录管理员系统界面

2.点开修改价目表信息界面

3.输入相应的信息

4.点击确定保存

信息被修改

正常,与预期结果一致

03

修改老师信息

1.登录管理员系统界面

2.点开修改老师信息界面

3.输入相应的信息

4.点击确定保存

信息被修改

正常,与预期结果一致

04

添加管理员或老师

1.登录管理员系统界面

2.点开添加管理员或点开添加老师

3.输入相应信息

信息添加至数据库

正常,与预期结果一致

05

修改会员课时和消费

1..登录管理员系统界面

2.点开修改会员课时和消费

3.输入要修改的会员的id

4.跳转至修改界面,输入相应信息

信息被修改

正常,与预期结果一致

 

 

结论和心得

刘庆龙:

心得:对一个项目要思考的更全面,在着手于项目时,要先尽可能考虑到将要出现的问题。对面向对象的编程思想也有了进一步的认识。

纪凯文:

心得:经过这次合作,我补充了更多关于Java的新知识也和搭档更加默契了,对Java的学习也更加有信心了。对于程序的设计更加熟练了,想做出一个完美的程序还是需要思考很多地方,既要方便用户,同时也要优化代码。

田炳豪:

心得:出错不能慌,耐心查找错误,学会运用身边资源找出自身不足,并学会新的知识加以运用,经过努力后解决问题的过程总能让人受益匪浅。

以上是关于阶段二,综合项目的主要内容,如果未能解决你的问题,请参考以下文章

腾讯仪征东升云计算数据中心项目进入综合验收阶段

网络工程师TCNE阶段综合实验二详解

高级软件工程2017第6次作业--团队项目:Alpha阶段综合报告

综合项目

2019 上半年信息系统项目管理师上午综合知识真题

Java基础学习笔记二十八 管家婆综合项目