




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Oracle课程设计报告 华清池售票管理系统 学院:数学与计算机科学学院专业:计算机科学与技术(软件工程方向)班级:软件12组员:姓名:邓茂记 学号:1060612014049姓名:张雷 学号:1060612014026姓名:余黎晨 学号:1060612014010 指导教师:许淳时间:2014.12.16目录 第一章 引言 1第二章 系统分析 22.1需求分析 22.2功能模块图 2 2.3数据流程图 3第三章 系统概要设计 43.1数据库设计 53.1.1实体描述 6 3.1.2联系描述 63.1.3 E-R图 7第四章 系统详细设计 8 4.1数据库的逻辑设计 84.2数据库的实现 94.3 人机界面的设计 94.3.1登陆界面设计 10 4.3.2管理员基本信息与功能界面设计 114.3.3 用户基本信息与功能界面设计 13 第五章 系统实现 165.1概述 165.2系统运行与维护 16第六章 小结 17第一章 引言 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。其中Oracle以其使用方便,安全性高,功能强大和完善的企业服务系统赢得了众多用户的青睐。下面我将用这学期学到的最基本的oracle知识简单地设计一个景点售票系统。该系统实现了基本的对数据库的增删改查。作为买票的顾客(用户),我们实现了其买票,退票和查票的功能,作为卖票的一方(管理员),也可以对余票进行查询,同时也可以增加,修改票务信息!当然,用户角色可以注册以及登录该售票系统,而管理员则默认账户为admin,只能进行登录该系统,不能注册管理员账户。其中使用的oracle知识只是oracle里面很少的一部分,但也作为这学期学到的成果展现给大家,如有不对之处欢迎纠正第二章 系统分析2.1 需求分析 该系统主要实现了一般的简单售票系统的最基本的功能。购票者要购票首先需要注册账号才能登陆,注册时需要填写账号和密码。登陆以后可以购票,也可以查询余票。这里,客户购得的票会有票号、票价和有效日期等信息。购票成功后,顾客还可以查询自己的订单。当然,如果顾客发现买错票,这时候也可以退票。卖票者,也就是管理员可以查询余票,也可以增加、修改票信息。当然,顾客查询和管理员查询看到的东西肯定是不一样的。这里管理员会特殊一点,会看到每一张余票的具体信息,而顾客只能看到剩余的总票数和日期以及票价。增加功能主要实现对每一天的票务信息的更新的功能。每天不管票是否卖完,都须更新票务信息。修改功能主要针对票价及票的日期进行修改,比如某天要做活动,有优惠,票价半价,这时管理员便可以修改票价。在现在竞争激烈的电子商务中,系统的安全性和稳定性是首要的选择,其次是提供完善的服务流程。当然实际上的景点售票系统要比这个复杂得多,在这里我只是做了一个系统的抽象和简单建模,也只实现了其中的部分功能,实际上还要包括更多更复杂的子模块和交互性设置来提高系统的完整性和可操作性。2.2功能模块图华清池售票系统功能模块图就是将系统的功能进行分解,按功能从属关系表示出来的图表。画出功能模块图主要是为了更加明确的体现内部组织关系,更加清晰的理清内部逻辑关系,做到一目了然规范各自功能部分,使之条理化。游客功能模块管理员功能模块查询余票查询余票修改票信息增加票退票查询订单购票 图2.12.3数据流程图票游客管理员购票 查票查票 增加票 退票 修改票提交订单订单查询订单图2.2第三章 系统概要设计在经过了系统分析之后,接下来的任务就是系统设计。管理信息系统设计阶段的主要目的是将系统分析阶段所提出的反映了用户信息需求的系统逻辑方案转换成可以实施的基于计算机与通信系统的物理(技术)方案。在系统设计中,应尽量满足以下要求: 1) 系统性; 2) 灵活性; 3) 可靠性; 4) 经济性。 所以在这一阶段的主要任务是从管理信息系统的总体目标出发,根据系统分析阶段对系统的逻辑功能的要求,并考虑到经济、技术和运行环境等方面的条件,确定系统的总体结构和系统各组成部分的技术方案,合理选择计算机和通信的软、硬件设备,提出系统的实施计划,确保总体目标的实现。系统总体结构设计阶段的工作是一项技术性强、涉及面广的活动,它包括如下主要活动: 1) 系统总体布局方案的确定; 2) 软件系统总体结构的设计; 3) 计算机硬件方案的选择和设计; 4) 数据存储的总体设计。 结构化设计是系统开发的结构化方法和基本思路与原则在软件系统设计中的应用,也是软件系统设计中应用最广的一种方法。它适用于任何类型的软件系统总体设计,可以同结构化分析和结构化设计前后衔接起来使用。结构化设计方法是从建立一个拥有良好结构的系统的观点出发,基于把一个复杂的系统分解成相对独立模块的原则,主要研究了将系统分解为不同模块的方法和技术,分析系统分解时产生的各种影响,提出了评价模块结构质量的具体标准,并给出了从表达用户要求的数据流程图导出结构图的规则性强、涉及面广的活动,它包括如下主要活动:1)系统总体布局方案的确定;2)软件系统总体结构的设计;3)计算机硬件方案的选择和设计;4)数据存储的总体设计。结构化设计是系统开发的结构化方法和基本思路与原则在软件系统设计中的应用,也是软件系统设计中应用最广的一种方法。它适用于任何类型的软件系统总体设计,可以同结构化分析和结构化设计前后衔接起来使用。结构化设计方法是从建立一个拥有良好结构的系统的观点出发,基于把一个复杂的系统分解成相对独立模块的原则,主要研究了将系统分解为不同模块的方法和技术,分析系统分解时产生的各种影响,提出了评价模块结构质量的具体标准,并给出了从表达用户要求的数据流程图导出结构图的规则。3.1数据库设计数据库设计是开发数据库及其应用系统的技术,也是信息系统开发和建设的重要组成部分。具体的说,数据库设计是要在一个给定的应用环境中,通过合理的逻辑设计和有效的物理设计,构造较优的数据库模式,建立数据库及其应用系统,满足用户的各种信息需求。在系统的数据库设计中,首先对系统分析得到的数据字典中的数据存储进行分析,分析各数据存储之间的关系,然后得出系统的关系模式。本系统用实体-联系图(简称E-R图)来描述系统的概念模型。E-R图由实体、属性、联系三部分组成,其符号如图4.6所示:实体 属性联系 图 实体描述本系统中涉及的实体有四个,其结构如下:票 (票价、日期、票号)管理员 (管理员账号、管理员密码)游客 (游客账号、游客密码)订单 (游客账号、票价、票号、日期)3.1.2 联系描述本系统中实体之间有3个联系,其关系如下: (1)购票关系:管理员、游客和票的关系是1:M:1,因为多个游客可以向一个管理员一次订购一张票; (2)退票关系:管理员、游客和票的关系是1:M:1,因为多个游客可以向一个管理员一次退一张票;(3)管理员增加票关系:管理员和票的关系是1:N,因为一个管理员可以同时增加N张票。以上实体的联系属性如下:购票(买票游客、票号、日期、数量、票价、卖票管理员)退票(买票游客、票号、日期、数量、票价、退票管理员)管理员增加票(管理员、票号、数量、日期、票价)3.1.3 E-R图本系统的E-R图如图3.1所示:票游客账号密码1 11购票退票查询票价n nn有效日期票号查询修改增加 n 1 n 1管理员 1 1 账号密码图3.1第四章 系统详细设计4.1 数据库的逻辑设计 数据库的逻辑设计的任务就是把概念结构设计阶段的基本ER图转化为与选用具体机器上的DBMS产品所支持的数据模型相符合的逻辑结构,首先要实现的是ER图关系模型的转化。而为此要解决的问题是如何将实体和实体之间的联系转化为关系模式,如何确定这些关系模式的属性和码。对于实体,将每个实体转换为一个关系,实体的属性即为关系的属性,实体的码即为关系的码。 对于实体间的联系,可以分成三种情况: 1) 若实体间的联系是1:1,可以在两个实体转换成的两个关系中任意一个关系的属性中加入另一个关系的码。 2) 若实体间的联系是1:n,则在n端实体转换成的关系中加入1端实体转换成的关系码。 3) 若实体间的联系是n:m,则将联系转换为关系,关系的属 性为诸个实体的码加上联系具有的属性,而关系的码则为诸实体的码的组合。本系统中所涉及到的4个实体转换为4个关系,3个三元联系转换为3个关系,所以本系统共有7个关系。4.2 数据库的实现 按照数据字典中的数据元素说明确定每个数据项的类型和长度,使每个关系都对应一个数据库表:(其中游客信息表和管理员信息表合成一个用户密码表,购票信息表和退票信息表都在票的基本信息表里动态变化,因此这里只建四张表)一、 票的基本信息表(TICKET):列名数据类型长度属性描述TICKET_NUMVARCHAR28主键票号TICKET_DATEVARCHAR212不允许为空票的日期TICKET_PRICEFLOAT6不允许为空票的价格二、 票的副本信息表(TICKET_TRANSCRIPT):列名数据类型长度属性描述TICKET_NUMVARCHAR28主键票号TICKET_DATEVARCHAR212不允许为空票的日期TICKET_PRICEFLOAT6不允许为空票的价格三、 用户订单表(TICKET_ORDER_FORM):列名数据类型长度属性描述USER_NAMEVARCHAR216不允许为空用户名TICKET_NUMVARCHAR28主键票号TICKET_DATEVARCHAR212不允许为空票的日期TICKET_PRICEFLOAT6不允许为空票的价格四、 用户密码表(TICKET_USERS):列名数据类型长度属性描述USER_NAMEVARCHAE216主键用户名USER_PWDVARCHAR210不允许为空用户密码4.3 人机界面的设计用户界面是指软件系统和用户交互的接口,良好的用户界面往往可以提高用户使用系统的热情,并刺激他们的积极性。本系统采用的是JAVA代码进行编写的。实现的界面如下所示:4.3.1 登录界面设计 为了保证系统的安全性,进入系统之前必须经过必要的安全性,简洁、清晰、友好是此设计的风格,如图4.1所示: 图4.1上面的注册以及登陆页面是管理员进行登录的界面,是游客进行注册和登陆的界面。图4.2是登录出错的界面:图 管理员基本信息与功能界面设计 输入正确的用户名和密码后,即进入系统。图4.3是管理员登录进去的主页面。有增加票、修改票和查询票的功能。图4.3图4.4是管理员查询功能界面;图4.5是管理员增加票的功能界面;图4.6是管理员修改票信息功能的实现界面;图4.4图4.5图用户基本信息与功能界面设计 图4.7是用户登陆成功后的界面;图4.8是游客购票时的界面;图4.9是游客查询余票的界面;图4.10是游客查询订单时的界面,该界面上,游客可以选择退票;图4.7图4.8 图4.9图4.10第五章 系统实现5.1 概述 在管理信息系统的生命周期中,经过了系统规划、系统分析和系统设计等阶段以后,便开始了系统实施阶段。系统实施阶段要继承此前各阶段的工作成果,将技术设计转化成物理实现,因此,系统实施的成果是系统分析和设计阶段的结晶。同时,系统实施作为系统生命周期中的后期阶段,是把系统设计转化为可实际运行的物理系统的必然步骤。再好的系统设计,不通过系统实施也只能是不能带来现实效益的空中楼阁。系统实施作为系统的最后物理实现阶段,对于系统的质量、可靠性和可维护性等有着十分重要的影响。5.2 系统运行与维护 经过上述一系列测试通过后,系统就可以投入使用了。为了保证MIS长期高效地工作,必须加强对MIS运行的日常管理。MIS的日常运行管理包括系统每天运行状况、数据输入和输入情况以及系统的安全性,完备性能及时地如实记录和处置。这些工作主要由系统运行值班人员来完成。 系统维护的目的是为了保证管理信息系统正常可靠地运行,并能使系统不断得到改善和提高,以充分发挥作用。 系统应用程序维护:业务处理是通过程序进行的,一旦程序发生问题或业务发生变化就必然地引起程序的修改和调整。 数据维护:需求为业务是不断在变化的,因此反映这种变化的数据也要求随之改变,包括内容增加及数据结构的调整。 代码维护:系统的任何变化最终要通过修改代码实现。 硬件设备维护:主要指主机及外设的日常维护和管理,以保证系统正常有效地运行。第六章小结 通过Oracle数据库这门课,不仅使我们学到Oracle的知识、得到动手锻炼的实践机会。最重要的是,通过它与以前学的SQLServer数据库的对比学习,更使我们了解到二者的区别与共性。为我们以后更深入的学习数据库打下基础。 我们这次的课程设计选用的题目是景点售票系统,为了迎接新的挑战,我们没用上一学期的系统。该系统虽然不算大,但从着手到完成也是费了一凡功夫的。无论什么样的系统,用我们现在的知识都无法将其做的很完善,所以我们的系统还有一些想到但没能完成的功能,不过我们会记住这些缺陷,在后面的学习中进一步攻破。 最后,再次感谢老师对我们这一学期的教育,谢谢!登录界面源代码import java.awt.Dimension;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;public class LogOn public static void main(String args)throws SQLExceptionfinal JFrame jfrmlogin=new JFrame(系统登录);jfrmlogin.setSize(400,280);Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();jfrmlogin.setLocation(int) (screenSize.width-400)/2,(int)(screenSize.height-300)/2);/设置框出现的位置JPanel p1=new JPanel();p1.add(new JLabel(用户名:);final JTextField jtxtuser=new JTextField(14);JPanel p2=new JPanel();p2.add(new JLabel(密 码:);final JPasswordField jspwd=new JPasswordField(14);JPanel p3=new JPanel();final JButton jbtUser=new JButton(登 录);final JButton jbtreg=new JButton(注 册);JButton jbtexit=new JButton(退 出);p1.add(jtxtuser);p2.add(jspwd);p3.add(jbtUser);p3.add(jbtreg);p3.add(jbtexit); jbtUser.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) Connection conn=null; ResultSet rs=null; Statement stmt=null; if(e.getSource()=jbtUser) try Class.forName(oracle.jdbc.driver.OracleDriver); conn = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, system, 123); stmt=conn.createStatement(); String USER_NAME=jtxtuser.getText(); rs = stmt.executeQuery(select * from TICKET_USERS where USER_NAME=+jtxtuser.getText()+and USER_PWD=+jspwd.getText()+); if(rs.next() if(USER_NAME.equals(admin)=false) MainUser mf=new MainUser(); mf.setVisible(true); jfrmlogin.dispose(); else MainFrame mf=new MainFrame(); mf.setVisible(true); jfrmlogin.dispose(); else JOptionPane.showMessageDialog(null,用户名或密码不一致,请重新输入!,系统提示,JOptionPane.ERROR_MESSAGE); jtxtuser.setText(); jspwd.setText(); catch (Exception ex) JOptionPane.showMessageDialog(null,用户名或密码不一致,请重新输入!,系统提示,JOptionPane.ERROR_MESSAGE); jtxtuser.setText(); jspwd.setText(); );jbtreg.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) Connection conn=null; ResultSet rs=null; Statement stmt=null; if(e.getSource()=jbtreg) try Class.forName(oracle.jdbc.driver.OracleDriver); conn = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, system, 123); stmt=conn.createStatement(); rs = stmt.executeQuery(insert into TICKET_USERS(USER_NAME,USER_PWD) values(+jtxtuser.getText()+,+jspwd.getText()+); if(rs.next() JOptionPane.showMessageDialog(null,你已成功注册!可以登录了!,系统提示,JOptionPane.INFORMATION_MESSAGE); jtxtuser.setText(); jspwd.setText(); else JOptionPane.showMessageDialog(null,用户注册失败!,系统提示,JOptionPane.ERROR_MESSAGE); jtxtuser.setText(); jspwd.setText(); catch (Exception ex) JOptionPane.showMessageDialog(null,用户注册失败!,系统提示,JOptionPane.ERROR_MESSAGE); jtxtuser.setText(); jspwd.setText(); ); jbtexit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) System.exit(0); ); jfrmlogin.getContentPane().setLayout(new GridLayout(3,1); jfrmlogin.getContentPane().add(p1);jfrmlogin.getContentPane().add(p2); jfrmlogin.getContentPane().add(p3); jfrmlogin.setVisible(true);连接数据库代码import java.sql.*; public class ConnectOracle public static void connection(String args) throws SQLException /Connection conn=null; /Statement stmt=null; /ResultSet rs=null; /JDBC 直连Oracle数据库 加载驱动 try System.out.println(正在连接数据库.); Class.forName(oracle.jdbc.driver.OracleDriver); /*conn =*/ DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, system, 123); System.out.println(已经连接到数据库.); /stmt=conn.createStatement(); /stmt.executeQuery(insert into student(STUID,STUNAME,SEX,AGE)values(0001,李华,男,20);/rs=stmt.executeQuery(select * from STUDENT); /System.out.println( stuID + StuName + Sex + Age);/while(rs.next() /int STUID=rs.getInt(STUID); /String STUNAME=rs.getString(STUNAME); /String SEX=rs.getString(SEX);/int AGE=rs.getInt(AGE);/System.out.println( +STUID+ +STUNAME+ +SEX+ +AGE); /System.out.println( STUID +STUID+ STUNAME +STUNAME+SEX+SEX+AGE+AGE); / catch (Exception ex) /System.out.println(出现的异常为 + ex); 增加票源代码import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class AddTicket extends JPanel implements ActionListenerConnection con;Statement st;JLabel jLabel1=new JLabel(票 单 价:);JLabel jLabel2=new JLabel(票 日 期:);JTextField jTextField1=new JTextField();JTextField jTextField2=new JTextField();JButton jButton1=new JButton(确定增加);public AddTicket()tryjbInit();catch(Exception exception)exception.printStackTrace();private void jbInit() throws ExceptionClass.forName(oracle.jdbc.driver.OracleDriver); con = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, system, 123); this.setLayout(null);jLabel1.setBounds(new Rectangle(40,40,64,24);jLabel2.setBounds(new Rectangle(40,100,53,22);jTextField1.setBounds(new Rectangle(102,40,200,30);jTextField2.setBounds(new Rectangle(102,100,200,30);jButton1.setBounds(new Rectangle(120,220,150,32);jButton1.addActionListener(this);this.add(jLabel1);this.add(jTextField1);this.add(jLabel2);this.add(jTextField2);this.add(jButton1);ResultSet rs=null;st=con.createStatement();rs = st.executeQuery(select * from TICKET_TRANSCRIPT);if(rs.next() jTextField1.setText(rs.getString(TICKET_PRICE);public void actionPerformed(ActionEvent e)tryst=con.createStatement();st.executeUpdate(delete from TICKET);st.executeUpdate(delete from TICKET_ORDER_FORM);st.executeUpdate(insert into TICKET select * from TICKET_TRANSCRIPT); st.executeUpdate(update TICKET set TICKET_DATE=+jTextField2.getText()+); st.executeUpdate(update TICKET set TICKET_PRICE=+jTextField1.getText()+);JOptionPane.showMessageDialog(this,票增加成功!);jTextField1.setText();jTextField2.setText();catch(Exception ex)JOptionPane.showMessageDialog(this,票增加失败!);ex.printStackTrace();管理员查询票源代码import javax.swing.*;import javax.swing.table.JTableHeader;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.*;public class AdminInquireTicket extends JFrameConnection con;Statement st; private JScrollPane scpDemo; private JTableHeader jth; private JTable tabDemo; private JButton btnShow; private JButton btnShow1; public AdminInquireTicket() super(华清池售票系统); this.setSize(430,400); this.setLayout(null); this.setLocation(500,180); this.scpDemo = new JScrollPane(); this.scpDemo.setBounds(10,50,390,270); this.btnShow = new JButton(显示票信息); this.btnShow.setBounds(10,10,390,30); this.btnShow1 = new JButton(返 回); this.btnShow1.setBounds(260,330,120,30); JLabel jLabel1=new JLabel(余票总数:); JTextField jTextField1=new JTextField(); jLabel1.setBounds(new Rectangle(20,330,100,30); jTextField1.setBounds(new Rectangle(90,330,70,30); add(this.scpDemo); add(this.btnShow); add(this.btnShow1); this.add(jLabel1);this.add(jTextField1); this.setVisible(true); try Class.forName(oracle.jdbc.driver.OracleDriver); con = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, system, 123); ResultSet rs=null; int n = 0; st=con.createStatement(); rs = st.executeQuery(select * from TICKET); while(rs.next() n+; jTextField1.setText(+n+); catch(Exception exception)exception.printStackTrace(); this.btnShow1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) MainFrame mu=new MainFrame(); mu.setVisible(true); dispose(); ); this.btnShow.addActionListener(new ActionListener() public void actionPerformed(ActionEvent ae) btnShow_ActionPerformed(ae); ); public void btnShow_ActionPerformed(ActionEvent ae) try Class.forName(oracle.jdbc.driver.OracleDriver); Connection con = DriverManager.getConnection(jdbc:oracle:thin:localhost:1521:orcl, system, 123); String sql = select * from TICKET; PreparedStatement pstm = con.prepareStatement(sql); ResultSet rs = pstm.executeQuery(); int count = 0; while(rs.next() count+; rs = pstm.executeQuery(); Object info = new Objectcount4; count = 0; while(rs.ne
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论