您的位置:首页 > 其它

对深圳大学选课系统中的课程学时计算问题总结

2009-06-05 12:48 344 查看
对深圳大学选课系统中的课程学时计算问题总结
--Jason
问题情况:该系统中的时间包括:周上课时间,上课周数
如:周一1,2;周三3,4;单周二1,3,4,双周5,7,8 02-13
然后计算该们课总共开设了多少学时。
平台:VS2005 C#
代码:
protected string GetTime(string str1, string str2)
{
string strWeekTime = str1;
string strWeekNum = str2;

int WeeksNum = NumWeeks(strWeekNum);//总周数
int SingleWeeksNum = NumSingleWeeks(strWeekNum);//单周数
int DoubleWeeksNum = NumDoubleWeeks(strWeekNum);//双周数
int TotalTime = 0;

string strTemp = strWeekTime;
string strTemp2 = "";
//计算一周的时间划分
bool tag = true;
while (tag)
{
if (HasSeparator(strTemp))//判断是否有分隔符“;”
{
int pos = strTemp.IndexOf(";");
strTemp2 = strTemp.Remove(pos);//截取分割符前半部分,strTemp2保存删除的部分

if (!HasSingleOrDoubleWeek(strTemp))//如果没有单双周划分
{
TotalTime += GetNumberNum(strTemp) * WeeksNum;
}
else if (strTemp.Contains("单"))//如果是单周时间
{
TotalTime += GetNumberNum(strTemp) * SingleWeeksNum;
}
else//剩下的只有双周时间了
{
TotalTime += GetNumberNum(strTemp) * DoubleWeeksNum;
}

strTemp = strTemp2;
}
else
{
if (!HasSingleOrDoubleWeek(strTemp))//如果没有单双周划分
{
TotalTime += GetNumberNum(strTemp) * WeeksNum;
}
else if (strTemp.Contains("单"))//如果是单周时间
{
TotalTime += GetNumberNum(strTemp) * SingleWeeksNum;
}
else//剩下的只有双周时间了
{
TotalTime += GetNumberNum(strTemp) * DoubleWeeksNum;
}

tag = false;
}

}

return TotalTime.ToString();
}

//判断是否为阿拉伯数字
protected bool IsArabicNumber(string str)
{
try
{
int n = Convert.ToInt32(str);
return true;
}
catch
{
return false;
}
}

//计算字符串里有多少个阿拉伯数字,个位算一个,双位也算一个,根据场景限制,这里的阿拉伯数字最大是2位@^_^@
protected int GetNumberNum(string str)
{
int i;
int num=0;

for (i=0; i < str.Length; i++)
{
if (IsArabicNumber(str[i].ToString()))
{
num += 1;
if (i+1<str.Length && IsArabicNumber(str[i + 1].ToString())) i++;
}
}
return num;
}

protected bool HasSeparator(string str)//判断是否含有分割符“;”@^_^@
{
if (str.Contains(";"))
return true;
return false;
}

//判断是否包含单双周@^_^@
protected bool HasSingleOrDoubleWeek(string str)
{
if (str.Contains("单") || str.Contains("双")) return true;
return false;
}

//计算执教周数@^_^@
protected int NumWeeks(string str)
{
string strTemp1 = str;
string strTemp2 = str;
string str1 = "";
string str2 = "";
int pos = 0;
pos=str.IndexOf("-");
str1 = strTemp1.Remove(pos);//前半部分
str2 = strTemp2.Remove(0, pos + 1);//后半部分
return Convert.ToInt32(str2) - Convert.ToInt32(str1)+1;
}

//计算执教单周数@^_^@
protected int NumSingleWeeks(string str)
{
string strTemp1 = str;
string strTemp2 = str;
string str1 = "";
string str2 = "";
int pos = 0;
pos = str.IndexOf("-");
str1 = strTemp1.Remove(pos);//前半部分
str2 = strTemp2.Remove(0, pos + 1);//后半部分

int numWeeks = Convert.ToInt32(str2) - Convert.ToInt32(str1) + 1;//周数
if (numWeeks % 2 == 0) return numWeeks / 2;//如果是双倍周数,那么就有一半是双周一半是单周。

//如果不是双倍周数
//如果起始是双周
if (Convert.ToInt32(str1) % 2 == 0) return numWeeks / 2;
//否则一定是起始是单周
return numWeeks / 2+1;
}

//计算执教双周数@^_^@
protected int NumDoubleWeeks(string str)
{
string strTemp1 = str;
string strTemp2 = str;
string str1 = "";
string str2 = "";
int pos = 0;
pos = str.IndexOf("-");
str1 = strTemp1.Remove(pos);//前半部分
str2 = strTemp2.Remove(0, pos + 1);//后半部分

int numWeeks = Convert.ToInt32(str2) - Convert.ToInt32(str1) + 1;//周数
if (numWeeks % 2 == 0) return numWeeks / 2;//如果是双倍周数,那么就有一半是双周一半是单周。

//如果不是双倍周数
//如果起始是双周
if (Convert.ToInt32(str1) % 2 == 0) return numWeeks / 2+1;
//否则一定是起始是单周
return numWeeks / 2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: