电影票预定系统设计报告

该博客介绍了基于数据结构和C#语言的电影票预定系统设计,包括需求分析、概要设计和代码实现。系统提供了用户注册、登录、查询电影、预定、退订和修改信息等功能,并使用SQL Server数据库。在调试阶段,系统展现出良好的稳定性和容错能力。

1绪论

1.1任务目的

用《数据结构》中的链表做数据结构,结合c#语言基本知识,编写一个电影票预定系统,以把所学知识应用到实际软件开发中去。了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力,初步掌握软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能:提高综合运用所学的理论知识和方法独立分析和解决问题的能力,训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。

1.2需求分析

设计一个实用的电影票预定系统,采用sqlserver数据库,采用集合等相关数据结构,编写一个能够注册用户,实现登录,查询电影信息,预定电影票,退订电影票,删除订单记录,修改账号信息等功能

1.3详细功能

1.注册用户

2.登录

3.验证码

4.查询电影票信息

5.预定电影票生成订单

6.退订

7.删除订单

8.修改用户信息

2概要设计

2.1.1表关系

在这里插入图片描述

2.1.2流程逻辑

在这里插入图片描述

3部分代码设计

3.1业务逻辑实现

3.1.1登录
 private void button1_Click(object sender, EventArgs e)//登录
        {
            string ID = comboBox1.Text;
            string PWD = textBox1.Text;
            if (ID != "" && PWD != "")
            {
                if (ID.Length==11)
                {
                    bool asd = IsHandset(ID);
                    if (asd)
                    {
                        string asdd = "select count(*) from Client where ClientId='" + ID + "'";
                        DBTools bb = new DBTools();
                        int clienID = bb.Login(asdd);

                        if (clienID == 1)
                        {
                            string sql = "select count(*) from Client where ClientId='" + ID + "' and ClientPwd='" + PWD + "'";
                            DBTools cc = new DBTools();
                            int login = cc.Login(sql);
                            if (login == 1)
                            {
                                //验证成功后将用户名传给Program定义的变量username
                                Program.username = comboBox1.Text.Trim();
                                //定义验证成功时返回值                    
                                this.DialogResult = DialogResult.OK;
                                this.Close();
                            }
                            else
                            { MessageBox.Show("账户或密码错误!"); }
                        }
                        else
                        {
                            MessageBox.Show("此用户不存在,请先注册");
                        }
                    }
                    else
                    {
                        MessageBox.Show("手机号格式不正确");
                    }
                }
                else
                {
                    MessageBox.Show("手机号长度不够");
                }  
                }
                else
                    { MessageBox.Show("请输入账户和密码!"); }
        }
        public bool IsHandset(string str_handset)//检验手机号码的和法性
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^[1]+[3,9]+\d{9}");
        }

在这里插入图片描述

