新手有问题,千万帮帮忙!
我最近做了一个教室查询系统,在对话框里输入教学楼 教室 以及时间即可查出该教室有没有课,能不能上自习,但是代码有些问题,不知道怎么解决,求教各位高手了.
这里是我的主要查询代码,能够通过编译,但是不能显示正确的结果.既是只能显示某一条记录,不管我输入的是哪栋教学楼 哪间教室,什么时间,都显示的是同样的结果.我在这里用到了ACCESS数据库来储存记录,以下是代码:
void CChaxunView::OnButtonOk()
{
// TODO: Add your control notification handler code here
if(!m_pSet-> IsOpen()) return;
if(!m_pSet-> CanAppend()) return;
CDBVariant varBookmark; //书签
bool found = false; //找到记录没有
bool foundjiaoxuelou=false;////找到教学楼
bool foundroomnumber=false;找到教室
if (m_pSet-> CanBookmark())
m_pSet-> GetBookmark(varBookmark);
m_pSet-> MoveFirst();
while(!m_pSet-> IsEOF()&&!found)
{
if (m_pSet-> m_Jiaoxuelou==m_jiaoxuelou)
{
foundjiaoxuelou=true;
if(m_pSet-> m_Roomnumber==m_roomnumber)
{
foundroomnumber=true;
if(m_pSet-> m_Weeknumber==m_weeknumber)
{
if(m_pSet-> m_Xingqi==m_xingqi)
{
if(m_pSet-> m_Dijijieke==m_dijijieke)
{
found=true;
if(m_pSet-> CanBookmark())
m_pSet-> SetBookmark(varBookmark);
else m_pSet-> MoveFirst();
}
else
m_pSet-> MoveNext();
}
else
m_pSet-> MoveNext();
}
else
m_pSet-> MoveNext();
}
else
m_pSet-> MoveNext();
}
else
m_pSet-> MoveNext();
}
if (foundjiaoxuelou==false)
{
MessageBox( "没有该教学楼或该教学楼不能上自习 ", " 没有找到该教学楼 ",
MB_OK | MB_ICONEXCLAMATION);
}
if (foundroomnumber==false)
{
MessageBox( "没有该教学楼或该教学楼不能上自习! ", " 没有找到该教学楼 ",
MB_OK | MB_ICONEXCLAMATION);
}
if (found==false)
{
MessageBox( "该教室没课,可以上自习! ", "查询结果 ",MB_OK | MB_ICONEXCLAMATION);
if(m_pSet-> CanBookmark())
m_pSet-> SetBookmark(varBookmark);
else m_pSet-> MoveFirst();
}
else
{ course=m_pSet-> m_Course;
teacher=m_pSet-> m_Teacher;
banji=m_pSet-> m_Class;
jieguo=course+ " "+teacher+ "老师 "+ " "+banji+ "班 ";
MessageBox(jieguo, "教室有课! ",MB_OK | MB_ICONEXCLAMATION);
}
}
千万感谢各位了 !
[解决办法]
把代码写工整点吧,看着好累
你调试一下看看数据是否正确?
[解决办法]
楼主你看你的代码,英语水平不行啊。。。
而且程序思路,编程风格都让人难以理解。
[解决办法]
让我来说一下你的数据库的数据表吧:
数据表字段定义:
1、教学楼号 : BuildingNo
2、教室室号: RoomNo
3、教室有课的周次: WeekNo
4、教室有课的在该周次的哪一天: DayNo
5、教室有课的周次的那一天的哪几节课有课: ClassNo
所以,“不能在该教室上课”的条件是上述的5个字段基本能同时满足要求。
要解此题,你首先是得建立一个全部的有课的数据库记录。
例如:// 表名: Class
BuildingNo RoomNo WeekNo DayNo ClassNo
1 1021 3 星期一 3, 4
1 1035 18 星期五 1, 2
3 3021 5 星期三 1, 2, 3, 4
1、
select ClassNo from class where RoomNo = 你输入的教室号 and WeekNo = 你输入的周次 and DayNo=你输入的该周的那一天
2、
在查询得到的所有记录中之包含了一个字段,那就是当天有课的课次:例如第1至第6节课
这时你只需要检查当前输入的课次是否在查询的结果里面即可。
例如:你输入的是第3节课,查询的结果是第5、6节课,当然可以上自习了;
你输入的是第三节课,查询的结果是1,2,3,4,那么就不能上自习了。
[解决办法]
不好看啊,只能自己调试分析一下呀,这种问题不具体,不好回答的。
[解决办法]
数据表字段定义:
1、教学楼号 : BuildingNo
2、教室室号: RoomNo
3、教室有课的周次: WeekNo
4、教室有课的在该周次的哪一天: DayNo
5、教室有课的周次的那一天的哪几节课有课: ClassNo
所以,“不能在该教室上课”的条件是上述的5个字段基本能同时满足要求。
要解此题,你首先是得建立一个全部的有课的数据库记录。
例如:// 表名: Class
BuildingNo RoomNo WeekNo DayNo ClassNo
1 1021 3 星期一 3, 4
1 1035 18 星期五 1, 2
3 3021 5 星期三 1, 2, 3, 4
1、
select ClassNo from class where RoomNo = 你输入的教室号 and WeekNo = 你输入的周次 and DayNo=你输入的该周的那一天
2、
在查询得到的所有记录中之包含了一个字段,那就是当天有课的课次:例如第1至第6节课
这时你只需要检查当前输入的课次是否在查询的结果里面即可。
=============
用这个吧
[解决办法]
> ...在对话框里输入教学楼(jiaoxuelou), 教室(roomnumber)以及时间(theDateTime)即可查出该教室有没有课...
-------------------------------
我觉得表结构中时间应该有两个, 即开始时间(startDateTime) 和结束时间(endDateTime), 而你输入的时间只有一个. 即要查询是否有空的教室就是看 "你输入的时间是否在教学楼的某个教室的开始与结束时间段里 ". 如果不在, 则可以去上自习. 这可以尝试用一条 SQL 语句来查询结果 .
假如你的表(MyTable)结构是:
教学楼(jiaoxuelou)
教室(roomnumber)
开始时间(startDateTime)
结束时间(endDateTime)
那么这条 sql 语句可以是:
CString strJiaoxuelou = "005 "; // 5 号教学楼
CString strRoom = "303 "; // 303 室
CString strInputTime = "2006-1-7 11:00 "; // 7 号 11 点整
// 以下是看 "你输入的时间是否在教学楼的某个教室的开始与结束时间段里 "
CString strSQL = "select count(*) as isUsed from MyTable ";
strSQL = strSQL + " where jiaoxuelou = ' "+ strJiaoxuelou + " ' ";
strSQL = strSQL + " and roomnumber = ' "+ strRoom + " ' ";
strSQL = strSQL + " and ' " + strInputTime " ' between (strDateTime, endDateTime) ";
然后在 MFC code 里获取 isUsed 字段的值, 如果为 0 则表示这段时间是空的; 如果大于 0 , 则表示正在被使用 .
[解决办法]
把你的SQL语句贴出来吧,在这个响应函数里没有看到你执行数据库查询呀,你在什么地方查询的?
用的什么语句查询的.
[解决办法]
我的数据表结构如下:
Jiaoxuelou Rooomnumber Weeknumber Xingqi Dijijieke Course Teacher Banji
================
改一下SQL 语句即可:
select * from class where BuildingNo = 你输入的教学楼号 and RoomNo = 你输入的教室号 and WeekNo = 你输入的周次 and DayNo=你输入的该周的那一天
用SQL语句的方式来操作数据库,而不是在程序里面判断,至于怎么执行sql语句,你可以自己查一下,很简单的。
[解决办法]
昏过去,这么多嵌套if语句。。。。。。。
一个sql搞定的东西。
[解决办法]
编程风格有很大问题,Raymond谈到,当你的代码别人看了三遍还不清晰就是时候重量写了