首先传几张效果图描述一下功能:

经过上文用户名和密码的验证后,就到了添加用户这一步,登陆后的用户可以添加新的用户,被添加的用户可以登陆系统。

这里会用到C#中的“正则表达式”对用户名格式进行判断,以及“LinQ to XML”的技术将用户信息添加到本地XML文件中进行持久化。

PS:关于文中注释掉的部分——

//调用序列化方法.
//SerializeUser(AddUserNameText.Text.ToString(), AddUserPwdText.Text.ToString());

可以对用户输入的用户信息(用户名和密码)进行序列化并将结果存储到本地XML文件中。

在此是作为对C#序列化部分知识的一个简单练习,并没有用到本次实践中。

窗体设计如下:

窗体程序代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Xml.Serialization;
using System.IO;
using System.Xml;
using System.Xml.Linq; namespace CheckInfo
{
public partial class AddUserForm : Form
{
public AddUserForm()
{
InitializeComponent();
} private void textBox1_Click(object sender, EventArgs e)
{
if (AddUserNameText.Text == "请输入用户名,格式为domain\\user")
{
AddUserNameText.Text = "";
}
} private void textBox2_Click(object sender, EventArgs e)
{
if (AddUserPwdText.Text == "请输入密码")
{
AddUserPwdText.Text = "";
}
} private void button1_Click(object sender, EventArgs e)
{
validateUserName(AddUserNameText.Text.ToString());
} private void validateUserName(string userName)
{
if (Regex.IsMatch(userName, @"^.+\\.+$") == true)
{
MessageBox.Show("用户名格式正确,准备存入档案!");
if (AddUserPwdText.Text == "")
{
MessageBox.Show("密码不能为空!");
}
else
{
//调用序列化方法.
//SerializeUser(AddUserNameText.Text.ToString(), AddUserPwdText.Text.ToString());
//调用添加user到xml方法.
string xmlPath = @"C:\Users\jqhuang\Desktop\UserInfo.xml";
saveToXml(xmlPath);
}
}
else
{
MessageBox.Show("用户名格式不正确,请重新输入!");
AddUserNameText.Text = "";
}
} private void saveToXml(string xmlPath)
{
//Load XML文件.
XElement xe = XElement.Load(xmlPath);
//创建一个节点信息.
XElement user = new XElement("user",
new XAttribute("customer", "yes"),
new XElement("username", AddUserNameText.Text.ToString()),
new XElement("pwd", AddUserPwdText.Text.ToString())
);
//添加节点信息到XML文件中指定的节点下.
xe.Element("users").Add(user);
//保存XML文件.
xe.Save(xmlPath);
} public static void SerializeUser(string userName,string passWord)
{
//序列化对象到XML.
User user = new User { username = userName, pwd = passWord };
StringWriter sw = new StringWriter();
XmlSerializer serializer = new XmlSerializer(typeof(User));
serializer.Serialize(sw, user);
sw.Close();
FileInfo xmlFile = new FileInfo(@"C:\Users\jqhuang\Desktop\Users.xml");
StreamWriter sr = new StreamWriter(@"C:\Users\jqhuang\Desktop\Users.xml",true);
sr.Write(sw);
sr.Close();
}
}
}
public class User
{
string UserName;
string PassWord;
public string username
{
get { return UserName; }
set { UserName = value; }
}
public string pwd
{
get { return PassWord; }
set { PassWord = value; }
}
}

