javaEE课程设计

桂电编号:               

新校徽小图(新)1

《基于J2EE的开发技术》课程设计报告

题    目:   桂林市一零八医院导航网站              

系    别:  计算机科学与工程学院                

专    业:   信息管理与信息系统             

学生姓名:  

学    号:                      

指导教师:    汪华登                       

20##年12  月 30    日


目录

一.项目背景... 3

二.需求分析... 3

三.开发环境... 3

四.系统功能综述... 4

五.数据库设计... 5

六.系统设计思想... 6

七.所涉及技术... 6

八.详细设计. 6

九.在课程设计中遇到的问题与解决: 11

十.完善管理... 12

十一.实验总结... 12

十二.参考文献... 12


一.项目背景

随着网络的日益发展,网络的应用已经飞入寻常百姓家,人们生活水平的提高,人们的健康意识不断增强。于是出现了诸如好大夫在线,医院在线预约,在线远程治疗,远程咨询的各级网站。通过这种方式大大提高了医院,以及人们的办事效率,很大程度减少了病人的等待时间。事实证明,这种网络方式受到广大人们以及医院的欢迎。于是,桂林市一零八医院网站导航系统就应运而生了。

二.需求分析

   本网站主要面向如下三种访客:

1.      网络游客

该全体具有浏览网站各页面的新闻要点,查看网内各公告,这是权限最低的群体,这种群体通常是波动的,主要通过家人,朋友或亲戚介绍,或网络搜索引擎找到,因此,这类访客往往很少.注册后可称为医院的固定用户.

   2 .   固定注册用户

       该用户是经注册的网络游客而来,该群体除了具有网络游客的一切权限以外,按照注册的用户,密码验证登陆后,可进入自己的网上家园,在自己的家园里面具有查看自己的消息,预约”我的私人医生”,查询医院的相关医生的信息,在我的家园里面进行与自己相关的操作,比如,查看我的病历等等.

2.      系统管理员

这是系统最高权限的群体,这种群体往往由医院指定.因此这种群体主要对系统进行各种更新操作,如修改医院医生的上班信息,添加医生的新信息,以供前面两种用户查询,发布各种站内公告,编辑站内新闻等等.

      至此三种主要客户群体的来源以及比例分析已经完成,系统的所有功能与模块均以此为中心展开.

三.开发环境

1.开发工具

(1).Netbeans 7.01

(2).Sql Server 2005

2.网站运行环境

(1)JDK 1.6

(2)Tomcat 6.02

(3)谷歌浏览器

(4)IE9浏览器或以上

四.系统功能综述

 一个综合性的医院往往具有若干个科室,因此首先映入客户眼帘的是医院的首页,在医院的首页提供各科室链接,用户可以根据自己的需要选择不同的链接.医院首页提供了院内肝脏科,神经内科,眼科,肿瘤科,脑科等院内科室链接.

考虑到第二第三群体的操作,还在首页提供了注册与登录入口,用户登录成功后获得相应的权限.

当然医院首页还提供医院简介,就医指南等方便用户操作.这是top模块的显示.

其次主体内容,分为四大模块:

1.      站内动态

该模块主要显示系统管理员发布的各种站内公告,比如放假通知,会议通知等相关内容.

2.      健康沙龙

该模块主要向所有的用户提供各种健康常识,饮食卫生等健康资讯.

3.      常见问答

这是针对一些大家各种常见的问题进行公开回答,比如,就关于新农村医疗合作的办理手续以及注意事项.

4.      滚动报道

该模块主要通过滚动的方式向访客提供各种最新的国内,行业,世界资讯,用户进行点击链接以后,即可进行浏览.

综上所述首页页面如图所示

      五.数据库设计

系统中涉及到的主要信息有病友的注册信息,管理员的登录信息,以及管理员发布的医生信息,因此数据库需要设计三个表,分别用来存储病友的注册信息,管理员的登录控制信息,管理员发布的医生信息.

下面就以医生信息表DoctorImfomation 为例来讲述数据库的设计,其他的与此相似.

医生信息表DoctorImfomation

六.系统设计思想

(1)从界面来看,减少用户操作

(2)从系来看,尽最大努力分离java代码以及jsp代码,增强系统日后的可维护性以及可读性.

七.所涉及技术

(1)JavaBean 用于封装各种java源代码.

(2)CSS用于布局网站页面.

八.详细设计.

(1)页面布局.

采用当今最流行的CSS来实现网站分模块布局,设定网站的风格.这里不做详细介绍.

(2)登录操作

对于病友的登录.设计pattient.java javabean 封装了pattient的username,password等属性.

