回 帖 发 新 帖 刷新版面

主题:自定义数据类型

题目要求:
 ①自定义一个职工数据类型,包含职工号、姓名、工资三项内容。在通用声明段声明一个职工类型的数组,可存放5个职工的数据。
 ②窗体中设计3个标签、3个文本框、2个命令按钮和1个图形框,文本框分别输入职工号、姓名、工;当单击“新增”按钮时,将文本框输入的内容添加到数组的当前元素中;当单击“排序”按钮时,将输入的内容按工资递减的顺序排序,并在图形框显示。


我的代码如下:
Private Type WorType       '自定义职工类型
     No As Long            '职工号
     Name As String * 5    '姓名
     Salary As Long        '工资
End Type
Dim n%
Dim Worker(4)  As WorType  '存放当前已输入的学生人数,多个事件过程共享

Private Sub Command1_Click()       '将文本框的内容增加到数组的当前位置
  If n >= 5 Then                   '最多可接受5个人数
     MsgBox ("输入人数超过数组声明的个数")
  Else
    With Worker(n)
    .No = Text1
    .Name = Text2
    .Salary = Text3
    End With
    Text1 = "": Text2 = "": Text3 = "" '清空三个文本框中的值
    n = n + 1                         '每增加一个职工信息n就加1
    End If
End Sub

Private Sub Command2_Click()
  Dim i%, j%, imax%, t As WorType
  For i = 0 To n - 1           '进行n轮比较
      imax = i                 '对第i轮比较时,初始值假定第i个元素最大
      For j = i + 1 To n       '在数组i+1到n个元素中选择最小元素的下标
         If Val(Worker(j).Salary) > Val(Worker(imax).Salary) Then imax = j
      Next j
         t = Worker(i)         'i+1到n个元素中选出的最大元素与第i个元素交换
         Worker(i) = Worker(imax)
         Worker(imax) = t
  Next i
        Cls
         Picture1.Print "职工号    姓名     工资"
         Picture1.Print "--------------------------------------------"
         For i = 0 To n - 1    '输出排序结果
         With Worker(i)
            Picture1.Print .No; Tab(9); .Name; Tab(9); .Salary
         End With
         Next i
         
End Sub
程序提示在If Val(Worker(j).Salary) > Val(Worker(imax).Salary) Then imax = j行有错
请大虾指点!

[fly]感谢各位大侠光临指导[/fly]

回复列表 (共2个回复)

沙发

在Command2_Click过程中加一句:

Dim i%, j%, imax%, t As WorType
n = n - 1          '加这一句
For i = 0 To n - 1

板凳

多年项目开发经验,专业做毕业设计等中小型项目开发,熟悉各种数据库操作(sql server ,access ,mysql等),熟练应用VC, Delphi, VB, ASP, C#等开发语言.若有需要请联系QQ: 383147818 加我请注明: pfan项目

我来回复

您尚未登录,请登录后再回复。点此登录或注册