昨天拿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(); 
        }

效果: