家庭理财系统java课程设计

  • 格式:doc
  • 大小:469.00 KB
  • 文档页数:22

目录1.需求分析 (3)2.系统运行环境 (3)3.功能描述 (4)3.1功能图 (5)4.总体设计 (7)4.1类关系图 (7)5.程序模块设计 (8)5.1类设计图 (8)类Data (8)类Entry (9)类UserInterface (9)5.2主要程序代码 (10)类Data (10)类Entry (15)类UserInterface (15)5.3运行结果 (20)6.总结 (21)7.参考文献 (22)1.需求分析随着我国城乡居民收入的增加和生活水平的提高,家庭理财已成为人们居家过日子的重要内容。

社会学家细心的观察到,时下家庭的“小九九”比之计划经济年代,开始发生微妙的变化。

现在的城乡家庭生活发生了明显的变化,人们的收入逐渐拉开档次,消费水平也高了。

大多数家庭关注的是提高生活质量,一方面精打细算,量入为出,把钱用在刀刃上;另一方面保证适当的娱乐活动、社会交际、智力开发等方面的开支。

但对于大部分家庭来说,理财是一个很头疼的问题,如何妥善处理收入、支出已成为当代家庭的关注点,研发家庭理财工具可为广大用户提供便捷、有效的理财服务。

通过这一工具,用户可以及时记载最近的收入、支出数据,系统将会根据这些数据进行分析,将结果以报表的形式清晰地展示给用户,以便用户了解最近收支的变化情况,使得用户更好地规划将来,真正实现“把钱用在刀刃上”。

本系统通过设计与开发家庭理财工具系统,主要完成了用户对家庭的财务的收入、支出以及相关的各种信息,进行记录、修改、添加、删除功能,并可查看系统分析后的报表情况。

目的在于让用户更合理地处理好家庭资产的积累和消费情况。

2.系统运行环境硬件:PC计算机;内存512MB以上软件:Eclipse系统运行说明:由于该系统尚未封装成exe格式的可执行文件,不能实现直接运行系统的功能,故运行仍然需要通过在Eclipse软件中导入程序包文件后方可执行。

系统的运行环境要求是:在硬件方面需满足内存为512MB以上的PC计算机;在软件方面需预先搭建了可供Java编译执行的环境(包括安装Java程序开发所需的JDK工具等),以及可以编译执行该家庭理财工具系统程序包的Eclipse软件。

3.功能描述针对家庭理财系统的功能需求分析及相关功能的设计,本系统的主要功能由以下几个功能模块所组成:●排序模块选择:按顾客编号排序、按总资产排序功能:对系统内所有顾客信息根据不同的排序条件进行排序,排序结果将按照从低到高的次序依次排列,排序后的结果将不会保存,即新的数据顺序将不会通过文本IO的操作返回至文本文件中去,下次打开系统时,仍是以原有的数据顺序呈现。

●信息编辑模块选择:增加顾客,删除顾客,修改顾客的信息功能:增加顾客:在现有记录基础上插入新的顾客支出与收入信息,其中支出又分为生活费、文体活动、交通工具和人情往来;收入分为工资、奖金、津贴补助和投资收入。

通过文本IO操作将在图形界面插入的新数据写入文本文件中,实现顾客信息编辑功能;删除顾客:对现有记录根据顾客选择删除原有记录;通过文本IO操作将在图形界面上删除的数据从文本文件中删除,实现信息编辑功能;修改顾客信息:对现有记录根据顾客需求进行数据的更新操作;通过文本IO操作将图形界面上修改的数据写入文本文件中并替换原记录,实现顾客信息的编辑功能。

●信息查询模块选择:查找顾客信息功能:查找顾客信息:通过输入顾客的姓名及编号,即可查询该顾客的收入与支出情况,记录将以对话框形式呈现,并以柱形图的形式展示出来;●退出系统功能模块选择:退出系统功能:退出整个系统●帮助模块选择:软件信息功能:显示软件的信息:通过点击软件信息查看软件的信息,其中包括软件的制作者,制作时间等。

3.1 功能图通过上述的家庭理财工具系统分析及功能模块的设计,我们作出了如下的系统功能图:图3-1 系统功能图3.2 功能分析该功能如图显示,顾客通过登录后进入系统的主菜单,系统的主菜单分为排序、编辑、信息查询、帮助以及系统五大部分。

