手机管理系统

S1总复习(2)手机管理系统

程序要求

要求

某公司开发手机信息管理系统,SQL Server2008 作为数据库,程序界面采用 MDI 窗 体风格,主菜单包括菜单项:“增加信息”、“查询信息”和“退出”,如图-1 所示。

在这里插入图片描述

数据库设计

数据库名称:MobileManager,其他设置参见下表:

在这里插入图片描述
在这里插入图片描述

具体实现步骤

1、 建立数据库 MobileManager 和数据表 MobileBrand 、MobileInfo; 各个表中至少分别输入 2 条测试数据。
2、 在 Visual Studio 2012 中创建 Windows 窗体应用程序。
3、 将默认窗体名称 Form1 更改为 frmMain,窗体标题设置为“手机信息管理系统”,设 置该窗体为 MDI 父窗体,并添加如图-1 所示的 3 个菜单项,程序运行后该窗体默认最 大化。
4、 用户点击“增加信息”的菜单项后,以子窗体形式打开“增加信息”窗体,如图-2 所 示。
a)该窗体包括 8 个标签控件、5 个文本框控件、1 个组合框控件和 3 个按钮控件。
b)该窗体禁止最大化,且边框不可以拖拽。
c)打开位置为屏幕中央。
d)手机品牌组合框需在窗体加载时加载手机品牌信息,读取数据库表 MobileBrand 的信息。默认有一个选项被选中。
e) “手机价格” 、“重量”文本框中的 TextAlign 属性为 Right,其余文本框的 TextAlign 属性为 Left。
在这里插入图片描述

5、 完成“清空”功能。用户点击“清空”按钮后,系统清除所有文本框显示的文本信息, 注意要保持组合框中的项。
6、 实现“增加”按钮功能。用户点击“增加”按钮后:
a)首先检测是否所有文本框中均填入信息。如果某个文本框为空则提示用户填写,如 图-3 所示。
b)如果信息填写完整,则将该条信息成功存入数据库。如果保存成功则提示用户“保 存成功!”,如图-4 所示。如果保存失败,则提示用户“保存失败!”,如图-5 所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7、 完成“关闭”按钮功能:点击“关闭”按钮后关闭“增加信息”窗体。
8、 用户点击“查询信息”的菜单项后,以子窗体形式打开“查询信息”窗体,如图-6 所 示。
a)该窗体包括 1 个标签控件、1 个组合框控件、1 个 ListView 控件和 2 个按钮控件。
b)该窗体禁止最大化,且边框不可以拖拽,打开位置为屏幕中央。
c)ListView 控件以 Details 形式显示,且设置如图-6 所示的 6 个列标题。
d)窗体加载时组合框仅显示“请选择”,但不需要实现组合框的数据库信息加载。
e)窗体加载时 ListView 控件显示数据库中所有手机信息,如图-6 所示。
f)本窗体“查询”按钮的功能不需要实现。

在这里插入图片描述
9、 完成“关闭”按钮功能:点击“关闭”按钮后关闭“查询信息”窗体。
10、完成主窗体中“退出”菜单功能:点击“退出”菜单后先提示用户“是否要退出?” , 当用户点击“是”后退出应用程序。如图-7 所示。
在这里插入图片描述

数据库操作

主表

在这里插入图片描述在这里插入图片描述

从表

在这里插入图片描述
在这里插入图片描述

代码

主窗口
界面

主界面
在这里插入图片描述
设置
在这里插入图片描述
在这里插入图片描述
主窗体的属性设置就完了

代码

在是代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace db1107手机信息管理系统
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void tsmlAdd_Click(object sender, EventArgs e)
        {
            //实例化窗体
            FromAdd fromAdd = new FromAdd();
            //设置父子窗口
            fromAdd.MdiParent = this;
            //显示窗口
            fromAdd.Show();

        }

        private void tsmlQuery_Click(object sender, EventArgs e)
        {
            //实例化窗口
            FromQuery query = new FromQuery();
            //设置父子窗口
            query.MdiParent = this;
            //显示窗口
            query.Show();
        }

        private void tsmlClose_Click(object sender, EventArgs e)
        {
            DialogResult show = MessageBox.Show("是否要退出!","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question);

            if (show == DialogResult.Yes)
            {
                this.Close();
            }
            
        }
    }
}

主窗体代码编写完成

主窗口完成后在做添加窗口

添加窗口
界面

界面:
在这里插入图片描述
窗口属性设置
在这里插入图片描述
在这里插入图片描述

属性设置完毕

代码
using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace db1107手机信息管理系统
{
    public partial class FromAdd : Form
    {
        public FromAdd()
        {
            InitializeComponent();
        }

        private void btnEmpty_Click(object sender, EventArgs e)
        {
            //清空文本
            txtPhoneModel.Text = "";
            txtPhonePrice.Text = "";
            txtPhoneSize.Text = "";
            txtPhoneWeight.Text = "";
            txtTerminalStyle.Text = "";
        }

        private void FromAdd_Load(object sender, EventArgs e)
        {
            //初始化组合框
            cbLoad();
        }

        private void cbLoad()
        {
            //召唤帮手
            DbHelper helper = new DbHelper();

            //新建sql 语句
            String sql = "select * from MobileBrand";

            //让帮手干活
            DataSet ds = helper.getDataSet(sql);

            //组合框显示值
            cbPhoneBrand.DisplayMember = "Brand";
            //组合框实际值
            cbPhoneBrand.ValueMember = "BrandID";

            //绑定数据源
            cbPhoneBrand.DataSource = ds.Tables["table"];
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            //关闭窗口
            this.Close();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //获取组合框实际的值
            String cbIdx = cbPhoneBrand.SelectedValue.ToString();

            //获取文本框数据
            String brand = txtPhoneModel.Text;
            String price = txtPhonePrice.Text;
            String size = txtPhoneSize.Text;
            String weight = txtPhoneWeight.Text;
            String terminal = txtTerminalStyle.Text;

            //非空验证
            bool b = checkText();

            if (!b)
            {
                return;
            }

            //判断是否是数字
            bool l = checkNum(price);
            bool i = checkNum(weight);
            if (!(l && i))
            {
                MessageBox.Show("保存失败!");
                return;
            }

            //添加数据
            //调用帮手
            DbHelper helper = new DbHelper();

            //新建 sql 语句
            String sql = String.Format("insert into MobileInfo values ({0},'{1}',{2},'{3}',{4},'{5}');", cbIdx
                , brand, price, size, weight, terminal);

            //让帮手干活
            int update = helper.update(sql);

            if (update > 0)
            {
                MessageBox.Show("保存成功!");
            }
            else
            {
                MessageBox.Show("保存失败!");
            }

            this.Close();
        }

        private bool checkNum(String s)
        {
            bool b;
            try
            {
                int i = Int32.Parse(s);
                b = true;
            }
            catch
            {
                b = false;
            }


            return b;
        }

        private bool checkText()
        {
            bool b = true;

            //获取文本框数据
            String brand = txtPhoneModel.Text;
            String price = txtPhonePrice.Text;
            String size = txtPhoneSize.Text;
            String weight = txtPhoneWeight.Text;
            String terminal = txtTerminalStyle.Text;

            //文本框非空判断
            if (brand.Length == 0 && price.Length == 0 && size.Length == 0 && weight.Length == 0 &&
                terminal.Length == 0)
            {
                MessageBox.Show("请输入所有的手机信息!");
                b = false;
            }
            else if (brand.Length == 0 || price.Length == 0 || size.Length == 0 || weight.Length == 0 ||
                     terminal.Length == 0)
            {
                MessageBox.Show("保存失败!");
                b = false;
            }

            return b;
        }
    }
}
扩展
DbHelper

这里的DbHelper 是我写的一个工具类
具体代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace db1107手机信息管理系统

