WPF實現增刪查(登錄,註冊,刪除)

實現如下圖所示

登錄

查詢,註冊

數據庫目錄

CREATE TABLE [dbo].[Users] (
    [id]       INT           IDENTITY (1, 1) NOT NULL,
    [UserName] NVARCHAR (50) NULL,
    [week]     INT           NULL,
    [PassWord] NVARCHAR (50) NULL,
    PRIMARY KEY CLUSTERED ([id] ASC)
);

文件目錄結構

其中需要我門寫的如下圖所示

app.config文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
  <connectionStrings>
    <add name="connStr" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;Connect Timeout=30"/>
  </connectionStrings>
</configuration>

MainWindow.xaml

前臺頁面代碼

<Window x:Name="登錄" x:Class="ClassApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ClassApp"
        mc:Ignorable="d"
        Title="Class" Height="355.224" Width="508.329" ResizeMode="CanMinimize" WindowStartupLocation="CenterScreen">
    <Grid Margin="10,0,3.6,7.6" Height="318" VerticalAlignment="Bottom">
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>

        <Label x:Name="Lable1" Content="賬號:" HorizontalAlignment="Left" Height="64" Margin="23,97,0,0" VerticalAlignment="Top" Width="120" FontSize="20"/>
        <TextBox x:Name="TextBox1" HorizontalAlignment="Left" Height="35" Margin="88,97,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="335" FontSize="22" BorderThickness="4" TabIndex="1">
            <TextBox.Resources>
                <VisualBrush x:Key="HelpBrush" TileMode="None" Opacity="0.3" Stretch="None" AlignmentX="Left">
                    <VisualBrush.Visual>
                        <TextBlock  Text="請輸入用戶名"/>
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBox.Resources>
            <TextBox.Style>
                <Style TargetType="TextBox">
                    <Style.Triggers>
                        <Trigger Property="Text" Value="{x:Null}">
                            <Setter Property="Background" Value="{StaticResource HelpBrush}"/>
                        </Trigger>
                        <Trigger Property="Text" Value="">
                            <Setter Property="Background" Value="{StaticResource HelpBrush}"/>
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </TextBox.Style>
        </TextBox>
        <Label x:Name="Label2" Content="密碼:" HorizontalAlignment="Left" Height="69" Margin="23,170,0,0" VerticalAlignment="Top" Width="120" FontSize="20"/>
        <Button x:Name="loginButton" Content="登錄" HorizontalAlignment="Left" Height="58" Margin="148,238,0,0" VerticalAlignment="Top" Width="202" FontSize="36" Opacity="0.8" Background="#FF5FCCF4" BorderBrush="#FF3834CB" Foreground="#FF36823A" Click="loginButton_Click" IsDefault="True" />
        <Label Content="Student schedule" HorizontalAlignment="Left" Height="62" Margin="111,10,0,0" VerticalAlignment="Top" Width="275" FontSize="36" FontFamily="Impact" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" RenderTransformOrigin="0.339,0.504"/>
        <PasswordBox x:Name="PasswordBox" HorizontalAlignment="Left" Height="35" Margin="88,166,0,0" VerticalAlignment="Top" Width="335" BorderThickness="4" FontSize="22" TabIndex="2"/>
        <Button x:Name="registeredButton" Content="註冊" HorizontalAlignment="Left" Height="35" Margin="428,97,0,0" VerticalAlignment="Top" Width="50" BorderThickness="0" FontSize="18" BorderBrush="White" Background="White" Click="registeredButton_Click"/>
    </Grid>
</Window>

後臺功能代碼

using System;
using System.Data.SqlClient;
using System.Windows;
using System.Windows.Controls;
using System.Configuration;



namespace ClassApp
{
    /// <summary>
    /// MainWindow.xaml 的交互邏輯
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Title = "Class";
            TextBox1.Text = "admin";
            PasswordBox.Password = "admin";
        }

        private void loginButton_Click(object sender, RoutedEventArgs e)
        {
            //string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            //SqlConnection sqlconn = new SqlConnection(sqlconnstr);


            //sqlconn.Open();
            //if (sqlconn.State == ConnectionState.Open)
            //{
            //    MessageBox.Show("connection successful");
            //}
            //else
            //{
            //    MessageBox.Show("connection failure");
            //}
            //sqlconn.Close();
            //sqlconn = null;
            //連接數據庫



            //string con = "Server=.;Database=DatabaseDesign;user id=sa;pwd=1996";
            //string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            //SqlConnection sqlconn = new SqlConnection(sqlconnstr);


            //sqlconn.Open();
            //SqlDataReader sdr = sqlCmd.ExecuteReader();
            //SqlCommand sqlCmd = new SqlCommand("select * from Users", sqlconn);
            //if (TextBox1.Text == "")
            //{
            //    MessageBox.Show("賬號不可爲空!");
            //}
            //if (sqlconn.State == ConnectionState.Open)
            //{
            //    MessageBox.Show("connection successful");
            //}
            //else
            //{
            //    MessageBox.Show("connection failure");
            //}

            //1
            string userName = ""; //Sql->UserName
            string showbb = "";//test字符
            int jump = 0;
            int week = -1;  //Sql->Week
            int id = 0;  //Sql->ID
            int accountNumberState = 0;  //賬號登錄狀態
            //string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            //SqlConnection sqlCon = new SqlConnection(sqlconnstr); //連接數據庫
            //sqlCon.Open();
            string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            SqlConnection sqlconn = new SqlConnection(sqlconnstr);
            sqlconn.Open();
            //SqlDataReader sdr = SqlHelper.ExecuteReader();
            //SqlCommand sqlCmd = new SqlCommand("select * from Database", sqlconn);
            SqlCommand com = sqlconn.CreateCommand();
            com.CommandText = "select * from Users";
            SqlDataReader read = com.ExecuteReader();
            //while (read.Read())查詢test
            //{
            //    MessageBox.Show(read.GetString(1)+";");
            //}
            //sqlconn.Close();
            if (TextBox1.Text == "")
            {
                MessageBox.Show("賬號不可爲空!");
            }
            else
            {
                while (read.Read())
                {
                    if (TextBox1.Text == read["UserName"].ToString().Trim() && PasswordBox.Password.Trim() == read["PassWord"].ToString().Trim())
                    {
                        //accountNumber Week&ID
                        week = Convert.ToInt32(read["Week"].ToString());
                        id = Convert.ToInt32(read["ID"].ToString());
                        userName = read["UserName"].ToString();
                        accountNumberState = 1;
                        break;
                    }
                }

                if (accountNumberState == 0)
                {
                    MessageBox.Show("賬號或密碼錯誤");
                }
            }
            if (accountNumberState == 1)
            {
                MessageBox.Show("登錄成功");
                UserList UserListWindow = new UserList();//跳轉用戶列表頁面
                UserListWindow.Show();
                this.Close();
                ////初始過程中傳入賬號ID等
                //Login loginWindow = new Login(week,id,userName);
                //sqlCon.Close();
                //loginWindow.Show();
                //this.Close();
            }
            else
            {
                sqlconn.Close();

            }
        }

        private void registeredButton_Click(object sender, RoutedEventArgs e)
        {
            Registered registerdWindow = new Registered();
            registerdWindow.Show();
            this.Close();
        }
    }
}

Registered.xaml

前臺頁面代碼

