我用的是mysql数据库,Idea编译器,jdk1.7;
源码:在这
点击打开源码
首先建立一个DB包,新建一个DB class 用来连接自己的数据库;
package DB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DB {
private static final String URL="jdbc:mysql://localhost:3306/card_meal?characterEncoding=utf8&useSSL=true";
private static final String USER="root";//
private static final String PASSWORD="root";
//上面分别定义了URL(统一资源定位器),USER(用户名),PASSWORD(密码)
private static Connection conn=null; //(定义一个空的Connection)
static {
//使用try-catch语句,抛出错误
try {
Class.forName("com.mysql.jdbc.Driver");
conn= DriverManager.getConnection(URL, USER, PASSWORD);
//使用你在头部定义的三个变量,分别确定连接数据库的位置,用户名,密码
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
return conn;
}
//无参的构造方法
}
然后新建一个Card包,新建一个Card class 表示饭卡,里面的属性主要有
ID(学号),name(姓名),password(密码),class-name(班级名称),money(余额),numOfBankCard(饭卡对应的银行卡的钱数)
以及各种get,set方法
package Card;
public class Meal_Card {
private String id;
private String name;
private String class_name;
private double money;
private String password;
private double numOfBankCard;
public void setNumOfBankCard(double numOfBankCard) {
this.numOfBankCard = numOfBankCard;
}
public double getNumOfBankCard() {
return numOfBankCard;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setClass_name(String class_name) {
this.class_name = class_name;
}
public void setMoney(double money) {
this.money = money;
}
public String getId() {
return id;
}
public void setMoney(Float money) {
this.money = money;
}
public String getName() {
return name;
}
public String getClass_name() {
return class_name;
}
public double getMoney() {
return money;
}
}
PS:我是对着自己的饭卡的属性来写的,所以没啥说的
接下来开始写model-view-controller层(我抄慕课网上的老师的方法,我是不太理解,也就知道它们分的比较散,便于修改)
view包里面一个action类
package model.view;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import action.Card_action;
import Card.Meal_Card;
public class action {
public static void main(String[] args) throws InterruptedException, SQLException {
Scanner in = new Scanner(System.in);
System.out.println("----------------------欢迎进入郑州轻工业饭卡业务系统---------------------");
Integer power = 0; // 权限,power为 10 时为管理员权限,power为 0 时为用户权限
Loop: while (true) {
System.out.println(" 1.登录界面,请按 1 \n 2.注册界面,请按 2 \n 0.退出系统,请按 0 ");
if (power == 10) {
System.out.println(" 9.退出管理员身份,请输入 9 ");
}
String flag = in.nextLine(); // 通过判断输入的值,来确定用户接下来的操作
power = admin(flag, power);// 管理员权限登录及回收
if (flag.equals("1")) { // 输入“2”,首先先确定用户的卡号,然后,再进行其他操作。
Meal_Card card = null; // 顶替一张新卡,看能否指向
while (true) {
if (power != 10) {
System.out.print("请输入你的学号:");// 通过学号查询,调用CardDao的findCard方法
} else {
System.out.print("请输入您要操作的目标学号:");
}
String id0 = in.nextLine().trim();
if (id0.equals("0")) { // 若输入的是0,则退出
System.out.println("退回主界面\n");
break Loop;
}
Card_action ca = new Card_action();
card = ca.find(id0);// 通过输入的id得到一个旧卡的属性,
// 如果id不合法,则令旧卡id=“-1”,使其报错
if (card.getId().equals("-1")) {
System.out.println("----------------------您输入的用户不存在----------------------");
System.out.println("请重新输入用户名,或输入 0 退出主界面");
} else {
break;
// //成功查找到该用户,进入密码验证
}
}
while (true) {
if (power == 0) {
System.out.print("请输入您的密码: ");
} else {
System.out.println("管理员输入回车即可强制登录。");
}
String t = in.nextLine().trim();
if (power == 10) { // 判断是否是管理员权限
System.out.println("管理员强制登录中。。。。");
Thread.sleep(1000);
System.out.println("----------------------管理员强制登录成功----------------------------");
break;
} else if (card.getPassword().equals(t)) { // 判断用户输入的密码是否正确,正确则进入下一步
break;
} else { // 既不是管理员,密码输入又错误,那么需要重新输入
System.out.println("您的密码输入错误,请重新输入.\n");
}
}
System.out.println("---------------------------欢迎使用饭卡系统-----------------------");
while (true) {
if (power == 10) {
System.out.println("0.注销饭卡 请按 0 (仅管理员可见)");
}
System.out.println("1.充值饭卡. 请按 1 ");
System.out.println("2.查询余额. 请按 2");
System.out.println("3.查询信息. 请按 3 ");
System.out.println("4.饭卡消费. 请按 4");
System.out.println("5.查询银行卡上余额 请按 5 ");
System.out.println("6.修改信息. 请按 6 ");
System.out.println("7.退出系统. 请按 7 ");
String k = in.nextLine();// 判断用户输入的值
Card_action cdan = new Card_action();// 新new一个Card_action对象,便于调用其内部方法
if (power == 10 && k.equals("0")) {
cdan.deleteCard(card); // 调用删除用户方法,进行删除
} else if (k.equals("1")) {
cdan.addMoney01(card); // 调用充钱方法
} else if (k.equals("2")) {
cdan.queryCardMoney(card);
} else if (k.equals("3")) {
cdan.queryCard(card);
} else if (k.equals("4")) {
cdan.costCard(card);
} else if (k.equals("5")) {
cdan.queryBankCard(card);
} else if (k.equals("6")) {
cdan.alterMessage(card);
} else if (k.equals("7")) {
System.out.println("退回主界面\n");
break;
} else {
prinError();
}
}
} else if (flag.equals("2")) { // 输入“1”,所以办理一张饭卡,调用Card_action的addCard1方法新增card
Card_action cm = new Card_action();
cm.addCard1();
System.out.println("您办理饭卡余额为100.0元\n");
} else if (flag.equals("0")) {// 输入“0”,退出系统。
prinEnd();
break;
} else if (!flag.equals("admin")) { // 输入错误,提醒用户重新输入
prinError();
}
}
}
public static void prinError() {
System.out.println("您的输入不合法,请重新输入.");
}
public static void prinEnd() {
System.out.println("--------期待您的下次光临!--------");
}
public static int admin(String flag, int power) throws InterruptedException {
if (flag.equals("admin")) {
Scanner in = new Scanner(System.in);
System.out.print("请输入管理员密码:");
String pass = in.nextLine();
if (pass.equals("000000")) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss\n");// 设置日期格式
System.out.println("管理员,您好,现在是" + df.format(new Date()));
return 10;
} else {
System.out.println("密码错误,未得到管理员权限!!");
}
} else if (flag.equals("9")) {
Thread.sleep(1000);
System.out.println("-------您已成功退出管理员系统---------");
return 0;
}
return power;
}
}
几乎所有除了输出以外要实现的功能都调用的是model层的model包里面的Card_action
Card_action class里面的内容
package action;
import dao.CardDao;
import Card.Meal_Card;
import javax.smartcardio.Card;
import java.sql.SQLException;
import java.util.Scanner;
public class Card_action {
public static void addCard1() throws SQLException {
Scanner input = new Scanner(System.in);
System.out.println("郑州轻工业饭卡欢迎您的使用!!!");
Meal_Card card = new Meal_Card();
while (true) {
System.out.print("请输入您的学号:");
String id = input.nextLine();
CardDao cd = new CardDao();
Meal_Card tempcard = cd.findCard(id);
if (id.equals("0")) {
System.out.println("输入不合法,请重新输入");
} else if (tempcard.getId().equals("-1")) {
card.setId(id);
break;
} else {
System.out.println("用户学号已存在,请重新输入");
}
}
System.out.print("请输入您的姓名:");
card.setName(input.nextLine());
System.out.print("请输入您的班级名称:");
card.setClass_name(input.nextLine());
System.out.print("请输入您的密码(---重要----):");
card.setPassword(input.nextLine());
CardDao cd = new CardDao();
cd.addCard2(card);
System.out.println();
}
public static void addMoney01(Meal_Card card) throws SQLException {
Scanner in = new Scanner(System.in);
System.out.println("请输入您要充值的金额");
int numOfMoney = in.nextInt();
CardDao cd = new CardDao();
cd.addMoney(card, numOfMoney);
}
public static void queryCardMoney(Meal_Card card) {
System.out.println("饭卡余额:" + card.getMoney());
}
public static void queryCard(Meal_Card card) {
System.out.println("您饭卡的完整信息为:");
System.out.println("班级:" + card.getClass_name());
System.out.println("学号:" + card.getId());
System.out.println("姓名:" + card.getName());
}
public static Meal_Card find(String id) throws SQLException {
CardDao cd = new CardDao();
return cd.findCard(id);
}
public static void deleteCard(Meal_Card card) throws SQLException {
CardDao cd = new CardDao();
System.out.println("您真的要删除这个饭卡吗?\n 输入 1 确定,其他退出修改");
Scanner in = new Scanner(System.in);
if (in.nextLine().equals("1")) {
System.out.println("已经成功删除学号为:" + card.getId() + "的用户。");
cd.deleCard(card);
} else {
System.out.println("未删除" + card.getId() + " " + card.getName());
}
}
public static void costCard(Meal_Card card) throws SQLException {
Scanner in = new Scanner(System.in);
System.out.println("请输入您要花费的金额:");
double cost = in.nextDouble();
CardDao cd = new CardDao();
cd.costCard(card, cost);
}
public static void queryBankCard(Meal_Card card) {
System.out.println("银行卡余额为:" + card.getNumOfBankCard());
}
public static void alterMessage(Meal_Card card) throws SQLException {
System.out.println("您当前的信息为:");
queryCard(card);
System.out.println("您确定要修改信息吗? 按 1 确认,其他退出修改");
Scanner in = new Scanner(System.in);
if (in.nextLine().equals("1")) {
System.out.println("您已确认修改!");
CardDao cd = new CardDao();
cd.alter(card);
} else {
System.out.println("您放弃了修改个人信息。");
}
}
}
但是对于数据库的操作我又传给了dao包下的CardDao class 用来专门实现想要对数据库的修改
package dao;
import Card.Meal_Card;
import DB.DB;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.util.Scanner;
public class CardDao {
public static void addCard2(Meal_Card mc) throws SQLException {
Connection conn = DB.getConnection();
String sql = "" + "insert into card" + "(id, name, class_name,password)" + "values(" + "?,?,?,?)";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, mc.getId());
ptmt.setString(2, mc.getName());
ptmt.setString(3, mc.getClass_name());
ptmt.setString(4, mc.getPassword());
ptmt.execute();
}
public static Meal_Card findCard(String id) throws SQLException {// 通过传入的id进行查询是否存在饭卡,并将存在的饭卡作为返回值
Connection conn = DB.getConnection();
String sql = "" + "select * from card where id=? ";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, id);
ResultSet rs = ptmt.executeQuery();
Meal_Card card = new Meal_Card();
if (rs.next()) {
card.setId(rs.getString("id"));
card.setName(rs.getString("name"));
card.setClass_name(rs.getString("class_name"));
card.setMoney(rs.getFloat("money"));
card.setPassword(rs.getString("password"));
card.setNumOfBankCard(rs.getDouble("numOfBankCard"));
} else {
card.setId("-1");
}
return card;
}
public static double addMoney(Meal_Card card, Integer add) throws SQLException {
Connection conn = DB.getConnection();
if (card.getNumOfBankCard() < add) {
System.out.println("银行卡余额已不足,请及时到银行充值!!");
} else {
card.setMoney(card.getMoney() + (double) add); // 饭卡余额
card.setNumOfBankCard(card.getNumOfBankCard() - (double) add); // 银行卡余额
String sql = "" + "update card " + "set money=? , numOfBankCard=? " + "where id= ? ";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setFloat(1, (float) card.getMoney());
ptmt.setFloat(2, (float) card.getNumOfBankCard());
ptmt.setString(3, card.getId());
ptmt.execute();
System.out.println("充值成功,您卡上的余额为:" + card.getMoney());
}
return card.getMoney();
}
public static void deleCard(Meal_Card card) throws SQLException {
Connection conn = DB.getConnection();
String sql = "" + "delete from card " + "where id=?";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, card.getId());
ptmt.execute();
}
public static void costCard(Meal_Card card, double cost) throws SQLException {
Connection conn = DB.getConnection();
if (card.getMoney() < cost) {
System.out.println("饭卡余额已不足,请及时充值!!");
} else {
card.setMoney(card.getMoney() - cost); // 饭卡余额
String sql = "" + "update card " + "set money=? " + "where id= ? ";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setFloat(1, (float) card.getMoney());
ptmt.setString(2, card.getId());
ptmt.execute();
System.out.println("你已消费" + cost + "元,卡上余额为" + card.getMoney());
}
}
public static void alter(Meal_Card card) throws SQLException {
System.out.println("请重新输入个人信息:");
String temp = card.getId();
Scanner in = new Scanner(System.in);
System.out.println("输入您新的学号");
card.setId(in.nextLine());
System.out.println("输入您新的用户名");
card.setName(in.nextLine());
System.out.println("输入您新的密码");
card.setPassword(in.nextLine());
System.out.println("输入您新的班级名称");
card.setClass_name(in.nextLine());
Connection conn = DB.getConnection();
String sql = "" + "UPDATE card set id=?, name=?,class_name=?,password=?" + "where id=?";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, card.getId());
ptmt.setString(2, card.getName());
ptmt.setString(3, card.getClass_name());
ptmt.setString(4, card.getPassword());
ptmt.setString(5, temp);
ptmt.execute();
}
}
然后就可以实现我暂时知道的我自己的饭卡的功能了