Java從零實現(xiàn)超市會員管理系統(tǒng)
?
項目需求
為某超市開發(fā)一個超市會員管理系統(tǒng),實現(xiàn)會員的管理,具體實現(xiàn)功能如下:
(1)積分累計
(2)積分兌換
(3)查詢剩余積分
(4)查詢所有會員信息
(5)修改密碼
(6)開卡(注冊會員)
覆蓋知識
程序基本概念、數(shù)據(jù)類型、流程控制、順序、選擇 、循環(huán)、跳轉(zhuǎn)語句、變量、類、方法、實用類等
掌握數(shù)據(jù)庫、JDBC、三層架構(gòu)等相關(guān)知識。
掌握Druid連接池、Apache的DBUtils使用 。
開發(fā)思路
(1)明確需求
(2)編碼順序
- 數(shù)據(jù)初始化,完成數(shù)據(jù)表創(chuàng)建,三層架構(gòu)的搭建
- 循環(huán)完成各種超市會員管理操作
- 菜單切換
(3)測試
開發(fā)步驟
1)、添加需要的jar包到項目中,將lib文件夾中的jar文件通過鼠標(biāo)右單擊選擇Build Path的方式添加到你設(shè)置的eatJar文件目錄里。
2)、創(chuàng)建database.properties文件,用來配置注冊驅(qū)動和數(shù)據(jù)庫連接對象的相關(guān)數(shù)據(jù)。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java221804
username=root
password=huanghuang
initialSize=10
maxActive=30
maxIdle=5
maxWait=3000
3)、添加需要的工具類DBUtils類
package cn.book.utils; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DBUtils { private static DruidDataSource druidDataSource; static { Properties properties = new Properties(); try { InputStream is = DBUtils.class .getResourceAsStream("/database.properties"); properties.load(is); druidDataSource = (DruidDataSource) DruidDataSourceFactory .createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSource(){ return druidDataSource; } }
4)、創(chuàng)建數(shù)據(jù)表:member表
CREATE TABLE `member` ( `name` varchar(20) NOT NULL, `cardId` int(11) NOT NULL, `password` varchar(20) NOT NULL, `score` int(11) NOT NULL, `registDate` varchar(20) NOT NULL, UNIQUE KEY `cardId` (`cardId`) );
5)、編寫book類,包含get/set方法、有參/無參構(gòu)造、toString方法
6)、數(shù)據(jù)訪問層DAO層的接口和實現(xiàn)類的增刪改查方法的編寫
7)、服務(wù)層Service層的接口和實現(xiàn)類的增刪改查方法的編寫
8)、最后完成視圖層View層測試類的編寫
全部代碼展示
1、Member類
package cn.member.entity; public class Member { // 定義屬性 private String name; private int cardId; private String password; private int score; private String registDate; public Member() { super(); } public Member(String name, int cardId, String password, int score, String registDate) { super(); this.name = name; this.cardId = cardId; this.password = password; this.score = score; this.registDate = registDate; } // 定義get/set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getCardId() { return cardId; } public void setCardId(int cardId) { this.cardId = cardId; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public String getRegistDate() { return registDate; } public void setRegistDate(String registDate) { this.registDate = registDate; } @Override public String toString() { return "Member [name=" + name + ", cardId=" + cardId + ", password=" + password + ", score=" + score + ", registDate=" + registDate + "]"; } }
2、DBUtils類
(使用連接池DruidDataSource、Apache的知識)
package cn.member.utils; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; public class DBUtils { private static DruidDataSource druidDataSource; static { Properties properties = new Properties(); try { InputStream is = DBUtils.class .getResourceAsStream("/database.properties"); properties.load(is); druidDataSource = (DruidDataSource) DruidDataSourceFactory .createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public static DataSource getDataSource(){ return druidDataSource; } }
3、數(shù)據(jù)訪問層的MemberDao接口
package cn.member.dao; import java.util.List; import cn.member.entity.Member; public interface MemberDao { // 增 public int insert(Member member); // 刪 public int delete(int cardId); // 改 public int update(Member book); // 查一個 public Member select(int cardId); // 查全部 public List<Member> selectAll(); }
4、數(shù)據(jù)訪問層的MemberDaoImpl類
package cn.member.dao.impl; import java.sql.SQLException; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import cn.member.dao.MemberDao; import cn.member.entity.Member; import cn.member.utils.DBUtils; public class MemberDaoImpl implements MemberDao { private QueryRunner queryRunner = new QueryRunner(DBUtils.getDataSource()); @Override public int insert(Member member) { String sql = "insert into member(name,cardId,password,score,registDate) values(?,?,?,?,?);"; Object[] args = { member.getName(), member.getCardId(), member.getPassword(), member.getScore(), member.getRegistDate() }; try { return queryRunner.update(sql, args); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public int delete(int cardId) { String sql = "delete from member where cardId=?;"; try { return queryRunner.update(sql, cardId); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public int update(Member member) { String sql = "update `member` set `name`=?,`password`=?,`score`=?,`registDate`=? where `cardId`=?;"; Object[] args={member.getName(),member.getPassword(),member.getScore(),member.getRegistDate(),member.getCardId()}; try { return queryRunner.update(sql, args); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public Member select(int cardId) { String sql = "select * from member where cardId=?;"; try { return queryRunner.query(sql, new BeanHandler<Member>(Member.class), cardId); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public List<Member> selectAll() { String sql = "SELECT * FROM member;"; try { return queryRunner.query(sql, new BeanListHandler<Member>( Member.class)); } catch (SQLException e) { e.printStackTrace(); } return null; } }
5、服務(wù)層的MemberService接口
package cn.member.service; import java.util.List; import cn.member.entity.Member; public interface MemberService { // 增 public int insertMember(Member member); // 刪 public int deleteMember(int cardId); // 改 public int updateMember(Member member); // 查一個 public Member selectMember(int cardId); // 查全部 public List<Member> selectAllMembers(); }
6、服務(wù)層的MemberServiceImpl類
package cn.member.service.impl; import java.util.List; import cn.member.dao.MemberDao; import cn.member.dao.impl.MemberDaoImpl; import cn.member.entity.Member; import cn.member.service.MemberService; public class MemberServiceImpl implements MemberService { MemberDao memberDao = new MemberDaoImpl(); @Override public int insertMember(Member Member) { if (memberDao.select(Member.getCardId()) == null) { return memberDao.insert(Member); } return 0; } @Override public int deleteMember(int cardId) { if (memberDao.select(cardId) != null) { return memberDao.delete(cardId); } return 0; } @Override public int updateMember(Member Member) { if (memberDao.select(Member.getCardId()) != null) { return memberDao.update(Member); } return 0; } @Override public Member selectMember(int cardId) { memberDao.select(cardId); return null; } @Override public List<Member> selectAllMembers() { List<Member> listMembers = memberDao.selectAll(); return listMembers; } }
7、視圖層MemberMgr測試類
package cn.member.view; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Scanner; import cn.member.entity.Member; import cn.member.service.MemberService; import cn.member.service.impl.MemberServiceImpl; public class MemberMgr { // 定義一個Scanner Scanner sc = new Scanner(System.in); // 定義Member對象 Member member = new Member(); MemberService ms=new MemberServiceImpl(); //從數(shù)據(jù)庫中查全部會員信息 List<Member> listM=null; // 菜單選擇欄 public void showFirst() { System.out .println("****************************************歡迎使用超市會員管理系統(tǒng)*****************************************"); System.out .println("1.開卡\t2.修改密碼\t3.積分累計\t4.積分兌換\t5.剩余積分查詢\t6.查看所有會員信息\t7.退出"); System.out .println("*******************************************************************************************************"); } // 會員卡號隨機產(chǎn)生方法 public int cardRandom() { return (int) (Math.random() * (19999999 - 10000000) + 10000000); } // 注冊時判斷會員是否存在 public boolean isCardId(int mm) { boolean isCId = false; if (listM.size() > 0) { for (Member memberC : listM) { if (mm == memberC.getCardId()) { isCId = true; return isCId; } } } return isCId; } // 判斷會員卡和密碼是否正確 public boolean isMember(int mm, String pwd) { boolean isCId = false; if (listM.size() > 0) { for (Member memberC : listM) { // System.out.println(mm+"/"+pwd+"/"+memberC.getCardId()+"/"+memberC.getPassword()); if (mm == memberC.getCardId() && pwd.equals(memberC.getPassword())) { isCId = true; member = memberC; return isCId; } } } return isCId; } // 1、開卡 public void OpenCard() { // 每次都初始化一條member對象 member = new Member(); do { member.setCardId(cardRandom()); } while (isCardId(member.getCardId())); System.out.print("請輸入注冊姓名:"); member.setName(sc.next()); System.out.print("請輸入注冊密碼:"); String password1 = sc.next(); do { if (password1.length() < 6) { System.out.print("會員密碼不能小于6位,請重新輸入注冊密碼:"); password1 = sc.next(); } } while (password1.length() < 6); member.setPassword(password1); member.setScore(100); Date data = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); member.setRegistDate(sdf.format(data)); // ms.insertMember(member); if(ms.insertMember(member)>0){ System.out.println("恭喜,開通會員卡成功!系統(tǒng)贈送您" + member.getScore() + "積分,您的會員卡號是:" + member.getCardId()); }else{ System.out.println("會員開通失??!"); } // listM.add(member); } // 2、修改密碼 public void changePassword() { System.out.print("請輸入您的會員卡號:"); int cardNum = sc.nextInt(); System.out.print("請輸入您的會員密碼:"); String cardPwd = sc.next(); if (isMember(cardNum, cardPwd)) { System.out.print("請輸入您的會員新密碼:"); member.setPassword(sc.next()); if(ms.updateMember(member)>0){ System.out.println("新密碼設(shè)置成功!"); }else{ System.out.println("新密碼設(shè)置失?。?); } } else { System.out.println("您輸入的會員卡號或密碼錯誤,無法修改密碼!"); } } // 3、積分累計 public void scoresAdd() { System.out.print("請輸入您的會員卡號:"); int cardNum = sc.nextInt(); System.out.print("請輸入您的會員密碼:"); String cardPwd = sc.next(); if (isMember(cardNum, cardPwd)) { System.out.print("請輸入本次消費金額(消費1元累計1分):"); int scoreCurrent = sc.nextInt(); member.setScore(scoreCurrent + member.getScore()); if(ms.updateMember(member)>0){ System.out.println("積分累計成功!你重新累計的積分為:" + member.getScore() + "分"); }else{ System.out.println("積分累計失敗!"); } } else { System.out.println("您輸入的會員卡號或密碼錯誤,無法累計積分!"); } } // 4、積分兌換 public void scoresConver() { System.out.print("請輸入您的會員卡號:"); int cardNum = sc.nextInt(); System.out.print("請輸入您的會員密碼:"); String cardPwd = sc.next(); if (isMember(cardNum, cardPwd)) { System.out.print("請輸入您要兌換使用的積分(100積分抵用0.1元,不足100的積分不做抵用):"); int scoreCurrent = sc.nextInt(); if (scoreCurrent < member.getScore()&&scoreCurrent>100) { member.setScore(member.getScore() - scoreCurrent); ms.updateMember(member); if(ms.updateMember(member)>0){ System.out.println("您消費金額中使用會員積分抵扣了0." + (scoreCurrent /100) + "元"); }else{ System.out.println("積分兌換失?。?); } }else if(scoreCurrent<100){ System.out.println("不滿足積分兌換規(guī)則,不足100的積分不做抵用!"); }else { System.out.println("積分不足!"); } } else { System.out.println("您輸入的會員卡號或密碼錯誤,無法進行兌換!"); } } // 5、剩余積分查詢 public void scoresRemain() { System.out.print("請輸入您的會員卡號:"); int cardNum = sc.nextInt(); System.out.print("請輸入您的會員密碼:"); String cardPwd = sc.next(); if (isMember(cardNum, cardPwd)) { System.out.println("會員信息【會員卡號:" + member.getCardId() + ",姓名:" + member.getName() + ",可用積分:" + member.getScore() + ",開卡時間:" + member.getRegistDate() + "】"); } else { System.out.println("您輸入的會員卡號或密碼錯誤,無法查詢到信息!"); } } // 6、查看所有會員信息 public void LookMembers() { int i = 0; for (Member member : listM) { i++; System.out.println("會員" + i + "信息【會員卡號:" + member.getCardId() + ",姓名:" + member.getName() + ",可用積分:" + member.getScore() + ",開卡時間:" + member.getRegistDate() + "】"); } } public void MainMethod() { //從數(shù)據(jù)庫中查全部會員信息 listM=ms.selectAllMembers(); boolean isIn = true; do { showFirst(); System.out.print("請選擇:"); switch (sc.nextInt()) { case 1: OpenCard(); break; case 2: changePassword(); break; case 3: scoresAdd(); break; case 4: scoresConver(); break; case 5: scoresRemain(); break; case 6: LookMembers(); break; case 7: isIn = false; break; } } while (isIn); } public static void main(String[] args) { MemberMgr memberMgr=new MemberMgr(); memberMgr.MainMethod(); } }
到此這篇關(guān)于Java從零實現(xiàn)超市會員管理系統(tǒng)的文章就介紹到這了,更多相關(guān)Java超市會員管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在spring?boot3中使用native?image的最新方法
這篇文章主要介紹了在spring?boot3中使用native?image?,今天我們用具體的例子來給大家演示一下如何正確的將spring boot3的應(yīng)用編譯成為native image,需要的朋友可以參考下2023-01-01java8?Stream大數(shù)據(jù)量List分批處理切割方式
這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02java并發(fā)包工具CountDownLatch源碼分析
這篇文章主要為大家介紹了java并發(fā)包工具CountDownLatch源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10java學(xué)習(xí)之JasperReport踩坑
本篇文章介紹的是在JAVA學(xué)習(xí)中JasperReport遇到的坑以及解決辦法,有需要的朋友參考下吧。2018-01-01Spring Batch讀取txt文件并寫入數(shù)據(jù)庫的方法教程
這篇文章主要給大家介紹了Spring Batch讀取txt文件并寫入數(shù)據(jù)庫的方法,SpringBatch 是一個輕量級、全面的批處理框架。這里我們用它來實現(xiàn)文件的讀取并將讀取的結(jié)果作處理,處理之后再寫入數(shù)據(jù)庫中的功能。需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04SpringBoot的@Value注解如何設(shè)置默認值
這篇文章主要介紹了SpringBoot的@Value注解如何設(shè)置默認值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02