在表上分别建立字段,ID、 课程名称、 周一(上课时间)、 周二(上课时间)、 .... 周日(上课时间)、 上课地点、开课周数 进行存取就好了上课时间可以用二进制数表示,比如一天最多8个课时,即为8位的二进制数,周一1-2节VC,可在周一的字段上记 00000011
记得我以前也作过一个类似的,就是这么实现的,具体优化你自己看着办了
课程名称,上课地点可以分离出来的
记得我以前也作过一个类似的,就是这么实现的,具体优化你自己看着办了
课程名称,上课地点可以分离出来的
解决方案 »
- 请教一个存储过程问题
- 求sql
- 一数据库可否定查询另一数据库?
- 我在SQL Server中,查出一个数据集,有什么办法可以为这个数据集按顺序编号??(
- 多关键字模糊查询怎么实现?
- 这个问题看似简单,实际很难,大家不要轻敌啊!
- 一个奇怪的转换问题
- dtproperties表是做什么的
- 各位大虾:在DATAGRID控件中对记录做修改时提示:键列信息不足或不正确,更新影响到更多的行
- 小弟自学sql server,求一部好点的视屏和书籍,以供我自学,谢谢大神了
- SQL中如何动态生成BAT文件,又如何删除或者修改
- 怎么用java编写web页能够连接访问并操作analysis manager的多维数据立方体?
周一在1101上是[1-5周]
周二在1201上是[1-10周]
周三1-2节在1301上是[1-5周]
11-12节在1401上是[6-10周]同一天有可能出现两次,但是时间地点都不同
如果用一个表穷举法按上课时段列
至少有
7天*7种上课周数类型*N个教室
假设有10间教室
这就要490列了
如果有100间以上就是几千列了
这就太夸张了吧
周一在1101上是[1-5周]
周二在1201上是[1-10周]
周三1-2节在1301上是[1-5周]
11-12节在1401上是[6-10周]这个就可以记作四条记录了呀!分别是
ID、课程、周一、周二、周三、周四、周五、周六、周日、上课地点、开始周数、结束周数
1 SQL X 1101 1 5
2 SQL X 1201 1 10
3 SQL X 1301 1 5
4 SQL X 1401 6 10
(上课是哪一节你没给,按我上面的说法换成数字就好)
==================================================================================同一天有可能出现两次,但是时间地点都不同
如果用一个表穷举法按上课时段列
至少有
7天*7种上课周数类型*N个教室
假设有10间教室
这就要490列了
如果有100间以上就是几千列了
这就太夸张了吧
对于上面这段话,我只想问,你到底会不会数据库啊!如果你还不懂就算我白说了
id int identity(1,1),
classid nvarchar(10),
startweeknum int,
endweeknum int,
PerweekNum int,
classroomnum int,
classnum nvarchar(10)
)create table classname(
ID nvarchar(10),
cname nvarchar(20)
)insert into classname select 'C001','VC'
union all select 'C002','VB'
union all select 'C003','C++'
union all select 'C004','Delphi'
union all select 'C005','VFP'
insert into class select 'C001',1,10,1,1101,'01-02'
union all select 'C002',6,10,1,1202,'03-04'
union all select 'C003',11,20,1,1301,'06-06'
union all select 'C004',11,15,1,1401,'07-08'
union all select 'C005',16,20,1,1103,'07-08' union all select 'C003',1,10,2,2101,'01-02'
union all select 'C005',11,20,2,2201,'01-02'
union all select 'C004',11,15,2,2204,'03-04'
union all select 'C001',1,5,2,1201,'05-06'
union all select 'C002',6,10,1,1301,'07-08'--question1
/*
2.有个新课程要添加进课程表
比如说
Java 星期二9-10(1-5)2201
星期三1-2(1-10)2301
星期五5-6(6-10)2401
要判断它的天数,节数,周数,地点
和某个已经选的课程是否有冲突又该怎么判断
如果没有冲突把它加入课程表又该怎么加
*/
if exists(select * from class where perweeknum=2 and classnum='09-10' and (startweeknum>=1 and endweeknum<5) and classroomnum=2201
union all
select * from class where perweeknum=3 and classnum='01-02' and (startweeknum>=1 and endweeknum<10) and classroomnum=2301
union all
select * from class where perweeknum=2 and classnum='05-06' and (startweeknum>=6 and endweeknum<10) and classroomnum=2401
)
begin
print '冲突'
end
else
print 'Congratulation'--如果没有冲突,ok,insert a record to classname first, after that insert into class
insert into classname select 'C006','Java'insert into class select 'C006',1,5,2,2201,'09-10'
union all select 'C006',1,10,3,2301,'01-02'
union all select 'C006',6,10,5,2401,'05-06'/*
question 23.对教室查询
比如说查第3周星期一1401有没有课
又该怎么查
*/
if exists(select * from class where (startweeknum<=3 and endweeknum>=3) and perweeknum=1 and classroomnum=1401)
print '有课'
else
print '没课'/*
4.见过一个asp网页可以实现以上功能
但是找不到源代码不知道怎么实现的
这样的一张课程表怎么用Delphi+MS-SQL建立
有没有简单的办法实现这个课程表
*/
--和delphi没有关系,只是建议不要用它的数据库敏感控件捆绑,我感觉麻烦。
drop table class,classname
我还以为你是说一个课程占一行,我理解错误不好意思想在一张标准的课程表上显示某课程的信息
横排是星期,纵排是节次比如有门Asp.net,周四的课
1-2节2101 1-5周
1-2节2202 6-10周
那么在这个课程表里显示出来就是
周四和1-2节对应的格中显示 Asp.net 2201 1-5 Asp.net 2202 6-10想用DBGird显示出来
是直接在DBGird上画个表
还是在SQL建个课表用DataSource连接比较好要把这门课添加进标准课表
是不是先查询星期,再查询节次,最后把课程名称,周数和教室填进去就可以了==============================================课程选好后
因为选的不同每个学生会有一张课程表
要储存到数据库中是不是建个表
横排是姓名,纵排是星期,然后表格里内容显示[课程名,节次,星期,教室]就可以了
读数据的时候就先查星期,再查节次,
找到位置后把课程名,星期和教室按顺序显示出来就可以了=================================================在一格里面同时显示课程,星期和教室
有时候还有可能同时显示两三门课程的信息
会不会出现什么问题?
问题1
classname
是不是说有多少门课就要写多少行
class
有多少种就写多少行如果有20门课60种安排
就分别写20和60行
问题2
也就说行数是由课程安排的种数决定
同问题1的话也要写60行判断
然后插入再写60行
问题3
建4个Edit分别填,教室,周数,星期,节次
然后1个Button的Click事件是
if exists(select * from class where classroomnum=Edit1.Text and(startweeknum<='Edit2.Text' and endweeknum>='Edit2.Text') and perweeknum='Edit3.Text' and classnum='Edit4.Text' )
print '有课'
else
print '没课'这样就行了?
classname表相当于一个编码表,有60门课程就有60条纪录,一般学校会有多少课程?
class表比如增加一门课程
Java 星期二9-10(1-5)2201
星期三1-2(1-10)2301
星期五5-6(6-10)2401
只需要增加三条纪录呀
如:
insert into class select 'C006',1,5,2,2201,'09-10'
union all select 'C006',1,10,3,2301,'01-02'
union all select 'C006',6,10,5,2401,'05-06'问题2:
写60行判断干什么?不太明白,插入一条记录之前字需要判断这条纪录是否冲突就可以了,不需要判断60次
这里我不太清楚你的意思问题3:
按照我的设计,应该放选择课程名:'VC' 下拉框,列举Classname里面的Name
教室: 2201
开始周数:1
结束周数:10
节次: 01-02
星期: 2Button里面if exists(select * from class where classroomnum=Edit教室.Text and(startweeknum<='Edit开始周数.Text' and endweeknum>='Edit结束周数.Text') and perweeknum='Edit星期.Text' and classnum='节次.Text' )
print '有课'
else
insert into class select 'C001',1,10,1,2201,'01-02'
你给的这三条记录只是一门课的啊
假设有20门课可以选
每门课一周都有3次上课时间那不是就要写20*3行了?2
同上
你所给的判断也是判断一门课的3次上课时间
有20门不就是60行?3.
选择课程名:'VC' 下拉框,列举Classname里面的Name
教室: 2201
开始周数:1
结束周数:10
节次: 01-02
星期: 2
一个下拉放Classname
那么下面的
教室: 2201
开始周数:1
结束周数:10
节次: 01-02
星期: 2
这些是什么意思
不明白
1
你给的这三条记录只是一门课的啊
假设有20门课可以选
每门课一周都有3次上课时间那不是就要写20*3行了?--是的,要添加20*3条纪录到class表里,60条纪录也不算多,正常呀,你算算你总共会有多少记录?1000条纪录差不多了吧
2
同上
你所给的判断也是判断一门课的3次上课时间
有20门不就是60行?
--你不可能一次去判断20门课程冲突不冲突呀?
--你只可能一门一门的去判断,让用户输入周数,节数,教室号码来判断排课情况有没有冲突
3.
选择课程名:'VC' 下拉框,列举Classname里面的Name
教室: 2201
开始周数:1
结束周数:10
节次: 01-02
星期: 2
一个下拉放Classname
那么下面的
教室: 2201
开始周数:1
结束周数:10
节次: 01-02
星期: 2
这些是什么意思
不明白--在delphi界面上放控件,让用户录入相关信息,才能添加到数据表里呀,这些是和表里的字段相对应的Edit控件,让用户输入。
让用户输入周数,节数,教室不太合理吧
只输入课程名不行么?3。就是说一个下拉,5个Edit就行了
怎么把指定的内容放进8*7的DBGird课表中
[Gird课表是直接用delphi建还是在sql里建个表用Dataset连,哪个比较好?]
横列是星期,纵列是节次比如把MS-SQL,周三,01-02节,1301,01-05周
里的MS-SQL,1301,01-05周这三个信息一起放进
DBGird的[星期三,01-02节]这格中?
让用户输入周数,节数,教室不太合理吧
只输入课程名不行么?
---
只输入课程名能查询这门课的课程安排情况
用
select b.cname,cast(a.startweeknum as nvarchar)+'-'+cast(a.endweeknum as nvarchar),
N'星期'+cast(perweeknum as nvarchar),classroomnum as N'教室',classnum as N'节数'
from class a
inner join classname b on a.classid=b.id
where b.cname='VC'
--------------------------结果
VC 1-10 星期1 1101 01-02
VC 1-5 星期2 1201 05-063,差不多了,感觉不够,你可以增加,不影响在delphi中用Adoconnection,Adoquery,Adodatasource,DBgrid等控件组合
其中Adoconnection连接数据库,Adoquery写query,DBgrid显示数据,用Adodatasource连接DBGrid和Adoquery component最好一个字段放一格
就像这样不是蛮好的吗?
VC 1-10 星期1 1101 01-02
VC 1-5 星期2 1201 05-06
1-2节2101 1-5周
1-2节2202 6-10周
那么在这个课程表里显示出来就是
周四和1-2节对应的格中显示 Asp.net 2201 1-5 Asp.net 2202 6-10想用DBGird显示出来
是直接在DBGird上画个表
还是在SQL建个课表用DataSource连接比较好要把这门课添加进标准课表
是不是先查询星期,再查询节次,最后把课程名称,周数和教室填进去就可以了
----------------------------------------------------------------呵呵!这个涉及到数据显示问题啊!
我不建议用DBGird,因为显示的内容并不多,也不需要修改,没必要用数据敏感的控件
如果访问量不是特别大的话(我觉得你做的可能是给单用户做管理的),可以用循环语句查询数据库历遍每节课,然后直接赋值给普通Grid的Cells如果访问量大的话,就另当别论了
Microsoft SQL Server 2000 Analysis Services SP4
不知道这个好不好用