编写一个建立图书数据文件的程序。程序运行后,可以从键盘上输入每种图书的有关数据,包括图书分类号、登记号、作者、单价、购进数、借出数、出版日期和出版社名称,把这些数据存人文件中。文件建立后,按登记号的顺序(由小到大)输出全部内容。

解:图书数据文件记录的结构见下表:
分类号  登记号  作者  单价  购进数  借出数  出版日期  出版社
    …        …        …     …        …         …          …           …

按以下步骤操作。

(1)执行“工程”菜单中的“添加模块”命令,建立一个新的标准模块,在该模块中定义如下的记录类型和全局变量:
Type Book_Info
    class_num As Integer
    reg_num As Integer
    Author As String * 6
    price As Single
    buy_num As Integer
    loan_num As Integer
    pub_date As String
    pub_com As String * 18
End Type

Option Base 1
Public Book_num() As Book_Info
 Public n As Integer

(2)在窗体层编写输入数据的通用过程:
Sub B_Input(Num As Integer)
    n = n + Num
    ReDim Book_num(Num) As Book_Info
    Open "d:\BookI.txt" For Append As #1
    For i = 1 To Num
        Book_num(i).class_num = InputBox("请输人图书分类号")
        Book_num(i).reg_num = InputBox("请输人登记号")
        Book_num(i).Author = InputBox("请输人作者名")
        Book_num(i).price = InputBox("请输入单价")
        Book_num(i).buy_num = InputBox("请输人购进数")
        Book_num(i).loan_num = InputBox("请输人借出数")
        Book_num(i).pub_date = InputBox("出版日期")
        Book_num(i).pub_com = InputBox("请输人出版社名称")
        Write #1, Book_num(i).class_num, Book_num(i).reg_num, _
              Book_num(i).Author, Book_num(i).price, _
              Book_num(i).buy_num, Book_num(i).loan_num, _
              ; Book_num(i).pub_date, Book_num(i).pub_com
    Next i
    Close #1
    Open "d:\num.txt" For Output As #1
    Print #1, n
    Close #1
End Sub

该过程用来输入数据,并把输人的数据存人磁盘文件。它有1个参数,即需要输人的图书种类数。文件用Append方式打开,因此每次输人的数据都附加到原来数据的后面。这里应注意全局变量n的使用。调用该过程时,把Num的实参与n相加,再赋予n,从而可以把多次调用该过程所输人的图书种类数累加起来。在过程的最后,把n存人一个磁盘文件,这样,即使退出程序或关机,仍可以记下当前图书数文件中记录的个数。在这个过程中,输人的数据被存入记录数组。

(3)在窗体层编写输出数据的通用过程:
Sub B_output()
    Open "d:\num.txt" For Input As #1
    Input #1, n
    Close #1
    ReDim Book_num(n) As Book_Info
    Open "d:\BookI.txt" For Input As #2
    x = 1
    Print "分类号  "; "登记号   "; "作者     "; "单价  "; "购进数 "; _
          ; "借出数  "; "出版日期 "; "出版社"
    Print
    Print "原来顺序:"
    Do While Not EOF(2)
        Input #2, Book_num(x).class_num, Book_num(x).reg_num, _
              Book_num(x).Author, Book_num(x).price, _
              Book_num(x).buy_num, Book_num(x).loan_num, _
              Book_num(x).pub_date, Book_num(x).pub_com

        Print Book_num(x).class_num; "  "; Book_num(x).reg_num; "  " _
              ; Book_num(x).Author; "  "; Book_num(x).price; "  "; _
              Book_num(x).buy_num; "  "; Book_num(x).loan_num; "  " _
              ; Book_num(x).pub_date; "  "; Book_num(x).pub_com

        x = x + 1
    Loop
    Close #2
    Print
    SortB
End Sub

该过程用来输出图书数据文件中的记录,它首先打开前一个过程建立的文件,然后按建立顺序输出每个记录。由于题目要求按登记号由小到大的顺序输出记录,因此用一个过程对各记录进行排序,并输出排序后的结果。

排序过程如下:
Sub SortB()
For k = n To 2 Step -1
    For l = 1 To k - 1
        If Book_num(l).reg_num > Book_num(l + 1).reg_num Then
            t = Book_num(l + 1).reg_num
            Book_num(l + 1).reg_num = Book_num(l).reg_num
            Book_num(l).reg_num = t

            t = Book_num(l + 1).class_num
            Book_num(l + 1).class_num = Book_num(l).class_num
            Book_num(l).class_num = t

            t = Book_num(l + 1).Author
            Book_num(l + 1).Author = Book_num(l).Author
            Book_num(l).Author = t

            t = Book_num(l + 1).price
            Book_num(l + 1).price = Book_num(l).price
            Book_num(l).price = t

            t = Book_num(l + 1).buy_num
            Book_num(l + 1).buy_num = Book_num(l).buy_num
            Book_num(l).buy_num = t

            t = Book_num(l + 1).pub_date
            Book_num(l + 1).pub_date = Book_num(l).pub_date
            Book_num(l).pub_date = t

            t = Book_num(l + 1).pub_com
            Book_num(l + 1).pub_com = Book_num(l).pub_com
            Book_num(l).pub_com = t
        End If
    Next l
Next k

Print "按登记号排序后顺序:"
For j = 1 To n
    Print Book_num(j).class_num; "  "; Book_num(j).reg_num; "  "; _
          Book_num(j).Author; "  "; Book_num(j).price; "  "; _
          Book_num(j).buy_num; "  "; Book_num(j).loan_num; "  "; _
          Book_num(j).pub_date; "  "; Book_num(j).pub_com
Next j
End Sub

该过程用冒泡法对文件中的记录进行排序,然后输出。

(4)编写如下窗体单击事件过程:
Private Sub Form_Click()
    Dim h As Integer
    an = InputBox("是第一次运行程序吗?(Y/N)")
    If UCase(an) <> "Y" Then
        Open "d:\num.txt" For Input As #1
        Input #1, n
        Close #1
    End If

    IOrO = InputBox("输入或输出? (I/O)")
    If UCase(IOrO) = "I" Then
        h = InputBox("需要输入多少种图书")
        h = Val(h)
        B_Input h
    Else
        B_output
    End If
End Sub

在该过程中,首先询问是不是第一次运行程序,如果不是,则打开存放图书种类数的文件,读人种类数,并把它赋予全局变量n。接着询问是输人还是输出。如果是输入,则调用输人过程,否则调用输出过程。

程序运行后,单击窗体,在输人对话框中输入“Y”(第一次运行程序),在接下来的输 人对话框中输人“I”(输入),然后即可根据提示输人数据。假定输人如下表1所列的数据。

分类号  登记号   作者    单价  购进数  借出数  出版日期      出版社
3001    2006    王大明   56     40     12    2000年5月    海天出版社
3008    2003    张得功   45     60     21    2000年3月    华联出版社
3009    2004    李得胜   26     80     35    1999年12月   环宇出版社
3005    2012    杨国春   48     60     14     2000年6月   CPW出版公司
3013    2015    陈雷     24     40     16     2000年2月   家电出版社

程序的运行情况如下图所示。


visual basic 程序设计教程第四版答案 刘炳文 编著

来源:visual basic程序设计教程第四版答案(刘炳文)

本文链接:http://www.wb98.com/vb1/post/vb_14.12.html

本站文章搜索:

<< 上一篇下一篇 >>

搜索

Tags列表

扫我手机登录

赞助商链接