密号研究生请勿填写
山东理工大学研究生课程考试
答 题 纸
姓 名 任珈漪
学 号 14505050396
专 业 计算机技术
考 试 科 目 Java 语言程序设计
考 试 时 间 2014年12月29日
注意:此半页研究生勿用
学生管理系统-阶段项目2
一、系统分析
本文目的是,设计一个学生管理系统,要求登录后可以实现对学员的增加和查询的功能,并提供良好的操作界面。
经过分析系统的需求,抽象出管理员实体、学生实体,从管理员实体中抽象出来的数据有用户名和密码,从学生实体中抽象出来的数据有学生Id,学生姓名,出生日期,电话,地址。
本文首先经过分析与查阅资料,确定了基本的设计方案。然后分成四个模块进行逐步设计。主要有创建学生实体、创建管理员实体、设计工具类和界面设计四个部分。
第一部分里主要确定学生类和构造方法,以及学生对象的五个属性。
第二部分里主要设计管理员类和学生业务类,并将HashMap对象保存到文件,然后实现从文件中读取HashMap对象,在这一部分里同时实现了学生对象的写入、删除、修改等功能设计。
第三部分里主要设计工具类,为第四部分界面的实现做准备。
第四部分里主要创建登陆界面、主界面、添加界面和显示所有界面的功能。实现由代码到输出显示的过程。
整体上来讲,第一和第三部分是为第二和第四部分做准备的。第一部分创建好类,方法,对象之后在第二部分才能对对象进行各种操作,比如写入、删除,第三部分创建好工具类之后在第四部分才能运用工具类实现界面的显示和信息的输出。
本文的学生管理系统涉及到的技术点有:
1、I/O流
2、HashMap的使用
3、异常处理
4、Scanner的使用
2.1创建学生实体
1、首先,按要求将学生Student类,打包在com.handson.stumanager.domain包中。
2、设计学生Student类来存储相应信息。设计一个缺省的和带参数的public Student() 构造函数来获取数据,同时将对象属性“学生编号”,“学生姓名”,“学生生日”,“学生电话”,“电话住址”写成私有private,不打破面向对象的封装特性。
3、设计public setter/getter方法。
4、为学生类添加toString方法。将字段连成一个字符串然后返回。
2.2创建管理员实体
1、将管理员Admin类打包在com.handson.stumanager.domain包中。设计一个登录操作类,命名为LoginBO。
2、设计checkUser行为,接收管理员对象,用if语句验证用户登陆是否成功。如果用户名是admin密码是123456,则返回true否则false。
3、根据I/O流知识,导入调用方法。
4、设计学生操作类。命名为StudentBO。
5、设计一个addStudent行为,接收学生对象,用于把一个已经构建好的学生对象添加到HashMap中。以学生ID为键。如果用户输入的学生ID在studentMap中已经包含,就调用Tool类显示“已经存在”,如果不包含则接收学生对象。这个过程用if,else 语句来实现。
6、设计一个delStudent行为,用于删除一个学生对象。用学生ID来判断studentMap 中是否包含想要删除的学生ID,若包含则remove,调用Tool工具类来显示“删除成功”,若不包含则显示“指定的学号不存在”。这个过程用if,else语句来实现。
7、设计一个saveStudentMapToFile行为,用于把HashMap对象保存到文件中。并进行异常处理。
8、设计一个displayAllStudent的行为,用于查询HashMap中所有的学生对象。
9、设计一个readStudentMapFromFile行为,用于从文件中读取HashMap对象。并进行异常处理。
2.3设计工具类
1、将工具类Tools,打包在com.handson.stumanager.tools包中。运用Scanner接受输入值。
2、把方法设计成static的,且把之前程序中的打印输出全都换成当前类的方法调用。即Tools类提供重载方法println()和print(),让其接收不同的数据并能打印字符串,数字,布尔值和换行等。
1、设计一个界面类StuManagerCUI,放在com.handson.stumanager.view包中。用于创建登录界面、主界面、添加界面、显示所有界面。并导入Student、LoginBO、StudentBO、Tool方法。
2、设计登陆验证的方法loginCUI,使用for循环使用户可以有三次登陆机会,若三次均未正确输入用户名和密码就请退出。
3、设计进入主界面方法mainCUI,用while语句在界面上显示“添加学生”,“查看所有学生”,“删除学生”,“修改学生信息”,“退出系统”,“请选择(1-5)”,这个用swich,case语句来完成。
4、设计添加学生信息方法addStudentCUI,使界面上能够显示“学生信息添加界面”,“学号”,“姓名”,“出生日期”,“电话”,“住址”,若用户将信息添加成功要显示“添加成功”。
5、设计删除学生方法deleteStudent,界面上能显示“要删除的学号”。
6、查看学生信息方法。界面上能够显示“查看所有学生信息界面”,也要显示“学号”,“姓名”,“出生日期”,“电话”,“地址”。
7、设计测试类。若smc.loginCUI方法正确,就使用这个方法。
三、系统实现
3.1创建学生实体
1、创建学生类:
package com.handson.stumanager.domain;
public class Student implements java.io.Serializable
2、设置对象属性:
{ private int stuId;
private String stuName;
private String stuBirthday;
private String stuPhone;
private String stuAddress;
public Student() { }
public Student(int stuId, String stuName, String stuBirthday,String stuPhone,String stuAddress)
{ this.stuId = stuId;
this.stuName = stuName;
this.stuBirthday = stuBirthday;
this.stuPhone = stuPhone;
this.stuAddress = stuAddress; }
public int getStuId()
{ return stuId; }
3、设计public setter/getter方法:
public void setStuId(int stuId)
{this.stuId = stuId; }
public String getStuName()
{return stuName; }
public void setStuName(String stuName)
{this.stuName = stuName; }
public String getStuBirthday()
{return stuBirthday; }
public void setStuBirthday(String stuBirthday)
{this.stuBirthday = stuBirthday; }
public String getStuPhone()
{return stuPhone; }
public void setStuPhone(String stuPhone)
{this.stuPhone = stuPhone; }
public String getStuAddress()
{return stuAddress; }
public void setStuAddress(String stuAddress)
{this.stuAddress = stuAddress; }
4、学生类的toString方法:
String stuStr;
public String toString() {
stuStr = stuId + "\t" + stuName + "\t" + stuBirthday + "\t" + stuPhone + "\t\t" + stuAddress;
return stuStr; } }
3.2创建管理员实体
1、设计登陆操作类和checkUser对象:
package com.handson.stumanager.servic;
public class LoginBO {
public boolean checkUser(String uid, String pwd) {
boolean bn = false;
// 如果输入的是正确的用户和密码返回true
if (uid.equals("admin") && pwd.equals("123456")) {
bn = true;}
return bn;}}
package com.handson.stumanager.servic;
2、导入方法:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Set;
import com.handson.stumanager.domain.Student;
import com.handson.stumanager.tools.Tools;
3、//学生业务类
public class StudentBO {
HashMap studentMap;
public StudentBO() {
studentMap = new HashMap();
this.readStudentMapFromFile();}
4、// 把一个已经构建好的学生对象放入studentMap对象中,以学生ID为键
public void addStudent(Student stud) {
if(studentMap.containsKey(stud.getStuId()))
{ Tools.print("已经存在");
return; }
studentMap.put(stud.getStuId(), stud);}
5、// 删除一个学生对象
public void delStudent(String id) {
if(studentMap.containsKey(Integer.parseInt(id)))
{ studentMap.remove(Integer.parseInt(id));
Tools.print("删除成功!"); }
else { Tools.print("指定的学号不存在"); } }
6、//修改学生信息
public void updateStudent(String id)
{systerm.out.println("要修改的学生学号");
private static Scanner input=new Scanner(system.in);
studentID=in.next();
studentMap.put(stud.getStuID(),stud);
if(studentMap.containsKey(Integer.parseInt(id)));
{ studentMap.put(stud.getStuId(), stud);
Tools.print("修改成功!"); }
else{ Tools.print("指定的学号不存在"); } }
7、// 把HashMap对象保存到文件中
public void saveStudentMapToFile() {
ObjectOutputStream oos = null;
try { FileOutputStream fos = new FileOutputStream("student.dat");
oos = new ObjectOutputStream(fos);
oos.writeObject(this.studentMap); }
catch (FileNotFoundException e)
{ e.printStackTrace(); }
catch (IOException e)
{ e.printStackTrace(); }
finally { try { if (oos != null)
oos.close(); }
catch (IOException e) { e.printStackTrace(); } } } 8、// 把在studentMap中的所有学生对象全部显示出来
public void displayAllStudents()
{ Set keySet = studentMap.keySet();
for (Object obj : keySet)
{ Integer key = new Integer(Integer.parseInt(obj.toString()));
Tools.print((Student) studentMap.get(key)); }}
9、// 从文件中读取HashMap对象
public void readStudentMapFromFile() {
ObjectInputStream ois = null;
try{ //获取文件
File file = new File("student.dat");
if (!file.exists() || file.length()==0){
file.createNewFile();
return ; }
FileInputStream fis = new FileInputStream("student.dat");
ois = new ObjectInputStream(fis);
Object obj = ois.readObject();
if (obj != null)
this.studentMap = (HashMap)obj; }
catch(Exception e) { e.printStackTrace(); }
finally { try { if (ois != null)
{ ois.close(); } }
catch (Exception e) { e.printStackTrace(); }}}} 3.3设计工具类
package com.handson.stumanager.tools;
import java.util.Scanner;
import com.handson.stumanager.domain.Student;
1、设计工具类:
public class Tools {
private static Scanner input = new Scanner(System.in);
public static String readLine(){
return input.next(); }
public static void println(String str) {
System.out.println(str); }
public static void print(String str2) {
System.out.println(str2); }
public static void print(Student s) {
System.out.println(s); } }
3.4界面设计
package com.handson.stumanager.view;
import com.handson.stumanager.domain.Student;
import com.handson.stumanager.servic.LoginBO;
import com.handson.stumanager.servic.StudentBO;
import com.handson.stumanager.tools.Tools;
1、设计界面类StuManagerCUI :
public class StuManagerCUI {
StudentBO studentBO = new StudentBO();
2、设计登录验证的方法loginCUI:
public boolean loginCUI() {
boolean bl = false;
LoginBO am = new LoginBO();
Tools.println("\t学生管理系统登录界面");
for (int i = 0; i < 3; i++) {
Tools.print("用户名:");
String uid = Tools.readLine();
Tools.print("密码:");
String pwd = Tools.readLine();
if (am.checkUser(uid, pwd)) {
bl = true;
return bl; } }
Tools.println("对不起,您三次未输入正确,请退出");
return bl; }
运行结果:
3、进入主界面的方法mainCUI:
public void mainCUI() {
String tag = "";
int choice = 0;
while (!tag.equals("5")) {
System.out.println("\n");
System.out.println("\t学生管理系统主界面");
System.out.println("1.添加学生");
System.out.println("2.查看所有学生");
System.out.println("3.删除学生");
System.out.println("4.修改学生信息");
System.out.println("5.退出系统");
System.out.print("请选择(1-5):");
tag = Tools.readLine();
choice = Integer.parseInt(tag);
switch (choice) {
case 1:// 增加学生信息
addStudentCUI(); break;
case 2:// 查看所有学生信息
selectStudentCUI(); break;
case 3: deleteStudent(); break;
case 4: break;
case 5:// 退出系统
Tools.println("退出系统,谢谢使用");
System.exit(0); } } }
运行结果:
4、增加学生信息addStudentCUI:
public void addStudentCUI() {
Tools.println("\t学生信息添加界面\t");
Tools.print("学号:");
int stuId = Integer.parseInt(Tools.readLine());
Tools.print("姓名:");
String stuName = Tools.readLine();
Tools.print("出生日期:");
String stuBirthday = Tools.readLine();
Tools.print("电话:");
String stuPhone = Tools.readLine();
Tools.print("住址:");
String stuAddress = Tools.readLine();
studentBO.addStudent(new Student(stuId, stuName, stuBirthday, stuPhone, stuAddress));
studentBO.saveStudentMapToFile();
Tools.print("添加成功"); }
运行结果:
5、删除学生信息:
public void deleteStudent()
{ Tools.println("要删除的学号:");
String xuehao = Tools.readLine();
studentBO.delStudent(xuehao);
studentBO.saveStudentMapToFile(); }
运行结果:
6、查看学生全部信息:
public void selectStudentCUI() {
Tools.println("\t查看所有学生信息界面\t");
Tools.println("学号\t姓名\t出生日期\t\t电话\t\t住址");
studentBO.displayAllStudents(); } }
package com.handson.stumanager.view;
运行结果:
7、测试类:
public class StuManagerRun {
public static void main(String[] args) {
StuManagerCUI smc = new StuManagerCUI();
if (smc.loginCUI()) {
smc.mainCUI(); } } }
四、设计总结
通过本次项目设计让我进一步了解了java编程的过程,对java 语言的使用更加熟练,理解也更加透彻。从拿到一个题目开始到初步构思,进一步设计,逐个模块的分析和规划,最终整体上的完成,整个过程都让我很有收获。以前对一些关键字和I/O流的运用不是很准确,现在掌握的好多了。不足之处就是自己在独立程序设计方面尚有不足之处。应该多加练习。