题目:
1、控制台应用程序
2、参考“即堂练习-4月2日”中随机码的生成算法,生成多个随机码,并且塞到Mysql数据库中,具体要求如下:
- 随机码的字母表为:0123456789ABCDEFGHJKLMNPQRSTUVWXYZ
- 随机码的长度为32位
以上两个值都固定在代码中,程序运行后,输入生成的随机码个数,程序根据输入个数生成随机码,生成随机码后把对应的随机码都塞到Mysql数据库中
3、Mysql数据库采用《阅读材料:MySQL与C#》中直接解压安装的Mysql数据库,建立一个名为Test0507的数据库,此数据库只有一张表:t_RandomCode,表结构为:fRandomCode char(32), fInputDate DateTime两个字段(其中fRandomCode为生成的随机码,fInputDate为此随机码插入数据库具体日期)
4、随机码生成时可不考虑重复的问题(即生成重复和在数据库中重复)
5、数据库采用Mysql数据库,每次生成一定数量的随机码,都必须保存到数据表t_RandomCode中
注意:插入到数据库的随机码数目每次不少于100000(10万)条。
6、最后针对t_RandomCode表中全部的随机码(多次生成的)做统计,统计字母表各个字符出现的统计结果输出格式如下:
7、程序界面如上图,输入随机码数量后,首先把随机码保存到数据库中,然后输出数据库中全部随机码的各字符统计
8、本项目把整套源代码压缩为rar后提交,不需要提交数据库内容
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace Test0507.cs
{
class Program
{
public static string connStr = string.Format("server={0};Port={1};User Id={2};database={3};password={4};Charset=utf8", "localhost", 3300, "root", "Test0507", "123456");
static void Main(string[] args)
{
int len = Convert.ToInt32(args[0]);
Console.WriteLine("len = "+len);
string code= "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
Random random = new Random();
int num = 0;
MySqlConnection conn;
try
{
conn = new MySqlConnection(connStr);
conn.Open();
List<string> sqlStringList = new List<string>();
List<MySqlParameter[]> sqlStringParaList = new List<MySqlParameter[]>();
// List<string> param_list = new List<string>();
for (int i = 0; i < len; i++) {
string sqltext = "insert into t_randomcode (fRandomCode,fInputDate) values (@fRandomCode,@fInputDate)";
num = random.Next(0, code.Length);
string data = code.Substring(num, 1);
Console.Write(data+" ");
MySqlParameter[] parameters = {
new MySqlParameter("?fRandomCode",MySqlDbType.VarChar,32),
new MySqlParameter("?fInputDate",MySqlDbType.Date)
};
parameters[0].Value = Convert.ToChar(data);
parameters[1].Value = DateTime.Now;
Console.WriteLine("param="+parameters[0].Value+","+parameters[1].Value);
sqlStringParaList.Add(parameters);
sqlStringList.Add(sqltext);
}
Console.WriteLine();
int count = Convert.ToInt32(ExcuteSQLTrans(sqlStringList, sqlStringParaList));
Console.WriteLine("count="+count);
string sql = String.Format("select fRandomCode from t_RandomCode");
MySqlDataAdapter adapter = new MySqlDataAdapter(sql,conn);
Dictionary<char, int> dict = new Dictionary<char,int>();
char c;
DataSet ds = new DataSet();
adapter.Fill(ds,"result");
foreach(DataRow row in ds.Tables["result"].Rows){
c = Convert.ToChar(row["fRandomCode"]);
//c为双重循环遍历时的具体每个随机码中的元素
//加入统计字典中
if (!dict.ContainsKey(c))
{
dict.Add(c, 1);
}
else
{
dict[c]++;
}
};
Console.WriteLine("在数据库中各字符的统计如下:");
for (int i = 0; i < code.Length; i++)
{
if (dict.ContainsKey(code[i]))
{
Console.WriteLine("{0}:{1}%", code[i], Convert.ToDouble(dict[code[i]]) / Convert.ToDouble(code.Length) / 32f);
}
else
{
Console.WriteLine("{0}:0%", code[i]);
}
}
}
catch (Exception ee)
{
Console.WriteLine("打开数据库异常:" + ee.Message);
}
}
public static object ExcuteSQLTrans(List<string> sqlStringList, List<MySqlParameter[]> sqlStringParaList)
{
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
using (MySqlTransaction trans = conn.BeginTransaction())
{
MySqlCommand cmd = new MySqlCommand { CommandTimeout = 0 };
try
{
if (sqlStringList.Count != sqlStringParaList.Count)
{
return 0;
}
int count = 0;
//循环
for (int i = 0; i < sqlStringList.Count; i++)
{
string cmdText = sqlStringList[i];
MySqlParameter[] cmdParms = sqlStringParaList[i];
Console.WriteLine("cmdText = "+cmdText+",cmdParms[0] = "+cmdParms[0].Value+",cmdParms[1]="+cmdParms[1].Value);
PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
count += cmd.ExecuteNonQuery();
//cmd.CommandText = cmdText;
//cmd.Parameters.Add(cmdParms);
cmd.Parameters.Clear();
}
trans.Commit();
return count;
}
catch (Exception ex)
{
trans.Rollback();
return 0;
}
}
}
}
private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (MySqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
}
}