课 程 设 计
资 料 袋
计算机与通信学院 学院(系、部) 2016-2017 学年
第 1 学期
课程名称 数据结构 指导教师 文志诚
职称 讲师
学生姓名 孙浩 专业班级 软件工程1501班 学号 题 目 成 绩 起止日期 2016 年 12 月 18
日~ 2016年 12 月 23 日
目 录 清 单
序号 1 2 3 4 5 6 材 料 名 称 课程设计任务书 课程设计说明书 源程序(电子文档) 资料数量 1 1 1 备 注 湖南工业大学
课程设计任务书
2016-2017 学年第 1 学期
计算机与通信 学院(系、部) 软件工程 专业 1501 班级
课程名称: 数据结构 设计题目:
完成期限:自 2016 年 12 月 18 日至 2016 年 12 月 26 日共 1 周
一、设计的任务及主要技术参数 内 使用java设计一个能够符合课程设计要求的系统 容 及 二、设计任务 任 务 三、设计工作量 起止日期 进 度 安 排 工作内容 12.18 12.19 12.20-12.22 12.23 需求分析 概要设计 详细设计 调试分析、测试结果 主 要 参 考 资 料 指导教师(签字): 年 月 日
系(教研室)主任(签字): 年 月 日
数据结构程序设计(java语言)课程设计
设计说明书
学生成绩管理系统
起止日期: 2016 年 12 月 18 日 至 2016 年 12 月 23 日
学班学成
生姓名 级 号 绩
孙浩
软件工程1501班
指导教师(签字)
计算机与通信学院
2016年 12 月 23 日
目 录
第1章 需求分析 .............................. 错误!未指定书签。 1.1 简介 ..................................... 错误!未指定书签。 1.2 系统的开发背景 ........................... 错误!未指定书签。 1.3 研究现状 ................................. 错误!未指定书签。 第2章 概要设计 .............................. 错误!未指定书签。 2.1系统开发环境和技术介绍 ................... 错误!未指定书签。 2.2系统需求分析 ............................. 错误!未指定书签。
错误!未指定书签。 错误!未指定书签。 第3章 详细设计 ............................... 错误!未指定书签。 3.1系统开发流程 ............................. 错误!未指定书签。 3.2系统模块设计 ............................. 错误!未指定书签。 3.3 系统结构 ................................. 错误!未指定书签。
3.3.1 系统模块结构图 ....................... 错误!未指定书签。 3.3.2 系统流程图 ........................... 错误!未指定书签。 3.4 数据库设计 ............................... 错误!未指定书签。 3.5 界面设计 ................................. 错误!未指定书签。 第4章 调试分析 ............................... 错误!未指定书签。 4.1程序逻辑调试 ............................. 错误!未指定书签。 4.2系统界面调试 ............................. 错误!未指定书签。
第5章 测试结果 ............................... 错误!未指定书签。 5.1测试环境 ................................. 错误!未指定书签。 5.2测试项目 ................................. 错误!未指定书签。
错误!未指定书签。 错误!未指定书签。 5.3 测试结果 ................................. 错误!未指定书签。 第6章 用户使用说明 ........................... 错误!未指定书签。 结 论 ......................................... 错误!未指定书签。 参考文献 ...................................... 错误!未指定书签。 附录 .......................................... 错误!未指定书签。
1 需求分析
1.1系统的具体任务
该系统的具体任务就是设计一个学生成绩的数据库管理系统,由计算机来代替人工执行一系列诸如增加新学生成绩信息、删除学生成绩信息、学生资料、查询、修改等的处理操作,以方便管理人员的管理信息工作。
本设计以客户为中心,界面要美观大方,操作尽量简单明了,且要有良好的容错性,在用户出现误操作时能及时给出警告并修改。在现有的技术和资金的情况下完全可以设计出这套功能完善的应用软件。
1.2 系统开发目的
建立学生成绩管理系统,采用计算机对学生成绩进行管理,进一步提高办学效益和现代化水平。实现学生成绩信息管理工作流程的系统化、规范化和自动化。
1.3 系统环境需求
编程语言:JAVA
Java + Eclipse + SQL server数据库
开发工具:Eclipse SDK(英文版) SQL 2000(中文版)
运行环境:Windows xp或windows 2000
2概要设计
2.1总体功能需求
系统登录 包括管理员、教师和学生三种类型的登录。 在系统中不存在任何对象时,实现该功能。具体功能为: 1.录入学生信息 (初始化) 1:检测文件系统/数据库中是否存在相关文件/表; 2:若不存在相关文件/表,则要求用户录入学生信息,并序列化或通过JDBC存储到文件/表; 3:若已存在相关文件/表,则反序列化或通过JDBC读取到程序中。 注意:学生纪录不允许重复,判断的关键字为学号 往已有的学生纪录添加新的学生纪录。具体功能为: 2.添加学生记录 1:要求用户从键盘输入一个或多个学生信息; 2:输入完成后序列化或JDBC存储到文件/表。 注意:学生纪录不允许重复,判断的关键字为学号 在已有的学生纪录中删除一个或多个学生纪录。具体3.删除学生记录 功能为: 1:要求用户输入欲删除的学生的学号; 2:删除学生记录; 3:更新到文件/表。 在已有的学生记录中修改某学生的相关信息。具体功4.修改学生记录 能为: 1:要求用户输入欲修改的学生的学号; 2:判断该学生是否存在于记录中; 3:若学生记录存在,提供修改学生信息功能。 查看单个学生记录。具体功能为: 1:输入学生学号; 5.查看学生记录 2:若该学生存在,打印该学生相关信息。 查看多个学生记录。具体功能为: 1:打印出所有学生的记录; 2:能分别按学号、姓名、性别、年龄和分数进行排序。 6.退出系统 退出系统。 2.2初始化
流程描述:
1:初始化系统执行对对象进行序列化 2: 反序列化获得对象 业务规则说明:
1:进入系统第一步必须序列化 。
2:获得反序列化的对象,如果文件不存在兴建一个,单必须是需要的对象类型。
2.3添加学生
流程描述:
1:要求用户从键盘输入一个或多个学生信息; 2:输入完成后序列化到文件/表。
3:学生纪录不允许重复,判断的关键字为学号 规则说明:
1:从菜单选择添加学生,获得容器对象 。 2:进入添加页面提示添加属性。 3:性别男女。
4:科目成绩可变性。课程可自动调节 5:学号作为唯一标示符: 不能出现重复学号。 必须是数字组成。
6:添加完成后把容器对象序列化到文件
2.4删除学生记录
业务流程描述:
1:要求用户输入欲删除的学生的学号; 2:删除学生记录; 3:更新到文件/表。 业务规则说明: 1:传递一个容器对象。
2:给定一个学生学号删除一个学生信息 2:遍历容器是否有输入学号的学生信息。 如果存在,提示是否删除。 如果没有重新输入。
3:如果删除成功返回一个容器对象,序列化到文件。
2.5修改学生记录
业务流程描述:
1:要求用户输入欲修改的学生的学号; 2:判断该学生是否存在于记录中;
3:若学生记录存在,提供修改学生信息功能。 业务规则说明:
1:传递一个容器对象给修改方法。 2:给定一个欲修改学生的学号
3:遍历容器是否有输入学号的学生信息。 如果存在学生对象,继续下一步。 如果没有重新输入。
4:通过判断知道存在学生对象后遍历获得学生对象。 5:提示要修改的类容 提示旧的信息添加新的信息
6:修改后获得容器对象,序列化到文件
2.6查看学生记录
业务流程描述: 1:输入学生学号;
2:若该学生存在,打印该学生相关信息。 查看多个学生记录。具体功能为: 1:打印出所有学生的记录;
2:能分别按学号、姓名、性别、年龄和分数进行排序。 业务规则说明:
1:输入选项获得查看方式,获得容器对象。 2:全部查看显示获得全部学生信息 3:查看特定学生。 输入学生学号; 判断学生是否存在
如果存在显示单个学生,如果不存在提示不存在,重新输入。
学生成绩管理系登查编存打印 管学生登录 人力资源管理员1.学生基本教师基本添加 删除 修改 系统管
2.7退出系统
提示是否退出
3系统分析
3.1系统开发流程
HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。根据系统的模块层次结构可得到系统HIPO图,本软件的HIPO图如图4.1所示。
图 4.1 系统HIPO图
模块是数据说明、可执行语句等程序对象的集合。是可以单独被命名的而且可通过名字来访问,例如,过程、函数、子程序、宏等等都可作为模块。模块化就是将程序划分成若干个模块,每个模块完成一个子功能,把这些模块集合起来组成一个整体,可以完成指定的功能满足问题的要求。
模块化设计不仅降低了系统的复杂性,使得系统容易修改,而且推动了系统各个部
分的并行开发,从而提高了软件的生产效率。
以下为成绩管理的IPO表,如图4.2所示:
图 4.2 成绩管理IPO表
3.2系统模块设计
系统用例图
用例图主要用来图示化系统的主事件流程,它主要用来描述需求,即希望系统具备的完成一定功能的动作,通俗地理解用例就是软件的功能模块,是设计系统分析阶段的起点,设计人员根据需求来创建和解释用例图,用来描述软件应具备哪些功能模块以及这些模块之间的调用关系。
3.2 系统总体用例图
本系统包括三类角色:教师、管理员和学生。教师可以进行分报表,记录分数和更新分数的操作,管理员可以查看分数和进行成绩的总报表,学生可以查看个人成绩。同时系统还可以加载分数和保存分数。其系统总体用例图如图2.1所示:
图 3.1 系统总体用例图
3.3学生信息用例图
学生信息管理模块包括三类角色,可分别根据自己的权限对个人信息进行增加、删除和修改等操作。其用例图如图3.2所示:
图 3.2 学生信息用例图
3.4管理员信息用例图
管理员信息管理模块包括两种角色,根据不同的权限可以添加管理员、查看管理员、删除管理员,还包括登录, 管理员信息用例图如图3.3所示:
图 3.3 管理员信息用例图
3.3系统结构
模块分析
用户管理模块
添加用户,删除用户:
public void managementUser(String sa) {
interFram = new JInternalFrame(sa, true, true, true, true); interFram.setBounds(0, 0, frm1.width, frm1.height); interFram.validate(); interFram.setVisible(true); jkjkjk = new 管理用户(); interFram.add(jkjkjk);
add(interFram, BorderLayout.CENTER);
开始 是 添加用否 添加用删除用显示用户返回 显示用户返回
图6.1 用户管理流程图
增加学生信息模块
对学生信息进行增加::
public void addC(String sa) {
interFram = new JInternalFrame(sa, true, true, true, true); interFram.setBounds(0, 0, frm1.width, frm1.height); interFram.validate();
interFram.setVisible(true); jkjkjk1 = new 信息(); interFram.add(jkjkjk1);
add(interFram, BorderLayout.CENTER); }
stu 学生 extends JPanel { JTable table;
JScrollPane scroll;
String rili[][] = new String[100][3]; String str1, str2, str3;
Object name[] = { \"学号\学科\成绩\" }; Connection con; int lyl, lwc; Statement sql; ResultSet rs;
图6.2 学生信息增加流程图
开始 是 是否 输入删是 是否否 显示删除返回 输入添输入修显示添加返回 显示修改返回 修改学生信息模块
对学生的成绩及信息进行修改::
String rili[][] = new String[100][4]; JButton f = JButton(\"修改信息\"); 学生信息视图表() {
try {
con = DriverManager.getConnection(\"jdbc:odbc:qyl\sql = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = sql.executeQuery(\"select * from 已修改视图 WHERE SNO = \" + \"'\"+ qyl
+ \"'\");
int i = 0;
while (rs.next()) {
rili[i][0] = rs.getString(1); rili[i][1] = rs.getString(2); rili[i][2] = rs.getString(3); rili[i][3] = rs.getString(4);
}
oldvalue = table.getValueAt(table.getSelectedRow(),
}
i++;
String
table.getSelectedColumn()).toString(); int row = table.getSelectedRow(); int column = table.getSelectedColumn(); if(column==0){ 除\"
+ rili[row][1]+\"(\"+rili[row][2]+\"\\b)\"+\"成绩
int n = JOptionPane.showConfirmDialog(jk, \"您选择删
\\n是否继续?\提示对话框\
JOptionPane.YES_NO_OPTION);
if (n == JOptionPane.YES_OPTION) {
String del = \"DELETE FROM SC WHERE CNO = \"
+\"'\"+rili[row][1]+\"'\" ;
图6.3修改学生成绩流程图
综合查询模块
class 查询 extends JPanel {
JTable table; JScrollPane scroll;
String rili[][] = new String[100][5];
Object name[] = { \"学号\姓名\性别\年龄\系别\" }; int lht, lyl, lwc; Connection con; String oldvalue = null; Statement sql;
String str1, str2, str3, str4, str5; ResultSet rs;
存储过程及触发器:
触发器:删除S表中的数据以后SC表中的相应的数据也被删除
CREATE TRIGGER delS_SC ON S FOR DELETE
AS declare @SNO_DEL char(12)
select @SNO_DEL =SNO from deleted delete from SC where SNO=@SNO_DEL
触发器:更新S表中的SNO后SC表中的也相应改变
CREATE TRIGGER UptateS_SC ON S FOR UPDATE
AS IF UPDATE(SNO) BEGIN
DECLARE @SNO_NEW CHAR(12),@SNO_OLD CHAR(12) SEL
ECT @SNO_NEW = SNO FROM INSERTED SELECT @SNO_OLD =SNO FROM DELETED
UPDATE SC SET SNO =@SNO_NEW WHERE SNO =@SNO_OLD END
触发器:删除C表中的信息后SC表中的相应信息也会被删除掉
CREATE TRIGGER delC_SC ON C FOR DELETE
AS declare @CNO_DEL char(2)
select @CNO_DEL =CNO from deleted delete from SC where CNO=@CNO_DEL
触发器:更新C表中的信息后SC表中的相应信息也会随着改变
CREATE TRIGGER UptateC_SC ON C FOR UPDATE
AS IF UPDATE(CNO) BEGIN
DECLARE @SNO_NEW CHAR(12),@SNO_OLD CHAR(12) SELECT @SNO_NEW = CNO FROM INSERTED SELECT @SNO_OLD =CNO FROM DELETED
UPDATE SC SET CNO =@SNO_NEW WHERE CNO =@SNO_OLD END
触发器:删除T表中的教师信息后TC表中的相应信息也会别删掉
CREATE TRIGGER delT_TC ON T FOR DELETE
AS declare @SNO_DEL char(12)
select @SNO_DEL =TNO from deleted
系统程序流程图 管理员登录模块
管理员登录的流程是:如果管理员存在,则直接输入账号密码,系统判断账号密码是否正确,如果输入不正确,重新输入,直到输入正确之后才可以进入系统;当管理员不存在时,作者选择注册,根据个人详细情况输入个人信息,系统将会判断输入的信息是否正确,直到输入的信息正确之后才注册成功,然后输入注册的账号密码登录系统,系统仍会判断账号密码是否正确,直到输入正确的账号密码才会进入系统。其流程图如图5.1所示:
图 5.1 管理员登录流程图
成绩管理模块
成绩管理的流程是:管理员输入账号密码之后,系统判断输入账号密码是否正确,不正确,重新输入直到正确才可以进入后台管理系统,选择成绩管理,选择要进行审核的成绩,进行编辑修改,之后再进一步审核,确定成绩是否录用,如果是存储成绩,则
会显示在系统前台的首页。其流程图如图4.2所示:
图5.2 成绩管理流程图 5.2 系统过程设计
过程设计的任务不是具体地编写程序,而是要设计出程序的“蓝图”,程序员根据这个蓝图写出实际的代码。因此,过程设计的结果基本上决定了最终的程序代码的质量。
在软件的生命周期中,实际上对于长期使用的软件系统而言,人读程序的时间可能比写程序的时间还要长得多。因此,衡量程序的质量不仅要看它的逻辑是否正确,性能是否满足要求,更主要的是要看它是否容易阅读和理解。过程设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。结构程序设计技术是实现上述目标的关键技术,因此是过程设计的逻辑基础。
N-S图是一种符合结构化程序设计原则的图形描述工具,又称之为盒图。它有以下特点:
1) 功能域明确,可以从盒图上一眼就看出来。 2)不可能任意转移控制。
3)很容易确定局部和全程数据的作用域。
4)很容易表明嵌套关系,也可以表示模块的层次结构。 系统前台的N-S图,如图5.3所示:
图 5.3 系统前台N-S图
PAD 是问题分析图(Problem Analysis Diagram)的英文缩写,它用二维树形结构的图来表示程序的控制流,是一种用结构化程序设计思想表现程序逻辑结构的图形工具,将这种图翻译成程序代码比较容易。
PAD图的主要优点如下:
(1)使用表示结构化控制的PAD符号所设计出来的程序必然是结构化程序。 (2)PAD图描述的程序结构十分清晰。
图中最左面的竖线是程序的主线,即第一层结构。随着程序层次增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线,PAD图中竖线的总条数就是程序的层次数。
(3)用 PAD 图表现程序逻辑易读、易懂、易记。 PAD图是二维树形结构的图形,程序从图中最左竖线上端的结点开始执行,自上而下,从左到右顺序执行,遍历所有结点。
(4)有利于提高软件的可靠性和软件生产率。容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成,从而可以省去人工编码的工作,有利于提高软件的可靠性和软件生产率。
(5)既可用于表示程序逻辑,也可用于描述数据结构。 (6)PAD 图的符号支持自顶向下、逐步求精方法的使用。
开始设计者可以定义一个抽象的程序,随着设计工作的深入而使用 def 符号逐步增加细节,直至完成详细设计,系统前台的PAD图,如图5.4所示:
添加Def输入帐号、密码UNTIL 账号、密码正确注册首页成绩信息选择操作学生信息查看系统首页教师成绩保存修改学生信息退出操作Def选择操作加载查看成绩加载成绩保存成绩成绩选择操作修改删除进入系统退出操作添加成绩修改成绩删除成绩判断用户是否存在教师管理员编辑成绩Def编辑信息管理员选择操作管理汇总管理成绩汇总学生信息编辑管理员信息编辑退出系统退出操作图 5.4 系统前台PAD图
3.4数据库设计
数据库表设计
逻辑结构设计的任务是把概念结构设计阶段设计好的E-R图转换成与选用的DBMS产品所支持的数据模型相符合的逻辑结构。E-R图所需解决的问题是如何确定实体和实体间的关系,如何确定这些关系模式的属性和码。数据库中两实体间1:n联系转换为一个与n端对应的关系模式合并的关系模式的方法是将联系的属性与1端的码加入n端作为属性,主码为n端实体的主码。以下为本系统中部分表的简单介绍。
1、管理员基本信息表包含管理员编号、管理员姓名、管理员密码,设计时注意
AdminID设为主键,如表3.1所示:
表 4.1 管理员基本信息表
字段名 AdminID Name Password
数据类型 Int Varchar(10) Varchar(10)
说明 管理员编号 管理员姓名 管理员密码
2、学生基本信息表包含的信息是学生编号、学生姓名、学生性别、学生年龄、家庭住址、联系电话等信息,设计时注意ID字段设为主键,设为Int类型,如表3.2所示:
表 4.2 学生基本信息表
字段名 ID Name
Sex
Age
Address
Phone
数据类型 Int Varchar(10) Char(10) Int Varchar(50) Char(15)
说明 学生编号 学生姓名 性别 年龄 家庭住址 联系电话
3、教师基本信息表包含教师编号、教师姓名、教师年龄、家庭住址、联系电话、所教科目等信息,设计时注意ID字段设为主键,设为Int类型,如表4.3所示:
表 4.3 教师基本信息表
字段名 ID OName Age
Address Phone
Object
数据类型 Int Varchar(10)
Int Varchar(50) Char(15) Varchar(15)
说明 教师编号 教师姓名 年龄 家庭住址 联系电话 所教科目
4、成绩基本信息表包括学生编号、科目类型、任课教师、所得分数,ID设为主键,如表4.4所示:
表 4.4 成绩基本信息信息表
字段名
数据类型
说明
ID OType OName Grade
Int Varchar(10) Varchar(10)
int
学生编号 科目类型 任课教师 所得分数
3.1
4系统测试
首先进入NETBEANS,打开工程person.dsw,然后进入源程序,接着选择Build下的Execute person.exe即可,也可以不打开工程,直接双击person文件夹下的debug或release子文件夹下的person.exe文件即可运行程序。 1. 系统登录界面,如图7.1-7.3所示。
图 7.1 图 7.2 图 7.3
2.系统主界面,如图7.4所示。
图 7.4
3.增加学生信息界面,如图7.5所示。
图 7.5
4.修改学生信息界面,如图7.6所示。
图 7.6
5.查找学生信息界面,如图7.7所示。
图 7.7
5结论
本系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。开发本系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。
目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的系统是很有必要的。
本系统在开发过程中,注意使其符合操作的业务流程,并力求系统的全面性、通用性,使得本系统不只适用于一家教育机构。在开发方法的选择上,选择了生命周期法与原型法相结合的方法,遵循系统调查研究、系统分析、系统设计和系统实施四个主要阶段进行设计,而在具体的设计上,采取了演化式原型法,随着用户的使用及对系统了解的不断加深,对某一部分或几部分进行重新分析、设计、实施。
继C++之后学习Java 程序设计语言会感觉很轻松,因为Java 与C++语法类似,并把C++中一些较低级和较难以理解的功能都去掉了,如多继承、指针等,同时Java增强了部分功能,如“+”运算符的重载。对于初学Java的人而言,难点是 Java中的 引用、初始化一个类过程等。总的来说,Java 其易于学习、高效率的执行方式、平台无关性、分布式与高安全性及其丰富的API文档和类库等特点都说明Java 是程序设计语言的伟大进步的表现。
可以说这么说,本次课程设计综合考察了我们对Java程序设计知识的掌握熟练
程度和实际运用能力。其间,涉及到了Java 中的绝大多数的知识点,如Java图形用户界面设计、Java的异常处理机制、Java中的多线程程序设计、Java输入输出流等。
程序实现的关键在于功能的合理划分以及各个包或者类之间的通讯问题,只要分析清楚这两点,剩下的就是按部就班的写代码了。所以设计是关键。
功能实现了,再就是如何对程序进行性能优化的问题。如有的类需要多个对象实例,这时我们就可以使用Singleton模式产生唯一的对象实例,如“文件分割※合并器”中MyWindowListener类;文件操作中加入缓冲机制;对与图像可以使用使用双缓冲区等等。
学习Java,我推荐使用 “六步走”的方法,循序渐进:
第一步是安装好JDK,写一个Hello World。 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题,如何来寻找类的路径问题。把这两个问题摸索清楚了,就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。 第二步是学习Java的语法。第三步是学习Java的面向对象的编程语言的特性的地方。比如继承,构造器,抽象类,接口,方法的多态,重载,覆盖,Java的异常处理机制。第四步就是熟悉Java的类库。第五步,Java Web 编程。第六步,J2EE编程。
总之,作为一门程序设计语言,Java 的学习务必要做到多看多写多想多请教。 多看,看高手、大师的程序,借鉴其解题思路和程序架构;多写,学习程序设计很重要的就是要自己亲自动手写代码,切忌犯眼高手低的弊病,而且这样记忆非常深刻;多想,程序调试中出现一些“莫明其妙”的问题,为什么会这样而不是那样;多请教:程序设计说到底是要彻底搞清设计该语言的人的思想,遇到问题想不通应该请教同学、老师等。这样可达到事半功倍的目的。
6参考文献
1. 黄晓东﹒JAVA课程设计案例精编(第二版)[M]中国水利电出版社,2005
2. 徐迎晓﹒JAVA语法及网络应用设计。清华大学出版社。 3. 技术交流网站CSDN:网址:
7附件:
import java.awt.*; import java.util.*; import java.lang.*;
public class Students.java extends Applet implements ActionListener {
Vector StuInf=new Vector(); StudentInf SI; String xm; String bj; int i,j,xh,cj; static int mid;
Label prompt1=new Label(\"学生成绩管理系统\"); Label prompt2=new Label(\" 用户:\"); Label prompt3=new Label(\" 密码:\"); Label prompt4=new Label(\" 班级:\"); Label prompt5=new Label(\" 成绩:\"); TextField input1=new TextField(8); TextField input2=new TextField(8); TextField input3=new TextField(8); TextField input4=new TextField(8); Button btn1=new Button(\"登录\"); Button btn2=new Button(\"增加\"); Button btn3=new Button(\"修改\"); Button btn4=new Button(\"删除\"); public void init() {
setLayout(new GridLayout(6,3)); add(new Label()); add(prompt1); add(new Label()); add(prompt2); add(input1); add(new Label());
add(prompt3); add(input2); add(btn1); add(prompt4); add(input3); add(new Label()); add(prompt5); add(input4); add(new Label()); add(btn2); add(btn3); add(btn4);
prompt4.setVisible(false); prompt5.setVisible(false); input3.setVisible(false); input4.setVisible(false); btn2.setVisible(false); btn3.setVisible(false); btn4.setVisible(false); btn1.addActionListener(this); btn2.addActionListener(this); btn3.addActionListener(this); btn4.addActionListener(this); }
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()==\"登录\") {
String a,b; a=input1.getText(); b=input2.getText(); input1.setText(\"\");
if((a.equals(\"12\")==true)&&(b.equals(\"12\")==true)) {
prompt2.setText(\" 姓名:\"); prompt3.setText(\" 学号:\"); prompt4.setVisible(true); prompt5.setVisible(true); input3.setVisible(true); input4.setVisible(true); btn2.setVisible(true); btn3.setVisible(true); btn4.setVisible(true); btn3.setEnabled(false); btn4.setEnabled(false); btn1.setLabel(\"查询\"); input1.setText(\"登录成功\"); input1.selectAll(); } else
input2.setText(\"用户名或密码错\"); }
if(e.getActionCommand()==\"增加\") {
boolean scucss=true; try {
XingMing(); }
catch(EmptyException as) {
input1.setText(\"姓名不能为空\"); scucss=false; } try {
xh=Integer.parseInt(input2.getText()); }
catch(NumberFormatException m) {
input2.setText(\"学号为空或格式错\"); scucss=false; }
bj=input3.getText(); try {
ChengJi(); }
catch(EmptyException as) { cj=-1; }
catch(OverException dd) {
input4.setText(\"应在0-100间\"); scucss=false; }
catch(NumberFormatException cm) {
input4.setText(\"成绩应为数据\"); scucss=false; }
if(scucss==true) {
SI=new StudentInf(xm,xh,bj,cj); Insert(SI); } }
if(e.getActionCommand()==\"修改\") {
xm=input1.getText();
xh=Integer.parseInt(input2.getText());
bj=input3.getText();
cj=Integer.parseInt(input4.getText()); SI=new StudentInf(xm,xh,bj,cj); StuInf.setElementAt(SI, mid); btn3.setEnabled(false); }
if(e.getActionCommand()==\"删除\") {
StuInf.removeElementAt(mid); btn4.setEnabled(false); input1.setText(\"删除成功\"); input2.setText(\"\"); input3.setText(\"\"); input4.setText(\"\"); }
if(e.getActionCommand()==\"查询\") {
boolean right=true; try {
xh=Integer.parseInt(input2.getText()); }
catch(NumberFormatException m) {
input2.setText(\"学号为空或格式错\"); right=false; }
if(right==true) {
search(xh);
btn3.setEnabled(true); btn4.setEnabled(true); } }
}
//查找方法
public void search(int k) {
boolean exist=false; int low=0;
int high=StuInf.size()-1; while(low<=high) {
mid=(high+low)/2;
StudentInf a1=(StudentInf) StuInf.elementAt(mid); if(a1.getStuNo()==k) {
SI=(StudentInf) StuInf.elementAt(mid); String x = String.valueOf(SI.getStuNo()); exist=true;
input1.setText(SI.getname()); input1.selectAll(); input2.setText(\"0\"+x);
input3.setText(SI.getClassNo()); if(SI.getLevel()==-1)
input4.setText(\"未参加考试\"); else {
String y = String.valueOf(SI.getLevel()); input4.setText(y); } break; }
else if(a1.getStuNo() if(exist==false) { input1.setText(\"无此学号学生信息\"); input1.selectAll(); } } //添加方法 public void Insert(StudentInf q) { int i=0; if(StuInf.isEmpty()==true) { StuInf.addElement(q); input1.setText(\"\"); input2.setText(\"\"); input3.setText(\"\"); input4.setText(\"\"); } else { StudentInf xh; xh=(StudentInf) StuInf.firstElement(); while(xh.getStuNo() if(xh.getStuNo()==q.getStuNo()) { input2.setText(\"此学生信息已存在\"); input2.requestFocus(); input2.selectAll(); } else { StuInf.insertElementAt(q,i); input1.setText(\"\"); input2.setText(\"\"); input3.setText(\"\"); input4.setText(\"\"); } } } //异常类 class OverException extends Exception { String over; } class EmptyException extends Exception { String empty; } void XingMing() throws EmptyException { if((input1.getText()).equals(\"\")) throw (new EmptyException()); else xm=input1.getText(); } void ChengJi() throws OverException,EmptyException { if((input4.getText()).equals(\"\")) throw(new EmptyException()); else cj=Integer.parseInt(input4.getText()); if(cj<0||cj>100) throw (new OverException()); } //学生信息类 public class StudentInf { private String name; private int StuNo; private String ClassNo; private int Level; StudentInf(String xingming,int xuehao,String banji,int chengji) { name=xingming; StuNo=xuehao; ClassNo=banji; Level=chengji; } public int getStuNo() { return StuNo; } public String getname() { return name; } public String getClassNo() { return ClassNo; } public int getLevel() { return Level; } } } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务