【系统名称】源代码走查报告模板
评审号:日期:项目名称来自项目编号项目经理
评审日期
评审主持
评审地点
记录人
评审部门(员)
评审分类
评审内容
评审结果
评审建议
总体
代码编制是否遵照编码规范
所有的代码是否风格保持一致
缺陷修改是否完全完成
注释
所有的注释是清楚和正确
是否按注释类型格式编写注释
代码注释量是否达到了规定值
源代码质量
所有命名是否依照规则
所有代码是否易懂
代码是否易于维护
其他
评审问题记录
评审结论
评审员签字
项目经理确认意见
部门确认意见
系统源代码安全审计报告(模板)
XX系统源代码安全审计报告XX部门20XX年X月目录1.源代码审计概述 (1)1.1.审计对象 (1)1.2.审计目的 (1)1.3.审计流程 (1)1.4.审计组织 (1)2.源代码审计范围 (1)3.源代码审计详情 (1)3.1.安全风险定义 (1)3.2.安全缺陷统计 (2)3.3.安全缺陷示例 (2)3.3.1.隐私泄露 (3)3.3.2.跨站脚本漏洞 (3)3.3.3.SQL注入缺陷 (3)3.3.4.XXX缺陷 (3)4.总结 (3)1.源代码审计概述1.1.审计对象描述本文档适用范围、场景等相关的背景情况,便于读者充分了解审计对象信息。
1.2.审计目的描述开展源代码审计工作的目的、依据、要求以及预期效果。
1.3.审计流程描述源代码代码审计工作的流程,包括但不限于测试环境的搭建、测试方法或模式(例如工具测试、人工检查)、审计报告及整改方案的撰写,并明确各项工作的相关职责方。
1.4.审计组织描述开展代码审计工作组织情况,包括但不限于安全保密以及审计工作准备情况。
2.源代码审计范围描述被审计系统情况,包括但不限于源代码行数、源代码文件大小、设计语言及组件、开发软件环境、系统架构、编译器、系统类库、系统服务器及数据库等信息。
3.源代码审计详情3.1.安全风险定义源代码安全审计是运用工具和人工分析对源代码进行检查,检查系统软件存在的安全缺陷。
根据安全缺陷可能存在的安全风险对检查中发现的各个缺陷给出了相对应的风险评价,并对风险评价中涉及到的各个等级给予一定说明和界定,如风险级别高、中、低并依次描述各级别对应威胁,示例如下:3.2.安全缺陷统计描述本次源代码安全审计的代码行数、文件数量、已发现的安全问题总数;分类简述存在的安全问题及数量并与安全风险级别进行对应;已图表形式对发现的安全缺陷进行统计,如下所示:3.3.安全缺陷示例逐条描述本次源代码审计工作发现的相关漏洞信息及相关风险,并以图例形式清晰表明问题代码信息及位置。
代码走查工具—PCLint
PC-Lint在各种环境中的集成
PC-Lint在各种环境中的集成方法原理都是一 样的,只要掌握前面讲的基本用法,知道如 何用命令行来检测单个文件,一个目录下的 所有文件,许多目录下的所有文件等,然后 再结合各种环境的具体设置,就可以很方便 地将PC-Lint集成到各种应用环境中了。
代码走查工具—PCLint
PC-Lint在各种环境中的集成
代码走查工具—PCLint
PC-Lint在各种环境中的集成
再在Initial Directory一栏里填上$() 最后再将use output window打上勾就完成了将
PC-Lint集成到VC环境中
代码走查工具—PCLint
PC-Lint在各种环境中的集成
代码走查工具—PCLint
PC-Lint基本使用方法
一般来说,PC-Lint经常会有一些误报,为 了消除这些误报,不得不将程序风格改动 来规避,但有时候怎么改写程序都有告警, 比如说你定义了两个宏,前面那个宏里有 一半大括号{, 后面那个宏里有另一半大括 号}, 这时候一定会有告警,你不得不使用一 些PC-Lint选项来屏蔽这些告警。
当检查所有文件时不需要使用-u选项
代码走查工具—PCLint
PC-Lint基本使用方法
PC-Lint配置文件介绍
PC-Lint使用那个配置文件是由命令行参数决定的,一般地 都使用std.lnt文件,std.lnt文件中可以包含各种配置选项, 还可以包含其他的配置文件,有点类似C的头文件,里面可 以include许多其他头文件,不过PC-Lint配置文件包含其他 配置文件不需要写include,直接写文件名就可以了。
代码走查工具—PCLint
PC-Lint常用选项
HLSD-CIM-代码走查报告
来说,系统代码基本符合编码规范。
NA 不适用 状态 P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P P 说明
编程-输入 、输出错误
编程-条件 判定 编程-传送 编程-处理 遗漏冗长
1 1 1 2 1 2 3 4 5
条件、分支等在逻辑上是否矛盾 双方的位数、属性是否合适 必要的逻辑运算(演算、判定、变换 等),是否有遗漏的步骤 是否有多余的逻辑运算、步骤 更新的对象是否被删除了 收集用的类是否被删除了 禁止使用或者使用限制的命令是否被 使用 从实行速度看,命令、逻辑运算是否 恰当 调用API等组合的方法时,参数、返 回值是否合适 是否遵循了编码规范 是否遵循了结构设计 是否遵循了SQL编码指针 程序内所有路径的确认 分支是否有遗漏 构成程序模块的界面的确认 对文件/数据库表的确认 对输入数据的检查、演算处理的确认 根据输入数据对输出数据的确认(模 拟) 反应的确认(只是画面系程序,按纽 按下时,5秒钟以上没有反应要提 类的继承、保护是否存在问题 风格是否统一 是否成为了线形、单纯、同型、对象 风格 例外处理是否有遗漏
注:每种评审检查表不同,参考OSSP检查表,根据具体情况可以添加或修改检查项
代码检查表
项目名称 检查日期 检查人员 检查项状态标记 类别 No. 1 2 编程-数据 调用 3 4 5 1 2 编程-数据 定义 3 4 5 6 1 2 编程-计算 错误 3 4 5 6 7 1 2 编程-比较 错误 3 4 5 1 2 编程-控制 流程 3 4 5 1 编程-界面 2 3 4 1 2 3 4 5 CIM客服信息管理系统 2011-6-17 康瑞伟、刘树强、杨洲 P 合格 O 不合格 TBD 待完成 主要检查项 下标值是否在限定范围内 参照用的指针、变量等是否被分配了 使用空间 从多个方法看,被参照的数据结构是 否有矛盾 有没有超出字符串范围的可能性 下标的操作中是否有遗漏 变量、对象是否被初期化 变量没有被初始化时,是否有缺省值 引用方法中,没有被指定参数时,是 否有缺省值 数组、字符串等的定义是否恰当 各种变量的上限值和下限值是否恰当 属性和精度是否合适 没有数字的变量是否计算了 不同类型的变量计算时,是否遵循了 变换规则 计算的结果是否超过了使用变量的范 围 最终结果的位数虽然没有超出,但在 计算过程中,是否有超出的可能性 是否有被0除的可能性 四则运算的优先顺序是否有误 是否有丢失了的位数 变量之间的比较是否有矛盾 不同类型之间进行比较时,是否遵循 了变换规则 类似于[更大]、[以上]的错误是否被 实装 是否有逻辑上的书写错误。例如:I 比X或Y大,I>X|Y的错误 是否掌握了AND、OR、NOT的优先 顺序 是否有遗漏分支的情况 循环的终止条件是否合适 循环的终止条件有多个时,其优先顺 序是否合适 进入循环前,各变量的初始值是否合 适 方法的使用是否没有终止 保存方法的返回值的变量类型是否合 适 调用方法的参数是否被更新,如果更 新了,是否合适 内部变量是否被当作外部方法调用 被参照的变量在所有方法中的定义和 属性是否一致 文件被明确定义时,其属性是否合适 打开文件的属性是否正确 所有的文件在被使用前,是否被打开 文件关闭状态被正确处理了否 I/O错误状态是否被正确纠正
代码走查规范
维远泰克代码走查规范文件编号:起草部门:测试组审核人:签发人:批准日期:版本标识:目录1引言...................................................................................................................................... 错误!未定义书签。
1.1目的 .................................................................................................................................... 错误!未定义书签。
1.2说明 .................................................................................................................................... 错误!未定义书签。
2代码走查 (4)2.1检查点 (4)2.2走查流程 (4)2.2.1走查流程图 ......................................................................................................... 错误!未定义书签。
2.2.2流程概述............................................................................................................. 错误!未定义书签。
2.2.3具体流程............................................................................................................. 错误!未定义书签。
代码检查【范本模板】
代码检查摘要:代码检查是白盒测试的一种静态测试方法,是众多软件测试方法中发现软件缺陷最有效的方法之一。
本文结合国内外学者在相关领域的研究情况,介绍代码检查相关的基本概念、过程和分析方法。
关键字:白盒测试,代码检查,静态分析,检查规则一、引言按照测试时源代码是否可见,软件测试可以分为白盒测试和黑盒测试两类。
白盒测试(结构测试),即逻辑驱动的测试,是在了解程序内部结构的基础上,对程序的逻辑结构进行检查,从中获取测试数据.白盒测试关注的是测试用例执行的程度或覆盖程序逻辑结构的程度。
白盒测试一般只应用于软件开发阶段。
白盒测试,又可按照是否需要运行程序,进一步细分为了静态测试和动态测试两种。
通常情况下是按照先静态后动态测试顺序来实施。
其中,静态测试包括代码检查、静态结构分析、代码质量度量等测试内容。
静态测试既可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码检查是一种对程序代码进行静态检查。
传统的代码检查是通过人工阅读代码的方式,检查软件设计的正确性;用人脑模拟程序在计算机中的运行,仔细推敲、校验和核实程序每一步的执行结果,进而判断其执行逻辑、控制模型、算法和使用参数与数据的正确性.在实践中,代码检查比动态测试更有效率,能找到更多的缺陷,通常能发现30%~70%的逻辑设计和编码缺陷.代码检查非常耗费时间,而且需要专业知识和经验的积累.代码检查定位在编译之后和动态测试之前进行,在检查前,应准备好需求描述文档、程序设计文档、程序的源代码清单、代码编码标准和代码缺陷检查表等.代码检查可以发现的软件问题包括:声明或引用错误、函数/方法参数错误、语句不可达错误、数组越界错误、控制流错误、界面错误和输入/输出错误等。
1、代码检查代码检查包括桌面检查、代码走查和代码审查等方式,主要检查代码和设计的一致性,代码对标准地遵循、可读性,代码逻辑表达的正确性,代码结构的合理性等方面;发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型检查、程序逻辑检查、程序语法检查和程序结构检查等内容。
软件项目代码走查管理规范
代码走查管理规范修订记录修订类型包含:新增、修改、删除。
目录1 目的 (1)2 适用范围 (1)3 职责划分 (1)4 代码走查分类 (2)5 代码走查流程 (2)5.1 准备阶段 (2)5.2 执行阶段 (2)5.3 修复阶段 (3)5.4 反馈阶段 (4)6 代码走查要求 (4)7 相关文件 (5)1目的明确项目中代码走查的流程和要求,提升代码走查质量,为代码走查工作提供指导依据。
2适用范围技术与研发中心。
3职责划分在代码走查工作中,各角色职责如下:4代码走查分类5代码走查流程5.1 准备阶段(1)技术经理依据代码走查活动要求,规划代码走查执行时间,确定走查方式。
(2)开发人员在代码编写完成后,应先对编写内容进行自查,再将代码提交到开发库中进行保存。
(3)技术经理确定走查代码范围,发送代码走查活动通知。
5.2 执行阶段(1)工具静态检查如果使用工具进行静态代码走查,则按照工具的使用方法,执行静态检查活动,代码走查执行者将工具走查结果记录到《代码质量评价表》中。
使用工具的静态检查是可以实时执行的活动,因此鼓励开发人员在编译个人部分的代码时,尽可能多频次、全覆盖的执行工具静态检查,提升个人编写代码内容的准确性、规范性,最大程度确保合并到主流上的分支代码的优质性。
除此之外,为了增强执行效果,还可以待全部分支代码合并到主流后,以全量代码为对象进行整体性的工具静态检查。
(2)人工代码评审人工代码评审是一种正式的评审活动,通常采用集中会议的方式,以功能模块为单位,通过讨论的方式,对程序代码进行审查,以达到提升代码质量的目的。
如果采用人工代码评审方式,则由技术经理牵头组织审查活动,邀请团队开发人员及其他必要成员组成一个审查小组,进行代码评审会议。
会议中,评审小组成员依据设计说明书、控制流程图、程序文本及有关要求、规范等内容,充分阅读被评审程序代码,并由该程序编写者介绍其代码实现过程、讲解程序逻辑,在此过程中参会人员提出问题、展开讨论、发现错误。
代码走查工具(1)
PC-Lint在各种环境中的集成
3)在Run栏中输入“d:\lint\lint-nt -u -ic:\lint std.lnt env-si %f”其中d:\lint是你 PC-LINT的安装目录, %f是表示当前打开的文件。如果要Lint多个文件则需要 使用配置文件,在配置文件里包含多个文件,将%f改成你自己的配置文件即 可。 4)在Output栏中选择“Iconic Window”、“Capture Output”。 5)在Control栏中选择“Save Files First”、将缺省打了勾选上的“Pause When Done”改成不选择。 6)在Source Links in Output栏中选择“Parse Links in Output”、“File,then Line”。 7)在Pattern栏中将缺省设置改成^\([^ ]*\) \([0-9]+\)就大功告成了。 8)如果需要Lint当前打开文件的同一目录下所有文件,可以将%f改成 %d\*.cpp 如下图:
PC-Lint本身提供了对各种编译器及对应库头文件的 告警屏蔽文件,如co-msc60.lnt是对vc6的,lib-w32.lnt 是对Win32库头文件告警的屏蔽配置文件
11
PC-Lint常用选项
-i选项
这个选项主要是用来设置include路径的 如:-iD:\VC6\VC98\Include
每个配置文件里都可以包含配置选项,这些配置选项也可以 放在命令行中,一般为使用方便,命令行中不要放很多选项, 尽量都将选项放到配置文件中
8
PC-Lint基本使用方法
以下是VC下的配置文件样例
// Microtec 32-bit, -si4 -sp4, lib-w32.lnt // Standard lint options
软件工程-代码走查流程规定
代码走查流程规定xxxx有限公司2011年4月文件修改控制页目录1引言 (3)1.1编写目的 (3)1.2背景 (3)1.3参考资料 (3)1.4相关角色和职能 (3)1.5约束 (3)2代码走查流程 (4)3检查规则要求 (5)4代码走查问题记录表归档整理 (6)5记录模板 (6)1引言1.1编写目的规范开发部代码走查的工作流程,提供代码走查实施过程指导。
1.2背景小组代码走查的过程中,技术负责人对项目进行检查实施过程中,没有统一的流程。
代码走查的文档没有保存,结果也没有跟进,代码走查不够严格等造成开发人员对代码走查也不够重视。
由于上述原因,需要一个工作流程来引导工作1.3参考资料无。
1.4相关角色和职能1.5约束代码走查人5天内对代码走查结果进行跟踪。
2代码走查流程1、检查人从配置管理员获取版本号和源码2、检查人根据代码规范和要求,进行功能性检查,输出<<YYYYMMDDXX部门XX软件代码走查问题记录表>>,通过邮件发给被检查人3、被检查人在检查后5个工作日内完成问题修改,同时告知检查人。
4、检查人根据规定的时间核实代码修改情况,并在<<YYYYMMDDXX部门XX 软件代码走查问题记录表>>做好记录5、检查人将本次检查报告的跟踪结果发送给部门经理,部门经理根据情况进行通报。
3检查规则要求1、各项内容填写规则2、内容填写样例:见《代码走查问题记录表.xlsx》模板4代码走查问题记录表归档整理1、每次的代码走查结果存放:1)项目类统一存放在项目所属工作库的“110 项目管理->030 测试报告”目录下;2)例行产品检查统一存放在各部门工作库的“000000 日常工作管理->101代码走查”目录下;2、代码走查汇总统计1)每月10号之前综合管理组配置管理员负责对上月《代码走查问题记录表》进行汇总。
2)每月15号之前研发一部各平台专家对汇总的《代码走查问题记录表》进行分析统计,提出改进措施。
操作系统文件系统实验报告后附源代码
目录1 课程设计简介 (1)1.1 课程设计的目的 (1)1.2 课程设计内容 (1)2 数据结构的设计 (2)2.1 预定义 (2)2.2 结构体 (2)2.3 全局变量和函数 (2)3 功能模块(或算法)描述 (5)3.1 模块划分 (4)3.2 模块流程图 (6)4 程序运行结果 (8)5心得体会 (9)参考文献 (10)附源代码 (11)1 课程设计简介1.1 课程设计的目的课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。
通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
1.2 课程设计内容课程设计内容设计一个简单的多用户文件系统。
即①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。
另外,为打开文件设置了运行文件目录(AFD)。
3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。
4)因系统小,文件目录的检索使用了简单的线性搜索。
5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。
6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录,如图5.1所示。
2 数据结构的设计2.1 预定义#define BLOCKSIZ 512 //磁盘块的大小#define DA TABLKNUM 512 //数据块的数目#define BLKGRUPNUM 50 //数据块组包含多少数据块#define P_N_BLOCKS 15 //inode节点中指向数据块的指针个数#define GROUPNUM DATABLKNUM/BLKGRUPNUM+1 //数据块组组数#define DINODESIZ 512 //磁盘i结点区的大小(空间32×512)#define DINODENUM 32 //磁盘i结点区的块数#define SYSOPENFILE 40#define DIRNUM 32 //一个目录下的最多目录和文件的总和数#define DIRSIZ 14 //文件、目录名的长度(字节)#define UPWDSIZ 15 //密码的长度#define UNAMSIZ 15 //用户名的长度#define PWDSIZ sizeof(struct pwd) //密码结构的长度#define PWDNUM BLOCKSIZ/PWDSIZ //密码数据空间的大小(pwd为单位)#define NOFILE 20 //一个用户最多可以打开的文件数目#define DINODESTART 4*BLOCKSIZ//i结点区的开始地址-inodes table ,1引导2超块3block bitmap 4inode bitmap#define DA TASTART (2+DINODENUM)*BLOCKSIZ //数据区的开始地址#define DATASTARTNO 36 //数据区开始指针#define DIMODE_EMPTY 00000/*可以用的空间*/#define DIMODE_FILE 00001#define DIMODE_DIR 00002#define DIMODE_PASSWD 00004#define GRUP_0 0 //管理员组#define GRUP_1 1#define GRUP_2 2#define GRUP_4 42.2 结构体//磁盘i结点结构,struct inode{// char di_name[DIRSIZ];unsigned __int16 di_ino; /*磁盘i节点标识*/unsigned __int16 di_number; /*关联文件数,当为0时表示删除文件*/unsigned __int16 di_mode; /*存取权限*/unsigned __int16 di_uid; /*磁盘i节点用户id*/unsigned __int16 di_gid; /*磁盘i节点权限组id*/ //1管理员组2用户组unsigned __int32 di_size; /*文件大小*/unsigned __int32 di_ctime; /* Creation time */unsigned __int32 di_mtime; /* Modification time */unsigned __int16 di_block[P_N_BLOCKS]; /* 一组block 指针*/};// 目录项结构struct direct{char d_name[DIRSIZ]; /*目录名(14字节)*/__int16 d_ino; /*目录号*/};//超级快结构struct super_block{unsigned __int16 s_inodes_count; /* inodes 计数*/unsigned __int16 s_blocks_count; /* blocks 计数*/unsigned __int16 s_r_blocks_count; /* 保留的blocks 计数*/unsigned __int16 s_free_blocks_count; // 空闲的blocks 计数unsigned __int16 s_free_inodes_count; /* 空闲的inodes 计数*/unsigned __int16 s_free_blocks_group[GROUPNUM];//新增一个数组来记录每个数据块组中的空闲数据块计数unsigned __int16 s_first_data_block; /* 第一个数据block */unsigned __int16 s_log_block_size; /* block 的大小*/unsigned __int16 s_blocks_per_group; /* 每block group 的block 数量*/unsigned __int16 s_inodes_per_group; /* 每block group 的inode 数量*/};// 用户密码struct pwd{unsigned __int8 p_uid;unsigned __int8 p_gid;char username[UNAMSIZ];/*用户名新加的*/char password[UPWDSIZ];};// 目录结构struct dir{struct direct direct[DIRNUM];__int16 size;};2.3 全局变量和函数// 全局变量unsigned __int8 di_bitmap[DINODENUM]; // 硬盘inode节点位图1表示已使用0表示未使用unsigned __int8 bk_bitmap[DA TABLKNUM]; // 数据块block位图struct super_block filsys; //超级块struct pwd pwd[PWDNUM];FILE *fd; //文件指针struct inode *cur_inode; //i节点当前目录指针struct inode *inodetemp; //i节点指针const char fsystemname[20]="Linux.EXT2"; //模拟硬盘的文件名struct direct dir_buf[BLOCKSIZ / sizeof(struct direct)]; //目录数组char cmdhead[20];//cmd 的头表示所在哪个文件夹、int i_lock=0;//inode位图锁可能会多线程int b_lock=0;//block位图锁struct pwd *cur_user;/* 全局函数*/extern int Format();//格式化磁盘extern int Install();//启动,安装文件系统struct inode * read_inode(int);//install里面读取文件dinodestruct direct * read_dir_data(int);//读取存储文件夹的物理块extern void showdir();//命令dirint Enterdir(char[]);//进入某个文件夹命令-- cd 文件名int Fd_dirfile(char[]);//查找当前目录里的文件没找到返回-1 找到返回inode号int Iscmd(char[]);//判断是否两个字符串的命令void two_cmd(char[],char[]);//两个字符串的命令int creat(char[]);//创建文件void changeinode();//交换指针char * ReadFile(char[]);//读取文件int mkdir(char[]);//创建文件夹void showbitmap();//显示位图int deletefd(char[]);//删除文件int editfile(char[]);//编辑文件int rename(char[]);//重命名void showhelp();//命令帮助void login();void logout();int access();//权限判断/*磁盘i节点的分配与释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件说明信息的磁盘i节点,当从文件系统中删除某个文件时,应首先删除它的磁盘i节点项。
校园卡掌上管理系统编码与测试报告-第十组
校园卡掌上管理系统----编码与测试报告制作人:曹静崔文傅小江李国明1、编码1.1部分代码1.1.1数据库实施阶段任务(1)建立数据库(校园卡管理系统)create database campuscard;⑵建立数据表1) 用户信息表的建立Create table tb_admin(Id int(10) not null primary key,username varchar(32) not null,password varchar(32) not null,type smallint(1) not null,createdate date not null);2) 校园卡信息表的建立create table tb_card(Id int(10) not null primary key,Stuid varchar(10) not null,cardid varchar(13) not null,password varchar(32) not null,balance double(5) not null,status int(1) not null,createdate date not null);3) 消费信息表的建立Create table tb_consumption(Id int(10) not null primary key,cardid varchar(13) not null,money doublae(5) not null,address varchar(32) not null,createdate date not null);4) 转账信息表的建立Create table tb_recharge(Id int(10) not null primary key,cardid varchar(13) not null,money doublae(5) not null,createdate date not null);5) 学生信息表的建立Create table tb_student(Id int(10) not null primary key,Stuid varchar(10)not null,Name varchar(32) not null,cardid varchar(18) not null,bankcard varchar(19) not null,createdate date not null);1.1.2实体类CardUsers类源代码package userGUI;public class CardUsers {public String UserID;//用户编号public String UserName;//用户名;public String UserSex;public String UserPwd;public String UserType;public CardUsers(String UserID) {erID = UserID;}public CardUsers(String UserID, String UserName, String UserSex, String UserPwd, String UserType)throws PwdShortException {if(UserPwd.length()<6)throw (new PwdShortException());else{erID = UserID;erName = UserName;erSex = UserSex;erPwd = UserPwd;erType = UserType;}}public String getUserID() {return UserID;}public void setUserID(String UserID) {erID = UserID;}public String getUserName() {return UserName;}public void setUserName(String UserName) {erName = UserName;}public String getUserPwd() {return UserPwd;}public void setUserPwd(String UserPwd) throws PwdShortException { if(UserPwd.length()<6)throw(new PwdShortException());elseerPwd = UserPwd;}public String getUserSdx() {return UserSex;}public void setUserSdx(String UserSdx) {erSex = UserSex;}public String getUserType() {return UserType;}public void setUserType(String UserType) {erType = UserType;}@Overridepublic String toString() {return "用户编号=" + UserID + ", 姓名=" + UserName + ", 性别=" + UserSex + ", 密码=" + UserPwd + ", 身份=" + UserType ;}}CardUseRecords类源代码package operationGUI;public class CardUseRecords {private long CardNo;private String UseItems;private double money;private String UseTime;public CardUseRecords(long cardNo, String item, double money, String time) {this.CardNo = cardNo;eItems = item;this.money = money;eTime = time;}public long getCardNo() {return CardNo;}public String getUseItems() {return UseItems;}public String getUseTime() {return UseTime;}public double getMoney() {return money;}@Overridepublic String toString() {return "卡号=" + CardNo + ", 名目=" + UseItems + ", 费用=" + money + ", 时间=" + UseTime;}}SchoolCard类源代码package cardGUI;import javax.swing.JOptionPane;public class SchoolCard {public int cardNo;//卡号static int NextCardNo=111003200;//起始卡号private String UserID;//卡所属的用户编号private String password;private double balance;private boolean isUsing;public SchoolCard() {this.cardNo=NextCardNo++;}public SchoolCard(String UserID, String password) {this();erID = UserID;this.password = password;this.balance=0;this.isUsing=true;}public static void setNextCardNo(int newStartNo) {//设置起始卡号SchoolCard.NextCardNo = newStartNo;}public int getCardNo() {return cardNo;}public String getUserID() {//差卡的用户号return UserID;}public void setUserID(String uid) {//设置卡的用户号erID = uid;}public double getBalance() {//查询余额return balance;}public String getPassword() {return password;}public void setPassword(String upwd) throws UseStateException{if(check())this.password = upwd;elsethrow (new UseStateException());}public void deposit(double money) throws UseStateException{if(check())this.balance=balance+money;elsethrow (new UseStateException());}public void consume(double money) throws UseStateException{if(check()){if(this.balance>=money)this.balance=balance-money;elseJOptionPane.showMessageDialog(null,"卡上余额不够消费,请先充值!");}elsethrow (new UseStateException());}public boolean getCardState() {return isUsing;}public void setState(boolean state) {this.isUsing = state;}public boolean check(){if(this.isUsing)return true;elsereturn false;}@Overridepublic String toString() {return "卡号=" + cardNo + ", 用户号=" + UserID + ", 密码=" + password + ", 余额=" + balance + ", 是否可用=" + isUsing ;}1.1.3实现数据库连接package operationGUI;import java.sql.*;public class DBAccess {private Connection conn=null;private Statement stmt=null;public ResultSet rs=null;private PreparedStatement prestmt=null;private String driver="sun.jdbc.odbc.JdbcOdbcDriver";private String url="jdbc:odbc:CardConn";//自定义数据源名private String user="jane";private String pwd="123456";public String notes="数据库操作提示";//实例方法:实现数据库连接public void dbconn(){try{Class.forName(driver);conn=DriverManager.getConnection(url, user, pwd); stmt=conn.createStatement();}catch (ClassNotFoundException ec){System.out.println(ec);}catch (SQLException es){System.out.println(es);}catch (Exception ex){System.out.println(ex);}}//实现数据库查询并返回查询记录public ResultSet dbSelect(String selString){try{rs=stmt.executeQuery(selString);}catch (SQLException es){System.out.println(es);notes="数据库查询出现异常";}return rs;}//数据库更新public String dbUpdate(String updateString){try{prestmt=conn.prepareStatement(updateString); prestmt.executeUpdate();notes="记录更新成功";}catch (SQLException es){System.out.println(es);notes="数据库更新出现异常";}return notes;}//插入数据public String dbinsert(String insertString){try{prestmt=conn.prepareStatement(insertString); prestmt.executeUpdate();notes="插入记录成功";}catch (SQLException es){System.out.println(es);notes="数据库插入出现异常";}return notes;}//删除public String dbDelete(String delString){try{prestmt=conn.prepareStatement(delString);prestmt.executeUpdate();notes="删除成功";}catch (SQLException es){System.out.println(es);notes="数据库删除现异常";}return notes;}//关闭数据库public void dbclose(){if(conn!=null){try{rs.close();stmt.close();conn.close();}catch (Exception e){}}}}1.2 系统主界面的截图。
