using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace WindowsApplication25
{
    public partial class apply : Form
    {
        DataBase db;//实例化类库DataBase，命名为db
        public apply()
        {
            InitializeComponent();
        }
        //页面加载初始化事件，加载皮肤美化文件
        private void apply_Load(object sender, EventArgs e)
        {
            skinEngine1.SkinFile = "MSN.ssk";
        }
        //点击取消按钮后，BUTTON按钮的鼠标单击事件。关闭当前窗体
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        //点击注册按钮后，BUTTON按钮的鼠标单击事件。开始进行用户信息注册。
        //在验证用户的输入正确后，插入一条该用户信息，并反馈该用户系统聊天号码。
        private void button1_Click(object sender, EventArgs e)
        {
            db = new DataBase();//初始化数据库
             // 验证通过，就保存到数据库
            if (ValidateInput())
            {
                int QQNum = 0;     // QQ号码
                string message;      // 弹出的消息
                string sex = radioButton1.Checked ? radioButton1.Text : radioButton2.Text; // 获得选中的性别
                string sqlstring = "";     // 查询用的SQL语句
                int starId;          // 星座Id
                int bloodTypeId;     // 血型Id   
                bool miss = false;  // 操作数据库是否出错
                // 获得星座的Id
                starId = GetStarId();
                // 获得血型的Id
                bloodTypeId = GetBloodType();
                sqlstring = string.Format("INSERT INTO Users (LoginPwd, NickName, Sex, Age, Name, StarId, BloodTypeId) values ('{0}','{1}','{2}',{3},'{4}',{5},{6})",textBox3.Text.Trim(), textBox1.Text.Trim(), sex, int.Parse(textBox2.Text.Trim()), textBox5.Text.Trim(), starId, bloodTypeId);
                try
                {
                    
                    // 创建 Command 对象
                    SqlCommand command = new SqlCommand(sqlstring, db.connection);
                    db.open();             // 打开数据库连接
                    int result = command.ExecuteNonQuery(); // 执行插入命令
                    if (result == 1)
                    {
                        sqlstring = "SELECT @@Identity FROM Users";  // 查询新增加的记录的标识号
                        command.CommandText = sqlstring;             // 重新指定 Command 对象的 SQL 语句
                        QQNum = Convert.ToInt32(command.ExecuteScalar());  // 强制类型转换会出错
                        message = string.Format("注册成功！你的MyQQ号码是{0}", QQNum);
                    }
                    else
                    {
                        message = "注册失败，请重试！";
                    }
                }
                catch (Exception ex)
                {
                    miss = true;
                    message = "服务器出现意外错误！请稍候再试！";
                    MessageBox.Show(ex.Message);
                }
                // 显示注册结果
                if (miss)
                {
                    MessageBox.Show(message, "注册失败", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    MessageBox.Show(message, "注册结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                this.Close();
            }
        }
        /// <summary>
        /// 验证用户的输入方法
        /// </summary>
        /// <returns>布尔类型。True为合法，False为非法</returns>
        private bool ValidateInput()
        {
            if (textBox1.Text.Trim() == "")
            {
                MessageBox.Show("请输入昵称！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox1.Focus();
                return false;
            }
            if (textBox2.Text.Trim() == "")
            {
                MessageBox.Show("请输入年龄！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox2.Focus();
                return false;
            }
            if (!radioButton1.Checked && !radioButton2.Checked)
            {
                MessageBox.Show("请选择性别！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                //lblSex.Focus();
                return false;
            }
            if (textBox3.Text.Trim() == "")
            {
                MessageBox.Show("请输入密码！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox3.Focus();
                return false;
            }
            if (textBox4.Text.Trim() == "")
            {
                MessageBox.Show("请输入确认密码！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox4.Focus();
                return false;
            }
            if (textBox3.Text.Trim() != textBox4.Text.Trim())
            {
                MessageBox.Show("两次输入的密码不一样！", "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                textBox4.Focus();
                return false;
            }
            return true;
        }
        /// <summary>
        /// 取得星座的 Id
        /// </summary>
        /// <returns>整数类型。返回用户在数据库中的星座ID</returns>
        private int GetStarId()
        {
            db = new DataBase();
            int starId = -1;  // 返回值
            // 查询星座Id的 SQL 语句
            string sql = string.Format("SELECT Id FROM Star WHERE Star = '{0}'", comboBox1.Text);
            try
            {
                db.open();  // 打开数据库连接
                starId = Convert.ToInt32(db.GetScalar(sql));
            }
            catch (Exception ex)
            {
             MessageBox.Show (ex.Message);
            }
            if (starId > 0)
            {
                return starId;
            }
            else
            {
                return -1;
            }
        }
        /// <summary>
        /// 取得血型的 Id方法
        /// </summary>    
        /// <returns>整数类型。返回用户在数据库中的血型ID</returns>
        private int GetBloodType()
        {
            db = new DataBase();
            int bloodTypeId = -1;  // 返回值

            // 查询星座Id的 SQL 语句
            string sql = string.Format("SELECT Id FROM BloodType WHERE BloodType = '{0}'", comboBox2.Text);
            try
            {
               db.open();  // 打开数据库连接
               bloodTypeId = Convert.ToInt32(db.GetScalar(sql));     
            }
            catch (Exception ex)
            {
               　MessageBox.Show(ex.Message);
            }
           
            if (bloodTypeId > 0)
            {
                return bloodTypeId;
            }
            else
            {
                return -1;
            }
        }
    }
}