怎样为租车网专门设计数据库系统

怎样为租车网专门设计数据库系统,第1张

1. 租车公司有多个租车门店,分布于多个不同的地区,并有各自的租车电话。

2. 每个租车门店有多辆汽车可供租赁。

3. 供租赁的车辆需要登记车辆识别代号(VIN),购入时间,所属门店,车辆型号,车辆状态(可租Ready,维修中Repair,租出Inuse,无效Inactive)

4. 车辆的租用费用基本由车辆型号和日期类型(平日,周末,还是节假日)来决定。

5. 顾客在订车前需先进行注册,包括姓名,身份z号,驾照号,性别,手机号,固定电话,家庭住址,Email。

6. 注册顾客可通过系统下租车单,预约某车型,若干天的租赁(预约期最远为6个月)。

7. 租车单需记录顾客编号,车辆编号,租赁起始日期,租赁结束日期,提车门店,还车门店,租赁费用,预付款金额,订单状态(输入Entered,提交Booked,预约Reserved,使用中Inuse,交还Returned,取消Cancelled)。注:暂不提供送车上门和上门取车服务。

对于上述需求,比较明显的需创建的表有:车辆(Table_Car),门店(Table_Store),顾客(Table_Customer),订单(Table_Order)。

除此之外,车辆型号,车辆状态,日期类型和订单状态分别创建成四张枚举表Table_CarCategory,Table_CarStatus,Table_DateType,Table_OrderStatus。

还应有一张租车价位对照表(Table_BasePrice),其中会包含两个外键分别指向Table_CarCategory,Table_DateType。

简单表关系图如下:

大部分字段的含义大家可以从命名中猜测到。其中需要注意的有两点:

1. 这一设计中有4张枚举表(Table_DateType,Table_CarCategory,Table_OrderStatus,Table_CarStatus),在实际的信息系统或业务系统中这样的枚举表可能非常多。把这些枚举表整合到一张配置表中会带来哪些好处与哪些坏处?是否还有其他解决方案?大家可以进行思考。

2. 租车价位对照表在图中被设计成Table_BasePrice。其主键为一联合键,包括CarCategory_ID(表明车型,如:乐风 1.6 MT),DateType_ID(表明是平日,周末或节日),BasePrice_StartDate(表明从哪个时间点开始顾客在系统页面看到新的价格),其中CarCategory_ID,DateType_ID同时为外键。这是一种设计方式。

另有2种可选的设计方式:

待选方案1. 把Table_BasePrice中的DateType_ID去除,Table_BasePrice只存某种车型的初始租价。在Table_DateType中多加一列DateType_AdjustRate,存放一个大于等于1的比率,如:平日比率为1.0,双休日为1.1。某一日的基本租价为:比率×初始租价。

待选方案2. 在待选方案1的基础上,直接去除Table_BasePrice表。把BasePrice_Price放到Table_CarCategory中(可改名为CarCategory_Price)。其他修改和方案1相同。

这些方案会影响到系统使用的灵活性,易用性和可追溯性。大家可以对这些方案的优点和缺点进行思考和讨论。

可以向到就近的派出所查询一下你的新的身份z是否已经上传全国人口信息网,如果已经上传了,说明对方用的互联网数据未更新。如果派出所查询不到你的信息已经上传全国人口信息网,说明你转户籍时户籍部门未及时上传,可以要求及时上传数据。(但是估计这个可能性不大,应该属于前一种情况)

这是我以前写的系统登录框的login

package java1

import java.awt.*

import java.awt.event.*

import java.sql.*

import java.util.*

import javax.swing.*

import javax.swing.event.*

import java.awt.Rectangle

import java.awt.Font

public class login extends JFrame

{

public login() {

try {

jbInit()

}

catch (Exception ex) {

ex.printStackTrace()

}

}

public static void main(String[] args)

{

login frm=new login()

frm.setBounds(300,200,300,260)

frm.setVisible(true)

}

private void jbInit() throws Exception {

this.getContentPane().setLayout(null)

jLabel1.setForeground(Color.red)

jLabel1.setText("用户名")

jLabel1.setBounds(new Rectangle(25, 72, 68, 29))

jButton2.setBounds(new Rectangle(142, 159, 81, 30))

jButton2.setText("取消")

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

jButton2_actionPerformed(e)

}

})

