Example #1
0
/// <summary>
/// ////////////////////////////////////////////////登录按钮//////////////////////////////////////////////
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            int i = 1;

            dd.UserName = comboBox1.Text.Trim(); //获取用户名
            dd.PassWord = textBox2.Text.Trim();  //获取密码

            label6.Visible = false;              //首先隐藏所有提示信息,已便重新显示当前的提示
            label8.Visible = false;
            label9.Visible = false;
            ///////////////////为空则抖动窗口并提示///////////////////////
            if (dd.UserName == "")
            {
                location = this.Location;                       //记录窗体原始坐标
                angle    = 0;                                   //将窗体抖动角置零

                while (i <= 2000)
                {
                    i++;
                    int x = location.X + (int)(radius * Math.Sin(angle * Math.PI / 180)); //计算水平坐标
                    int y = location.Y + (int)(radius * Math.Cos(angle * Math.PI / 180)); //计算垂直坐标
                    angle         = (angle + 16) % 360;                                   //增加窗体抖动角度
                    this.Location = new Point(x, y);                                      //设置窗体当前坐标
                }


                i = 1;

                this.Location  = location;
                label8.Visible = true;
            }

            else
            {
                SqlConnection connection = new SqlConnection();
                try
                {
                    string connString = "Data Source=DESKTOP-G3H3VUM;Database=car;Trusted_Connection=true;";
                    dd.sqlConnection            = connString;
                    connection.ConnectionString = connString;
                    connection.Open();
                    string lishi      = "history";
                    string yonhu      = "appusr";
                    string guanliyuan = "usr";
                    ///////////////////////////判断数据库中是否已经存在表,否则建表/////////////

                    string     tableview  = "select count(1) from sysobjects where name ='" + lishi + "'";
                    string     tableview1 = "select count(1) from sysobjects where name ='" + yonhu + "'";
                    string     tableview2 = "select count(1) from sysobjects where name ='" + guanliyuan + "'";
                    SqlCommand cmd0       = new SqlCommand(tableview, connection);
                    SqlCommand cmd5       = new SqlCommand(tableview1, connection);
                    SqlCommand cmd6       = new SqlCommand(tableview2, connection);

                    int result  = Convert.ToInt32(cmd0.ExecuteScalar());
                    int result1 = Convert.ToInt32(cmd5.ExecuteScalar());
                    int result2 = Convert.ToInt32(cmd6.ExecuteScalar());

                    if (result == 0)
                    {
                        string     cmdText = @"CREATE TABLE history(
                                       车位号 int not null,
                                       车主名 varchar(10),
                                       停靠时刻 datetime,
                                       离开时刻 datetime ,
                                       占用时间 int )";
                        SqlCommand cmd1    = new SqlCommand(cmdText, connection);
                        cmd1.ExecuteNonQuery();
                    }
                    if (result2 == 0)
                    {
                        string     cmdText1 = @"create table usr(
                                       用户名 varchar(50) not null,
                                       密码 varchar(50) not null,
                                       登录时间 datetime,
                                       下线时间 datetime)";
                        SqlCommand cmd2     = new SqlCommand(cmdText1, connection);
                        cmd2.ExecuteNonQuery();

                        ////////////////初始设置默认用户名密码////////////////////////////////
                        string     u = "ghx", p = "123456";
                        string     sql  = string.Format("insert into usr(用户名,密码)" + "values('{0}','{1}')", u, p);
                        SqlCommand cmd3 = new SqlCommand(sql, connection);
                        //   connection.Open();
                        cmd3.ExecuteNonQuery();
                    }
                    if (result1 == 0)
                    {
                        string     cmdText2 = @"create table appusr(
                                       卡号 nchar(10) not null,
                                       用户名 nchar(10) not null primary key,
                                       密码 nchar(10) not null,
                                       入库时间 datetime null,
                                       出库时间 datetime null,
                                       账户余额 int null)";
                        SqlCommand cmd4     = new SqlCommand(cmdText2, connection);
                        cmd4.ExecuteNonQuery();
                    }



                    ////////////将输入的用户名和密码在数据库中查询是否存在///////////////////

                    string     str  = "select count(*) from usr where 用户名='" + dd.UserName + "'";
                    string     str1 = "select 密码 from usr where 用户名='" + dd.UserName + "'"; //取出数据库中对应用户名的密码
                    SqlCommand cmd  = new SqlCommand(str, connection);                      //创建命令对象;
                    SqlCommand cmd7 = new SqlCommand(str1, connection);
                    //  mysql ch = new mysql();

                    //  int n =ch.sqlchaxun(UserName, PassWord);
                    int n = (int)cmd.ExecuteScalar();

                    if (n >= 1)              //判断是否存在用户名
                    {
                        SqlDataReader jzmm = cmd7.ExecuteReader();
                        jzmm.Read();
                        string mm = (string)jzmm["密码"];
                        jzmm.Close();


                        if (mm.Equals(dd.PassWord))               //////密码正确将管理员登录信息写入数据库并开启主窗口
                        {
                            SqlCommand chg = new SqlCommand();    //更新第一次注册的用户登录时间
                            chg.CommandText = "UPDATE usr SET 登录时间='" + DateTime.Now + "' WHERE 用户名='" + dd.UserName + "' and 登录时间 is null";
                            string     sql  = string.Format("insert into usr(用户名,密码,登录时间)" + "values('{0}','{1}','{2}')", dd.UserName, dd.PassWord, DateTime.Now);
                            SqlCommand cmd3 = new SqlCommand(sql, connection);
                            chg.Connection = connection;
                            int ya = chg.ExecuteNonQuery();
                            if (ya == 0)               ///若不是第一次注册用户则添加一行记录他的登录时间
                            {
                                cmd3.ExecuteNonQuery();
                            }

                            //////////////////若勾选记住密码则将登录信息写入本地///////////
                            if (checkBox1.Checked.Equals(true))
                            {
                                DES    jiami = new DES();
                                string jmmm  = jiami.EncryptString(dd.PassWord);    //密码写入本地文件前加密

                                XmlDocument xmldoc = new XmlDocument();
                                xmldoc.Load("login.xml");                                           //加载文件

                                XmlNodeList nodeList = xmldoc.SelectSingleNode("login").ChildNodes; //获取login节点的所有子节点
                                foreach (XmlNode xn in nodeList)                                    //遍历所有节点
                                {
                                    XmlElement xe = (XmlElement)xn;                                 //将子节点类型转换为XmlElement类型
                                    if (xe.GetAttribute("name") == dd.UserName)                     //如果本地已经存有这个用户名,则修改相关属性
                                    {
                                        xe.SetAttribute("password", jmmm);
                                        xe.SetAttribute("checked", "t");
                                        xmldoc.Save("login.xml"); //保存其更改
                                        goto pass;                //跳过添加节点的语句
                                    }
                                }
                                XmlNode    root = xmldoc.SelectSingleNode("login"); //查找login节点
                                XmlElement xe1  = xmldoc.CreateElement("uers");     //添加一个uers节点
                                xe1.SetAttribute("name", dd.UserName);              //设置登录名、密码、勾选状态的属性
                                xe1.SetAttribute("password", jmmm);
                                xe1.SetAttribute("checked", "t");
                                root.AppendChild(xe1);
                                xmldoc.Save("login.xml"); //保存其更改
                            }
                            else                          //若没有勾选记住密码则修改勾选属性
                            {
                                XmlDocument xmldoc = new XmlDocument();
                                xmldoc.Load("login.xml");                                           //加载文件

                                XmlNodeList nodeList = xmldoc.SelectSingleNode("login").ChildNodes; //获取login节点的所有子节点
                                foreach (XmlNode xn in nodeList)                                    //遍历所有节点
                                {
                                    XmlElement xe = (XmlElement)xn;                                 //将子节点类型转换为XmlElement类型
                                    if (xe.GetAttribute("name") == dd.UserName)                     //如果本地已经存有这个用户名,则只修改勾选属性
                                    {
                                        xe.SetAttribute("checked", "f");
                                        xmldoc.Save("login.xml"); //保存其更改
                                        goto pass;                //跳出遍历
                                    }
                                }
                            }

pass:
                            main start = new main();
                            start.Show();
                            this.Hide();
                        }
                        else                                   ///////////////密码错误导致窗口抖动//////////////////
                        {
                            location = this.Location;          //记录窗体原始坐标
                            angle    = 0;                      //将窗体抖动角置零

                            while (i <= 2000)
                            {
                                i++;
                                int x = location.X + (int)(radius * Math.Sin(angle * Math.PI / 180)); //计算水平坐标
                                int y = location.Y + (int)(radius * Math.Cos(angle * Math.PI / 180)); //计算垂直坐标
                                angle         = (angle + 16) % 360;                                   //增加窗体抖动角度
                                this.Location = new Point(x, y);                                      //设置窗体当前坐标
                            }


                            i = 1;

                            this.Location  = location;
                            label6.Visible = true;
                        }
                    }
                    else                                   ///////////////用户名不存在导致窗口抖动//////////////////
                    {
                        location = this.Location;          //记录窗体原始坐标
                        angle    = 0;                      //将窗体抖动角置零

                        while (i <= 2000)
                        {
                            i++;
                            int x = location.X + (int)(radius * Math.Sin(angle * Math.PI / 180)); //计算水平坐标
                            int y = location.Y + (int)(radius * Math.Cos(angle * Math.PI / 180)); //计算垂直坐标
                            angle         = (angle + 16) % 360;                                   //增加窗体抖动角度
                            this.Location = new Point(x, y);                                      //设置窗体当前坐标
                        }


                        i = 1;

                        this.Location  = location;
                        label9.Visible = true;
                    }
                }

                catch
                {
                    setsql sq = new setsql();

                    sq.dou += new setsql.chclose(this.dou1);
                    sq.sht += new setsql.chclose(this.sht1);
                    sq.Show();
                }
            }
        }
