<TABLE> <S> <C>
<PAGE>
<ARTICLE> 5
<LEGEND>
THIS SCHEDULE CONTAINS SUMMARY FINANCIAL INFORMATION EXTRACTED FROM THE
CONSOLIDATED BALANCE SHEET AT JULY 31, 2000 AND THE CONSOLIDATED STATEMENT OF
INCOME FOR THE YEAR ENDED JULY 31, 2000 AND IS QUALIFIED IN ITS ENTIRETY BY
REFERENCE TO SUCH FINANCIAL STATEMENTS.
</LEGEND>
<MULTIPLIER> 1
<S> <C>
<PERIOD-TYPE> YEAR
<FISCAL-YEAR-END> JUL-31-2000
<PERIOD-END> JUL-31-2000
<CASH> 2169000
<SECURITIES> 0
<RECEIVABLES> 8970000
<ALLOWANCES> 66000
<INVENTORY> 6992000
<CURRENT-ASSETS> 21701000
<PP&E> 2574000
<DEPRECIATION> 1673000
<TOTAL-ASSETS> 24955000
<CURRENT-LIABILITIES> 7570000
<BONDS> 125000
0
0
<COMMON> 460000
<OTHER-SE> 16703000
<TOTAL-LIABILITY-AND-EQUITY> 24955000
<SALES> 35525000
<TOTAL-REVENUES> 40988000
<CGS> 21885000
<TOTAL-COSTS> 24747000
<OTHER-EXPENSES> 11100000
<LOSS-PROVISION> 0
<INTEREST-EXPENSE> 225000
<INCOME-PRETAX> 4916000
<INCOME-TAX> 2085000
<INCOME-CONTINUING> 2831000
<DISCONTINUED> (147000)
<EXTRAORDINARY> 0
<CHANGES> 0
<NET-INCOME> 2684000
<EPS-BASIC> 0.61
<EPS-DILUTED> 0.60
</TABLE>