jButton1.setBounds(new Rectangle(38, 159, 81, 29))

jButton1.setText("确定")

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

jButton1_actionPerformed(e)

}

})

jTextField1.setBounds(new Rectangle(109, 79, 136, 23))

jPasswordField1.setBounds(new Rectangle(109, 115, 136, 23))

this.getContentPane().add(jLabel1)

jLabel3.setFont(new java.awt.Font("隶书", Font.PLAIN, 24))

jLabel3.setText("学 生 考 试 系 统")

jLabel3.setBounds(new Rectangle(22, 15, 268, 47))

this.getContentPane().add(jTextField1)

this.getContentPane().add(jLabel2)

this.getContentPane().add(jButton2)

this.getContentPane().add(jButton1)

this.getContentPane().add(jLabel3)

this.getContentPane().add(jPasswordField1)

jLabel2.setForeground(Color.red)

jLabel2.setText("密码")

jLabel2.setBounds(new Rectangle(26, 112, 68, 29))

}

JLabel jLabel1 = new JLabel()

JLabel jLabel2 = new JLabel()

JTextField jTextField1 = new JTextField()

JButton jButton1 = new JButton()

JButton jButton2 = new JButton()

JLabel jLabel3 = new JLabel()

JPasswordField jPasswordField1 = new JPasswordField()

main2 wo=new main2()

int sum

//判断权限的方法

public void success()

{

try{

ResultSet rs1

String s1="select * from 管理权限 where name='"+jTextField1.getText()+"' and password='"+jPasswordField1.getText()+"'"

rs1=sqlcx.Rs_jiluji(s1)

rs1.first()

sum=Integer.parseInt((String)(rs1.getString(3)))

System.out.println(sum)

very()

}

catch(Exception c){System.out.println("success error")}

}

//根据权限设置窗口

public void very()

{

if (sum==1)

{JOptionPane.showOptionDialog(this, "您现在是以教师权限登陆", "登陆信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

}

else

{

JOptionPane.showOptionDialog(this, "你现在是以学生权限登陆", "登陆信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

wo.jButton2.setVisible(false)

wo.jButton3.setVisible(false)

wo.jButton4.setVisible(false)

wo.jButton5.setVisible(false)

wo.jButton6.setVisible(false)

wo.jButton7.setVisible(false)

wo.jButton8.setVisible(false)

wo.jMenu2.setVisible(false)

wo.jMenu3.setVisible(false)

wo.jMenu4.setVisible(false)

}

}

public void jButton1_actionPerformed(ActionEvent e)

{

//判断用户名是否为空

if (jTextField1.getText().length() == 0) {

JOptionPane.showOptionDialog(this, "用户名不能为空", "错误信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

}

//判断密码是否为空

else if (jPasswordField1.getText().length()==0)

{

JOptionPane.showOptionDialog(this,"密码不能为空", "错误信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

}

else

{

try

{

ResultSet rs//声明记录集

String sql="select * from 管理权限 where name='"+jTextField1.getText()+"'"

rs = sqlcx.Rs_jiluji(sql)

if (rs.next())

{

if(jPasswordField1.getText().equals(rs.getString(2)))

{

success()

wo.setBounds(60,40,700,600)

wo.setVisible(true)

this.dispose()

}

else

{

JOptionPane.showOptionDialog(this,"密码错误", "错误信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

}

}

else

{

JOptionPane.showOptionDialog(this,"没有所要找的用户名", "错误信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

}

}

catch(Exception c){

JOptionPane.showOptionDialog(this,"连接数据库失败", "错误信息"

, JOptionPane.DEFAULT_OPTION,

JOptionPane.ERROR_MESSAGE,

null, null, null)

}

}

}

public void jButton2_actionPerformed(ActionEvent e) {

System.exit(0)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10699598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存