{
    class DbHelper
    {
        // 连接字符串
        public String connStr = "Data Source=.;Initial Catalog=MobileManager;Integrated Security=True";
        
        // 获得连接对象
        public SqlConnection getConn() {
            SqlConnection conn = new SqlConnection(this.connStr);
            conn.Open();
            return conn;
        }

        // 增删改方法
        // 返回受影响行数
        public int update(String sql) {
            // 连接对象
            SqlConnection conn = getConn();
            // 执行者
            SqlCommand cmd = new SqlCommand(sql,conn);
            // int i = 执行者.执行不查询()
            int i = cmd.ExecuteNonQuery();
            return i;
        }

        // 查询方法
        // 返回数据朗读者
        public SqlDataReader getReader (String sql) {
            // 连接对象
            SqlConnection conn = getConn();
            // 执行者
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = sql;
            cmd.Connection = conn;
            // 执行者.executeReader()----》数据朗读者
            SqlDataReader reader = cmd.ExecuteReader();
            return reader;
        }

        // 获取断开式的表
        public DataTable getTable(String sql)
        {
            SqlConnection conn = getConn();
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
            adapter.Fill(ds,"table");
            DataTable dt = ds.Tables["table"];
            return dt;
        }

        //获取仓库
        public DataSet getDataSet(String sql)
        {
            SqlConnection conn = getConn();
            DataSet ds = new DataSet();
            SqlDataAdapter adapter = new SqlDataAdapter(sql,conn);
            adapter.Fill(ds,"table");
            return ds;
        }
        
    }
}

查询窗口
界面

在这里插入图片描述

属性

在这里插入图片描述
在这里插入图片描述

代码

代码:

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;

namespace db1107手机信息管理系统
{
    public partial class FromQuery : Form
    {
        private DataSet ds;

        public FromQuery()
        {
            InitializeComponent();
        }

        private void FromQuery_Load(object sender, EventArgs e)
        {
            //组合框加载
            cbLoad();

            //ListView 加载
            lvLoad();
        }

        private void lvLoad()
        {
            //调用帮手
            DbHelper helper = new DbHelper();

            //新建 sql 语句
            String sql = "select * from MobileInfo inner join MobileBrand on MobileBrand.BrandID = MobileInfo.BrandID";

            SqlDataReader reader = helper.getReader(sql);

            while (reader.Read())
            {
                ListViewItem item = new ListViewItem();

                //获取组合框的数据
                String brand = reader["Brand"].ToString();
                String type = reader["Type"].ToString();
                String price = reader["Price"].ToString();
                String size = reader["Size"].ToString();
                String weight = reader["Weight"].ToString();
                String style = reader["Style"].ToString();

                //分别添加
                item.Text = brand;
                item.SubItems.Add(type);
                item.SubItems.Add(price);
                item.SubItems.Add(size);
                item.SubItems.Add(weight);
                item.SubItems.Add(style);

                listView1.Items.Add(item);
            }
        }

        private void cbLoad()
        {
            //调用帮手
            DbHelper helper = new DbHelper();

            //新建sql 语句
            String sql = "select * from MobileBrand";

            //让帮手干活
            DataTable dt = helper.getTable(sql);

            cbPhoneModel.DisplayMember = "Brand";

            cbPhoneModel.ValueMember = "BrandID";

            DataRow row = dt.NewRow();
            row[0] = "-99";
            row[1] = "请选择";
            dt.Rows.InsertAt(row, 0);

            cbPhoneModel.DataSource = dt;
        }


        private void btnQuery_Click(object sender, EventArgs e)
        {
            //清空数据
            listView1.Items.Clear();
            
            //调用帮手
            DbHelper helper = new DbHelper();

            //获取组合框中的值
            String cbIdx = cbPhoneModel.SelectedValue.ToString();

            //判断
            if (cbIdx.Equals("-99"))
            {
                //如果我的组合框中的值为请选择 -99 的话执行一下代码!

                //抵用 listView 加载
                lvLoad();

                return;
            }

            

            upDataLv(cbIdx);
        }

