1、中南民族大学计算机科学学院课程设计报告课 程 软件工程导论 题 目 停车场管理系统年 级 2013级 分组号学 号姓 名成绩等级6201321092107蔡磊201321092118罗京201321092101叶菁烜201321092099丁其鑫指导教师 刘卫平 2015年 12 月15 日38 摘 要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。本系统是在管理信息系统的理论和方法指导下、数据库技术支持下完成的。本文在
2、结构上首先论述了程序设计目的和意义,然后叙述了开发环境、开发平台以及数据库技术,接着用图片、说明和代码的方式介绍了系统的整体规划,接下来是系统在具体实现中的详细内容,最终本系统能够完成信息的添加、修改、删除、查询等功能,本系统界面友好,操作简单,比较实用,思路缜密严谨,管理起来方便快捷,能有效的达到停车场车位的管理的目的。关键词:Myeclipse,SQL server2008,界面,权限目 录摘 要2目 录31 绪 论41.1 设计目的51.2 开发工具选择51.3 开发环境51.4 本报告的主要内容62 需求分析621系统任务描述62.1.1系统目标62.1.2系统设计与功能分析72.1.
3、3性能需求分析7 2.1.4开发环境和软件722 系统概要设计7 2.2.1 数据需求7 2.2.1.1 数据字典7 2.2.1.2 数据流图8 2.2.2 功能需求1023 系统详细设计102.3.1 概念结构设计102.3.2 逻辑结构设计122.3.3 物理结构设计132.3.4 系统功能设计143 总体设计153.1设计概述153.2系统总体结构及功能模块划分153.2.1信息查询模块153.2.2信息管理模块163.4安全保密设计163.4.1用户登录安全性174 详细设计174.1概述174.2系统程序流程图184.3系统主要功能模块简介184.3.1系统登录184.3.2信息查询
4、模块184.3.3信息管理模块19 4.3.4管理员信息管理模块20 4.3.5信息管理模块21 5 系统测试及难点分析235.1 公共类代码设计235.2 登录界面代码设计265.3 查询模块代码设计275.4 添加模块代码设计285.5 更新模块代码设计295.6 删除模块代码设计32结 论32参考文献331 绪 论人类有几千年的历史,计算机从产生到现在只不过50多年,而网络的迅速发展也不过10年的时间。但是,计算机和网络对社会的影响已经迅速扩大,甚至在改变人们的生活。特别是90年代以来,多媒体和网络技术的飞速发展正在以惊人的速度改变着人们的工作方式、交往方式和生活方式。正像著名的未来学家
5、尼葛洛庞帝(1997)所说的:“数字不再只和计算有关,它决定我们的生存。”科学技术是第一生产力,是最先进的生产力。现在,已经没有人怀疑信息技术的发展将会引起人类社会全面和深刻的变革,使人类社会由工业社会迈向信息社会。目前,在社会各个方面都呈现出了与工业社会显著不同的特点。网上书店,网上医院,网上学校,网上购物,网上银行,政府上网等新事物如雨后春笋般涌现出来,对人们的传统生活方式、工作方式产生极大的冲击。使人们感受到技术发展的脉搏和信息时代前进的步伐。随着车辆生产的规模不断扩大,车辆数量急剧增加,。面对停车难,混乱的问题需要有停车管理系统来提高停车管理工作的效率。通过这样的系统可以做到信息的规范
6、管理、科学统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。1.1 设计目的本课程设计的目的是使学生能熟练掌握简单的简单Swing窗体应用程序的设计和数据库的应用,希望通过本次课程设计锻炼学生使用java语言解决实际问题的能力。1.2 开发工具选择本系统后台数据库采用Microsoft SQL Server 2008数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Son公司的Myeclipse作为主要开发工具,可与SQL Server 2008数据库无缝链接。1.3 开发环境系统开发平台:Myeclipse系统开发语言:java数据
7、库管理软件:SQL Server 20081.4 本报告的主要内容本报告详细的介绍了停车管理系统的开发过程,主要涉及到的工作如下:系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行与测试。2 需求分析需求分析是一组活动的总称,作为系统分析员,必须协同软件用户共同完成。而需求分析的任务是定义待开发的软件的功能、性能等指标。首先要了解用户的相关事务,如果你给一家网站做在线书店系统,除了参考现在已经存在的类似和相关的系统外,你还需要通过用户的演示、讲解和有关文档,与用户进行交流协商。在这个过程中,可以提出自己有建设性的想法和建议,只有这样,用户和系统设计人员才会在系统提供
8、的事务上达成一致,这对于软件来说是相当重要的。其次要分析用户的事务流程,前面了解的用户事务只是一些离散的事务活动,而事务流程是一种重要的信息,比如用户登录这个流程,他需要经历用户名和密码的输入,正确用户类型的选择这些活动,然后将了解到的用户活动加以整理并按照这些活动所固有的次序形成业务流程。还要了解用户对软件的期望值,除了需要能够正确处理用户的事务外,还需要了解用户对系统的其他需求,比如系统的安全性。这些对于用户而言也显得尤为重要。最后整理出用户需求并评审需求。21系统任务描述系统模块的设计应该遵循整个系统总体设计思路,基于java开发工具与数据库SQL设计,主要完成的设计如下:2.1.1系统
9、目标(1) 根据车辆的实际情况实现车辆的出入库(2) 根据车库的实际情况管理车库,比如车库的剩余大小(3) 对基本信息完成增加、删除、修改时,需注意表与表之间的关联(4) 出库后根据小时来收费,并计算出总共的时间2.1.2系统设计与功能分析 停车场管理系统,可用于停车场对车辆信息管理,查询,更新与维护,使用方便,易用性强,图形界面清晰明了。该软件用java语言编写,用SQLServer2008数据库作为后台的数据库进行信息的存储,用SQL语句完成车辆信息的添加,查询,修改,删除的操作以及车辆的录入,修改,删除等。用ODBC驱动实现前台Java与后台SQL数据库的连接。Java语言跨平台性强,可
10、以在windows,linux,ubuntu等系统下使用,方便简单,安全性好。SQLServer2008数据库高效安全,两者结合可相互利用各自的优势。该系统实现的大致功能:1 用户登陆界面。该界面可以选择使用者的身份,“管理员,普通用户”。不同的身份有不同的操作界面和功能权限。ID号和密码输入正确即可登录。普通管理界面。提供了普通用户信息的查询,修改登录密码等功能。2 管理员界面。提供了对车辆信息的查询,添加,修改,删除。修改密码等功能。拥有最高的权限。允许添加普通用户信息。3 登录的用户信息存储在SQL数据库的users这个表中保证了本学生管理系统的安全性。2.1.3性能需求分析(1) 登录
11、、用户界面需求:简洁、易懂、易用、友好的用户界面。(2) 安全保密性需求:只有凭借用户名和密码登陆系统,才能进行信息的管理等。22 系统概要设计2.2.1数据需求:2.2.1.1数据字典实体属性表:实体属性管理员管理员ID,登录密码普通用户车牌号,姓名,密码,卡类型,卡余额,电话,卡号管理员信息表:字段名 类型空值约束条件管理员ID varchar(10)not null主键登录密码varchar(10)not null学生表:字段名 类型空值约束条件卡号int not null主键姓名varchar(30)not null卡类型char(2)电话varchar(30)not null卡余额c
12、har(10) 登录密码Varchar(30)not null2.2.1.2 数据流图第0层第一层:第二层: 2.2.2功能需求:包括车辆进出管理与系统管理等功能模块,可根据车辆停放时间及收费标准自动收费。用户需要事先办理停车卡并充值,停车卡分优惠卡和普通卡两类。车场管理:车辆入场、车辆出场;信息查询:某时间段的出入场信息,当前在场信息,车辆历史停车记录及收费信息;信息维护:用户及停车卡信息维护、充值等;系统管理:车位信息,计费标准等。系统包含两类用户:管理员用户和普通用户。管理员可以使用系统所有功能,普通用户只能查询车辆历史记录、用户信息、停车卡充值,查询计费标准。23系统详细设计2.3.1
13、概念结构设计ER图 2.3.3物理结构设计数据库关系图:完成系统中数据表的结构设计。例如:用户表用户表:users字段名称数据类型可空默认值说明cardidint不可主键,用户的停车卡号nameNvarchar(20)不可用户姓名passwordNvarchar(20)用户密码cardtypeNvarchar(20)停车卡类型userstypeNvarchar(20)用户类型caridint用户车牌号telint用户电话号码overageint用户余额车位信息表:sit_infor字段名称数据类型可空默认值说明stationidint不可主键,车位号stationtypeNvarchar(20
14、)不可车位类型停车收费卡收费表:charger字段名称数据类型可空默认值说明cardtypeNvarchar(6)车卡类型stationtypeNvarchar(20)车位类型(车卡类型与车位类型一起作为主键)chargeint 价格停车表:park字段名称数据类型可空默认值说明cardidint车卡号(外键)stationidint车位号(外键)parkidint1,每次增加一停车号,主键startparkdatetime停车开始时间endpark datetime停车结束时间feeint停车的收费sumparkint停车总时间2.3.4系统功能设计3.总体设计3.1设计概述根据需求把整个系
15、统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能;3.2系统总体结构及功能模块划分经过对系统的需求分析,停车管理系统主要划分为四个部分:车辆进出管理,信息查询,信息维护,系统管理四个功能模块。如图3.2.1 系统的总体结构。图3.2.1 系统的总体结构3.2.1车辆进出模块学生信息查询:学生可以根据学号、姓名、专业进行查询。如图3.2.2学生信息查询模块结构。图3.2.2 车辆进出模块结构3.2.2信息查询模块信息查询:主要是用于用户信息更新、插入、删除,如图3.2.3信息查询模块结构。图3.2.3 信息查询模块结构3.4安全保密设计3.4.1
16、用户登录安全性系统设计了登录界面,每个合法用户有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对车辆信息进行操作。 4详细设计4.1概述详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。4.2系统程序流程图程序流程图又称为程序框图,它是历史悠久使用最广泛的描述软件设计的方法。它可将整个程序的总体流程清楚明白的显示出来。如图4.2.1系统总流程图结构。 图4.2.1系统总体流程图4.3系统主要功能模块简介4.3.1系统登录登陆界面主界面:管理
17、员主界面普通用户主界面4.3.2车辆入场车辆入场界面:车辆入场界面:计费标准界面:4.3.3信息查询当前在场信息界面:用户历史信息界面:用户个人信息界面:管理员个人信息界面:普通用户个人信息界面(以张三为例)出入场信息界面:当前可用车位信息界面:4.3.1信息维护用户注册界面:用户修改界面:用户充值界面:计费标准管理界面:更改口令界面: 5主要功能模块代码5.1 关键技术介绍1、 在其他类中得到当前登录用户对象实现方法:在LoginFrame类中设置两个静态方法,在其他类中只需要引入LoginFrame类,然后调用他的静态方法即可。方法体如下:public static users getUs
18、er() return user;public static void setUser(users user) LoginFrame.user = user;2、 实现用户类型不同,主界面不同的功能。可以定义静态方法disMenu().当用户是普通用户时,调用disMenu()方法即可。具体实现如下:public void disMenu() mnuPark.setEnabled(false);mnuSever.setEnabled(false);mnuManZhuCe.setEnabled(false);mnuManCharge.setEnabled(false);if(user.getUs
19、erstype().equals(管理员) MdiFrame frame1 = new MdiFrame();/创建一个主窗体frame1.setVisible(true);/设置其可见LoginFrame.this.setVisible(false);/设置登录窗体为不显示else /判断用户名是否为nullMdiFrame frame = new MdiFrame();/创建一个主窗体frame.disMenu();frame.setVisible(true);/设置其可见LoginFrame.this.setVisible(false);/设置登录窗体为不显示3、 怎么得到系统时间Sim
20、pleDateFormat myfmt=new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);String a4 = myfmt.format(new java.util.Date().toString();4、 怎么计算时间差值try java.util.Date now = myfmt.parse(a3);/a3是系统当前时间(即出场时间)java.util.Date date=myfmt.parse(a7);/a7是入场时间int l=(int) (now.getTime()-date.getTime();/计算毫秒差值day=l/(24*60*60*100
21、0);/获取天数hour=(l/(60*60*1000)-day*24);/获得小时min=(l/(60*1000)-day*24*60-hour*60);/获得分钟catch (Exception e1)JOptionPane.showMessageDialog(null,消费计算错误);if(min 30)/如果分钟小于30分钟a8 = day*24+hour;else /如果分钟大于30分钟a8 = day*24+hour+1;5、 怎么让布局更优美使用布局管理器; GridBagLayout,以更改密码界面为例:getContentPane().setLayout(new GridBa
22、gLayout();setBounds(234, 129, 285, 223);final JLabel label_5 = new JLabel();label_5.setText(登 录 名:);final GridBagConstraints gridBagConstraints_11 = new GridBagConstraints();gridBagConstraints_11.gridy = 2;gridBagConstraints_11.gridx = 0;getContentPane().add(label_5, gridBagConstraints_11);5.2 登录界面代
23、码设计 public void actionPerformed(final ActionEvent e) user = Dal.check(username.getText(),new String(password.getText();if(user.getName()!=null) if(user.getUserstype().equals(管理员) MdiFrame frame1 = new MdiFrame();/创建一个主窗体/frame1.setEnabled(true);/设置其可见LoginFrame.this.setVisible(false);/设置登录窗体为不显示else
24、 /判断用户名是否为nullMdiFrame frame = new MdiFrame();/创建一个主窗体frame.disMenu();/frame.setEnabled(true);/设置其可见LoginFrame.this.setVisible(false);/设置登录窗体为不显示else JOptionPane.showMessageDialog(null,请输入正确的用户名和密码!);/弹出提示框username.setText();/设置用户名输入框为空password.setText();/设置密码输入框为空5.3 主窗口代码设计package whsdu.se.UI;impo
25、rt java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.SystemColor;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ComponentAdapter;import java.awt.event.ComponentEvent;import javax.swing.ImageIcon;import javax.swing
26、.JFrame;import javax.swing.JInternalFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.border.LineBorder;import whsdu.se.Common.*;import whsdu.se.UI.*;import whs
27、du.se.DAO.*;public class MdiFrame extends JFrame implements ActionListener /关键!MDIDesktopPane(该类实际继承了 JDesktopPane) 用来容纳子窗体/即使子窗体最大化也仅仅限制在该容器的范围之内private MDIDesktopPane desktop = new MDIDesktopPane();/菜单条private JMenuBar menuBar = new JMenuBar();/菜单private JMenu mnuPark = new JMenu(车场管理);private JMe
28、nu mnuQuery = new JMenu(信息查询);private JMenu mnuSever = new JMenu(信息维护);private JMenu mnuManSes = new JMenu(系统管理);/菜单项private JMenuItem munParkIn = new JMenuItem(车辆入场);private JMenuItem mnuParkOut = new JMenuItem(车辆出场);private JMenuItem munCharge = new JMenuItem(计费标准);private JMenuItem mnuNowInfo = n
29、ew JMenuItem(当前在场信息);private JMenuItem mnuHistory = new JMenuItem(用户历史信息);private JMenuItem mnuComUsersInfo = new JMenuItem(用户个人信息);private JMenuItem mnuInOut = new JMenuItem(出入场信息);private JMenuItem mnuComZhuCe = new JMenuItem(用户注册);private JMenuItem mnuComIdentity = new JMenuItem(用户修改);private JMe
30、nuItem mnuManZhuCe = new JMenuItem(管理员注册);private JMenuItem mnuManIdentity = new JMenuItem(口令修改);private JMenuItem mnuManCharge = new JMenuItem(计费标准管理);private JMenuItem mnumancharge = new JMenuItem(用户充值);private JMenuItem mnunowstation = new JMenuItem(当前可用车位信息);private JMenuItem mnuabout = new JMen
31、uItem(关于);private JMenuItem mnuduichu = new JMenuItem(退出);private JScrollPane scrollPane = new JScrollPane();private users user = LoginFrame.getUser(); /主窗体构造方法public MdiFrame() desktop.setOpaque(false); /JPanel 透明模式ImageIcon img = new ImageIcon(E:/java练习/carsituation_man/res/main.jpg); /创建一个图片路径JLa
32、bel background = new JLabel(img); /创建个带背景图片的JLabelbackground.setIcon(img);this.getLayeredPane().add(background,new Integer(Integer.MIN_VALUE);background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight();desktop.add(background);setMenu();setTitle(停车场管理系统);scrollPane.getViewport().add(desktop);g
33、etContentPane().setLayout(new BorderLayout();getContentPane().add(scrollPane, BorderLayout.CENTER);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setBounds(280,119,800, 600);this.setVisible(true);/* * 为窗体添加菜单并注册监听器 * 只写了部分菜单 */private void setMenu()/车场管理菜单mnuPark.add(munParkIn);munParkIn.addActio
34、nListener(this);mnuPark.add(mnuParkOut);mnuParkOut.addActionListener(this);/信息查询菜单mnuQuery.add(munCharge);munCharge.addActionListener(this);mnuQuery.add(mnuNowInfo);mnuNowInfo.addActionListener(this);mnuQuery.add(mnuHistory);mnuHistory.addActionListener(this);mnuQuery.add(mnuComUsersInfo);mnuComUser
35、sInfo.addActionListener(this);mnuQuery.add(mnuInOut);mnuInOut.addActionListener(this);mnuQuery.add(mnunowstation);mnunowstation.addActionListener(this);/信息维护菜单mnuSever.add(mnuComZhuCe);mnuComZhuCe.addActionListener(this);mnuSever.add(mnuComIdentity);mnuComIdentity.addActionListener(this);mnuSever.ad
36、d(mnumancharge);mnumancharge.addActionListener(this);/系统管理菜单mnuManSes.add(mnuManZhuCe);mnuManZhuCe.addActionListener(this);mnuManSes.add(mnuManIdentity);mnuManIdentity.addActionListener(this);mnuManSes.add(mnuManCharge);mnuManCharge.addActionListener(this);mnuManSes.add(mnuabout);mnuabout.addActionL
37、istener(this);mnuManSes.add(mnuduichu);mnuduichu.addActionListener(this);/添加到菜单栏menuBar.add(mnuPark);menuBar.add(mnuQuery);menuBar.add(mnuSever);menuBar.add(mnuManSes);/菜单栏添加到主窗体setJMenuBar(menuBar);/如果是普通用户,将不允许使用的菜单项禁止使用public void disMenu() /将车场管理、信息维护、系统管理对普通用户都不可用mnuPark.setEnabled(false);mnuSe
38、ver.setEnabled(false);mnuManZhuCe.setEnabled(false);mnuManCharge.setEnabled(false);/点击菜单项出现相应的子窗体public void actionPerformed(ActionEvent ae) /如果允许同时打开多个子窗口,可以用该方法获得所有子窗口对象数组JInternalFrame jiFrame = desktop.getAllFrames(); /如果只允许同时打开一个,可以用该方法移除现有窗口/desktop.removeAll(); /获得点击的菜单名称String mnuName = ae.g
39、etActionCommand();/根据菜单名称决定显示的子窗口,可以按下面的格式为每一个子菜单指定显示的子窗口if(mnuName.equals(车辆入场) /MdiFrame.addIFrame(new ParkInFrame(),BorderLayout.CENTER);desktop.add(new ParkInFrame(),BorderLayout.CENTER);else if(mnuName.equals(车辆出场) desktop.add(new ParkOutFrame(),BorderLayout.CENTER);else if(mnuName.equals(计费标准) desktop.add(new Char