1、湖南工业大学课 程 设 计资 料 袋 计算机和通信学院 学院(系、部) - 年第 1 学期 课程名称 数据结构 指导老师 文志诚 职称 讲师 学生姓名 孙浩 专业班级 软件工程1501班 学号 题 目 成 绩 起止日期 年 12 月 18 日 12 月 23 日目 录 清 单序号材 料 名 称资料数量备 注1课程设计任务书12课程设计说明书13源程序(电子文档)1456湖南工业大学课程设计任务书 - 年第 1 学期 计算机和通信 学院(系、部) 软件工程 专业 1501 班级课程名称: 数据结构 设计题目: 完成期限:自 年 12 月 18 日至 年 12 月 26 日共 1 周内容及任务一、
2、设计任务及关键技术参数使用java设计一个能够符合课程设计要求系统二、设计任务三、设计工作量进度安排起止日期工作内容12.18需求分析12.19概要设计12.20-12.22具体设计12.23调试分析、测试结果主要参考资料指导老师(签字): 年 月 日系(教研室)主任(签字): 年 月 日 数据结构程序设计(java语言)课程设计 设计说明书学生成绩管理系统起止日期: 年 12 月 18 日 至 年 12 月 23 日学生姓名孙浩班级软件工程1501班学号成绩指导老师(签字)计算机和通信学院 12 月 23 日 目 录第1章 需求分析11.1 介绍11.2 系统开发背景21.3 研究现实状况2
3、第2章 概要设计52.1系统开发环境和技术介绍52.2系统需求分析102.2.1总体功效分析102.2.2关键功效分析11第3章 具体设计163.1系统开发步骤163.2系统模块设计163.3 系统结构173.3.1 系统模块结构图173.3.2 系统步骤图193.4 数据库设计203.5 界面设计20第4章 调试分析294.1程序逻辑调试294.2系统界面调试29第5章 测试结果485.1测试环境485.2测试项目485.2.1输入输出测试485.2.2安全性测试485.3 测试结果49第6章 用户使用说明48结 论50参考文件51附录511 需求分析1.1系统具体任务 该系统具体任务就是设
4、计一个学生成绩数据库管理系统,由计算机来替换人工实施一系列诸如增加新学生成绩信息、删除学生成绩信息、学生资料、查询、修改等处理操作,以方便管理人员管理信息工作。 本设计以用户为中心,界面要美观大方,操作尽可能简单明了,且要有良好容错性,在用户出现误操作时能立即给出警告并修改。在现有技术和资金情况下完全能够设计出这套功效完善应用软件。1.2 系统开发目标建立学生成绩管理系统,采取计算机对学生成绩进行管理,深入提升办学效益和现代化水平。实现学生成绩信息管理工作步骤系统化、规范化和自动化。1.3 系统环境需求编程语言:JAVAJava + Eclipse + SQL server数据库开发工具:Ec
5、lipse SDK(英文版)SQL (汉字版)运行环境:Windows xp或windows 2概要设计2.1总体功效需求系统登录包含管理员、老师和学生三种类型登录。1.录入学生信息 (初始化)在系统中不存在任何对象时,实现该功效。具体功效为:1:检测文件系统/数据库中是否存在相关文件/表;2:若不存在相关文件/表,则要求用户录入学生信息,并序列化或经过JDBC存放到文件/表;3:若已存在相关文件/表,则反序列化或经过JDBC读取到程序中。注意:学生纪录不许可反复,判定关键字为学号2.添加学生统计往已经有学生纪录添加新学生纪录。具体功效为:1:要求用户从键盘输入一个或多个学生信息;2:输入完成
6、后序列化或JDBC存放到文件/表。注意:学生纪录不许可反复,判定关键字为学号3.删除学生统计在已经有学生纪录中删除一个或多个学生纪录。具体功效为:1:要求用户输入欲删除学生学号;2:删除学生统计;3:更新到文件/表。4.修改学生统计在已经有学生统计中修改某学生相关信息。具体功效为:1:要求用户输入欲修改学生学号;2:判定该学生是否存在于统计中;3:若学生统计存在,提供修改学生信息功效。5.查看学生统计查看单个学生统计。具体功效为:1:输入学生学号;2:若该学生存在,打印该学生相关信息。查看多个学生统计。具体功效为:1:打印出全部学生统计;2:能分别按学号、姓名、性别、年纪和分数进行排序。6.退
7、出系统退出系统。2.2初始化步骤描述:1:初始化系统实施对对象进行序列化2: 反序列化取得对象业务规则说明:1:进入系统第一步必需序列化 。2:取得反序列化对象,假如文件不存在兴建一个,单必需是需要对象类型。2.3添加学生步骤描述:1:要求用户从键盘输入一个或多个学生信息;2:输入完成后序列化到文件/表。3:学生纪录不许可反复,判定关键字为学号规则说明:1:从菜单选择添加学生,取得容器对象 。2:进入添加页面提醒添加属性。3:性别限制男女。4:科目成绩可变性。课程可自动调整5:学号作为唯一标示符: 不能出现反复学号。 必需是数字组成。 6:添加完成后把容器对象序列化到文件2.4删除学生统计业务
8、步骤描述:1:要求用户输入欲删除学生学号;2:删除学生统计;3:更新到文件/表。业务规则说明:1:传输一个容器对象。2:给定一个学生学号删除一个学生信息 2:遍历容器是否有输入学号学生信息。假如存在,提醒是否删除。假如没有重新输入。3:假如删除成功返回一个容器对象,序列化到文件。2.5修改学生统计业务步骤描述:1:要求用户输入欲修改学生学号;2:判定该学生是否存在于统计中;3:若学生统计存在,提供修改学生信息功效。业务规则说明:1:传输一个容器对象给修改方法。2:给定一个欲修改学生学号 3:遍历容器是否有输入学号学生信息。假如存在学生对象,继续下一步。假如没有重新输入。4:经过判定知道存在学生
9、对象后遍历取得学生对象。5:提醒要修改类容提醒旧信息添加新信息 6:修改后取得容器对象,序列化到文件2.6查看学生统计业务步骤描述:1:输入学生学号;2:若该学生存在,打印该学生相关信息。查看多个学生统计。具体功效为:1:打印出全部学生统计;2:能分别按学号、姓名、性别、年纪和分数进行排序。业务规则说明:1:输入选项取得查看方法,取得容器对象。2:全部查看显示取得全部学生信息 3:查看特定学生。输入学生学号;判定学生是否存在假如存在显示单个学生,假如不存在提醒不存在,重新输入。学生成绩管理系统登录1.0查询2.0编辑3.0存放4.0管理6.0打印5.0学生登录1.1人力资源管理者1.2学生基础
10、信息2.1添加3.1删除3.2修改3.3系统管理6.1管理员1.3老师基础信息2.22.7退出系统提醒是否退出3系统分析3.1系统开发步骤HIPO图是美国IBM企业发明“层次图加输入/处理/输出图”英文缩写。依据系统模块层次结构可得到系统HIPO图,本软件HIPO图图4.1所表示。图 4.1 系统HIPO图模块是数听说明、可实施语句等程序对象集合。是能够单独被命名而且可经过名字来访问,比如,过程、函数、子程序、宏等等全部可作为模块。模块化就是将程序划分成若干个模块,每个模块完成一个子功效,把这些模块集合起来组成一个整体,能够完成指定功效满足问题要求。模块化设计不仅降低了系统复杂性,使得系统轻易
11、修改,而且推进了系统各个部分并行开发,从而提升了软件生产效率。以下为成绩管理IPO表,图4.2所表示:图 4.2 成绩管理IPO表3.2系统模块设计系统用例图用例图关键用来图示化系统主事件步骤,它关键用来描述需求,即期望系统含有完成一定功效动作,通俗地了解用例就是软件功效模块,是设计系统分析阶段起点,设计人员依据需求来创建和解释用例图,用来描述软件应含有哪些功效模块和这些模块之间调用关系。3.2 系统总体用例图本系统包含三类角色:老师、管理员和学生。老师能够进行分报表,统计分数和更新分数操作,管理员能够查看分数和进行成绩总报表,学生能够查看个人成绩。同时系统还能够加载分数和保留分数。其系统总体
12、用例图图2.1所表示:图 3.1 系统总体用例图3.3学生信息用例图学生信息管理模块包含三类角色,可分别依据自己权限对个人信息进行增加、删除和修改等操作。其用例图图3.2所表示:图 3.2 学生信息用例图3.4管理员信息用例图管理员信息管理模块包含两种角色,依据不一样权限能够添加管理员、查看管理员、删除管理员,还包含登录, 管理员信息用例图图3.3所表示:图 3.3 管理员信息用例图3.3系统结构3.3.1系统模块结构图模块分析 用户管理模块添加用户,删除用户:public void managementUser(String sa) interFram = new JInternalFram
13、e(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) in
14、terFram = 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 private static final long serialVersionUID =
15、 -035L;JTable table;JScrollPane scroll;String rili = new String1003;String str1, str2, str3;Object name = 学号, 学科, 成绩 ;Connection con;int lyl, lwc;Statement sql;ResultSet rs;图6.2 学生信息增加步骤图是否删除是否添加返回返回输入删除学生信息输入添加信息输入修改信息显示删除信息显示修改信息是否是否开始返回显示添加信息修改学生信息模块对学生成绩及信息进行修改:String rili = new String1004;JButt
16、on 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() rilii0 = rs.getString(1);rilii1
17、 = rs.getString(2);rilii2 = rs.getString(3);rilii3 = rs.getString(4);i+;Stringoldvalue = table.getValueAt(table.getSelectedRow(),table.getSelectedColumn().toString();int row = table.getSelectedRow();int column = table.getSelectedColumn();if(column=0)System.out.println(oldvalue);System.out.println(ro
18、w+t+column);System.out.println(rilirowcolumn+2);int n = JOptionPane.showConfirmDialog(jk, 您选择删除+ rilirow1+(+rilirow2+b)+成绩n是否继续?, 提醒对话框,JOptionPane.YES_NO_OPTION);if (n = JOptionPane.YES_OPTION) System.out.println(rilirow1);String del = DELETE FROM SC WHERE CNO = +rilirow1+ ;图6.3修改学生成绩步骤图 综合查询模块clas
19、s 查询 extends JPanel private static final long serialVersionUID = -47372494L;JTable table;JScrollPane scroll;String rili = new String1005;Object name = 学号, 姓名, 性别, 年纪, 系别 ;int lht, lyl, lwc;Connection con;String oldvalue = null;Statement sql;String str1, str2, str3, str4, str5;ResultSet rs;存放过程及触发器:l
20、 触发器:删除S表中数据以后SC表中对应数据也被删除CREATE TRIGGER delS_SC ON SFOR DELETE AS declare SNO_DEL char(12)select SNO_DEL =SNO from deleteddelete from SCwhere SNO=SNO_DELl 触发器:更新S表中SNO后SC表中也对应改变CREATE TRIGGER UptateS_SC ON S FOR UPDATE AS IF UPDATE(SNO)BEGINDECLARE SNO_NEW CHAR(12),SNO_OLD CHAR(12)SELECT SNO_NEW =
21、SNO FROM INSERTEDSELECT SNO_OLD =SNO FROM DELETEDUPDATE SC SET SNO =SNO_NEW WHERE SNO =SNO_OLDENDl 触发器:删除C表中信息后SC表中对应信息也会被删除掉CREATE TRIGGER delC_SC ON CFOR DELETE AS declare CNO_DEL char(2)select CNO_DEL =CNO from deleteddelete from SCwhere CNO=CNO_DELl 触发器:更新C表中信息后SC表中对应信息也会伴随改变CREATE TRIGGER Uptat
22、eC_SC ON C FOR UPDATE AS IF UPDATE(CNO)BEGINDECLARE SNO_NEW CHAR(12),SNO_OLD CHAR(12)SELECT SNO_NEW = CNO FROM INSERTEDSELECT SNO_OLD =CNO FROM DELETEDUPDATE SC SET CNO =SNO_NEW WHERE CNO =SNO_OLDENDl 触发器:删除T表中老师信息后TC表中对应信息也会别删掉CREATE TRIGGER delT_TC ON TFOR DELETE AS declare SNO_DEL char(12)select
23、SNO_DEL =TNO from deleted3.3.2系统步骤图系统程序步骤图管理员登录模块管理员登录步骤是:假如管理员存在,则直接输入账号密码,系统判定账号密码是否正确,假如输入不正确,重新输入,直到输入正确以后才能够进入系统;当管理员不存在时,作者选择注册,依据个人具体情况输入个人信息,系统将会判定输入信息是否正确,直到输入信息正确以后才注册成功,然后输入注册账号密码登录系统,系统仍会判定账号密码是否正确,直到输入正确账号密码才会进入系统。其步骤图图5.1所表示:图 5.1 管理员登录步骤图成绩管理模块成绩管理步骤是:管理员输入账号密码以后,系统判定输入账号密码是否正确,不正确,重新
24、输入直到正确才能够进入后台管理系统,选择成绩管理,选择要进行审核成绩,进行编辑修改,以后再深入审核,确定成绩是否录用,假如是存放成绩,则会显示在系统前台首页。其步骤图图4.2所表示:图5.2 成绩管理步骤图5.2 系统过程设计 过程设计任务不是具体地编写程序,而是要设计出程序“蓝图”,程序员依据这个蓝图写出实际代码。所以,过程设计结果基础上决定了最终程序代码质量。在软件生命周期中,实际上对于长久使用软件系统而言,人读程序时间可能比写程序时间还要长得多。所以,衡量程序质量不仅要看它逻辑是否正确,性能是否满足要求,更关键是要看它是否轻易阅读和了解。过程设计目标不仅仅是逻辑上正确地实现每个模块功效,
25、更关键是设计出处理过程应该尽可能简明易懂。结构程序设计技术是实现上述目标关键技术,所以是过程设计逻辑基础。N-S图是一个符合结构化程序设计标准图形描述工具,又称之为盒图。它有以下特点:1) 功效域明确,能够从盒图上一眼就看出来。2)不可能任意转移控制。3)很轻易确定局部和全程数据作用域。4)很轻易表明嵌套关系,也能够表示模块层次结构。系统前台N-S图,图5.3所表示:图 5.3 系统前台N-S图PAD 是问题分析图(Problem Analysis Diagram)英文缩写,它用二维树形结构图来表示程序控制流,是一个用结构化程序设计思想表现程序逻辑结构图形工具,将这种图翻译成程序代码比较轻易。
26、PAD图关键优点以下:(1)使用表示结构化控制PAD符号所设计出来程序肯定是结构化程序。(2)PAD图描述程序结构十分清楚。图中最左面竖线是程序根本,即第一层结构。伴随程序层次增加,PAD图逐步向右延伸,每增加一个层次,图形向右扩展一条竖线,PAD图中竖线总条数就是程序层次数。(3)用 PAD 图表现程序逻辑易读、易懂、易记。 PAD图是二维树形结构图形,程序从图中最左竖线上端结点开始实施,自上而下,从左到右次序实施,遍历全部结点。(4)有利于提升软件可靠性和软件生产率。轻易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成,从而能够省去人工编码工作,有利于提升软件可靠性和软件生产率
27、。(5)既可用于表示程序逻辑,也可用于描述数据结构。(6)PAD 图符号支持自顶向下、逐步求精方法使用。开始设计者能够定义一个抽象程序,伴随设计工作深入而使用 def 符号逐步增加细节,直至完成具体设计,系统前台PAD图,图5.4所表示:图 5.4 系统前台PAD图3.4数据库设计数据库表设计逻辑结构设计任务是把概念结构设计阶段设计好E-R图转换成和选择DBMS产品所支持数据模型相符合逻辑结构。E-R图所需处理问题是怎样确定实体和实体间关系,怎样确定这些关系模式属性和码。数据库中两实体间1:n联络转换为一个和n端对应关系模式合并关系模式方法是将联络属性和1端码加入n端作为属性,主码为n端实体主
28、码。以下为本系统中部分表简单介绍。1、管理员基础信息表包含管理员编号、管理员姓名、管理员密码,设计时注意AdminID设为主键,如表3.1所表示:表 4.1 管理员基础信息表字段名数据类型说明AdminIDInt管理员编号NameVarchar(10)管理员姓名PasswordVarchar(10)管理员密码2、学生基础信息表包含信息是学生编号、学生姓名、学生性别、学生年纪、家庭住址、联络电话等信息,设计时注意ID字段设为主键,设为Int类型,如表3.2所表示:表 4.2 学生基础信息表字段名数据类型说明IDInt学生编号NameVarchar(10)学生姓名 SexChar(10)性别Age
29、Int年纪 AddressVarchar(50)家庭住址PhoneChar(15)联络电话3、老师基础信息表包含老师编号、老师姓名、老师年纪、家庭住址、联络电话、所教科目等信息,设计时注意ID字段设为主键,设为Int类型,如表4.3所表示:表 4.3 老师基础信息表字段名数据类型说明IDInt老师编号ONameVarchar(10)老师姓名AgeInt年纪 AddressVarchar(50)家庭住址 PhoneChar(15)联络电话ObjectVarchar(15)所教科目4、成绩基础信息表包含学生编号、科目类型、任课老师、所得分数,ID设为主键,如表4.4所表示:表 4.4 成绩基础信息
30、信息表字段名数据类型说明IDInt学生编号OTypeVarchar(10)科目类型ONameVarchar(10)任课老师Gradeint所得分数3.14系统测试首优异入NETBEANS,打开工程person.dsw,然后进入源程序,接着选择Build下Execute person.exe即可,也能够不打开工程,直接双击person文件夹下debug或release子文件夹下person.exe文件即可运行程序。1. 系统登录界面,图7.1-7.3所表示。图 7.1图 7.2图 7.32.系统主界面,图7.4所表示。图 7.43.增加学生信息界面,图7.5所表示。图 7.54.修改学生信息界面
31、,图7.6所表示。图 7.65.查找学生信息界面,图7.7所表示。图 7.75结论本系统依据开发要求关键应用于教育系统,完成对日常教育工作中学生成绩档案数字化管理。开发本系统可使学院教职职员减轻工作压力,比较系统地对教务、教学上各项服务和信息进行管理,同时,能够降低劳动力使用,加紧查询速度、加强管理,和国家各部门相关信息化步伐,使各项管理愈加规范化。现在,学校工作繁杂、资料重多,即使各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,现在还没有一套完整、统一系统。所以,开发一套适和大众、兼容性好系统是很有必需。本系统在开发过程中,注意使其符合操作业务步骤,并努力争取系统全方面性、通
32、用性,使得本系统不只适适用于一家教育机构。在开发方法选择上,选择了生命周期法和原型法相结合方法,遵照系统调查研究、系统分析、系统设计和系统实施四个关键阶段进行设计,而在具体设计上,采取了演化式原型法,伴随用户使用及对系统了解不停加深,对某一部分或几部分进行重新分析、设计、实施。继C+以后学习Java 程序设计语言会感觉很轻松,因为Java 和C+语法类似,并把C+中部分较低级和较难以了解功效全部去掉了,如多继承、指针等,同时Java增强了部分功效,如“+”运算符重载。对于初学Java人而言,难点是 Java中 引用、初始化一个类过程等。总来说,Java 其易于学习、高效率实施方法、平台无关性、
33、分布式和高安全性及其丰富API文档和类库等特点全部说明Java 是程序设计语言伟大进步表现。能够说这么说,此次课程设计综合考察了我们对Java程序设计知识掌握熟练程度和实际利用能力。其间,包含到了Java 中绝大多数知识点,如Java图形用户界面设计、Java异常处理机制、Java中多线程程序设计、Java输入输出流等。程序实现关键在于功效合理划分和各个包或类之间通讯问题,只要分析清楚这两点,剩下就是按部就班写代码了。所以设计是关键。功效实现了,再就是怎样对程序进行性能优化问题。如有类需要多个对象实例,这时我们就能够使用Singleton模式产生唯一对象实例,如“文件分割合并器”中MyWind
34、owListener类;文件操作中加入缓冲机制;对和图像能够使用使用双缓冲区等等。学习Java,我推荐使用 “六步走”方法,循序渐进:第一步是安装好JDK,写一个Hello World。 其实JDK学习没有那么简单,相关JDK有两个问题是很轻易一直困扰Java程序员地方:一个是CLASSPATH问题,其实从原理上来说,是要搞清楚JREClassLoader是怎样加载Class;另一个问题是package和import问题,怎样来寻求类路径问题。把这两个问题探索清楚了,就扫除了学习Java和使用JDK最大障碍。推荐看一下王森Java深度历险,对这两个问题进行了深入探讨。 第二步是学习Java语法
35、。第三步是学习Java面向对象编程语言特征地方。比如继承,结构器,抽象类,接口,方法多态,重载,覆盖,Java异常处理机制。第四步就是熟悉Java类库。第五步,Java Web 编程。第六步,J2EE编程。总而言之,作为一门程序设计语言,Java 学习务必需做到多看多写多想多请教。多看,看高手、大师程序,借鉴其解题思绪和程序架构;多写,学习程序设计很关键就是要自己亲自动手写代码,切忌犯眼高手低弊病,而且这么记忆很深刻;多想,程序调试中出现部分“莫明其妙”问题,为何会这么而不是那样;多请教:程序设计说到底是要根本搞清设计该语言人思想,碰到问题想不通应该请教同学、老师等。这么可达成事半功倍目标。6
36、参考文件1. 黄晓东JAVA课程设计案例精编(第二版)M中国水利电出版社,2. 徐迎晓JAVA语法及网络应用设计。清华大学出版社。3. 技术交流网站CSDN:网址: 4. 技术交流网站博客园:网址: 4. 技术交流网站博客园:网址: 7附件:源代码:import java.applet.Applet;import java.awt.*;import java.awt.event.*;import java.util.*;import java.lang.*;public class Students.java extends Applet implements ActionListener V
37、ector 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 i
38、nput2=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
39、(); 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.setVis
40、ible(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.get
41、Text(); 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.getAction