机房收费系统 —— 数据类型与夺命“91”

【登录窗体】

问题一:实时错误“91”:

问题原因:数据库中设置数据类型是varchar(10),即字符串长度最大为10,而我在敲代码是未限制输入字符串长度,所以报错!

解决方案:代码限制输入字符长度!(不限制字符串长度,此问题在其他窗体也会出现!)

【代码】:

Private Sub txtpassword_KeyPress(KeyAscii As Integer)
    txtpassword.MaxLength = 18  '限制长度为18
    
    Select Case KeyAscii
        Case 8  '退格
        Case Asc("A") To Asc("Z")  '可输入大写英文字母:A-Z
        Case Asc("0") To Asc("9")   '可输入数字:0-9
        Case Asc("a") To Asc("z")   '可输入小写英文字母:A-Z
        Case Else
        KeyAscii = 0
    End Select
End Sub

Private Sub txtusername_KeyPress(KeyAscii As Integer)   '限制用户名只能输入数字和退格键
    txtusername.MaxLength = 10  '限制长度为10

    Select Case KeyAscii
        Case 8 '退格
        Case Asc("0") To Asc("9")
        Case Else
        KeyAscii = 0
    End Select

End Sub

你认为这样就解决问题了吗?!NoNONo,没有你想象中那么简单,如果用户名(对应数据库中userID)使用的是char或者varchar型的数据类型,那么在后边组合查询是需要用到比较userID大小的问题时会出现新的问题,原因是char或者varchar类型的数据不可比较大小,所以要考虑userID应该是否适合使用varchar型的数据类型!答案是否定的,我们需要比较其大小,所以我们需要使用int(整数型)型的数据类型,当然密码是不需要比较大小的,使用varchar正好。OK,那我们把数据类型改为int型。

看,改完int型之后,“夺命91”又出现,天哪,“夺命91”确实厉害呀!

貌似还是这个问题,那是为啥呢?已经设置了最大输入字符为10位,怎么还是溢出呢?那就得具体了解一下 int 数据类型啦!

(1)int为整数型,用于定义整数类型的数据 。

(2)一个正常大小整数。有符号的范围是-2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字),无符号的范围是0到4294967295。一位大小为 4 个字节。

有符号& 无符号?

整型有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。

无符号整型和有符号整型的区别就是无符号类型可以存放的正数范围比有符号整型中的范围大一倍,因为有符号类型将最高位储存符号,而无符号类型全都储存数字。

扩展资料

无符号数只表示大小,有符号数最高位(二进制情况下最高位表示符号位),在同一操作系统下,有符号数和无符号数的最大数值在大小上的关系是2*x+1(x表示有符号数的最大值,2*x+1表示无符号数最大值)。二者表示的数据范围大小是相同的,但是范围不同。

 

OK,想必原因已经知道啦,是因为int型的数据是默认为有符号整数的,是有数值范围的,输入的数字如果超过了(-2,147,483,648)到 (2,147,483,647)也会溢出。

那么好,考虑到用户名不适合设置char或者varchar型的,并且设置int型的不能超出范围,那么就设置允许输入的数据小于10位数(因为等于或者大于10位都有可能输入的数据超出范围!)

 

更多知识研究:

  • 首先明确的是,char的长度是不可变的,而varchar的长度是可变的.

  • 定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar立马就把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。

  • char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

  • char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

另外,其他的数据类型:

1、float为单精度浮点型,能准确到小数点后六位 。

2、double为双精度浮点型,能准确到小数点都十二位 。

3、char为字符型,用于定义字符类型的数据。

 

更多问题稍后继续更新与解决!敬请期待 >_<

 

机房收费管理系统 问题描述 结合我校计算机机房的运作模式,设计一种适合的收费管理系统,能够实现相关的人员检索,计时收费,管理汇总等功能模块。 开发环境 采用C或C++实现,VC++6.0 基本要求 主要功能模块: (1) 登录模块 (2) 上机管理模块 说明:上机登记时,余额不足3元或卡处于挂失状态,则拒绝登记。 每位同学的一次上机形成一条记录,每30秒遍历一次上机记录表,对表中所有正上机字段为TRUE的记录的上机用时增加30秒,同时减少上机卡表中的余额。 (3) 上机卡管理模块 (4) 充值挂失模块 (5) 查找统计模块:统计某天上机的总时数、每次上机的平均时数和机房的收入;某学生上机的次数、上机总时数、每次上机平均时间;挂失和查询余额。 参考的数据结构: 上机卡(卡号,姓名,专业班级,余额,状态),状态有:正常和挂失。 上机记录(卡号,上机日期,开始时间,上机用时,正上机,管理号代码) 上机记录表永久保存,用于事后查询和统计。 设计要求 1) 界面友好,输入信息符合逻辑:如上机时间设定在合理的时间范围。 2) 能从实践生活出发,设计合理的功能模块 3) 各类信息的数据结构明晰 4) 可根据自身生活体验添加相关功能模块。 拓展功能要求 鼓励采用Turbo C/C++、MFC等开发工具,实现彩色或图形操作界面。鼓励引入小型数据作为处理数据的来源,拓展知识面。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ariel_欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值