课程名称:设计题目:学 院:专 业:年 级:学生姓名:指导教师:日 期:
课 程 设 计
数据库、软件工程课程设计 电影院管理系统 信息工程与自动化 计算机科学与技术 2009级 *** 2012-07-01
一、 绪论 国内电影院的售票系统不完善,有很多问题存在 ,售票效率低下 ,管理混乱 。现今社会是个讲究效率的社会,时间就是金钱。开发简单,便于操作的的软件不仅可以节省时间,还可以节省人力,物理,财力等
建立的影院售票系统,要把影院的售票管理、订票管理,财务管理等日常管理工作实行计算机统一管理,以提高工作效率和管理水平。
通过本系统软件,能帮助售票人员利用计算机,快速方便地对影院售票情况,订票情况,剩余座位查询等进行高效的管理。
本软件适用于电影界,它是比较完善的系统管理软件,对影院售票情况,订票情况,剩余座位查询等可以进行方便的管理
本软件的使用对象有影院负责人或管理人员(更新维护系统),影院售票人员(办理售票,订票,退票)和买票人(购买影票人员)。 该系统主要完成实现的目的有: 1.高效管理
数据处理速度快,通过对某一时间段的经营数据进行统计分析,供经营者分析经营状况, 以便采取相应的经营、促销策略。 2.客户资源充分利用
通过分析顾客的消费信息,制定出有针对性的促销措施,为顾客提供更为得体的服务。与顾客形成互动,加深印象,促进消费。 3.效益最大化
通过票房分析和排片情况,院线经理可对影院票房收益有一个直观的了解,通过最优的影片安排和促销活动来最大限度的增加院线收益。
二、电影院票务管理系统需求分析 (一)电影院线电子年票管理系统需求说明
1.定义:基于公网及影院局域网络建立的以IC卡为载体,且能够实现准实时数据交互及统计管理的电子年票管理软件。 2.产品描述 (1)系统属性
是一个在Windows98以上的操作系统平台下运行的院线电子年票管理系统。 (2)开发背景
解决各院线电子售票管理工作,方便各电影院线对电子售票票进行快速有效的操作,院线经理对排片和票房统计工作。 (3)软件特点
系统操作人员要求具备普通Windows系统操作水平即可。系统维护人员必须具有数据库管理知识。 3.具体用途
1、解决电影院线电子售票票管理上的工作。方便电影院线对电子售票票进行快速有效的操作。
2、通过插入‘员工卡’或‘管理卡’并输入用户名和相应密码才能进入系统进行管理。
3、影院管理者可对人员信息、排片等进行设置。
(二)用例模型 售票 会员 《包含》 《包含》 校验密码 影院职员 会员充值 票房管理 排片 院线经理 用户管理 报表生成 统管理人员 电影院管理系统 《包含》 上映时间 查看电影信息 《包含》 电影名字 《包含》 购票 票价 《包含》 《包含》 选择座位 选择电影场次 客户 全局ER图 1 电影院 有 N 电影厅 1 管理 N 院线经理 1 1 售票员 出售 有 N 座位 1对应 N 1 电影票 1办理 1 办理 1 1 办理 1 N会员卡 消费者 电影 影片格式 电影编号 名称 主演 上映时间 导演
座位 座位编号 票价 是否售出 电影名 电影票号 电影票 座位号 验证码 票价 上映时间 职工信息 职工编号 职工类型 职工密码 流程图 管理员 售票员 登陆 增加修改删除影片删除会员查看查看影片售票会员注册会员查询
该系统的数据库使用Office的Access数据库 部分数据库表如下
会员信息表:主键为vip_number ,数据类型为String。
职工信息表:主键为Username,数据类型为String。
电影信息表:主键为name,数据类型为String。
三、系统设计(领域类)
该系统的框架由一个窗口类实现,我定义了一个名为Cinema的类,该类继承了JFrame,可是实现ActionListener接口。
还有一些实现特定功能的类例如:
(1) class VipJDialog extends JDialog:该类继承了JDilog,能在录
入信息时弹出一个确认用户信息的对话框
(2) class InsertVip:该类实现与数据库的连接,我在这个类中定义了
一个能接受一个数组,并把该数组写入相应数据库的方法,能达到保存用户信息和电影排片管理的功能。
(3) class serchVip:该类同样是实现与数据库的连接,我在这个类中
定义了一个查询的方法,方便用户对影院职员和电影信息的查看。
(4) class jpanel extends JPanel:该类继承了JPanel,可以在用户触
发特定事件时移除之前面板的组件并添加新的组件,实现用户界面的切换。
由于该系统的很多功能还为实现,其他的类只能在以后的开发中再添加。
四、编码实现(截图 关键代码)
用户主界面 public class Cinema extends JFrame implements ActionListener { public Cinema(){ super(\"电影院管理系统\"); Dimension dim=getToolkit().getScreenSize(); this.setBounds(dim.width/6,dim.height/6,dim.width*2/3,dim.height*2/3); this.setBackground(java.awt.Color.blue); this.setResizable(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); String menustr[]={\"用户登录\",\"售票\",\"会员\",\"用户管理\",\"影片管理\",\"票房查询\",\"帮助\"}; menu=new JMenu[menustr.length]; menubar=new JMenuBar(); for(int i=0;ivoid addpanel_3()//会员办理面板组件 public { JPanel panel_word,panel_count,panel_hold,panel_1,panel_sex,panel_3,panel _4,panel_5; JLabel label[]; String VIP[]={\"会员卡号\",\"真实姓名\",\"激活时间\",\"年龄\",\"性别\",\"电话号码\",\"充值金额\",\"会员卡余额\",\"会员卡类型\"}; label=new JLabel[VIP.length]; text_count=new JTextField[VIP.length]; panel_word=new JPanel(); panel_count=new JPanel(); panel_word.setLayout(new GridLayout(3,1,0,10)); panel_count.setLayout(new GridLayout(3,1,0,10)); for(int i=0;i<9;i++) { text_count[i]=new JTextField(\"\",8); label[i]=new JLabel(VIP[i]); } text_count[2].setText(\"2013-08-30\"); text_count[2].setEditable(false); for(int i=0;i<3;i++) { panel_word.add(label[i]); panel_count.add(text_count[i]); } panel_sex=new JPanel(); panel_sex.add(new JLabel(\"年龄\")); Object age[]={\"18\",\"19\",\"20\",\"21\",\"22\",\"23\",\"24\"}; combox_age=new JComboBox(age); panel_sex.add(combox_age); panel_sex.add(new JLabel(\"性别\")); Object sex[]={\"男\",\"女\"}; combox_sex=new JComboBox(sex); panel_sex.add(combox_sex); panel_1=new JPanel(); panel_1.setLayout(new BorderLayout()); panel_1.add(panel_word,\"West\"); panel_1.add(panel_count,\"East\"); panel_1.add(panel_sex,\"South\"); panel_4=new JPanel(); panel_4.add(new JLabel(\"会员类型\")); Object vip[]={\"普通会员\",\"充值会员\"}; combox_vip=new JComboBox(vip); panel_4.add(combox_vip); panel_3=new JPanel(); panel_3.setLayout(new BorderLayout()); panel_3.add(new JLabel(\"电话号码\"),\"West\"); text_vip_pho=new JTextField(\"\",9); panel_3.add(text_vip_pho,\"East\"); panel_3.add(panel_4,\"South\"); panel_5=new JPanel(); button_vip_formal=new JButton(\"提交\"); button_vip_formal.addActionListener(this); panel_5.add(button_vip_formal); panel_5.add(new JButton(\"修改\")); panel_hold=new JPanel(); panel_hold.setLayout(new BorderLayout()); panel_hold.add(panel_1,\"North\"); panel_hold.add(panel_3,\"Center\"); panel_hold.add(panel_5,\"South\"); panel_2.add(panel_hold); } 会员信息录入界面 class VipJDialog extends JDialog //会员信息录入 { JTextField jtext[]; JFrame jframe; VipJDialog(JFrame jframe) { super(jframe,\"会员信息录入\",true); this.jframe=jframe; this.setSize(400, 280); this.setLayout(new FlowLayout(0,10,10)); this.setDefaultCloseOperation(HIDE_ON_CLOSE); jtext=new JTextField[7]; this.getContentPane().add(new JLabel(\"会员卡号\")); jtext[0]=new JTextField(\"\",10); this.getContentPane().add(jtext[0]); this.getContentPane().add(new JLabel(\"真实姓名\")); jtext[1]=new JTextField(\"\",8); this.getContentPane().add(jtext[1]); this.getContentPane().add(new JLabel(\"年龄\")); jtext[2]=new JTextField(\"\",3); this.getContentPane().add(jtext[2]); this.getContentPane().add(new JLabel(\"性别\")); jtext[3]=new JTextField(\"\",3); this.getContentPane().add(jtext[3]); this.getContentPane().add(new JLabel(\"电话号码\")); jtext[4]=new JTextField(\"\",10); this.getContentPane().add(jtext[4]); this.getContentPane().add(new JLabel(\"会员类型\")); jtext[5]=new JTextField(\"\",6); this.getContentPane().add(jtext[5]); this.getContentPane().add(new JLabel(\"激活时间\")); jtext[6]=new JTextField(\"\",10); this.getContentPane().add(jtext[6]); for(int i=0;i<7;i++) { jtext[i].setEditable(false); } } 会员信息搜索 class serchVip { String[] serch(String a) throws Exception { String VIPnum=a; String vipcount[]=new String[6]; Class.forName(\"sun.jdbc.odbc.JdbcOdbcDriver\"); Connection conn=DriverManager.getConnection(\"jdbc:odbc:Cinema\"); Statement stat=conn.createStatement(); String sql=\"SELECT vip_name,vip_age,vip_sex,vip_pho,vip_type,vip_date FROM VIP WHERE vip_number='\"+VIPnum+\"'\"; ResultSet rs=stat.executeQuery(sql); while(rs.next()) { vipcount[0]=rs.getString(\"vip_name\"); vipcount[1]=rs.getString(\"vip_age\"); vipcount[2]=rs.getString(\"vip_sex\"); vipcount[3]=rs.getString(\"vip_pho\"); vipcount[4]=rs.getString(\"vip_date\"); vipcount[5]=rs.getString(\"vip_type\"); } stat.close(); conn.close(); return vipcount; } } 排片界面 public void actionPerformed(ActionEvent e) //单击事件监听 { if(e.getSource()==button_vip_formal) {sql_vip=new InsertVip(); String str[]={text_count[0].getText(),text_count[1].getText(),(String) combox_age.getSelectedItem(),(String) combox_sex.getSelectedItem(), text_vip_pho.getText(),(String) combox_vip.getSelectedItem(),text_count[2].getText()}; jdialog.show(str); try { sql_vip.add(str); } catch (Exception e1) { e1.printStackTrace(); } } if(e.getSource()==button_vip_serch) { serchvip=new serchVip(); String a=text_vip_number.getText(); String vip[]=new String[6]; try { vip=serchvip.serch(a); } catch (Exception e1) { e1.printStackTrace(); } for(int i=0;i<6;i++) {jtext_vip_serch[i].setText(vip[i]);} } } 五、结论这次的课程设计对我以后的编程有很大的帮助,对JAVA的学习,特别是图形界面设计有了很大的提高,之前没学到的JAVA连接数据库,通过这次设计,也初步理解了,想要把这个系统做的全面还是很困难的,在接下来的时间里我会继续对这个系统进行完善,努力将现在还未实现的功能添加上去,将界面做得更美观一些,好好干!。