已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计报告 课程设计题目:学生个人消费记载系统 学生姓名:胡阳升 学 号:201420130332 专 业:计算机科学与技术 班 级:1420702 班 指导教师:黄笑鹃、郑勇明 2016 年 06 月 30 日 目录 1、问题描述.1 1、理论基础方面.1 2、实际操作方面.1 二、解决方案及说明. .1 三、具体实现. 3 1、数据库层面.3 (1)E_R 图的设计. .3 (2)关系模式.3 (3)外键约束. 3 (4)存储过程. 4 2、Java 层面7 (1)用户登录. 7 (2)用户注册. 8 (3)添加数据. .10 (4)删除数据. .11 (5)修改数据. .12 (6)查询数据. .14 (7)统计消费. .17 4、收获及心得体会.19 五、附录(java 代码)22 1 一、问题描述 课程设计题目:学生个人消费记载系统 1、理论基础方面 (1)系统功能的基本要求: 消费记录:记载每笔支出的消费数目、消费项目、消费时间; 统计功能:可以按时间段统计消费的金额。 查询功能:按消费时间查询,按消费项目查询。 (2)系统应该具备最基本的进入和退出以及用户的登录和退出 (3)大学生对自己的每个月的吃饭消费、电话消费、买书花费、旅游花费、其 他花费、月总支出,、净消费进行管理,可以对自己的每个月的各项消费进行浏 览、录入、查询、修改、删除、排序、统计的功能。 2、实际操作方面 (1)数据库层面:两张表,一张消费记录表,一张学生信息表,连接查询。 (2)java 界面层: 登录界面:实现学生进入到主界面的操作 注册界面:添加一位新的学生 主界面-增、删、改、查界面:对所登录的学生的消费记录进行操作 二、解决方案及说明 需求分析: (1)目标:由于当今学生生活丰富,所对应的消费项目也是琳琅满目。而 很多学生的消费观念并不够强,不知不觉中就会开销过度。为了使学生们建立 一个完善的消费观念以及方便学生们实时记录和查询自己的日常开销,从而开 发出一个便于学生个人记载消费记录的一个系统。 (2)开发环境:eclipse, sql server 2008。 (3)数据库描述: 用户管理数据库:用于学生注册信息和登录系统,利于保护学生个人 隐私,也方便多用户独立使用系统。 消费记载数据库:主要用于记录学生的日常消费(包括消费项目名称, 消费时间,消费金额,消费地点等),同时便于学生随时查询记录(可按 时期,消费项目名,消费金额等查询),按日期统计自己的消费支出,还 可按自己的意愿修改消费的详细内容以及删除自己的消费记录。 利用用户管理数据库的学生学号为消费记载数据库添加外键,便于不 同学生独立查询个人记录,以维护数据的完整性。 (4)功能描述: 添加消费记录: 消费项目名称 消费日期 消费金额 消费种类 消费记录编号 删除消费记录: 删除某一条消费记录 或者可按个人要求删除消费记录 修改消费记录: 修改某条消费记录里的内容 查询消费记录: 3 按消费日期查询消费记录 按消费项目查询消费记录 查看所用消费记录 统计消费支出: 统计历史消费支出总额 按时间段统计期间支出总额 (5)系统功能结构图: 登录 判断(y/n)= (n)学生注册 (y)进入系统 消费支出记录查询修改记录删除记录添加记录 消费项目 消费种类 消费金额 消费时期 总消费金额 按日期统计 按日期查询 按名称查询 修改某行记录 (学号不能改) 删除某行记录 3、具体实现 1、数据库层面: (1)E_R 图的设计: (2)关系模式: 消费记录 学生记载 学生学号 学生姓名 登录密码 消费编号 消费项目 消费日期 消费金额 消费种类 学生学号 学号 退出系统 5 a) 消费记录(消费编号,消费项目,消费日期,消费金额,消费种类,学生学号) b) 学生(学生学号,学生姓名,登录密码) c) 记载(学生姓名,消费项目,学生学号) 三线表: 表 3.1 学生信息表 列名 数据类型 说明 stu_id stu_name stu_password Int (主键,not null) Nvarchar(50) Nvarchar(50) 学生学号 学生姓名 登录密码 表 3.2 消费记载表 列名 数据类型 说明 Id Name Costs Time Stu_id Kind_name Int(not null) Nvarchar(50) Int Nvarchar(50) Int(外键,not null) Nvarchar(50) 消费编号 消费项目 消费金额 消费日期 学生学号 消费种类 (3)外键约束: select * from CostLog alter table stu add constraint pk_no primary key (stu_id) alter table CostLog add constraint fk_no foreign key (stu_id) references stu(stu_id) (4)存储过程: 添加: CREATE PROCEDURE dbo.add_proce x nvarchar(50),y nvarchar(50),m int,n nvarchar(50),z int AS BEGIN insert into CostLog (name,kind_name,costs,time,stu_id) values(x,y,m,n,z) END 删除: CREATE PROCEDURE del_proce x int AS BEGIN delete from CostLog where id=x END 7 修改: CREATE PROCEDURE dbo.alt_proce a nvarchar(50),b int,c nvarchar(50),d int,e nvarchar(50),x int AS BEGIN update CostLog set name = a,costs = b,time = c,stu_id = d,kind_name = e where id=x END 查询 1: CREATE PROCEDURE dbo.que1_proce x nvarchar(50),y nvarchar(50),z int AS BEGIN select * from CostLog where time between x and y and stu_id=z END 查询 2: CREATE PROCEDURE dbo.que2_proce x nvarchar(50),y int AS BEGIN select * from CostLog where name = x and stu_id = y END 统计: CREATE PROCEDURE dbo.sum_proce x nvarchar(50),y nvarchar(50),z int AS BEGIN select sum(costs) as i from CostLog where time between x and y and stu_id = z END 注册: CREATE PROCEDURE insert_stu x nvarchar(50),y nvarchar(50) AS BEGIN insert into stu (stu_name,stu_password) values (x,y) END (3)具体的解决实例: a) use Cost b) c) -消费记录表 d) create table CostLog( e) id int identity (1,1), f) name nvarchar(50), g) costs int, h) time datetime, i) kind_id int 9 j) ) k) -学生用户表 l) create table stu( m) stu_id int identity(1,1), n) stu_name nvarchar(50), o) stu_password nvarchar(50) p) ) q) r) -为表 CostLog 创建外键约束 s) select * from CostLog t) u) alter table CostLog v) add constraint c_id primary key(id) w) x) alter table CostLog y) drop constraint c_id z) aa) alter table stu bb) add constraint pk_no primary key (stu_id) cc) dd) alter table CostLog ee) add constraint pk_no primary key (stu_id) ff) gg) alter table CostLog hh) add constraint fk_no foreign key (stu_id) ii) references stu(stu_id) jj) kk) ll) mm) nn) select * from stu oo) select * from CostLog pp) qq) -存储过程:添加 rr) exec add_proce x=吃火锅 ,y=一般,m=100,n=2016.06.29,z=1 ss) tt) -存储过程:删除 uu) exec del_proce x=34,y=1 vv) ww) -存储过程:修改 xx) exec alt_proce a=独立日,b=80,c=2016.06.02,d=3,e=一般 ,x=29,y=1 yy) zz) -存储过程:查询 1 aaa)exec que1_proce x=2016.02.02,y=2018.01.01,=z=1 bbb) ccc)-存储过程:查询 2 ddd) exec que2_proce x=滑冰,y=1 eee) fff) -存储过程:统计 11 ggg) exec sum_proce x=2016.03.01,y=2016.08.01,z=1 2、Java 层面: (1)java 实现的功能模块: 用户登录与注册。 消费记录的添加,删除,修改,查询和统计。 (2)各功能模块的实现与结果: 登录界面:采取的简单的学生输入用户名和密码式的登录,对该学生所输 入的用户名和密码进行匹配,如果匹配正确则进入到主界面,若匹配不正确, 再提示用户放回或进行注册 Login.java 主要功能代码 /创建组件 jl1 = new JLabel(“学生姓名:“); jl2 = new JLabel(“学生密码:“); jtf1 = new JTextField(10); jpf1 = new JPasswordField(10); jb1 = new JButton(“登录“); jb1.addActionListener(this); jb2 = new JButton(“注册“); jb2.addActionListener(this); jp1 = new JPanel(); jp1.setLayout(new GridLayout(3,1,5,5); jp2 = new JPanel(); jp3 = new JPanel(); 13 jp4 = new JPanel(); /设置布局 /添加组件 jp2.add(jl1); jp2.add(jtf1); jp3.add(jl2); jp3.add(jpf1); jp4.add(jb1); jp4.add(jb2); jp1.add(jp2);jp1.add(jp3);jp1.add(jp4); this.add(jp1,BorderLayout.CENTER); try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 ct = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=Co st“,“sa“,“123456“); sm = ct.createStatement(); rs = sm.executeQuery(“select stu_id from stu where stu_name=“+name+“); while(rs.next() i=rs.getInt(“stu_id“); s = i + “; if(s.equals(“) JOptionPane.showMessageDialog(this,“用户不存在,请前往注册!“); else this.setVisible(false); Cost cost = new Cost(i); /System.out.println(i); 得到了 id catch(Exception e) e.printStackTrace(); 功能展示: 注册界面:当用户没有登录账号的时候,在登录界面下输入姓名和密码进 行注册,注册成功后对学生信息表进行插入数据功能。 Register.java 主要功能代码 jl1 = new JLabel(“姓名:“ ); jl2 = new JLabel(“密码:“); 15 jl3 = new JLabel(“确认密码:“); jtf1 = new JTextField(10); jpf1 = new JPasswordField(10); jpf2 = new JPasswordField(10); jb1 = new JButton(“注册“); jb1.addActionListener(this); jb2 = new JButton(“返回“); jb2.addActionListener(this); jp1 = new JPanel(); jp1.setLayout(new GridLayout(4,1,5,5); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp5 = new JPanel(); /设置布局 /添加组件 jp2.add(jl1); jp2.add(jtf1); jp3.add(jl2); jp3.add(jpf1); jp4.add(jl3); jp4.add(jpf2); jp5.add(jb1); jp5.add(jb2); jp1.add(jp2);jp1.add(jp3);jp1.add(jp4);jp1.add(jp5); this.add(jp1,BorderLayout.CENTER); try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 ct = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=Co st“,“sa“,“123456“); sm = ct.createStatement(); sm.executeQuery(“exec insert_stu x=“+name+“,y=“+password+“); catch(Exception e) e.printStackTrace(); 功能展示: 添加界面:当学生登录之后,在添加界面中输入消费项目名,消费种类, 消费金额,消费时间,点击记账完成对数据库中数据表内容的添加 17 Cost.java 主要功能代码 try /加载驱动 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 ct = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;Database Name=Cost“,“sa“,“123456“); /创建 statement sm = ct.createStatement(); /执行 crud sm.executeUpdate(“exec add_proce x=“+s1+“,y=“+s2+“,m=“+s3+“,n=“+s4+“,z=“+x+“); catch(Exception e1) e1.printStackTrace(); 功能展示: 删除界面:当学生选中一行数据时,点击删除即可从历史账单中删除 DelDialog.java 主要 功能代码 if(arg0.getSource()=jb1) /getSelectedRow 会返回用户点中的行,如果该用户一行都没有选选择,则 返回-1 int rowNum=this.jt.getSelectedRow(); if(rowNum=-1) /提示 JOptionPane.showMessageDialog(this,“请选中所要删除的数据“ ); 19 return;/返回主调函数的下一行 /得到消费 id 号 /如何得到 JTable 中一行中的数据 Integer CostId =(Integer)cm.getValueAt(rowNum, 0); try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 ct = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;Database Name=Cost“,“sa“,“123456“); sm = ct.createStatement(); sm.executeUpdate(“exec del_proce x=“+CostId+“); catch(Exception e) e.printStackTrace(); /构建新的数据模型类,并更新 cm = new CostModel(x); /更新 JTable jt.setModel(cm); 功能演示: 修改界面:当学生选中所要修改的行时点击修改可在另一个修改界面对数 据进行修改 AltDialog.java 主要功能代码 /创建组件 jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); 21 jp4 = new JPanel(); jp5 = new JPanel(); jp6 = new JPanel(); jp7 = new JPanel(); jl1 = new JLabel(“项目编号:“ ); jl2 = new JLabel(“项目名称:“ ); jl3 = new JLabel(“消费金额:“ ); jl4 = new JLabel(“消费时间:“ ); jl5 = new JLabel(“学生学号:“ ); jl6 = new JLabel(“消费种类:“ ); jb1 = new JButton(“修改“); jb1.addActionListener(this); jtf1 = new JTextField(20); jtf1.setText(cm.getValueAt(rowNums, 0).toString(); jtf1.setEditable(false); jtf2 = new JTextField(20); jtf2.setText(String) cm.getValueAt(rowNums, 1); jtf3 = new JTextField(20); jtf3.setText(String) cm.getValueAt(rowNums, 2); jtf4 = new JTextField(20); jtf4.setText(String) cm.getValueAt(rowNums, 3); jtf5 = new JTextField(20); jtf5.setText(cm.getValueAt(rowNums, 4).toString(); jtf5.setEditable(false); jtf6 = new JTextField(20); jtf6.setText(String) cm.getValueAt(rowNums, 5); /设置布局 this.setLayout(new GridLayout(7,1,5,5); if(arg0.getSource()=jb1) /对用户点击修改按钮后的相应动作 /链接数据库 Connection conn = null; Statement stmt = null; ResultSet rs = null; PreparedStatement pstmt = null; try /加载驱动 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 conn = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;Database Name=Cost“,“sa“,“123456“); String strsql = “exec alt_proce a=?,b=?,c=?,d=?,e=?,x=?“; pstmt = conn.prepareStatement(strsql); /给?赋值 23 pstmt.setString(1,jtf2.getText(); pstmt.setString(2,jtf3.getText(); pstmt.setString(3,jtf4.getText(); pstmt.setString(4,jtf5.getText(); pstmt.setString(5,jtf6.getText(); pstmt.setString(6,jtf1.getText(); /执行操作 pstmt.executeUpdate(); this.dispose(); catch(Exception e) e.printStackTrace(); 功能展示: 查询界面:该界面可以根据学生需要按消费项目名或者消费时间段查询学生的个 人消费记录 QueDialog.java 主要功能代码: /创建组件 jp1 = new JPanel(); jp3 = new JPanel(); jp3.setLayout(new GridLayout(2,1,5,5); jp4 = new JPanel(); jp5 = new JPanel(); jl1 = new JLabel(“历史账单“ ); jl2 = new JLabel(“按时间查询“ ); 25 jl3 = new JLabel(“起始时期:“); jl4 = new JLabel(“截止时期:“); jl5 = new JLabel(“按项目查询“ ); jl6 = new JLabel(“项目名称:“); jb1 = new JButton(“查询“); /注册监听 jb1.addActionListener(this); jb2 = new JButton(“查询“); /注册监听 jb2.addActionListener(this); jtf1 = new JTextField(8); jtf2 = new JTextField(8); jtf3 = new JTextField(10); /JTable 的使用 cm = new CostModel(); jt = new JTable(cm); /初始化 jsp jsp = new JScrollPane(jt); /设置布局(默认为边界布局) /添加组件 jp4.add(jl2);jp4.add(jl3);jp4.add(jtf1);jp4.add(jl4);jp4.add(jtf2); jp4.add(jb1); jp5.add(jl5);jp5.add(jl6);jp5.add(jtf3);jp5.add(jb2); jp1.add(jl1); jp3.add(jp4);jp3.add(jp5); this.add(jsp,BorderLayout.CENTER); this.add(jp1,BorderLayout.NORTH); this.add(jp3,BorderLayout.SOUTH); if(arg0.getSource()=jb1) String time1 = this.jtf1.getText().trim(); String time2 = this.jtf2.getText().trim(); String sql = “exec que1_proce x=“+time1+“,y=“+time2+“,z=“+x+“; /select * from CostLog where time between x and y /构建新的数据模型类,并更新 CostModel cm = new CostModel(sql); /更新 JTable jt.setModel(cm); if(arg0.getSource()=jb2) /System.out.println(“用户请求查询“); String name = this.jtf3.getText().trim(); String sql = “exec que2_proce x=“+name+“,y=“+x+“; CostModel cm = new CostModel(sql); /更新 JTable 27 jt.setModel(cm); 功能演示: 统计界面:在该界面下,学生可以根据时间段查询自己消费的历史纪录 SumDialog.java 主要功能代码: /创建组件 jp1 = new JPanel(); jp2 = new JPanel(); jp3 = new JPanel(); jp4 = new JPanel(); jp5 = new JPanel(); jl1 = new JLabel(“总消费金额:“ ); jl2 = new JLabel(“按时间统计消费金额“ ); jl2.setFont(new Font(“黑体“ ,1,25); jl3 = new JLabel(“起始日期:“ ); jl4 = new JLabel(“截止日期:“ ); jtf1 = new JTextField(20); jtf1.setText(String.valueOf(num); jtf2 = new JTextField(20); jtf3 = new JTextField(20); jtf4 = new JTextField(10); jb1 = new JButton(“统计消费“); jb1.addActionListener(this); /设置布局 this.setLayout(new GridLayout(5,1,10,10); /添加组件 jp1.add(jl1); jp1.add(jtf1); jp2.add(jl2); 29 jp3.add(jl3); jp3.add(jtf2); jp4.add(jl4); jp4.add(jtf3); jp5.add(jb1); jp5.add(jtf4); this.add(jp1); this.add(jp2); this.add(jp3); this.add(jp4); this.add(jp5); try /加载驱动 Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 ct = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;Database Name=Cost“,“sa“,“123456“); /创建 statement sm = ct.createStatement(); /执行 crud rs = sm.executeQuery(“exec sum_proce x=“+s1+“,y=“+s2+“,z=“+x+“); rs.next(); i = rs.getInt(“i“); catch(Exception e1) e1.printStackTrace(); 功能演示: 4、 收获及心得体会 1、收获 数据库层面: (1)对于 java 连接 sql server 数据库方面有了较好的掌握。在数据库连 接配置的时候,对数据库的配置有了一个详细的认识,由于在连接时,java 是启用了 sql server 的 ip 地址,于是就必须将 sql server 网络配置中 的 TCP/IP 协议启用并设置默认端口为 1433,这些服务设置完成后还必须重 启 sql server 的服务器,这才能使得其 IP 地址以及端口响应。 (2)在 sql 中建表时,为了保证数据表中的数据存在前提是在另一张数据表 中事先存在对应外键的数据,也就是为了保证数据的完整性和安全性,不被打 扰,就要为对应的表创建外键约束。而建立外键约束时,所依赖的表中的字段 要为该表的主键约束。 (3)之所以要为每一个按钮创建存储过程,把 sql 语句封装在数据库里,我 个人的看法是为了 sql 语句的完整性,以至于 java 编程的时候并不会写乱数 据库语句。这样 java 编程时只需要调用存储过程,就不必写 sql 语句了。 31 Java 层面: (1)对如何用 java 中 swing 类中的方法来设计一个界面有了更好的掌握。 (2)对 java 中事件处理机制这一块内容可以说熟练掌握了,一些书写格式书 写语法都有了一个更好的掌握,可以很容易就为某些按钮或者案件添加事件处 理。 (3)经过这次课设,我对 MV 分层写代码有了初步了解,因为功能一旦多了, 如果将所有的代码都写一块是很乱的,也不便于维护和修改,但是 MV 分层很 好的规范了代码的书写,M:代表 model 层 V:代表 view 层,在 view 层设 计窗体,利用 model 层对窗体进行数据的处理,这样的一种模式是非常直观也 便于维护的,可鉴可取。 2、心得体会 对于这次的课程设计,我感觉颇深刻,为什么这样说呢?是有如下的原因 的。 首先,这次的课程设计是我在大学里真正意义上的用自己学到的知识去开发出 来的一个小系统,初看上去感觉还挺难的,但是经过一个需求分析后以及自己 认真思考过后,我突然发现,要用的就是 java 和数据库这两方面的知识,而 这两方面的知识正好我大都也掌握了,至少知道该怎么用了。于是乎,我就按 着需求分析里的要求一条一条的去实现它的功能。做着做着,一个大概的雏形 就出来了,当看到自己所付出的努力见效时,瞬间信心大增,以至于(说实话) 有几天写代码一写就是一整天,越写越想写,那时候感觉真的不错的,也许那 就是写代码的乐趣吧。嘿嘿 说完了乐趣,其实乐趣也并不是一直都有的,在乐趣到来之前,还是要经 历过一个努力思考以及不断解决问题的过程的。期间各种问题也是层出不穷, java 连接数据库时报错,功能实现中出现的异常,布局混乱以至于修改代码 时的出错等等等等。这个解决问题的过程也是挺令人头疼的,不过在这个解决 问题的过程中,我发现,遇见了问题或者不知道实现方法的时候,最重要的一 点就是不要怕,要勇于调试错误,就算这个错误太复杂了,你硬着头皮上,一 定会有柳暗花明又一村的。正是这个调试错误的过程,我才能在这次课设中得 到锻炼和收获知识,调试错误的时候,讲真的光靠自己的脑袋就这样坐电脑面 前想有时候还真的挺难想出解决办法的,这时候就应该发散自己的思维,去触 及各个方面的知识,去收集对自己有用的知识,去了解该知识如何使用,于是 乎,我就摆着个“我所犯的错误,前人一定也犯过,肯定会有解决办法的”态 度,去百度谷歌,不断的收集和自己所犯错误相关的信息以及收集对自己有用 的信息,不管是文库还是文档或者是视频,只要是对自己有用的内容,我都拿 过来用,用着用着,问题自然而然也就迎刃而解了。绞尽脑汁后,问题解决时, 那带来的快感对我来说真的是不可言喻,我真的还挺享受这种“久旱逢甘霖” 的滋味,哈哈:D ! 再一个就是经过两位老师的指导和点评之后对自己的一个认识了。老师说 的很对。首先对于数据库层面,说句实话,郑老师验收完我的数据库之后,给 了一个 B+的评分,当时真的有点小失落和小不服气的(郑老师,你看到后别打 我啊,我有认真反思过的:D ) ,毕竟其他人都是 A,有的人还是 A+,为什么 我的就是 B+呢,我难道比别人做的更差?可是大家都差不多就两张表一些约束 加些存储嘛,之后我还是有深刻的反思的,之所以 B+那都是有原因的,排开一 些当时表现欠佳的原因外,往更深层次想想,我这个系统只是一个很小很小的 项目,而所涉及的功能也并不是很多,要实现这些功能也许一两张数据表就能 搞定,这是最简单的实现方式了,而我恰恰是使用了这种最简单就能实现功能 的方法,但是这样的偷懒方式并不明智,虽然可以很快的完成这次的课程设计, 但是并不会有大的提高,想想,如果以后在工作中,自己接的项目,那是不会 有这么简单了的,那些东西都是实用的东西了,所考虑的问题远不止两张表就 能解决的,而如果现在就想着偷懒,等到以后工作的时候,那就会后悔的。所 以,不要小瞧每一次的课程设计,这些都是我成长的过程,所以,对于每一个 这样的过程,我都要努力的去完成他并把他做到完美,该考虑的要尽力去考虑 到,不该考虑的也要适当的去想想,这样才能给自己一个满意的答案,不然现 在偷的懒,那就会成为以后要跳的坑的。 对于 java 层面,我也犯了同样一个错误,就是考虑不够周到,就是单单 的实现了功能,其他的使用系统方面考虑的非常少,所以黄老师的一句话就提 醒了我“假如你的这个系统要给别人用,别人知道怎么用吗?”,对的,这也 就是需求分析是否完美的事了,如果别人来用我的系统方便吗?他知道如何使 用吗?如果别人也做了同样一个系统,那别人为什么就要用我做的这个呢?我 的核心竞争价值在哪?。虽然 java 只是做了界面,但是界面都是 给人看的,如果别人看起来感觉都不怎么样,那我做的系统功能再好,那也是 无用的。所以,在做需求分析的时候,一定要站在用户的角度思考问题,别人 真正的需要是什么,如何才能方便用户使用,这些问题一定要考虑周到,甚至 要比用户自己都更清楚他们想要的是什么,这样才能给自己做的系统一个完美 的交代。正如乔布斯所说的:“客户根本不知道他们想要什么,直到我把这些 呈现在他们面前。”所以说还是那句话:认真地对待每一个课程设计,尽自己 最大的努力去做到完美,千万不要耍小聪明去偷懒,不然现在偷的懒,那就会 成为以后要跳的坑。 33 五、附录(java 代码) -Login.java- package 学生个人消费记载系统 3; import java.awt.*;import javax.swing.*;import java.sql.*;import java.awt.event.*; public class Login extends JFrame implements ActionListener /定义组件 /StuModel stum; JLabel jl1,jl2;JTextField jtf1;JPasswordField jpf1;JButton jb1,jb2; JPanel jp1,jp2,jp3,jp4; /定义数据库需要的东西 Statement sm = null;Connection ct = null; ResultSet rs = null;ResultSet rs1 = null; public static void main(String args) Login log = new Login(); /定义构造函数 public Login() /创建组件 jl1 = new JLabel(“学生姓名:“);jl2 = new JLabel(“学生密码:“); jtf1 = new JTextField(10);jpf1 = new JPasswordField(10); jb1 = new JButton(“登录“);jb1.addActionListener(this); jb2 = new JButton(“注册“);jb2.addActionListener(this); jp1 = new JPanel();jp1.setLayout(new GridLayout(3,1,5,5); jp2 = new JPanel();jp3 = new JPanel();jp4 = new JPanel(); /添加组件 jp2.add(jl1);jp2.add(jtf1);jp3.add(jl2);jp3.add(jpf1); jp4.add(jb1);jp4.add(jb2);jp1.add(jp2);jp1.add(jp3);jp1.add(jp4); this.add(jp1,BorderLayout.CENTER); /设置窗体参数 this.setTitle(“登录“);this.setBounds(500,300,300,200); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true); Override public void actionPerformed(ActionEvent arg0) if(arg0.getSource()=jb1) String s=“;String name = jtf1.getText(); String passwd = new String(jpf1.getPassword(); if(name.equals(“)|passwd.equals(“) JOptionPane.showMessageDialog(this,“请输入数据“); else int i = 0; try Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver“); /得到链接 ct = DriverManager.getConnection(“jdbc:sqlserver:/127.0.0.1:1433;DatabaseName=Cost“,“sa“,“123456 “); sm = ct.createStatement(); rs = sm.executeQuery(“select stu_id from stu where stu_name=“+name+“); while(rs.next()i=rs.getInt(“stu_id“); s = i + “; if(s.equals(“) JOptionPane.showMessageDialog(this,“用户不存在,请前往注册!“); else this.setVisible(false);Cost cost = new Cost(i); 35 catch(Exception e) e.printStackTrace(); finally try if(sm!=null)sm.close();if(ct!=null)ct.close();if(rs!=null)rs.close(); catch(Exception e) e.printStackTrace(); if(arg0.getSource()=jb2) Register res = new Register();this.setVisible(false); -Register.java- package 学生个人消费记载系统 3; import java.awt.*;import javax.swing.*;import java.sql.*; import java.awt.event.*; public class Register extends JFrame implements ActionListener /定义组件 /StuModel stum; JLabel jl1,jl2,jl3;JTextField jtf1,jtf2,jtf3; JPasswordField jpf1,jpf2;JButton jb1,jb2;JPanel jp1,jp2,jp3,jp4,jp5; /定义数据库所需要的东西 Statement sm = null;Connection ct = null;ResultSet rs = null; /定义构造函数 public Register() /创建组件 jl1 = new JLabel(“姓名:“);jl2 = new JLabel(“密码:“); jl3 = new JLabel(“确认密码:“); jtf1 = new JTextField(10); jpf1 = new JPasswordField(10);jpf2 = new JPasswordField(10); jb1 = new JButton(“注册“);jb1.addActionListener(this); jb2 = new JButton(“返回“);jb2.addActionListener(this)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 做幼师的心得体会范本多篇
- DB12T 598.15-2015 天津市建设项目用地控制指标 第15部分:民用航空运输机场项目
- 中秋节日慰问信范文(12篇)
- 文书模板-分床协议书
- 英语配音课件教学课件
- 智能运输系统 体系结构 服务 征求意见稿
- 光纤通信试题及答案
- 外国语学校等校联考八年级上学期语文期末考试试卷
- 黄家镇桂花井初级中学八年级上学期语文第一次月考试卷
- 猴子温泉课件教学课件
- 婴幼儿发展引导员
- 产品系统设计开发 课件 第3、4章 产品系统设计程序与方法、产品系统设计类型
- 电子信息工程技术专业职业生涯规划书
- 世界各国国家代号、区号、时差
- Talent5五大职业性格测试技巧138答案
- 工程水文学题库及题解(全)
- 【学生基本信息表】样本
- 环境监测仪器设备采购投标方案(技术标)
- 薄壁不锈钢管卡压连接施工工艺
- 新课标-人教版数学六年级上册第四单元《比》单元教材解读
- XML期末大作业实验报告
评论
0/150
提交评论