在表上分别建立字段,ID、 课程名称、  周一(上课时间)、 周二(上课时间)、 .... 周日(上课时间)、 上课地点、开课周数 进行存取就好了上课时间可以用二进制数表示,比如一天最多8个课时,即为8位的二进制数,周一1-2节VC,可在周一的字段上记 00000011
记得我以前也作过一个类似的,就是这么实现的,具体优化你自己看着办了
课程名称,上课地点可以分离出来的

解决方案 »

  1.   

    判断是否有冲突天数,周数,地点这些都好判断,节数用SQL里的位运算进行操作,然后进行判断,有点麻烦后面的都不难实现
      

  2.   

    可是上课地点和开课周数都不固定比如MS-SQL这门课,
    周一在1101上是[1-5周]
    周二在1201上是[1-10周]
    周三1-2节在1301上是[1-5周]
        11-12节在1401上是[6-10周]同一天有可能出现两次,但是时间地点都不同
    如果用一个表穷举法按上课时段列
    至少有
    7天*7种上课周数类型*N个教室
    假设有10间教室
    这就要490列了
    如果有100间以上就是几千列了
    这就太夸张了吧
      

  3.   

    MS-SQL这门课,
    周一在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间以上就是几千列了
    这就太夸张了吧
    对于上面这段话,我只想问,你到底会不会数据库啊!如果你还不懂就算我白说了
      

  4.   

    --建两张表Create table class(
    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
      

  5.   

    to Tian987() 
    我还以为你是说一个课程占一行,我理解错误不好意思想在一张标准的课程表上显示某课程的信息
    横排是星期,纵排是节次比如有门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连接比较好要把这门课添加进标准课表
    是不是先查询星期,再查询节次,最后把课程名称,周数和教室填进去就可以了==============================================课程选好后
    因为选的不同每个学生会有一张课程表
    要储存到数据库中是不是建个表
    横排是姓名,纵排是星期,然后表格里内容显示[课程名,节次,星期,教室]就可以了
    读数据的时候就先查星期,再查节次,
    找到位置后把课程名,星期和教室按顺序显示出来就可以了=================================================在一格里面同时显示课程,星期和教室
    有时候还有可能同时显示两三门课程的信息
    会不会出现什么问题?
      

  6.   

    to hyrongg(世道变得太快) 
    问题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 '没课'这样就行了?
      

  7.   

    question1:
    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'
      

  8.   

    1
    你给的这三条记录只是一门课的啊
    假设有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
    这些是什么意思
    不明白
      

  9.   


    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控件,让用户输入。
      

  10.   

    2。
    让用户输入周数,节数,教室不太合理吧
    只输入课程名不行么?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节]这格中?
      

  11.   

    2。
    让用户输入周数,节数,教室不太合理吧
    只输入课程名不行么?
    ---
    只输入课程名能查询这门课的课程安排情况

    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
      

  12.   

    比如有门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连接比较好要把这门课添加进标准课表
    是不是先查询星期,再查询节次,最后把课程名称,周数和教室填进去就可以了
    ----------------------------------------------------------------呵呵!这个涉及到数据显示问题啊!
    我不建议用DBGird,因为显示的内容并不多,也不需要修改,没必要用数据敏感的控件
    如果访问量不是特别大的话(我觉得你做的可能是给单用户做管理的),可以用循环语句查询数据库历遍每节课,然后直接赋值给普通Grid的Cells如果访问量大的话,就另当别论了
      

  13.   

    我下了个
    Microsoft SQL Server 2000 Analysis Services SP4
    不知道这个好不好用