1.排序部分的功能将主要完成对所有顾客按编号、按总资产、。

排序结果将直接通过主面板显示出来,在这一操作结束后,程序并不会将结果返回到原有数据中去,即并不会修改文本文件中的数据顺序。

2.编辑部分的功能主要是对现有的数据进行增加、删除和修改操作。

顾客通过程序的图形界面完成相应的增、删、改操作后,程序会通过文本IO的操作将修改完成的数据返回至保存数据的文本文件中去,实现数据的更新功能。

3.信息查询部分的功能将主要完成对顾客收入、开支信息的查询。

可以按照顾客的姓名及编号查询该顾客所收入及支出金额:系统使用人员只需在对应的对话框中输入所要查询的顾客的姓名及编号,即可查询到该顾客所收入及支出金额及其录入在文本文件(代替数据库)的各类收支信息;并以柱形图的形式展示出来;4.帮助部分的功能主要是对软件的信息进行阐述,以确保用户了解我们和联系我们。

5.系统部分的功能主要是让用户可以快速的退出系统。

4.总体设计4.1 类关系图图4-1:类关系图根据对家庭理财工具系统的需求分析和功能设计要求,我们小组的成绩管理系统的类的设计主要由七个类来完成,分别是:Data类、Entry类、InsertWindow 类、ModifyWindow类、SearchWindow类、Student类和UserInterface类。

Data类主要完成通过文本IO操作对文本文件进行读取和写入操作,从而实现在程序图形界面的主界面呈现相应的学生成绩信息和学生信息的增、删、改功能。

Entry类是整个程序的主类,提供了各个类的功能的访问接口。

通过Entry 类中的主函数,调用相应的类及其方法,实现整个系统的各项功能。

InsertWindow类主要完成对数据的插入,该类主要提供了实现学生成绩管理系统的插入功能的图形界面,其功能的实现主要还是通过调用Data类中的对文本文件进行数据插入方法来完成具体的数据插入操作。

ModifyWindow类主要完成数据的修改,该类与InsertWindow类相似,主要提供了实现系统功能的图形界面,其功能的实现也是通过调用Data类中的对文本文件进行数据修改方法来完成具体的数据修改操作。

SearchWindow类主要完成数据的查询,该类也是主要提供了实现系统功能的图形界面,具体的功能实现是通过调用Data类中对文本文件中的数据的排序函数,实现排序功能,排序结果并不会通过文本IO的操作返回至文本文件中。

Student类主要完成将Data类读取到的数据输出至图形界面的面板中,并将新增加的学生实例放入文本文件的“数据库”中。

UserInterface类是整个程序的界面实现类。

通过UserInterface类,用户可以实现在图形界面下对文本文件中的数据进行各项操作。

