这段时间一直在修改日志模块,现在基本上写好了,也把注释什么的都加上了,昨天邮件发送给mark的园友一直报失败,老是退回来,真是报歉,如下图所示:

aaarticlea/png;base64,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" alt="" />

没有办法,只好放这里了,想看源代码的请猛戳这里

如果有什么问题,欢迎跟我交流!

从今天开始写Util模块,这个模块几乎所有的系统项目都需要的,想减少重复代码的编写,就依靠这个模块了.大的模块主要是以下几个方面:

1.加解密

这个我也不多说了,也就是MD5等加密算法:

 using System;
using System.Security.Cryptography;
using System.Text; /// <summary>
/// 加解密相关操作类
/// </summary>
/// <date>2012-02-20</date>
/// <author>xucj</author>
public class Cryptography
{
private const string DefaultKey = "OD"; /// <summary>
/// 构造方法
/// </summary>
public Cryptography()
{
} /// <summary>
/// 使用缺省密钥字符串加密
/// </summary>
/// <param name="original">明文</param>
/// <returns>密文</returns>
public static string Encrypt(string original)
{
return Encrypt(original, DefaultKey);
} /// <summary>
/// 使用缺省密钥解密
/// </summary>
/// <param name="original">密文</param>
/// <returns>明文</returns>
public static string Decrypt(string original)
{
return Decrypt(original, DefaultKey, System.Text.Encoding.Default);
} /// <summary>
/// 使用给定密钥解密
/// </summary>
/// <param name="original">密文</param>
/// <param name="key">密钥</param>
/// <returns>明文</returns>
public static string Decrypt(string original, string key)
{
return Decrypt(original, key, System.Text.Encoding.Default);
} /// <summary>
/// 使用缺省密钥解密,返回指定编码方式明文
/// </summary>
/// <param name="original">密文</param>
/// <param name="encoding">编码方式</param>
/// <returns>明文</returns>
public static string Decrypt(string original, Encoding encoding)
{
return Decrypt(original, DefaultKey, encoding);
} /// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="original">原始文字</param>
/// <param name="key">密钥</param>
/// <returns>密文</returns>
public static string Encrypt(string original, string key)
{
byte[] buff = System.Text.Encoding.Default.GetBytes(original);
byte[] kb = System.Text.Encoding.Default.GetBytes(key); return Convert.ToBase64String(Encrypt(buff, kb));
} /// <summary>
/// 使用给定密钥解密
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <param name="encoding">字符编码方案</param>
/// <returns>明文</returns>
public static string Decrypt(string encrypted, string key, Encoding encoding)
{
byte[] buff = Convert.FromBase64String(encrypted);
byte[] kb = System.Text.Encoding.Default.GetBytes(key); return encoding.GetString(Decrypt(buff, kb));
} /// <summary>
/// 生成MD摘要
/// </summary>
/// <param name="original">数据源</param>
/// <returns>摘要</returns>
private static byte[] MakeMD(byte[] original)
{
MD5CryptoServiceProvider hashmd = new MD5CryptoServiceProvider();
byte[] keyhash = hashmd.ComputeHash(original);
hashmd = null; return keyhash;
} /// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="original">明文</param>
/// <param name="key">密钥</param>
/// <returns>密文</returns>
private static byte[] Encrypt(byte[] original, byte[] key)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD(key);
des.Mode = CipherMode.ECB; return des.CreateEncryptor().TransformFinalBlock(original, , original.Length);
} /// <summary>
/// 使用给定密钥解密数据
/// </summary>
/// <param name="encrypted">密文</param>
/// <param name="key">密钥</param>
/// <returns>明文</returns>
private static byte[] Decrypt(byte[] encrypted, byte[] key)
{
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Key = MakeMD(key);
des.Mode = CipherMode.ECB; return des.CreateDecryptor().TransformFinalBlock(encrypted, , encrypted.Length);
} /// <summary>
/// 使用给定密钥加密
/// </summary>
/// <param name="original">原始数据</param>
/// <returns>密文</returns>
private static byte[] Encrypt(byte[] original)
{
byte[] key = System.Text.Encoding.Default.GetBytes(DefaultKey); return Encrypt(original, key);
} /// <summary>
/// 使用缺省密钥解密数据
/// </summary>
/// <param name="encrypted">密文</param>
/// <returns>明文</returns>
private static byte[] Decrypt(byte[] encrypted)
{
byte[] key = System.Text.Encoding.Default.GetBytes(DefaultKey); return Decrypt(encrypted, key);
} public static string SimpEncrypt(string str)
{
StringBuilder asc = new StringBuilder();
for (int i = ; i < str.Length; i++)
{
int b = char.Parse(str.Substring(i, )) + '\x0003';
asc.Append((char)b);
}
return asc.ToString();
} public static string SimpUnEncrypt(string str)
{
StringBuilder asc = new StringBuilder();
for (int i = ; i < str.Length; i++)
{
int b = char.Parse(str.Substring(i, )) - '\x0003';
asc.Append((char)b);
}
return asc.ToString();
}
}

