昨天拿C#写了个简单的密保卡程序(Console的,偷懒了一下 哈哈),实现了随机生成5x5矩阵卡、转换为字符串、从字符串读取矩阵卡以及简单验证的功能。不过我写的比较草率,代码结构不是很好,也没有体现OOP的思想,这几天有空会重构一下。
先把代码发出来:
public class MatrixCardManager { public static int[,] ReadMatrixCardFromString(string matrixStr) { int[,] arr1 = new int[5, 5]; int[] tempArr = new int[25]; int k = 0; string[] tempArrStr = matrixStr.Split(','); for (int i = 0; i < tempArr.Length; i++) { tempArr[i] = Convert.ToInt32(tempArrStr[i]); } for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { arr1[i, j] = tempArr[k]; k++; } } return arr1; } public static string SaveMatrixIntoString(int[,] arr) { string matrixStr = String.Empty; int[] lineArr = new int[25]; int k = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { lineArr[k] = arr[i, j]; k++; } } for (int i = 0; i < lineArr.Length; i++) { matrixStr += lineArr[i]; if (i < 24) { matrixStr += ","; } } return matrixStr; } public static void PrintMatrix(int[,] arr) { Console.WriteLine(" | A\tB\tC\tD\tE"); Console.WriteLine("-------------------------------------------"); for (int k = 0; k < 5; k++) { Console.Write(k + " | "); for (int l = 0; l < 5; l++) { Console.Write(arr[k, l] + "\t"); } Console.WriteLine(); } } public static int[,] GenerateRandomMatrix() { Random r = new Random(); int[,] arr = new int[5, 5]; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { arr[i, j] = r.Next(0, 100); } } return arr; } public static char GetColCode(int colIndex) { char colCode = '-'; switch (colIndex) { case 0: colCode = 'A'; break; case 1: colCode = 'B'; break; case 2: colCode = 'C'; break; case 3: colCode = 'D'; break; case 4: colCode = 'E'; break; default: break; } return colCode; } public static bool Validate(int[,] arr, int colIndex1, int rowIndex1, int colIndex2, int rowIndex2, int colIndex3, int rowIndex3, string userInput, bool validFlag) { try { string[] inputArr = userInput.Split(','); bool OK0 = arr[rowIndex1, colIndex1] == Convert.ToInt32(inputArr[0]); bool OK1 = arr[rowIndex2, colIndex2] == Convert.ToInt32(inputArr[1]); bool OK2 = arr[rowIndex3, colIndex3] == Convert.ToInt32(inputArr[2]); if (OK0 && OK1 && OK2) { validFlag = true; } else { validFlag = false; } } catch (Exception) { Console.WriteLine("Oh, Shit!"); } return validFlag; } }
调用:
static void Main(string[] args) { Console.WriteLine("Generate and Print Matrix Card:\n"); int[,] arr = MatrixCardManager.GenerateRandomMatrix(); MatrixCardManager.PrintMatrix(arr); Console.WriteLine("\n"); Console.WriteLine("Save Matrix Card into string for storage:\n"); string matrixStr = MatrixCardManager.SaveMatrixIntoString(arr); Console.WriteLine(matrixStr); Console.WriteLine("\n"); Console.WriteLine("Read Matrix Card from string:\n"); int[,] arr1 = MatrixCardManager.ReadMatrixCardFromString(matrixStr); MatrixCardManager.PrintMatrix(arr1); Console.WriteLine("\n"); Console.WriteLine("Matrix Card Validation:\n"); Random r = new Random(); int colIndex1 = r.Next(0, 4); int rowIndex1 = r.Next(0, 4); char colCode1 = MatrixCardManager.GetColCode(colIndex1); int colIndex2 = r.Next(0, 4); int rowIndex2 = r.Next(0, 4); char colCode2 = MatrixCardManager.GetColCode(colIndex2); int colIndex3 = r.Next(0, 4); int rowIndex3 = r.Next(0, 4); char colCode3 = MatrixCardManager.GetColCode(colIndex3); Console.WriteLine("Please Input Card Number At {0}{1},{2}{3},{4}{5}:\n", colCode1, rowIndex1, colCode2, rowIndex2, colCode3, rowIndex3); string userInput = Console.ReadLine(); bool validFlag = false; validFlag = MatrixCardManager.Validate(arr, colIndex1, rowIndex1, colIndex2, rowIndex2, colIndex3, rowIndex3, userInput, validFlag); if (validFlag) { Console.WriteLine("All input are correct!"); } else { Console.WriteLine("Sorry, your input were wrong!"); } Console.ReadKey(); }
效果: