Java程序设计实训报告-学生成绩查询系统 .doc

上传人:小小飞 文档编号:5090028 上传时间:2020-02-01 格式:DOC 页数:17 大小:127KB
返回 下载 相关 举报
Java程序设计实训报告-学生成绩查询系统 .doc_第1页
第1页 / 共17页
Java程序设计实训报告-学生成绩查询系统 .doc_第2页
第2页 / 共17页
Java程序设计实训报告-学生成绩查询系统 .doc_第3页
第3页 / 共17页
Java程序设计实训报告-学生成绩查询系统 .doc_第4页
第4页 / 共17页
Java程序设计实训报告-学生成绩查询系统 .doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《Java程序设计实训报告-学生成绩查询系统 .doc》由会员分享,可在线阅读,更多相关《Java程序设计实训报告-学生成绩查询系统 .doc(17页珍藏版)》请在三一文库上搜索。

1、Java程序设计实训报告一、 系统功能说明“学生成绩查询系统”模仿简单教务系统,通过用户名和密码登陆,可存储用户信息、学生个人信息、课程和成绩等内容,并可进行增删查改四个基本操作。实现“教师录入成绩,学生查询成绩”的目的。 系统的不足之处:系统功能开发不全面,仅能实现记录一门课成绩,无更多增强功能。安全级别不够高,易遭到攻击破坏和篡改。界面不友好、不美观,个别位置有小漏洞:在选择功能菜单的按钮时,系统只设计了支持阿拉伯数字。当用户输入英文字母或者其他文字时,整个程序则无法运行。增加学生就是按学生学号增加,系统没有严格规定必须输入相同位数的学生学号。成绩查询,修改密码和删除学生都是按学生学号实现

2、,在删除学生这个功能里,数据库中没有存的学生信息也可以删除。二、 数据库的简单介绍此系统数据库为Access数据库,包括四个表,分别为Student表,SC表,Course表和UserInfo表,分别存储学生信息、成绩、课程和用户信息的内容。SC表里记录了Sno、Cno、Score信息Course表里记录Cno、Course、Ccredit、Ctype信息Student表里记录了Sno、Sname、Sbirth、Sdept信息 Userinfo表里记录了username、password信息程序通过DBUtil类、SchoolCRUD类实现与数据库相连三、 程序中的类以及对类的理解程序中包含1

3、0个类:1、Application类是输出欢迎信息,读取用户的输入信息。2、ConsoleInputUtil类是读取所输入的用户名和密码数据。3、ConsoleOutputUtil类是输出欢迎信息,退出信息。4、DBUtil的功能为用于连接数据库的类。5、FunctionImplementation类的功能为实现增删查改。6、FunctionMenu类是显示菜单信息。7、SchoolCRUD类联系数据库实现增删查改。8、StudentBean类定义了set和get方法,封装学生属性。9、UserBean类定义了set和get方法,封装用户属性。10、UserLoginUtilis类接收user