2.配置文件相关操作

xml,ini配置文件的读写方法:

 using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Collections;
using System.IO;
using System.Collections.Generic; #region 配置文件读写操作类 /// <summary>
/// 配置文件读写操作类
/// </summary>
/// <date>2012-02-15</date>
/// <author>xucj</author>
public class IniFileHelper
{
#region 字段 private string path; #endregion #region 构造函数 public IniFileHelper(string iniFilePath)
{
path = iniFilePath;
} #endregion #region 引用外部库 [DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, Byte[] retVal, int size, string filePath); #endregion #region 写入INI文件 /// <summary>
/// 写入INI文件
/// </summary>
/// <param name="section">段名</param>
/// <param name="key">键名</param>
/// <param name="value">键值</param>
public void WriteValue(string section, string key, string value)
{
WritePrivateProfileString(section, key, value, this.path);
} #endregion #region 删除ini配置 /// <summary>
/// 删除ini文件下所有段落
/// </summary>
public void ClearAllSection()
{
WriteValue(null, null, null);
}
/// <summary>
/// 删除ini文件下personal段落下的所有键
/// </summary>
/// <param name="Section"></param>
public void ClearSection(string Section)
{
WriteValue(Section, null, null);
}
#endregion #region 读取INI文件 /// <summary>
/// 读取INI文件
/// </summary>
/// <param name="section"></param>
/// <param name="key"></param>
/// <returns></returns>
public string ReadValue(string section, string key)
{
StringBuilder temp = new StringBuilder();
int i = GetPrivateProfileString(section, key, "", temp, , this.path); return temp.ToString();
} private byte[] ReadValues(string section, string key)
{
byte[] temp = new byte[];
int i = GetPrivateProfileString(section, key, "", temp, , this.path); return temp;
} /// <summary>
/// 读取ini文件的所有段落名
/// </summary>
private string[] ReadValues()
{
byte[] allSection = ReadValues(null, null); return ByteToString(allSection);
} /// <summary>
/// 转换byte[]类型为string[]数组类型
/// </summary>
/// <param name="sectionByte"></param>
/// <returns></returns>
private string[] ByteToString(byte[] sectionByte)
{
ASCIIEncoding ascii = new ASCIIEncoding();
//编码所有key的string类型
string sections = ascii.GetString(sectionByte);
//获取key的数组
string[] sectionList = sections.Split(new char[] { '\0' }); return sectionList;
} /// <summary>
/// 读取ini文件的某段落下所有键名
/// </summary>
private string[] ReadValues(string section)
{
byte[] sectionByte = ReadValues(section, null); return ByteToString(sectionByte);
} #endregion #region 不使用API方法 private Dictionary<string, string> configInfo = new Dictionary<string,string>(); //* 存放Ini文件配制信息 public int Count { get { return configInfo.Count; } }
public string this[string key]
{
get
{
if (configInfo.ContainsKey(key))
{
return configInfo[key].ToString();
}
else
{
return "No this key-value";
}
}
} /// <summary>
/// 读取指定INI文件中的配置信息
/// </summary>
/// <param name="file">配置文件的完整路径名</param>
/// <param name="section">配置文件中的节名 "[" + section + "]"形式</param>
public IniFileHelper(string file, string section)
{ string Section = "[" + section + "]";
LoadIniFile(file, Section);
} /// <summary>
/// 读取ini文件,以HashTable的格式存放
/// </summary>
/// <param name="filePath">ini文件路径</param>
/// <param name="section">ini读取的段名</param>
private void LoadIniFile(string filePath, string section)
{
try
{
StreamReader sr = new StreamReader(filePath, System.Text.Encoding.Default); string readLine = null;
bool IsReadEnd = false;
string[] keys; while ((readLine = sr.ReadLine()) != null)
{
if (readLine == section)
{
while ((readLine = sr.ReadLine()) != null)
{
if(readLine != "")
{
if (readLine.Substring(, ) == "[")
{
IsReadEnd = true;
break;
}
keys = readLine.Split('=');
configInfo[keys[].Trim()] = keys[];
}
}
}
if (IsReadEnd)
{
break;
}
}
sr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
configInfo.Clear();
}
}
#endregion
} #endregion

