说明:通过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. 网络编程基础【day09】:实现简单地ssh(四)

    本节内容 概述 简单ssh socket接收大数据的困惑 一.概述 我们用过linux的就知道什么是ssh,它是一种客户端和服务端交互返回的一个解决,输入一个命令,给我返回什么,接下来我们说一说,如何 ...

  2. Ruby数组的操作

    数组的创建arr = Array.new num #创建num个元素的数组,所有数组元素为nilarr = Array.new num, elem #创建num个元素的数组,所有数组元素为elemar ...

  3. Linux 命令详解(三)./configure、make、make install 命令

    这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤 一.基本信息 1../configure 是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不 ...

  4. 第一节:从程序集的角度分析System.Web.Caching.Cache ,并完成基本封装。

    一. 揭开迷雾 1. 程序集准备 a.  需要给项目添加 System.Web 程序集. b.  需要给使用的地方添加两个引用. 2. 程序集探究      在对应的类中输入关键字 Cache,选中点 ...

  5. MySQL锁解决并发问题详解

    文章分为以下几个要点 问题描述以及解决过程 MySQL锁机制 数据库加锁分析 下面讨论的都是基于MySQL的InnoDB. 0. 问题描述以及解决过程 因为涉及到公司利益问题,所以下面很多代码和数据库 ...

  6. android数据库简单操作

    1.DbOpenHelper package com.example.dbtest.dbHelper; import android.content.Context; import android.d ...

  7. C# 摇奖机实例(线程)

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. luogu P1600 天天爱跑步

    传送门 1A此题暴祭 (下面记点\(x\)深度为\(de_x\),某个时间点记为\(w_x\)) 首先,每条路径是可以拆成往上和往下两条路径的 对于往上的路径,假设有个人往上跑,\(w_y\)在点\( ...

  9. 第16月第23天 atos

    1. grep --after-context=2 "Binary Images:" *crash xcrun atos -o zhiniao_adhoc_stg1.app.dSY ...

  10. 第16月第8天 NSInvocation存储 函数指针 va_arg lldb

    1.NSInvocation存储 -(void)setInvok:(id)target sel:(SEL)sel key:(id)key { if(!target) return; NSMethodS ...