设计了public boolean login()方法.通过loginin.jsp获取用户的用户名以及密码,通过logincheck.jsp将login.jsp的参数赋值给JavaBean. public boolean login()初始化loginflag标致为false,通过查询数据库中所有与与用户名相同的密码,遍历所有查询结果,如果存在用户密码与用户提交的密码相匹配,则置loginflag为true.并将返回loginflag标致. Logincheck通过调用上述的javabean的login()方法获取登录信息,并进行相关操作.管理员登录与此类似.

登录界面:

(3)查询操作

下面以医生信息的查询为例讲述,查询操作.

以doctoaSearch.jsp接受表单提交的参数,通过

String sql = "select * from DoctorImfomation where Name= '" + doctorname + "'";

rs = stmt.executeQuery(sql);来获取数据库的所有记录到结果集.并将查询结果以表单的形式显示输出到页面.当然,为了方便用户浏览,阅读,我们做了当鼠标移动到某一行记录时,改行的颜色变为红色,鼠标移开时恢复白色.这一点又体现了我们的”减少用户操作,方便用户操作”的设计理念.效果如图所示:

显示完查询结果之后,我们又提供了【打印】与【关闭窗口】选项卡,这在某种程度上又方便了用户的操作.

当然,在每一个页面,我们都提供了网站导航选项以方便用户在不同页面之间的跳转.因为这模块在任何页面均用到,因此,我们专门设计了copyright.html文件,该文件包括了页面跳转选项,网页版权等网站基本信息,然后通过<jsp:include page >将其导入到网页上来.

单独的copyright.html文件效果如下:

(4)管理员权限:

①医生员工信息的查询:

通过键入关键字进行查询我院各专家医生的相关信息,包括职工号,姓名,性别,简介,联系方式,目前正在开发模糊查询.

②医生员工信息的添加

通过完善输入,完善我院员工的基本信息,也就是包括①中所提到的查询信息,提交给数据库后,方便病友查询.

③医生信息的修改

完善或者修改医生的上述信息.目前正在开发如何在修改信息的基础上显示一些原有的信息以方便管理员执行操作.

目前该页面如下:

④医生信息的删除

删除已经过期的信息.

该功能感想:

是不是可以将上述的各功能均集合到一个页面里面,让得管理员在一个页面即可完成上述功能,这也可以减少用户的页面跳转.

(5)普通用户的权限

①一个网站通常还需要访客,为了增加访问量,稳住原有的顾客,我们还将为每一个人量身设定一个属于自己的网络健康家园.

②在这个家园里面,用户可以开博客,写心情,发日志,随时随地分享我的快乐.查看我的通知,预约我的私人医生.

③当然,目前正考虑开发一些聊天娱乐功能.

目前用户登录成功后如图所示(这里以张宁为账号登录)

(6)其他相关设计

此外,一个网站还应具有一些基本的错误处理模块,当用户操作出错时,显示错误的提示,实现自动跳转.这里以一个错误的用户账号登录出错为例讲述.

当验证用户密码错误时,给出以下提示页面,并实现自动跳转:

至此,基本每个模块都以一个经典界面为例讲述了每个模块设计的思想与步骤,下面详述在本次项目中所遇到的问题以及解决方法.

九.在课程设计中遇到的问题与解决:

(1)乱码问题:

<jsp:include page>中的乱码问题,上面我们讲到,我们通过<jsp:include page>的方式将在每一个页面导入网站的版权元素.试验中,我们单独运行copyright.html文件显示是没有乱码问题,但是将文件导入到其他页面就出现了乱码问题,经多次尝试以后,发现乱码问题根源乃网页编码不一致产生的,经多次修改后,将源文件copyright.html编码改为gb2312即可.

在进行密码验证登陆时,多次发生正确密码不能登陆的情况,经设定断点测试,发现在获取用户上一表单参数的时候出现了乱码问题,因此当然不能以数据库获取的数据进行匹配.造成登陆失误.修改方法设定获取参数编码问题即可.

(2)JavaBean 属性设置不合理

在设计Javabean administer时,我设计了两个private 属性,Username 和Password。在这里不经意间犯了一个小错误,javabean的属性是不能开头大写的,因此这给调试带来了很大的麻烦.调试,将上述属性设置为小写即可.

(3)数据库连接字段定长产生空格问题

在数据库设计时,我定义了password nchar(10)类型,以及username nchar(10)类型,在获取数据库数据进行匹配时发现正确的用户名以及密码无法正确登录,最终检查出由于数据库中字段定义了固定长度10,因此在填入的字段不够10时,则自动以空格不全.因此在数据库操作中获取的”用户名”除了包括真正的用户名外,还包括了一系列空格,当然就不能进行匹配登录了.改正方法,在获取数据库数据后进行trim()去空格处理即可.

