说明:通过xml完成用户登录信息的判断

1 搭建UI页面

2 新建一个student类,类中包含以上属性

public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public char Gender { get; set; } }

Student

3 页面加载时,先获取xml文件(包含了多个student)

4 首先进行添加
  4.1 先判断文件是否存在

    存在:加载  不存在:创建并添加

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml; namespace XML_Login
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<Student> list = new List<Student>(); //1创建xml对象
XmlDocument doc = new XmlDocument();
private void Form1_Load(object sender, EventArgs e)
{ } #region 01创建文件 public void CreateFile()
{
//1创建声明信息
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
//2创建person根节点
XmlElement person = doc.CreateElement("Person");
doc.AppendChild(person);
AddNode(person);
}
#endregion #region 03添加节点
private void AddNode(XmlElement person)
{
//3创建Student子节点
XmlElement student = doc.CreateElement("Student");
person.AppendChild(student);
//4Student子节点设置属性Id
student.SetAttribute("ID", txtID.Text.Trim());
//5Student添加Name节点
XmlElement name = doc.CreateElement("Name");
name.InnerText = txtName.Text.Trim();
student.AppendChild(name);
//5Student添加Age节点
XmlElement age = doc.CreateElement("Age");
age.InnerText = txtAge.Text.Trim();
student.AppendChild(age);
//6Student添加Gender节点
XmlElement gender = doc.CreateElement("Gender");
if (RDMan.Checked == true)
{
gender.InnerText = "男";
}
else
{
gender.InnerText = "女";
}
student.AppendChild(gender);
}
#endregion #region 04判断studentID是否存在
public bool IsExist()
{
doc.Load("Person.xml");
//1 获取根节点
XmlElement person = doc.DocumentElement;
//2 获取所有student的属性
XmlNodeList students = person.ChildNodes;
List<string> listID = new List<string>();
foreach (XmlNode item in students)
{
listID.Add(item.Attributes["ID"].Value);
}
if (listID.Contains(txtID.Text))
{
return true;
}
return false;
}
#endregion #region 04"添加"按钮触发事件
private void btnAdd_Click(object sender, EventArgs e)
{
int Id;
if (!int.TryParse(txtID.Text.Trim(), out Id))
{
MessageBox.Show("ID请输入正整数");
return;
}
if (File.Exists("Person.xml"))
{
//判断student ID是否存在
if (IsExist())
{
MessageBox.Show("ID已存在");
return;
}
//添加节点
doc.Load("Person.xml");
XmlElement person = doc.DocumentElement;
AddNode(person);
}
else
{
//创建文件--同时把当前页面的Student信息保存到文件中
CreateFile();
}
doc.Save("Person.xml");
MessageBox.Show("保存成功!");
}
#endregion
}
}

5 进一步完善登录按钮

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml; namespace XML_Login
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
List<Student> list = new List<Student>(); //1创建xml对象
XmlDocument doc = new XmlDocument();
private void Form1_Load(object sender, EventArgs e)
{ } #region 01创建文件 public void CreateFile()
{
//1创建声明信息
XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "utf-8", null);
doc.AppendChild(dec);
//2创建person根节点
XmlElement person = doc.CreateElement("Person");
doc.AppendChild(person);
AddNode(person);
}
#endregion #region 02添加节点
private void AddNode(XmlElement person)
{
//3创建Student子节点
XmlElement student = doc.CreateElement("Student");
person.AppendChild(student);
//4Student子节点设置属性Id
student.SetAttribute("ID", txtID.Text.Trim());
//5Student添加Name节点
XmlElement name = doc.CreateElement("Name");
name.InnerText = txtName.Text.Trim();
student.AppendChild(name);
//5Student添加Age节点
XmlElement age = doc.CreateElement("Age");
age.InnerText = txtAge.Text.Trim();
student.AppendChild(age);
//6Student添加Gender节点
XmlElement gender = doc.CreateElement("Gender");
if (RDMan.Checked == true)
{
gender.InnerText = "男";
}
else
{
gender.InnerText = "女";
}
student.AppendChild(gender);
}
#endregion #region 03判断studentID是否存在
public bool IsExist()
{
doc.Load("Person.xml");
//1 获取根节点
XmlElement person = doc.DocumentElement;
//2 获取所有student的属性
XmlNodeList students = person.ChildNodes;
List<string> listID = new List<string>();
foreach (XmlNode item in students)
{
listID.Add(item.Attributes["ID"].Value);
}
if (listID.Contains(txtID.Text))
{
return true;
}
return false;
}
#endregion #region 04"添加"按钮触发事件
private void btnAdd_Click(object sender, EventArgs e)
{
int Id;
if (!int.TryParse(txtID.Text.Trim(), out Id))
{
MessageBox.Show("ID请输入正整数");
return;
}
if (File.Exists("Person.xml"))
{
//判断student ID是否存在
if (IsExist())
{
MessageBox.Show("ID已存在");
return;
}
//添加节点
doc.Load("Person.xml");
XmlElement person = doc.DocumentElement;
AddNode(person);
}
else
{
//创建文件--同时把当前页面的Student信息保存到文件中
CreateFile();
}
doc.Save("Person.xml");
MessageBox.Show("保存成功!");
}
#endregion #region 05单击"登录"按钮触发事件
private void btnLogin_Click(object sender, EventArgs e)
{
//判断id是否存在
int Id;
if (!int.TryParse(txtID.Text.Trim(), out Id))
{
MessageBox.Show("ID请输入正整数");
return;
}
if (File.Exists("Person.xml"))
{
//判断student ID是否存在
if (!IsExist())
{
MessageBox.Show("ID不存在");
return;
}
//根据ID获取数据
XmlNode student = GetDataByID(Id);
//判断数据是否一致
if (IsSuccess(student))
{
MessageBox.Show("登录成功!");
}
else {
MessageBox.Show("登录失败");
}
}
else
{
MessageBox.Show("数据文件不存在,请单击添加按钮创建xml文件");
}
}
#endregion #region 06根据ID获取数据
public XmlNode GetDataByID(int id)
{
doc.Load("Person.xml");
//获取根节点
XmlElement person = doc.DocumentElement;
XmlNode xn = person.SelectSingleNode("/Person/Student[@ID="+id+"]");
return xn;
}
#endregion #region 07判断数据是否一致
public bool IsSuccess(XmlNode xn)
{
string name = xn["Name"].InnerXml;
string age = xn["Age"].InnerXml;
string gender = xn["Gender"].InnerXml; string name2 = txtName.Text.Trim();
string age2 = txtAge.Text.Trim();
string gender2 = RDMan.Checked? "男":"女";
if (name==name2&&age.Equals(age2)&&gender.CompareTo(gender2)==)
{
return true;
}
return false;
}
#endregion
}
}

  

步步为营-22-xml登录的更多相关文章

  1. 22.XML

    转载:https://www.cnblogs.com/yuanchenqi/article/5732581.html xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用 ...

  2. 步步为营-76-用户登录(Session+Cookie)

    说明:cookie是保存在浏览器的.Session是存储在服务器的 1 同样UI页面还是web前端提供 1.1 首先,经过验证码校验:将系统产生的验证码放入到Session中,然后取Session值注 ...

  3. Android 实现QQ第三方登录

    Android 实现QQ第三方登录 在项目中需要实现QQ第三方登录,经过一番努力算是写出来了,现在总结以下,以防以后遗忘,能帮到其他童鞋就更好了. 首先肯定是去下载SDK和DEMO http://wi ...

  4. 步步为营-81-HttpModule(再谈Session)

    说明:session用于记录数据信息并存放在服务器内存中,但是存在一些问题.例如当使用服务器集群是会出现session丢失等情况.虽然微软提供了一些解决方案(Session进程外存储,或者存到数据库中 ...

  5. php使用curl模拟登录带验证码的网站[开发篇]

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...

  6. linux 服务器之间配置免密登录

    客户机:172.16.1.2 远程机:172.16.1.3 1.远程机 a.允许root用户通过22端口登录 vi /etc/ssh/sshd_config PORT 22 PermitRootLog ...

  7. Atitit.注册跟个登录功能的实现attilax总结obo

    Atitit.注册跟个登录功能的实现attilax总结obo 1. 注册模块 2 1.1. 基本注册功能(用户名方式) 2 1.2. 动态ajax监测用户名重复 2 1.3. 注册手机验证 2 1.4 ...

  8. php使用curl模拟登录带验证码的网站

    需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...

  9. Xshell登录Vagrant方式

    Xshell登录Vagrant方式 我上一篇文章 介绍了vagrant 如何创建虚拟机集群,在上篇文章的基础上,用xshell 登录 虚拟机发现 默认是无法使用账号密码登录root账号,只能使用vag ...

  10. 修改Linux中ssh协议中的默认端口号22

    说明:最近的一台服务器老是提示异常登录.主要原因是你的账户和密码可能太简单了,别人用默认的端口22进行登录. 打开SSH端口所在文件 vim /etc/ssh/sshd_config 进入编辑模式,将 ...

随机推荐

  1. JavaSE学习总结(十七)—— IO流

    一.IO流概要 1.1.概念 开发中经常要进行输入输出操作,掌握Java中的IO流显得非常必要. 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流, ...

  2. Gitlab部署

    前言 因部门业务整顿,需将原有的多部门共用的Gitlab环境遗弃,新建部门独立的Gitlab环境! 安装 CE版本安装操作:https://about.gitlab.com/install/#cent ...

  3. SLT 优先队列 哈弗曼树最小带权路径

    与普通的队列不同,普通的队列是先进先出的,而优先队列出队的顺序不是先进先出,而是大(或者小)元素先出队,需要#include <queue> 成员函数 成员函数 作用 empty() 判断 ...

  4. pyinstaller 打包不成功,提示inporterror 缺少xlrd、xlwt

    问题:pyinstaller 打包不成功,提示inporterror 缺少xlrd.xlwt 解决:将 pypiwin 230 改为 219

  5. 多文档界面QMdiArea

    当使用多文档界面功能时,我们是将QMdiArea作为主窗口的中央部件,然后在这个中央部件中,我们可以同时打开很多个子窗口QMdiSubWindow 样式: import sys from PyQt5. ...

  6. W3C规范

    连接:https://www.w3cschool.cn/xuexiw3c/xuexiw3c-standards.html W3C 代码标准规范 由 路飞 创建, 最后一次修改 2017-01-03 W ...

  7. position属性absolute与relative 的区别

    连接:https://www.cnblogs.com/duyanli/p/3534005.html 每次要用到Position属性时,总要去搜索下,这两个属性值的区别:今天就直接复制网上的结果,以便以 ...

  8. MySQL中查询行数最多的表并且排序

    #切换到schema use information_schema; #查询数据量最大的30张表 并排序 select table_name,table_rows from tables order ...

  9. CentOS6.4下Mysql数据库的安装与配置

    原文连接:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 说到数据库,我们大多想到的是关系型数据库,比如 ...

  10. adb查看安卓设备系统Android版本

    adb shell getprop "ro.build.version" 结果中如下两项便是版本信息: [ro.build.version.release]: [4.4.4][ro ...