<Window x:Class="ClassApp.Registered"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ClassApp"
        mc:Ignorable="d"
        Title="註冊" Height="480.008" Width="480.079" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize">
    <Grid Margin="0,10,3.6,1.4">
        <Label Content="註冊賬號" HorizontalAlignment="Left" Margin="10,91,0,0" VerticalAlignment="Top" Height="44" Width="104" FontSize="24" RenderTransformOrigin="0.203,1.348" Foreground="#FFBF3131"/>
        <Label Content="Student schedule" HorizontalAlignment="Left" Height="62" Margin="61,29,0,0" VerticalAlignment="Top" Width="275" FontSize="36" FontFamily="Impact" RenderTransformOrigin="0.339,0.504"/>
        <Label Content="賬號:" HorizontalAlignment="Left" VerticalAlignment="Top" Width="100" RenderTransformOrigin="0.345,0.344" Margin="21,161,0,0" FontSize="20"/>
        <TextBox x:Name="registeredAccountNumberTextBox" HorizontalAlignment="Left" Height="33" Margin="94,163,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="273" FontSize="22" TabIndex="1"/>
        <Label Content="密碼:" HorizontalAlignment="Left" Margin="21,213,0,0" VerticalAlignment="Top" FontSize="18" Width="80" RenderTransformOrigin="0.494,0.025"/>
        <Label Content="確認密碼:" HorizontalAlignment="Left" Margin="4,266,0,0" VerticalAlignment="Top" FontSize="18" Width="97"/>
        <Label x:Name="verificationLable1" Content="1" HorizontalAlignment="Left" Margin="94,314,0,0" VerticalAlignment="Top" FontSize="16" RenderTransformOrigin="0.995,0.414"/>
        <Label x:Name="verificationLable3" Content="1" HorizontalAlignment="Left" Margin="146,314,0,0" VerticalAlignment="Top" FontSize="16"/>
        <Label x:Name="verificationLable2" Content="+" HorizontalAlignment="Left" Margin="115,310,0,0" VerticalAlignment="Top" FontSize="20" RenderTransformOrigin="0.193,0.557"/>
        <Label x:Name="verificationLable4" Content="=" HorizontalAlignment="Left" Margin="170,314,0,0" VerticalAlignment="Top" FontSize="16"/>
        <TextBox x:Name="VerificationCodeTextBox" HorizontalAlignment="Left" Height="30" Margin="197,314,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="35" FontSize="20" TabIndex="4"/>
        <Button x:Name="registeredButton" Content="註冊" HorizontalAlignment="Left" Height="42" Margin="61,385,0,0" VerticalAlignment="Top" Width="96" FontSize="24" Background="#FF52C0D6" BorderBrush="#FFF6F0F0" Click="registeredButton_Click" TabIndex="6"/>
        <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="12" Margin="-5,126,0,0" Stroke="Black" VerticalAlignment="Top" Width="474" RenderTransformOrigin="0.5,0.5">
            <Rectangle.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform/>
                </TransformGroup>
            </Rectangle.RenderTransform>
        </Rectangle>
        <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="15" Margin="-4,350,0,0" Stroke="Black" VerticalAlignment="Top" Width="474" RenderTransformOrigin="0.5,0.5">
            <Rectangle.RenderTransform>
                <TransformGroup>
                    <ScaleTransform ScaleY="-1"/>
                    <SkewTransform/>
                    <RotateTransform/>
                    <TranslateTransform/>
                </TransformGroup>
            </Rectangle.RenderTransform>
        </Rectangle>
        <Button x:Name="cancelButton" Content="返回" HorizontalAlignment="Left" Height="42" Margin="240,385,0,0" VerticalAlignment="Top" Width="96" FontSize="24" Click="cancelButton_Click" TabIndex="7"/>
        <PasswordBox x:Name="registeredPassWordBox" HorizontalAlignment="Left" Margin="94,214,0,0" VerticalAlignment="Top" Width="273" Height="33" FontSize="22" TabIndex="2"/>
        <PasswordBox x:Name="checkPassWordBox" HorizontalAlignment="Left" Margin="106,266,0,0" VerticalAlignment="Top" Width="261" Height="33" FontSize="22" TabIndex="3"/>
        <Label x:Name="verificationLable5" Content="" HorizontalAlignment="Left" Height="48" Margin="248,303,0,0" VerticalAlignment="Top" Width="60" FontSize="36" RenderTransformOrigin="0.726,0.689" Foreground="#FFEB1414"/>
        <Button x:Name="button3" Content="點擊驗證" HorizontalAlignment="Left" Height="30" Margin="287,314,0,0" VerticalAlignment="Top" Width="80" FontSize="14" Background="#FFE0D4D4" Click="button3_Click" TabIndex="5"/>
        <Label MaxWidth="100" Margin="372,161,15,140" >
            <TextBlock TextWrapping="Wrap"
                       Text="1.賬號和密碼長度爲3-16個字符 
                       2.不包含空格" Height="112" />
        </Label>
    </Grid>
</Window>

後臺功能代碼

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Windows;

namespace ClassApp
{
    /// <summary>
    /// Registered.xaml 的交互邏輯
    /// </summary>
    public partial class Registered : Window
    {
        public Registered()
        {
            InitializeComponent();
            Random random = new Random();
            verificationLable1.Content = random.Next(0, 50).ToString();
            verificationLable3.Content = random.Next(0, 50).ToString();
        }

        //'取消'button
        private void cancelButton_Click(object sender, RoutedEventArgs e)
        {
            MainWindow mainWindow = new MainWindow();
            mainWindow.Show();
            this.Close();
        }

