|
//需求分析:写一个成绩管理系统。其中的一个功能是实现成绩录入。要求能根据课程名称在系统里找到学生和课程信息;在结果区域中添加成绩。 //规则:要求对输入成绩的操作要有有效性检验。成绩只接受大于0且小于100的数字;同一记录不能反复提交;当点击“提交”,告知用户操作是否成功,并给出相应信息;课程名下拉列表中的课程列表根据数据库中的课程表,自动生成。
6 D0 x0 k" F4 M$ ~1 k//代码如下:
4 \( A4 D* R+ m' l2 `8 Z/ simport java.awt.*;
* u7 Y5 h0 p5 b( t" Vimport java.awt.event.*;% a" L. z) N+ N' l
import java.sql.*;
import javax.swing.*;
2 o1 D. T8 t4 H- I! n2 timport javax.swing.table.DefaultTableModel; import school.schoolPicture.JdbcUtil; public class AddScore extends JPanel implements ActionListener {
3 b+ x6 c9 {% P$ r0 X( j5 tString[] 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();/ R6 @3 }/ e+ \
Connection con = JDBCUtil.getConnection();
8 u! z4 y6 }3 R// Connection con2 = JdbcUtil.getConnection();
o0 _) l; t: |* ^: IPreparedStatement ps = null;
; B1 C- l% R0 n% _- q. `ResultSet rs = null;
. T) s0 o. P$ g, {/ K4 R* kResultSetMetaData meta = null;
& ]6 o' B. Y; P+ D8 T4 yString sql = null;; X# f y" t6 z1 h( {; b. j3 ]
int cols = 0;: ^* U: z, O3 I. H$ |& e% ?2 x
int rowCount = 0; public AddScore() {6 i* U- d# ]2 r7 u8 V& f
CreateAddScoreGUI();! ^9 m8 v+ Z& i: {7 n6 H! z
} public void actionPerformed(ActionEvent e) {
, J4 G F! l- w% }4 wString str = e.getActionCommand();
: L9 l. p9 Q# r# U$ _% F$ F5 q' Kif ("查询".equals(str)) { //当点击查询时,用searchScore()方法对其进行处理
3 \) \9 ?% u( E# }searchScore();
/ {) ]( E! X; W} else if ("提交".equals(str)) { //当点击提交时,用tryCommit()方法对其进行处理3 U! h$ b: | a' a" D
tryCommit(); } else if ("退出".equals(str)) {
3 {1 A9 _+ k; tthis.setVisible(false);
1 v( R b. i+ X# I}
1 \; s* U; {0 t8 ^}6 O \0 o7 x9 C0 [
public void tryCommit() {, `% \5 N4 a M* m" Z- q
if (cols < 1)
" d! ~) q8 R' j h; d' oreturn;& Q) a i, {. h% R8 V
sql = "insert into scorexx values(?,?,?,?)";7 ^( h6 a% y5 f
try {
$ o/ `$ G; |3 {/ Kps = con.prepareStatement(sql);
/ U% w' S3 G' G$ g! m) P; B' F+ YString[] value = new String[4];+ q; _- d, s% q* u0 P
for (int k = 0; k < rowCount; k++) {# I" H" Z! P" z! q0 ?; C
for (int i = 1; i <= cols + 1; i++) {
& t Y0 U7 |2 E( k# H" M0 i// 如果成绩为空,取消提交操作,并给出提示。
; [ L V1 b7 F) V5 \if (jtAddScore.getValueAt(k, i - 1) != null) {# {2 S+ e* W" ^- X2 |- j. f
value[i - 1] = jtAddScore.getValueAt(k, i - 1)
5 j+ z- {+ k5 V" {9 m# Z.toString();
0 `+ X0 u) n0 y2 b$ U} else {4 [5 @& q/ v" i! p
if (i == 4)& A) B! F- `6 \9 m, Q
JOptionPane
0 v: a7 a# c& t8 J8 s: W.showMessageDialog(null, "无效成绩输入!成绩不能为空");
8 W" A e: ?" hreturn;
) w3 Q; u3 E4 s9 j- X}: G; E- W& e! Q8 c1 J
// 如果成绩字段里面不是数字,则取消本次操作??+ [2 T* ]3 }0 t; C: z1 M& J
// String str = "^[0-9]{1}[0-9]?[0-9]?$";
' d6 q9 ~ w$ a4 j// if (i == 4) {6 m; Z/ \) e% Q2 j9 x! W q8 ^! y O
// if(jtAddScore.getValueAt(k, i - 1) instanceof Integer){
' G- U9 O; }# Q9 O. e// if(
7 }4 I; b% Z1 D6 q// Integer.parseInt(value[3])<0||Integer.parseInt(value[3])>100)
' R% Z3 ` L- D4 O8 U2 n' k// {JOptionPane.showMessageDialog(null, "成绩只能大于0且小于100");: K+ u: {: Q2 n5 Z' ~6 E0 ~: ?0 {
// return;}
& v1 [$ t9 J( p// }8 W- L) I. j) A, ^& e( m' D
// }' a- z8 W1 f6 u
System.out.print(value[i - 1]);
N- ]3 q1 \ `) ]* q- q}
% x, h# G4 B/ n; P( i- `9 dps.setString(1, value[0]);
/ P+ O# {/ W5 T' g+ `ps.setString(2, value[1]);
# e; @5 x7 I- z* |; ?3 y9 C$ ips.setString(3, value[2]);
, H7 p6 L; Y9 S( H) Bps.setInt(4, Integer.parseInt(value[3]));. _5 V. e; G$ A6 C1 q2 U
ps.executeUpdate();- N, |+ H& P1 b* g) j6 I
con.commit();
9 @( H T+ {* a9 qSystem.out.println();
) m, A1 p& h. u( [) f7 M2 h2 W/ m) M}
3 c7 l' A% M5 ^" k- \JOptionPane
0 p7 r6 Z( b: _7 z3 M! a0 ?.showMessageDialog(null, "提交成功:更新 " + rowCount + " 条记录!");6 K+ Z' q. C# C6 ?) s
} catch (Exception ew) {
6 x2 U5 O/ [/ }8 y) g+ X% s, \ew.printStackTrace(); } }
7 X% G+ d. Y6 w( o7 Q- X' N" C+ K// 自动添加课程下拉列表中的课程5 H" c, i0 N2 I* X3 Y' F
public void addCourseToJCheckBoxCourse() {& x" J1 V' V1 l9 c+ K' N% C
String courseName = null;
q& T) N% I) k7 u5 p7 asql = "select cname from coursexx";
) k5 ~8 j1 j" N, i) r. ^: U: ~try {
( K8 a5 c7 c3 ]1 I7 l Qps = con.prepareStatement(sql);
) c+ T9 u2 j0 ~% yrs = ps.executeQuery();5 q M! d- B# V9 ?% Q" h
ResultSetMetaData meta = rs.getMetaData();
# F: J9 \/ q; i, B4 ?. ]int cols = meta.getColumnCount();
: H4 H% e3 t# Y0 O' p; kwhile (rs.next()) {
% @3 {8 H) M% [( T( Tfor (int i = 1; i <= cols; i++) {" b3 u; u: t, S+ }
courseName = rs.getString(i);
! F$ U: a" `, k+ v0 N; \System.out.println(courseName);( f9 N, T% m; c/ ]1 L. f% x
jcbCourse.addItem(courseName);0 H7 H* S% h' j, ]
rowCount++;
8 o2 y7 b. B7 S0 d; T. Y3 g}, E9 t. v/ w) Z- b0 B* g
}* M- k4 B2 l1 f# C1 ]9 L, g5 q
con.commit();
7 `0 ^. D* H6 Q2 J7 p} catch (Exception ers) {
, p# B8 `% U4 M7 b6 p+ }ers.printStackTrace();: e- Z: ] T3 ^+ p+ H3 b/ \# ]
try {6 x3 z) d! P2 w3 P
con.rollback();7 Z0 k- a+ ~: q9 r1 z/ H& N
} catch (Exception er) {3 h$ A; l8 h4 u
er.printStackTrace();
/ J9 U% H; _+ m}
/ q5 u$ `3 h; S1 I- o- B/ n/ h} } - T9 R: J" t3 U# y- b, _; G0 u
public void searchScore() {) Y; b- Z+ o, r, S& _- K8 d4 ~
// 每次查询之前清空之前的结果
! f1 l* | A1 R: l! e7 a& ~for (int k = 0; k < 50; k++) {
5 F: p1 L1 t( z$ U+ z/ }for (int i = 0; i < cols; i++) {: D) P5 Q( P" o6 E
jtAddScore.setValueAt(null, k, i);
0 V5 _1 K `. y9 b5 c. J e. H} }" c% \" w: Q' B& f, i+ _
// Method1:JDBC Method2:hibernate9 a2 `! |, J' Y" v' O
String cName = jcbCourse.getSelectedItem().toString().trim();* V/ z, F# Q3 X. K: H( a
sql = "select x.sname,k.term,k.cno from "* ~% u! x3 z% V X' c
+ "choicesxx x join Coursexx k "- A$ p" S5 {# `4 P
+ "on x.cno=k.cno and k.cname=?";/ k/ m8 A Q: {; b! H6 [" X
try {
) x1 M m% S9 N* u3 D* t" W$ Xps = con.prepareStatement(sql);
" r! S0 B( z- `$ qps.setString(1, cName);5 u4 ^8 q/ G% n* m9 f0 g6 k
rs = ps.executeQuery();, u. ]& F5 N" N& v: Z8 m1 H5 y
meta = rs.getMetaData();
9 |5 o/ Z% y5 r- `# }! }cols = meta.getColumnCount();3 r* `0 ~% H# Z( n. U5 [ U
boolean flag = true;" ^4 L# y. ~" y! C3 |$ E# [: s
String result = null;
% \) H, ~* N. f; G7 m. {9 K! Aint k = 1;
3 ?5 c( k. Z' Z# a' t0 \7 Uwhile (rs.next()) {
C& r, E' ], i$ T( Z/ {for (int i = 1; i <= cols; i++) {
, R/ Y+ e3 ?3 cresult = rs.getString(i);
/ _* G& n3 v4 W7 B* l9 F \* HjtAddScore.setValueAt(result, k - 1, i - 1);
4 L) k/ m; }" D- v- ]}
4 n; ]: f1 u- D) FrowCount = k++;( d* [# W/ Y4 N
} } catch (Exception exx) {: U; d# G4 J$ W1 o9 C
exx.printStackTrace();0 Z2 b9 F' O! Q. p
}7 `4 o" `. M9 y7 `: L* ]2 S2 [) \
} 7 k# A! v2 _* x% [1 l# L1 f
//产生用户界面 public void CreateAddScoreGUI() {
4 H5 C$ |& M ythis.setLayout(new FlowLayout()); JLabel jlCourse = new JLabel("课程:");& }; B. n, c- M- ^5 l7 r2 s6 T
jcbCourse.addActionListener(this);
7 Q/ O. E* l+ ~jcbCourse.addItem(new String("请选择课程"));6 H( M2 j; X$ O( h* A( x- Q
addCourseToJCheckBoxCourse();
' a: X G2 `6 c5 S- [% Cthis.add(jlCourse);
5 e) v8 N4 v* y" w/ Gthis.add(jcbCourse); // JLabel jlClassName = new JLabel("班级:");
6 {0 P7 k3 O, D// jcbClassName.addActionListener(this);+ y* B9 m1 [" R. B
// jcbClassName.addItem(new String("请选择班级"));
, w' S) s) S0 B) L: k( R// addClassNameToJCheckBoxClassName();
) R2 N' B" Z. e( Y7 L5 ?// this.add(jlClassName);# @: X( m; V2 J' A; _: R
// this.add(jcbClassName); // JLabel jlTerm = new JLabel("学期:");
0 \' q) _( T8 l$ L// jcbTerm.addActionListener(this);4 X' E2 J2 Y: g0 f+ Y6 R4 h
// jcbTerm.addItem(new String("请选择学期"));8 p m" \, U- _. b
// addTermToJCheckBoxTerm();
( L8 q5 Q0 R: g! s r1 T// this.add(jlTerm);- ~, R' Z$ y* ]! C) [+ Z9 n
// this.add(jcbTerm); JButton jbSearch = new JButton("查询");
! S: [$ u: ~, L' h8 I$ XjbSearch.addActionListener(this);
* A2 n0 g2 {) u0 y* \+ JJButton jbOK = new JButton("提交");7 s: z5 i7 l5 s3 K2 y0 ^2 a
jbOK.addActionListener(this);1 \% z2 J. y6 D
JButton jbExit = new JButton("退出");
5 x, ]6 |- p# L" E- zjbExit.addActionListener(this);
; t# j! r4 a; Kthis.add(jbSearch);
8 o( F4 k9 t% N) \* ]9 Gthis.add(jbOK);
6 O' F3 b( A/ J2 uthis.add(jbExit); this.add(jspScore); this.setVisible(true);
2 W* T, p3 u& e. D) U5 Ithis.setSize(500, 600); } public static void main(String[] args) {
1 t) B1 h# u8 j) q6 Q! Cnew AddScore();7 z5 E6 `, {7 a4 }% C& S
}
0 D2 f4 Q9 P7 z9 D* ^+ L3 ]8 K} 4 _' ?; v8 {3 ~) j
|