最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java從零實(shí)現(xiàn)超市會(huì)員管理系統(tǒng)

 更新時(shí)間:2022年12月13日 09:57:01   作者:Java Fans  
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)超市會(huì)員管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

?

項(xiàng)目需求

為某超市開發(fā)一個(gè)超市會(huì)員管理系統(tǒng),實(shí)現(xiàn)會(huì)員的管理,具體實(shí)現(xiàn)功能如下:

(1)積分累計(jì)

(2)積分兌換

(3)查詢剩余積分

(4)查詢所有會(huì)員信息

(5)修改密碼

(6)開卡(注冊(cè)會(huì)員)

覆蓋知識(shí)

程序基本概念、數(shù)據(jù)類型、流程控制、順序、選擇 、循環(huán)、跳轉(zhuǎn)語句、變量、類、方法、實(shí)用類等

掌握數(shù)據(jù)庫、JDBC、三層架構(gòu)等相關(guān)知識(shí)。

掌握Druid連接池、Apache的DBUtils使用 。

開發(fā)思路

(1)明確需求

(2)編碼順序

  • 數(shù)據(jù)初始化,完成數(shù)據(jù)表創(chuàng)建,三層架構(gòu)的搭建
  • 循環(huán)完成各種超市會(huì)員管理操作
  • 菜單切換

(3)測(cè)試

開發(fā)步驟

1)、添加需要的jar包到項(xiàng)目中,將lib文件夾中的jar文件通過鼠標(biāo)右單擊選擇Build Path的方式添加到你設(shè)置的eatJar文件目錄里。

2)、創(chuàng)建database.properties文件,用來配置注冊(cè)驅(qū)動(dòng)和數(shù)據(jù)庫連接對(duì)象的相關(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層的接口和實(shí)現(xiàn)類的增刪改查方法的編寫

7)、服務(wù)層Service層的接口和實(shí)現(xiàn)類的增刪改查方法的編寫

8)、最后完成視圖層View層測(cè)試類的編寫

全部代碼展示

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的知識(shí))

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);
	// 查一個(gè)
	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);
	// 查一個(gè)
	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測(cè)試類

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 {
	// 定義一個(gè)Scanner
	Scanner sc = new Scanner(System.in);
	// 定義Member對(duì)象
	Member member = new Member();
	MemberService ms=new MemberServiceImpl();
	//從數(shù)據(jù)庫中查全部會(huì)員信息
	List<Member> listM=null;
	// 菜單選擇欄
	public void showFirst() {
		System.out
				.println("****************************************歡迎使用超市會(huì)員管理系統(tǒng)*****************************************");
		System.out
				.println("1.開卡\t2.修改密碼\t3.積分累計(jì)\t4.積分兌換\t5.剩余積分查詢\t6.查看所有會(huì)員信息\t7.退出");
		System.out
				.println("*******************************************************************************************************");
	}
	// 會(huì)員卡號(hào)隨機(jī)產(chǎn)生方法
	public int cardRandom() {
		return (int) (Math.random() * (19999999 - 10000000) + 10000000);
	}
	// 注冊(cè)時(shí)判斷會(huì)員是否存在
	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;
	}
	// 判斷會(huì)員卡和密碼是否正確
	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對(duì)象
		member = new Member();
		do {
			member.setCardId(cardRandom());
		} while (isCardId(member.getCardId()));
		System.out.print("請(qǐng)輸入注冊(cè)姓名:");
		member.setName(sc.next());
		System.out.print("請(qǐng)輸入注冊(cè)密碼:");
		String password1 = sc.next();
		do {
			if (password1.length() < 6) {
				System.out.print("會(huì)員密碼不能小于6位,請(qǐng)重新輸入注冊(cè)密碼:");
				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("恭喜,開通會(huì)員卡成功!系統(tǒng)贈(zèng)送您" + member.getScore()
					+ "積分,您的會(huì)員卡號(hào)是:" + member.getCardId());
		}else{
			System.out.println("會(huì)員開通失??!");
		}
//		listM.add(member);
	}
	// 2、修改密碼
	public void changePassword() {
		System.out.print("請(qǐng)輸入您的會(huì)員卡號(hào):");
		int cardNum = sc.nextInt();
		System.out.print("請(qǐng)輸入您的會(huì)員密碼:");
		String cardPwd = sc.next();
		if (isMember(cardNum, cardPwd)) {
			System.out.print("請(qǐng)輸入您的會(huì)員新密碼:");
			member.setPassword(sc.next());
			if(ms.updateMember(member)>0){
				System.out.println("新密碼設(shè)置成功!");
			}else{
				System.out.println("新密碼設(shè)置失??!");
			}
		} else {
			System.out.println("您輸入的會(huì)員卡號(hào)或密碼錯(cuò)誤,無法修改密碼!");
		}
	}
	// 3、積分累計(jì)
	public void scoresAdd() {
		System.out.print("請(qǐng)輸入您的會(huì)員卡號(hào):");
		int cardNum = sc.nextInt();
		System.out.print("請(qǐng)輸入您的會(huì)員密碼:");
		String cardPwd = sc.next();
		if (isMember(cardNum, cardPwd)) {
			System.out.print("請(qǐng)輸入本次消費(fèi)金額(消費(fèi)1元累計(jì)1分):");
			int scoreCurrent = sc.nextInt();
			member.setScore(scoreCurrent + member.getScore());
			if(ms.updateMember(member)>0){
				System.out.println("積分累計(jì)成功!你重新累計(jì)的積分為:" + member.getScore() + "分");
			}else{
				System.out.println("積分累計(jì)失??!");
			}
			
		} else {
			System.out.println("您輸入的會(huì)員卡號(hào)或密碼錯(cuò)誤,無法累計(jì)積分!");
		}
	}
	// 4、積分兌換
	public void scoresConver() {
		System.out.print("請(qǐng)輸入您的會(huì)員卡號(hào):");
		int cardNum = sc.nextInt();
		System.out.print("請(qǐng)輸入您的會(huì)員密碼:");
		String cardPwd = sc.next();
		if (isMember(cardNum, cardPwd)) {
			System.out.print("請(qǐng)輸入您要兌換使用的積分(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("您消費(fèi)金額中使用會(huì)員積分抵扣了0."
							+ (scoreCurrent /100) + "元");
				}else{
					System.out.println("積分兌換失??!");
				}
			}else if(scoreCurrent<100){
				System.out.println("不滿足積分兌換規(guī)則,不足100的積分不做抵用!");
			}else {			
				System.out.println("積分不足!");
			}
		} else {
			System.out.println("您輸入的會(huì)員卡號(hào)或密碼錯(cuò)誤,無法進(jìn)行兌換!");
		}
	}
	// 5、剩余積分查詢
	public void scoresRemain() {
		System.out.print("請(qǐng)輸入您的會(huì)員卡號(hào):");
		int cardNum = sc.nextInt();
		System.out.print("請(qǐng)輸入您的會(huì)員密碼:");
		String cardPwd = sc.next();
		if (isMember(cardNum, cardPwd)) {
			System.out.println("會(huì)員信息【會(huì)員卡號(hào):" + member.getCardId() + ",姓名:"
					+ member.getName() + ",可用積分:" + member.getScore()
					+ ",開卡時(shí)間:" + member.getRegistDate() + "】");
		} else {
			System.out.println("您輸入的會(huì)員卡號(hào)或密碼錯(cuò)誤,無法查詢到信息!");
		}
	}
	// 6、查看所有會(huì)員信息
	public void LookMembers() {
		int i = 0;
		for (Member member : listM) {
			i++;
			System.out.println("會(huì)員" + i + "信息【會(huì)員卡號(hào):" + member.getCardId()
					+ ",姓名:" + member.getName() + ",可用積分:" + member.getScore()
					+ ",開卡時(shí)間:" + member.getRegistDate() + "】");
		}
	}
	public void MainMethod() {
		//從數(shù)據(jù)庫中查全部會(huì)員信息
		listM=ms.selectAllMembers();
		boolean isIn = true;
		do {
			showFirst();
			System.out.print("請(qǐng)選擇:");
			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從零實(shí)現(xiàn)超市會(huì)員管理系統(tǒng)的文章就介紹到這了,更多相關(guān)Java超市會(huì)員管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java代碼里如何拼接SQL語句到mybatis的xml

    Java代碼里如何拼接SQL語句到mybatis的xml

    這篇文章主要介紹了Java代碼里拼接SQL語句到mybatis的xml操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn)

    MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn)

    本文主要介紹了MyBatis各種類型查詢數(shù)據(jù)參數(shù)綁定的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java實(shí)現(xiàn)視頻初步壓縮和解壓的代碼示例

    Java實(shí)現(xiàn)視頻初步壓縮和解壓的代碼示例

    從攝像頭讀取每一幀的圖片,用一些簡(jiǎn)單的方法將多張圖片信息壓縮到一份文件中(自定義的視頻文件),自定義解碼器讀取視頻文件,并將每幀圖片展示成視頻,本文主要介紹了Java實(shí)現(xiàn)視頻初步壓縮和解壓,需要的朋友可以參考下
    2023-10-10
  • Java?Servlet異步請(qǐng)求開啟的簡(jiǎn)單步驟

    Java?Servlet異步請(qǐng)求開啟的簡(jiǎn)單步驟

    Java servlet是大家公認(rèn)的服務(wù)器端web技術(shù)的標(biāo)準(zhǔn),包括jsp,jsf,和大量的web框架,soap,RESTful web service api,還有新聞供應(yīng),下面這篇文章主要給大家介紹了關(guān)于Java?Servlet異步請(qǐng)求開啟的簡(jiǎn)單步驟,需要的朋友可以參考下
    2022-02-02
  • Spring的事件發(fā)布與監(jiān)聽方式案例講解

    Spring的事件發(fā)布與監(jiān)聽方式案例講解

    今天去官網(wǎng)查看spring?boot資料時(shí),在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • java并發(fā)編程專題(六)----淺析(JUC)Semaphore

    java并發(fā)編程專題(六)----淺析(JUC)Semaphore

    這篇文章主要介紹了java JUC)Semaphore的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • SpringBoot 項(xiàng)目中的圖片處理策略之本地存儲(chǔ)與路徑映射

    SpringBoot 項(xiàng)目中的圖片處理策略之本地存儲(chǔ)與路徑映射

    在SpringBoot項(xiàng)目中,靜態(tài)資源存放在static目錄下,使得前端可以通過URL來訪問這些資源,我們就需要將文件系統(tǒng)的文件路徑與URL建立一個(gè)映射關(guān)系,把文件系統(tǒng)中的文件當(dāng)成我們的靜態(tài)資源即可,本文給大家介紹SpringBoot本地存儲(chǔ)與路徑映射的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2023-12-12
  • JAVA8 STREAM COLLECT GROUPBY分組實(shí)例解析

    JAVA8 STREAM COLLECT GROUPBY分組實(shí)例解析

    這篇文章主要介紹了JAVA8 STREAM COLLECT GROUPBY分組實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java 類與對(duì)象超基礎(chǔ)講解

    Java 類與對(duì)象超基礎(chǔ)講解

    類(class)和對(duì)象(object)是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型
    2022-03-03
  • java編程約瑟夫問題實(shí)例分析

    java編程約瑟夫問題實(shí)例分析

    這篇文章主要介紹了java編程約瑟夫問題實(shí)例分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論

涪陵区| 渑池县| 安新县| 瓮安县| 会泽县| 南和县| 峨眉山市| 成武县| 尤溪县| 宣武区| 固原市| 临桂县| 鄂托克旗| 阿拉善右旗| 阿巴嘎旗| 庐江县| 仙游县| 平舆县| 会理县| 壶关县| 定襄县| 平山县| 新巴尔虎右旗| 平顺县| 广宁县| 枣强县| 阳谷县| 苏尼特左旗| 隆林| 葫芦岛市| 阳春市| 昭觉县| 张家界市| 临武县| 北碚区| 泾源县| 香格里拉县| 漳州市| 郑州市| 武乡县| 隆昌县|