久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3707|回復: 0
打印 上一主題 下一主題
收起左側

數據庫學生管理系統設計文檔

[復制鏈接]
跳轉到指定樓層
樓主
ID:644912 發表于 2019-11-19 11:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

數據庫系統的內部構成元素與外部其他系統之間的信息關系如下圖所示:

二,需求分析
此學生管理信息系統的主要功能如下圖所示:
三,數據庫邏輯設計3.1 ER圖:
本系統的ER圖如下:

該ER圖包括院系、專業、班級、教師、課程、學生、獎懲七個實體集和院系—專業、專業—班級、班級—學生、獎懲—學生、選課、教師—課程七個聯系集。

3.2 數據字典

院系表(department)

專業表

班級表(class)

教師表(teacher)

學生表(student)

用戶表(user)

課程表(course)

從數據字典中抽取出來的聯系的描述:

選課表(scourse)

獎懲表(behavior)

3.3 用戶視圖中的表
(1)department(dno,dname,headno,place,phone)

主碼:dno

外碼:headno參照teacher(tno)

(2)profession(pno,pname,dno,speciality,scale)

主碼:pno

外碼:dno參照department(dno)

  • class(classno,classname,tno,pno)

主碼:classno

外碼:tno參照teacher(tno);pno參照profession(pno)

(4)teacher(tno,tname,sex,level,birthday,worktime,dno,phone)

主碼:tno

外碼:dno參照department(dno)

  • student(sno,sname,sex,birthday,studytime,phone,address,classno)

     主碼:sno

     外碼:classno參照class(classno)

  • user(uname,upwd,uright)

     主碼:uname

  • course(cno,ctno,term,cname,period,credit,dno,tno,place,time)

     主碼:cno,ctno,term

     外碼:dno參照department(dno);tno參照teacher(tno)

  • scourse(sno,cno,ctno,term,score)

     主碼:sno,cno,ctno,term

     外碼:sno參照student(sno);cno,ctno,term參照course(cno,ctno,term)

  • behavior(bno,sno,sname,content,category,date,detail)

     主碼:bno

     外碼:sno參照student(sno)

四,數據庫物理設建表應用Navicat premium數據庫管理工具直接進行表操作。

五,登錄界面

用戶在登錄界面輸入用戶名和密碼以及驗證碼,經過系統驗證后,通過賬戶自動判斷權限,可以進入相應角色的操作界面。

5.1 學生用戶操作界面

  • 修改個人信息的界面。

         學生可以修改自己的聯系方式和家庭住址,其余信息需要管理員修改。

  • 按學院信息查詢課程,勾選想選擇的課程進行選課。

  • 查詢及刪除已選課程,通過勾選課程進行刪除操作。

  • 查詢已修課程的成績。

5.2 教師用戶操作界面

(1)修改個人信息。

(2)查詢所授課程的信息。

(3)查看所授課程的學生選課情況。

(4)錄入、查看成績

5.3 管理員用戶操作界面

(1)學生管理:查詢、添加、修改、刪除學生信息。

(2)教師管理:查詢、添加、修改、刪除教師信息。

(3)課程管理:查詢、添加、修改、刪除課程信息。

(4)獎懲信息管理:查詢、添加、修改、刪除獎懲信息。

(5)學院管理:添加、修改、刪除學院信息。

六,學生選課

選擇課程 并在課程表里更新相應課程的學生信息,將選取的課程存到List<Course>中 然后更新數據庫。