5.程序模块设计5.1 类设计图类Data类Entry类UserInterface5.2 主要程序代码类Datapackage studentsmanager;import java.awt.BorderLayout;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.RandomAccessFile;import java.util.ArrayList;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JScrollPane;import javax.swing.JTable;//储存学生的数据及其相关操作public class Data{//以数组列表的形式储存学生的信息public static ArrayList<Student> studentlist = null;//从一个指定的数据txt中读取数据,并存入学生的列表之中.public static void Read() throws FileNotFoundException, IOException{ RandomAccessFile raf = null;studentlist = new ArrayList<Student>();raf = new RandomAccessFile("./DATA.txt", "rwd");String buffer = null;while ((buffer = raf.readLine()) != null) {//以","为分割符,解析所读数据String m[] = buffer.split(",");//加入信息studentlist.add(new Student(m[0], //名字Integer.parseInt(m[1]), //ID(学号)Integer.parseInt(m[2]),//班级Double.parseDouble(m[4]),//数学Double.parseDouble(m[5]), //英语oDouble.parseDouble(m[3])));//语文}}//使用插入排序对学生进行排序public static void SortByWholeScore(){for(int i=1;i<Data.studentlist.size();i++){for(int j=i;j>0;j--){if(Data.studentlist.get(j).WholeScore>Data.studentlist.get(j-1).Whole Score) {Student tmp=Data.studentlist.get(j);Data.studentlist.set(j,Data.studentlist.get(j-1));Data.studentlist.set(j-1,tmp);}else{break;}}}}public static void SortByAverageScore(){for(int i=1;i<Data.studentlist.size();i++){for(int j=i;j>0;j--){if(Data.studentlist.get(j).AverageScore>Data.studentlist.get(j-1).Ave rageScore) {Student tmp=Data.studentlist.get(j);Data.studentlist.set(j,Data.studentlist.get(j-1)); Data.studentlist.set(j-1,tmp);}else{break;}}}}public static void SortByID(){for(int i=1;i<Data.studentlist.size();i++){if(Data.studentlist.get(j).ID<Data.studentlist.get(j-1).ID) {Student tmp=Data.studentlist.get(j);Data.studentlist.set(j,Data.studentlist.get(j-1)); Data.studentlist.set(j-1,tmp);}else {break;}}}}public static void SortByCHN(){for(int i=1;i<Data.studentlist.size();i++){for(int j=i;j>0;j--){if(Data.studentlist.get(j).score[Student.CHN]>Data.studentlist.get(j-1).score[Student.CHN]) {Student tmp=Data.studentlist.get(j);Data.studentlist.set(j,Data.studentlist.get(j-1)); Data.studentlist.set(j-1,tmp);}else{break;}}}}public static void SortByENG(){for(int i=1;i<Data.studentlist.size();i++){for(int j=i;j>0;j--){if(Data.studentlist.get(j).score[Student.ENG]>Data.studentlist.get(j-1).score[Student.ENG]) {Student tmp=Data.studentlist.get(j);Data.studentlist.set(j,Data.studentlist.get(j-1)); Data.studentlist.set(j-1,tmp);}else{break;}}}}public static void SortByMath(){for(int i=1;i<Data.studentlist.size();i++){if(Data.studentlist.get(j).score[Student.MATH]>Data.studentlist.get(j -1).score[Student.MATH]) {Student tmp=Data.studentlist.get(j);Data.studentlist.set(j,Data.studentlist.get(j-1)); Data.studentlist.set(j-1,tmp);}else{break;}}}}public static void CheckAGrade(int Class,int Subject) { int Agrade=0;int NotPass=0;int count=0;for(int i=0;i<Data.studentlist.size();i++){Student tmp =Data.studentlist.get(i);if(tmp.Class==Class) {count++;if(tmp.score[Subject]>90) {Agrade++;}if(tmp.score[Subject]<60) {NotPass++;}}}System.out.printf("%d %d %d\n", Agrade,NotPass,count);double Arate= Agrade/(double)count;System.out.printf("%f \n",Arate);double NotPassRate =NotPass/(double)count;JOptionPane.showMessageDialog(null," 优秀率:"+Arate+" 不及格率: "+NotPassRate,"班级"+ Class+"优秀率及不及格率", RMATION_MESSAGE);}public static void Remove(int ID,String name) {for(int i=0; i<Data.studentlist.size();i++){if(ID==Data.studentlist.get(i).ID&&Data.studentlist.get(i).Name.equals(name)) {Data.studentlist.remove(i);return;}}}public static void Modify(int ID,String name,Student new_stu) {for(int i=0; i<Data.studentlist.size();i++){ if(ID==Data.studentlist.get(i).ID&&Data.studentlist.get(i).Name.equals(name) ) {Data.studentlist.set(i, new_stu);return;}}}public static void Search(int ID,String name) {for(int i=0; i<Data.studentlist.size();i++){if(ID==Data.studentlist.get(i).ID&&Data.studentlist.get(i).Name.equals(name) ) {Student tmp =Data.studentlist.get(i);JOptionPane.showMessageDialog(null,+" 学号 "+tmp.ID+" 班级"+tmp.Class +" 数学: "+tmp.score[Student.MATH]+" 英语:"+tmp.score[Student.MATH]+" 语文: "+tmp.score[Student.MATH],"查找结果", RMATION_MESSAGE);return;}}}public static void Write() throws IOException{FileWriter output = null;output = new FileWriter("./DATA.txt", false);for (int i = 0; i < Data.studentlist.size(); i++){Student tmp = Data.studentlist.get(i);output.write();output.write(',');output.write(Integer.toString(tmp.ID));output.write(',');output.write(Integer.toString(tmp.Class));output.write(',');output.write(Double.toString(tmp.score[Student.MATH]));output.write(',');output.write(Double.toString(tmp.score[Student.ENG]));output.write(',');output.write(Double.toString(tmp.score[Student.CHN]));output.write('\n');}output.close();}}类Entrypackage studentsmanager;import java.io.IOException;public class Entry{public static void main(String[] args) throws IOException{InsertWindow.Init();SearchWindow.Init();ModifyWindow.Init();Data.Read();UserInterface.Show();Data.SortByCHN();UserInterface.RefreshJList();}}类UserInterfacepackage studentsmanager;import java.awt.ScrollPane;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import javax.swing.*;public class UserInterface implements ActionListener, WindowListener{ private static JPanel panel = null;private static JList myList = null;public static JFrame frame;private static JScrollPane scrollPane = null;private static JMenuBar menubar = null;private static JMenu menu_sort = null;private static JMenu menu_edit = null;private static JMenu menu_info = null;public static JMenu mSystem=null;public static JMenuItem mExit=null;public static JMenuItem menu_sort_chn = null;public static JMenuItem menu_sort_eng = null;public static JMenuItem menu_sort_math = null;public static JMenuItem menu_sort_whole = null;public static JMenuItem menu_sort_average = null;public static JMenuItem menu_sort_Id = null;public static JMenuItem menu_edit_add = null;public static JMenuItem menu_edit_remove = null;public static JMenuItem menu_edit_modify = null;public static JMenuItem menu_info_search = null;public static JMenuItem menu_info_rate = null;public static JMenuItem menu_info_rate_math =null;public static JMenuItem menu_info_rate_eng =null;public static JMenuItem menu_info_rate_chn =null;public static JMenu menu_mHelp=null;public static JMenuItem menu_mAbout=null;public static void RefreshJList(){String[] display_data = new String[Data.studentlist.size()];for (int i = 0; i < Data.studentlist.size(); i++){display_data[i] = Data.studentlist.get(i).info;}myList.setListData(display_data);panel.updateUI();}//初始化菜单public static void InitMenu(){menubar = new JMenuBar();mSystem=new JMenu("系统");mExit=new JMenuItem("退出");mSystem.add(mExit);mExit.addActionListener(new UserInterface());menu_sort = new JMenu("排序");menu_sort_chn = new JMenuItem("按语文成绩排序");menu_sort_math = new JMenuItem("按数学成绩排序");menu_sort_eng = new JMenuItem("按英语成绩排序");menu_sort_whole = new JMenuItem("按总分排序");menu_sort_average = new JMenuItem("按平均分排序");menu_sort_Id = new JMenuItem("按学号排序");menu_sort.add(menu_sort_chn);menu_sort.add(menu_sort_eng);menu_sort.add(menu_sort_math);menu_sort.add(menu_sort_whole);menu_sort.add(menu_sort_average);menu_sort.add(menu_sort_Id);menu_sort_chn.addActionListener(new UserInterface());menu_sort_eng.addActionListener(new UserInterface());menu_sort_math.addActionListener(new UserInterface());menu_sort_whole.addActionListener(new UserInterface()); menu_sort_average.addActionListener(new UserInterface()); menu_sort_Id.addActionListener(new UserInterface());menu_edit = new JMenu("编辑");menu_edit_add = new JMenuItem("增加学生");menu_edit_remove = new JMenuItem("删除学生");menu_edit_modify = new JMenuItem("修改学生信息");menu_edit.add(menu_edit_add);menu_edit.add(menu_edit_remove);menu_edit.add(menu_edit_modify);menu_edit_add.addActionListener(new UserInterface());menu_edit_remove.addActionListener(new UserInterface()); menu_edit_modify.addActionListener(new UserInterface()); menu_info = new JMenu("信息查询");menu_info_search = new JMenuItem("查找学生信息");menu_info_rate_math= new JMenuItem("数学优秀率与不及格率"); menu_info_rate_chn= new JMenuItem("语文优秀率与不及格率"); menu_info_rate_eng= new JMenuItem("英语优秀率与不及格率"); menu_info.add(menu_info_search);menu_info.add(menu_info_rate_math);menu_info.add(menu_info_rate_eng);menu_info.add(menu_info_rate_chn);menu_info_search.addActionListener(new UserInterface()); menu_info_rate_math.addActionListener(new UserInterface()); menu_info_rate_chn.addActionListener(new UserInterface()); menu_info_rate_eng.addActionListener(new UserInterface()); menu_mHelp=new JMenu("帮助");menu_mAbout=new JMenuItem("软件信息");menu_mHelp.add(menu_mAbout);menu_mAbout.addActionListener(new UserInterface()); menubar.add(menu_sort);menubar.add(menu_edit);menubar.add(menu_info);menubar.add(menu_mHelp);menubar.add(mSystem);menubar.setBounds(0, 0, frame.getWidth(), 30);panel.add(menubar);}public static void Show(){frame = new JFrame("学生成绩管理系统");frame.setResizable(false);panel = new JPanel();myList = new JList();RefreshJList();frame.setSize(820, 600);frame.setLayout(null);frame.setVisible(true);frame.setLocationRelativeTo(null);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);panel.setLayout(null);panel.setBounds(1, 0, frame.getWidth()-10,frame.getHeight()-50);scrollPane = new JScrollPane(myList);scrollPane.setBounds(0, 30, panel.getWidth(),panel.getHeight()-50);panel.add(scrollPane);InitMenu();frame.add(panel);frame.addWindowListener(new UserInterface());}@Overridepublic void actionPerformed(ActionEvent ae) {i f(ae.getSource()==mExit)frame.setVisible(false);//System.exit(0);if (ae.getSource() == menu_sort_chn) {Data.SortByCHN();RefreshJList();}if (ae.getSource() == menu_sort_eng) {Data.SortByENG();RefreshJList();}if (ae.getSource() == menu_sort_math) {Data.SortByMath();RefreshJList();}if (ae.getSource() == menu_sort_whole) {Data.SortByWholeScore();RefreshJList();}if (ae.getSource() == menu_sort_average) {Data.SortByAverageScore();RefreshJList();}if (ae.getSource() == menu_sort_Id) {Data.SortByID();RefreshJList();}if (ae.getSource() == menu_edit_add) {InsertWindow.Show();}if (ae.getSource() == menu_edit_remove) {SearchWindow.Show(SearchWindow.SHOW_REMOVE);}if (ae.getSource() == menu_edit_modify) {SearchWindow.Show(SearchWindow.SHOW_MODIFY);}if(ae.getSource()==menu_info_search) {SearchWindow.Show(SearchWindow.SHOW_SEARCH);}if(ae.getSource()==menu_info_rate_chn) {String tmp_str= JOptionPane.showInputDialog("请输入班级号"); Data.CheckAGrade(Integer.valueOf(tmp_str), Student.CHN);}if(ae.getSource()==menu_info_rate_eng) {String tmp_str= JOptionPane.showInputDialog("请输入班级号"); Data.CheckAGrade(Integer.valueOf(tmp_str), Student.ENG);}if(ae.getSource()==menu_info_rate_math) {String tmp_str= JOptionPane.showInputDialog("请输入班级号"); Data.CheckAGrade(Integer.valueOf(tmp_str), Student.MATH);}if(ae.getSource()==mExit)frame.setVisible(false);//System.exit(0);if(ae.getSource()==menu_mAbout)JOptionPane.showMessageDialog(null,"学生成绩管理系统\n\n数信学院计科122班\n\n2014年7月10日","软件信息",RMATION_MESSAGE); }public void windowOpened(WindowEvent we){}@Overridepublic void windowClosing(WindowEvent we) {try{Data.Write();} catch (IOException ex) {Logger.getLogger(UserInterface.class.getName()).log(Level.SEVERE, null, ex);}}@Overridepublic void windowClosed(WindowEvent we){}@Overridepublic void windowIconified(WindowEvent we){}@Overridepublic void windowDeiconified(WindowEvent we){}@Overridepublic void windowActivated(WindowEvent we){}@Overridepublic void windowDeactivated(WindowEvent we){}}5.3 运行结果图5-1 系统功能实现图5-2 系统运行主界面6.总结由于这次的课程设计时间较紧凑,所以并没有完成和实现预期所有功能。