版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 . . . 實(shí)踐考核類課程(二)實(shí)驗(yàn)報(bào)告姓 名學(xué) 號20090725班 級軟一0901指 導(dǎo) 教 師益先實(shí)驗(yàn)名稱學(xué)生選課系統(tǒng)開 設(shè) 學(xué) 期2010 2011第二學(xué)期評 定 成 績評定人簽字評 定 日 期東北大學(xué)軟件學(xué)院2011年4月27 / 281. 系統(tǒng)分析與設(shè)計(jì)本次實(shí)驗(yàn)是是設(shè)計(jì)一個(gè)基于web平臺的學(xué)生選課系統(tǒng),主要用于實(shí)現(xiàn)學(xué)生選課,課程管理,與課程維護(hù)等等模塊;需要使用的技術(shù)是Servlet、JSP、JDBC、DAO等關(guān)鍵技術(shù)。在本系統(tǒng)中,有三類用戶:系統(tǒng)管理員,教師和學(xué)生。三種不同的用戶所具有的操作權(quán)限以與操作容均不一樣。本選課系統(tǒng)給予教師很大的自主權(quán),系統(tǒng)管理員只負(fù)責(zé)向系統(tǒng)中添加學(xué)生
2、和教師的個(gè)人信息。教師、學(xué)生可以錄自行進(jìn)行選課,排課。系統(tǒng)管理員設(shè)置一個(gè)選課圍,教師可以開設(shè)課程;學(xué)生可以登陸選擇課程。教師用戶登陸后可以開設(shè)課程,為自己的課程編輯課程容和課程信息。每門課程可以是必修或則選修,教師為每門課程設(shè)置一個(gè)學(xué)分,并可以在課程結(jié)束后給予成績和分?jǐn)?shù),如果學(xué)生與格,學(xué)生將獲得該課程的學(xué)分。對于學(xué)生用戶,每個(gè)學(xué)生除了必須選擇必修課程外,學(xué)生可以對自己選課信息進(jìn)行選擇。系統(tǒng)可以根據(jù)學(xué)生的選課信息,生成一份學(xué)生自己的課表。課程結(jié)束后學(xué)生可登錄查詢成績。1.2 系統(tǒng)功能流程用戶登錄身份驗(yàn)證模塊驗(yàn)證用戶名和密碼,并根據(jù)不同的用戶類型,選擇;用戶登錄身份驗(yàn)證模塊登陸注冊模塊錄入信息模塊
3、開設(shè)課程模塊查詢個(gè)人信息模塊評分模塊查看課程模塊選課模塊數(shù)據(jù)庫模塊 數(shù)據(jù)庫訪問模塊(1)登錄與注銷 每個(gè)用戶都可以用自己的登錄系統(tǒng)。用戶操作完成后推出系統(tǒng),注銷后可以重新登錄系統(tǒng)。 (2)修改密碼 每個(gè)用戶第一次登錄都用默認(rèn)密碼。(1) 系統(tǒng)管理員管理員號管理員XX密碼用戶類型設(shè)置選課:系統(tǒng)管理員通過此項(xiàng)功能設(shè)置選課,只有在選課圍,學(xué)生才可以選擇課程,不得修改。錄入學(xué)生與教師個(gè)人信息:通過此項(xiàng)功能可以實(shí)現(xiàn)對教師和學(xué)生的個(gè)人信息添加刪除。(2) 教師用戶教師號教師XX密碼用戶類型性別職稱顯示和修改個(gè)人信息:教師用戶登錄系統(tǒng)后,可以查看和修改教師的個(gè)人信息,如,E-mail地址等。開設(shè)課程:教師用
4、戶登錄系統(tǒng)后,可以開設(shè)課程,可以設(shè)置該課程可以設(shè)置該課程的最大人數(shù)。編輯課程上課時(shí)間:教師在開設(shè)了課程后,可以靈活地設(shè)置上課時(shí)間和地點(diǎn)。給學(xué)生分?jǐn)?shù):課程結(jié)束后,教師用戶登錄系統(tǒng),可以為學(xué)過課程的學(xué)生給予相應(yīng)的成績,若與格,給予學(xué)生學(xué)分。(3) 學(xué)生用戶學(xué) 號系 號班 級成 績政治面貌聯(lián)系方式就讀中學(xué)學(xué)生性別籍貫姓名XX號交費(fèi)情況出生日期入學(xué)時(shí)間簡歷民 族專業(yè)號用戶類型顯示和修改個(gè)人信息:學(xué)生登錄系統(tǒng)后,可以查看和修改學(xué)生的個(gè)人信息,如,性別,等。查看必修課程:學(xué)生登錄后,可以查看所有的必修課程。查看該課程的信息,上課時(shí)間地點(diǎn),開課教師信息等。選擇選修課程:學(xué)生登錄系統(tǒng)后,在所有選修課程中可以選
5、擇至少兩門選修課程。同時(shí)可以查看相關(guān)信息。查看最終選課信息:學(xué)生登錄系統(tǒng)后,可列出已選擇的課程,若選課信息未被鎖定,則可以退選,若所選課程少于兩門,系統(tǒng)會提示選擇的課程少于兩門。查看學(xué)分和成績課程結(jié)束后,學(xué)生登錄系統(tǒng)可查看自己學(xué)習(xí)課程的成績。1.3 數(shù)據(jù)庫設(shè)計(jì)student,Teacher,Course,List,Admin,每個(gè)表與邏輯設(shè)計(jì)中一種的關(guān)系模式相對應(yīng)。下面是每個(gè)數(shù)據(jù)表中的屬性,包括屬性列的名稱、數(shù)據(jù)類型、長度、是否可以為空和備注說明等容。(1) Student表。Student表用來存儲學(xué)生的個(gè)人信息,使用學(xué)號作為主鍵,如表3-2:表3-2 Student表(2) Teacher
6、表。Teacher表用來存儲教師的個(gè)人信息,用學(xué)校分配給教師的教師編號作為主鍵,這樣可以避免重復(fù),如圖3-3:表3-3 Teacher表(3) Course表。Course表用來存儲課程信息,Course表以課程編號為主鍵,設(shè)置課程編號自動增加1(通過建表的時(shí)候?qū)傩粤性O(shè)置“標(biāo)識”,并設(shè)置“標(biāo)識遞增量”為1)。表中開課教師Id為外鍵,所有“TId”的值必須是Teacher表中的“TId”值。如表3-4:表3-4 Course表(4) List表。List表用來存放課程的上課時(shí)間和上課信息,包括課程編號。表3-6 List表(5) Admin表。Admin表用來存放系統(tǒng)管理員信息,如表3-9:表
7、3-9 Admin表2系統(tǒng)實(shí)現(xiàn)與測試1系統(tǒng)首頁,點(diǎn)擊進(jìn)入選課系統(tǒng)登錄頁面點(diǎn)擊進(jìn)入選課系統(tǒng)登錄頁面2登陸頁面系統(tǒng)的登陸頁面index.jsp在頁面左邊顯示出三種身份登錄的。便于不同用戶清晰的看清登錄的位置。不同身份的用戶登錄提交的用戶名和密碼提交到不同身份的數(shù)據(jù)庫認(rèn)證頁面中。如學(xué)生用戶登錄提交到login.jsp。當(dāng)驗(yàn)證通過時(shí),跳到學(xué)生用戶的頁面。并把信息保存進(jìn)session,以供其他頁面判斷用戶是否已經(jīng)登錄。學(xué)生用戶通過歡迎界面進(jìn)入登錄界面,輸入用戶名以與密碼,然后選擇權(quán)限(學(xué)生/老師/管理員)進(jìn)入自己的頁面。該頁面會對用戶是否輸入用戶名或密碼,輸入是否正確進(jìn)行檢驗(yàn),如果輸入正確,則直接進(jìn)入權(quán)
8、限所對應(yīng)的歡迎界面。否則,則提示用戶名或密碼錯(cuò)誤。輸入學(xué)生學(xué)號,進(jìn)入學(xué)生歡迎界面。點(diǎn)擊 查看已選課程,學(xué)生可以查看自己的已選課程。點(diǎn)擊注冊課程選項(xiàng),進(jìn)入頁面后選擇相應(yīng)課程后課程列表結(jié)果如下:選擇注銷 計(jì)算機(jī)編程藝術(shù) 課程,同上。結(jié)果如下管理員選擇管理員進(jìn)入歡迎界面。選擇 刪除課程 可以進(jìn)行對相應(yīng)課程的刪除。選擇 管理課程,可以實(shí)現(xiàn)對于課程的管理。選擇 增加學(xué)生 可以實(shí)現(xiàn)對學(xué)生的添加。選擇 添加/刪除老師,可以實(shí)現(xiàn)對老師的有效管理。選擇 查看所有學(xué)生/老師 可以查看到所有學(xué)生/老師的信息。教師以老師身份登錄,界面如下。選擇查看已帶課程,可以查看自己的所有課程。選擇給出成績,可以成功的為學(xué)生給出成
9、績。2.1系統(tǒng)采用的關(guān)鍵技術(shù)在頁面中用到了頁面語言HTML,JavaScript以與JSP;標(biāo)記語言使用的是:XML;后臺中使用了Servlet服務(wù)器,數(shù)據(jù)庫操作使用的是JDBC,DAO;全局使用了MVC設(shè)計(jì)模式等,是在JDK+ MyEclipse+Tomcat+MySQL的開發(fā)環(huán)境中完成了這個(gè)學(xué)生選課系統(tǒng)。2.2 關(guān)鍵程序流程下面用視圖的方式展示學(xué)生選課系統(tǒng)的流程!基本表視圖教師課表班級課表學(xué)生學(xué)籍表學(xué)生選課表課程表選修課開課表教師表學(xué)院開課表學(xué)生表系部表NNNNN111NN11NN2.3 關(guān)鍵代碼分析下面將每個(gè)模塊中好的部分以與重要的部分進(jìn)行展示連接數(shù)據(jù)庫模塊:DataBaseFactor
10、y 類用于創(chuàng)建數(shù)據(jù)庫連接,是一個(gè)連接數(shù)據(jù)庫的工具類!package .jinkun.data;import java.sql.*;publicclass DataBaseFactory private Connection conn=null; publicvoidDataBaseFactory() throws Exception/得到一個(gè)statementpublic Statement getStatement() throws Exception DriverManager.registerDriver(new org.gjt.mm.mysql.Driver(); Class.forN
11、ame("org.gjt.mm.mysql.Driver").newInstance(); String url ="jdbc:mysql:/localhost:3306/register?user=root&password=&useUnicode=true&characterEncoding=UTF-8"conn= DriverManager.getConnection(url);returnconn.createStatement(); public ResultSet executeQuery(Statement stmt
12、,String query) throws Exception ResultSet rs=stmt.executeQuery(query); return rs; publicboolean execute(Statement stmt,String query) throws Exceptionboolean rs=stmt.execute(query); return rs; publicvoid executeUpdate(Statement stmt,String query) throws SQLException stmt.executeUpdate(query); publicv
13、oid close() throws SQLException if(conn!=null)conn.close(); 學(xué)生模塊:studentDao在這個(gè)類中具體定義了學(xué)生的動能以與權(quán)限(包括:增加/刪除學(xué)生,增加/刪除某一門課程,以與顯示全部的課程列表等等)public class StudentDao private DataBaseFactory dataBase;public StudentDao()dataBase=new DataBaseFactory();/注銷學(xué)生的一門課程public void cancelCoursed(String userid,String class
14、id) throws SQLException, ExceptionString query="delete from list where Cno='"+classid+"'"dataBase.executeUpdate(dataBase.getStatement(), query);dataBase.close();public Student getStudent(String stuno) throws ExceptionStudent student=null;String sqlStudent = "select *
15、 from student where studentID='"+stuno+"'"ResultSet rs=(ResultSet) dataBase.executeQuery(Statement) dataBase.getStatement(), sqlStudent);if(rs.next()student=new Student(rs.getString(1),rs.getString(2),rs.getString(3);dataBase.close();return student;/增加一個(gè)學(xué)生public void addStuden
16、t(Student student) throws SQLException, ExceptionString sqlStudent="insert into student values('"+student.getID()+"','"+student.getName()+"'," +"'"+student.getPassword()+"')"dataBase.executeUpdate(Statement) dataBase.getStatem
17、ent(), sqlStudent);dataBase.close();public List<Student> getAllStudents() throws ExceptionList<Student> students=new ArrayList();String sqlStudent="select * from student"ResultSet rs=(ResultSet) dataBase.executeQuery(Statement) dataBase.getStatement(), sqlStudent);while(rs.next
18、()String studentid=rs.getString(1);String studentName=rs.getString(2);String password=rs.getString(3);Student s=new Student(studentid,studentName,password);students.add(s);dataBase.close();return students;public Course getCourse(String courseid) throws ExceptionCourse c=null;String sqlStudent="
19、select * from course where id='"+courseid+"'"ResultSet rs=(ResultSet) dataBase.executeQuery(Statement) dataBase.getStatement(), sqlStudent);if(rs.next()String className=rs.getString(2);String teacherName=rs.getString(3);int counts=Integer.parseInt(rs.getString(5);c=new Course(
20、courseid,className,teacherName,counts);rs.close();dataBase.close();return c;/得到課程列表,用于顯示某個(gè)學(xué)生注冊的全部的課程public List<Course> getCourses(Student student) throws ExceptionList<Course> signUpInfo=new ArrayList<Course>();String sqlStudent="select * from list where Sno='"+stude
21、nt.getID()+"'"ResultSet rs=(ResultSet) dataBase.executeQuery(Statement) dataBase.getStatement(), sqlStudent);while(rs.next()Stringo=rs.getString(3);signUpInfo.add(this.getCourse(cno);rs.close();dataBase.close();return signUpInfo;/判斷學(xué)生是否已經(jīng)注冊public boolean isRegistered(String studentid,S
22、tring courseid) throws ExceptionString sqlStudent="select * from list where Sno='"+studentid+"'"ResultSet rs=(ResultSet) dataBase.executeQuery(Statement) dataBase.getStatement(),sqlStudent);while(rs.next()String courid=rs.getString(3);if(courid.equals(courseid)return true
23、;rs.close();dataBase.close();return false;/用于注冊一個(gè)學(xué)生public boolean register(String studentid,String courseid,String teacherid) throws SQLException, ExceptionString sql="select * from counts where id='1'"ResultSet rs=dataBase.executeQuery(dataBase.getStatement(),sql);int i=0;if(rs.ne
24、xt()i=Integer.parseInt(rs.getString(2);i+;sql="update counts set idcounts='"+i+"' where id='1'"dataBase.executeUpdate(dataBase.getStatement(),sql);String sqlStudent="insert into list values('"+i+"','"+studentid+"','&quo
25、t;+courseid+"','"+teacherid+"','"+"!"+"')"dataBase.executeUpdate(Statement) dataBase.getStatement(), sqlStudent);dataBase.close();return true;老師模塊:TeacherDao與studentDao是類似的;下面展示teacher的servletdopost方法;public void doPost( ServletRequest requ
26、est, ServletResponse response)throws ServletException, IOException request.setCharacterEncoding("gbk");String type = request.getParameter("submit"); if(type.equals("check") String number1 = request.getParameter("number"); request.setAttribute("number1&quo
27、t;, number1); RequestDispatcher d=request.getRequestDispatcher("/teacher/teaching.jsp"); d.forward(request, response);else if(type.equals("reply") Session s=request.getSession();String teachernum=(String) s.getAttribute("id");TeacherDao t=new TeacherDao();tryTeacher tea
28、=t.getTeacher(teachernum);try int limit = Integer.parseInt(request.getParameter("limit"); String coursename = request.getParameter("coursename"); String coursenum = request.getParameter("coursenum"); try CourseDao c1=new CourseDao(); System.out.print(teachernum); Course
29、 course=c1.getCourse(coursenum); if(course=null) Course c = new Course(coursenum,coursename,tea.getName(),limit); CourseDao cdao=new CourseDao(); cdao.addCourse(teachernum, c); doError(request,response,"已成功完成"); else doError(request,response,"已有該門課程"); catch(Exception e)e.printSt
30、ackTrace();catch(Exception e)doError(request,response,"非法字符輸入");catch(Exception e)doError(request,response,"后臺出錯(cuò)");else if(type.equals("verify")String studentnum = request.getParameter("studentnum");String coursenum=request.getParameter("classNo");St
31、ring grade = request.getParameter("grade"); TeacherDao teach = new TeacherDao(); try teach.grade(coursenum, studentnum, grade); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); System.out.println("of");public void doError( ServletRequest request, ServletR
32、esponse response,String msg) throws IOExceptionresponse.setContentType("text/html");response.setCharacterEncoding("UTF-8");PrintWriter out=response.getWriter();out.print("<html><head><meta -equiv='Content-Type' content='text/html' charset='
33、utf-8'></meta>" +"<title>信息</title></head><body>");out.print(msg);out.print("<a href='localhost:8080/Exercise/teacher/teacher.jsp' method='get'>返回</a>");out.print("</body></html>");out.clo
34、se();return;課程模塊:管理員模塊:public class ManageServlet extends Servlet public void doGet( ServletRequest request, ServletResponse response)throws ServletException, IOException String action=request.getParameter("action");if(action.equals("deleteCourse")this.doDeleteCourse(request, res
35、ponse);if(action.equals("addStudent")this.doAddStudent(request, response);if(action.equals("stuinfo")RequestDispatcher rs=request.getRequestDispatcher("/admin/studentInfo.jsp");rs.forward(request,response);if(action.equals("teacherInfo")RequestDispatcher rs=re
36、quest.getRequestDispatcher("/admin/teacherInfo.jsp");rs.forward(request,response);if(action.equals("deleteTeacher")doDeleteTeacher(request,response);if(action.equals("addTeacher")doAddTeacher(request,response);if(action.equals("logout") Session session=request
37、.getSession();session.invalidate();response.sendRedirect("localhost:8080/Exercise/login.jsp") public void doAddTeacher( ServletRequest request, ServletResponse response)String id=request.getParameter("teacherID");String name=request.getParameter("teacherName");String pa
38、ssword=request.getParameter("password");tryint tid=Integer.parseInt(id);TeacherDao tdao=new TeacherDao();if(tdao.getTeacher(id)!=null)doError(request,response,"已存在該老師","addTeacher.jsp");elseTeacher a=new Teacher(id,name,password);trytdao.addTeacher(a);doError(request,re
39、sponse,"成功添加","addTeacher.jsp");catch(Exception e)/doError(request,response,"添加失敗");e.printStackTrace();catch(Exception e)doError(request,response,"非法證件!","addTeacher.jsp");public void doDeleteTeacher( ServletRequest request, ServletResponse response
40、)String id=request.getParameter("id");TeacherDao tdao=new TeacherDao();tryTeacher t=tdao.getTeacher(id);trytdao.deleteTeacher(t);doError(request,response,"成功刪除","deleteTeacher.jsp");catch(Exception e)doError(request,response,"操作出錯(cuò) ,請重新再來","deleteTeacher.j
41、sp");catch(Exception e)doError(request,response,"出錯(cuò)了","deleteTeacher.jsp");public void doAddStudent( ServletRequest request, ServletResponse response)String id=request.getParameter("studentID");String studentName=request.getParameter("studentName");String
42、 password=request.getParameter("password");tryint stuid=Integer.parseInt(id);if(stuid<2000|stuid>20110000)doError(request,response,"非法證件","addStudent.jsp");elseStudentDao studao=new StudentDao();if(studao.getStudent(id)!=null)doError(request,response,"已存在該學(xué)生&
43、quot;,"addStudent.jsp");elseStudent s=new Student(id,studentName,password);trystudao.addStudent(s);doError(request,response,"成功添加","addStudent.jsp");catch(Exception e)doError(request,response,"添加失敗","addStudent.jsp");catch(Exception e)doError(request
44、,response,"非法證件!","addStudent.jsp");public void doDeleteCourse( ServletRequest request, ServletResponse response)String courseid=request.getParameter("id");CourseDao coursedao=new CourseDao();/*if(coursedao.deleteCourse(courseid)=true)doError(request,response,"刪除成功
45、");elsedoError(request,response,"刪除操作失敗");*/trycoursedao.deleteCourse(courseid);doError(request,response,"成功刪除","deleteCourse.jsp");catch(Exception e)/doError(request,response,"出錯(cuò)");doError(request,response,"后臺出錯(cuò)","deleteCourse.jsp");/
46、*public void doAddCourse( ServletRequest request, ServletResponse response) String classid=request.getParameter("id");tryint id=Integer.parseInt(classid);String className=request.getParameter("className");String teacherName=request.getParameter("teacherName");tryint cou
47、nts=Integer.parseInt(request.getParameter("counts");CourseDao coursedao=new CourseDao();if(coursedao.getCourse(classid)=null)Course course=new Course(classid,className,teacherName,counts);trycoursedao.addCourse(course);catch(Exception e)doError(request,response,"添加失敗");elsedoError(request,response,"已有該門課程");if(counts<=0) doError(request,response,"選課人數(shù)不能為零或負(fù)數(shù)");catch(Exception e)doError(request,response,"可選人數(shù)必須為整數(shù)數(shù)字");catch(Exception e)doError(request,response,"課程ID必須為整數(shù)");*/public void doError( ServletReq
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年生鮮電商損耗控制方法課程
- 成都市新都區(qū)部分單位2026年1月公開招聘編外(聘用)人員的備考題庫(一)及答案詳解(易錯(cuò)題)
- 2026年客戶投訴處理話術(shù)優(yōu)化課
- 繁殖繁殖場規(guī)劃與建設(shè)手冊
- 2026重慶市璧山區(qū)人民政府璧城街道辦事處招聘非編聘用人員2人備考題庫含答案詳解
- 客運(yùn)保衛(wèi)稽查年終總結(jié)(3篇)
- 職業(yè)健康遠(yuǎn)程隨訪的醫(yī)患溝通障礙解決方案
- 職業(yè)健康監(jiān)護(hù)中的標(biāo)準(zhǔn)化健康宣教材料
- 職業(yè)健康成就感對醫(yī)療員工組織承諾的促進(jìn)效應(yīng)
- 職業(yè)健康促進(jìn)醫(yī)療質(zhì)量持續(xù)改進(jìn)
- 化工生產(chǎn)安全用電課件
- 2026屆湖北省武漢市高三元月調(diào)考英語試卷(含答案無聽力原文及音頻)
- 110kV~750kV架空輸電線路施工及驗(yàn)收規(guī)范
- 質(zhì)量檢驗(yàn)部2025年度工作總結(jié)與2026年度規(guī)劃
- 陳世榮使徒課件
- 2025至2030中國丙烯酸壓敏膠行業(yè)調(diào)研及市場前景預(yù)測評估報(bào)告
- 河北省石家莊2026屆高二上數(shù)學(xué)期末考試試題含解析
- EPC工程總承包項(xiàng)目合同管理
- 四年級數(shù)學(xué)除法三位數(shù)除以兩位數(shù)100道題 整除 帶答案
- 村委會 工作總結(jié)
- 個(gè)人IP打造運(yùn)營方案【新媒體運(yùn)營】【個(gè)人自媒體IP】
評論
0/150
提交評論