




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
java程序设计实训报告一、 系统功能说明“学生成绩查询系统”模仿简单教务系统,通过用户名和密码登陆,可存储用户信息、学生个人信息、课程和成绩等内容,并可进行增删查改四个基本操作。实现“教师录入成绩,学生查询成绩”的目的。 系统的不足之处:系统功能开发不全面,仅能实现记录一门课成绩,无更多增强功能。安全级别不够高,易遭到攻击破坏和篡改。界面不友好、不美观,个别位置有小漏洞:在选择功能菜单的按钮时,系统只设计了支持阿拉伯数字。当用户输入英文字母或者其他文字时,整个程序则无法运行。增加学生就是按学生学号增加,系统没有严格规定必须输入相同位数的学生学号。成绩查询,修改密码和删除学生都是按学生学号实现,在删除学生这个功能里,数据库中没有存的学生信息也可以删除。二、 数据库的简单介绍此系统数据库为access数据库,包括四个表,分别为student表,sc表,course表和userinfo表,分别存储学生信息、成绩、课程和用户信息的内容。sc表里记录了sno、cno、score信息course表里记录cno、course、ccredit、ctype信息student表里记录了sno、sname、sbirth、sdept信息 userinfo表里记录了username、password信息程序通过dbutil类、schoolcrud类实现与数据库相连三、 程序中的类以及对类的理解程序中包含10个类: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。其中,我的理解application为主类consoleinpututil、consoleoutpututil这两个类与界面输入输出有关dbutil、schoolcrud与数据库相连实现相应功能functionmenu类显示菜单信息functionimplementation类主要实现增删查改功能studentbean、userbean实现封装userloginutilis验证信息,实现用户登录四、 程序与注释applicationpackage .buu.it;public class application public static void main(string args) throws exception / 输出欢迎信息consoleoutpututil.printwelcomeinfo();/ 读取用户的输入信息userbean user = null;user = consoleinpututil.getconsoleinputuserinfo();system.out.println(用户名: + user.getusername();system.out.println( 密码: + user.getpassword();/ 用户登录判断boolean isusernameright = userloginutil.isusernameright(user);/查询用户名boolean ispasswordright = userloginutil.ispasswordright(user);/查询密码/判断用户是否存在if (!isusernameright) system.out.println(用户名不存在!);return;/判断密码是否正确else if (!ispasswordright) system.out.println(密码错误!);return;/用户名,密码均正确打印输出语句,显示功能菜单else system.out.println(登录成功!);/ 显示功能菜单并进行相应处理functionmenu.showfunctionmenu(user);/打印输出退出提示信息consoleoutpututil.printgoodbyeinfo();consoleinpututilpackage .buu.it;import java.io.bufferedreader;import java.io.ioexception;import java.io.inputstreamreader;public class consoleinpututil public static userbean getconsoleinputuserinfo() throws ioexception userbean 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.readline();/读入密码,保存至password中user = new userbean();/实例化userbean对象user.setusername(username);/通过set()方法,为对象赋值user.setpassword(password);user = new userbean(username, password);/实例化user对象,并通过有参构造函数为对象赋初值return user;/返回对象consoleoutpututilpackage .buu.it;import java.util.enumeration;import java.util.hashtable;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(*);/打印输出学生成绩public static void printscoresinfo(hashtable scores) throws exception /这些方法主要通过向量的元素、哈希表的键以及哈希表中的值进行枚举。枚举也用于将输入流指定到 sequenceinputstream 中enumeration e = scores.keys();/将哈希表赋值于enumeration对象/实现 enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextelement 方法将返回一系列的连续元素string cname = null;int score = -1;/打印所有学生的成绩while (e.hasmoreelements() cname = (string) e.nextelement();/获取姓名score = (integer)scores.get(cname);/通过键名获取学生成绩system.out.println(t + cname + : + score);dbutilpackage .buu.it;import java.sql.connection;import java.sql.drivermanager;import java.sql.sqlexception;/* * 用于连接数据库的类 * 其它类如果需要访问数据库,可调用该类获取可用的连接对象 * 需要先进行测试,看是否可以正常使用 */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;/ 访问access数据库一般不需要用户名称和密码/* * 获取数据库连接对象 */public static connection getconnection() throws classnotfoundexception,sqlexception connection conn = null;/创建连接对象class.forname(driver);/把jdbc驱动加载到java虚拟机当中conn = drivermanager.getconnection(url);/加载连接驱动,并与数据库建立连接,其中数据库连接字符串用来标识数据库return conn;/返回连接连接对象/* * 关闭数据库连接 */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) system.out.println(已成功建立与数据库的连接!); catch (exception e) e.printstacktrace(); finally dbutil.closeconnection(conn);/关闭数据库连接system.out.println(已关闭与数据库的连接!);functionimplementationpackage .buu.it;import java.io.bufferedreader;import java.io.inputstreamreader;import java.text.simpledateformat;import java.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对象system.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.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(sbirth);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);/读取数据,输入操作,创建bufferedreader对象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 inputstreamreader(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) 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 (counter = 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);/读取数据,输入操作,创建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 (input.equalsignorecase(n) return;/输入n,退出系统else system.out.println(你的输入不正确!);/输入其他字符,打印输出语句functionmenupackage .buu.it;import java.io.bufferedreader;import java.io.inputstreamreader;/* * 功能菜单类 */public class functionmenu /* * 显示功能菜单方法 */public static void showfunctionmenu(userbean user) throws exception 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: functionimplementation.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(你的选择非法!);/ 直接递归调用,再次显示功能菜单functionmenu.showfunctionmenu(user);schoolcrudpackage .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 boolean 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();/获取连接pstmt = 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对象,并将出生日期转换为date类型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 result;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;/创建resultset对象,结果集/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) .append();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);/成绩赋值操作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 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.setstring(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) 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.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 .buu.it;import java.util.date;/* * 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;/获取姓名public 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() return sdept;/设置系别参数public void setsdept(string sdept) this.sdept = sdept;userbeanpackage .buu.it;/ 实体类,与数据库中的 userinfo 表对应public class userbean private string username;/用户名属性private string password;/密码属性/无参构造函数public userbean() /有参构造函数,为属性值赋初值public userbean(string username, string password) this.username = username;this.password = password;/* * 用户属性数据封装 */获取用户名public string getusername() return username;/设置用户名public void setusername(string username) this.username = username;/获取密码值public string getpassword() return password;/设置密码值public void setpassword(string password) this.password = password;userloginutilpackage .buu.it;import java.sql.connection;import java.sql.resultset;import java.sql.statement;public class userloginutil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论