4、。其中,我的理解Application为主类ConsoleInputUtil、ConsoleOutputUtil这两个类与界面输入输出有关DBUtil、SchoolCRUD与数据库相连实现相应功能FunctionMenu类显示菜单信息FunctionImplementation类主要实现增删查改功能StudentBean、UserBean实现封装UserLoginUtilis验证信息,实现用户登录四、 程序与注释Applicationpackage cn.edu.buu.it;public class Application public static void main(String arg

5、s) throws Exception / 输出欢迎信息ConsoleOutputUtil.printWelcomeInfo();/ 读取用户的输入信息UserBean user = null;user = ConsoleInputUtil.getConsoleInputUserInfo();System.out.println(用户名: + user.getUsername();System.out.println( 密码: + user.getPassword();/ 用户登录判断boolean isUsernameRight = UserLoginUtil.isUsernameRight

6、(user);/查询用户名boolean isPasswordRight = UserLoginUtil.isPasswordRight(user);/查询密码/判断用户是否存在if (!isUsernameRight) System.out.println(用户名不存在!);return;/判断密码是否正确else if (!isPasswordRight) System.out.println(密码错误!);return;/用户名,密码均正确打印输出语句,显示功能菜单else System.out.println(登录成功!);/ 显示功能菜单并进行相应处理FunctionMenu.sho

7、wFunctionMenu(user);/打印输出退出提示信息ConsoleOutputUtil.printGoodbyeInfo();ConsoleInputUtilpackage cn.edu.buu.it;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class ConsoleInputUtil public static UserBean getConsoleInputUserInfo() throws IOException UserBe

8、an user = null;/创建UserBean对象String username = null;/字符串变量定义String password = null;System.out.print(请输入用户名称:);BufferedReader br = new BufferedReader(new InputStreamReader(System.in);/读取数据,输入操作,创建BufferedReader对象username = br.readLine();/读入姓名,保存至username中System.out.print(请输入用户密码:);password = br.readLi

9、ne();/读入密码,保存至password中user = new UserBean();/实例化UserBean对象user.setUsername(username);/通过set()方法,为对象赋值user.setPassword(password);user = new UserBean(username, password);/实例化User对象,并通过有参构造函数为对象赋初值return user;/返回对象ConsoleOutputUtilpackage cn.edu.buu.it;import java.util.Enumeration;import java.util.Has

10、htable;public class ConsoleOutputUtil /运行系统打印输出语句public static void printWelcomeInfo() System.out.println(*);System.out.println(欢迎使用学生成绩查询系统!);System.out.println(*);/退出系统打印输入语句public static void printGoodbyeInfo() System.out.println(*);System.out.println(谢谢使用学生成绩查询系统,再见!);System.out.println(*);/打印输出

11、学生成绩public static void printScoresInfo(Hashtable scores) throws Exception /这些方法主要通过向量的元素、哈希表的键以及哈希表中的值进行枚举。枚举也用于将输入流指定到 SequenceInputStream 中Enumeration e = scores.keys();/将哈希表赋值于Enumeration对象/实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素String cname = null;int score = -1;/打印所有

12、学生的成绩while (e.hasMoreElements() cname = (String) e.nextElement();/获取姓名score = (Integer)scores.get(cname);/通过键名获取学生成绩System.out.println(t + cname + : + score);DBUtilpackage cn.edu.buu.it;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;/* * 用于连接数据库的类 * 其它类如果需要访问数据

13、库,可调用该类获取可用的连接对象 * 需要先进行测试,看是否可以正常使用 */public class DBUtil private static String driver;/定义连接驱动方式字符串private static String url;/定义连接字符串private static String user;/定义访问数据库用户名private static String password;/定义访问数据库密码static driver = sun.jdbc.odbc.JdbcOdbcDriver;/ 使用 JDBC-ODBC 桥url = jdbc:odbc:School;/ 访

14、问Access数据库一般不需要用户名称和密码/* * 获取数据库连接对象 */public static Connection getConnection() throws ClassNotFoundException,SQLException Connection conn = null;/创建连接对象Class.forName(driver);/把JDBC驱动加载到JAVA虚拟机当中conn = DriverManager.getConnection(url);/加载连接驱动,并与数据库建立连接,其中数据库连接字符串用来标识数据库return conn;/返回连接连接对象/* * 关闭数据

15、库连接 */public static void closeConnection(Connection conn) try /异常处理conn.close();/关闭连接对象 catch (SQLException e) e.printStackTrace();/抛出异常public static void main(String args) Connection conn = null;/创建连接对象try conn = DBUtil.getConnection();/获取连接boolean state = conn.isClosed();/判断连接是否建立if (!state) Syste

16、m.out.println(已成功建立与数据库的连接!); catch (Exception e) e.printStackTrace(); finally DBUtil.closeConnection(conn);/关闭数据库连接System.out.println(已关闭与数据库的连接!);FunctionImplementationpackage cn.edu.buu.it;import java.io.BufferedReader;import java.io.InputStreamReader;import java.text.SimpleDateFormat;import java

17、.util.Date;import java.util.Hashtable;public class FunctionImplementation public static void addStudent() throws Exception BufferedReader br = new BufferedReader(new InputStreamReader(System.in);/读取数据,输入操作,创建BufferedReader对象String sno, sname, ssex, sdept;/创建字符串对象变量,学号,姓名,性别,系别Date sbirth;/date对象Syst

18、em.out.print(请输入学生学号:);sno = br.readLine();/读入学号,保存至sno中System.out.print(请输入学生姓名:);sname = br.readLine();/读入姓名,保存至sname中System.out.print(请输入学生性别:);ssex = br.readLine();/读入性别,保存至ssex中System.out.print(请输入学生出生日期,格式1989-05-12:);SimpleDateFormat sdf = new SimpleDateFormat();/创建SimpleDateFormat,日期格式对象sdf.

19、applyPattern(yyyy-mm-dd);/规定日期格式sbirth = sdf.parse(br.readLine();/读入出生日期,并进行格式化System.out.print(请输入学生系别:);sdept = br.readLine();/读入系别,保存至sdept中StudentBean student = new StudentBean();/创建学生对象student.setSno(sno);/为Student对象赋值,通过set()方法student.setSname(sname);student.setSsex(ssex);student.setSbirth(sbi

20、rth);student.setSdept(sdept);boolean b = SchoolCRUD.addStudent(student);/执行数据插入数据库操作if (b) System.out.println(添加学生成功!);/操作成功,打印输出语句public static void listScores() throws Exception System.out.print(请输入学号:);BufferedReader br = new BufferedReader(new InputStreamReader(System.in);/读取数据,输入操作,创建BufferedRe

21、ader对象String sno = br.readLine();/读入学号,保存至sno中Hashtable scores = SchoolCRUD.getScoresBySno(sno);/通过学号查询成绩并保存至哈希表中ConsoleOutputUtil.printScoresInfo(scores);/打印输出学生成绩public static void modifyPassword(UserBean user) throws Exception System.out.print(请输入旧密码:);BufferedReader br = new BufferedReader(new I

22、nputStreamReader(System.in);/读取数据,输入操作,创建BufferedReader对象String oldPassword = br.readLine();/读入密码,保存至 oldPassword中/判断输入密码是否正确if (!oldPassword.equals(user.getPassword() System.out.println(旧密码不正确!);return;else String newPassword = null;String newPasswordConfirm = null;int counter = 0;while (counter 3)

23、 System.out.print(请输入新密码:);newPassword = br.readLine();/读入密码,保存至 newPassword中System.out.print(请再次输入新密码:);newPasswordConfirm = br.readLine();/读入密码,保存至newPasswordConfirm中/判断两次密码是否正确if (newPassword.equals(newPasswordConfirm) break;else System.out.println(两次输入的密码不一致!);counter +;/如果连续输入密码错误累计三次退出if (coun

24、ter = 3) return;/执行密码修改操作boolean b = SchoolCRUD.modifyPassword(user, newPassword);if (b) System.out.println(修改密码成功!);/操作成功打印输出语句/* * 删除学生信息 */public static void deleteStudent() throws Exception System.out.print(请输入学号:);BufferedReader br = new BufferedReader(new InputStreamReader(System.in);/读取数据,输入操

25、作,创建BufferedReader对象String sno = br.readLine();/读入学号,保存至sno中System.out.print(你确定要删除该学生吗(y/n)? );String input = br.readLine();/读入字符,保存至input中/判断是否输入yif (input.equalsIgnoreCase(y) boolean b = SchoolCRUD.deleteStudentBySno(sno);/输入y,执行删除操作,通过学号if (b) System.out.println(删除学生信息成功!);/操作成功打印输出else if (inpu

26、t.equalsIgnoreCase(n) return;/输入n,退出系统else System.out.println(你的输入不正确!);/输入其他字符,打印输出语句FunctionMenupackage cn.edu.buu.it;import java.io.BufferedReader;import java.io.InputStreamReader;/* * 功能菜单类 */public class FunctionMenu /* * 显示功能菜单方法 */public static void showFunctionMenu(UserBean user) throws Exce

27、ption System.out.println(请输入你的选择,1-增加学生,2-查询成绩,3-修改密码,4-删除学生,5-退出:);BufferedReader br = new BufferedReader(new InputStreamReader(System.in);/读取数据,输入操作,创建BufferedReader对象String input = br.readLine();/读入输入字符串int i = Integer.parseInt(input);/将读入字符串类型转换为int类型,即类型转换switch (i) case 1: FunctionImplementati

28、on.addStudent(); break;/执行添加操作case 2: FunctionImplementation.listScores(); break;/执行打印输出学生成绩操作case 3: FunctionImplementation.modifyPassword(user);break;/执行修改用户密码操作case 4: FunctionImplementation.deleteStudent();break;/执行删除学生信息操作case 5:return;/退出系统default:System.out.println(你的选择非法!);/ 直接递归调用,再次显示功能菜单F

29、unctionMenu.showFunctionMenu(user);SchoolCRUDpackage cn.edu.buu.it;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.Date;import java.sql.ResultSet;import java.sql.Statement;import java.util.Hashtable;public class SchoolCRUD /* * 添加学生信息,并返回波尔值,判断是否添加成功 */public static bool

30、ean addStudent(StudentBean student) throws Exception boolean result = false;/声明返回值,即是否添加成功Connection conn = null;/创建连接对象PreparedStatement pstmt = null;/创建PreparedStatement对象String sql = INSERT INTO Student(sno, sname, ssex, sbirth, sdept) VALUES(?,?,?,?,?) ;/插入语句conn = DBUtil.getConnection();/获取连接ps

31、tmt = conn.prepareStatement(sql);/预编译sql语句pstmt.setString(1, student.getSno();/为SQL语句参数赋值pstmt.setString(2, student.getSname();pstmt.setString(3, student.getSsex();java.util.Date sbirth = student.getSbirth();/通过对象student的get方法获取出生日期值java.sql.Date date = new Date(sbirth.getTime();/创建date对象,并将出生日期转换为d

32、ate类型pstmt.setDate(4, date);/为SQL语句参数赋值pstmt.setString(5, student.getSdept();/为SQL语句参数赋值,设置插入系别的值int i = pstmt.executeUpdate();/执行插入操作,返回int类型,1:插入数据至数据库操作成功,0:操作失败if (i = 1) result = true;/插入成功返回trueelse result = false;/插入失败返回falsepstmt.close();/关闭PreparedStatement对象conn.close();/关闭数据库连接return resu

33、lt;public static Hashtable getScoresBySno(String sno) throws Exception /类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法Hashtable table = new Hashtable();/创建一个Hashtable实例Connection conn = null;Statement stmt = null;/创建statement对象ResultSet rs = null;/创建re

34、sultSet对象,结果集/String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据,String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。StringBuffer sql = new StringBuffer();sql.append(SELECT cname, score )/将字符串常量追加到StringBuffer类的对象sql的后面 .append(FROM SC, Course ) .append(WHERE Co = SC.cno AND sno = ) .append(sno) .a

35、ppend();conn = DBUtil.getConnection();/获取连接对象stmt = conn.createStatement();/实例化statement对象rs = stmt.executeQuery(sql.toString();/执行查询操作,并将查询结果保存至ResultSet对象String cname = null;/创建姓名字符串int score = -1;/若查询不为空while (rs.next() cname = rs.getString(cname);/姓名赋值操作,将所查到的姓名赋值给CNAME变量score = rs.getInt(score)

36、;/成绩赋值操作table.put(cname, score);/添加key/键值对,保存到哈希表中,name为键,score为保存值rs.close();/关闭resultSet对象stmt.close();/关闭statemt对象conn.close();/关闭Connection对象return table;/* * 更新用户密码 */public static boolean modifyPassword(UserBean user, String newPassword) throws Exception boolean result = false;/创建返回值Connection

37、 conn = null;/创建连接对象PreparedStatement pstmt = null;/创建PrepareStatement对象String sql = UPDATE UserInfo SET password = ? WHERE username = ?;/SQL语句,更新conn = DBUtil.getConnection();/获取数据库连接对象pstmt = conn.prepareStatement(sql);/实例化PrepareStatement对象,并进行预编译pstmt.setString(1, newPassword);/为SQL语句参数赋值pstmt.s

38、etString(2, user.getUsername();int i = pstmt.executeUpdate();/执行更新操作,返回int类型,1:更新数据操作成功,0:操作失败if (i = 1) result = true;/更新成功返回trueelse result = false;/更新失败返回falsepstmt.close();/关闭PreparedStatement对象conn.close();/关闭Connection对象return result;/返回是否操作成功public static boolean deleteStudentBySno(String sno

39、) throws Exception boolean result = false;/创建返回值Connection conn = null;/创建连接对象PreparedStatement pstmt = null;/创建PrepareStatement对象String sql = DELETE FROM Student WHERE sno = ?;/SQL语句,删除数据操作conn = DBUtil.getConnection();/获取数据库连接对象pstmt = conn.prepareStatement(sql);/实例化PrepareStatement对象,并进行预编译pstmt.

40、setString(1, sno);/为SQL语句参数赋值int i = pstmt.executeUpdate();/执行删除操作,返回int类型,1:删除数据操作成功,0:操作失败if (i = 1) result = true;/删除成功返回trueelse result = false;/删除失败返回falsepstmt.close();/关闭PreparedStatement对象conn.close();/关闭Connection对象return result;/返回是否操作成功StudentBeanpackage cn.edu.buu.it;import java.util.Dat

41、e;/* * Student对象JAVA BEAN */public class StudentBean private String sno;/学号属性private String sname;/学生姓名private String ssex;/学生性别private Date sbirth;/学生出生年月日private String sdept;/学生系别/* * 学生属性数据封装 */获取学号public String getSno() return sno;/设置学号参数值public void setSno(String sno) this.sno = sno;/获取姓名publi

42、c String getSname() return sname;/设置学生姓名参数public void setSname(String sname) this.sname = sname;/获取性别public String getSsex() return ssex;/设置性别参数public void setSsex(String ssex) this.ssex = ssex;/获取出生日期public Date getSbirth() return sbirth;/设置出生日期public void setSbirth(Date sbirth) this.sbirth = sbirth;/获取系别public String getSdept() retu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 绩效管理


经营许可证编号:宁ICP备18001539号-1