1、Java 程序设计课程设计任务书一、 设计目的Java 课程设计是我院计算机科学与技术专业学生必做的集中实践性环节之一,是学习完Java 程序设计课程后进行的一次全面的综合练习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对 Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。二、 设计要求1、 学生必须独立完成设计任务,严禁抄袭或找人代做等行为,一经发现成绩以不及格计。2、 课程设计完毕应提交如下设计成果:源程序(打包成如下文档名:课题名称_本人学号_本人姓名.r
2、ar);可以直接执行的 jar 或 exe 文件;说明如何运行系统以及你在本系统中做何工作的 readme.txt 文件;文字描述不少于 1000 字(不含源码)的课程设计报告。三、课程设计报告格式课程设计报告分以下几部分:1、封面2、系统描述:介绍开发的系统的功能和解决的问题;3、分析与设计:主要包括以下内容: 功能模块划分; 数据库结构描述(数据库编程需要); 系统详细设计文档(类的划分及相互关系,系统的流程图) 各个模块的实现方法描述; 测试数据及期望结果;4、源代码:要求源代码中间有适量的注释,且编码风格符合规范,源码格式为: (new roman 5 号 单倍行距);5、总结:对设计
3、中值得肯定的内容进行评价,客观地指出其中的不足,并说明克服或改进的办法。6、参考文献:参考文献的书写格式要符合如下规范(不得自己编造);a.期刊文献书写格式:作者论文篇名J期刊名出版年,卷(期如:高曙明自动特征识别技术综述J计算机学报1998,21(3)b.著作文献书写格式:作者书名M出版地:出版社,出版年如:刘勇,康立山,陈毓屏非数值并行算法(第二册)M北京:科学出版社,1998四、验收及评分标准验收内容包括:程序运行情况、课程设计报告( 最迟在 19 周星期一发送到zyc_ 邮箱)及平时成绩三部分,最后成绩以等级分,即优、良、中、及格、不及格五个等级给出。各部分所占比例为:程序运行情况(4
4、0%)、课程设计报告(50%)、平时成绩(10%)五、参考题目序号 课题名课题 1 日期计算器程序的开发课题 2 applet 线程动画程序的开发课题 3 学生成绩管理系统的开发课题 4 图书信息管理系统的开发Java 程序设计课程设计图形界面项目实验报告日期计算器实验项目:日期计算器一、 实验内容完成日期计算器的编写。二、 实验要求1、理解并掌握图形界面的设计。2、理解整体算法的思路,即 actionPerformed()的算法。3、输入日期,完成星期几的计算,并输出星期值(注意日期输入的合法性)4、输入日期加天数,完成日期加天数的计算,并输出新日期(注意日期的合法输入,以及注意日期不能加日
5、期,既第二次输入的只能是天数)5、输入日期、减、以及天数或日期,如果为天数,计算日期减天数,否则计算日期减日期,得到新日期或相应天数差值,并输出。6、进一步学习 JAVA 的编程思想。三、 实验目的1、理解并掌握图形界面的设计。2、理解整体算法的思路,即 actionPerformed()的算法。3、输入日期,完成星期几的计算,并输出星期值(注意日期输入的合法性)4、输入日期加天数,完成日期加天数的计算,并输出新日期(注意日期的合法输入,以及注意日期不能加日期,既第二次输入的只能是天数)5、输入日期、减、以及天数或日期,如果为天数,计算日期减天数,否则计算日期减日期,得到新日期或相应天数差值,
6、并输出。6、进一步学习 JAVA 的编程思想。四、 实验条件编译器: JcreatorJava 环境: JDK 6.0操作系统: Windows XP SP2五、思路分析1、 为使程序美观,使用了多个 JPanel 和不同的 LayoutManager(比如FlowLayout、BorderLayout、GridLayout)进行布局设计,同时限定了窗体的大小;2、 封装了一个创建数字按钮的方法 getNumberButton(int n),可以快速地进行增加数字按钮的操作;3、 为将文本框中的字符串转换为日期编写了 toDate()方法,其中包括日期输入错误的异常处理,此方法可以在保存当前日
7、期、获取减法操作的日期时被复用;4、 因为要实现键盘和鼠标的双重操作,将操作时使用的几个方法(pressButtonpressEqualButtonpressOPButton 等)封装起来,使其可供多个监听器调用;5、 为能通过键盘操作,对所有按钮注册了监听器;6、 为判断当前是否处于输入状态(否则处于程序提示状态),使用布尔型属性 inputing 标记当前状态,当其为 false 时,向文本框中输入字符会先清空文本框;7、 为实现+-操作、使用了 plus 和 minus 两个布尔型属性来标记当前状态,同时使用一个 Calendar 属性保存当前日期,在每步操作时都对其进行改变,最后=时输
8、出。8、 考虑到可能存在多次连续+-操作,设计了更完善的算法。六、 程序代码【DateCalculator.java】1. import java.awt.*;2. import java.awt.event.*;3. import java.text.SimpleDateFormat;4. import java.util.Calendar;5. import java.util.Date;6. import javax.swing.*;7. 8. /*9. * 日期计算器10. * 11. * author Cyin12. * author Lee13. * author YOYO14.
9、* author Skittles15. * 16. * since 2010-10-2417. * version 0.118. * 19. */20. public class DateCalculator extends JFrame 21. 22. /*23. * 主面板24. */25. JPanel context = new JPanel();26. 27. /*28. * 三个子面板29. */30. JPanel displayPanel = new JPanel();31. JPanel numPanel = new JPanel();32. JPanel opPanel
10、= new JPanel();33. 34. /*35. * 结果文本框36. */37. JTextField result = new JTextField(“0“,20);38. 39. /*40. * 主要按钮41. */42. JButton btnCE = new JButton(“CE“);43. JButton btnPlus = new JButton(“+“);44. JButton btnMinus = new JButton(“-“);45. JButton btnEqu = new JButton(“=“);46. JButton btnX = new JButton
11、(“/“);47. 48. /*49. * 是否在输入日期或天数状态的标记50. */51. boolean inputing = false;52. 53. /*54. * 是否在进行 +-操作的标记55. */56. boolean plus = false;57. 58. /*59. * 是否在进行 -操作的标记60. */61. boolean minus = false;62. 63. /*64. * 当前日期65. */66. Calendar calendar = Calendar.getInstance();67. 68. /*69. * 键盘监听器70. */71. Keyb
12、oardListener keyListener = new KeyboardListener();72. 73. /*74. * 按钮监听器75. */76. ButtonActionListener btnListener = new ButtonActionListener();77. 78. /*79. * 构造器80. */81. public DateCalculator()82. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);83. this.setSize(260,220);84. this.setTitle(“日期计算
13、器“); 85. this.setResizable(false);86. 87. this.setLayout(new FlowLayout();88. this.add(context);89. 90. initWindow();91. 92. this.setVisible(true);93. 94. 95. /*96. * 初始化窗体97. */98. private void initWindow()99. context.setLayout(new BorderLayout(10,10);100. 101. / 显示面板102. displayPanel.setLayout(new
14、 FlowLayout(FlowLayout.CENTER);103. displayPanel.add(result);104. result.setHorizontalAlignment(JTextField.RIGHT);105. result.setFocusable(false);106. context.add(displayPanel,“North“);107. 108. / 数字面板109. numPanel.setLayout(new GridLayout(4,3,5,5);110. for(int i=1;i=02. import javax.swing.table.*;3
15、. 4. import java.awt.*;5. import java.awt.event.*;6. import java.io.*;7. import java.util.*;8. 9. /*10. * 学生成绩管理系统11. * author Cyin12. * author Lee13. * author Komi14. * author Skittles15. * since 2010-10-2316. * version 1.017. */18. public class StudentManager extends JFrame 19. 20. /*21. * 当前窗体22.
16、 */23. private Container currentContainer = this;24. 25. /*26. * 窗体标题27. */28. private String title = “学生成绩管理系统“;29. 30. /*31. * 标题字体32. */33. private Font headFont = new Font(“黑体“,Font.PLAIN,18);34. 35. /*36. * 数据文件37. */38. private File data = new File(“data.txt“);39. 40. /*41. * 数据模型42. */43. pri
17、vate DataTable dataModel = new DataTable();44. 45. /*46. * 数据表格47. */48. private JTable dataTable = new JTable(dataModel);49. 50. /*51. * 备注52. */53. private JLabel extraLabel = new JLabel();54. 55. /*56. * 欢迎面板57. */58. private JPanel welcomePanel = createWelcomePanel();59. 60. /*61. * 添加信息面板62. */
18、63. private JPanel insertPanel = createInsertPanel();64. 65. /*66. * 显示信息面板67. */68. private JPanel displayPanel = createDisplayPanel();69. 70. /*71. * 修改信息面板72. */73. private JPanel modifyPanel = createModifyPanel();74. 75. /*76. * 构造器:初始化窗体77. */78. public StudentManager()79. /* 设置窗体基本信息 */80. thi
19、s.setLocation(300, 300);81. this.setSize(475,450);82. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 83. this.setResizable(false);84. 85. this.setTitle(title);86. this.createMenu();87. this.add(welcomePanel);88. 89. /* 如果数据文件不存在则默认创建一个 */90. if(!data.exists()91. try 92. new FileWriter(data);93
20、. catch (IOException e) 94. 95. 96. 97. /* 显示窗体 */98. this.setVisible(true);99. 100. 101. /*102. * 创建菜单栏103. */104. private void createMenu()105. JMenuBar menubar = new JMenuBar();106. 107. /* 建立菜单并添加到菜单栏中 */108. JMenu manageMenu = new JMenu(“管理“);109. menubar.add(manageMenu);110. JMenu helpMenu = n
21、ew JMenu(“帮助“) ;111. menubar.add(helpMenu);112. 113. /* 建立菜单项并添加到菜单中 */114. JMenuItem m_add = new JMenuItem(“添加“ );115. JMenuItem m_manage = new JMenuItem(“查看“ );116. JMenuItem m_modify = new JMenuItem(“修改“);117. JMenuItem m_export = new JMenuItem(“导出“) ;118. JMenuItem m_exit = new JMenuItem(“退出“);1
22、19. manageMenu.add(m_add);120. manageMenu.add(m_modify);121. manageMenu.add(m_manage);122. manageMenu.addSeparator();123. manageMenu.add(m_export);124. manageMenu.addSeparator();125. manageMenu.add(m_exit);126. 127. JMenuItem m_help = new JMenuItem(“说明“) ;128. JMenuItem m_copy = new JMenuItem(“版权“ )
23、; 129. helpMenu.add(m_help);130. helpMenu.addSeparator();131. helpMenu.add(m_copy);132. 133. /* 为添加菜单项注册监听器,使点击该菜单项时添加学生成绩数据 */ 134. m_add.addActionListener(new ActionListener()135. 136. public void actionPerformed(ActionEvent e) 137. resetPanel(insertPanel);138. 139. 140. );141. 142. /* 为修改菜单项注册监听器
24、,使点击该菜单项时修改学生成绩数据 */ 143. m_modify.addActionListener(new ActionListener()144. 145. public void actionPerformed(ActionEvent e) 146. resetPanel(modifyPanel);147. 148. 149. );150. 151. 152. /* 为管理菜单项注册监听器,使点击该菜单项时显示学生成绩列表 */ 153. m_manage.addActionListener(new ActionListener()154. 155. public void acti
25、onPerformed(ActionEvent e) 156. resetPanel(displayPanel);157. 158. 159. );160. 161. /* 为导出菜单项注册监听器,使点击该菜单项时复制现有数据到指定文件 */162. m_export.addActionListener(new ActionListener()163. 164. public void actionPerformed(ActionEvent e) 165. /* 弹出保存文件对话框供选取要保存的文件及位置 */166. JFileChooser chooser = new JFileChoos
26、er();167. int choose = chooser.showSaveDialog(currentContainer);168. if(choose=JFileChooser.APPROVE_OPTION)169. /* 调用导出数据到文件方法 */170. boolean flag = exportData(chooser.getSelectedFile();171. if(flag)172. JOptionPane.showMessageDialog(currentContainer, “数据已经成功导出到指定文件!“,“ 导出成功“,JOptionPane .PLAIN_MESS
27、AGE);173. else174. JOptionPane.showMessageDialog(currentContainer, “无法导出到指定文件!“,“ 导出失败 “,JOptionPane.ERROR_MESSAGE);175. 176. 177. 178. 179. );180. 181. /* 为退出菜单项注册监听器,使点击该菜单项时退出程序 */ 182. m_exit.addActionListener(new ActionListener()183. 184. public void actionPerformed(ActionEvent e) 185. System.e
28、xit(0);186. 187. 188. );189. 190. /* 为说明菜单项注册监听器,使点击该菜单项时弹出程序说明窗口 */ 191. m_help.addActionListener(new ActionListener()192. 193. public void actionPerformed(ActionEvent e) 194. JOptionPane.showMessageDialog(currentContainer, “没有任何说明“,“帮助信息“,JOptionPane.PLAIN_MESSAGE);195. 196. 197. );198. 199. /* 为版
29、权菜单项注册监听器,使点击该菜单项时弹出版权信息窗口 */ 200. m_copy.addActionListener(new ActionListener()201. 202. public void actionPerformed(ActionEvent e) 203. JOptionPane.showMessageDialog(currentContainer, “小组成员:n“ +204. “124112006010 Cyinn“ +205. “124112006027 Leen“ +206. “124112006039 Komin“ +207. “124112006059 Skitt
30、les“,“版权信息“,JOptionPane.INFORMATION_MESSAGE);208. 209. 210. );211. 212. /* 设置菜单栏 */213. this.setJMenuBar(menubar);214. 215. 216. /*217. * 重设面板218. */219. private void resetPanel(JPanel panel) 220. this.setVisible(false);221. this.getContentPane().removeAll();222. 223. /* 如果是要切换到显示信息面板,则同时加载信息 */224.
31、 if(panel=displayPanel)225. loadData();226. 227. 228. this.getContentPane().add(panel);229. this.setVisible(true);230. 231. 232. /*233. * 创建欢迎面板234. * return 欢迎面板235. */236. private JPanel createWelcomePanel()237. JPanel panel = new JPanel();238. 239. /* 标题文本 */240. JLabel title = new JLabel(“学生成绩管理
32、系统 v1.0“);241. title.setFont(headFont);242. panel.add(title);243. 244. panel.setVisible(true);245. return panel;246. 247. 248. /*249. * 创建添加信息面板250. * return 添加信息面板251. */252. private JPanel createInsertPanel()253. JPanel panel = new JPanel();254. panel.setLayout(null);255. panel.setFocusable(true);
33、256. 257. /* 标题文本 */258. JLabel title = new JLabel(“录入学生成绩“);259. title.setFont(headFont);260. panel.add(title);261. title.setBounds(175, 25, 120, 30);262. 263. /* 显示表单文本及文本框 */264. final String label = “学号“,“姓名“,“ 汇编程序设计“,“Java 程序设计“,“计算机网络“ ,“操作系统“;265. final JTextField textField = new JTextFieldl
34、abel.length;266. for(int i=0;ilabel.length;i+)267. JLabel titleLabel = new JLabel(labeli + “:“) ;268. titleLabel.setBounds(100, 80 + 40*i, 120, 30);269. panel.add(titleLabel);270. 271. textFieldi = new JTextField(20);272. textFieldi.setBounds(220, 80 + 40*i, 150, 24);273. panel.add(textFieldi);274. 275. 276. /* 为学号按钮注册监听器,使移开焦点时自动检测键入的学号是否存在 */277. textField0.addFocusListener(new FocusListener()278. 279. public void focusGained(FocusEvent e) 280. 281. 282. /*283. * 当焦点缺失时284. */285. public void focusLost(FocusEvent e) 286. boolean flag = true;