3.1.2 注册
 private void button1_Click(object sender, EventArgs e)//注册
        {
            bool kdfg = ksdjhfg();
            if (kdfg==false)
            {
                string ID = comboBox1.Text;
                string PWD = textBox1.Text;
                string quePWD = textBox2.Text;

                if (ID != "" && PWD != "" && quePWD != ""&&textBox3.Text!="")
                {
                    if (ID.Length == 11)
                    {
                        bool asd = IsHandset(ID);
                        if (asd)
                        {
                            if (PWD.Length >= 6 && PWD.Length <= 12)
                            {
                                if (PWD == quePWD)
                                {
                                    if (textBox3.Text==he.ToString())
                                    {
                                        string asdd = @"INSERT INTO [movieDB].[dbo].[Client]
                                   ([ClientId]
                                   ,[ClientPwd])
                             VALUES
                                   ('" + ID + "','" + PWD + "')";
                                        DBTools bb = new DBTools();
                                        int clienID = bb.DonIntsdf(asdd);
                                        if (clienID == 1)
                                        {
                                            MessageBox.Show("注册成功,立即返回登录界面", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                            this.Close();
                                        }
                                        else
                                        {
                                            MessageBox.Show("注册失败");
                                        }
                                    }
                                    else
                                    {
                                        MessageBox.Show("验证码不正确");
                                    }
                                    
                                    }else
                                    {
                                        MessageBox.Show("密码不一致");
                                    }
                            }
                            else
                            {
                                MessageBox.Show("密码长度限制在6-12位");
                            }
                        }
                        else
                        {
                            MessageBox.Show("手机号格式不正确");
                        }
                    }
                    else
                    {
                        MessageBox.Show("手机号长度不正确");
                    }
                }
                else
                { MessageBox.Show("请完善信息!"); }
            }
            else
            {
                MessageBox.Show("此用户已注册");
            }
        }
        public bool IsHandset(string str_handset)//检验手机号码的合法性
        {
            return System.Text.RegularExpressions.Regex.IsMatch(str_handset, @"^[1]+[3,9]+\d{9}");
        }
        public bool ksdjhfg()//检验是否已注册 
        {
            string asdd = "select count(*) from Client where ClientId='" + comboBox1.Text+"'";
            DBTools bb = new DBTools();
            int clienID = bb.Login(asdd);
            if (clienID==1)
            {
                 return true;
            }
            else
            {
               return false;
            }
        }

        private void textBox1_Click(object sender, EventArgs e)//检验是否已注册
        {
            bool sdfsdf = ksdjhfg();
            if (sdfsdf)
            {
                MessageBox.Show("此用户已注册");
            }
        }
        private void button2_Click(object sender, EventArgs e)//返回登录
        {
            this.Close();
        }
        int he = 0;
        private void button3_Click(object sender, EventArgs e)
        {
            Random random = new Random();
            int number1 = random.Next(0, 10);//生成一个一位数
            int number2 = random.Next(0,10);//生成一个一位数
            he = number1 + number1;//合
            textBox4.Text = number1 +"+"+ number1+"=";
        }

在这里插入图片描述

3.1.3广告

在这里插入图片描述

3.1.3影片列表预定
 public Form1()
        {
            InitializeComponent();
        }
        DBTools cc = new DBTools();
        DataSet movie = new DataSet();
        private void button1_Click(object sender, EventArgs e)
        {
            string sql="";
            int movieID = int.Parse(comboBox1.SelectedValue.ToString());
            if (movieID > 0)
            {
                sql = " HouseID=" + movieID;
            }
            dv.RowFilter = sql;
        }
        DataView dv;
        private void Form1_Load(object sender, EventArgs e)//加载部门名称
        {
            try
            {
                string sql = @"SELECT [HouseID]
                          ,[MovieHouse]
                      FROM [movieDB].[dbo].[MovieHouse]
                    GO";
               movie=cc.QuerByAdapter(sql, "movie");
          
                DataRow row = movie.Tables["movie"].NewRow();
                row[0] = -1;
                row[1] = "请选择";
                movie.Tables["movie"].Rows.InsertAt(row, 0);//添加到表的第一行位置
            
                comboBox1.DisplayMember = "MovieHouse";//显示的值
                comboBox1.ValueMember = "HouseID";//实际值
                comboBox1.DataSource = movie.Tables["movie"];

                string sql2 = @"SELECT [TicketId]
                          ,[MovieName]
                          ,Movie.[HouseID]
                          ,[StartTime]
                          ,[EndTime]
                          ,[TicketPrice]
                          ,[number]
                          ,[MovieHouse]
                      FROM [movieDB].[dbo].[Movie]
                      inner join [movieDB].[dbo].[MovieHouse]
                      on Movie.HouseID=MovieHouse.HouseID";
                movie = cc.QuerByAdapter(sql2, "MovieList");
                dv=new DataView( movie.Tables["MovieList"]);
                dataGridView1.DataSource = dv;
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
          
        }
        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            string moiveid = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
            string sql = @"SELECT [TicketId]
                          ,[MovieHouse]
                          ,[EndTime]
                          ,[TicketPrice]
                          ,[MovieName]
                          ,[StartTime]
                          ,[number]
                      FROM [movieDB].[dbo].[Movie],[movieDB].[dbo].[MovieHouse]
                      where TicketId='" + moiveid + "' and Movie.HouseID=MovieHouse.HouseID";
            movie = cc.QuerByAdapter(sql,"sadfg");
            textBox1.Text = movie.Tables["sadfg"].Rows[0][0].ToString(); //编号
            textBox2.Text = movie.Tables["sadfg"].Rows[0][1].ToString(); //影院
            textBox3.Text = movie.Tables["sadfg"].Rows[0][2].ToString(); //散场时间
            textBox4.Text = movie.Tables["sadfg"].Rows[0][3].ToString();//会员票价
            textBox5.Text = movie.Tables["sadfg"].Rows[0][4].ToString();//电影名称
            textBox6.Text = movie.Tables["sadfg"].Rows[0][5].ToString();//开场时间
            textBox7.Text = movie.Tables["sadfg"].Rows[0][6].ToString();//剩余票数
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int sdf = 0;
            Random random = new Random();
            int number=Convert.ToInt32(numericUpDown1.Value);//电影票的张数
            string moiveid = dataGridView1.SelectedRows[0].Cells[0].Value.ToString();//影院ID
            string dindanbianh = "";
            if (number<=int.Parse(textBox7.Text.ToString()))
            {
                for (int i = 1; i <= number; i++)
                {
                    int orderId = random.Next(100000, 999999);//生成一个六位随机数作为订单编号
                    string sql = string.Format(@"INSERT INTO [movieDB].[dbo].[OrderInfo]
                           ([OrderId]
                           ,[TicketId]
                           ,[number]
                           ,[State])
                     VALUES ({0},'{1}','{2}','{3}')
                     ;UPDATE [movieDB].[dbo].[Movie] SET [number]=[number]-{4} WHERE TicketId='{5}'"
                          , orderId, moiveid, number, "已预订", number, moiveid);
                    Convert.ToInt32(cc.DonIntsdf(sql));

                    string sql2 = string.Format(@"INSERT INTO client_order([OrderId],[ClientId])  VALUES ('{0}','{1}')", orderId, Program.username);
                    sdf = Convert.ToInt32(cc.DonIntsdf(sql2));
                    dindanbianh = dindanbianh + orderId;
                }
                if (sdf > 0)
                {
                    MessageBox.Show("预订成功,订单编号为:" + dindanbianh, "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
            }
            else
            {
                MessageBox.Show("预订的票数不能超过剩余票数");
            }
        }

在这里插入图片描述

3.1.4订单退订与删除
private string open = "server=.;uid=sa;pwd=sasa;database=movieDB";//连接数据库的语句
        public State()
        {
            InitializeComponent();
        }
        DataSet Moielist = new DataSet();
        private void State_Load(object sender, EventArgs e)
        {
            loadDate();
        }

        private void loadDate()
        {
            DataTable objdt = (DataTable)dataGridView1.DataSource;
            if (objdt != null)
            {
                objdt.Rows.Clear();
            }
            
            dataGridView1.DataSource = objdt;
            SqlConnection conn = new SqlConnection(open);
            string sql = @"SELECT m.[TicketId]
                          ,m.[MovieName]
                          ,h.[MovieHouse]
                          ,m.[StartTime]
                          ,m.[EndTime]
                          ,m.[TicketPrice]
                          ,o.[number]
                          ,o.[OrderId]
                          ,o.[State]
                          ,c.[id]
                      FROM [movieDB].[dbo].[OrderInfo] o
                      left join [movieDB].[dbo].[Movie] m on m.TicketId=o.TicketId
                      left join [movieDB].[dbo].[MovieHouse] h on h.HouseID=m.HouseID
                      left join client_order c on o.OrderId = c.OrderId
                      where c.ClientId='" + Program.username + "'";
            SqlDataAdapter MovieList = new SqlDataAdapter(sql, conn);
            MovieList.Fill(Moielist, "MovieList");
            dataGridView1.DataSource = Moielist.Tables["MovieList"];
        }

        private void tuidinToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0)
            {
                MessageBox.Show("请选择一列数据");
                return;
            }
            int a = dataGridView1.SelectedRows[0].Index;
            int OrderId = (int)dataGridView1.Rows[a].Cells["OrderId"].Value;
            string sql = string.Format(@"update OrderInfo set State='{0}' where OrderId='{1}'", "已退订", OrderId);
            DBTools bb = new DBTools();
            int i = bb.DonIntsdf(sql);
            if (i > 0)
            {
                MessageBox.Show("退订成功");
                loadDate();
            }
            else
            {
                MessageBox.Show("退订失败");
            }
        }

        private void deleteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count == 0)
            {
                MessageBox.Show("请选择一列数据");
                return;
            }
            int a = dataGridView1.SelectedRows[0].Index;
            int OrderId = (int)dataGridView1.Rows[a].Cells["OrderId"].Value;
            string state = dataGridView1.Rows[a].Cells["Column8"].Value.ToString().Trim();
            if (state=="已退订")
            {
                string sql = string.Format(@"DELETE FROM OrderInfo  where OrderId='{0}'", OrderId);
                DBTools bb = new DBTools();
                string sql2 = string.Format(@"DELETE FROM client_order where OrderId='{0}'", OrderId);
                int i = bb.DonIntsdf(sql);
                if (i > 0)
                {
                    MessageBox.Show("删除成功");
                    loadDate();
                }
                else
                {
                    MessageBox.Show("删除失败");
                }
            }
            else
            {
                MessageBox.Show("只可删除已退订的订单");
            }
        }

