hehe...老师让你们使用QB主要是要求掌握许多技术的。首先就是理解DBMS的工作原理,自己要亲自写一个嘛。
其次是锻炼程序设计的能力,这个程序不小,结构做不好要很费劲的。我建议你自己做做看吧。
还有很多细节的东西,等你编程的过程中就会发现。
没有面向过程的编程经验直接做面向对象的东西,我认为是现在很多程序员的遗憾。题目比较典型,难度适中,难得的。

解决方案 »

  1.   

    用qb怎么样做 类似wps(dos)的菜单呢? 又怎么 实现 像 edit 之类的东西呢?
      

  2.   

    类似wps(dos)的菜单呢=========================================================先把菜单项目画出来
    再等待按键
    像 edit 之类
    =========================================
    处理按键,自己写
      

  3.   

    顺便问一问:你的QB是那个版本?别告诉我是DOS自带的QBASIC 1.1最好用QuickBASIC 7.1
    下载地址:http://www.dapha.net/down/list.asp?id=1160
      

  4.   

    4.5是经典,曾是NOI的指定语言。关于菜单的问题,那些都是自己手动画出来的。实际上是用Locate语句和Print语句就可以实现。恢复屏幕好像是用screen,记不大清楚了。完全可以实现跟PCTools一类DOS软件的界面。似乎快捷键你得查查资料,使用的是键盘扫描码。我一般都是自己编个小程序来检查这个代码是多少。
      

  5.   

    wuwu...好久没有用QB了,编译器都找不着了。我做了一个简单的可以扩展的菜单,参考一下吧。
    DECLARE SUB xBEEP ()
    DECLARE SUB SaveBack (x AS INTEGER, y AS INTEGER, w AS INTEGER, h AS INTEGER, buf() AS STRING)
    DECLARE SUB RestoreBack (x AS INTEGER, y AS INTEGER, w AS INTEGER, h AS INTEGER, buf() AS STRING)
    DECLARE FUNCTION PopMenu! (menu() AS STRING, count AS INTEGER, x AS INTEGER, y AS INTEGER)
    ' Menu Function
    ' PopMenu() is the main function of this program
    '
    '   Copyright(C) LENGs Software, Leng Dakun, 2003
    'DIM m(5) AS STRINGm(1) = " Open"
    m(2) = " Create "
    m(3) = " Write"
    m(4) = " Close"
    m(5) = " Exit"SCREEN 0, 0, 0 'Text mode
    'Write some background text
    COLOR 1, 0
    PRINT "Hello 12345678901234567890234567890"
    COLOR 3, 0
    PRINT "Hello 12345678901234567890234567890"
    COLOR 5, 0
    PRINT "Hello 12345678901234567890234567890"
    COLOR 0, 7
    PRINT "Hello 12345678901234567890234567890"
    COLOR 0, 9
    PRINT "Hello 12345678901234567890234567890"
    COLOR 0, 11
    PRINT "Hello 12345678901234567890234567890"
    COLOR 13, 0
    PRINT "Hello 12345678901234567890234567890"
    COLOR 15, 0
    PRINT "Hello 12345678901234567890234567890"
    COLOR 15, 13
    PRINT "Hello 12345678901234567890234567890"
    COLOR 15, 11
    PRINT "Hello 12345678901234567890234567890"ReDO:
    LOCATE 23, 1
    PRINT "Press Up and Down to select, Enter to select, ESC to exit";
    x = PopMenu(m(), 5, 7, 2)
    ' PopMenu(MenuItem(), MenuItemCount, MenuPositionX, MenuPositionY)
    ' Return: >0 MenuItem ID
    '         =0 ESC pressed
    '         -1 Left Arrow
    '         -2 Right ArrowLOCATE 24, 1
    COLOR 15, 0
    PRINT "The menu you choose is:"; x; " and space to redo";
    k$ = INPUT$(1)
    IF k$ = " " THEN GOTO ReDO
    ENDFUNCTION PopMenu (menu() AS STRING, count AS INTEGER, x AS INTEGER, y AS INTEGER)
        DIM b(50) AS STRING    DIM i AS INTEGER, j AS INTEGER
        DIM m AS INTEGER, s    FOR i = 1 TO 50
            b(i) = STRING$(80, 0)
        NEXT i
       
        'Reset the width of menu
        m = 0
        FOR i = 1 TO count
            IF LEN(menu(i)) > m THEN m = LEN(menu(i))
        NEXT i
        
        FOR i = 1 TO count
            menu(i) = menu(i) + SPACE$(m - LEN(menu(i)))
        NEXT i    SaveBack x, y, m + 2, count + 2, b()
        'Draw out the menu
        LOCATE y, x
        COLOR 0, 15
        PRINT "+";
        FOR i = 1 TO m
            PRINT "=";
        NEXT i
        PRINT "+";
       
        COLOR 0, 15
        FOR i = 1 TO count
            LOCATE y + i, x
            PRINT "|";
            PRINT menu(i);
            PRINT "|";
        NEXT i
        LOCATE y + i, x
        COLOR 0, 15
        PRINT "+";
        FOR i = 1 TO m
            PRINT "=";
        NEXT i
        PRINT "+";
        COLOR 15, 0    'Start to select
        s = 1 'current select
        DO
            LOCATE y + s, x + 1
            COLOR 15, 0
            PRINT menu(s);
            DO
                k$ = INKEY$
            LOOP UNTIL k$ <> ""
            IF k$ = CHR$(27) THEN
                PopMenu = 0
                EXIT DO
            ELSEIF k$ = CHR$(13) THEN
                PopMenu = s
                EXIT DO
            ELSEIF LEFT$(k$, 1) = CHR$(0) THEN
                k$ = RIGHT$(k$, 1)
                COLOR 0, 15
                LOCATE y + s, x + 1
                PRINT menu(s);
                IF k$ = CHR$(72) THEN       'UP
                    s = (s + count - 2) MOD count + 1
                ELSEIF k$ = CHR$(80) THEN   'DOWN
                    s = s MOD count + 1
                ELSEIF k$ = CHR$(75) THEN   'LEFT
                    PopMenu = -1
                    EXIT DO
                ELSEIF k$ = CHR$(77) THEN   'RIGHT
                    PopMenu = -2
                    EXIT DO
                ELSE
                    xBEEP
                END IF
            ELSE
                xBEEP
            END IF
        LOOP
        COLOR 15, 0
        RestoreBack x, y, m + 2, count + 2, b()
    END FUNCTIONSUB RestoreBack (x AS INTEGER, y AS INTEGER, w AS INTEGER, h AS INTEGER, buf() AS STRING)
        ' restore a windowed background at the position of x,y and size of w,h
        'buf is a buffer which to store txt and color info
        DIM i AS INTEGER, j AS INTEGER
        DIM a AS INTEGER, b AS INTEGER, k AS STRING
        FOR i = 1 TO h
            FOR j = 1 TO w
                IF i = 25 AND j = 80 THEN EXIT FOR ' this position cannot write
                LOCATE y + i - 1, x + j - 1
                k = MID$(buf(i + h), j, 1)
                IF k = CHR$(0) THEN
                    a = 0
                    b = 0
                ELSE
                    a = INT(ASC(k) / 16)
                    b = ASC(k) MOD 16
                END IF
                COLOR b, a
                PRINT MID$(buf(i), j, 1);
            NEXT j
        NEXT i
    END SUBSUB SaveBack (x AS INTEGER, y AS INTEGER, w AS INTEGER, h AS INTEGER, buf() AS STRING)
        'Save windowed background at the position x,y and the size of w,h
        'buf() is a buffer which to store txt info and color info
        DIM i AS INTEGER, j AS INTEGER
        DIM t AS INTEGER    'Save background
        FOR i = 1 TO h
            FOR j = 1 TO w
                MID$(buf(i), j, 1) = CHR$(SCREEN(y + i - 1, x + j - 1))
                MID$(buf(i + h), j, 1) = CHR$(SCREEN(y + i - 1, x + j - 1, 1))
            NEXT j
        NEXT iEND SUBSUB xBEEP
        SOUND 440, .5
        SOUND 880, .5
    END SUB