影院售票管理源码

  1. 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 MyCinema.Models;  
      
    namespace MyCinema  
    {  
        public partial class MainForm : Form  
        {  
            Cinema cinema;  
            Dictionary<string, Label> labels = new Dictionary<string, Label>();  
            int ticket = 0;  
            string key = null;  
              
            public MainForm()  
            {  
                InitializeComponent();  
            }  
      
            private void MainForm_Load(object sender, EventArgs e)  
            {  
                this.lblActor.Text = "";  
                this.lblDirector.Text = "";  
                this.lblMovieName.Text = "";  
                this.lblPrice.Text = "";  
                this.lblTime.Text = "";  
                this.lblType.Text = "";  
                this.lblCalcPrice.Text = "";  
                this.txtCustomer.Enabled = false;  
                this.cmbDisCount.Enabled = false;  
                this.rdoNormal.Checked = true;  
      
                cinema = new Cinema();  
                //放映厅座位(初始)  
                InitSeats(7, 5, tpCinema);  
                  
      
                cinema.Load();  
      
            }  
      
            
            private void InitSeats(int seatRow,int seatLine,TabPage tb)  
            {  
                Label label;  
                Seat seat;  
                for (int i = 0; i < seatRow; i++)  
                {  
                    for (int j = 0; j < seatLine; j++)  
                    {  
                        label = new Label();  
                        
                        label.BackColor = Color.Yellow;  
                         
                        label.Font = new System.Drawing.Font("宋体", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,((byte)(134)));  
                        
                        label.AutoSize = false;  
                        label.Size = new System.Drawing.Size(50, 25);  
                        
                        label.Text = (j + 1).ToString() + "-" + (i + 1).ToString();  
                        label.TextAlign = ContentAlignment.MiddleCenter;  
                         
                        label.Location = new Point(60 + (i * 90), 60 + (j * 60));  
                         
                        label.Click += new System.EventHandler(lblSeat_Click);  
                        tb.Controls.Add(label);  
                        labels.Add(label.Text, label);  
                          
                        seat = new Seat((j + 1).ToString() + "-" + (i + 1).ToString(), Color.Yellow);  
                          
                        cinema.Seats.Add(seat.SeatNum, seat);  
                    }  
                }  
            }  
      
             
            private void tsmiMovies_Click(object sender, EventArgs e)  
            {  
                //放映列表是否为空  
                if (cinema.Schedule.Items.Count == 0)  
                {  
                    cinema.Schedule.LoadItems();  
                }  
                InitTreeView();  
            }  
      
            //获取最新播放列表  
            private void tsmiNew_Click(object sender, EventArgs e)  
            {  
                cinema.Schedule.LoadItems();  
                cinema.SoldTickets.Clear();  
                InitTreeView();  
            }   
      
             
            private void InitTreeView()  
            {  
                tvMovies.BeginUpdate();  
                tvMovies.Nodes.Clear();  
      
                string movieName = null;  
                TreeNode movieNode = null;   
                foreach (ScheduleItem item in cinema.Schedule.Items.Values)  
                {  
                    if (movieName != item.Movie.MovieName)  
                    {  
                        movieNode = new TreeNode(item.Movie.MovieName);  
                        tvMovies.Nodes.Add(movieNode);  
                    }  
                    TreeNode timeNode = new TreeNode(item.Time);  
                    movieNode.Nodes.Add(timeNode);  
                    movieName = item.Movie.MovieName;  
      
                }  
                tvMovies.EndUpdate();  
            }  
      
            private void tvMovies_AfterSelect(object sender, TreeViewEventArgs e)  
            {  
                TreeNode node = tvMovies.SelectedNode;  
                if (node == null) return;  
                if (node.Level != 1) return;  
                key = node.Text;  
                //将详细信息显示  
                this.lblMovieName.Text = cinema.Schedule.Items[key].Movie.MovieName;  
                this.lblDirector.Text = cinema.Schedule.Items[key].Movie.Director;  
                this.lblActor.Text = cinema.Schedule.Items[key].Movie.Actor;   
                this.lblPrice.Text = cinema.Schedule.Items[key].Movie.Price.ToString();  
                this.lblTime.Text = cinema.Schedule.Items[key].Time;  
                this.lblType.Text = cinema.Schedule.Items[key].Movie.MovieType.ToString();  
                this.picMovie.Image = Image.FromFile(cinema.Schedule.Items[key].Movie.Poster);  
                this.lblCalcPrice.Text = "";  
      
                //清空座位  
                ClearSeat();  
                //遍历座位情况  
                foreach (Ticket ticket in cinema.SoldTickets)  
                {  
                    foreach (Seat seat in cinema.Seats.Values)  
                    {  
                        if ((ticket.ScheduleItem.Time == key)  
                            &&(ticket.Seat.SeatNum == seat.SeatNum))  
                        {  
                            seat.Color = Color.Red;  
                        }  
                    }  
                }  
                UpdateSeat();  
            }  
              
            //清空座位  
            private void ClearSeat()  
            {  
                foreach (Seat seat in cinema.Seats.Values)  
                {  
                    seat.Color = Color.Yellow;  
                }  
            }  
          //更新状态  
            private void UpdateSeat()  
            {  
                foreach (string key in cinema.Seats.Keys)  
                {  
                    labels[key].BackColor = cinema.Seats[key].Color;  
                }  
            }  
            //买票  
            private void lblSeat_Click(object sender, EventArgs e)  
            {  
                if (String.IsNullOrEmpty(this.lblMovieName.Text))  
                {  
                    MessageBox.Show("您还没选择电影!","提示");  
                    return;  
                }  
                ticket++;  
                try  
                {  
                    string seatNum = ((Label)sender).Text.ToString();  
                    string customerName = this.txtCustomer.Text.ToString();  
                    int discount = 0;  
                    string type = "";  
                    if (this.rdoStudent.Checked)  
                    {  
                        type = "student";  
                        if (this.cmbDisCount.Text == null)  
                        {  
                            MessageBox.Show("请输入折扣数!","提示");  
                            return;  
                        }  
                        else  
                        {  
                            discount = int.Parse(this.cmbDisCount.Text);  
                        }  
                    }  
                    else if (this.rdoFree.Checked)  
                    {  
                        if (String.IsNullOrEmpty(this.txtCustomer.Text))  
                        {  
                            MessageBox.Show("请输入赠票者姓名!","提示");  
                            return;  
                        }  
                        else  
                        {  
                            type = "free";  
                        }  
                    }  
                      
                                 
                    //工具类创建票  
                    Ticket newTicket = TicketUtil.CreateTicket(cinema.Schedule.Items[key], cinema.Seats[seatNum],  
                        discount, customerName, type);  
                    if (cinema.Seats[seatNum].Color == Color.Yellow)  
                    {  
                        //打印  
                        DialogResult result;  
                        result = MessageBox.Show("是否购买?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);  
                        if (result == DialogResult.Yes)  
                        {  
                            cinema.Seats[seatNum].Color = Color.Red;  
                            UpdateSeat();  
                            newTicket.CalcPrice();  
                            cinema.SoldTickets.Add(newTicket);  
                            lblCalcPrice.Text = newTicket.Price.ToString();  
                            newTicket.Print();  
                        }  
                        else if (result == DialogResult.No)  
                        {  
                            return;  
                        }  
                    }  
                    else  
                    {  
                        //显示售票信息  
      
                        foreach (Ticket ticket0 in cinema.SoldTickets)  
                        {  
                            //判断座位是否售出  
                            if (ticket0.Seat.SeatNum == seatNum && ticket0.ScheduleItem.Time==tvMovies.SelectedNode.Text && ticket0.ScheduleItem.Movie.MovieName==tvMovies.SelectedNode.Parent.Text)  
                            {  
                                ticket0.Show();  
                            }  
                        }  
                    }  
                }  
                catch (Exception ex)  
                {  
                    MessageBox.Show(ex.ToString());  
                }  
            }  
      
            //送票  
            private void rdoFree_CheckedChanged(object sender, EventArgs e)  
            {  
                this.txtCustomer.Enabled = true;  
                this.cmbDisCount.Enabled = false;  
                this.cmbDisCount.Text = "";  
                //优惠价  
                this.lblCalcPrice.Text = "0";  
            }  
      
            //学生票  
            private void rdoStudent_CheckedChanged(object sender, EventArgs e)  
            {  
                this.txtCustomer.Enabled = false;  
                this.txtCustomer.Text = "";  
                this.cmbDisCount.Enabled = true;  
                this.cmbDisCount.Text = "7";  
                //设置当前优惠价  
                if(this.lblPrice.Text!="")  
                {  
                    int price = int.Parse(this.lblPrice.Text);  
                    int discount = int.Parse(this.cmbDisCount.Text);  
                    this.lblCalcPrice.Text = (price * discount / 10).ToString();  
                }  
                  
            }  
      
            //普通票  
            private void rdoNormal_CheckedChanged(object sender, EventArgs e)  
            {  
                this.cmbDisCount.Enabled = false;  
                this.txtCustomer.Text = "";  
                this.txtCustomer.Enabled = false;  
                this.cmbDisCount.Text = "";  
                this.lblCalcPrice.Text = "";  
            }  
      
            private void tsmiExit_Click(object sender, EventArgs e)  
            {  
                cinema.Save();  
                this.Dispose();  
            }  
      
            private void tsmiSave_Click(object sender, EventArgs e)  
            {  
                cinema.Save();  
            }  
      
            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)  
            {  
                DialogResult close;  
                close = MessageBox.Show("是否保存当前销售状态?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);  
                if (close == DialogResult.Yes)  
                {  
                      
                    cinema.Save();  
                }  
            }  
      
            //不同折扣  
            private void cmbDisCount_SelectedIndexChanged(object sender, EventArgs e)  
            {  
                //当前电影优惠价  
                if (this.lblPrice.Text != "")  
                {  
                    int price = int.Parse(this.lblPrice.Text);  
                    int discount = int.Parse(this.cmbDisCount.Text);  
                    this.lblCalcPrice.Text = (price * discount / 10).ToString();  
                }  
            }  
        }  
    }  
    [csharp] view plain copy 在CODE上查看代码片派生到我的代码片
    cinema类<pre code_snippet_id="2259154" snippet_file_name="blog_20170312_2_6971975" name="code" class="csharp">using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.IO;  
    using System.Runtime.Serialization.Formatters.Binary;  
    using System.Drawing;  
      
    namespace MyCinema.Models  
    {  
        public class Cinema  
        {  
            public Cinema()  
            {  
                seats = new Dictionary<string, Seat>();  
                soldTickets = new List<Ticket>();  
                schedule = new Schedule();  
            }  
            
            private Dictionary<string, Seat> seats;  
            public Dictionary<string, Seat> Seats  
            {  
                get { return seats; }  
                set { seats = value; }  
            }  
      
            private Schedule schedule;  
         
            public Schedule Schedule  
            {  
                get { return schedule; }  
                set { schedule = value; }  
            }  
      
            private List<Ticket> soldTickets;  
            public List<Ticket> SoldTickets  
            {  
                get { return soldTickets; }  
                set { soldTickets = value; }  
            }  
      
            //保存售票信息  
            public void Save()  
            {  
                FileStream fs = new FileStream("soldTickets.txt", FileMode.OpenOrCreate);  
                StreamWriter writer = new StreamWriter(fs, Encoding.Default);  
                for (int index = 0; index < SoldTickets.Count; index++)  
                {  
                    Ticket ticket = SoldTickets[index];  
                    string info = "|" + ticket.ScheduleItem.Movie.MovieName + "|" + ticket.ScheduleItem.Movie.Poster + "|" +  
                        ticket.ScheduleItem.Movie.Director + "|" + ticket.ScheduleItem.Movie.Actor + "|" + ticket.ScheduleItem.Movie.MovieType.ToString() + "|" +  
                        ticket.ScheduleItem.Movie.Price + "|" + ticket.ScheduleItem.Time + "|" + ticket.Seat.SeatNum + "|" + ticket.Seat.Color + "|" + ticket.Price + "|";  
                    if (ticket is FreeTicket)  
                    {  
                        string customerName=((FreeTicket)ticket).CustomerName;  
                        writer.WriteLine("free" + info + customerName);  
                    }  
                    else if (ticket is StudentTicket)  
                    {  
                          
                        writer.WriteLine("student" + info + "");  
                    }  
                    else  
                    {  
                        writer.WriteLine("" + info + "");  
                    }  
                }  
                writer.WriteLine("The End");  
                writer.Close();  
                fs.Close();  
            }  
      
            //读取售票信息  
            public void Load()  
            {  
                try  
                {  
                    StreamReader reader = new StreamReader("soldTickets.txt", Encoding.GetEncoding("GB2312"));  
                    string line = reader.ReadLine();  
                    string[] propertyValues;  
                    Ticket ticket = null;  
      
                    while (line.Trim() != "The End")  
                    {  
                        propertyValues = line.Split('|');  
                        string type = propertyValues[0];  
      
                        Movie movie = new Movie(propertyValues[1], propertyValues[2], propertyValues[3], propertyValues[4], (MovieType)Enum.Parse(typeof(MovieType), propertyValues[5]), int.Parse(propertyValues[6]));  
                        ScheduleItem scheduleItem = new ScheduleItem();  
                        scheduleItem.Time = propertyValues[7];  
                        scheduleItem.Movie = movie;  
                        string color = propertyValues[9];  
                        string endColor = color.Substring(color.IndexOf("[") + 1, color.Length - 1 - color.IndexOf("[") - 1);  
                        Seat seat = new Seat(propertyValues[8], Color.FromName(endColor));  
      
                        int discount = 10;  
                        switch (type)  
                        {  
                            case "student":  
                                discount = 7;  
                                ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, "", type);  
                                break;  
                            case "free":  
                                discount = 0;  
                                ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, propertyValues[11], type);  
                                break;  
                            default:  
                                discount = 10;  
                                ticket = TicketUtil.CreateTicket(scheduleItem, seat, discount, "", "");  
                                break;  
                        }  
      
      
                        this.SoldTickets.Add(ticket);  
                        line = reader.ReadLine();  
                    }  
                    reader.Close();  
      
                      
                }  
                catch (Exception ex)  
                {  
                    Console.WriteLine("出错了:"+ex.Message);  
                    soldTickets = new List<Ticket>();  
                }  
            }  
        }  
    }  
    </pre>学生票类<pre code_snippet_id="2259154" snippet_file_name="blog_20170312_3_941709" name="code" class="csharp">using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.IO;  
    using System.Runtime.Serialization.Formatters.Binary;  
    using System.Windows.Forms;  
      
    namespace MyCinema.Models  
    {  
      
        [Serializable]  
        public class StudentTicket:Ticket  
        {  
            public StudentTicket() { }  
            public StudentTicket(ScheduleItem scheduleItem, Seat seat, int discount)  
                : base(scheduleItem, seat)  
            {  
                this.Discount = discount;  
            }  
              
            //折扣数  
            private int discount;  
            public int Discount  
            {  
                get { return discount; }  
                set { discount = value; }  
            }  
      
       
            public override void CalcPrice()  
            {  
                this.Price = this.ScheduleItem.Movie.Price * Discount / 10;  
            }  
      
        
            public override void Print()  
            {  
                string fileName = this.ScheduleItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt";  
                FileStream fs = new FileStream(fileName, FileMode.Create);  
                StreamWriter sw = new StreamWriter(fs);  
                sw.WriteLine("***************************");  
                sw.WriteLine("     青鸟影院 (学生)");  
                sw.WriteLine("---------------------------");  
                sw.WriteLine(" 电影名:\t{0}", this.ScheduleItem.Movie.MovieName);  
                sw.WriteLine(" 时间:  \t{0}", this.ScheduleItem.Time);  
                sw.WriteLine(" 座位号:\t{0}", this.Seat.SeatNum);  
                sw.WriteLine(" 价格:  \t{0}", this.Price.ToString());  
                sw.WriteLine("***************************");  
                sw.Close();  
                fs.Close();  
                  
            }  
      
      
            public override void Show()  
            {  
                MessageBox.Show("已售出!\n\n " + this.discount + "折学生票!");  
            }  
              
        }  
    }  
    </pre>Ticket类  
    <pre></pre>  
    <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_4_5783495" name="code" class="csharp"><pre code_snippet_id="2259154" snippet_file_name="blog_20170312_4_5783495" name="code" class="csharp">using System;  
    using System.Collections.Generic;  
    using System.Text;  
      
    namespace MyCinema.Models  
    {  
      
        public class TicketUtil  
        {  
            public static Ticket CreateTicket(ScheduleItem scheduleItem, Seat seat,  
                int discount,string customerName, string type)  
            {  
                Ticket newTicket = null;  
                switch (type)  
                {  
                    case "student":  
                        newTicket = new StudentTicket(scheduleItem, seat, discount);  
                        break;  
                    case "free":  
                        newTicket = new FreeTicket(scheduleItem, seat, customerName);  
                        break;  
                    case "":  
                        newTicket = new Ticket(scheduleItem, seat);  
                        break;  
                }  
                return newTicket;  
            }  
        }  
    }  
    </pre><br>  
    <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_5_2577129" name="code" class="csharp">using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Xml;  
    using System.Runtime.Serialization.Formatters.Binary;  
      
    namespace MyCinema.Models  
    {  
      
        [Serializable]  
        public class Schedule  
        {  
            public Schedule()  
            {  
                items = new Dictionary<string, ScheduleItem>();  
            }  
        
            private Dictionary<string, ScheduleItem> items;  
       
            public Dictionary<string, ScheduleItem> Items  
            {  
                get { return items; }  
                set { items = value; }  
            }  
      
            public void LoadItems()  
            {  
                if (items == null)  
                    items = new Dictionary<string, ScheduleItem>();  
                items.Clear();  
      
                XmlDocument myXml = new XmlDocument();  
                myXml.Load("ShowList.xml");  
                XmlNode feednode = myXml.DocumentElement;  
                //中间变量  
                string movieName = null;  
                string playBill = null;  
                string director = null;  
                string actor = null;  
                string movieType = null;  
                string price = null;  
      
                foreach (XmlNode node in feednode.ChildNodes)  
                {  
                    if (node.Name == "Movie")  
                    {  
                        foreach (XmlNode subNode in node.ChildNodes)  
                        {  
                            switch (subNode.Name)  
                            {  
                                case "Name":  
                                    movieName = subNode.InnerText;  
                                    break;  
                                case "Poster":  
                                    playBill = subNode.InnerText;  
                                    break;  
                                case "Director":  
                                    director = subNode.InnerText;  
                                    break;  
                                case "Actor":  
                                    actor = subNode.InnerText;  
                                    break;  
                                case "Type":  
                                    movieType = subNode.InnerText;  
                                    break;  
                                case "Price":  
                                    price = subNode.InnerText;  
                                    break;  
                                case "Schedule":  
                                    foreach (XmlNode scheduleNode in subNode.ChildNodes)  
                                    {  
                                        ScheduleItem item = new ScheduleItem();  
                                        item.Time = scheduleNode.InnerText;  
                                        item.Movie.MovieName = movieName;  
                                        item.Movie.Poster = playBill;  
                                        item.Movie.Director = director;  
                                        item.Movie.Actor = actor;  
                                        item.Movie.MovieType = (MovieType)Enum.Parse(typeof(MovieType), movieType);  
                                        item.Movie.Price = int.Parse(price);  
                                        items.Add(item.Time,item);  
                                    }  
                                    break;  
                            }  
                        }  
      
                    }  
                }  
            }  
        }  
    }  
    </pre><br>  
    <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_6_3830865" name="code" class="csharp">using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Runtime.Serialization.Formatters.Binary;  
    using System.Drawing;  
      
    namespace MyCinema.Models  
    {  
      
        [Serializable]  
        public class Seat  
        {  
            public Seat(string seatNum, Color color)  
            {  
                this.SeatNum = seatNum;  
                this.Color = color;  
            }  
      
            private string seatNum;  
            public string SeatNum  
            {  
                get { return seatNum; }  
                set { seatNum = value; }  
            }  
      
            private Color color;  
            public Color Color  
            {  
                get { return color; }  
                set { color = value; }  
            }  
        }  
    }  
    </pre><br>  
    <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_7_7592856" name="code" class="csharp">赠票类  
    using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.IO;  
    using System.Runtime.Serialization.Formatters.Binary;  
    using System.Windows.Forms;  
      
    namespace MyCinema.Models  
    {  
        [Serializable]  
        public class FreeTicket:Ticket  
        {  
            public FreeTicket() { }  
            public FreeTicket(ScheduleItem scheduleItem, Seat seat, string customerName)  
                : base(scheduleItem, seat)  
            {  
                this.CustomerName = customerName;  
            }  
      
            private string customerName;  
            public string CustomerName  
            {  
                get { return customerName; }  
                set { customerName = value; }  
            }  
      
            public override void CalcPrice()  
            {  
                this.Price = 0;  
            }  
      
            public  override void Print()  
            {  
                string fileName = this.ScheduleItem.Time.Replace(":", "-") + " " + this.Seat.SeatNum + ".txt";  
                FileStream fs = new FileStream(fileName, FileMode.Create);  
                StreamWriter sw = new StreamWriter(fs);  
                sw.WriteLine("***************************");  
                sw.WriteLine("     青鸟影院 (赠票)");  
                sw.WriteLine("---------------------------");  
                sw.WriteLine(" 电影名:\t{0}", this.ScheduleItem.Movie.MovieName);  
                sw.WriteLine(" 时间:  \t{0}", this.ScheduleItem.Time);  
                sw.WriteLine(" 座位号:\t{0}", this.Seat.SeatNum);  
                sw.WriteLine(" 姓名:  \t{0}", this.CustomerName);  
                sw.WriteLine("***************************");  
                sw.Close();  
                fs.Close();  
            }  
      
       
            public override void Show()  
            {  
                MessageBox.Show("已售出!\n\n 赠送者:"+this.CustomerName);  
            }  
      
        }  
    }  
    </pre><br>  
    <pre code_snippet_id="2259154" snippet_file_name="blog_20170312_8_6022693" name="code" class="csharp">电影类型类  
    using System;  
    using System.Collections.Generic;  
    using System.Text;  
    using System.Runtime.Serialization.Formatters.Binary;  
      
    namespace MyCinema.Models  
    {  
        public enum MovieType  
        {  
            //喜剧  
            Comedy,  
            //战争  
            War,  
            //爱情  
            Romance,  
            //动作  
            Action,  
            //卡通  
            Cartoon,  
            //恐怖  
            Thriller,  
            //冒险  
            Adventure  
        }  
      
        [Serializable]  
        public class Movie  
        {  
            public Movie() { }  
            public Movie(string movieName, string poster, string director,string actor,MovieType movieType,int price)  
            {  
                this.MovieName = movieName;  
                this.Poster = poster;  
                this.Director = director;  
                this.Actor = actor;  
                this.MovieType = movieType;  
                this.Price = price;  
            }  
      
          
            private string movieName;  
            public string MovieName  
            {  
                get { return movieName; }  
                set { movieName = value; }  
            }  
      
             
            private string poster;  
            public string Poster  
            {  
                get { return poster; }  
                set { poster = value; }  
            }  
      
         
            private string director;  
            public string Director  
            {  
                get { return director; }  
                set { director = value; }  
            }  
      
         
            private string actor;  
            public string Actor  
            {  
                get { return actor; }  
                set { actor = value; }  
            }  
      
            private MovieType movieType;  
            public MovieType MovieType  
            {  
                get { return movieType; }  
                set { movieType = value; }  
            }  
      
      
            private int price;  
            public int Price  
            {  
                get { return price; }  
                set { price = value; }  
            }  
        }  
    }  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值