黑马程序员技术交流社区
标题:
请看下面代码,Useraccount都不一致
[打印本页]
作者:
hongiqnglik
时间:
2013-7-31 23:42
标题:
请看下面代码,Useraccount都不一致
for (int i = 0; i < dr.Length; i++)
{
string UserAccount = dr[i]["员工工号"].ToString();
string StartDate = dr[i]["开始日期"].ToString();
string StartTime = dr[i]["开始时间"].ToString();
string EndDate = dr[i]["结束日期"].ToString();
string EndTime = dr[i]["结束时间"].ToString();
decimal DayQty = 0;
if (string.IsNullOrEmpty(StartDate) || string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndDate) || string.IsNullOrEmpty(EndTime))
{
DayQty = 0;
}
else
{
DayQty = decimal.Parse(GetLeaveDays(StartDate, StartTime, EndDate, EndTime, LeaveTypeModel.AnnualLeave)); //decimal.Parse(dr[i]["天数"].ToString());
}
根据Useraccount记录下DayQty值(相同UserAccount相加),但是每次的Useraccount都不一致 有什么好的解决方法.
作者:
黑骏马
时间:
2013-8-1 10:08
本帖最后由 黑骏马 于 2013-8-1 10:23 编辑
[ 本帖最后由 黑骏马 于 2013-8-1 10:20 编辑 ]\n\n看你的代码觉得好奇怪,for循环的结果是一次次覆盖DayQty值,最后只是得到最后一个员工的DayQty。
数组的索引,只能是从0开始的数字,你怎么还写进字符串了?
最后的问题也没看懂,是要求DayQty的总和?还是要记录每一个员工的DayQty?还是别的什么意思?我按我的理解来回答:
如果要求总和,if和else里面的 = 应该换成 +=
if (string.IsNullOrEmpty(StartDate) || string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndDate) || string.IsNullOrEmpty(EndTime))
{
DayQty += 0;
}
else
{
DayQty += decimal.Parse(GetLeaveDays(StartDate, StartTime, EndDate, EndTime, LeaveTypeModel.AnnualLeave)); //decimal.Parse(dr[i]["天数"].ToString());
}
复制代码
如果要记录每一个员工的DayQty,应该把DayQty声明为一个数组,但是要保持跟员工工号的对应,所以应该作为一个元素加进dr[][]的第二维里面。
if (string.IsNullOrEmpty(StartDate) || string.IsNullOrEmpty(StartTime) || string.IsNullOrEmpty(EndDate) || string.IsNullOrEmpty(EndTime))
{
dr[i][dayQty] = 0;
}
else
{
dr[i][dayQty] = decimal.Parse(GetLeaveDays(StartDate, StartTime, EndDate, EndTime, LeaveTypeModel.AnnualLeave)); //decimal.Parse(dr[i]["天数"].ToString());
}
复制代码
相同UserAccount相加,要实现这一点需要每次循环做一次dr【i】["员工工号"]的比较,(这似乎是你想问的问题?)
(吐槽下编辑器,输入个[ 'i' ] 后面内容竟然全部变斜体了,编辑器自动补[/'i']?)
for (int j = 0; j < i; j++)
{
if (dr[j]["员工工号"] == dr[i]["员工工号"] )
{
dr[i][dayQty]+=dr[j][dayQty];
dr[j][dayQty]=dr[i][dayQty]; //保持两条数据的一致
}
}
复制代码
如果存在两个以上的相同UserAccount,为保持数据一致,上面的代码还得修改,一时想不到什么好办法解决。
本来想用数组+结构来改造你的dr数组,查了半天资料发现似乎是做不到的,可能需要更高级的知识。
作者:
黑骏马
时间:
2013-8-2 13:23
向同学请教后搞明白了把结构装进数组的方法,原来很简单:
public struct DayQty
{
public string userAccont;
//public DateTime startDate;
public DateTime startTime;
//public DateTime endDate;
public DateTime endTime;
public decimal dayQty;
}
static void Main()
{
DayQty[] dr = new DayQty[10];
//可以写成方法AddData()
dr[0].userAccont = "101";
dr[0].startTime = new DateTime(2013, 7, 1, 8, 30, 0);
dr[0].endTime = new DateTime(2013, 7, 1, 18, 0, 0);
//dr[0].dayQty = 0.0m;//不赋值即默认为0
dr[1].userAccont = "102";
dr[1].startTime = new DateTime(2013, 7, 1, 10, 0, 0);
dr[1].endTime = new DateTime(2013, 7, 1, 18, 0, 0);
//dr[1].dayQty = 0.0m;
Console.WriteLine(dr[0].startTime);
Console.WriteLine(dr[0].dayQty);
Console.ReadKey();
}
复制代码
估计楼主的程序是用数据库的,我是当成控制台程序思考的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2