最近リクエストが多すぎるため、グループ 769119544 に参加してソース コードを受け取りました
目次
統合開発環境: IntelliJ IDEA (2020)、 プラグイン: Jform Designer、 データベース: MySQL 8.0、当てはまること
コース設計、大きな課題、プロジェクト演習、学習プレゼンテーションなど。
1. 機能要件
1. 住民情報の整備
住民の皆様向けの情報を閲覧できます。チェックイン時刻、チェックアウト時刻、ID番号、客室番号等を追加、削除、変更、確認等の機能を提供します。
2. 客室情報のメンテナンス
すべての客室情報を閲覧します。部屋番号、部屋の説明、空室状況などが含まれます。部屋の新規追加、部屋の削除、部屋情報の変更などの機能も必要です。
3. 部屋照会機能
部屋番号と部屋名から関連する部屋情報を直接検索します。
4. アカウント管理機能
管理者はアカウントの登録、パスワードの変更などを行うことができます。
2. データディクショナリ
1.データフローエントリ
(1) データストリーム名:ログイン情報
データ ストリーム ソース: 管理者
データの送信先: 管理システム
データストリーム構成: ユーザー名 + ユーザーパスワード
(2) データストリーム名:サブスクリプション情報
データ ストリーム ソース: トラベラーズ
データの送信先: 管理システム
データフロー構成:部屋番号+入居者名+入居者ID番号+予約日+入居日数
(3) データストリーム名:ルームステータス
データフローソース:客室ステータステーブル
データの送信先: 管理システム
データフローの構成: 部屋の現在の状態
(4) データストリーム名:チェックアウトリクエスト
データ ストリーム ソース: トラベラーズ
データの送信先: 管理システム
データ ストリームの構成: 居住者名 + 居住者 ID 番号 + ステータスの説明
2.ファイル入力
(1) データファイル名:管理者テーブル
簡単な説明: ユーザー情報を記録する
ファイル内容: 管理者テーブル = ユーザー名 + ユーザーパスワード
(2) データファイル名:チェックイン情報
簡単な説明: 顧客のチェックイン情報を保存する
ファイル内容:お客様番号+お客様氏名+お客様ID番号+チェックイン部屋番号+予定日+チェックアウト時刻+宿泊日数
(3) データファイル名:部屋情報
簡単な説明: 部屋の情報を記録する
ファイル内容: 部屋番号 + 部屋タイプ + 部屋の説明 + 部屋ステータス番号 + 部屋の場所
(4) データファイル名:部屋タイプ
簡単な説明: 保管室タイプ情報
ファイル内容:部屋タイプ番号+部屋タイプ名+部屋標準面積+部屋標準ベッド+標準料金+タイプ説明
(5) データファイル名:客室ステータス
簡単な説明: 保管室のステータス
ファイル内容:部屋番号+部屋ステータス
3. ユースケース図
4. データフロー図
五、ER図
6. システムの枠組み
7、データベース設計
1. 部屋情報フォーム(部屋)
2. チェックイン情報フォーム(roomIn)
3. 管理者情報フォーム
8. インターフェースの設計
9、コード表示
1. データテーブルオブジェクト層(ドメイン層)
1.1. ルームオブジェクトの初期化
public class Room {
private String roomid;//房间编号
private String housename;//名称
private String homeloc;//位置
private int housecoast;//标准收费
private String housesnull;//客房空闲情况
private String housesclean;//客房清洁状况
private String housesdesc;//类型描述
public Room() {
}
public Room(String roomid, String housename, String homeloc, int housecoast, String housesnull, String housesclean, String housesdesc) {
this.roomid = roomid;
this.housename = housename;
this.homeloc = homeloc;
this.housecoast = housecoast;
this.housesnull = housesnull;
this.housesclean = housesclean;
this.housesdesc = housesdesc;
}
public String getRoomid() {
return roomid;
}
public void setRoomid(String roomid) {
this.roomid = roomid;
}
public String getHousename() {
return housename;
}
public void setHousename(String housename) {
this.housename = housename;
}
public String getHomeloc() {
return homeloc;
}
public void setHomeloc(String homeloc) {
this.homeloc = homeloc;
}
public int getHousecoast() {
return housecoast;
}
public void setHousecoast(int housecoast) {
this.housecoast = housecoast;
}
public String getHousesnull() {
return housesnull;
}
public void setHousesnull(String housesnull) {
this.housesnull = housesnull;
}
public String getHousesclean() {
return housesclean;
}
public void setHousesclean(String housesclean) {
this.housesclean = housesclean;
}
public String gethousesdesc() {
return housesdesc;
}
public void sethousesdesc(String housesdesc) {
this.housesdesc = housesdesc;
}
@Override
public String toString() {
return "Room{" +
"roomid='" + roomid + '\'' +
", housename='" + housename + '\'' +
", homeloc='" + homeloc + '\'' +
", housecoast=" + housecoast +
", housesnull='" + housesnull + '\'' +
", housesclean='" + housesclean + '\'' +
", housesdesc='" + housesdesc + '\'' +
'}';
}
}
1.2. 旅客オブジェクトの初期化
public class RoomIn {
private String username;
private String idcard;
private String roomId;
private String datain;
private String dataout;
private int dataNum;
public String getRoomId() {
return roomId;
}
public void setRoomId(String roomId) {
this.roomId = roomId;
}
public RoomIn() {
}
public RoomIn(String username, String idcard,String roomId, String datain, String dataout, int dataNum) {
this.username = username;
this.idcard = idcard;
this.datain = datain;
this.dataout = dataout;
this.dataNum = dataNum;
this.roomId=roomId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public String getDatain() {
return datain;
}
public void setDatain(String datain) {
this.datain = datain;
}
public String getDataout() {
return dataout;
}
public void setDataout(String dataout) {
this.dataout = dataout;
}
public int getdataNum() {
return dataNum;
}
public void setdataNum(int dataNum) {
this.dataNum = dataNum;
}
@Override
public String toString() {
return "RoomIn{" +
"username='" + username + '\'' +
", idcard='" + idcard + '\'' +
", roomId='" + roomId + '\'' +
", datain=" + datain +
", dataout=" + dataout +
", dataNum=" + dataNum +
'}';
}
}
1.3、管理者オブジェクトの初期化
public class User {
private String id;
private String password;
public User() {
}
public User(String id, String password) {
this.id = id;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", password='" + password + '\'' +
'}';
}
}
2. データアクセスオブジェクト層(dao層)
2.1. 部屋に関する情報
import com.keshe.domain.Room;
import com.keshe.util.DBUtil;
import java.util.List;
public class RoomDao {
//插入房间信息
public int insert(Room rm){
String sql ="insert room values(?,?,?,?,?,?,?)";
int count= DBUtil.update(sql,rm.getRoomid(),rm.getHousename(),rm.getHomeloc(),rm.getHousecoast(),rm.getHousesnull(),rm.getHousesclean(),rm.gethousesdesc());
return count;
}
//显示房间信息
public List<Room> select(){
String sql="select * from room";
List<Room> ri =DBUtil.query(sql,Room.class);
return ri;
}
//根据id查询房间用于删除数据
public List<Room> selectId(String roomid ){
String sql="select * from room where roomid=?";
List<Room> ri =DBUtil.query(sql,Room.class,roomid);
return ri;
}
//根据房间名查询房间
public List<Room> selectName(String housesname ){
String sql="select * from room where housename=?";
List<Room> ri =DBUtil.query(sql,Room.class,housesname);
return ri;
}
//根据id删除数据
public int delete(String id){
String sql="delete from room where roomid=?";
int count=DBUtil.update(sql,id);
return count;
}
//根据id修改数据
public int update(String id,String housename,String homeloc,int housecoast,String housesnull,String housesclean,String housesdesc){
String sql="update room set housename=?,homeloc=?,housecoast=?,housesnull=?,housesclean=?,housesdesc=? where roomid=?";
int count= DBUtil.update(sql,housename,homeloc,housecoast,housesnull,housesclean,housesdesc,id);
return count;
}
//根据id修改房间空闲状态
public int updateId(String id,String housesnull){
String sql="update room set housesnull=?where roomid=?";
int count= DBUtil.update(sql,housesnull,id);
return count;
}
}
2.2. 旅客情報
import com.keshe.domain.RoomIn;
import com.keshe.util.DBUtil;
import java.util.List;
public class RoomInDao {
//插入入住信息
public int insert(RoomIn ri){
String sql="insert roomIn(username,idcard,roomId,datain,dataout,dataNum) values (?,?,?,?,?,?)";
int count= DBUtil.update(sql,ri.getUsername(),ri.getIdcard(),ri.getRoomId(),ri.getDatain(),ri.getDataout(),ri.getdataNum());
return count;
}
//修改入住天数
public int uptateDateNum(int dataNum,String idcard){
String sql="uptate roomIn set dataNum=? where username=?";
int count=DBUtil.update(sql,dataNum,idcard);
return count;
}
//修改退房日期(退房)
public int updateDateout(String dateout,String idcard)
{
String sql="update roomIn set dataout=? where idcard=?";
int count=DBUtil.update(sql,dateout,idcard);
return count;
}
//删除入住信息
public int delete(String idcard){
String sql="delete from roomIn where idcard=?";
int count=DBUtil.update(sql,idcard);
return count;
}
//查看入住名单
public List<RoomIn> select(){
String sql="select * from roomIn";
List<RoomIn> ri =DBUtil.query(sql,RoomIn.class);
return ri;
}
//根据姓名查询入住名单信息
public List<RoomIn> selectUserName(String username){
String sql="select * from roomIn where username=?";
List<RoomIn> ri =DBUtil.query(sql,RoomIn.class,username);
return ri;
}
}
2.3. 管理者情報
import com.keshe.domain.User;
import com.keshe.util.DBUtil;
import java.util.List;
public class UserDao {
//添加账号至数据库
public int insertUSer(User user){
String sql="insert user values(?,?)";
int count= DBUtil.update(sql,user.getId(),user.getPassword());//返回影响数据数目
return count;
}
//查询
public List<User> selectId(String id){
String sql = "select * from user where id=?";
List<User> list=DBUtil.query(sql,User.class,id);
return list;
}
//修改密码
public int updateUser(String id,String passworld){
String sql="update user set password=? where id=?";
int count= DBUtil.update(sql,passworld,id);
return count;
}
}
3. ユーティリティパッケージ
3.1、JDBC対話型データベース(DBUtil)
import com.keshe.domain.Room;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class DBUtil {
//数据库用户名
private static final String USERNAME = "root";
//数据库密码
private static final String PASSWORD = "root456";
//驱动信息
private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
//数据库地址
private static final String URL = "jdbc:mysql://43.138.53.7/room"
+ "?serverTimezone=UTC&useSSL=false"
+"&useUnicode=true&characterEncoding=UTF-8";
//private static Connection connection;
//private static PreparedStatement pstmt;
//private static ResultSet resultSet;
static{
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection connection = null;
try {
//Class.forName(DRIVER);
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
public static void close(Connection connection,PreparedStatement pstmt,ResultSet resultSet){
try {
if(resultSet!=null){
resultSet.close();
}
if(pstmt!=null){
pstmt.close();
}
if(connection!=null){
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
将查询到的结果集转换成自定义类的对象,并存在在List中
<T>声明此方法持有一个类型T,此方法为一个泛型方法
Class<T> cla指明泛型T的具体类型
params是一个Object类型的数组
*/
public static <T> List<T> query(String sql, Class<T> cla, Object... params){
Connection conn = DBUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
List<T> list = null;
try{
//预编译
ps = conn.prepareStatement(sql);
if(params != null){
for(int i = 0; i < params.length; ++i){
//替换指定位置的占位符
ps.setObject(i+1, params[i]);
}
}
//执行查询
rs = ps.executeQuery();
//获取描述结果集基础信息(列数、数据类型、字段)的meta元数据
ResultSetMetaData rsd = rs.getMetaData();
//返回值
list = new ArrayList<T>();
while (rs.next()){
//实例化一个泛型类
//T t = cla.newInstance();
T t = cla.getDeclaredConstructor().newInstance(); // 创建对象
for (int i = 0; i < rsd.getColumnCount(); ++i){
//获取列名,sql语句中有别名返回别名,否则返回值与getColumnName()方法相同
String columnName = rsd.getColumnLabel(i+1);
//根据列名取值
Object columnValue = rs.getObject(columnName);
//根据索引取值
//Object value = rs.getObject(i+1);
//根据列名获取属性
Field field;
field = cla.getDeclaredField(convertFormat(columnName));
//开启私有变量访问权限
field.setAccessible(true);
//给对象t的变量赋值
field.set(t, columnValue);
}
list.add(t);
}
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
// 关闭资源
DBUtil.close(conn, ps, rs);
}
}
//表中字段有可能有下划线,下划线命名转小驼峰命名
public static String convertFormat(String source){
String[] strings = source.split("_");
StringBuffer sf = new StringBuffer(strings[0]);
for(int i = 1; i < strings.length; ++i){
sf.append(strings[i].substring(0,1).toUpperCase() + strings[i].substring(1));
}
return sf.toString();
}
/**
* 对任意表的一个非查询
*
* @param sql
* @param objects
* @return
*/
public static int update(String sql, Object... objects) {
Connection conn = DBUtil.getConnection();
PreparedStatement ps = null;
int i = 0;
try {
// 预编译
ps = conn.prepareStatement(sql);
// 给sql赋值
for (int j = 0; j < objects.length; j++) {
ps.setObject(j + 1, objects[j]);
}
// 执行
i = ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
DBUtil.close(conn, ps, null);
}
return i;
}
public static void main(String[] args) {
String sql="select * from room";
List<Room> roomList=DBUtil.query(sql, Room.class);
for(Room r:roomList){
System.out.println(r);
}
// String sql1="delete from Room where roomid=?";
// int i=DBUtil.update(sql1,4);
// System.out.println(i);
}
}
3.2. リアルタイム (DateUtil)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
private DateUtils(){}//防止外界对象默认无参构造
//将日期转化为指定格式的字符串(静态方法,用类名即可访问)
public static String dateToString(Date date,String format){
SimpleDateFormat s = new SimpleDateFormat(format);//指定格式对象创建
String sb=s.format(date);//将传入的日转化为指定格式并转换为字符串
return sb;
}
//将字符串解析为指定的日期格式
public static Date stringToDate(String s,String format) throws ParseException {
SimpleDateFormat dd=new SimpleDateFormat(format);
Date d=dd.parse(s);//parse将指定的字符串解析为时间格式
return d;
}
}
4. ビジネス層(サーバー層)
4.1. ルーム (RoomController)
import com.keshe.dao.RoomDao;
import com.keshe.domain.Room;
import java.util.List;
public class RoomContorller {
//显示房间信息至table
public String[][] showALL() {
RoomDao rd = new RoomDao();
List<Room> allRoom = rd.select();
String table[][] = new String[allRoom.size()][8];
for (int i = 0; i < allRoom.size(); i++) {
table[i][0] = allRoom.get(i).getRoomid();
table[i][1] = allRoom.get(i).getHousename();
table[i][2] = allRoom.get(i).getHomeloc();
table[i][3] = Integer.toString(allRoom.get(i).getHousecoast());
table[i][4] = allRoom.get(i).getHousesnull();
table[i][5] = allRoom.get(i).getHousesclean();
table[i][6] = allRoom.get(i).gethousesdesc();
table[i][7] = null;
}
return table;
}
//添加客房信息
public int addRoom(String roomid, String housename, String homeloc, int housecoast, String housesnull, String housesclean, String housesdesc) {
String coast = Integer.toString(housecoast);
int count = 0;
if (roomid.equals("") || housename.equals("") || homeloc.equals("") || coast.equals("") || housesnull.equals("") || housesclean.equals("") || housesdesc.equals("")) {
count = -1;
}
Room rm = new Room(roomid, housename, homeloc, housecoast, housesnull, housesclean, housesdesc);
RoomDao rc = new RoomDao();
count = rc.insert(rm);//调用数据库
return count;
}
//查询客房信息(根据房间类型)
public String[][] selectName(String name) {
RoomDao rd = new RoomDao();
List<Room> allRoom = rd.selectName(name);
String table[][] = new String[allRoom.size()][8];
for (int i = 0; i < allRoom.size(); i++) {
table[i][0] = allRoom.get(i).getRoomid();
table[i][1] = allRoom.get(i).getHousename();
table[i][2] = allRoom.get(i).getHomeloc();
table[i][3] = Integer.toString(allRoom.get(i).getHousecoast());
table[i][4] = allRoom.get(i).getHousesnull();
table[i][5] = allRoom.get(i).getHousesclean();
table[i][6] = allRoom.get(i).gethousesdesc();
table[i][7] = null;
}
System.out.println("房间类型查询成功!");
return table;
}
//查询客房信息(根据编号类型)
public String[][] selectId(String id) {
RoomDao rd = new RoomDao();
List<Room> allRoom = rd.selectId(id);
String table[][] = new String[allRoom.size()][8];
for (int i = 0; i < allRoom.size(); i++) {
table[i][0] = allRoom.get(i).getRoomid();
table[i][1] = allRoom.get(i).getHousename();
table[i][2] = allRoom.get(i).getHomeloc();
table[i][3] = Integer.toString(allRoom.get(i).getHousecoast());
table[i][4] = allRoom.get(i).getHousesnull();
table[i][5] = allRoom.get(i).getHousesclean();
table[i][6] = allRoom.get(i).gethousesdesc();
table[i][7] = null;
}
System.out.println("编号查询成功!");
return table;
}
//修改客房信息
public int updateRoom(String id, String housename, String homeloc, int housecoast, String housesnull, String housesclean, String housesdesc) {
RoomDao rd = new RoomDao();
String coast = Integer.toString(housecoast);
int count = 0;
if (id.equals("") || housename.equals("") || homeloc.equals("") || coast.equals("") || housesnull.equals("") || housesclean.equals("") || housesdesc.equals("")) {
count = -1;
return count;
}
count = rd.update(id, housename, homeloc, housecoast, housesnull, housesclean, housesdesc);
return count;
}
//删除客房
public int deleteRoom(String id){
RoomDao rd=new RoomDao();
int count=0;
if(id.equals("")){
count=-1;
return count;
}
count=rd.delete(id);
return count;
}
}
4.2. 乗客 (RoomInController)
import java.util.Date;
import java.util.List;
import com.keshe.dao.RoomDao;
import com.keshe.dao.RoomInDao;
import com.keshe.domain.Room;
import com.keshe.domain.RoomIn;
import com.keshe.util.DateUtils;
public class RoomInContorller {
//获取时间
public RoomInContorller() {
}
public String getTime() {
Date d = new Date();
String time = DateUtils.dateToString(d, "yyyy-MM-dd HH:mm:ss");
return time;
}
//显示入住信息至table
public String[][] showALL() {
RoomInDao ri = new RoomInDao();
List<RoomIn> allRoomIn = ri.select();
String table[][] = new String[allRoomIn.size()][6];
for (int i = 0; i < allRoomIn.size(); i++) {
table[i][1] = allRoomIn.get(i).getUsername();
table[i][2] = allRoomIn.get(i).getIdcard();
table[i][0] = allRoomIn.get(i).getRoomId();
table[i][3] = allRoomIn.get(i).getDatain();
table[i][4] = allRoomIn.get(i).getDataout();
table[i][5] = Integer.toString(allRoomIn.get(i).getdataNum());
}
return table;
}
//新旅客入住信息输入
public int insertRoomIn(String roomid, String username, String idcard, int dataNum) {
int count = 0;
if (roomid.equals("") || username.equals("") || idcard.equals("") || dataNum == 0) {
count = -1;
}
//在客房表中查询是否有该客房
RoomDao rd = new RoomDao();
List<Room> room = rd.select();
for (int i = 0; i < room.size(); i++) {
if (room.get(i).getRoomid().equals(roomid)) {
if (room.get(i).getHousesnull().equals("是")) {
String datain = getTime();
String dataout = "暂未退房";
RoomIn r = new RoomIn(username, idcard, roomid, datain, dataout, dataNum);
RoomInDao ri = new RoomInDao();
count = ri.insert(r);//调用数据库
int test = rd.updateId(roomid, "否");
if (test != 0) {
System.out.println("修改客房状态成功!");
}
return count;
}else{
System.out.println("该客房已被占用!");
return -2;
}
}
}
System.out.println("客房中无该客房信息,不可入住");
return count;
}
//旅客退房
public int updateRoomInNull(String idcard) {
RoomInDao ri = new RoomInDao();
List<RoomIn> allRoomIn = ri.select();
int count = 0;
if (idcard.equals("")) {
System.out.println("输入数据后再搜索!");
return -1;
}
for (int i = 0; i < allRoomIn.size(); i++) {
if ((allRoomIn.get(i).getIdcard()).equals(idcard)) {
String dateout = getTime();
count = ri.updateDateout(dateout, idcard);
RoomDao rd = new RoomDao();
int test = rd.updateId(allRoomIn.get(0).getRoomId(), "是");
if (test != 0) {
System.out.println("修改客房状态成功!");
} else {
System.out.println("修改客房状态失败");
}
return count;//退房办理成功
}
}
return count;
}
}
4.3. 管理者 (UserContorller)
import com.keshe.dao.UserDao;
import com.keshe.domain.User;
import java.util.List;
public class UserContorller {
//注册功能
public int login(String id, String password) {
if (id.equals("") || password.equals("")) {
return 0;
}
//查验账号是否存在
UserDao us = new UserDao();
List<User> list = us.selectId(id);//查询数据库中是否有该账号
System.out.println("用户名:" + id + "\n密码:" + password);
if (list.size() == 0) {
//账号不存在
User user = new User(id, password);
int i = us.insertUSer(user);
if (i == 1) {
System.out.println("注册成功");
return 1;
} else {
System.out.println("注册失败");
return -1;
}
} else {
System.out.println("账号已存在");
return -2;
}
}
//登录
public int login_in(String id, String password) {
UserDao us = new UserDao();
List<User> list = us.selectId(id);//查询数据库中是否有该账号
System.out.println("用户名:" + id + "\n密码:" + password);
if (id.equals("") || password.equals("")) {
return 0;
}
if (list.size() == 0) {
System.out.println("当前无该账号,请先注册");
} else {
User user = list.get(0);
if (user.getPassword().equals(password)) {
System.out.println("登录成功");
return 1;
} else {
System.out.println("登录失败");
return -1;
}
}
return -1;
}
//修改密码
public int updatePassword(String id,String olePassword,String newPassword){
UserDao us=new UserDao();
int count=0;
List<User> user= us.selectId(id);
if(id.equals("")||olePassword.equals("")||newPassword.equals("")){
return -2;
}
if(user.size()==0){
return -3;
}
if(user.get(0).getPassword().equals(olePassword)){
count=us.updateUser(id,newPassword);
return count;
}else{
System.out.println("原密码错误");
return -1;
}
}
}
5. データ表示層(JSP層)
此处代码过多,需要者联系博主私发~~~~~
6. テスト層(テスト)
import com.keshe.jsp.Login;
public class test {
public static void main(String[] args) {
new Login().setVisible(true);
}
}