资源描述
. .
目 录
1设计目的及容要求1
2 系统总体设计1
3 系统详细设计2
4 运行结果及分析17
致谢21
参考文献22
. .word.zl.
. .
简单学生成绩管理系统的设计与实现
1设计目的及容要求
1、 设计目的:
稳固和加深学生对高级语言程序设计课程的根本知识的理解和掌握,掌握java语言编程和程序调试的根本技能,利用java语言进展根本的软件设计,提高运用java语言解决实际问题的能力。
2、 容要求
实现学生成绩的管理〔增、删、改、查询、持久化、成绩排序、成绩统计等功能〕,在文件中增加、删除、学生信息,根据学号查询、修改学生信息,统计功能求每个人的总分并按从高到低排序,通过这些操作对文件中的信息保存。
2 系统总体设计
成功登陆系统以后,出现成绩管理界面,系统初始化,可对学生成绩进展增加、删除、查询、修改、统计,进入相应界面进展成绩管理,退出系统自动保存本次操作容,保存信息。
简易流程图:
登陆
成绩管理界面
增加
删除
查询
修改
统计
退出
3 系统详细设计
①
创立Student类,设置变量及对应方法
Student.java代码:
package keshe;
import java.io.Serializable;
publicclassStudentimplements Serializable{
private String name;
privateintnum;
privateintyuwen;
privateintshuxue;
privateintjava;
privateintsum=0;
public Student(){
}
public Student(String name, int num, int yuwen, int shuxue,
int java) {
super();
this.name = name;
this.num = num;
this.yuwen = yuwen;
this.shuxue = shuxue;
this.java = java;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
publicint getNum() {
returnnum;
}
publicvoid setNum(int num) {
this.num = num;
}
publicint getYuwen() {
returnyuwen;
}
publicvoid setYuwen(int yuwen) {
this.yuwen = yuwen;
}
publicint getShuxue() {
returnshuxue;
}
publicvoid setShuxue(int shuxue) {
this.shuxue = shuxue;
}
publicint getJava() {
returnjava;
}
publicvoid setJava(int java) {
this.java = java;
}
publicint getSum() {
returnsum;
}
publicvoid setSum(int sum) {
this.sum = sum;
}
public String toString() {
return"Student [name=" + name + ", num=" + num + ", yuwen=" + yuwen
+ ", shuxue=" + shuxue + ", java=" + java + ", sum=" + sum
+ "]";
}
}
②
Student管理类StuC,创立对应方法,实现对Student对象的操作〔增、删、改、查询、持久化、成绩排序、成绩统计等功能〕供其对象调用。
StuC.java代码
package keshe;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
public class StuC {
ArrayList <Student> al=new ArrayList<Student>();
File file = new File("e:/mydata.dat");
//添加
public void adds(Student s){
al.add(s);
}
//删除
public void del(int n){
for(int i=0;i<al.size();i++){
if(al.get(i).getNum()==n)
al.remove(i);
}
}
//求总分
public void sum(){
for(int i=0;i<al.size();i++){
al.get(i).setSum(al.get(i).getJava()+al.get(i).getShuxue()+al.get(i).getYuwen());
}
}
//排序
public void sort() {
for (int i = 0; i < al.size(); i++) {
for (int j = 0; j < al.size()-1-i; j++) {
if (al.get(j).getSum() < al.get(j+1).getSum()) {
Object o=al.get(j);
al.set(j, al.get(j+1));
al.set(j+1, (Student) o);
}
}
}
}
public void paint(){
for(int i=0;i<al.size();i++){
System.out.println(al.get(i));
}
}
public String toString() {
return "StuC [al=" + al + "]";
}
//输出流
public void stor()
{
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(al);
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//输入流
public void read()
{
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream(file));
try {
al = (ArrayList<Student>)in.readObject();
} catch (ClassNotFoundException e) {
al=null;
}
in.close();
} catch (FileNotFoundException e) {
File file = new File("e:/mydata.dat");
} catch (IOException e) {
e.printStackTrace();
}
}
//查找
public Student find(int n)
{
for(int i=0;i<al.size();i++){
if(al.get(i).getNum()==n){
return al.get(i);
}
}
return null;
}
}
③
登陆界面及成绩管理的所有界面,同过创立StuC的对象,调用其方法实现成绩管理
代码:
package keshe;
import java.awt.*;
import java.awt.event.*;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.*;
public class Login extends JFrame {
private TextField f1;
private TextField f2;
private utton b1;
private utton b2;
private utton b3;
StuC scs=new StuC();
//登陆界面
public Login(){
Container cp=getContentPane();//容器
cp.setLayout(new GridLayout(3,1));//三行一列布局
Label l1=new Label("用户名");
Label l2=new Label("密 码");
Panel p1=new Panel();
Panel p2=new Panel();
Panel p3=new Panel();
f1=new TextField(10);
f2=new TextField(10);
f2.setEchoChar('*');//回显字符为*
b1=new utton("登录");
b2=new utton("重置");
b3=new utton("退出");
p1.add(l1);//第一行添加label 1
p1.add(f1);
p2.add(l2);
p2.add(f2);
p3.add(b1);
p3.add(b2);
p3.add(b3);
cp.add(p1);
cp.add(p2);
cp.add(p3);
b1.addActionListener(new Enter());
b2.addActionListener(new ReWrite());
b3.addActionListener(new Close());
}
class Enter implements ActionListener{
public void actionPerformed(ActionEvent e)
{
if((f1.getText()).equals("yazhou")&&(f2.getText()).equals("123456"))
{
scs.read();//初始化,从文件读入信息
XueSheng frame1 = new XueSheng();
frame1.setBounds(200, 200, 300, 300);
frame1.setVisible(true);
}
else JOptionPane.showMessageDialog(null, "用户名或密码错误,请重新登录!");
}
}
class ReWrite implements ActionListener{
public void actionPerformed(ActionEvent e)
{
f1.setText("");
f2.setText("");
f1.requestFocus();
}
}
class Close implements ActionListener{
public void actionPerformed(ActionEvent e)
{
utton bt=(utton)e.getSource();
if(bt==b3){
System.exit(0);
}
}
}
//主函数 程序开场
public static void main(String[] args) {
Login log=new Login();
log.setTitle("系统登录");
log.setBounds(200, 200, 300, 300);
log.setBackground(Color.blue);
log.setVisible(true);
}
//信息管理界面部类 进展初始化和保存
class XueSheng extends JFrame implements ActionListener {
private utton cx, zj, tc, sc,xg,tj;
public XueSheng()
{
Container c = this.getContentPane();
c.setLayout(new GridLayout(3, 1));
c.setFont(new Font("true",Font.TRUETYPE_FONT,13));
JPanel panel2 = new JPanel();
JPanel panel1 = new JPanel();
JLabel label1 = new JLabel("欢迎进入成绩管理",SwingConstants.CENTER);
label1.setFont(new Font("true",Font.TRUETYPE_FONT,13));
label1.setForeground(Color.blue);
c.add(label1);
//添加按钮
cx = new utton("查询");
panel2.add(cx);
zj = new utton("增加");
panel2.add(zj);
sc = new utton("删除");
panel2.add(sc);
tc = new utton("退出");
panel2.add(tc);
xg = new utton("修改");
panel1.add(xg);
tj = new utton("统计");
panel1.add(tj);
c.add(panel2);
c.add(panel1);
cx.addActionListener(this);
zj.addActionListener(this);
sc.addActionListener(this);
xg.addActionListener(this);
tc.addActionListener(this);
tj.addActionListener(this);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == cx) {
Find f = new Find();
}
if(e.getSource()==zj){
AddFI f = new AddFI();
}
if(e.getSource()==sc){
Delet d = new Delet();
}
if(e.getSource()==xg){
XiuGai x=new XiuGai();
}
if(e.getSource()==tc){
shutDown();
}
if(e.getSource()==tj){
Tongji t=new Tongji();
}
}
private void shutDown()
{
scs.stor();
JOptionPane.showMessageDialog(null, "信息已保存");
this.dispose();
}
}
//增加信息界面部类,捕获文本框息创立Student对象,添加到Arraylist中,如果已存在该学号//给出提示信息,并重新添加。
class AddFI extends JFrame implements ActionListener {
private JTextField STNOText, SNAMEText, MAText, CHIText, JAVAText;
private utton b1, b2, b3;
private String STNO, SNAME,MAT, CHI, JAVA;
public AddFI() {
super("添加学生信息");
Container c2 = this.getContentPane();
c2.setLayout(new GridLayout(3, 1));
JPanel center = new JPanel(new GridLayout(5, 2));
JPanel low = new JPanel(new FlowLayout());
JLabel label1 = new JLabel("添加学生信息", SwingConstants.CENTER);
label1.setFont(new Font("TRUE", Font.TRUETYPE_FONT, 20));
c2.add(label1);
STNOText = new JTextField(30);//30列文本框
SNAMEText = new JTextField(30);
CHIText = new JTextField(30);
MAText = new JTextField(30);
JAVAText = new JTextField(30);
center.add(new JLabel("学号", SwingConstants.CENTER));//添加标签学号写在标签中间
center.add(STNOText);//添加文本框
center.add(new JLabel("XX", SwingConstants.CENTER));
center.add(SNAMEText);
center.add(new JLabel("语文", SwingConstants.CENTER));
center.add(CHIText);
center.add(new JLabel("数学", SwingConstants.CENTER));
center.add(MAText);
center.add(new JLabel("java", SwingConstants.CENTER));
center.add(JAVAText);
c2.add(center);
b1 = new utton("添加");
b2 = new utton("去除");
b3 = new utton("退出");
low.add(b1);
low.add(b2);
low.add(b3);
c2.add(low);
// 添加监听
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
this.setBounds(200, 200, 600, 400);
this.setVisible(true);
this.setTitle("添加学生信息");
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) {
try {
addFI();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (e.getSource() == b2) {
clearForm();
}
if (e.getSource() == b3) {
this.dispose();
}
}
private void addFI() throws FileNotFoundException, IOException {
STNO = STNOText.getText();
SNAME = SNAMEText.getText();
CHI = CHIText.getText();
MAT = MAText.getText();
JAVA = JAVAText.getText();
if (STNO.length() == 0 || SNAME.length() == 0 || MAT.length() == 0
|| JAVA.length() == 0 || CHI.length() == 0)
JOptionPane.showMessageDialog(this, "请添加完全信息");
else {
Student a=new Student(SNAME,Integer.parseInt(STNO),
Integer.parseInt(CHI),Integer.parseInt(MAT),Integer.parseInt(JAVA));
int b=0;
for(int i=0;i<scs.al.size();i++){
if(scs.al.get(i).getNum()==Integer.parseInt(STNO)){
b=1;
}
}
if(b==0){
scs.adds(a);
JOptionPane.showMessageDialog(this, "添加成功");
}
else{
JOptionPane.showMessageDialog(this, "已存在");
}
}
}
private void clearForm() {
STNOText.setText("");
SNAMEText.setText("");
MAText.setText("");
CHIText.setText("");
JAVAText.setText("");
}
}
//查询信息界面部类,根据输入的学号,在arraylist中查找对应学号的学生信息,分别输出
class Find extends JFrame implements ActionListener {
private JTextField STNOText, SNAMEText, MAText, CHIText, JAVAText;
private String STNO;
private utton b1, b2;
public Find() {
Container c1 = this.getContentPane();
c1.setLayout(new GridLayout(4, 1));
JLabel label1 = new JLabel("查询学生信息", SwingConstants.CENTER);
JLabel label0 = new JLabel("请输入你的学号",SwingConstants.CENTER);
JPanel pp = new JPanel(new GridLayout(2, 1));
pp.add(label1);
pp.add(label0);
c1.add(pp);
JPanel p1 = new JPanel();
STNOText = new JTextField(10);
p1.add(STNOText);
c1.add(p1);
JPanel p2 = new JPanel();
b1 = new utton("查询");
b2 = new utton("退出");
b1.addActionListener(this);
b2.addActionListener(this);
p2.add(b1);
p2.add(b2);
c1.add(p2);
JPanel center = new JPanel(new GridLayout(4, 2));
SNAMEText = new JTextField(30);
CHIText = new JTextField(30);
MAText = new JTextField(30);
JAVAText = new JTextField(30);
center.add(new JLabel("XX", SwingConstants.CENTER));
center.add(SNAMEText);
center.add(new JLabel("语文", SwingConstants.CENTER));
center.add(CHIText);
center.add(new JLabel("数学", SwingConstants.CENTER));
center.add(MAText);
center.add(new JLabel("java", SwingConstants.CENTER));
center.add(JAVAText);
c1.add(center);
this.setVisible(true);
this.setBounds(200, 200, 400, 300);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == b1) {
STNO = STNOText.getText();
int k=0;
for(int i=0;i<scs.al.size();i++)
{
if(Integer.parseInt(STNO)==scs.al.get(i).getNum())
{
SNAMEText.setText(scs.al.get(i).getName());
MAText.setText(String.valueOf(scs.al.get(i).getShuxue()));
CHIText.setText(String.valueOf(scs.al.get(i).getYuwen()));
JAVAText.setText(String.valueOf(scs.al.get(i).getJava()));
k=1;
}
}
if(k==0){
JOptionPane.showMessageDialog(this, "查无此人");
}
}
if (e.getSource() == b2) {
this.dispose();
}
}
}
//删除信息界面,通过输入的学号进展查找并在arraylist中移除
class Delet extends JFrame implements ActionListener{
private utton yes;
private utton cancle;
private JTextField text1;
private String STNO;
public Delet(){
Container c3 = this.getContentPane();
c3.setLayout(new GridLayout(3, 1));
c3.setFont(new Font("true",Font.TRUETYPE_FONT,13));
JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JLabel label1 = new JLabel("删除学生信息",SwingConstants.CENTER);
label1.setFont(new Font("true",Font.TRUETYPE_FONT,13));
label1.setForeground(Color.blue);
c3.add(label1);
JLabel label2 = new JLabel("请输入学号");
text1 = new JTextField(10);
p1.add(label2);
p1.add(text1);
c3.add(p1);
yes = new utton("确定");
cancle = new utton("退出");
p2.add(yes);
p2.add(cancle);
c3.add(p2);
yes.addActionListener(this);
cancle.addActionListener(this);
this.setTitle("删除学生信息");
this.setBounds(200,200,400,300);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==yes){
delt();
}
if(e.getSource()==cancle){
this.dispose();
}
}
private void delt(){
STNO = text1.getText();
scs.del(Integer.parseInt(STNO));
JOptionPane.showMessageDialog(this, "删除成功");
}
}
//统计界面,对arraylist中所有对象进展求总分,并按总分从到达小排序
class Tongji extends JFrame implements ActionListener{
private utton b1,b2;
JTextArea t;
public Tongji(){
Container c1 = this.getContentPane();
c1.setLayout(new GridLayout(3, 1));
JPanel p1 =new JPanel();
JLabel label1 = new JLabel("统计信息", SwingConstants.CENTER);
p1.add(label1);
c1.add(p1);
t=new JTextArea();
JScroll
展开阅读全文