在UI设计上是采用右键菜单的方式来调用方法的

在这里插入图片描述

3.1.5账号信息查看与保存

 private void PersonalCenter_Load(object sender, EventArgs e)
        {
            string sql = "select * from Client where ClientId='" + Program.username + "'";
            DBTools bb = new DBTools();
            SqlDataReader reder = bb.reader(sql);
            while (reder.Read())
            {
                label2.Text = reder["ClientId"].ToString();
                textBox1.Text = reder["name"].ToString();
                textBox2.Text = reder["age"].ToString();
                textBox3.Text = reder["ClientPwd"].ToString();
            }
          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string sql = string.Format(@"update Client set ClientPwd='{0}',name='{1}',age={2} where ClientId='{3}'",textBox3.Text, textBox1.Text, textBox2.Text,Program.username);
            DBTools bb = new DBTools();
            int i = bb.DonIntsdf(sql);
            if (i > 0)
            {
                MessageBox.Show("保存成功");
            }
            else
            {
                MessageBox.Show("保存失败");
            }
        }

在这里插入图片描述

4调试结果

经过反复测试,最终提供了一个操作简便的系统,而且容错能力较好,稳定性不错,在调试过程中,有一些小错误,但都只是基本的书写错误,而在文件保存方面,实现了实时保存和读取,在删除功能方面我做了较多努力,整体界面设计较为合理,对于输入的姓名,查找出结果后是否删除,若有重名,则会二次显示,提示是否删除,一直到所有记录查询结束,结束之后可以直接在此删除其他记录,因为它提供循环删除的功能。

5总结

通过做这个课程设计我了解并掌握了数据结构与算法的设计方法,初步掌握了独立分析和设计能力,遗迹软件开发过程的问题分析,系统设计,程序编码,测试等基本方法和技能,使我提高了编写技术文献的能力

6参考文献

[1] 严蔚敏,吴伟民. 数据结构(C#语言版)[M]. 北京:清华大学出版社, 2007.

[2] 何钦铭,冯雁,陈越. 数据结构课程设计.浙江:浙江大学出版社, 2007.

[3] 李春葆,陶红艳,金晶,赵丙秀. 数据结构与算法教程. 北京:清华大学出版社, 2007.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值