1、公司计划使用Java控制台开发一个小型银行系统,使用sqlserver作为后台数据,其中银行管理员功能和顾客功能由你来负责。
2、数据库数据如下
1 顾客表:
数据表名 | customer | 中文表名 | 顾客表 | ||
字段显示 | 字符名 | 数据类型 | 字段大小 | 备注和说明 | |
银行账号 | custNumber | varchar | 20 | 主键 | |
开户姓名 | custName | varchar | 20 | 非空 | |
账户密码 | custPwd | Varchar | 6 | 非空 | |
身份证号码 | custIdCard | varchar | 18 | 非空 | |
开户金额 | custMoney | double | 9 | 非空,默认0 | |
开户日期 | custDate | datetime | 非空 |
2 管理员表:
数据表名 | administrator | 中文表名 | 管理员表 | ||
字段显示 | 字符名 | 数据类型 | 字段大小 | 备注和说明 | |
管理员编号 | adminNumber | varchar | 20 | 主键 | |
管理员密码 | adminPwd | varchar | 20 | 非空 | |
管理员名字 | adminName | varchar | 18 | 非空 |
3.我建立两个resultMap
,它何将SQL查询的结果集映射(Map)到Administrator和Customer类对象中
<resultMap id="bankmap" type="com.fs.model.Administrator">
<id column="adminNumber" property="adminNumber"></id>
<result column="adminPwd" property="adminPwd"></result>
<result column="adminName" property="adminName"></result>
</resultMap>
<resultMap id="Cusmap" type="com.fs.model.Customer">
<id column="custNumber" property="custNumber"></id>
<result column="custName" property="custName"></result>
<result column="custPwd" property="custPwd"></result>
<result column="custIdCard" property="custIdCard"></result>
<result column="custMoney" property="custMoney"></result>
<result column="custDate" property="custDate"></result>
</resultMap>
4、登陆操作我是用@Param注解传参法方法
Administrator adminLogin(@Param("adminName") String name, @Param("adminPwd") String pass);
<select id="adminLogin" resultMap="bankmap">
select * from administrator where adminName=#{adminName} and adminPwd=#{adminPwd}
</select>
5、查询所有成员
List<Customer> queryAllCus();
<select id="queryAllCus" resultMap="Cusmap" >
select * from customer
</select>
6.查询银行总金额
double totalAllMoney();
<select id="totalAllMoney" resultType="double">
select sum(custMoney) from customer
</select>
7.富豪排行榜
List<Customer> queryALLByMoney();
<select id="queryALLByMoney" resultMap="Cusmap">
select * from customer order by custMoney desc
</select>
8.删除操作
int deleCus(String num);
<delete id="deleCus" parameterType="String">
delete from customer where custNumber=#{num}
</delete>
8.动态查询
重点来了,当查询条件多种多样时,如何根据不同条件动态查询结果呢?
(1)我先是根据各种条件(号码,姓名,卡号)建了一个vo包下的Custom类,如下
public class Custom {
private String custNumber;
private String custName;
private String custIdCard;
public Custom() {
}
@Override
public String toString() {
return "Custom{" +
"custNumber='" + custNumber + '\'' +
", custName='" + custName + '\'' +
", custIdCard='" + custIdCard + '\'' +
'}';
}
public String getCustNumber() {
return custNumber;
}
public void setCustNumber(String custNumber) {
this.custNumber = custNumber;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getCustIdCard() {
return custIdCard;
}
public void setCustIdCard(String custIdCard) {
this.custIdCard = custIdCard;
}
public Custom(String custNumber, String custName, String custIdCard) {
this.custNumber = custNumber;
this.custName = custName;
this.custIdCard = custIdCard;
}
}
(2)然后传入Custom类对象,比如根据银行账号查询。
Custom custom = new Custom();
custom.setCustNumber(customer.getCustNumber());
List<Customer> customers = customerServiceimpl.queryAllByAny(custom);
List<Customer> queryAllByAny(Custom custom);
<select id="queryAllByAny" parameterType="com.fs.vo.Custom" resultMap="Cusmap">
<include refid="basesql"/>//select * from customer
<where>
<include refid="sqlwhere"/>//不同条件查询
</where>
</select>
<sql id="sqlwhere">
<choose>
<when test="custName!=null">
and custName=#{custName}
</when>
<when test="custIdCard!=null">
and custIdCard=#{custIdCard}
</when>
<when test="custNumber!=null">
and custNumber=#{custNumber}
</when>
</choose>
</sql>
<sql id="basesql">
select * from customer
</sql>
9..动态修改银行数据库的值,比如设置新密码
String newPass = scanner.next();
customer.setCustPwd(newPass);
int update = customerServiceimpl.update(customer);
int update(Customer customer);
<update id="update" parameterType="com.fs.model.Customer">
update customer
<set>
<if test="custMoney!=0.0">
custMoney=#{custMoney},
</if>
<if test="custPwd!=null">
custPwd=#{custPwd}
</if>
</set>
where custNumber=#{custNumber}
</update>
10.整个银行系统操作
package com.fs.view;
import com.fs.model.Administrator;
import com.fs.model.Customer;
import com.fs.service.impl.AdminBankServiceImpl;
import com.fs.service.impl.CustomerServiceimpl;
import com.fs.vo.Custom;
import java.util.Date;
import java.util.List;
import java.util.Scanner;
import static java.lang.System.exit;
/**
* @Version:1.0
* @Description: TODO(一句话描述该类的功能)
* @Date: 2024/8/16 12:50
* @Author: tao
*/
public class BankSystem {
AdminBankServiceImpl adminBankService = new AdminBankServiceImpl();
CustomerServiceimpl customerServiceimpl = new CustomerServiceimpl();
Scanner scanner = new Scanner(System.in);
//初始界面
public void bankSystem() {
System.out.println(" 银行系统 \n" +
"********************1.管理员*****************\n" +
"********************2.顾客**********************");
System.out.println("请输入");
int i = scanner.nextInt();
switch (i) {
case 1:
deAdminLogin();
break;
case 2:
doCustomLogin();
break;
}
}
private void doCustomLogin() {
System.out.println("请输入用户名");
String customName = scanner.next();
System.out.println("请输入密码");
String cusPass = scanner.next();
Customer customer = customerServiceimpl.customerLogin(customName, cusPass);
if(customer!=null){
System.out.println("登陆成功");
customerManger(customer);
}else{
System.out.println("密码或账号错误,请重新登陆");
bankSystem();
}
}
private void customerManger(Customer customer) {
System.out.println(" 银行系统(顾客)");
System.out.println("**********************************************************************");
System.out.println("1.存款 2.取款 3.查询余额 4.转账 5.修改密码 6.退出");
System.out.println("**********************************************************************");
System.out.println("请选择");
int i = scanner.nextInt();
switch (i){
case 1:
addMoney(customer);
break;
case 2:
outMoney(customer.getCustNumber());
break;
case 3:
watchMainMoney(customer.getCustNumber());
break;
case 4:
transMoney(customer);
break;
case 5:
updatPass(customer);
}
}
private void updatPass(Customer customer) {
// customerServiceimpl.update()
System.out.println("请输入旧密码");
String oldPass = scanner.next();
if(oldPass.equals(customer.getCustPwd())){
System.out.println("请输入新密码");
String newPass = scanner.next();
customer.setCustPwd(newPass);
int update = customerServiceimpl.update(customer);
if(update>0){
System.out.println("密码修改成功");
}else{
System.out.println("密码修改失败");
}
retrunBackCustom(customer);
}else{
System.out.println("旧密码错误,请重新输入");
updatPass(customer);
}
retrunBackCustom(customer);
}
//转账
private void transMoney(Customer customer) {
System.out.println("请输入转入账号");
String num = scanner.next();
Custom custom = new Custom();
custom.setCustNumber(num);
List<Customer> customers = customerServiceimpl.queryAllByAny(custom);
Customer customerOne = customers.get(0);
if(customerOne!=null){
System.out.println("请输入转入金额");
Double money = scanner.nextDouble();
if(money<=customer.getCustMoney()){
customer.setCustMoney(customer.getCustMoney()-money);
int update = customerServiceimpl.update(customer);
customerOne.setCustMoney(customerOne.getCustMoney()+money);
int updateOne = customerServiceimpl.update(customerOne);
if(update>0&&updateOne>0){
List<Customer> customersOne = customerServiceimpl.queryAllByAny(custom);
Customer customerTwo= customersOne.get(0);
Custom customOne = new Custom();
customOne.setCustNumber(customer.getCustNumber());
List<Customer> customersThree = customerServiceimpl.queryAllByAny(customOne);
Customer customerThree= customersThree.get(0);
System.out.println("转账成功," +"您余额为"+customerThree.getCustMoney()+
"您朋友当前余额为"+customerTwo.getCustMoney());
retrunBackCustom(customerTwo);
}else {
System.out.println("添加失败");
retrunBackCustom(customer);
}
}else {
System.out.println();
System.out.println("您的余额不足,您当前余额为"+customer.getCustMoney());
System.out.println("请选择1:充值 2:重新转入 3.退出");
int i = scanner.nextInt();
switch (i){
case 1:
addMoney(customer);
break;
case 2:
transMoney(customer);
break;
default:
retrunBackCustom(customer);
break;
}
}
}else {
System.out.println("账号不存在,请重新输入");
transMoney(customer);
}
}
//余额
private void watchMainMoney(String num) {
Custom custom = new Custom();
custom.setCustNumber(num);
List<Customer> customers = customerServiceimpl.queryAllByAny(custom);
System.out.println(customers);
Customer customer = customers.get(0);
System.out.println("您当前余额为"+customer.getCustMoney());
retrunBackCustom(customer);
}
//取款
private void outMoney(String custNumber) {
Custom custom = new Custom();
custom.setCustNumber(custNumber);
List<Customer> customers = customerServiceimpl.queryAllByAny(custom);
Customer customer = customers.get(0);
System.out.println("请输入取款金额");
double money = scanner.nextDouble();
if(money<=customer.getCustMoney()){
customer.setCustMoney(money+customer.getCustMoney());
int update = customerServiceimpl.update(customer);
if(update>0){
List<Customer> customersTwo = customerServiceimpl.queryAllByAny(custom);
Customer customerTwo = customers.get(0);
System.out.println("取款成功,您当前余额为"+customerTwo.getCustMoney());
}else {
System.out.println("取款失败");
}
}else {
System.out.println("余额不足,您当前余额为:"+customer.getCustMoney());
}
retrunBackCustom(customer);
}
//存款
private void addMoney(Customer customer) {
System.out.println("请输入存款金额");
double money = scanner.nextDouble();
customer.setCustMoney(money+customer.getCustMoney());
int update = customerServiceimpl.update(customer);
if(update>0){
Custom custom = new Custom();
custom.setCustNumber(customer.getCustNumber());
List<Customer> customers = customerServiceimpl.queryAllByAny(custom);
Customer customerOne = customers.get(0);
System.out.println("存款成功,当前余额为"+customerOne.getCustMoney());
retrunBackCustom(customerOne);
}else {
System.out.println("添加失败");
}
}
//是否返回顾客主菜单
private void retrunBackCustom(Customer customer){
System.out.println("1.返回顾客主菜单 0.退出系统:0");
int m = scanner.nextInt();
switch (m) {
case 1:
customerManger(customer);
break;
case 2:
System.out.println("谢谢使用");
exit(0);
break;
default:
System.out.println("您已退出系统");
exit(0);
}
}
//管理员登陆界面
private void deAdminLogin() {
System.out.println("请输入用户名");
String customName = scanner.next();
System.out.println("请输入密码");
String cusPass = scanner.next();
Administrator adminBankDao1 = adminBankService.doLogin(customName, cusPass);
if (adminBankDao1 != null) {
System.out.println("登陆成功");
adminManger();
} else {
System.out.println("密码或账号错误,请重新登陆");
bankSystem();
}
}
//管理员系统操作界面
private void adminManger() {
System.out.println("银行系统【管理员】\n**************************************************\n" +
"1.添加顾客 2.计算储蓄总额 3.富豪排行榜 4.删除顾客 5.退出\n" +
"***********************************************************");
System.out.println("请选择");
int i = scanner.nextInt();
switch (i) {
case 1:
addCsutom();
break;
case 2:
totalMoney();
break;
case 3:
moneyCustomerList();
break;
case 4:
deleteCustomer();
case 5:
System.out.println("您已退出系统");
break;
}
}
private void deleteCustomer() {
System.out.println("请输入顾客卡号");
String num = scanner.next();
int i = customerServiceimpl.deleCus(num);
if(i>0){
System.out.println("删除成功");
}else {
System.out.println("删除失败");
}
retunBack();
}
//富豪排行界面
private void moneyCustomerList() {
List<Customer> customers = customerServiceimpl.queryALLByMoney();
int i=1;
System.out.println("名次\t\t姓名\t\t身份证号\t\t\t\t\t金额");
for (Customer customer : customers) {
System.out.println(i+"\t\t"+customer.getCustName()+"\t\t"+customer.getCustIdCard()+"\t\t"+customer.getCustMoney());
i++;
}
adminManger();
}
//管理员储汇界面
private void totalMoney() {
System.out.println("当前存储总金额为"+customerServiceimpl.totalCusMoney());
retunBack();
}
//添加顾客界面
private void addCsutom() {
Customer customer = new Customer();
System.out.println("请输入顾客名字");
customer.setCustName(scanner.next());
System.out.println("请输入顾客卡号");
customer.setCustNumber(scanner.next());
System.out.println("请输入顾客身份证");
customer.setCustIdCard(scanner.next());
System.out.println("请输入顾客开户金额");
customer.setCustMoney(scanner.nextDouble());
System.out.println("请输入初始密码");
customer.setCustPwd(scanner.next());
customer.setCustDate(new Date());
int i = customerServiceimpl.addCustom(customer);
if (i > 0) {
System.out.println("添加成功");
}else {
System.out.println("未添加成功");
}
retunBack();
}
//返回管理员主菜单页页面
private void retunBack() {
System.out.println("1.返回管理员主菜单 0.退出系统:0");
int m = scanner.nextInt();
switch (m) {
case 1:
bankSystem();
break;
case 2:
System.out.println("谢谢使用");
exit(0);
break;
default:
System.out.println("您已退出系统");
exit(0);
}
}
}
11.项目结构:
总结:动态查询和动态修改是真的很方便,后面很多功能用这两个就够了。