我现在正在做一个考试系统。报名结束后,输入起始准考证号,然后顺序生成所有报考人员的准考证号,但是有一个要求就是:相同单位的人员准考证号不能相连!!
希望各位专家给指点指点!!
希望各位专家给指点指点!!
解决方案 »
- [算法挑战]已知算法,求验证码识别
- 学籍管理系统中的问题
- [!急!]来个高手:正则表达式关于网页标记.属性.匹配的问题...
- telnet 登陆163使用smtp发送邮件
- c# 与 vb转化问题
- DataGridView的行乱序的问题
- 请问那位有称对Exchange的二次开发中文文档,或是一些好的经验!谢谢。。。。
- C#中通过组件SQLDMO来强制恢复数据库
- 如何将数据集中的几条选中的记录添加到一个新的数据集的表中!!谢谢!!!
- 如何用本机Windows方法强制聚焦第三方应用?
- Winform 的一个小问题,麻烦大家帮忙看看,50分!
- 请教一个线程池分配的问题,第一个回答的直接给10分,分不多了
Random ran = new Random();
for (int i = 0; i < Convert.ToInt16(单位人数); i++)
{
string id = 单位初始ID+ string.Format("{0:000}", ran.Next(0, 999));//后三位为单位考核人员,你可以取别的
if(this.listBox1.Items.Contains(id)==false)
{
this.listBox1.Items.Add(id);
}
}
给定一张表:
表名 当前编号 前导字符
TableName num pre把TAbleName和pre和起来当作主键,查询就是了后面在跟一个配置文件,标明其Fromat规则就成了 <rol id="{0}{1}">
<parm type="pre" value="301"></parm> //参数0设定,pre表明是前导字符,value是说前导字符是301
<parm type="num">000</parm> //num表明是顺序编号,000是说Format的规则
</rol>下面是我自己项目里面的一段代码,也许和上面讲的配置有些出入,不过大体思想没变(我这个类本身设计的时候,就是为了能产生各种自己定义规则序号的类,现在只写了一半,还有一半是反射部分plug也就保留插件式的规则部门没写)
namespace hyFramework.Serial
{
public class Class1
{
public void getconfig()
{
hyFramework.Configruation.Configruation config = new hyFramework.Configruation.Configruation("config/sysConfig.xml", new ConfigContext());
var xml = config.getdate();
var o = from a in xml.Elements("rule")
where a.Attribute("name").Value==xml.ElementAt(0).Attribute("selection").Value
select a;
var p = o.ElementAt(0).Attribute("rul").Value;//提取规则
var nodes = o.Elements(); List<object> param = new List<object>();
foreach (var nd in nodes)
{
string ty = nd.Attribute("type").Value;
string format=nd.Value;
string value=String.Empty;
switch (ty)
{
case "num":
value=gets("xx","yy");
value=(Convert.ToDecimal(value)).ToString(format);
break;
case "date":
value = getdate().ToString(format);
break;
case "pre":
value = nd.Attribute("value").Value;
break;
}
param.Add(value);
}
string res = String.Format(p, param.ToArray<object>());
} DateTime getdate()
{
return DateTime.Now;
}
public string gets(string tableid, string pre)
{
string res = String.Empty;
DataSet1 myds = new DataSet1();
try
{
myds.ReadXml("mydata.dat");
}
catch (Exception ex)
{
}
DataSet1.SerialDataTable myTable = myds.Serial;
var c_Row = myTable.FindByTable_IDPrefix(tableid, pre);
if (c_Row==null)
{
DataSet1.SerialRow newRow = myTable.NewSerialRow();
newRow.Table_ID = tableid;
newRow.Prefix = pre;
newRow.current = 1;
myTable.AddSerialRow(newRow);
res = "1";
}
else
{
c_Row.current = c_Row.current + 1;
res = c_Row.current.ToString();
}
myds.WriteXml("mydata.dat");
return res;
}
}
}
bool choice=false;
while(choice)
if(a-b>10 || b-a?10)
{
messagebox.show("相同单位")
执行重新生成代码
choice=true;
}
else
{choice=false;}
Group B 5 people
数据库中的表么?
人员id 单位id
--------------
001 001
002 001
003 002
这样的?
人员id 单位id
张三 A
李四 A
王五 A
赵六 B
钱七 C
周八 C
李九 D准考证号段:A1001~A1007
将该数组打乱,生成新的二维数组strList, strList[][1]的值为A,B,C,D,A,C,A将准考证号添加上
A单位的第一个人员张三就是A1001,第二个人员李四就是A1005,第三个人员王五是A1007
其余的类推
{
string[][] strLists = new string[][]
{
new string[3]{"张三","A",""},
new string[3]{"李四","A",""},
new string[3]{"王五","A",""},
new string[3]{"赵六","B",""},
new string[3]{"钱七","C",""},
new string[3]{"周八","C",""},
new string[3]{"李九","D",""}
};
strLists=GetValue(strLists);
for (int i = 0; i < strLists.Length; i++)
Console.WriteLine(strLists[i][0] + " " + strLists[i][1] + " " + strLists[i][2]);
Console.Read();
}
private static string[][] GetValue(string[][] strLists)
{
for (int i = 1; i < strLists.Length; )
{
if (strLists[i][1].Equals(strLists[i - 1][1]))
{
string[] temp = strLists[i];
for (int j = i + 1; j < strLists.Length; j++)
{
strLists[j - 1] = strLists[j];
}
strLists[strLists.Length - 1] = temp;
}
else
i++;
}
for (int i = 0; i < strLists.Length; i++)
strLists[i][2] = "A100" + (i + 1).ToString();
return strLists;
}结果
张三 A A1001
赵六 B A1002
钱七 C A1003
李九 D A1004
李四 A A1005
周八 C A1006
王五 A A1007
A单位2人: A1,A2
B单位3人: B1,B2,B3
C单位100人: C1,C2...
那排为如下后:
A1,B1,C1,A2,B2,C2,B3后都是C单位的人了,那这时是连号还是跳号啊
A单位2人: A1,A2
B单位3人: B1,B2,B3
C单位100人: C1,C2...
那排为如下后:
A1,B1,C1,A2,B2,C2,B3后都是C单位的人了,那这时是连号还是跳号啊