        //'註冊'button
        private void registeredButton_Click(object sender, RoutedEventArgs e)
        {
            string classRowAndColumn = "";
            string userName = "";
            if (AccountCorrectness())
            {
                MessageBox.Show("1.賬號&密碼長度爲3-16個字符 \n2.不包含空格");
            }
            else if (IsSameAccount())
            {
                Random random = new Random();
                // 
                registeredAccountNumberTextBox.Text = null;
                registeredPassWordBox.Password = null;
                checkPassWordBox.Password = null;
                VerificationCodeTextBox.Text = null;
                verificationLable5.Content = null;
                verificationLable1.Content = random.Next(0, 50).ToString();
                verificationLable3.Content = random.Next(0, 50).ToString();

                MessageBox.Show("賬號已存在,請重新輸入");
            }
            else if (registeredPassWordBox.Password != checkPassWordBox.Password)
            {
                MessageBox.Show("兩次密碼不一致");
            }
            else if (verificationLable5.Content.ToString() == "×" || verificationLable5.Content.ToString() == "")
            {
                MessageBox.Show("驗證碼錯誤");
            }
            else  //數據庫的操作
            {
                string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
                SqlConnection sqlconn = new SqlConnection(sqlconnstr);
                sqlconn.Open();
                string addAcountToDB = string.Format("insert into Users (UserName,PassWord) values ("+registeredAccountNumberTextBox.Text.ToString()+ "," + checkPassWordBox.Password+ ")");
                SqlCommand sqlCmd = new SqlCommand(addAcountToDB, sqlconn);
                sqlCmd.ExecuteNonQuery();  //保存INSERT操作
                MessageBox.Show("註冊成功!");
                //註冊成功後返回登錄界面
                MainWindow mainWindow = new MainWindow(); 
                mainWindow.Show();
                this.Close();
            }
        }

        //註冊賬號的長度驗證
        private bool AccountCorrectness()  
        {
            if(registeredAccountNumberTextBox.Text.Length > 18 || registeredAccountNumberTextBox.Text.Length<3)
            {
                return true;
            }

            if(registeredPassWordBox.Password.Length >18 || registeredPassWordBox.Password.Length < 3)
            {
                return true;
            }

            return false;
        }

        //驗證碼對錯
        private void button3_Click(object sender, RoutedEventArgs e)
        {
            if(VerificationCodeTextBox.Text=="")
            {
                verificationLable5.Content = "×";
            }
            else if (Convert.ToInt32(verificationLable1.Content) + Convert.ToInt32(verificationLable3.Content.ToString()) == Convert.ToInt32(VerificationCodeTextBox.Text))
            {
                verificationLable5.Content = "√";
            }
            else
            {
                verificationLable5.Content = "×";
            }
        }

        //驗證賬號是否重複
        private bool IsSameAccount()
        {
            string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            SqlConnection sqlconn = new SqlConnection(sqlconnstr);
            sqlconn.Open();
            SqlCommand sqlCmd2 = new SqlCommand("select * from Users", sqlconn);
            SqlDataReader sDR = sqlCmd2.ExecuteReader();
            while (sDR.Read())
            {
                
                if(registeredAccountNumberTextBox.Text==sDR["UserName"].ToString().Trim())
                {
                    sqlconn.Close();
                    sDR.Close();
                    return true;
                }
            }
            sqlconn.Close();  //關閉連接
            sDR.Close();
            return false;
        }
    }
}

UserList.xaml

前臺頁面代碼

<Window x:Class="ClassApp.UserList"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ClassApp"
        mc:Ignorable="d"
        Title="用戶查詢" Height="520" Width="404">
    <Grid>
        <Button x:Name="button1" Content="顯示數據" HorizontalAlignment="Left" Margin="27,360,0,0" VerticalAlignment="Top" Width="343" Click="button_Click"/>
        <TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="27,402,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="180"/>
        <Button x:Name="button2" Content="查詢用戶" HorizontalAlignment="Left" Margin="236,402,0,0" VerticalAlignment="Top" Width="75" Height="23" Click="button2_Click"/>
        <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="27,31,0,0" VerticalAlignment="Top" Height="296" Width="343"/>
        <TextBox x:Name="DeleteText" HorizontalAlignment="Left" Height="23" Margin="27,449,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="180" RenderTransformOrigin="-0.005,0.496"/>
        <Button x:Name="DeleteButton" Content="刪除用戶" HorizontalAlignment="Left" Margin="236,449,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="0.5,0.5" Height="23" Click="DeleteButton_Click"/>

    </Grid>
</Window>

後臺功能代碼

using System;
using System.Data.SqlClient;
using System.Windows;
using System.Configuration;
using System.Data;

namespace ClassApp
{

    /// <summary>
    /// UserList.xaml 的交互邏輯
    /// </summary>
    
     public partial class UserList : Window
    {
        public UserList()
    {
        InitializeComponent();
    }
        class DataBaseHelper
        {

            /// 數據庫打開連接的方法
            /// 
            /// </summary>
            /// <returns></returns>
            public static SqlConnection getSqlConnection()
            {
                string sqlconnstr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
                SqlConnection sqlConnection = new SqlConnection(sqlconnstr);
                try
                {
                    //獲取數據庫字符串
                    sqlConnection.Open();
                    sqlConnection.Close();
                }
                catch
                {
                    throw new Exception("無法連接數據庫服務器");
                }

                return sqlConnection;
            }

            /// sql增刪改的方法
            /// 
            /// </summary>
            /// <param name="sqlstr"></param>
            /// <returns></returns>
            public static int GetNonQueryEffect(string sqlstr)
            {
                SqlConnection sqlConnection = new SqlConnection();
                try
                {
                    sqlConnection.Open();
                    //創建要執行的語句
                    SqlCommand cmd = new SqlCommand(sqlstr, sqlConnection);
                    return cmd.ExecuteNonQuery();//返回執行語句中的錯誤
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.ToString());

                }
                finally
                {
                    sqlConnection.Close();
                    sqlConnection.Dispose();//釋放資源
                }

            }

            /// 讀取數據的的方法 
            /// 
            /// </summary>
            /// <param name="sqlstr"></param>
            /// <returns></returns>
            public static DataSet GetDataset(string sqlstr)
            {
                SqlConnection conn = getSqlConnection();
                try
                {
                    conn.Open();//打開數據庫連接
                    SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn);//更新數據庫的命令
                    DataSet ds = new DataSet();
                    sda.Fill(ds);//填充
                    return ds;
                }
                catch (Exception ex)
                {

                    throw new Exception(ex.ToString());
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
            public static DataSet DeleteGetData(string sqlstr)
            {
                SqlConnection conn = getSqlConnection();
                try
                {
                    conn.Open();//打開數據庫連接
                    //SqlDataAdapter sda = new SqlDataAdapter(sqlstr, conn);//更新數據庫的命令
                    DataSet ds = new DataSet();
                    
                    return ds;
                }
                catch (Exception ex)
                {

                    throw new Exception(ex.ToString());
                }
                finally
                {
                    conn.Close();
                    conn.Dispose();
                }
            }
        }
        private void button_Click(object sender, RoutedEventArgs e)
        {
            string str = "select * FROM Users";//查詢的語句
            dataGrid.ItemsSource = DataBaseHelper.GetDataset(str).Tables[0].DefaultView;
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            if (textBox.Text.Trim() == " ")
            {
                return;
            }
            string strr = string.Format("select * FROM Users where UserName='{0}'", textBox.Text);
            dataGrid.ItemsSource = DataBaseHelper.GetDataset(strr).Tables[0].DefaultView;
        }

        private void DeleteButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                MessageBoxResult dr = MessageBox.Show("是否刪除該條數據?", "系統提示", MessageBoxButton.OK);
                if (dr == MessageBoxResult.OK)
                {
                    if (DeleteText.Text.Trim() == " ")
                    {
                        return;
                    }
                    string strrr = string.Format("delete from Users where UserName ='"+DeleteText.Text.ToString()+"'");
                    MessageBox.Show(DeleteText.Text.ToString());
                    dataGrid.ItemsSource = DataBaseHelper.DeleteGetData(strrr).Tables[0].DefaultView;
                    
                    MessageBox.Show("刪除成功");
                }
            }
            catch (Exception)
            {
                throw;
            }
           
           
            
        }
    }
   
       
}

總體來說實現了增刪查改,如果要實現修改功能則變換一下sql語句就可以了,後面還會把這個項目改爲三層架構的形式,使其更加清晰明瞭。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章