C#中关于系统用户信息持久化(接上文)的更多相关文章

  1. 菜鸟-手把手教你把Acegi应用到实际项目中(7)-缓存用户信息

    首先讲讲EhCache.在默认情况下,即在用户未提供自身配置文件ehcache.xml或ehcache-failsafe.xml时,EhCache会依据其自身Jar存档包含的ehcache-fails ...

  2. SharePoint 2013 数据库中手动更新用户信息

    在SharePoint的使用过程中,尤其是Windows认证的情况下,而且没有配置用户配置文件服务,经常会出现如果更新AD中的用户信息(包括名字.显示名.邮件等),SharePoint这边站点并不会更 ...

  3. 获取jwt(json web token)中存储的用户信息

    一个JWT实际上就是一个字符串,它由三部分组成,头部(header).载荷(Payload)与签名. Payload payload中可以保存用户的信息. var claims = new Claim ...

  4. SpringBoot中获取微信用户信息从未如此简单!

    前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息.获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息. 需要 ...

  5. SpringSecurity如何在代码中获取认证用户信息

    ⒈ public Object getCurrentUser(){ return SecurityContextHolder.getContext().getAuthentication(); } ⒉ ...

  6. Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一)

    本节内容主要是讲解ActivityManager的使用,通过ActivityManager我们可以获得系统里正在运行的activities,包括 进程(Process)等.应用程序/包.服务(Serv ...

  7. Centos-当前和过去登入系统用户信息-last

    last 获取当前和过去登入系统的用户相关信息,执行last指令的时候会默认读取/var/log/wtmp文件 相关参数 -a 把客户端IP显示到最后一列 -R 不显示客户端IP地址或主机名 -n 显 ...

  8. centos who命令 查看当前登录系统用户信息

    who 显示当前登录系统的用户,但w显示的更为详细 默认输出 [root@mysql ~]# who //用户名.登录终端.登录时间 root pts/ -- : (192.168.0.110) -a ...

  9. UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息

    应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...

随机推荐

  1. 使用java爬取国家统计局的12位行政区划代码

    前言: 本文基于j2ee的原始url进行都写,解析指定内容时也是使用很傻的形式去查找指定格式的字符串来实现的. 更优雅的方式是可以使用apache的HttpClient和某些文档模型将HTML字符串构 ...

  2. 使用spring的事务的三种方法

    1.编程式事务管理 spring的配置文件 <!-- 事务管理器 --> <bean id="transactionManager" class="or ...

  3. java Map Set遍历

    Map是java中的接口,Map.Entry是Map的一个内部接口. Map提供了一些常用方法,如keySet().entrySet()等方法,keySet()方法返回值是Map中key值的集合:en ...

  4. HTTP协议是如何通信的

    一.什么是HTTP协议 HTTP协议是HyperText Transfer Protocol的缩写,即超文本传输协议.是由w3c(万维网联盟)制定的一种应用层协议,用来定义浏览器与web服务器之间如何 ...

  5. nginx的Mainline version、Stable version、Legacy version的版本区别

    nginx的Mainline version.Stable version.Legacy version的版本区别 创建时间:2014-01-16 10:30:37最后修改:2014-09-23 20 ...

  6. VC线程同步方法

    VC MFC中线程同步对象的区别 临界区 CCriticalSection,在用户模式工作,适用于保护线程间共享资源,一个线程可以多次Lock不会出错.不支持在多进程之间工作.互斥量 CM ...

  7. 由select/epoll返回的非阻塞connect还会是EINPROGRESS状态吗?

    一般情况下,我们像下面代码中所示的这样使用非阻塞connect: #include <stdio.h> #include <stdlib.h> #include <str ...

  8. 求不小于N且二进制串包含K个1的最小的数字

    给定正整数N,求一个最小正整数M(M>=N),使得M中连续1的个数不小于K. 输入格式:N K 其中N为大整数,只能进行字符串处理 首先要把N化为二进制串,考察这个二进制串的最后K位: 直接把这 ...

  9. oc 代码块的使用

    #import <UIKit/UIKit.h> #import "AppDelegate.h" int (^max)(int,int);//定义代码块,类似c的函数指针 ...

  10. Shell习题100例(2)

    找文件差异 grep -f 选项可以匹配到文件a在文件b中所有相关的行(取a中有b中有的) [root@centos-04 tmp]# vim b.txt vvvv root [root@centos ...