我现在正在做一个考试系统。报名结束后,输入起始准考证号,然后顺序生成所有报考人员的准考证号,但是有一个要求就是:相同单位的人员准考证号不能相连!!
希望各位专家给指点指点!!

解决方案 »

  1.   


    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);
                    }
                }
      

  2.   

    实际就是序号生成,无非你前面有前导字符没啥问题!
    给定一张表:
      表名       当前编号      前导字符
     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;
            }
        }
    }
      

  3.   

    做个判断么.如果你只是单纯的数字的话.更方便.
    bool choice=false;
    while(choice)
    if(a-b>10 || b-a?10)
    {
       messagebox.show("相同单位")
       执行重新生成代码
       choice=true;
    }
    else
    {choice=false;}
      

  4.   

    Therotically you don't always have a solution:Group A 3 people
    Group B 5 people
      

  5.   

    你能提供的数据有哪些?
    数据库中的表么?
    人员id 单位id
    --------------
    001    001
    002    001
    003    002
    这样的?
      

  6.   

    例如:
    人员id 单位id
    张三     A
    李四     A
    王五     A
    赵六     B
    钱七     C
    周八     C
    李九     D准考证号段:A1001~A1007
      

  7.   

    把单位抽取出来,生成二维数组strList,strList[][1]的值为  A,A,A,B,C,C,D
    将该数组打乱,生成新的二维数组strList, strList[][1]的值为A,B,C,D,A,C,A将准考证号添加上
    A单位的第一个人员张三就是A1001,第二个人员李四就是A1005,第三个人员王五是A1007
    其余的类推
      

  8.   

    static void Main(string[] args)
            {
                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 
      

  9.   

    如:
    A单位2人:   A1,A2
    B单位3人:    B1,B2,B3
    C单位100人: C1,C2...
    那排为如下后:
    A1,B1,C1,A2,B2,C2,B3后都是C单位的人了,那这时是连号还是跳号啊
      

  10.   

    如:
    A单位2人:   A1,A2
    B单位3人:    B1,B2,B3
    C单位100人: C1,C2...
    那排为如下后:
    A1,B1,C1,A2,B2,C2,B3后都是C单位的人了,那这时是连号还是跳号啊
      

  11.   

    把人的ID和部门ID按保存在一个二维数组中,然后依次循环准考证号,取随机数,然后取出相应的考生信息,他的部门ID和前一个考生的部门ID不同就可以了