|
//需求分析:写一个成绩管理系统。其中的一个功能是实现成绩录入。要求能根据课程名称在系统里找到学生和课程信息;在结果区域中添加成绩。 //规则:要求对输入成绩的操作要有有效性检验。成绩只接受大于0且小于100的数字;同一记录不能反复提交;当点击“提交”,告知用户操作是否成功,并给出相应信息;课程名下拉列表中的课程列表根据数据库中的课程表,自动生成。 8 V1 p3 H4 z) b- o: }* p( P
//代码如下:
# l9 g' U, G- _8 B7 g; Z; Timport java.awt.*;9 d! T% d1 g. m2 H3 l$ v4 l' u
import java.awt.event.*;
# P- ]+ A# H2 timport java.sql.*; import javax.swing.*;2 |0 v) E$ c/ m. r
import javax.swing.table.DefaultTableModel; import school.schoolPicture.JdbcUtil; public class AddScore extends JPanel implements ActionListener {
& G' a$ |) r+ i7 c5 z& D! F! ZString[] 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();
; p+ t1 d8 R: G* p& L0 C% ]2 B& IConnection con = JDBCUtil.getConnection();# Z! K/ [7 R1 Z1 Q! _
// Connection con2 = JdbcUtil.getConnection();3 h, Z/ K6 G1 B/ |% v9 l, P1 O
PreparedStatement ps = null;1 @1 {8 B& b* @$ G, q. U9 |7 ^
ResultSet rs = null;
) ~- n1 L) j% @4 \0 zResultSetMetaData meta = null;8 U7 W& l, c5 a* H# T* G+ h# _
String sql = null;
6 G! U' U: d; e, }8 sint cols = 0;
7 i' R5 Y2 P& a; } {- Uint rowCount = 0; public AddScore() {
`4 h3 U' U5 {/ l9 ^5 M4 [: dCreateAddScoreGUI();
( z0 E) ?6 i4 C" p, J- v* a} public void actionPerformed(ActionEvent e) {, p( L0 ^& o B1 T9 U/ q. H
String str = e.getActionCommand();
4 \ V7 f: Q+ o. v; `if ("查询".equals(str)) { //当点击查询时,用searchScore()方法对其进行处理
$ @8 O! G: j1 M/ t2 h% n* dsearchScore();
3 G0 N h1 S; F. Q$ J" i T' e} else if ("提交".equals(str)) { //当点击提交时,用tryCommit()方法对其进行处理# b# L; C5 g1 Q1 Z9 v7 a; F) h
tryCommit(); } else if ("退出".equals(str)) {5 P: F) y5 M; \- |! D! j: o
this.setVisible(false);0 v; A/ T9 x. D
}( M1 C; P p( [" U/ s' W
}8 h' w/ ^& y/ a' m i0 F5 Z6 x
public void tryCommit() {
$ W0 L2 T8 [7 J3 y( x# ]if (cols < 1)( `3 z" M- C) |' E- X' `4 N
return;
! H1 V6 f. r/ w& bsql = "insert into scorexx values(?,?,?,?)";5 H9 d+ r( S2 J. Y
try {- |& P) r- k+ U) V$ y
ps = con.prepareStatement(sql);; r# R0 N- n- u' n/ w0 U/ l" ^
String[] value = new String[4];' R8 t* ]" k7 V
for (int k = 0; k < rowCount; k++) {8 Q$ g: z' v1 U8 L, b1 ^
for (int i = 1; i <= cols + 1; i++) {3 K' f1 e) L* F1 r& m; \$ R1 k
// 如果成绩为空,取消提交操作,并给出提示。6 `# }. f- j4 ], j7 A7 d4 \+ n& t4 o
if (jtAddScore.getValueAt(k, i - 1) != null) {+ h! U$ \2 c6 ]- Q
value[i - 1] = jtAddScore.getValueAt(k, i - 1)! ~# W' m. i. |/ x) H" B2 F
.toString();9 ], k8 I. |" H4 ~9 M j
} else {' X' N" B2 c& V/ V
if (i == 4) t6 y. p) y. ~& g7 Q9 } ]- r l
JOptionPane
7 }5 x2 x! J9 M- S.showMessageDialog(null, "无效成绩输入!成绩不能为空");/ w) C8 q5 ] b s6 b# l; j
return;# N' @# G; v7 J& n& l6 i
}
- [, x% h7 L4 K% Y3 a// 如果成绩字段里面不是数字,则取消本次操作??0 N# j4 N, W" t, X9 @7 _2 `* a
// String str = "^[0-9]{1}[0-9]?[0-9]?$";! g3 K* Q) b4 b' l: g {
// if (i == 4) {- K1 t% r* R0 K3 g, d, X
// if(jtAddScore.getValueAt(k, i - 1) instanceof Integer){
" K+ R+ v9 v+ [ c+ n// if(
2 r u3 `1 ]2 r# J// Integer.parseInt(value[3])<0||Integer.parseInt(value[3])>100)' d$ }% m4 [1 \! C0 x. Q
// {JOptionPane.showMessageDialog(null, "成绩只能大于0且小于100");! p4 M8 C4 t9 @$ u, a
// return;}! {; O( k( X( R. d
// }
) B* p/ k( M- ^4 } G# {: S// }- M1 p7 ` c/ U5 N0 |8 s
System.out.print(value[i - 1]);+ v9 a% Q; d2 R$ T/ ^
}
! E7 @: a- |& Z- w) Vps.setString(1, value[0]);
0 m; P+ K/ Q2 M2 g1 Xps.setString(2, value[1]);# q. `1 [% Y" X) F# U
ps.setString(3, value[2]);
' |% Q! Y0 a4 B0 A% b w2 a6 j6 Gps.setInt(4, Integer.parseInt(value[3]));! J6 d6 p! ^6 t6 |0 w/ w, L& u
ps.executeUpdate();* Q+ M, ?8 h) C6 p: P' ~
con.commit();
, c" K' V2 ], `System.out.println();
9 l! {0 k* f0 a1 p}
/ a$ ?+ y5 i/ T* x" g5 G% hJOptionPane$ M9 Q$ H$ U$ t+ v
.showMessageDialog(null, "提交成功:更新 " + rowCount + " 条记录!");
7 J; b. Z x% w1 {' E} catch (Exception ew) {, b! g* F" F1 e6 i3 S
ew.printStackTrace(); } } $ n6 L; C* c' I, y
// 自动添加课程下拉列表中的课程) P. x) P% j5 i& c; v2 r+ ?
public void addCourseToJCheckBoxCourse() {
: H6 Z& p6 v1 ^1 mString courseName = null;8 Y/ d5 ?5 `' r3 V* m9 G9 s
sql = "select cname from coursexx";
! v1 O2 O# T$ [4 [3 s/ U5 f6 Etry {
Y5 I1 M+ H& a9 X& s% Ips = con.prepareStatement(sql);
! R! k& B$ K& L$ D; Z$ ^5 T/ ers = ps.executeQuery();* _, t# n l. z `2 B
ResultSetMetaData meta = rs.getMetaData();' o* `8 P2 v' r# @" W6 j* @, H
int cols = meta.getColumnCount();. S7 T" G! G6 }
while (rs.next()) {
6 _8 Q$ {. t4 V4 S3 s9 `for (int i = 1; i <= cols; i++) { _" g2 R; W1 v0 [
courseName = rs.getString(i);& k6 p' \5 a3 N: b, g H
System.out.println(courseName);
: X5 G9 r; G7 d" e0 S( W/ HjcbCourse.addItem(courseName);
1 p" i# D" a0 ^# arowCount++;
" {, [7 ~/ `* v8 L% c}
% n# H9 m) W, q9 C- R' r C}
& m' e3 C2 O0 l0 C$ j- ? d. Dcon.commit();, F, l2 q+ U1 U5 N; n! b
} catch (Exception ers) {# ]9 B g0 z5 A3 l
ers.printStackTrace();# n9 M b& _$ }1 V* ]* K! K# B
try {0 b: k7 n9 W) \& X; F$ e
con.rollback();
( h, ?" ~6 y' m7 d! R- w) G3 V+ h- X' [$ {} catch (Exception er) {
( Q8 `3 p4 w( `er.printStackTrace();
3 t4 i4 X& N Y& t}7 b) N$ F' M. r; ^$ z/ i
} }
7 ~0 G! g8 n! x- }- y: Npublic void searchScore() {0 a9 K6 z6 t) J% `' ~- J
// 每次查询之前清空之前的结果/ n8 @2 ]$ p' J
for (int k = 0; k < 50; k++) {3 C i. G D1 ~# g6 Q- ]
for (int i = 0; i < cols; i++) {! a! ^2 B, y/ ? W# ?6 s
jtAddScore.setValueAt(null, k, i);
: S5 ?. i% p9 b, p- X8 U} }
2 d6 ?, z; W6 n. n2 T+ d// Method1:JDBC Method2:hibernate2 G g4 a) |1 l1 l
String cName = jcbCourse.getSelectedItem().toString().trim();
, R8 A$ e1 T3 z* \sql = "select x.sname,k.term,k.cno from "
" Q; w4 h% c i" O! ^6 R* K+ "choicesxx x join Coursexx k "
, ]8 M' a0 f, b1 @- `, J {% A+ "on x.cno=k.cno and k.cname=?";8 u3 {; y9 w9 ?6 v9 P; T- f
try {9 O `$ @' |* ~& R
ps = con.prepareStatement(sql);4 J6 E/ r2 d5 R
ps.setString(1, cName);
- k& |. k# I! a9 C9 Prs = ps.executeQuery();
, e& K6 e4 x# d) f* D1 V3 ometa = rs.getMetaData();+ g4 O$ {- W4 n+ G
cols = meta.getColumnCount();
1 B5 \# l; a, \8 }* Q$ z4 \) Mboolean flag = true;+ [, G* h% P, _4 k
String result = null;
+ Y |) Y5 y& `1 b" o! Qint k = 1;" I3 h; E+ u. F8 k* n
while (rs.next()) {( W9 k' v7 @! O: u4 P4 W
for (int i = 1; i <= cols; i++) {
) K: J8 K" M7 \8 d2 cresult = rs.getString(i);
! K4 [/ Q9 ^# ?; a& PjtAddScore.setValueAt(result, k - 1, i - 1);& C7 y4 J& @3 X) f. D" O! b
}
8 X3 \! H! A( A$ W7 }6 p$ GrowCount = k++;4 h4 G# `+ { z- S: p' |4 w6 R
} } catch (Exception exx) {
. F V* N. t! l) y# q/ R4 j( [& xexx.printStackTrace();
" u) H, C9 G8 X: O}4 @5 }. i: y0 Q% @7 {
} 9 D; ]0 H& F% O. i
//产生用户界面 public void CreateAddScoreGUI() {
$ Y. h! v: _6 D# Nthis.setLayout(new FlowLayout()); JLabel jlCourse = new JLabel("课程:");% E7 v8 C) p0 S2 \/ G; ]- x: ?
jcbCourse.addActionListener(this);' g: q; O+ ]4 K1 \1 o. E
jcbCourse.addItem(new String("请选择课程"));
! d7 D. T- w! d) F1 y4 Y- w2 y" raddCourseToJCheckBoxCourse();
! X- P- J5 O# V9 xthis.add(jlCourse);
# ~% `! F& X$ Z; x- rthis.add(jcbCourse); // JLabel jlClassName = new JLabel("班级:");
1 G; C# d- K2 }( k1 ]$ ]! i// jcbClassName.addActionListener(this);3 y1 j- J. n4 F4 [( ` _+ b- @
// jcbClassName.addItem(new String("请选择班级"));- ?& K5 e- }! l6 U6 d
// addClassNameToJCheckBoxClassName();7 _7 ^- @0 }& f5 J/ G6 I
// this.add(jlClassName);
1 M# u% w8 f5 B! p4 G. @// this.add(jcbClassName); // JLabel jlTerm = new JLabel("学期:");
. B; Z! m/ f% U8 ~// jcbTerm.addActionListener(this);
! m$ [ p7 p! Z2 ?4 N// jcbTerm.addItem(new String("请选择学期"));
$ J1 S$ R5 [/ U0 i! M# Y& ?// addTermToJCheckBoxTerm();+ ?+ g) ^% p$ ^9 r1 Q7 E. q( ~* @
// this.add(jlTerm);" |$ I/ J O6 q9 x
// this.add(jcbTerm); JButton jbSearch = new JButton("查询");
* n" ^% `+ t7 djbSearch.addActionListener(this);
; {* G% Z' S, A$ @, |6 B+ K3 sJButton jbOK = new JButton("提交");- z2 a8 r y- H9 C J% T
jbOK.addActionListener(this);; B, i& J7 q! v1 v- a4 p
JButton jbExit = new JButton("退出");
) j6 [0 p- R- f! H. c) tjbExit.addActionListener(this);& z5 I# B( a0 s$ u1 [8 T
this.add(jbSearch);
* _3 G0 L7 n. r5 |7 H) kthis.add(jbOK);8 i5 B+ F6 w/ a3 T2 m2 ]
this.add(jbExit); this.add(jspScore); this.setVisible(true);* Z8 ]0 X4 h: M+ ?* B' M( Z5 F
this.setSize(500, 600); } public static void main(String[] args) {' y, y8 d0 a2 q) ]$ }, A; ]
new AddScore();/ G1 O2 x1 y0 R6 G
}
6 z5 ]/ G2 M9 H- t4 W} 0 I# p, |' a8 _6 D0 P
|