电影院自动售票机系统
可行性分析报告
一、可行性研究报告
一、可行性研究报告... 1
1.引言... 3
1.1编写目的... 3
1.2项目背景... 3
1.3定义... 4
1.4参考资料... 4
2.可行性研究的前提... 4
2.1要求... 4
2.2目标... 4
3.对现有系统的分析... 4
3.1分析现有系统.. 4
3.2与现有系统比较的优越性... 4
4.所建议技术可行性分析... 4
4.1对系统的简要描述... 4
4.2处理流程和数据流程... 4
4.3采用建议系统可能带来的影响... 4
4.4技术可行性评价... 4
5.所建议系统经济可行性分析... 4
5.1支出... 4
5.2效益... 4
5.3收益/投资比... 4
5.4投资回收周期... 4
1.引言
随着国民经济的快速发展,人们的精神建设方面也在不断的提高。人们追求更高层次的娱乐休闲方式,电影院就是其中不可缺少的一部分。电影院买票看电影在娱乐人们的同时,也促进了国民的消费,加快了国民经济的发展。但就现有的电影院售票系统而言,存在着一些弊端,比如排队难、买票难…与其同时拥护的人群也对电影院周围的环境治理和社会治安造成不少的压力。改善原有的售票系统势在必行。
1.1编写目的
可行性研究的目的是为了对问题进行研究,以最小的代价在最短的时间内确定问题是否可解。本报告的编写目的在于研究电影院自动售票机系统的前景以及后续工作进行分析。经过对此项目进行详细调查研究,初拟系统实现报告,对软件开发中将要面临的问题及其解决方案进行初步设计及合理安排。明确开发风险及其所带来的经济效益。以便分析员在定义阶段较早的认识到系统方案的缺陷,以避免时间、资源、人力和资金的浪费。
1.2项目背景
鉴于现在人们对时间理念的改变,为了解决人们排队难问题,进一步完善目前电影院售票系统,更好的解决社会治安和环境问题。
1.3定义
本项目采用客户机/服务器原理,客户端的程序是建立在Windows NT 系统上以Microsoft Visual C#为开发软件的应用程序,服务器端采用Windows XP 为操作系统的工作站,是采用SQL Server 2000的为开发软件的数据库服务程序。
1.4参考资料
《软件工程导论》,张海藩,清华大学出版社。
2.可行性研究的前提
2.1要求
本系统的主要功能和要求是实现自动售票机地区性的提供全天候的售票和订票的服务,以更好地解决售票的工作效率问题。实现地区性购买电影票的统一管理,具体实现电影院信息管理,订票信息管理,支付系统管理。本系统采用的数据库系统是目前广泛采用的系统,数据安全和保密有一定的保障;同时该系统采用实时性系统,可以对服务器上的数据进行及时正确的刷新。以求提供给影迷更多最新,最准确的电影资讯和售票信息。
2.2目标
系统实现后,将实现全天候自动化票管理,有效的分流客源,可以缓解人们排队时间长和买票难的问题,有效的解决电影院交通拥挤,减缓周围环境污染和社会治安等问题。
3.对现有系统的分析
3.1分析现有系统
目前国内的现有自动售票机系统没有得到广泛的使用,只在一些高档的电影院出现,而且提供的功能也很少,使用范围也只陷于某影院,没有实行地区性的联网,单一性强。用户的选择性很少,往往只能满足一小部分人的需求。同时还是不能很好的解决买票难的情况,交通管理和社会治安等方面也没有得到很好的改善。
3.2与现有系统比较的优越性
相比之下,该系统实现地区性的联网,用户可以通过该系统了解到地区内的所有电影院的电影资讯和购买到所需的电影票,合理分流客源,满足大部分人的需求,同时还提供预订票,有效解决了排队时间长,排队拥挤等问题,让其让客户感受到自动售票机系统的人性化处理。
4.所建议技术可行性分析
4.1对系统的简要描述
该系统加入了新的数据库的支持,能够实现地区性联网,能够处理地区内任何时间任何地点的请求。
电影院自动售票机系统具体分为以下功能:
电影院信息管理:提供地区范围内所有的电影院信息——电影院、电影、场次、人数和位置等。
订票信息管理:实时处理地区内不同地方的购票和预订票数据,并实时更新数据库,快准无误返回处理结果。
支付系统管理:跟国内的银行实行联网,使用银行卡、信用卡等支付。
4.2处理流程和数据流程
数据流程图
系统流程图
4.3采用建议系统可能带来的影响
(1).硬件设备:采用该系统需购置相关的硬件设备和相关的联网设备。(2)软件:需要开发出相对应的软件系统,增加了开发成本的估算。(3).用户:需要进行一定规模的宣传,培训。(4).经费支出:由于系统所需的硬件设备比较高级,所以系统建设初期需要大量的资金支持。
4.4技术可行性评价
随着网络科技的高速发展,在现有的系统下来扩增相应的功能应该能实现,并能够在规定的期限内完成开发任务。
5.所建议系统经济可行性分析
5.1支出
5.1.1基建投资
5.1.2其他一次性支出
5.1.3经常性支出
5.2效益
5.2.1一次性收益
5.2.2经常性收益
5.2.3不可定量收益
5.3成本/收益比
虽然该系统的硬件和软件设备需要大量的资金,但该系统带来的收益是十分可观的,预计成本/效益比将小于0.5。
5.4投资回收周期
2~3年
第二篇:电影院售票系统
电影院售票系统
电影院售票系统简介:本系统根据不同的人群来完成不同的订票(普通票、学生票和免费票)的过程和打折订票的过程;能够完成电影院的电影影片及场次的添加及删除等基本功能,基本上实现了电影院售票系统的基本功能。
电影院售票系统界面介绍:界面中含有购票、影片管理、帮助和关于四个菜单栏,一个播放列表,影片详情(影片名称、导演、主演、类型、时间、票价及优惠信息),售票类型(普通票、学生票和免费票三个单选按钮,学生折扣、售票人和其他折扣)和放映厅的座次位置。
其中,购票菜单栏中含有电影列表、保存信息及安全退出子菜单按钮,影片管理菜单栏内含有添加影片和添加场次子菜单按钮,帮助菜单栏中有购票流程子菜单按钮,关于菜单栏中有系统介绍子菜单按钮。
图01 系统界面
操作过程及功能:
单击购票菜单栏的电影列表子菜单按钮能够在放映列表中显示系统中的电影列表,单击电影列表前端的“+”,将会显示影片的播放时间,点击时间后,将会在影片详情中显示影片的影片名称、导演、主演、类型、时间、票价及优惠信息;单击购票菜单栏的保存信息子菜单按钮能够保存基本信息;单击购票菜单栏的安全退出子菜单按钮能够退出该系统。
图02 保存信息
图03 安全退出
单击影片管理菜单栏中的添加影片子菜单按钮,添加影片的信息;单击影片管理菜单栏中的添加场次子菜单按钮添加场次的信息。
图04 添加影片
图05 添加场次
单击帮助菜单栏中有购票流程子菜单按钮,将提示购票的流程。
图06 购票流程
单击关于菜单栏中有系统介绍子菜单按钮将显示关于系统介绍的基本信息。
图07 系统介绍
在放映列表中右击鼠标将能实现添加影片、删除影片、添加场次、删除场次及刷新列表的功能。
图08 放映列表实现功能
设计与分工:
小组成员:丁广宇 魏绪秋 陈新伟 孙冰冰
成员分工:
丁广宇 主要负责“购票菜单”、“放映列表”的设计、代码编写,以及“放映列表”中所对应的showlist的xml文件的编写,负责更改替换电影列表的内容和文件。
魏绪秋 主要负责“影片管理菜单”、“影片详情”的设计、代码编写,主要包括添加影片、添加场次、删除影片、删除场次等功能的实现,负责对影片和场次的管理。
孙冰冰 主要负责“帮助菜单”中购票流程以及“关于菜单”中系统介绍的设计、代码编写,以及对图形化界面右侧“影票类型”的设计及编码,负责打折等问题的管理。
陈新伟 主要负责对图形化界面中“放映厅选座”界面的设计及代码编写,负责对选座功能的管理和维护。
基本程序代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
namespace MyCinema
{
public partial class MainForm : Form
{
Cinema cinema=new Cinema();
Dictionary<string, ScheduleItem> schDic;
Dictionary<string, Label> labels=new Dictionary<string,Label>();
string selTime="";//判断用户是否选择了"某一电影"
string selName = "";//当前用户选择的电影名称
string ticketType="normal";//判断用户选择何种类型的票
public MainForm()
{
InitializeComponent();
}
//单击"获取新列表",将所有电影场次信息显示在TreeView控件中
private void tsmiGetList_Click(object sender, EventArgs e)
{
iniTreeView();
}
private void iniTreeView()
{
tvShowList.Nodes.Clear();
Schedule schedult = new Schedule();
schedult.LoadItems();
schDic = schedult.Items;
string name = "";
TreeNode tnList = null;
foreach (string times in schDic.Keys)
{
if (schDic[times].Movie.MovieName != name)
{
tnList = new TreeNode(schDic[times].Movie.MovieName);
name = schDic[times].Movie.MovieName;
tvShowList.Nodes.Add(tnList);
tnList.Nodes.Add(times);
}
else
{
tnList.Nodes.Add(times);
}
}
}
//窗体加载时初始化"放映厅"中标签控件
private void MainForm_Load(object sender, EventArgs e)
{
InitSeats(5, 7, tabPagSeat);
if (File.Exists("TicketCinema.dragon"))
{
cinema.Load();
}
}
//初始化座位
public void InitSeats(int rows, int line, TabPage tb)
{
Label lbl;
Seat seat;
for (int i = 0; i < rows; i++ )
{
for (int j = 0; j < line;j++ )
{
lbl = new Label();
lbl.BackColor = Color.Chocolate;
lbl.AutoSize = false;
lbl.Size = new Size(60, 22);
lbl.Font = new Font("Times New Roman", 14.25f, FontStyle.Regular, GraphicsUnit.Point, (byte)(134));
lbl.Location = new Point(10,10);
lbl.Cursor = Cursors.Hand;
lbl.Text = (j + 1).ToString() + "-" + (i + 1).ToString();
lbl.TextAlign = ContentAlignment.MiddleCenter;
lbl.Location=new Point(45+(i*110),10+(j*30));
lbl.Click += new EventHandler(lbl_Click);
tb.Controls.Add(lbl);
labels.Add(lbl.Text, lbl);
seat = new Seat(Color.Chocolate, (j + 1).ToString() + "-" + (i + 1).ToString());
cinema.Seats.Add(seat.SeatNum, seat);
}
}
}
bool isBooking = false;//判断某场电影是否有新的影票被售出
//"订票"时执行动作
private void lbl_Click(object sender, EventArgs e)
{
if(isValidataChoice())
{
foreach (Ticket tic in cinema.SoldTickets)
{
if (tic.ScheduleItem.Time == selTime&&tic.Seat.SeatNum == ((Label)sender).Text )
{
Command.alert("该座["+tic.Seat.SeatNum+"]票已售出,不能重复出售!");
return;
}
}
Seat seat = new Seat(Color.Blue, ((Label)sender).Text);
int discount=0;
string custName = "null";
if(!string.IsNullOrEmpty(cboDiscount.Text))
{
discount=int.Parse(cboDiscount.Text);
}
if(!string.IsNullOrEmpty(txtCustomerName.Text))
{
custName = txtCustomerName.Text;
}
Ticket ticket = TicketFactory.CreateTicket(schDic[selTime].Movie.Price, schDic[selTime], seat,discount,custName,ticketType);
DialogResult result=MessageBox.Show("是否订购座号["+((Label)sender).Text+"]影票?","订票提示",MessageBoxButtons.YesNo);
if(result==DialogResult.Yes)
{
((Label)sender).BackColor = Color.Blue;
ticket.Print();
//Command.alert("订票成功!");
cinema.SoldTickets.Add(ticket);
isBooking = true;
}
}
}
//窗体加载时将所有座位恢复至初始状态(均未选中)
private void ClearSeat()
{
foreach(Seat seat in cinema.Seats.Values)
{
seat.Color = Color.Chocolate;
}
}
//更新状态
private void UpdateSeat()
{
foreach(Label lbl in labels.Values)
{
lbl.BackColor = Color.Chocolate;
foreach(Ticket ticket in cinema.SoldTickets)
{
if(lbl.Text==ticket.Seat.SeatNum&&selTime==ticket.ScheduleItem.Time)
{
lbl.BackColor=Color.Red;
}
}
}
}
public bool isValidataChoice() //判断用户选择是否正确
{
bool rt = false;
if (selTime == "")
{
Command.alert("请先选择电影!");
}
else
{
if (rdoNormal.Checked)//普通票被选中情况
{
if (string.IsNullOrEmpty(comboBox1.Text))
{
rt = false;
}
else
{
rt = true;
}
}
if (rdoStu.Checked)//学生票被选中情况
{
if (string.IsNullOrEmpty(cboDiscount.Text))
{
Command.alert("学生票必须选择打折情况!");
rt = false;
}
else
{
rt= true;
}
}
if (rdoFree.Checked)//免费票被选中情况
{
if (string.IsNullOrEmpty(txtCustomerName.Text))
{
Command.alert("免费票必须填写受赠票人姓名!");
}
else
{
rt = true;
}
}
if(rdoNormal.Checked)
{
rt=true;
}
}
return rt;
}
private void tvShowList_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Level == 1)
{
selTime = e.Node.Text;
lblMovieName.Text = schDic[selTime].Movie.MovieName;
picBoxMovie.Image = Image.FromFile(schDic[selTime].Movie.Poster);
lblActor.Text = schDic[selTime].Movie.Actor;
lblDirector.Text = schDic[selTime].Movie.Director;
lblPrice.Text = schDic[selTime].Movie.Price.ToString();
lblMovieType.Text = (schDic[selTime].Movie.MovieType).ToString();
lblTime.Text = selTime;
UpdateSeat();
}
if (!string.IsNullOrEmpty(selTime))
{
rdoNormal.Enabled = true;
rdoStu.Enabled = true;
rdoFree.Enabled = true;
}
}
#region MyRegion票类型选择
private void rdoNormal_CheckedChanged(object sender, EventArgs e)
{
ticketType = ((RadioButton)sender).Tag.ToString();
lblCustomer.Enabled = false;
txtCustomerName.Enabled = false;
lblStuDiscount.Enabled = false;
cboDiscount.Enabled = false;
cboDiscount.SelectedItem = null;
lblStuDis.Enabled = false;
lblStuPrice.Text = "";
txtCustomerName.Clear();
}
private void rdoStu_CheckedChanged(object sender, EventArgs e)
{
ticketType = ((RadioButton)sender).Tag.ToString();
lblCustomer.Enabled = false;
txtCustomerName.Enabled = false;
lblStuDiscount.Enabled = true;
cboDiscount.Enabled = true;
txtCustomerName.Clear();
}
private void rdoFree_CheckedChanged(object sender, EventArgs e)
{
ticketType = ((RadioButton)sender).Tag.ToString();
lblCustomer.Enabled = true;
txtCustomerName.Enabled = true;
lblStuDiscount.Enabled = false;
cboDiscount.Enabled = false;
cboDiscount.SelectedItem = null;
lblStuDis.Enabled = false;
lblStuPrice.Text = "";
}
#endregion
//序列化Cinema
private void tsmiSaveInfo_Click(object sender, EventArgs e)
{
cinema.Save();
Command.alert("信息保存成功!");
isBooking = false;
}
private void tsmiSale_Click(object sender, EventArgs e)
{
AddMovie addmovie = new AddMovie();
addmovie.ShowDialog();
tsmiGetList_Click(sender, e);
}
private void cboDiscount_SelectedIndexChanged(object sender, EventArgs e)
{
lblStuDis.Enabled = true;
try
{
lblStuPrice.Text =(schDic[selTime].Movie.Price * int.Parse(cboDiscount.Text)/10).ToString();
}
catch (Exception){}
}
//窗体关闭时判断是否有新的订票情况未保存
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (isBooking)
{
DialogResult result = MessageBox.Show(" 是否保存已售票信息!", "保存信息", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
tsmiSaveInfo_Click(sender, e);
cinema.Save();
isBooking = false;
Application.Exit();
}
else
{
e.Cancel = true;
}
}
}
private void tsmiExit_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show(" 是否退出系统?", "保存信息", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
cinema.Save();
isBooking = false;
Application.Exit();
}
}
private void tsmiAddMovie_Click(object sender, EventArgs e)
{
addMovie(sender, e);
}
private void addMovie(object sender, EventArgs e)
{
AddMovie addmovie = new AddMovie();
DialogResult result = addmovie.ShowDialog();
if (result == DialogResult.OK)
{
tsmiGetList_Click(sender, e);
}
}
private void tsmiAddSchedule_Click(object sender, EventArgs e)
{
AddSchedule adsch = new AddSchedule(cinema);
DialogResult result = adsch.ShowDialog();
if (result == DialogResult.OK)
{
tsmiGetList_Click(sender, e);
}
}
private void tsmiAddMovie_Click_1(object sender, EventArgs e)
{
if (tvShowList.Nodes.Count == 0)
{
Command.alert("请先加载数据!");
}
else
{
cmsMovieList.Enabled = true;
addMovie(sender, e);
}
}
public void delMovie(string movieName)
{
XmlDocument dom = new XmlDocument();
dom.Load("ShowList.xml");
XmlNode root = dom.DocumentElement;
foreach(XmlNode movie in root.ChildNodes)
{
if(movie.FirstChild.InnerText==selName)
{
DialogResult result = MessageBox.Show("是否删除电影"+movie.FirstChild.InnerText+"?","删除提示",MessageBoxButtons.YesNo);
if(result==DialogResult.Yes)
{
root.RemoveChild(movie);
dom.Save("ShowList.xml");
iniTreeView();
}
break;
}
}
}
private void tsmiDelMovie_Click(object sender, EventArgs e)
{
if (selName != "")
{
delMovie(selName);
selName = "";
}
else
{
Command.alert("请选择要删除的电影!");
}
}
string selSchTime = "";
private void tvShowList_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if(e.Node.Level==1)
{
selSchTime = e.Node.Text;
}
if (e.Node.Level == 0)
{
selName = e.Node.Text;
}
}
private void tsmiAddSchedu_Click(object sender, EventArgs e)
{
if (selName != "")
{
tsmiAddSchedule_Click(sender, e);
}
else
{
Command.alert("请选择要添加场次的电影!");
}
}
private void delSchedule(string time)
{
XmlDocument dom = new XmlDocument();
dom.Load("ShowList.xml");
XmlNode root = dom.DocumentElement;
foreach (XmlNode movie in root.ChildNodes)
{
foreach(XmlNode item in movie.LastChild.ChildNodes)
{
if (movie.LastChild.ChildNodes.Count < 2)
{
//DialogResult result = MessageBox.Show("该影片场次至少为1次,否则将删除该电影!", "删除提示", MessageBoxButtons.YesNo);
//if (result == DialogResult.Yes)
//{
// delMovie(selName);
// iniTreeView();
//}
Command.alert("该影片场次至少为1次,否则将删除该电影!");
break;
}
else
{
if (item.InnerText == time)
{
DialogResult result = MessageBox.Show("是否删除 ["+time+"] 场次电影?","删除提示",MessageBoxButtons.YesNo);
if(result==DialogResult.Yes)
{
movie.LastChild.RemoveChild(item);
dom.Save("ShowList.xml");
MessageBox.Show("删除场次成功!");
break;
}
}
}
}
}
}
private void tsmiDelSchedule_Click(object sender, EventArgs e)
{
delSchedule(selSchTime);
iniTreeView();
}
private void caozuoliuchengToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("选票流程: 点击购票工具栏弹出对话框选择获取列表后选择所要观看的电影,选择影票的类型(普通票、学生票或免费票,并选择好折扣),在放映厅内选择位票单击确定即可完成订票过程。");
}
private void 系统介绍AToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show(" 此软件是一个简单的售票系统,能够简单的完成购票和影片管理等信息,此软件版权归丁广宇、魏绪秋、孙冰冰和陈新伟。感谢你的使用! ");
}
private void 删除影片DToolStripMenuItem_Click(object sender, EventArgs e)
{
tvShowList = null;
}
}
}