Example #2
0
        //数据处理接口
        public void ClientServer()
        {
            //string connString = "Data Source=GHX;Database=car;Trusted_Connection=true;";   //定义连接数据库的字符串
            string        connString = dd.sqlConnection;
            SqlConnection connection = new SqlConnection(connString);                            //创建连接对象


            string recvStr = "";

            byte[] recvBytes = new byte[1024];

            int bytes;

            bytes    = client.Receive(recvBytes, recvBytes.Length, 0);  //从客户端接受消息
            recvStr += encoding.GetString(recvBytes, 0, bytes);

            //////////////////////根据接收的数据的第一个字符判断客户端的需求,@为登录密码验证,#为用户余额,$为车库通告,%为反馈意见,^为修改密码,&为车位预约,*为获取已占用车位,(为取消预约,)为标记车位//////////////////
            if (recvBytes[0] == '@')
            {
                recvStr = recvStr.Substring(1);
                string     panduan1 = "select count(*) from appusr where 用户名='" + recvStr + "'"; //判断数据库是否存在这个用户名
                string     panduan  = "select 密码 from appusr where 用户名='" + recvStr + "'";       //根据客户端传过来的用户名查找数据库中对应的密码
                SqlCommand cmd1     = new SqlCommand(panduan1, connection);
                SqlCommand cmd      = new SqlCommand(panduan, connection);
                connection.Open();
                int n = (int)cmd1.ExecuteScalar();
                if (n >= 1)
                {
                    SqlDataReader pas = cmd.ExecuteReader();
                    pas.Read();
                    string sendStr = pas["密码"].ToString();

                    byte[] bs = Encoding.ASCII.GetBytes(sendStr);

                    client.Send(bs, bs.Length, 0);      //返回密码给客户端
                }
                else
                {
                    string nousr = "******";                               //为了客户端程序方便取出非空值所以加了空格为字符结束标志
                    byte[] nu    = Encoding.ASCII.GetBytes(nousr);
                    client.Send(nu, nu.Length, 0);
                }
            }

            if (recvBytes[0] == '#')
            {
                recvStr = recvStr.Substring(1);
                string     chayue = "select 账户余额 from appusr where 用户名='" + recvStr + "'";
                SqlCommand cmd    = new SqlCommand(chayue, connection);
                connection.Open();
                SqlDataReader yue = cmd.ExecuteReader();
                yue.Read();
                string sendStr = yue["账户余额"].ToString();
                sendStr = sendStr + " ";                            //为了客户端程序方便取出非空值所以加了空格为字符结束标志
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);

                client.Send(bs, bs.Length, 0);      //返回密码给客户端
            }

            if (recvBytes[0] == '$')
            {
                string mess = dd.newmessege + "#" + dd.oldmessege + " ";    //新通告和历史通告合成一个字符串并用#区分
                byte[] bs   = encoding.GetBytes(mess);

                client.Send(bs, bs.Length, 0);
            }

            if (recvBytes[0] == '%')
            {
                string fankui = "success ";
                byte[] bs     = encoding.GetBytes(fankui);
                client.Send(bs, bs.Length, 0);
                recvStr = recvStr.Substring(1);

                /////////////////将反馈的意见写入本地txt文件////////////////////////////
                StreamWriter sw = new StreamWriter("fankui.txt", true, System.Text.Encoding.Unicode);
                sw.WriteLine(recvStr);
                sw.WriteLine("发自" + DateTime.Now.ToString("20yy年MM月dd日 HH:mm:ss"));
                sw.WriteLine("******************");
                sw.Close();

                ///////////////////////显示在主面板上////////////////
                main fkxx = new main();
                dd.jzxs = dd.gdcs - 1;              //记住滚动到的条数
                dd.gdcs = 4;
                if (recvStr.Length > 39)            //若消息字数超过一个版面则后面的字用省略号代替
                {
                    dd.fkxs = "新消息:\n" + "  " + recvStr.Substring(0, 33) + "......";
                }
                else
                {
                    dd.fkxs = "新消息:\n" + "  " + recvStr;
                }
            }

            if (recvBytes[0] == '^')
            {
                recvStr = recvStr.Substring(1);
                string[] passg;
                passg = recvStr.Split('#');
                string     panduan1 = "select count(*) from appusr where 用户名='" + passg[0] + "'";             //判断数据库是否存在这个用户名
                string     panduan  = "UPDATE appusr set 密码='" + passg[1] + "' where 用户名='" + passg[0] + "'"; //根据客户端传过来的用户名修改数据库中对应的密码
                SqlCommand cmd1     = new SqlCommand(panduan1, connection);
                connection.Open();
                int n = (int)cmd1.ExecuteScalar();
                if (n >= 1)
                {
                    SqlCommand cmd = new SqlCommand(panduan, connection);
                    cmd.ExecuteNonQuery();
                    string xg = "success ";
                    byte[] bs = Encoding.ASCII.GetBytes(xg);

                    client.Send(bs, bs.Length, 0);
                }
                else
                {
                    string nousr = "******";                               //为了客户端程序方便取出非空值所以加了空格为字符结束标志
                    byte[] nu    = Encoding.ASCII.GetBytes(nousr);
                    client.Send(nu, nu.Length, 0);
                }
            }


            if (recvBytes[0] == '&')
            {
                recvStr = recvStr.Substring(1);
                string[] yudh;
                yudh = recvStr.Split('#');

                string     ye   = "select 账户余额 from appusr where 用户名='" + yudh[0] + "'";  //取出数据库中的余额数
                SqlCommand cmd1 = new SqlCommand(ye, connection);
                connection.Open();
                SqlDataReader yue = cmd1.ExecuteReader();
                yue.Read();
                int yuer = (int)yue["账户余额"];

                if (yuer > 0)                                       //若账户余额不足不允许选择车位,且向客户端发出提醒
                {
                    dd.xuanwei[Convert.ToInt32(yudh[1])] = yudh[0]; //以预定车位号为下标将车主名存入数组

                    string fankui = "success ";
                    byte[] bs     = encoding.GetBytes(fankui);
                    client.Send(bs, bs.Length, 0);
                }
                else
                {
                    string fankui = "false ";
                    byte[] bs     = encoding.GetBytes(fankui);
                    client.Send(bs, bs.Length, 0);
                }
            }

            if (recvBytes[0] == '*')
            {
                recvStr = recvStr.Substring(1);
                byte[] bs = new byte[13];

                for (int i = 1; i < 13; i++)
                {
                    if (dd.xuanwei[i] != null)             //将已选择的车位号返回发送给客户端
                    {
                        if (dd.xuanwei[i].Equals(recvStr)) //若为自己选择的车位号则存到数组的第一个值中
                        {
                            bs[0] = (byte)(i);
                        }
                        bs[i] = (byte)(i);
                    }

                    if (dd.cwzt[i] == 1)
                    {
                        bs[i] = (byte)(i);
                    }
                }
                client.Send(bs, bs.Length, 0);
            }

            if (recvBytes[0] == '(')
            {
                recvStr = recvStr.Substring(1);

                int h = 1;
                for (int i = 1; i < 13; i++)
                {
                    if (dd.xuanwei[i] != null)
                    {
                        if ((dd.xuanwei[i].Equals(recvStr)) && (dd.cwzt[i] == 0))
                        {
                            dd.xuanwei[i] = null;
                            string quxiao = "success ";
                            byte[] bs     = encoding.GetBytes(quxiao);
                            client.Send(bs, bs.Length, 0);
                            h = 0;
                            break;
                        }
                        else                           //若车未离开不允许取消选择
                        if (dd.xuanwei[i].Equals(recvStr))
                        {
                            string qx = "cannot ";
                            byte[] bs = encoding.GetBytes(qx);
                            client.Send(bs, bs.Length, 0);
                        }
                    }
                }

                if (h == 1)
                {
                    string qx = "false ";
                    byte[] bs = encoding.GetBytes(qx);
                    client.Send(bs, bs.Length, 0);
                }
            }

            if (recvBytes[0] == ')')
            {
                recvStr = recvStr.Substring(1);
                string[] bjcw;
                bjcw = recvStr.Split('#');

                //         string kong="";           //用于表示车主名为空


                ///////////////将标记该车位号的车主名写入数据库/////////////////////////////
                SqlCommand chg = new SqlCommand();
                chg.Connection = connection;
                string zsj = string.Format("UPDATE history SET 车主名='{0}' WHERE 车位号='" + Convert.ToInt32(bjcw[1]) + "' and 离开时刻 is null and 车主名='" + "" + "'", bjcw[0]);
                chg.CommandText = zsj;
                connection.Open();
                int bj = chg.ExecuteNonQuery();
                if (bj >= 1)
                {
                    dd.xuanwei[Convert.ToInt32(bjcw[1])] = bjcw[0];         //以标记的车位号为下标将车主名存入数组
                    string fankui = "success ";
                    byte[] bs     = encoding.GetBytes(fankui);
                    client.Send(bs, bs.Length, 0);
                }
                else
                {
                    string fankui = "false ";
                    byte[] bs     = encoding.GetBytes(fankui);
                    client.Send(bs, bs.Length, 0);
                }
            }

            client.Close();
        }