《高级Java程序设计》大作业(单号版)

北京信息科技大学2021~2022 学年第2学期

高级Java程序设计计时大作业

时间:2022年5月21日星期六 18:30~21:00

注意:试卷为学号尾号为1,3,5,7,9的学生使用的试卷

班级:       学号:         姓名(电子签名):        

大作业注意事项:               

  1. 要求学生在上述指定时间内,按要求独立完成大作业;
  2. 禁止使用任何网络聊天工具;禁止相互交流讨论,禁止传递任何资料与信息;
  3. 在规定的时间内上传大作业文档到课堂派;
  4. 大作业雷同者,大作业成绩按零分处理。

按下列需求,设计与实现一个网络版的银行管理系统的部分模块。

一、数据库设计(15分)

  1. (2分)创建银行管理数据库,银行管理数据库以Bank+你的姓名的汉语拼音缩写命名(例如:张三的数据库名为BankZS)
  2. (8分)在银行管理数据库中创建账户数据表,账户数据表以account+你的学号命名,账户数据表中包含账号(accNo,varchar(10),Primary key),账户名(accName,varchar(30)),余额( balance , decimal(7,2) ),开户日期(dateCreated,date)。
  3. (5分)在账户数据表中添加5条记录。

其中一条记录的账号是你的学号,账户名为你的姓名,余额要大于3000

其他4条记录中2条大于5000,2条小于5000

【在此粘贴证明您完成上述任务的截图】

  • 规划项目结构(5分),
  1. 创建工程,工程以你的姓名的全拼音命名(例如,张三的项目名称zhangsan)
  2. 在项目中创建5个包

server.idao(数据访问接口包)

server.dao(数据访问模型包)

server.model(数据模型包)

server.util(工具包)

client.view(视图包)

【在此粘贴证明您完成上述任务的截图】

  • 创建服务器端程序(60分)
  1. (10分)在server.model包中,创建一个封装了账户信息并实现了序列化接口的类Account ,Account类中应包含accountNo,accountName,balance,dateCreated属性,set/get方法,toString()方法。

【在此粘贴源程序(注意:源程序不能是截图)】

  1. (10分)在server.util包中建立一个SqlHelper类封装对数据库的连接操作和关闭操作。并设计一个测试类TestSqlHelper,测试SqlHelper的使用。

【在此粘贴源程序(注意:源程序不能是截图)】

【在此粘贴测试SqlHelper结果的截图(证明数据库连接成功)】

  1. (6分)在server.idao包中,定义一个账户的数据访问接口IAccountDao,

(a)学号尾号为1,3,5,7,9的学生IAccountDao接口包含的抽象方法如下:

  1. boolean addAccount(Account account);向账户表中添加一个新账户。
  2. List<Account> findAccounts(double balance1,double balance2);查询余额在balance1和balance2之间的账户信息。
  3. List<Account> findAccounts(String accountName);查询账户名中包含某一指定字符串的账户信息。
  4. boolean deposit(String accountNo,double money);  往指定账户中存款,账户余额增加money。如果存款成功返回true。

【在此粘贴源程序(注意:源程序不能是截图)】

  1. (14分)在server.dao包中,定义一个实现了接口IAccountDao的数据访问类AccountDao,并编写测试类。按下列要求具体实现接口IAccountDao提供的功能,并用下列给出的测试类测试。

(a)学号尾号为1,3,5,7,9的学生具体实现:

  1. boolean addAccount(Account account);
  2. List<Account> findAccounts(String accountName);
  3. List<Account> findAccounts(double balance1,double balance2);
  4. boolean deposit(String accountNo,double money);

测试程序TestAccountDao.java

package server.dao;
import java.sql.Date;
import java.util.List;
import server.model.Account;
public class TestAccountDao1 {
    public static  void main(String[] ages){
        List<Account> list=null;
        AccountDao accountdao=new AccountDao();
        System.out.println("\n查询多个账户信息");
        list=accountdao.findAccounts("");
         for(Account s:list)
             System.out.println(s);
         System.out.println();  
         System.out.println("\n给账号是自己学号的账户存款300");
        String accNo="你的学号";//注意:在这里把你真实的学号赋值给变量accNo
        System.out.println("存款成功:"+accountdao.deposit(accNo, 300));
        System.out.println();
        System.out.println("\n查询多个账户信息");
         list=accountdao.findAccounts("");
         for(Account s:list)
             System.out.println(s);
         System.out.println();   
         System.out.println("\n增加一个账户信息");
         boolean bln=false;        
         Account account=new Account();
         account.setAccountNo("2005136106");
         account.setAccountName("王老师");
         account.setBalance(3000);
         Date date=new Date(2022-1900,4,21);
         account.setDateCreated(date);
         System.out.println("添加账户成功:"+accountdao.addAccount(account));
         System.out.println();
         System.out.println("\n测试查找账户余额在3000千-5000千的账户 ");
         list=accountdao.findAccounts(3000, 5000);
         for(Account s:list)
             System.out.println(s);
         System.out.println();           
    }  
}

【在此粘贴源程序AccountDao.java(注意:源程序不能是截图)】

【在此粘贴测试结果的截图】

  1. (20分)在server.view包中,创建多线程的服务器(Server)端主程序。

在这个程序中,服务器在某个端口上倾听,等待与客户端连接,同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。

(a)学号尾号为1、3、5的学生设计:当服务器收到客户端发来的一个账户信息后,调用AccountDao对象的addAccount(Account account)方法,向账户表中添加一个账户信息,并把添加是否成功的消息返回给客户端,如果客户端发来的账户号是“exit”,则关闭和该客户端连接。

【在此粘贴源程序(注意:源程序不能是截图)】

【在此粘贴服务器端运行结果的截图(注意:客户端完成后,再把服务器端的运行结果的截图在此粘贴)】

(c)学号尾号为7和9的学生设计:当服务器收到客户端发来的一个账户名中包含的字符串时(例如,李),调用AccountDao对象的findAccounts(String accountName)方法,在账户表中查询所有账户名中包含给定字符串的账户信息,并把查询到的账户信息返回给客户端;如果没有查询到满足条件的账户,就向客户端返回“没有查询到满足条件的账户”,如果客户端发来的账户名是“exit”,则关闭和该客户端连接。

【在此粘贴源程序(注意:源程序不能是截图)】

【在此粘贴服务器端运行结果的截图(注意:客户端程序完成后,再把服务器端的运行结果的截图在此粘贴)】

三、创建客户端程序(20分)

  1. 在client.view包中创建客户(Client)端主程序。

  1. 学号尾号为1、3、5的学生设计:在客户端输入要添加的账户信息并创建账户的对象,然后利用套接字向服务器发送该账户对象,接受服务器返回的添加是否成功的消息,并输出添加是否成功的消息。

【在此粘贴源程序(注意:源程序不能是截图)】

【在此粘贴客户端运行结果的截图(注意:服务器端程序完成后,再把客户端的运行结果的截图在此粘贴)截图要有两种结果,即添加成功和添加不成功】

  1. 学号尾号为7,9的学生设计:客户端输入要查询的账户名所包含的字符串(例如,李),然后利用套接字向服务器发送该字符串,接受服务器返回的查询结果,并输出查询结果(如果查询到了满足条件的账户,就把查询到的账户信息全部输出,否则输出“没有查询到满足条件的账户”)。

【在此粘贴源程序(注意:源程序不能是截图)】

【在此粘贴客户端运行结果的截图(注意:服务器端程序完成后,再把客户端的运行结果的截图在此粘贴),截图要有两种查询结果,即查询到满足条件记录的结果和不满足条件的结果】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ThinkStu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值