北京信息科技大学2021~2022 学年第2学期
《高级Java程序设计》计时大作业
时间:2022年5月21日星期六 18:30~21:00
注意:试卷为学号尾号为1,3,5,7,9的学生使用的试卷
班级: 学号: 姓名(电子签名):
大作业注意事项:
- 要求学生在上述指定时间内,按要求独立完成大作业;
- 禁止使用任何网络聊天工具;禁止相互交流讨论,禁止传递任何资料与信息;
- 在规定的时间内上传大作业文档到课堂派;
- 大作业雷同者,大作业成绩按零分处理。
按下列需求,设计与实现一个网络版的银行管理系统的部分模块。
一、数据库设计(15分)
- (2分)创建银行管理数据库,银行管理数据库以Bank+你的姓名的汉语拼音缩写命名(例如:张三的数据库名为BankZS)
- (8分)在银行管理数据库中创建账户数据表,账户数据表以account+你的学号命名,账户数据表中包含账号(accNo,varchar(10),Primary key),账户名(accName,varchar(30)),余额( balance , decimal(7,2) ),开户日期(dateCreated,date)。
- (5分)在账户数据表中添加5条记录。
其中一条记录的账号是你的学号,账户名为你的姓名,余额要大于3000
其他4条记录中2条大于5000,2条小于5000
【在此粘贴证明您完成上述任务的截图】
- 规划项目结构(5分),
- 创建工程,工程以你的姓名的全拼音命名(例如,张三的项目名称zhangsan)
- 在项目中创建5个包
server.idao(数据访问接口包)
server.dao(数据访问模型包)
server.model(数据模型包)
server.util(工具包)
client.view(视图包)
【在此粘贴证明您完成上述任务的截图】
- 创建服务器端程序(60分)
- (10分)在server.model包中,创建一个封装了账户信息并实现了序列化接口的类Account ,Account类中应包含accountNo,accountName,balance,dateCreated属性,set/get方法,toString()方法。
【在此粘贴源程序(注意:源程序不能是截图)】
- (10分)在server.util包中建立一个SqlHelper类封装对数据库的连接操作和关闭操作。并设计一个测试类TestSqlHelper,测试SqlHelper的使用。
【在此粘贴源程序(注意:源程序不能是截图)】
【在此粘贴测试SqlHelper结果的截图(证明数据库连接成功)】
- (6分)在server.idao包中,定义一个账户的数据访问接口IAccountDao,
(a)学号尾号为1,3,5,7,9的学生IAccountDao接口包含的抽象方法如下:
- boolean addAccount(Account account);向账户表中添加一个新账户。
- List<Account> findAccounts(double balance1,double balance2);查询余额在balance1和balance2之间的账户信息。
- List<Account> findAccounts(String accountName);查询账户名中包含某一指定字符串的账户信息。
- boolean deposit(String accountNo,double money); 往指定账户中存款,账户余额增加money。如果存款成功返回true。
【在此粘贴源程序(注意:源程序不能是截图)】
- (14分)在server.dao包中,定义一个实现了接口IAccountDao的数据访问类AccountDao,并编写测试类。按下列要求具体实现接口IAccountDao提供的功能,并用下列给出的测试类测试。
(a)学号尾号为1,3,5,7,9的学生具体实现:
- boolean addAccount(Account account);
- List<Account> findAccounts(String accountName);
- List<Account> findAccounts(double balance1,double balance2);
- 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(注意:源程序不能是截图)】
【在此粘贴测试结果的截图】
- (20分)在server.view包中,创建多线程的服务器(Server)端主程序。
在这个程序中,服务器在某个端口上倾听,等待与客户端连接,同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。
(a)学号尾号为1、3、5的学生设计:当服务器收到客户端发来的一个账户信息后,调用AccountDao对象的addAccount(Account account)方法,向账户表中添加一个账户信息,并把添加是否成功的消息返回给客户端,如果客户端发来的账户号是“exit”,则关闭和该客户端连接。
【在此粘贴源程序(注意:源程序不能是截图)】
【在此粘贴服务器端运行结果的截图(注意:客户端完成后,再把服务器端的运行结果的截图在此粘贴)】
(c)学号尾号为7和9的学生设计:当服务器收到客户端发来的一个账户名中包含的字符串时(例如,李),调用AccountDao对象的findAccounts(String accountName)方法,在账户表中查询所有账户名中包含给定字符串的账户信息,并把查询到的账户信息返回给客户端;如果没有查询到满足条件的账户,就向客户端返回“没有查询到满足条件的账户”,如果客户端发来的账户名是“exit”,则关闭和该客户端连接。
【在此粘贴源程序(注意:源程序不能是截图)】
【在此粘贴服务器端运行结果的截图(注意:客户端程序完成后,再把服务器端的运行结果的截图在此粘贴)】
三、创建客户端程序(20分)
- 在client.view包中创建客户(Client)端主程序。
- 学号尾号为1、3、5的学生设计:在客户端输入要添加的账户信息并创建账户的对象,然后利用套接字向服务器发送该账户对象,接受服务器返回的添加是否成功的消息,并输出添加是否成功的消息。
【在此粘贴源程序(注意:源程序不能是截图)】
【在此粘贴客户端运行结果的截图(注意:服务器端程序完成后,再把客户端的运行结果的截图在此粘贴)截图要有两种结果,即添加成功和添加不成功】
- 学号尾号为7,9的学生设计:客户端输入要查询的账户名所包含的字符串(例如,李),然后利用套接字向服务器发送该字符串,接受服务器返回的查询结果,并输出查询结果(如果查询到了满足条件的账户,就把查询到的账户信息全部输出,否则输出“没有查询到满足条件的账户”)。
【在此粘贴源程序(注意:源程序不能是截图)】
【在此粘贴客户端运行结果的截图(注意:服务器端程序完成后,再把客户端的运行结果的截图在此粘贴),截图要有两种查询结果,即查询到满足条件记录的结果和不满足条件的结果】