3.序列化

这个主要是可序列化字典:

 /// <summary>
/// 支持XML序列化的泛型Dictionary类
/// </summary>
/// <typeparam name="TKey"></typeparam>
/// <typeparam name="TValue"></typeparam>
[XmlRoot("Dictionary")]
[Serializable()]
public class SerializableDictionary<TKey, TValue>
: Dictionary<TKey, TValue>, IXmlSerializable
{
#region
public SerializableDictionary()
: base()
{
} public SerializableDictionary(IDictionary<TKey, TValue> dictionary)
: base(dictionary)
{
} public SerializableDictionary(IEqualityComparer<TKey> comparer)
: base(comparer)
{
} public SerializableDictionary(int capacity)
: base(capacity)
{
} public SerializableDictionary(int capacity, IEqualityComparer<TKey> comparer)
: base(capacity, comparer)
{
} protected SerializableDictionary(SerializationInfo info, StreamingContext context)
: base(info, context)
{
} #endregion public XmlSchema GetSchema()
{
throw new NotImplementedException();
} /**/
/// <summary>
/// 从对象的XML表示形式生成该对象
/// </summary>
/// <param name="reader"></param>
public void ReadXml(XmlReader reader)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
bool wasEmpty = reader.IsEmptyElement;
reader.Read(); if (wasEmpty)
return;
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.ReadStartElement("Key");
TKey key = (TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement(); reader.ReadStartElement("Value");
TValue value = (TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
this.Add(key, value);
reader.MoveToContent();
}
reader.ReadEndElement();
} /// <summary>
/// 将对象转换为其XML表示形式
/// </summary>
/// <param name="writer"></param>
public void WriteXml(XmlWriter writer)
{
XmlSerializer keySerializer = new XmlSerializer(typeof(TKey));
XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue));
foreach (TKey key in this.Keys)
{
writer.WriteStartElement("Key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement(); writer.WriteStartElement("Value");
TValue value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();
}
}
}

4.字符串

平时用的最多的肯定是字符串了,所以肯定也少了它:

  using System;
using System.Collections.Generic;
using System.Text; public static class StringHelper
{
/// <summary>
/// 将字符串转换为base64编码数据
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string ToBase64String(this string str)
{
byte[] data = System.Text.ASCIIEncoding.ASCII.GetBytes(str); return Convert.ToBase64String(data);
} /// <summary>
/// 将base64编码数据转换为字符串
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static string FromBase64String(this string str)
{
byte[] data = Convert.FromBase64String(str); return System.Text.ASCIIEncoding.ASCII.GetString(data);
}
}

5.汉转英