(4)删除,查询中隐藏表单域设计

在查询中,我们是以username为字段进行查询的,但是在设计javabean中,我们却设计了多个属性,因此在采用<jsp:useBean id="user" class="jsp.com.LoginBean" scope="page"> <jsp:setProperty name="user" property="*"/>时不能正确设置javabean的属性,因此我们可以采用隐藏表单域的方法给其他没用到的属性设定一些看不见的属性,这并不影响查询结果.

(5)文件命名杂乱,繁多问题

开始,文件命名可以随便起个名字,但是在项目规模不断扩大的,以及网页不断的跳转,最终发现,文件重命名很麻烦.改正方法,养成命名的好习惯,命名常常顾名思义,让人看到名字,就可以联想到它的实际功能.

以上就是我在实验中遇到的部分经典错误以及解决方法.

十.完善管理

将管理员的各种操作聚集到同一个页面,减少用户的页面跳转,减少用户操作.首

十一.实验总结

①要善于利用编译器的错误提示.

②要养成编程的号习惯.

③不要急于编程,要实现项目的整体规划,布局.

④要有良好的注释习惯,以便于以后维护.

十二.参考文献

[1] 陈丹丹.学通Java Web的二十四堂课.北京.清华大学出版社,20##年6月

[2]郝玉龙.Java EE编程艺术.北京.清华大学出版社,20##年01月

附录:

部分核心代码

public class LoginBean {

    private String username;

private String password;

//省略set和get方法

public static void main(String args[]) {

        LoginBean lb = new LoginBean();

        System.out.println(lb.checklogin());

    }

//用于测试的驱动程序

//登录验证函数

public boolean checklogin() {

        boolean loginflag = false;

        Connection conn = null;

        Statement stmt = null;

        ResultSet rs = null;

        try {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"

                    + " DatabaseName=MyTest", "root", "123");

            stmt = conn.createStatement();

            String sql = "select * from MyTest where UserName='" + username + "'";

            rs = stmt.executeQuery(sql);

            System.out.println(username);

            while (rs.next()) {

                if (password.equals(rs.getString("Password").trim())) {

                    loginflag = true;

                }

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (conn != null) {

                try {

                    conn.close();

                } catch (SQLException s) {

                    s.printStackTrace();

                }

            }

        }

        return loginflag;//返回登录标致

    }

Patient JavaBen的添加功能

  public boolean add() {

        boolean addflag = false;

        Connection conn = null;

        Statement stmt = null;

        ResultSet rs = null;

        try {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"

                    + " DatabaseName=MyHospital", "root", "123");

            stmt = conn.createStatement();

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

            java.sql.PreparedStatement psmt = conn.prepareStatement(sql);

            psmt.setString(1, this.name);

            psmt.setString(2, this.no);

            psmt.setString(3, this.major);

            psmt.setString(4, this.introduction);

            psmt.setString(5, this.workTime);

            psmt.setString(6, this.telephone);

            int rowCount = psmt.executeUpdate();

            if (rowCount > 0) {

                addflag = true;

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            if (conn != null) {

                try {

                    conn.close();

                } catch (SQLException s) {

                    s.printStackTrace();

                }

            }

        }

        return addflag;

    }

Patient JavaBen的删除功能

try {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"

                    + " DatabaseName=MyHospital", "root", "123");

            stmt = conn.createStatement();

            String sql = "delete from DoctorImfomation where Name='" + name + "'";

            java.sql.PreparedStatement psmt = conn.prepareStatement(sql);

            //psmt.setString(1, this.Name);

            int rowCount = psmt.executeUpdate();

            if (rowCount > 0) {

                deleteflag = true;

            }

Patient JavaBen的修改功能

try {

            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

            conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;"

                    + " DatabaseName=MyHospital", "root", "123");

            stmt = conn.createStatement();

            String sql = "update DoctorImfomation set No=?,Major=?,Introduction=?,WorkTime=?,Telephone=? where Name=?";

            //+where Name='" + Name + "'";

            java.sql.PreparedStatement psmt = conn.prepareStatement(sql);

            //psmt.setString(1, this.Name);

            psmt.setString(1, this.no);

            psmt.setString(2, this.major);

            psmt.setString(3, this.introduction);

            psmt.setString(4, this.workTime);

            psmt.setString(5, this.telephone);

            psmt.setString(6, this.name);

            int rowCount = psmt.executeUpdate();

            if (rowCount > 0) {

                alterflag = true;

            }

相关推荐