課程設計(論文)任務書(文章末尾--源文檔下載下傳)
軟體 學院 軟體工程 專業 2016 -7 班
一、課程設計(論文)題目 綜合課程設計2
二、課程設計(論文)工作自 2018 年 1月 1 日起至 2018 年 1月 12 日止。
三、課程設計(論文) 地點:軟體工程實訓中心一部
四、課程設計(論文)内容要求:
1.本課程設計的目的
(1)使學生熟練掌握資料庫基本原理;
(2)使學生熟練掌握資料庫的分析和設計能力;
(3)培養學生熟練使用常見的資料庫管理系統;
(4)培養學生使用Java語言進行面向對象設計的能力;
(5)培養學生熟練使用Java語言進行資料庫應用程式設計的能力;
(6)提高學生的科技論文寫作能力。
2.基本要求:
課程設計題目:報刊訂閱管理系統
設計主要内容:設計一個報刊訂閱應用系統,使系統滿足以下功能和需求:
1)一個訂戶可以訂多種報刊;一種報刊可被多個使用者訂閱;訂單隻能訂閱現有報刊目錄
投遞時,必須根據訂單的情況進行投遞,不得超出訂單的訂閱品種,數量;
2)訂閱管理:訂戶添加,修改,删除;
目錄管理:目錄添加,修改,删除;
訂單管理:完成訂戶訂閱資料的管理(包括添加,修改,删除)
訂單查詢:按訂戶或者訂單号查詢訂單詳細情況;
統計查詢:按報刊目錄統計各類報刊的訂閱數量和金額;
3.課程設計論文編寫要求
(1)要按照書稿的規格列印謄寫課設報告;
(2)報告分為封面、任務書(本文檔)、正文、課程設計體會和參考文獻四部分;
學生簽名:
2018年1月 1日
課程設計(論文)評審意見
(1)題目分析 (20分):優( )、良( )、中( )、一般( )、差( );
(2)流程分析 (30分):優( )、良( )、中( )、一般( )、差( );
(3)資料定義 (30分):優( )、良( )、中( )、一般( )、差( );
(4)代碼編寫 (10分):優( )、良( )、中( )、一般( )、差( );
(5)創新能力 (10分):優( )、良( )、中( )、一般( )、差( );
(6)格式規範性、設計态度及考勤是否降等級:是( )、否( )
評閱人: 職稱:講師
2018年 1 月 12 日
正 文
一、 資料設計
1. 實體
實體1:部門
屬性1:部門号
屬性2:部門名
實體2:使用者
屬性1:使用者名
屬性2:密碼
屬性3:真實姓名
屬性4:性别
屬性5:部門号
屬性6:聯系電話
屬性7:聯系位址
屬性8:訂閱報刊種類數
實體3:管理者
屬性1:管理者名
屬性2:密碼
實體4:報刊
屬性1:報刊代号
屬性2:報刊名
屬性3:類型
屬性4:出版報社
屬性5:出版周期
屬性6:半年訂閱價
屬性7:全年訂閱價
實體5:訂閱
屬性1:使用者名
屬性2:報刊代号
屬性3:訂閱年限
屬性4:訂閱數量
屬性5:所需金額
|
結構功能圖:
聯系
本設計中實體之間的聯系如下(E-R圖):
|
系統E-R圖:
1
|
n
m n
各實體E-R 圖:
|
部門:
使用者:
|
管理者:
報刊:
關系表E-R 圖:
二、 資料庫設計
1. 關系模式
本設計中的關系模式如下:
部門(部門号,部門名)關系主鍵:部門号;外鍵:無
使用者(使用者名,密碼,真實姓名,性别,部門号,聯系電話,聯系位址,訂閱報刊種類數)關系主鍵:使用者名;外鍵:部門号
管理者(管理者名,密碼)關系主鍵:管理者名;外鍵:無
報刊(報刊代号,報刊名,類型,出版報社,出版周期,半年訂閱價,全年訂閱價)
關系外鍵:報刊代号;外鍵:無
訂閱(訂閱号,報刊代号,訂閱年限,訂閱數量,所需金額)
關系主鍵:訂閱号;外鍵:報刊代号
2. 資料表
本設計中建立的資料庫名為:
資料表分别為
表1:部門表
表2:使用者表
表3:管理者表
表4:報刊表
表5;訂閱表
2. 資料庫關系圖為:
三、 資料庫實作
設計中實作資料庫操作的SQL 語句如下:
1) 建立資料表:
1 CREATE TABLE [dbo].[Customer](
2
3 [Cid] [char](10) COLLATE Chinese_CI_AS NOT NULL,
4
5 [Cname] [char](20) COLLATE Chinese_CI_AS NULL,
6
7 [Phone] [char](15) COLLATE Chinese_CI_AS NULL,
8
9 [Address] [char](50) COLLATE Chinese_CI_AS NOT NULL)
10
11 ON [PRIMARY]
12
13 GO
14
15 CREATE TABLE [dbo].[Login](
16
17 [Uname] [char](20) COLLATE Chinese_CI_AS NOT NULL,
18
19 [Upassword][char](20) COLLATE Chinese_CI_AS NOT NULL)
20
21 ON [PRIMARY]
22
23 GO
24
25 CREATE TABLE [dbo].[Diretory](
26
27 [Did] [char](10) COLLATE Chinese_CI_AS NOT NULL,
28
29 [Dname] [char](20) COLLATE Chinese_CI_AS NULL,
30
31 [Unitprice][float] NOT NULL,
32
33 [Ifo][char](50) COLLATE Chinese_CI_AS NULL)
34
35 ON [PRIMARY]
36
37 GO
38
39 CREATE TABLE [dbo].[Order](
40
41 [Ono] [char](10) COLLATE Chinese_CI_AS NOT NULL,
42
43 [Cid][char](10) COLLATE Chinese_CI_AS NOT NULL,
44
45 [Odate] [datetime] NULL)
46
47 ON [PRIMARY]
48
49 GO
50
51 CREATE TABLE [dbo].[OrderDetail](
52
53 [Ono] [char](10) COLLATE Chinese_CI_AS NOT NULL,
54
55 [Cid][char](10) COLLATE Chinese_CI_AS NOT NULL,
56
57 [Quantity] [int] NOT NULL,
58
59 [Qishu][int] NOT NULL,
60
61 [Unitprice][float] NOT NULL,
62
63 [Total][float] NULL)
64
65 ON [PRIMARY]
66
67 GO
2)建立查詢:
1 select *
2
3 from view_1 where 報刊編号 in";
4
5 "(select news_id from 訂閱資訊表 where reader_id=‘023’)
6
7 select *
8
9 from view_1 where 部門 in";
10
11 "(select 部門号 from 使用者 where 使用者名=’肖總’)
四、 程式設計
1) 類
設計中定義的Java類如下:
2) Dbutils類,表示設計連接配接資料庫。
3) Main類,表示設計中添加面闆,頁面跳轉,是JFrame的子類。
2) 類設計
1、Dbutils類
1 public class Dbutils {
2
3 private static String driver;
4
5 private static String url;
6
7 private static String user;
8
9 private static String pwd;
10
11 private static ResourceBundle rb=ResourceBundle.getBundle("com.jdbc.utils.jdbc");
12
13 static
14
15 {
16
17 driver=rb.getString("driver");
18
19 url=rb.getString("url");
20
21 user=rb.getString("user");
22
23 pwd=rb.getString("pwd");
24
25 try {
26
27 Class.forName(driver);
28
29 } catch (ClassNotFoundException e) {
30
31 // TODO
32
33 自動生成的catch塊
34
35 e.printStackTrace();
36
37 }
38
39 }
40
41 private Dbutils()
42
43 public static Connection getConnection()
44
45
46
47 {
48
49 Connection conn=null;
50
51 try {
52
53 conn=DriverManager.getConnection(url,user,pwd);
54
55 } catch (SQLException e) {
56
57 // TODO
58
59 自動生成的catch塊
60
61 e.printStackTrace();
62
63 }
64
65 return conn;
66
67 }
68
69 public static void
70
71
72
73 close(Connection
74
75
76
77 conn,Statement
78
79
80
81 stmt,ResultSet
82
83
84
85 rs)
86
87
88
89 {
90
91 try {
92
93
94
95 if(conn!=null)conn.close();
96
97
98
99 if(stmt!=null)stmt.close();
100
101
102
103 if(rs!=null)rs.close();
104
105
106
107 } catch (SQLException e) {
108
109
110
111 // TODO
112
113
114
115 自動生成的catch塊
116
117
118
119 e.printStackTrace();
120
121
122
123 }
124
125
126
127 }
128
129 public static void main(String [] args) {
130
131 System.out.println(getConnection());
132
133 }}
2、Main類
1 class Main extends JFrame implements ActionListener{
2
3 JRadioButton manager,users;
4
5 JLabel label,label1,label2;
6
7 JTextField userName;
8
9 JPasswordField password;
10
11 JButton login,register,exit;
12
13 JPanel p1,p2,p3;
14
15 public Main(){
16
17 init();
18
19 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
20
21 setVisible(true); }
22
23 void init(){
24
25 setLayout(new FlowLayout());
26
27 setSize(390,260);
28
29 p1=new JPanel();
30
31 p2=new JPanel();
32
33 p3=new JPanel();
34
35 label=new JLabel("歡迎使用報刊管理系統");
36
37 Font font=new Font("隸書",Font.PLAIN,30);
38
39 label.setFont(font);
40
41 p1.add(label);
42
43 ButtonGroup group=new ButtonGroup();
44
45 manager=new JRadioButton("管理者");
46
47 users=new JRadioButton("使用者");
48
49 group.add(manager);
50
51 group.add(users);
52
53 p2.add(manager);
54
55 p2.add(users);
56
57 label1=new JLabel("使用者名");
58
59 p3.add(label1);
60
61 userName=new JTextField(10);
62
63 p3.add(userName);
64
65 label2=new JLabel("密碼");
66
67 p3.add(label2);
68
69 password=new JPasswordField(10);
70
71 p3.add(password);
72
73 add(p1,BorderLayout.CENTER);
74
75 add(p2,BorderLayout.CENTER);
76
77 add(p3,BorderLayout.CENTER);
78
79 login=new JButton("登入");
80
81 register=new JButton("注冊");
82
83 exit=new JButton("退出");
84
85 add(login);
86
87 add(register);
88
89 add(exit);
90
91 userName.addActionListener(this);
92
93 login.addActionListener(this);
94
95 register.addActionListener(this);
96
97 exit.addActionListener(this);
98
99 }
100
101 public static void main(String[] args)
102
103 {
104
105 Main f=new Main();
106
107 f.setTitle("報刊訂閱管理系統");
108
109 }
110
111 public void actionPerformed(ActionEvent e) {
112
113 // TODO
114
115 自動生成的方法存根
116
117 if(e.getSource()==register) //注冊(登入、退出類似)
118
119 {
120
121 new UsersRegister();//過渡到新的視窗
122
123 Menu;
124
125 this.dispose();//釋放目前視窗
126
127 } }
五、 Java源代碼
1 package com.jdbc.utils;
2 import java.sql.Connection;
3
4 import java.sql.DriverManager;
5
6 import java.sql.ResultSet;
7
8 import java.sql.SQLException;
9
10 import java.sql.Statement;
11
12 import java.util.ResourceBundle;
13
14 InformationDaoImpl.java//添加報刊資訊
15
16
17
18 public static void main(String[] args) //錄入報刊資訊(錄入使用者資訊和對使用者,報刊,訂單的增删改查與之類似
19
20 {
21
22 LoggingdataNewspaper f=new LoggingdataNewspaper();
23
24 f.setTitle("報刊資訊");
25
26 }
27
28 public void actionPerformed(ActionEvent e) { // TODO 自動生成的方法存根
29
30 if(e.getSource()==button5) // 退出
31
32 {
33
34 new ManagerHome();//過渡到新的視窗Menu;
35
36 this.dispose();//釋放目前視窗
37
38 }
39
40 if(e.getSource()==button1) // 添加
41
42 {
43
44 //定義一個空的newspaper對象
45
46 newspaper news=new newspaper();
47
48 //将資料封裝到news中
49
50 news.setNewsNo(text1.getText().trim());
51
52 news.setNewsName(text2.getText().trim());
53
54 news.setPublish(text3.getText().trim());
55
56 news.setPubPeriod(text4.getText().trim());
57
58 news.setContent(text5.getText().trim());
59
60 news.setPrice(Float.parseFloat(text6.getText().trim()));
61
62 System.out.println(news);
63
64 //定義一個控制對象
65
66 InformationDaoImpl ifd=new InformationDaoImpl();
67
68 //執行添加使用者操作
69
70 ifd.addNews(news);
71
72 }
73
74 if(e.getSource()==button2) // 删除
75
76 {
77
78 //定義一個空的newspaper對象
79
80 newspaper delnews=new newspaper();
81
82 //将資料封裝到delnews中
83
84 delnews.setNewsNo(text1.getText().trim());
85
86 delnews.setNewsName(text2.getText().trim());
87
88 System.out.println(delnews);
89
90 //定義一個控制對象
91
92 InformationDaoImpl ifd=new InformationDaoImpl();
93
94 //執行添加使用者操作
95
96 ifd.deleteNews(delnews);
97
98 }
99
100 if(e.getSource()==button3) // 查詢
101
102 { //定義一個空的newspaper對象
103
104 newspaper n=new newspaper(); //将資料封裝在n中
105
106 String news=text1.getText().trim(); //定義一個控制對象
107
108 InformationDaoImpl ifd=new InformationDaoImpl();
109
110 n=ifd.FindNewsByNewspaper(news);
111
112 System.out.println(n);
113
114 text2.setText(n.getNewsName());
115
116 text3.setText(n.getPublish());
117
118 text4.setText(n.getPubPeriod());
119
120 text5.setText(n.getContent());
121
122 text6.setText(String.valueOf(n.getPrice()));
123
124 }
125
126 if(e.getSource()==button4) // 修改
127
128 { //定義一個空的users對象
129
130 newspaper news=new newspaper(); //将資料封裝到u當中
131
132 news.setNewsNo(text1.getText().trim());
133
134 news.setNewsName(text2.getText().trim());
135
136 news.setPublish(text3.getText().trim());
137
138 news.setPubPeriod(text4.getText().trim());
139
140 news.setContent(text5.getText().trim());
141
142 news.setPrice(Float.parseFloat(text6.getText().trim())); //定義一個控制對象
143
144 InformationDaoImpl ifd=new InformationDaoImpl(); //執行修改使用者資訊操作
145
146 ifd.updateNewspaper(news);
147
148 System.out.println(news);
149
150 }
151
152 }
153
154 public void addNews(newspaper n){ //定義一個空的連接配接對象
155
156 Connection conn=null; //定義一個準備sql語句
157
158 PreparedStatement ps=null; //自定義将要執行的sql語句
159
160 String sql="insert into
161
162 newspaper(newsNo,newsName,publish,pubPeriod,content,price)
163
164 values(?,?,?,?,?,?)"; //通過Dbutils得到資料庫的連接配接
165
166 conn=Dbutils.getConnection();
167
168 System.out.println(conn);
169
170 try { //将sql語句傳給ps(接收sql語句的容器)
171
172 ps=conn.prepareStatement(sql); //将news的各個屬性值添加到?處
173
174 ps.setString(1, n.getNewsNo());
175
176 ps.setString(2, n.getNewsName());
177
178 ps.setString(3, n.getPublish());
179
180 ps.setString(4, n.getPubPeriod());
181
182 ps.setString(5, n.getContent());
183
184 ps.setFloat(6, n.getPrice()); //執行sql語句(相當于在資料庫中執行sql語句)
185
186 ps.executeUpdate();
187
188 } catch (SQLException e) {
189
190 e.printStackTrace();
191
192 }
193
194 finally{ //釋放連接配接,同時釋放資源
195
196 Dbutils.close(conn, ps, null);
197
198 }
199
200 }//通過報刊号和報刊名删除報刊
201
202 public void deleteNews(newspaper dn) { // TODO 自動生成的方法存根
203
204 Connection conn=null;
205
206 PreparedStatement ps=null;
207
208 conn=Dbutils.getConnection();
209
210 String sql="delete from newspaper
211
212 where
213
214 newsNo=?
215
216 and
217
218 newsName=?";
219
220 try {
221
222 ps=conn.prepareStatement(sql);
223
224 ps.setString(1, dn.getNewsNo());
225
226 ps.setString(2, dn.getNewsName());
227
228 ps.executeUpdate();
229
230 } catch (SQLException e) { // TODO 自動生成的catch 塊
231
232 e.printStackTrace();
233
234 }finally
235
236 {
237
238 Dbutils.close(conn, ps, null);
239
240 }
241
242 } //通過報刊代号查找報刊
243
244 public newspaper FindNewsByNewspaper(String ne) {
245
246 newspaper news= new newspaper();
247
248 Connection conn=null;
249
250 PreparedStatement ps=null;
251
252 ResultSet rs=null;
253
254 conn=Dbutils.getConnection();
255
256 String sql="select * from newspaper where newsNo=?";
257
258 try {
259
260 ps=conn.prepareStatement(sql);
261
262 ps.setString(1, ne);
263
264 rs=ps.executeQuery();
265
266 if(rs.next())
267
268 {
269
270 news.setNewsNo(rs.getString("newsNo"));
271
272 news.setNewsName(rs.getString("newsName"));
273
274 news.setPublish(rs.getString("publish"));
275
276 news.setPubPeriod(rs.getString("pubPeriod"));
277
278 news.setContent(rs.getString("content"));
279
280 news.setPrice(rs.getFloat("price"));
281
282 }
283
284 } catch (SQLException e) { // TODO 自動生成的 catch 塊
285
286 e.printStackTrace();
287
288 }finally
289
290 {
291
292 Dbutils.close(conn, ps, rs);
293
294 }
295
296 return news; //更新報刊資訊
297
298 public void updateNewspaper(newspaper news) { // TODO Auto-generated method stub
299
300 //定義一個空的連接配接對象
301
302 Connection conn=null;//定義一個準備sql語句
303
304 PreparedStatement ps=null; //自定義将要執行的sql語句
305
306 String sql="update newspaper
307
308 set
309
310 publish=?
311
312 ,pubPeriod=?,
313
314 content=?, price=? where newsNo=? and newsName=? "; //通過Dbutil得到資料庫的連接配接
315
316 conn=Dbutils.getConnection();
317
318 System.out.println(conn);
319
320 try { //将sql語句傳給ps(接收sql語句的容器)
321
322 ps=conn.prepareStatement(sql); //将user的各個屬性值添加到?處
323
324 ps.setString(1, news.getPublish());
325
326 ps.setString(2, news.getPubPeriod());
327
328 ps.setString(3, news.getContent());
329
330 ps.setFloat(4, news.getPrice());
331
332 ps.setString(5,news.getNewsNo());
333
334 ps.setString(6, news.getNewsName()); //執行update SQL語句
335
336 ps.executeUpdate();
337
338 } catch (SQLException e) { // TODO 自動生成的 catch 塊
339
340 e.printStackTrace();
341
342 }
343
344 finally{ //釋放連接配接,同時釋放資源
345
346 Dbutils.close(conn, ps, null);
347
348 }
349
350 }
六、 實驗結果
點選管理者,輸入管理者使用者名(admin)和密碼(admin),點選“登入”,進入
圖1-1 報刊訂閱管理系統登入界面
點選“錄入報刊資訊”按鈕,進入錄入報刊資訊界面
圖2-2管理者主界面
圖3-3 報刊管理
圖 5-5訂閱管理
七、 實驗小結
1. 資料庫設計小結
SQL資料庫的使用,讓我對資料庫概念及邏輯和實體結構設計有了更清晰的了解,這裡我所選課題的概念結構設計即詳細的E-R圖,邏輯結構設計就是将E-R圖轉換為資料庫的邏輯結構,并進行優化,而實體結構設計即標明實施環境,确定系統資料庫的存儲結構和存取方法等。還有就是資料實施維護,用DBMS建立資料庫結構,加載資料,實作各種查詢,連結應用程式,設計庫中觸發器,存儲過程等對象,并能對資料庫做簡單的資料維護。
2. Java應用小結
通過這次的課程設計,讓我從之前學Java時的懵懵懂懂到現在了解了不少,學會了不少文法的連接配接,怎麼在整個系統中使用到這部分,并且表達出來等等,都需要好好學習并熟悉裡面的每個知識點和文法,及使用方法等等,面向對象的設計
3. 需完善之處
由于是初次綜合使用SQL和Java來做東西,并且時間有限,不足之處不可避免。本系統的功能還不夠強大,較真正的管理系統還有很多不足, 安全功能也有不足,比如使用者真實姓名沒有糾錯,應該把所有的部門的職工全都輸入到表中,當注冊的時候,輸入真實姓名,如果相關部門沒有此人,則不允許注冊,此功能尚未實作,将在以後的時間繼續完善。
課程設計體會
這次課程設計的主要目的是掌握資料庫應用系統分析設計的基本方法,基本掌握SQL和Java的使用,進一步提高分析解決問題的綜合能力。通過這次課程設計,我基本掌握了以上要求。但隻有2周的課程設計時間,時間比較倉促,是以開發的系統不是很完善,有一些功能未實作,但是報刊訂閱的基本功能均已實作。以前對資料庫還有Java的很多知識認識都不深刻,做過這次課程設計之後,我對這些都有個基本的系統了解,比如:對表内一些字段的限制,關系等的運用以及比較熟練。
但是由于第一次真正的全系統運用,是以運用的不是很熟練。剛開始的時候,對于SQL和Java的文法,用法等一系列知識都不熟悉,經過對這個系統的開發,在開發過程中遇到但也解決了很多問題,是以說我們要迎難而上,不斷地去學習,自己才有所成長,有所發展。
參考文獻
1.資料庫系統概論(第5版)王珊 薩師煊編著 高等教育出版社 2014年9月
2.Java語言程式設計(第2版)丁振凡 編著 清華大學出版社2014年9月
3.李剛.Java程式員之旅--Java資料庫技術詳解[J].化學工業出版社.2011.4
4.姜中華、劉小春.Java 資料庫應用程式設計[J].機械工業出版社.2008.4
5.軟體開發技術聯盟.Java Web開發實踐[J].清華大學出版社.2013.9
Leszek A.Maciaszek.需求分析與系統設計[J]中信出版社.2003
6.網際網路資源
掃碼公衆号回複--“報刊”擷取原檔案