//需求分析:写一个成绩管理系统。其中的一个功能是实现成绩录入。要求能根据课程名称在系统里找到学生和课程信息;在结果区域中添加成绩。 //规则:要求对输入成绩的操作要有有效性检验。成绩只接受大于0且小于100的数字;同一记录不能反复提交;当点击“提交”,告知用户操作是否成功,并给出相应信息;课程名下拉列表中的课程列表根据数据库中的课程表,自动生成。 # f* e) f, {- `7 C. L5 U
//代码如下:
, I- |/ ]3 n1 ~- {8 Oimport java.awt.*;
4 u# k9 h6 S7 }3 B, wimport java.awt.event.*;& `& Z: }6 c' w2 S4 v1 u7 o
import java.sql.*; import javax.swing.*;9 B) i7 ~. N, b2 r3 c! j
import javax.swing.table.DefaultTableModel; import school.schoolPicture.JdbcUtil; public class AddScore extends JPanel implements ActionListener {% J' h/ D" D9 |7 M4 c. O2 \
String[] columnNames = new String[] { "姓名", "学期", "课程ID", "成绩" }; DefaultTableModel dtmScore = new DefaultTableModel(columnNames, 57); JTable jtAddScore = new JTable(dtmScore); JScrollPane jspScore = new JScrollPane(jtAddScore); JComboBox jcbCourse = new JComboBox(); JComboBox jcbClassName = new JComboBox(); JComboBox jcbTerm = new JComboBox();
; w; ^) H w4 a# d/ g1 ]0 g7 jConnection con = JDBCUtil.getConnection();
1 m: R# h e& [% y# f// Connection con2 = JdbcUtil.getConnection();
; D' @- F! Q/ W' |) r" ]' l& FPreparedStatement ps = null;
" o' d: Q% G2 w v' l# N4 o) kResultSet rs = null;
' V2 H* \5 B- H" bResultSetMetaData meta = null;. P7 C: `8 Q8 k1 T K5 T& V, L
String sql = null;/ i u' Z' n- n3 M
int cols = 0;) e5 k& a0 W! i
int rowCount = 0; public AddScore() {" R: ~: N4 S; E# v, X# ]
CreateAddScoreGUI();
- ^. @; j( p1 g% v) i+ O} public void actionPerformed(ActionEvent e) {
) Y2 V @/ ?% wString str = e.getActionCommand();- A3 f) l3 B) d9 P2 @% g) H X0 |
if ("查询".equals(str)) { //当点击查询时,用searchScore()方法对其进行处理
0 ^1 f- X5 U& o7 t5 T6 HsearchScore(); m( k8 r" q! d( G. K
} else if ("提交".equals(str)) { //当点击提交时,用tryCommit()方法对其进行处理
; K4 M; v; t e) b# S7 ItryCommit(); } else if ("退出".equals(str)) {
) }2 o( R5 T: Z9 A: U) xthis.setVisible(false);0 n7 d# j/ W; y
}. {4 P& w8 Z! u4 X
}* v* W6 ^' O q& F
public void tryCommit() {- ?* B- M# w1 t$ {# d7 V
if (cols < 1)+ d# q x4 x1 y6 Z; u( E; x9 ]
return;4 S5 s: E* Y2 ]- F( ?5 i
sql = "insert into scorexx values(?,?,?,?)";& q& V- ~& B* y. E/ M! o8 J4 x. d
try {
2 z# i0 A X# L/ A5 u' C9 fps = con.prepareStatement(sql);& S! S7 n0 A) M+ \
String[] value = new String[4];
7 b+ U( Y$ L# `8 w( l3 gfor (int k = 0; k < rowCount; k++) {- ?, T* | @# W& x4 `& y7 I
for (int i = 1; i <= cols + 1; i++) {
& g% A q1 e! A. O, b// 如果成绩为空,取消提交操作,并给出提示。7 X; `6 r2 f( ]( H/ o
if (jtAddScore.getValueAt(k, i - 1) != null) {
6 |+ ?, }5 R) R0 m+ `9 F6 Y4 Evalue[i - 1] = jtAddScore.getValueAt(k, i - 1)) Z, J4 F5 M$ F1 u& v6 K6 y& t7 \
.toString();
* [" d! B: [2 l9 W) `0 [' `( Q& |} else {
1 \+ M% V1 ?0 Hif (i == 4)/ X3 `' Z" v6 ]$ v
JOptionPane
l4 a# ~' U( Y) s* y5 W.showMessageDialog(null, "无效成绩输入!成绩不能为空"); i- I4 l X: i1 p$ t; F3 e, v
return;
! K- u( N1 ?& a' J) K# x}. V" ^8 Q _0 j6 x! j3 U
// 如果成绩字段里面不是数字,则取消本次操作??
) }( h* C% ?9 A# {0 q! k// String str = "^[0-9]{1}[0-9]?[0-9]?$";" T. K n0 s. M( G" F' a7 _
// if (i == 4) {* \$ Y M: Z" d% T1 @+ w' d
// if(jtAddScore.getValueAt(k, i - 1) instanceof Integer){4 \4 D3 N- c) i8 J
// if(
7 L# Y4 S+ Z0 [' `// Integer.parseInt(value[3])<0||Integer.parseInt(value[3])>100)
* i" H% d: ^8 [. R1 V// {JOptionPane.showMessageDialog(null, "成绩只能大于0且小于100");: W$ C- K5 ^# W6 {
// return;}) C6 O& l" P t, u' t, i
// }5 G+ X* [ |: q) x8 i
// }
- \, }3 J$ a; b/ @& Z- dSystem.out.print(value[i - 1]);( ?: B9 z. ^6 @: E T
}
6 K1 A% F& f6 Hps.setString(1, value[0]);1 q; o; n% X6 x0 J% T0 G9 Q5 I- e
ps.setString(2, value[1]);1 ~5 i& Y1 `% {
ps.setString(3, value[2]);9 b3 P6 ^: A+ F2 l
ps.setInt(4, Integer.parseInt(value[3]));$ C) v' ?, |8 ]( g
ps.executeUpdate();2 m# E# m" t! H" K. f
con.commit();% }9 t0 P$ R+ [% x; ?: ]7 }3 ]
System.out.println();. N: i8 \. i$ ]. G( l
}
$ c2 m; f( l5 q V% l* TJOptionPane6 W: f1 v% l) S* k3 S* E3 m' \% U
.showMessageDialog(null, "提交成功:更新 " + rowCount + " 条记录!");8 N; Q5 N" c0 K1 u
} catch (Exception ew) {
. u M( E \0 F8 Eew.printStackTrace(); } } , l8 p7 B |* D
// 自动添加课程下拉列表中的课程0 A# T! e1 |" } N" h) B, ?5 J
public void addCourseToJCheckBoxCourse() {
r$ l. _" j0 v a5 F) V# GString courseName = null;* b$ C1 e2 F4 }# j% Q$ a' ~
sql = "select cname from coursexx";# m s/ Z5 y6 j% U! s0 @+ I( U
try {
+ n% y. @% z! w8 X0 kps = con.prepareStatement(sql);* R M. B7 l7 N6 r
rs = ps.executeQuery();
; O; F( e0 r2 aResultSetMetaData meta = rs.getMetaData();- I- m i6 X5 t$ w; E) d% d& j
int cols = meta.getColumnCount();& l" K4 ?" W- ^* z
while (rs.next()) {
! r% ]9 ~0 P! Z, k* @1 Ofor (int i = 1; i <= cols; i++) {$ h" }1 T- x0 `" E
courseName = rs.getString(i);# i$ N' n/ i! D/ D3 ^; `( ~
System.out.println(courseName);
+ e" Q5 G& S, i& W7 ~2 L: Y7 QjcbCourse.addItem(courseName);) N; [4 R j1 s- l s/ V1 ?$ n$ I
rowCount++;
6 N& ^* e, c- U$ k}
2 W4 W9 K3 S, q; V- b) u}4 U0 O1 m" R" j) e: H
con.commit();. s) l0 N# _) a* h% b; x5 X, W" v
} catch (Exception ers) {
$ ~& M- y$ D# x9 Gers.printStackTrace();
) Z7 F2 p |/ n7 K$ U9 A% Xtry { X- C* [; m- [# w$ c3 |# W
con.rollback();
5 `. j5 w5 [8 M. ^' k- x& _} catch (Exception er) {4 K* X( A$ K4 \7 s( h
er.printStackTrace();
7 Q8 d. I, {/ C* k9 |' b}' G# K+ d& v. n* |8 q# e2 `
} } - o: f# F0 V q0 l4 p" j# U% M
public void searchScore() {) h9 q5 y" O2 S- g
// 每次查询之前清空之前的结果
/ W6 d' R/ y2 \) D" _3 ]for (int k = 0; k < 50; k++) {
' Z, n7 n5 U4 I0 f) ]3 vfor (int i = 0; i < cols; i++) {/ m7 M' `( `& g
jtAddScore.setValueAt(null, k, i);
$ s* J: C$ O: U" O' g* Y} }
9 r0 Y9 E$ N) S8 p# F$ O// Method1:JDBC Method2:hibernate0 ]& ]. [# W1 y5 k5 {; \" @
String cName = jcbCourse.getSelectedItem().toString().trim();. X# Y& j8 x, L9 ~0 ^' l# Y) X
sql = "select x.sname,k.term,k.cno from ": N3 |4 O, z6 F$ a+ _( L% h
+ "choicesxx x join Coursexx k ": Q- ]. z( u( L% z5 {
+ "on x.cno=k.cno and k.cname=?";
: c4 o5 Z5 G2 f# C3 i6 ltry {
) ^9 s2 F: G! q0 C' Cps = con.prepareStatement(sql);
; q7 J n7 h$ ]1 \+ S0 Ups.setString(1, cName);, t, l$ V j( N* @- _: C
rs = ps.executeQuery(); L9 g, z( L" @1 R( Q
meta = rs.getMetaData(); \# A8 h& V, G+ {# V
cols = meta.getColumnCount();
2 `4 T% w/ p1 I8 {! w( A/ Jboolean flag = true;
% r/ J- V% e! [9 R, fString result = null;: P; w9 ?; R' F: e* x1 O& n7 t, _
int k = 1;
' c1 K/ m! c6 X' S0 cwhile (rs.next()) {# f5 P- ?; k" H s9 k9 `
for (int i = 1; i <= cols; i++) {
! o5 T: y Y) }# C5 t' a7 bresult = rs.getString(i);6 p* K J4 n+ A8 R4 s
jtAddScore.setValueAt(result, k - 1, i - 1);
" f' T& p& e3 \3 Q; t( g}
% Z/ ]5 x) z! k7 Z( ?0 @" BrowCount = k++;
0 f! o/ J' ^( B3 z+ p} } catch (Exception exx) {
2 x, W0 e! o0 }* q, ? Qexx.printStackTrace();" g. [3 Z7 L t& H; f
}% H3 r2 X" d8 s6 O& r
} 4 U, p0 m5 o: V" y; K, Z7 D
//产生用户界面 public void CreateAddScoreGUI() {
9 {( i, e- ?' O8 \, k* E9 e% hthis.setLayout(new FlowLayout()); JLabel jlCourse = new JLabel("课程:");
* _/ Y1 f6 g- u+ B' {& AjcbCourse.addActionListener(this);5 e8 z/ h3 j/ T
jcbCourse.addItem(new String("请选择课程"));# _3 L2 c+ D& p' ?+ I9 r( \7 }
addCourseToJCheckBoxCourse();; a- |- j+ t6 @/ ~
this.add(jlCourse);
2 h* r( d3 C2 Y) rthis.add(jcbCourse); // JLabel jlClassName = new JLabel("班级:");
; ?% v2 c$ o. p8 @// jcbClassName.addActionListener(this);
. c0 W" g, k- p2 Q8 Y// jcbClassName.addItem(new String("请选择班级"));2 U b2 A U2 V# X" `1 ^9 [
// addClassNameToJCheckBoxClassName();
) A2 A" k6 V; s4 ?( t/ Q3 U5 z// this.add(jlClassName);4 r4 M- v# t) o( A- N
// this.add(jcbClassName); // JLabel jlTerm = new JLabel("学期:");7 l% N# z$ a2 `' _7 b
// jcbTerm.addActionListener(this);. P* K8 ^% a$ h" I% G4 p, e& T, b4 J
// jcbTerm.addItem(new String("请选择学期"));. ~8 v H! k: @6 u
// addTermToJCheckBoxTerm();
. C+ K& F- D' w// this.add(jlTerm);
) L* P4 m. h2 N6 |3 l+ Q' ~* U; {* G// this.add(jcbTerm); JButton jbSearch = new JButton("查询");
3 ~7 s; E* L$ {6 djbSearch.addActionListener(this);
; @- u6 L; h5 t" I/ K0 jJButton jbOK = new JButton("提交");0 b% g( U3 \3 |5 {& I, R6 ^: @% e
jbOK.addActionListener(this);
, X3 G- C7 t2 RJButton jbExit = new JButton("退出");3 V# t3 ^. X8 E# \8 E( J
jbExit.addActionListener(this);
8 @8 N) Y# L/ I, gthis.add(jbSearch);* x0 k9 c+ ~: {+ r# N* D
this.add(jbOK);5 a- T5 Z. s8 Q1 K
this.add(jbExit); this.add(jspScore); this.setVisible(true);
4 d ^5 g. }! n0 i4 bthis.setSize(500, 600); } public static void main(String[] args) {- R. i: [ I- ^6 S* S
new AddScore();
0 }' |) {# L; }8 h- s% e- \}
( K" k- X+ P6 n y/ N8 y+ `} ) R5 R G( g5 K8 i, m0 |' e
|