bt_choose.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
                            {
                                          list_choose=new ArrayList<Course>();
                                          tableModel = new MyTableModel(pn_choose2_table);
                                          if(list_play!=null){
                                                        int len_list_play=list_play.size();
                                                        for(int i=0;i<len_list_play;i++)
                                                        {
                                                                      if((boolean)tableModel.getRow(i)[0]==true)
                                                                      {
                                                                      Course course=new Course();
                                                                                   course.setCno((String)tableModel.getRow(i)[1]);
                                                                                   course.setCtno((String)tableModel.getRow(i)[2]);
                                                                                   course.setTerm((String)tableModel.getRow(i)[3]);
                                                                      course.setCname((String)tableModel.getRow(i)[4]);
                                                                      course.setPeriod((String)tableModel.getRow(i)[5]);
                                                                      course.setCredit((Float)tableModel.getRow(i)[6]);
                                                                      course.setDno((String)tableModel.getRow(i)[7]);
                                                                      course.setTno((String)tableModel.getRow(i)[8]);
                                                                      course.setPlace((String)tableModel.getRow(i)[9]);
                                                                      course.setTime((String)tableModel.getRow(i)[10]);
                                                                      list_choose.add(course);
                                                                      }
                                                        }
                                if(list_choose.size()==0){new MyDialog("未選擇課程!");}
                                else{
                                        if(list_choose.size()>COURSE_NUM){new MyDialog("課程數超出!");}
                                                 else{
                                                                      //更新數據庫
                                                                           for(Course course:list_choose){
                                                                                                  String sno=student.getSno();
                                                                                                  String cno=course.getCno();
                                                                                                  String ctno=course.getCtno();
                                                                                                  String term=course.getTerm();
                                                                                                  //先查詢 如果已經選過這個學期的課了就不能再選
                                                                                                  //如果能選就加入選課信息表
                                                                                                  Object params3[]={cno,term};
                            StudentGUI.this.mf.getUm().sqlBuilde("select sno from scourse where cno=?  and term=? ",params3);
                                                                                                  try {
                                                                                                               ResultSet rs=StudentGUI.this.mf.getUm().getPs().executeQuery();
                                                                                                                int flag=2;//沒有存在
                                                                                                                String tt=new String();
                                                                                                               while(rs.next())
                                                                                                                {
                                                                                                                             tt=rs.getString(1);
                                                                                                                             if(tt!=null)
                                                                                                                             {
                                                                                                                             if(tt.equals(sno)){flag=1;break;}
//已經選過這門課了
                                                                                                                             }
                                                                                                                             else
                                                                                                                             {flag=2;}//沒有選過這門課
                                                                                                                }
                                                                                                                {
                                                                                                                             if(flag==2){//可以選
                                                                                                                                           Object params5[]={sno,cno,ctno,term};
                                                                                   StudentGUI.this.mf.getUm().sqlBuilde("insert into scourse (sno,cno,ctno,term,score) values(?,?,?,?,null)",params5);
                                                                      StudentGUI.this.mf.getUm().getPs().execute();
                                                                                                                                                                       new MyDialog("選課成功");
                                                                                                                                                                       }
                                                                                                                                                                       else if(flag==1)
                                                                                                                                                                       {   //不能選
                                                                                                                new MyDialog("課程號"+cno+"選課重復,失敗");
                                                                                                                                                                       }
                                                                                                                             }

                                                                                                  } catch (SQLException e2) {
                                                                                                                new MyDialog("選課失敗");
                                                                                                               e2.printStackTrace();
                                                                                                  }                          
                                                                                    }
                                                                      }
                                                        }
                                          }            
                            }            
              }
});

學生注銷選課

與學生選課的事務類似,不過對數據庫的操作變為在選課表中刪除選課記錄。
("delete from scourse where  sno=? and cno=? and ctno=? and term=?",params2)

教師打分

//修改成績 并在選課表里更新相應課程的成績信息    然后更新數據庫
bt_choose.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
              //list_course_student=new ArrayList<Integer>();
              //tableModel = new MyTableModel(pn_choose2_table);
              if(list_course_student!=null){
                            int len_list_play=list_course_student.size();
                            for(int i=0;i<len_list_play;i++)            
                               {
                                          synchronized(LoginFrame.class){            
                                          Object params3[]={Integer.parseInt((String)tableModel.getRow(i)[6]),(String)tableModel.getRow(i)[0],(String)tableModel.getRow(i)[1],(String)tableModel.getRow(i)[3]};                                                                     System.out.println(Integer.parseInt((String)tableModel.getRow(i)[6]));
                                          TeacherGUI.this.mf.getUm().sqlBuilde("update scourse set score=? where cno=? and ctno=? and sno=? ",params3);
                                          try {
                                                        TeacherGUI.this.mf.getUm().getPs().execute();
                                          } catch (SQLException e1) {
                                                        new MyDialog("更新失敗");
                                                        e1.printStackTrace();
                                          }
                                                        }

                                          }}
                                          new MyDialog("更新成功");
                            }
});

管理員增加學生信息


因為增加學生時候不僅需要更新學生表,同需要更新用戶表,所以在進行操作的時候就需要多次對數據庫進行操作,同時因為學生的基本信息是應該一入學就確定了不能輕易改變的,因而在增加學生的時候其姓名、性別、學號等信息是必須要有的,如果填寫不完整將會提示信息不完整。

