




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计课程设计名称: java课程设计 专 业 班 级 : 计科10级5班 学 生 姓 名 : 学 号 : 指 导 教 师 : 课程设计时间: 2012.6.18-2012.6.30 计算机科学与技术 专业课程设计任务书学生姓名专业班级学号题 目毕业设计学生分配系统课题性质工程设计课题来源自拟课题指导教师同组姓名无主要内容1. 能够导入学生名单;2. 能够导入教师名单;3. 能够设定规则,哪些教师可以多分多少个学生;4. 考虑设定的规则,按顺序或随机的方法分配学生;5. 输出分配后的名单,以教师为主或以学生为主。任务要求1. 进一步掌握SQL语句的使用,能与实际结合应用于现实生活之中;
2、2. 掌握毕设学生分配系统的分配操作,实现对学生的按顺序分配及随机分配操作;3. 掌握程序与数据库之间的连接,对毕设学生分配系统进行学生和教师的导入导出操作;4. 能准确无误实执行学生教师的分配功能,并执行输出功能将结果输出。参考文献1 (美)Cay S. Horstmann、Gary Cornell. Java核心技术卷I:基础知识(第8版)(英文影印版).人民邮电出版社, 2008.112 耿祥义、张跃平. JAVA2实用教程(修订). 清华大学出版社,2001.10审查意见指导教师签字: 教研室主任签字: 2012年 6 月 20 日 毕设学生分配系统一、需求分析毕业设计学生分配系统主要
3、用于导师对学生或学生对导师进行分配问题的解决而开发的应用性软件系统。该系统拥有的导入教师导入学生功能可以对教师、学生信息的导入并将其信息保存至数据库以备用户调用,在导入后的数据库中会自动为每位教师学生按先来后到的序号对其进行编排序号,用户可以自行在数据库中看到导入的教师或是学生信息,在导入信息时该系统会自动检查根据用户导入信息是否与相应的应该输入的信息类型是否匹配,匹配则会导入成功,否则会提醒用户,如果用户导入信息不完善时就会提醒用户导入将会失败。该系统中的设置规则功能会根据用户的分配方法不同可以自行设置为按顺序分配或是随机分配,在该系统中用户可以根据教师职称的不同对其进行名额的分配设置不同的
4、分配量,在默认情况下每位教师均可分得两个学生,但用户可以设置教授多分配1名学生,则凡是教授级的教师均可分得3名学生,在默认情况下该系统分配顺序为按顺序分配,但用户可以设置随机分配,则分配情况为随机下的分配结果,执行分配功能后用户可以点击导出功能将会看到分配后的结果二、概要设计系统功能模块图如图1所示:系统流程图如图2所示:图2.系统流程图三、运行环境、开发语言软件环境:Microsoft Windows XP Professional 版本 2002 Service Pack 3硬件环境:Pentium(R) D CPU 2.8GHz 内存 1.00GB开发语言:Java四、详细设计1 程序清
5、单所有程序如表1所示。表1 程序清单匿名内部类功能stuListener导入学生信息teaListener导入教师信息setListener设置规则功能fenpeiListener分配功能resultListener导出结果2 数据库设计Student表用来存放学生信息,结构如下表2所示:表2 Student(学生信息表)列名类型描述idBigint学生学号,唯一nameVarchar学生姓名ZhuanyeVarchar专业teacher表用来存放教师信息,结构如下表3所示:表3 teacher(教师信息表)列名类型描述NameVarchar(200)教师姓名ZhichengVarchar(2
6、00)教师职称3 主要代码3.1 导入学生信息功能首先执行导入学生信息功能输入学生信息,输入姓名、学号、专业。单击“OK”按纽后会把数据保存到student数据库中。该功能截图如图3。具体代码如下:图3 导入学生信息界面class stuListener implements ActionListenerpublic void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=stuBtn)final JFrame f=new JFrame("导入学生对话框");Container c=f
7、.getContentPane();final JLabel jl1 = new JLabel("姓名:");final JLabel jl2 = new JLabel("学号:");final JLabel jl3 = new JLabel("专业:");final JTextField jtf1 = new JTextField(15);final JTextField jtf2 = new JTextField(15);final JTextField jtf3 = new JTextField(15);final JButto
8、n okBtn=new JButton("Ok");final JButton cancelBtn=new JButton("Cancel");okBtn.setPreferredSize(new java.awt.Dimension(105,25);cancelBtn.setPreferredSize(new java.awt.Dimension(105,25);okBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object sou
9、rce=e.getSource();if(source=okBtn)int flag=0;/输入类型是否匹配标记String transport=jtf2.getText();stu_name=jtf1.getText();try/如果textfield中没有内容将在Long.parseLong转换时导致异常String str1=jtf2.getText();str1=str1.replaceAll("0-9","");/将所有的数字型字符替换为空if(str1.length()>0) /文本框中的值不是int类型,有其他字母或者符号型字符的存在
10、JOptionPane.showMessageDialog(null,"输入类型不匹配","Warning",JOptionPane.WARNING_MESSAGE);flag=1;stu_id=Long.parseLong(transport);catch (Exception exp)stu_zhuanye=jtf3.getText();if(flag=0&stu_name.length()!=0&transport.length()!=0&stu_zhuanye.length()!=0)trystu_xuhao=stuByS
11、elect()+1;insertStuTable(stu_xuhao,stu_id,stu_name,stu_zhuanye);JOptionPane.showMessageDialog(null,"导入成功,信息已保存","Terrific",JOptionPane.PLAIN_MESSAGE);catch(Exception f)else if(flag=0)JOptionPane.showMessageDialog(null,"信息不完整,将导致导入信息失败","Confirm",JOptionPane.IN
12、FORMATION_MESSAGE);cancelBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=cancelBtn)f.dispose();/当前窗口消失3.2 导入教师信息功能导入教师信息功能输入教师信息,输入姓名、选择职称。单击“OK”按纽后会把数据保存到teacher数据库中。该功能截图如图4。具体代码如下:图4 导入教师信息界面class teaListener implements Act
13、ionListener public void actionPerformed(ActionEvent e)Object source = e.getSource();if(source=teaBtn)final JFrame f = new JFrame("导入教师对话框");Container c = f.getContentPane();final JLabel jl1 = new JLabel("姓名:");final JLabel jl2 = new JLabel("职称:");final JTextField jtf1 =
14、 new JTextField(15);String semester = " ","教授", "副教授", "博士", "硕士" ;final JComboBox jcbx = new JComboBox(semester);final JButton okBtn = new JButton("Ok");final JButton cancelBtn = new JButton("Cancel");okBtn.setPreferredSize(new j
15、ava.awt.Dimension(105, 25);cancelBtn.setPreferredSize(new java.awt.Dimension(105, 25);okBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object source = e.getSource();if (source = okBtn) tea_name = jtf1.getText();jcbx.setEditable(false);tea_zhicheng = (String)jcbx.
16、getSelectedItem();if(tea_name.length()!=0&tea_zhicheng!=" ")trytea_xuhao=teaBySelect()+1;insertTeaTable(tea_xuhao,tea_name, tea_zhicheng);JOptionPane.showMessageDialog(null,"导入成功,信息已保存","Terrific",JOptionPane.PLAIN_MESSAGE);catch (Exception f) elseJOptionPane.showMe
17、ssageDialog(null,"信息不完整,将导致导入信息失败","Confirm",JOptionPane.INFORMATION_MESSAGE);cancelBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object source = e.getSource();if (source = cancelBtn)f.dispose();3.3 设置规则功能设置规则功能选择可多分配的教师职称与相应多分配的人数,在分配顺序中可以选择
18、顺序分配或是随机分配,设置后将按照设置规则进行分配,该功能截图如图5。具体代码如下:图5 设置规则界面class setListener implements ActionListenerpublic void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=setBtn)final JFrame f=new JFrame("设置规则对话框");Container c=f.getContentPane();JPanel jp1=new JPanel();JLabel jl1=new JL
19、abel("指定可多分配同学的教师职称与相应的多分配名额");Font font = new Font("Monospaced", Font.BOLD, 14);jl1.setForeground(Color.BLACK);/设置前景色jl1.setFont(font);jp1.add(jl1);final JCheckBox jckb1=new JCheckBox("教授");final JCheckBox jckb2=new JCheckBox("副教授");final JCheckBox jckb3=new
20、JCheckBox("博士");final JCheckBox jckb4=new JCheckBox("硕士");String semester1="0","1","2"final JComboBox jcbx1=new JComboBox(semester1);final JComboBox jcbx2=new JComboBox(semester1);final JComboBox jcbx3=new JComboBox(semester1);final JComboBox jcbx4=n
21、ew JComboBox(semester1);final JButton okBtn=new JButton("确定");final JButton cancelBtn=new JButton("取消设置");final JButton tixingBtn=new JButton("提醒");okBtn.setPreferredSize(new java.awt.Dimension(115,30);cancelBtn.setPreferredSize(new java.awt.Dimension(115,30);tixingBtn.
22、setPreferredSize(new java.awt.Dimension(115,30);JLabel jl2=new JLabel("设置分配顺序");String semester2="顺序分配","随机分配"final JComboBox jcbx5=new JComboBox(semester2);okBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object source=e.getSource()
23、;if(source=okBtn)String transport;if(jckb1.isSelected()/教授复选框jiaoshou="jiaoshou"/不能由jcbx1.getSelectedItem()直接转换成整数transport=(String)jcbx1.getSelectedItem();jiaoshoushu=Integer.parseInt(transport);if(jckb2.isSelected()/副教授复选框fujiaoshou="fujiaoshou"transport=(String)jcbx2.getSelect
24、edItem();fujiaoshoushu=Integer.parseInt(transport);if(jckb3.isSelected()/博士复选框boshi="boshi"transport=(String)jcbx3.getSelectedItem();boshishu=Integer.parseInt(transport);if(jckb4.isSelected()/硕士复选框shuoshi="shuoshi"transport=(String)jcbx4.getSelectedItem();shuoshishu=Integer.parse
25、Int(transport);fenpeishunxu=(String)jcbx5.getSelectedItem();if(fenpeishunxu="顺序分配!(jckb1.isSelected()&!(jckb2.isSelected()&!(jckb3.isSelected()&!(jckb4.isSelected()JOptionPane.showMessageDialog(null,"默认设置?","Confirm",JOptionPane.QUESTION_MESSAGE);elseJOptionPane.
26、showMessageDialog(null,"Good ! ! ! 设置成功 ! ! !","Terrific",JOptionPane.PLAIN_MESSAGE););cancelBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=cancelBtn)/设置信息还原成原默认值jiaoshoushu=0;fujiaoshoushu=0;boshishu=0;sh
27、uoshishu=0;fenpeishunxu="shunxun"f.dispose();tixingBtn.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=tixingBtn)JFrame txframe=new JFrame("设置规则提醒.");Container txcon=txframe.getContentPane();JTextArea jta=new J
28、TextArea("n本毕业设计学生分配系统在默认"+"情况下每位教师可按学生序号顺序分配2名同学,用户可自行设置"+"分配规则,分配顺序可指定为:顺序分配与随机分配,可指定哪些"+"教师可多分学生并多分几名学生,最多可多分2名学生"+".按确定键设置完成,按取消键则取消设置。n",10,60);3.4执行分配功能当点击执行分配功能时,系统会自动执行分配,若分配成功则提醒用户分配成功,该功能截图如图6。具体代码如下:图6 执行分配界面class fenpeiListener implements
29、 ActionListenerpublic void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=fenpeiBtn)if(fenpeishunxu="顺序分配")/把学生分给老师,按序号顺序进行PrintWriter out=null;tryout=new PrintWriter("毕业设计学生顺序分配结果.txt");String sql_tea="select * from teacher_table"Statement stmt_tea
30、=con.createStatement();ResultSet rs_tea=stmt_tea.executeQuery(sql_tea);String sql_stu="select * from student_table"Statement stmt_stu=con.createStatement();ResultSet rs_stu=stmt_stu.executeQuery(sql_stu);while(rs_tea.next()/从教师数据库中顺序分配学生String teaname=rs_tea.getString("name");Str
31、ing teazhicheng=rs_tea.getString("zhicheng");out.print(teaname+" "+teazhicheng);switch(teazhicheng)case "教授":int num=jiaoshoushu+2;out.println(" 分配"+num+"名同学"+" 信息如下:");while(num-)>0&&rs_stu.next()/再从学生数据库调出学生进行分配/该职称的教师只能分配num个学
32、生Long stuid=rs_stu.getLong("id");String stuname=rs_stu.getString("name");String stuzhuanye=rs_stu.getString("zhuanye");out.println(stuid+" "+stuname+" "+stuzhuanye);break;if(fenpeishunxu="随机分配")PrintWriter out=null;tryint i=1,num=teaBySelec
33、t();/得到教师数据库中的总数,可能异常需处理int tea_stu_total=0;/所有教师可分配的总学生数double d;/产生随机数变量int flag=new intnum+1;out=new PrintWriter("毕业设计学生随机分配结果.txt");String sql_tea="select * from teacher_table"Statement stmt_tea=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)
34、;/教师数据库中的游标可双向移动);ResultSet rs_tea=stmt_tea.executeQuery(sql_tea);while(rs_tea.next()/初始化辅助数组String teazhicheng=rs_tea.getString("zhicheng");/只有知道教师职称,才能知道分配人数switch(teazhicheng)case "教授":flagi=jiaoshoushu+2;i+;break;/教师数据库游标已移动到最后,需返回游标到第一行前边rs_tea.beforeFirst();i=1;while(i<=
35、num)tea_stu_total+=flagi;i+;String sql_stu="select * from student_table"Statement stmt_stu=con.createStatement();ResultSet rs_stu=stmt_stu.executeQuery(sql_stu);while(rs_stu.next()/从学生数据库中顺序为每位同学随机找一位负责导师if(tea_stu_total=0)break;/此中情况对于教师不够学生有剩余,则直接无法分配Long stuid=rs_stu.getLong("id&qu
36、ot;);String stuname=rs_stu.getString("name");String stuzhuanye=rs_stu.getString("zhuanye");int suijishu,teaxuhao;dod=Math.random()*num;/产生随机数大小在教师序号范围之内且不等于0,即从1-num之内的随机数suijishu=(int)d+1;/random()会自动产生一个0.0-1.0的双精度随机数,如此可随机产生0num的数while(suijishu=0|suijishu>num);/学生序号没有0的故要舍弃
37、0随机数rs_tea.beforeFirst();while(rs_tea.next()teaxuhao=rs_tea.getInt("xuhao");String teaname=rs_tea.getString("name");String teazhicheng=rs_tea.getString("zhicheng");if(teaxuhao=suijishu) /产生随机数与某个教师序号相等,if(flagteaxuhao>0) /并且在该教师分配量之内还有剩余则把这个学生分配给这个教师/保存分配信息out.printl
38、n(teaname+" "+teazhicheng+" 随机分配学生信息如下:");out.println(stuid+" "+stuname+" "+stuzhuanye);/将该教师的剩余可分配的学生数减1flagteaxuhao-;/教师总的学生分配量减1tea_stu_total-;/这个学生随机分配完毕,还要随机分配下一个学生/就要将教师数据库中游标返回到首行前边,不断循环找随机分配的导师rs_tea.beforeFirst();break;/此次分配完毕就跳出该次随机分配else/否则再为该学生产生随机
39、数,以分配学生 /这个地方不好调试成功,需要好好分析才能找到错误do/System.out.println("hello world");d=Math.random()*num;suijishu=(int)d+1;while(suijishu=0|suijishu>num);rs_tea.beforeFirst();/一旦产生新的随机数就要在教师数据库中从头查询JOptionPane.showMessageDialog(null,"分配执行完毕,可点击导出结果功能查看","OK",JOptionPane.PLAIN_MESSAG
40、E);3.5导出结果功能当点击导出结果功能时,用户便可直接看到系统显示的分配结果,该功能截图如图7。具体代码如下:图7 导出功能界面class resultListener implements ActionListenerpublic void actionPerformed(ActionEvent e)Object source=e.getSource();if(source=resultBtn)JFrame f=new JFrame("分配结果对话框");Container c=f.getContentPane();JTextArea jta=new JTextAre
41、a();jta.setFont(new Font("标楷体",Font.BOLD,16); jta.setLineWrap(true);/激活自动断行功能jta.setMargin(new Insets(20, 100, 20, 20);c.add(jta);c.add(new JScrollPane(jta);BufferedReader reader=null;tryif(fenpeishunxu="顺序分配")reader=new BufferedReader(new FileReader("毕业设计学生顺序分配结果.txt")
42、;elsereader=new BufferedReader(new FileReader("毕业设计学生随机分配结果.txt");String line=null;while(line=reader.readLine()!=null)jta.append(line);jta.append("n");五、 调试与分析1.出现问题:当用户输入学生学号时,需得到Textfield文本框中的文本并且还要转化成整数,但此时如果用户因操作失误没有在该文本框中输入内容,此时再调用Long.parseLong方法就会出现异常引起程序退出,并且在执行导入学生信息时导入学生数据库中的信息也是不正确的解决方法:首先用trycatch处理异常,其次用判断语句来判断用户输入信息是否完整,只有在完整的情况下才执行导入操作,否则提醒用户输入信息不完整,可让用户进行修改操作2.出现问题:当用户因操作失误而使输入信息与应当输入的信息不匹配时也会引起程序崩溃,尤其是在检查输入的信息是否是整形时更是如此,并且在导入数据库时也会出现导入错误信息解决方法:首先检查输入类型是否匹配,在检查输入类型是否是整形时,也就是输入的数据是否全是数字,可用String.replaceAll()方法,首先将其中的字符全部转化成空格,再判断转化后的字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 以创新引领变革金融领域中的区块链技术革新实践
- 医疗卫生行业的数字化转型案例分析
- 企业安全提升方案区块链技术的应用实例
- 医疗行业中的多科室联合培训与合规意识提升
- 青少年心理卫生的知识总结模版
- 有关新质生产力
- 小儿后颅窝型脑积水综合征的临床护理
- led安装售后合同范例
- 信宜市打井合同范例
- 医疗设备技术创新与用户体验的融合发展
- 2025年海淀高三二模语文试题及答案
- 陕西省多校联考2024-2025学年高一下学期4月期中地理试题(原卷版+解析版)
- 人工智能应用基础 课件 第六章 大语言模型
- 上海2025届高考模拟数学试卷02(解析版)
- 边坡工程考试试题及答案
- 施工流水作业段的划分与组织毕业设计
- 跨文化团队协作研究-第1篇-全面剖析
- 2024年中国光大银行深圳分行招聘考试真题
- 鼻咽恶性肿瘤的护理查房
- 《民用航空行业标准体系》
- 专题四“挺膺担当”主题团课
评论
0/150
提交评论