假设现在3个活动,我是个会员,我已经报名参加了第1个活动!当我下次再报第1个活动时提示已经报过名了! 但报第2,3个没有什么问题!
我现在的思路是:在会员表里面加了个字段,当我报名参加某个活动时,就把那个活动对应的ID写入这个字段!下次再报名活动时先查询这个字段中有没有这个ID,没的话可以报名,有的话不可以报名!
会员没有报名限制(就是说他3个活动都可以报)!
我现在的思路是:在会员表里面加了个字段,当我报名参加某个活动时,就把那个活动对应的ID写入这个字段!下次再报名活动时先查询这个字段中有没有这个ID,没的话可以报名,有的话不可以报名!
会员没有报名限制(就是说他3个活动都可以报)!
还有就是怎么从这个字段中查询存在的活动ID啊?
这种方法灵活,可扩充,可以适应变化,当然程序结构会稍微复杂。
方法2:会员表里放3个字段,分配记录是否参加了3个活动
如果你的活动个数、内容不会变化,可以这么干。但是——bad smell
方法3:做一个2进制字符串的域记录是否报名了某活动
例如,001表示报名了活动1,101表示报名了活动1和3。利用位运算计算,速度也会很快。
这种方法也具有一定的灵活性,当然不像方法1那么强,比如出现了第三种状态,就没办法处理了。根据你的实际情况选择吧。
if(取出的活动ID.indexOf(活动ID)!=-1)
System.out.println("已经报名了");怎么样 ??
当然,可以用某种符号例如“,”分割id,当然这种情况下的判断条件也比较复杂。
public class ActivitiesTest {
public static void main(String[] args) {
Activity.ApplicationSystem as = new Activity.ApplicationSystem();
String s1 = "s1";
String s2 = "s2";
as.applicate(s1, Activity.Basketball);
as.applicate(s2, Activity.Football);
as.applicate(s2, Activity.Football);
as.applicate(s1, Activity.Football);
as.applicate(s1, Activity.Basketball);
}
}enum Activity {
Football, Basketball, Swim; //项目名称
private ArrayList<String> list = new ArrayList<String>(); //该项目报名过的人
private void addList(String name) {
list.add(name);
};
private boolean isApplicated(String name) {
boolean result = false;
Iterator it = list.iterator();
while(it.hasNext()) {
if(name.equals(it.next()))
result = true;
}
return result;
};
static class ApplicationSystem { //报名系统
public void applicate(String name, Activity activity) {
if(activity.isApplicated(name))
System.out.println(name + " 已经报过 " + activity);
else {
activity.addList(name);
System.out.println(name + " 报了 " + activity);
}
}
}
}
1。
参加者中有一个Collection纪录报名的活动; 同时(或者),活动里面有一个Collection纪录所有的报名者;
所有参加者、活动分别存在一个容器里2。
所有参加者、活动仅含各自的信息,分别存在一个容器里
用另外的一个机构,如RelationShip纪录参加者与活动的对应关系,也存在一个容器里