在系统检索菜品时,要根据拼音,所以这个也不能少,当然这个也有其他的方法,像存储过程或依靠数据库表都可以,下面是纯C#代码的:

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; public class GetPinYinHelper
{
/// <summary>
/// 获取拼音首字母
/// </summary>
/// <param name="strCharacter">要转换的中文汉字字符串</param>
/// <returns>拼音缩写</returns>
/// <author>xucj</author>
/// <date>2011-10-15</date>
public static string GetInitialPinYin(string strCharacter)
{
string tempStr = string.Empty; foreach (char c in strCharacter)
{
if ((int)c >= && (int)c <= || (int)c == )
{
tempStr += c.ToString(); //字母和符号原样保留、同时空格也保留。
}
else
{
tempStr += GetPYChar(c.ToString()); //累加拼音声母
}
} return tempStr;
} /// <summary>
/// 取单个字符的拼音声母
/// </summary>
/// <param name="character">要转换的单个汉字</param>
/// <returns>拼音声母</returns>
/// <author>xucj</author>
/// <date>2011-10-15</date>
private static string GetPYChar(string character)
{
byte[] array = new byte[]; array = System.Text.Encoding.Default.GetBytes(character); int i = (short)(array[] - '\0') * + ((short)(array[] - '\0')); if (i < 0xB0A1) return "*"; if (i < 0xB0C5) return "a"; if (i < 0xB2C1) return "b"; if (i < 0xB4EE) return "c"; if (i < 0xB6EA) return "d"; if (i < 0xB7A2) return "e"; if (i < 0xB8C1) return "f"; if (i < 0xB9FE) return "g"; if (i < 0xBBF7) return "h"; if (i < 0xBFA6) return "j"; if (i < 0xC0AC) return "k"; if (i < 0xC2E8) return "l"; if (i < 0xC4C3) return "m"; if (i < 0xC5B6) return "n"; if (i < 0xC5BE) return "o"; if (i < 0xC6DA) return "p"; if (i < 0xC8BB) return "q"; if (i < 0xC8F6) return "r"; if (i < 0xCBFA) return "s"; if (i < 0xCDDA) return "t"; if (i < 0xCEF4) return "w"; if (i < 0xD1B9) return "x"; if (i < 0xD4D1) return "y"; if (i < 0xD7FA) return "z"; return "*";
}
}

再加一个获取本机的IP与机器名与MAC地址的方法:

  using System.Management;
using System.Net; public class NetHelper
{
/// <summary>
/// 取得本机IP
/// </summary>
public static string GetIP()
{
string hostName = Dns.GetHostName();
IPHostEntry ipEntry = Dns.GetHostEntry(hostName);
IPAddress[] addr = ipEntry.AddressList;
foreach (var item in addr)
{
if (item.AddressFamily == System.Net.Sockets.AddressFamily.InterNetworkV6)
{
continue;
} return item.ToString();
}
return null;
} /// <summary>
/// 获取本机MAC地址
/// </summary>
/// <returns></returns>
public static string GetLocalMACAddress()
{
string mac = string.Empty;
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");
ManagementObjectCollection queryCollection = query.Get(); foreach (ManagementObject mo in queryCollection)
{
if (mo["IPEnabled"].ToString() == "True")
mac = mo["MacAddress"].ToString();
} return mac;
} /// <summary>
/// 获取本机名
/// </summary>
/// <returns></returns>
public static string GetHostName()
{
string hostName = Dns.GetHostName(); return hostName;
} }

当然还有很多,等后面需要再慢慢加上来,不相关的就不要了,那样肯定会太杂的,虽然有一些很好很优雅的公共代码,但是如果系统用不上,那也浪费了,那就让它保存在备用库里吧。这些代码来源还是广泛的,所以没有太多好写的,下次写数据库访问模块了。主要实现ORM这个功能,因为通用数据库访问模块网络上也是很多的,时间上应该不会占用太多时间,但是用ORM的话还是能够减少写SQL语句的时间,所以写一个带ORM功能的数据库访问模块。能不用写SQL的地方就靠它了。

