/// <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(); } } }
//数据处理接口 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(); }