        private void upDataLv(String cbIdx)
        {

            //调用帮手
            DbHelper helper = new DbHelper();

            //新建 sql 语句
            String sql = "select * from MobileInfo inner join MobileBrand on MobileBrand.BrandID = MobileInfo.BrandID";

            SqlDataReader reader = helper.getReader(sql);

            while (reader.Read())
            {
                ListViewItem item = new ListViewItem();

                //获取 BrandID
                String brandId = reader["BrandID"].ToString();

                //获取组合框的数据
                String brand = reader["Brand"].ToString();
                String type = reader["Type"].ToString();
                String price = reader["Price"].ToString();
                String size = reader["Size"].ToString();
                String weight = reader["Weight"].ToString();
                String style = reader["Style"].ToString();

                if (cbIdx == brandId)
                {
                    //分别添加
                    item.Text = brand;
                    item.SubItems.Add(type);
                    item.SubItems.Add(price);
                    item.SubItems.Add(size);
                    item.SubItems.Add(weight);
                    item.SubItems.Add(style);

                    listView1.Items.Add(item);
                }
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

注意:这里代码可以实现所有的功能,但是性能方面有问题!!!

一个简单的程序,4个人20天的心血.package zhuyemian; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JToolBar; import javax.swing.UIManager; import javax.swing.border.EtchedBorder; //import com.qhit.LandAppend; //import com.qhit.PasswordAmend; import Kehuxinxi.Kehumain; import Shouhoumain.Main; import Xiaoshouxinxi.Xiaoshoumain; import Chanpinxinxi.Chanpinmain; public class Zhuyemian extends JFrame implements Runnable{ MyPanel panel = new MyPanel(); JLabel label; public Zhuyemian() { super(); this.setIconImage(new ImageIcon("shoujitubiao.jpg").getImage());//在标题上的图片 this.setTitle("手机销售信息管理");//标题 this.setResizable(false);//大小可否改变 setSize(1024, 768); getContentPane().setLayout(null); getContentPane().add(panel); panel.setBounds(142, 37, 900, 738); panel.setLayout(null); final JMenuBar menuBar = new JMenuBar(); menuBar.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 setJMenuBar(menuBar); final JMenu menujibencaozuo = new JMenu(); menujibencaozuo.setText("基本操作"); menuBar.add(menujibencaozuo); final JMenuItem newItemMenuItem_1 = new JMenuItem(); newItemMenuItem_1.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { new Kehumain(); } }); newItemMenuItem_1.setText("客户信息"); menujibencaozuo.add(newItemMenuItem_1); final JMenuItem newItemMenuItem = new JMenuItem(); newItemMenuItem.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { new Chanpinmain(); } }); newItemMenuItem.setText("产品信息"); menujibencaozuo.add(newItemMenuItem); final JMenuItem newItemMenuItemxiaoshouxinxi = new JMenuItem(); newItemMenuItemxiaoshouxinxi.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { new Xiaoshoumain(); } }); newItemMenuItemxiaoshouxinxi.setText("销售信息"); menujibencaozuo.add(newItemMenuItemxiaoshouxinxi); final JMenuItem newItemMenuItemshouhouxinxi = new JMenuItem(); newItemMenuItemshouhouxinxi.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { new Main(); } }); newItemMenuItemshouhouxinxi.setText("售后信息"); menujibencaozuo.add(newItemMenuItemshouhouxinxi); final JMenu menugongju = new JMenu(); menugongju.setText("工具"); menuBar.add(menugongju); final JMenuItem newItemMenuItemjisuanqi = new JMenuItem(); newItemMenuItemjisuanqi.setText("计算器"); newItemMenuItemjisuanqi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { Runtime.getRuntime().exec("calc.exe"); //设置运行任何系统可执行的程序----计算器 } catch (IOException e) { e.printStackTrace(); } } }); menugongju.add(newItemMenuItemjisuanqi); final JMenuItem newItemMenuItemjishiben = new JMenuItem(); newItemMenuItemjishiben.setText("记事本"); newItemMenuItemjishiben.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { Runtime.getRuntime().exec("notepad.exe"); //设置运行任何系统可执行的程序----记事本 } catch (IOException e) { e.printStackTrace(); } } }); menugongju.add(newItemMenuItemjishiben); final JMenu menu = new JMenu(); menu.setText("密码设置"); menuBar.add(menu); final JMenuItem newItemMenuItem_2 = new JMenuItem(); newItemMenuItem_2.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { // LandAppend ls = new LandAppend(); } }); newItemMenuItem_2.setText("注册管理员"); menu.add(newItemMenuItem_2); final JMenuItem newItemMenuItem_3 = new JMenuItem(); newItemMenuItem_3.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { // PasswordAmend frame = new PasswordAmend(null); } }); newItemMenuItem_3.setText("修改密码"); menu.add(newItemMenuItem_3); final JButton xiaishouxinxi = new JButton(); xiaishouxinxi.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { Xiaoshoumain xsm =new Xiaoshoumain(); } }); xiaishouxinxi.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/xiaoshouxinxi.jpg")); xiaishouxinxi.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 xiaishouxinxi.setBorder(new EtchedBorder(EtchedBorder.LOWERED)); xiaishouxinxi.setText(""); xiaishouxinxi.setBounds(0, 369, 136, 139); getContentPane().add(xiaishouxinxi); final JButton shouhouxinxi = new JButton(); shouhouxinxi.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { Main mm=new Main(); } }); shouhouxinxi.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/shouhouxinxi.jpg")); shouhouxinxi.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 shouhouxinxi.setBorder(new EtchedBorder(EtchedBorder.LOWERED)); shouhouxinxi.setText(""); shouhouxinxi.setBounds(0, 537, 136, 139); getContentPane().add(shouhouxinxi); final JButton chanpinxinxi = new JButton(); chanpinxinxi.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { Chanpinmain cpm=new Chanpinmain(); } }); chanpinxinxi.setBounds(0, 202, 136, 134); getContentPane().add(chanpinxinxi); chanpinxinxi.setBorder(new EtchedBorder(EtchedBorder.LOWERED)); chanpinxinxi.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/chanpinxinxi.jpg")); chanpinxinxi.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 chanpinxinxi.setText(""); final JButton kehuxinxi = new JButton(); kehuxinxi.setBounds(0, 37, 136, 134); getContentPane().add(kehuxinxi); kehuxinxi.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { new Kehumain(); } }); kehuxinxi.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/kehuxinxi.jpg")); kehuxinxi.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 kehuxinxi.setText(""); this.setCursor(new Cursor(Cursor.HAND_CURSOR));//设置鼠标形状为手型 label = new JLabel(); label.setText(""); label.setBounds(805, 0, 213, 36); getContentPane().add(label); final JToolBar toolBar = new JToolBar(); toolBar.setBounds(2, 1, 1016, 34); getContentPane().add(toolBar); final JButton Bangzhu= new JButton(); toolBar.add(Bangzhu); Bangzhu.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/帮助.png")); Bangzhu.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 Bangzhu.setText("帮助"); final JButton dayin = new JButton(); toolBar.add(dayin); dayin.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/print.png")); dayin.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 dayin.setText("打印"); final JButton tuichu = new JButton(); toolBar.add(tuichu); tuichu.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { int aa=JOptionPane.showConfirmDialog(null, "你确认要退出吗?","确定",2); if(aa==JOptionPane.YES_OPTION){ dispose(); } } }); tuichu.setIcon(SwingResourceManager.getIcon(Zhuyemian.class, "/退出.png")); tuichu.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));//设置鼠标形状为默认的箭头 tuichu.setText("退出"); /*******************************************设定窗体的位置(居中)*******************************************/ Toolkit kit=Toolkit.getDefaultToolkit(); Dimension screen=kit.getScreenSize(); int height=screen.height;//当前屏幕高度 int width=screen.width;//当前屏幕宽度 this.setLocation((width-this.getWidth())/2,(height-this.getHeight())/3); this.setVisible(true); //启动多线程 Thread th =new Thread(this); th.start(); } /*******************************************时钟run方法*******************************************/ public void run() { while(true){ Date d =new Date(); SimpleDateFormat sdf =new SimpleDateFormat("yyyy-M-dd hh:mm:ss"); String str =sdf.format(d); label.setText(str); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { //改变观感 //org.jvnet.substance.SubstanceLookAndFeel try { UIManager.setLookAndFeel("com.birosoft.liquid.LiquidLookAndFeel"); } catch (Exception e) { e.printStackTrace(); } new Zhuyemian(); } } /******************************************添加背景图片*******************************************/ class MyPanel extends JPanel{ //1.从写这个方法 public void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("zhujiemian.jpg"); g.drawImage(icon.getImage(), 0, 0, this.getWidth(), this.getHeight(), this); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSOA6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值