//增加學生
bt_addUpdate.addActionListener(new ActionListener() {
              @Override
              public void actionPerformed(ActionEvent e) {
              String sname=text_sname.getText();
              String sno=text_sno.getText();
              String sex=text_sex.getText();
              String birthday=text_birthday.getText();
              String studytime=text_studytime.getText();
              String phone=text_phone.getText();
              String address=text_address.getText();//電話和家庭住址可以為空
              String classno=text_classno.getText();                           if("".equals(sname)||"".equals(sno)||"".equals(sex)||"".equals(birthday)||"".equals(studytime)||"".equals(classno))
              {
              new MyDialog("學生信息不完整!");
              }
              else
              {
                            Object params[]={sno};
                            AdmisterGUI.this.mf.getUm().sqlBuilde("select *from student where sno=?",params);
                            try {
                                          ResultSet rs=AdmisterGUI.this.mf.getUm().getPs().executeQuery();
                                          if(rs.next())
                                          {
                                                        if(sno.equals(rs.getString(1)))
                                                        {
                                              new MyDialog("學生存在,插入失敗!");
                                                        }
                                          }
                                          else//沒有當前學生
                                          {
                                                        synchronized(LoginFrame.class){
                                                        Object params2[]={sno,sname,sex,birthday,studytime,phone,address,classno};
AdmisterGUI.this.mf.getUm().sqlBuilde("insert into student (sno,sname,sex,birthday,studytime,phone,address,classno)values(?,?,?,?,?,?,?,?)",params2);
                                                        try {
                                                                                   AdmisterGUI.this.mf.getUm().getPs().execute();
                                                                                    //以學生的學號作為用戶名 權限為3 更新user表
                                                                                    Object params5[]={sno,3};
                                                                                   AdmisterGUI.this.mf.getUm().sqlBuilde("insert into user(uname,uright,upwd)values(?,?,'111')",params5);
                                                                                   AdmisterGUI.this.mf.getUm().getPs().execute();
                                                                                    new MyDialog("增加成功");
                                                                      } catch (Exception e1) {
                                                                                    new MyDialog("增加失敗");
                                                                                    e1.printStackTrace();
                                                                      }            
                                                        }            
                                          }
                            } catch (SQLException e1) {
                                          // TODO Auto-generated catch block
                                          e1.printStackTrace();
                            }
              }
}
});
七、測試和運行
1、登錄時用戶名或密碼錯誤會出現提示。
2、查詢課程時若未找到相應課程會有提示。
  • 重復選課時會有相應提示。
4、注銷課程時會有相應提示。
5、沒有獎懲信息時會有提示。
6、舊密碼輸入錯誤時會有提示。
7、教師錄入成績時會有相應提示。

8、因為學生除了家庭住址和聯系方式其余的信息是在校學生必須要有的,所以當管理員添加、修改學生信息時輸入的不完整會有相應提示。
9、因為教師除了電話,其余的信息是入校任教的時候必須要有的,所以當管理員添加、修改教師信息時輸入的不完整會有相應提示。
10、管理員添加課程信息不完整時會有相應提示。
11、管理員添加院系信息不完整時會有相應提示。
  • 管理員添加獎懲信息不完整時會有相應提示。
13、查詢的學生沒有獎懲信息時會有相應提示。

八、經驗與收獲

  首先說數據庫,簡單的說就是建表格,然后把一張一張的表格和在一起,成為一大堆的數據集合。他是依照某種數據結構組織起來并存放二級存儲器中的數據集合,基本分為三個層次,物理數據層,概念數據層和邏輯數據層。不同層次間的聯系是通過映射來轉換的。


完整的Word格式文檔51黑下載地址:

資料.doc (1.52 MB, 下載次數: 26)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 羞羞视频在线观免费观看 | 亚洲综合色丁香婷婷六月图片 | 欧美成人性生活 | 热久久国产 | 黄色成人在线观看 | 亚洲97 | 免费看一区二区三区 | 亚洲欧洲小视频 | 日韩成人高清在线 | jizz亚洲人| 国产精品国产三级国产aⅴ原创 | www.av在线 | 日本三级日产三级国产三级 | 天堂综合网久久 | 欧美1区2区 | 久久久久久久97 | 一区二区影院 | 盗摄精品av一区二区三区 | 国产亚洲欧美日韩精品一区二区三区 | 天天干视频| av网站免费在线观看 | 欧美日韩在线一区二区 | 亚洲综合激情 | 国产精品久久久久久吹潮日韩动画 | 狠狠干网站 | 精品国产乱码久久久久久影片 | 依人成人| 性做久久久久久免费观看欧美 | 一级大片免费 | 国产激情一区二区三区 | 祝你幸福电影在线观看 | 国产精品自拍视频 | 日韩视频在线播放 | 天天综合网天天综合色 | 久久精品国产一区 | 丁香一区二区 | 亚洲电影第1页 | 中文字幕一级毛片视频 | 日韩理论电影在线观看 | 九色视频网 | 日本精品久久久久 |