当然还有其他代码,就不贴这里了,有需要的就mark下,没人mark的话就...........

step by step 之餐饮管理系统五(Util模块)------附上篇日志模块源码的更多相关文章

  1. Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览

    关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...

  2. 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析

    在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...

  3. java.util.Arrays类详解(源码总结)

    概述 Arrays类位于java.util包下,是一个对数组操作的工具类.今天详细的看了看Arrays类的4千多行源码,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34).Array ...

  4. Spring Boot从入门到精通(五)多数据源配置实现及源码分析

    多数据源配置在项目软件中是比较常见的开发需求,Spring和Spring Boot中对此都有相应的解决方案可供大家参考.在Spring Boot中,如MyBatis.JdbcTemplate以及Jpa ...

  5. Redis(五):hash/hset/hget 命令源码解析

    Redis作为nosql数据库,kv string型数据的支持是最基础的,但是如果仅有kv的操作,也不至于有redis的成功.(memcache就是个例子) Redis除了string, 还有hash ...

  6. 第二十五课:jQuery.event.trigger的源码解读

    本课主要来讲解jQuery.event.trigger的源码解读. trigger = function(event, data, elem, onlyHandlers){ if(elem & ...

  7. Java 多线程(五)—— 线程池基础 之 FutureTask源码解析

    FutureTask是一个支持取消行为的异步任务执行器.该类实现了Future接口的方法. 如: 取消任务执行 查询任务是否执行完成 获取任务执行结果(”get“任务必须得执行完成才能获取结果,否则会 ...

  8. 【转】精选十二款餐饮、快递、票务行业微信小程序源码demo推荐

    微信小程序的初衷是为了线下实体业服务的,必须有实体相结合才能显示小程序的魅力.个人认为微信小程序对于餐饮业和快递业这样业务比较单一的行业比较有市场,故整理推荐12款餐饮业和快递业微信小程序源码demo ...

  9. Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码

    需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家 ...

随机推荐

  1. 【VB.NET】类绑定控件,实现文本框快捷键全选

    Public Class KeyBinder Public Sub BindControl(ByRef CControl As TextBox) AddHandler CControl.KeyDown ...

  2. oracle 常见恢复

    author by :shawnloong 环境:windows 2008 r2 sp1 db:oracle 11g r2 做之前记得做个完整备份 ONFIGURE RETENTION POLICY ...

  3. C#EXCEL 操作类--C#ExcelHelper操作类

    主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Excel文件5.将指定的集合数据导出至Exce ...

  4. hive查询

    查询语句可以直接使用非分析函数的变量的别名 select t1.* from ( select account_id, sum(recharge_money) recharge_money_total ...

  5. 纸上谈兵:排序算法简介及C实现

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 排序算法(Sorting Algorithm)是计算机算法的一个组成部分. 排序的 ...

  6. java 标识符命名规则

    标识符:就是给类,接口,方法,变量等起名字. 组成规则: A:英文字母大小写 B:数字字符 C:$和_ 注意事项: A:不能以数字开头 B:不能是Java中的关键字 C:Java语言严格区分大小写 包 ...

  7. awk用法

    目前虽然有很多工具可以代替awk,但是呢我还是认为awk还是非常重要,比如有时候load数据到hive,mysql发现数据有点问题,这样可以先对比文件和库中数据是否一致,这样awk就发挥用处了,还有从 ...

  8. dockerfile学习与详解

    1,什么是dockerfile? dockerfile是相当于docker使用的一个脚本,作用是便于实现自定义的镜像image,用语docker build [OPTIONS] PATH ,只需要指定 ...

  9. linux C学习笔记04--内存映射

    内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善: /****************************************** ...

  10. mysql.sock的作用

    1.在编译安装mysql的时候,会将mysql的配置文件复制到/etc/my.conf中: [root@Web-lnmp02 mysql]# cp support-files/my-small.cnf ...