学生公寓管理系统-python+Django+Mysql(附视图代码)
一、系統開發平臺............................................................................................................ 3
二、數據庫規劃............................................................................................................... 4
2.1 任務陳述............................................................................................................ 4
2.2 任務目標............................................................................................................ 4
三、系統定義................................................................................................................... 6
3.1 系統邊界............................................................................................................ 6
3.2 用戶視圖............................................................................................................ 8
四、需求分析................................................................................................................... 9
4.1 用戶需求說明................................................................................................... 10
4.1.1 數據需求............................................................................................... 10
4.1.2 事務需求............................................................................................... 10
4.2 系統需求說明................................................................................................... 12
五、數據庫邏輯設計...................................................................................................... 13
5.1 ER圖:............................................................................................................. 13
5.2 數據字典........................................................................................................... 14
六、數據庫物理設計...................................................................................................... 16
6.1 索引.................................................................................................................. 16
6.2 安全機制.......................................................................................................... 17
七、應用程序設計.......................................................................................................... 17
7.1 功能模塊.......................................................................................................... 17
7.2 界面設計.......................................................................................................... 19
7.3 事務設計........................................................................................................... 77
八、測試和運行............................................................................................................ 114
九、總結...................................................................................................................... 171
9.1 系統優點......................................................................................................... 171
9.2 系統不足......................................................................................................... 172
9.3 系統改進......................................................................................................... 172
9.4 經驗與收獲...................................................................................................... 172
附. 參考文獻............................................................................................................... 172
前言
?? 隨著我校逐級擴招,學生越來越多,學生公寓樓房越來越多,宿管人員越來越多。隨著高校后勤社會化改革,學生住宿條件得到了很大改善,宿舍內的貴重設施、電器等越來越多,宿舍安排上打破了原來按專業班級強制集中住宿的限制,可供學生選擇的余地也越來越大;同學們可以根據自己的合理要求申請調換宿舍,同時,由于學生越來越多,學生宿舍也越來越多,宿舍內硬件出現的故障也自然會增多。至今為止,某某大學故障報修仍為仍共筆錄上報,不僅物業得知學生需求的速度慢,甚至有時還會出現物業錯漏報修的問題,導致學生的住宿體驗變差。對于學生人際交往逐漸增多,學生之間在沒有聯系方式的情況下想要知道一個同學在哪一個宿舍只能通過打聽等不準確不確切的方式獲得,十分的不便。對于班內同學逐個分發物品時,也必須知道班內的每一個同學所在宿舍號,因此,對于班內同學的宿舍情況也是一項需求。且某某大學宿管查宿舍衛生也只是紙面記錄,且學生們根本不知道宿舍的衛生檢查情況,所以對于這一方面也有疏漏。宿舍同學們作息習慣的不同,很可能導致影響其他同學的休息,由于不好意思開口,掛在‘表白墻’又很難達到效果且有暴露其他宿舍的隱私和損壞名譽問題,所以對于同學們對于其他宿舍的意見反饋也是一件需求。
一、系統開發平臺
1.1 開發平臺簡介
本項目開發的學生公寓管理系統采用B-S架構,使用基于phthon的技術開發路線,使用Django后端開發MVT框架,連接起數據庫與前端,實現交互。
1.2 開發語言:Python
用python更加易于使用和閱讀,并且python豐富的包十分便于開發;python的編程方法也更少限制,豐富成熟的基于python的后端開發框架也更便于我們使用開發。
1.3 開發工具:Navicat for Mysql、VS2019、Pycharm
?????? 利用如上的開發工具,可以十分便捷的進行Web開發。
1.4 數據庫: MySQL 5.7
MySQL是業界領先的開源數據庫,在開源產品中具有僅次于Apache服務器的市場占有率。本數據庫開放源代碼,具有免費使用,比較穩定的特點,適合于小型系統的持久性存儲。
1.5 操作系統:Microsoft Windows 10
二、數據庫規劃
2.1 任務陳述
學生公寓管理系統是學生公寓管理不可缺少的部分,它的應用會使學生以及宿管的工作變得十分便利。隨著青島校區擴招學生的增多以及宿舍硬件的使用年數逐漸變多,越來越多的問題也不斷出現,對于學生公寓的管理不僅宿管任務加重,學生們對于宿舍問題的需求也逐漸增多。有了學生公寓管理系統,以上出現的問題會在一定程度上得到解決。
該項目所設計的學生公寓管理系統包括:
學生用戶:
個人信息頁、班級信息情況頁、宿舍查詢頁、衛生管理頁、報修系統頁、投訴系統頁、訪問申請頁、離校登記頁。
由于宿管需要對衛生管理進行信息同步,所以需要管理員身份的專屬系統,管理員身份的頁有查詢宿舍信息頁以及衛生管理頁、故障報修頁、訪問審批頁、個人信息頁。如此,管理員可以將衛生檢查的結果發送給各個同學,也可以查詢各個宿舍的情況、查看宿舍報修情況。同學們可以自行進行故障報修、對個別宿舍進行不滿的匿名建議、查看班級宿舍信息、查看指定同學姓名的宿舍信息、查看個人信息、審批故障以及訪問信息等。因此宿管用戶包括以下頁面
??? 宿管用戶:
??? 個人信息頁、宿舍查詢頁、衛生管理頁、宿舍反饋頁、訪問審批頁、故障審批頁。
2.2 任務目標
| 模塊 | 功能 |
| 個人信息 | 查看個人的基本信息 |
| 班級情況 | 班級的所有成員宿舍信息可以查看 |
| 宿舍查詢 | 查找具體個人的宿舍信息,學號、姓名。宿管可以根據學號、姓名或者宿舍直接查詢,權限比學生高 |
| 衛生管理 | 宿管更新檢查結果,學生查看結果,學生頁面留有以往的檢查結果 |
| 投訴系統 | 匿名反饋意見給指定宿舍,指定宿舍會有記錄,只能自己宿舍人員看到。宿管可以發送警告內容到指定宿舍,警告信息會特別提示。 |
| 報修系統 | 宿管阿姨受理報修信息。學生上報報修信息。學生會有保修信息的反饋 |
| 訪問申請 | 學生訪問非自己所在的公寓樓需要申請,對應宿舍樓的宿管需要審批。 |
| 離校鄧麗 | 學生離校進行系統登記,對應宿舍樓的宿管可以看到自己宿舍樓學生的離校登記信息。 |
三、系統定義
3.1 系統邊界
系統邊界描述數據庫系統和企業信息系統的其他部分的接口,是信息系統內部構成元素與外部有聯系實體之間的信息關系的描述與分割。它并不需要在它們之間劃一條物理邊界,而只需要弄清它們之間信息輸入與輸出的分割。
???? 用戶范圍邊界:
?????? 支持學生學號登錄、管理員賬號登錄,即只支持宿舍管理員以及學生使用。
系統功能邊界
3.2 用戶視圖
管理員用戶視圖
查詢、以宿舍號為索引的宿舍信息。
更新、將衛生結果發給各個宿舍各個同學
更新、回復同學們的報修情況
查詢、更新個人基本信息
更新、給指定宿舍告以警告信息
更新、對無權限進入的外宿舍樓訪問者提交的訪問申請進行審批
查看自己管理的宿舍樓的學生離校信息
學生用戶視圖
查詢、個人信息
查詢、以姓名為索引查詢宿舍信息
查看自己所在班級的人員信息
查詢、查看以往的衛生檢查結果
更新、投訴宿舍的投訴信息
更新、上報報修信息
更新、查詢訪問信息,查看訪問信息受理情況。
更新、填寫離校登記信息,查看歷史登記記錄
四、需求分析
學生公寓管理系統功能一覽:
4.1 用戶需求說明
4.1.1 數據需求
1、學生(宿管)基本信息;
學生學號sid、學生姓名sname、學生性別sex、學生年齡age、學生班級、學生宿舍樓id、學生宿舍id、學生學院信息、學生戶籍、學生身份證號、學生手機號、學生郵箱、學生專業信息
2、班級基本信息:
學生總人數、男生人數、女生人數、所有學生住宿信息
3、衛生檢查基本信息:
歷史衛生考核記錄、考核各項分數、宿舍id、宿舍樓id
4、訪問申請基本信息:
歷史訪問申請記錄、訪問人姓名、訪問人學號、訪問人宿舍樓id、訪問人宿舍id、訪問人目標宿舍樓id、訪問人申請事由、訪問人訪問時間、管理員審批狀態、宿管歷史審批記錄
5、故障報修基本信息:
歷史報修記錄、申報人姓名、申報人學號、申報人宿舍樓id、申報人宿舍id、故障信息、宿管審批狀態、宿管回復信息、宿管歷史審批記錄
6、匿名提醒基本信息:
宿舍樓id、宿舍號id、匿名提醒內容、宿管阿姨警告內容
7、離校登記基本信息:
學生學號、學生姓名、宿舍樓id、宿舍號id、離校理由、離校時間、返校時間。
4.1.2 事務需求
- 錄入搜索信息:
學生學號、學生姓名、學生宿舍號、學生班級
- 錄入衛生成績:
宿管:地面整潔、廁所衛生、窗戶衛生、異味雜物、廁所衛生、物品整齊分數
- 錄入匿名提醒信息
提醒目標宿舍id、匿名提醒信息
- 錄入訪問申請信息:
訪問目標宿舍樓信息、訪問理由、訪問時間
宿管:訪問審批結果
- 故障報修信息:
上報宿舍、故障信息
宿管:回復備注、審批結果
- 離校信息登記:
上報離校信息。
- 學生的聯系方式更新/刪除
- 學生匿名提醒信息更新
- 學生衛生成績更新
- 學生訪問申請歷史記錄更新
- 學生故障上報歷史記錄更新
- 宿管聯系方式更新
- 宿管更新學生衛生考核成績
- 宿管更新學生警告信息
- 宿管待處理訪問申請信息更新/刪除
- 宿管待處理故障信息更新/刪除
- 學生離校登記信息更新
3、數據查看:
管理員用戶視圖下:
學生用戶視圖下
4.2 系統需求說明
該學生公寓管理系統需要較強的數據處理功能,理論上應該能夠容納上萬人的數據資料,并且在搜索方面理應具有較快的響應速度,能夠處理多方面的數據請求。系統能夠有效的處理各種異常,具有較好的健壯性。
4.2.1 初始數據庫大小
①30條左右學生信息
②共5個 左右宿舍樓
- 查看本人基本個人信息
- 查看歷史訪問審批表單
- 查看歷史故障審批表單
- 查看學生離校登記信息表單
- 查看個人基本信息
- 查看本班級所有人員信息
- 查看本宿舍衛生歷史成績以及本次成績信息
- 查看本宿舍受到的匿名提醒信息
- 查看申請的訪問記錄信息
- 查看上報的故障處理信息?????
- 查看歷史離校登記信息
- 5個宿管賬號
- 15個左右宿舍
- 15條左右衛生信息
- 10條左右故障報修、訪問申請、離校登記信息
?
4.2.1 安全性
①只有登錄才能使用
②每個用戶只能看到權限范圍內的學生信息
③學生只能看到自己宿舍的故障報修、自己的訪問申請
④學生只能看到自己宿舍的匿名提醒、衛生信息
五、數據庫邏輯設計
5.1 ER圖:
5.2 數據字典
5.2.1 從數據字典中抽取出來的系統實體描述:
?
學生信息表
宿管信息表
?
學生匿名反饋信息表
宿管警告信息表
學生衛生成績表
學生歷史衛生成績表
學生訪問申請信息表
學生故障報修信息表
離校登記信息表:
?
?
六、數據庫物理設計
6.1 索引
數據庫中的索引:
| 表名 | 主鍵 | 索引 |
| stu | sid | 1、`sid` 2、`dorm_id`, `dorm_building_id` |
| manager | mid | 1、`mid` 2、`mid`, `mdorm` |
| Mfback | num | `dorm_id`, `dorm_building_id` |
| fback | num | `dorm_id`, `dorm_building_id` |
| Score | `dorm_id`, `dorm_building_id` | `dorm_id`, `dorm_building_id` |
| Historyscore | num | `dorm_building_id`, `dorm_id` |
| Svisit | num | `target`, `ac` |
| Wrong | num | `dorm_id`, `dorm_building_id` |
| Leave | num | 1、`sid` 2、`dorm_building_id` |
解釋:對應于學生信息的索引建立,由于每次用到學生的個人信息都是從sid開始尋找(主鍵確保唯一查找),所以建立sid的索引可以加快所有功能涉及到用到stu對應信息的視圖查詢速度;對于其他所有的`dorm_id`, `dorm_building_id`索引的建立,由于每一個功能的實現(查詢修改)都是建立在`dorm_id`, `dorm_building_id`基礎上的,這也是學生公寓的特點,因此建立`dorm_id`, `dorm_building_id`索引可以大大加快所有功能的增刪改查速度。
6.2 安全機制
6.2.1 系統安全
1、學生用戶的注冊只有系統中有了對應的學號才能進行注冊,否則會提示是否是某某大學的學生:
2、對于所有輸入異常,如空白輸入(未輸入)、學號不滿12位注冊、其他功能未選擇宿舍樓id、宿舍id、時間都會有相應的異常處理。
6.2.2 數據安全
1、登陸界面輸入的賬號密碼信息只有到了數據庫內系統設計者(我)才能看到,其他所有信息也只有系統設計者才能進行無條件修改,數據不會被隨意更改。
2、個人信息中學號身份證號宿舍號等不可動數據無論宿管還是學生都無條件修改,只有系統設計者才能更改,確保數據不會被學生或宿管更改而出現bug。
3、對于匿名提醒或申請訪問或故障處理宿管與學生的信息處理之間確保了原子性,
七、應用程序設計
7.1 功能模塊
?????? 該學生公寓管理系統共有查看修改個人信息、查看班級信息、查詢宿舍信息、查詢衛生信息、查看更新匿名提醒信息、查看更新訪問申請信息、查看更新故障報修信息七個功能模塊,其中分為兩個不同的系統用戶系統,對應不同的頁面。宿管無查看班級信息功能,但是在審批等其他功能有著更高級的權限,符合現實要求。具體實現如下
7.1.1 病人住院
1、查看修改個人信息:
?????? ① 檢測登陸狀態
?????? ② 檢測登陸賬戶
?????? ③ 判斷登陸賬戶類型(學生、宿管)
- 查詢數據、展示所有個人信息
- 若修改手機或者郵箱(其他信息不可動),判斷輸入是否合法
- 修改手機或者郵箱
- 更新頁面信息
2、查看班級信息
?????? ① 檢測登陸狀態
?????? ② 檢測登陸賬戶
4、查看更新匿名提醒信息
?????? ① 檢測登陸狀態
?????? ② 檢測登陸賬戶
5、查看更新訪問申請
?????? ① 檢測登陸狀態
?????? ② 檢測登陸賬戶
7、查看更新離校登記信息
① 檢測登陸狀態
?????? ② 檢測登陸賬戶
④(學生)展示所有離校登記的信息,上報新的離校登記信息。(宿管)查看所有本宿舍樓的離校登記信息。
⑤(學生)要進行離校登記,則必須選擇時間和填寫理由,其中離校時間必須小于返校時間,否則登記失敗,不上傳數據,進行異常處理。
⑥更新對應數據庫信息
⑦更新頁面信息
7.2 界面設計
7.2.1 登錄界面
- ?判斷登陸賬戶類型(學生、宿管)
- 查詢數據、展示所有班級成員信息
3、查看衛生信息
?????? ① 檢測登陸狀態
?????? ② 檢測登陸賬戶
- ?判斷登陸賬戶類型(學生、宿管)
- (學生)查詢數據、展示所屬宿舍所有歷史衛生信息、當次衛生檢查信息
- (宿管)選擇相應的宿舍,對應分數填入,檢測是否正確填入信息或分數。
- 更新對應數據庫信息
- 更新頁面信息
- ?判斷登陸賬戶類型(學生、宿管)
- 查詢數據、展示所有收到的匿名信息
- 若對其他宿舍進行匿名投訴,檢查是否正確選擇宿舍號并填入提醒信息
- 更新對應數據庫信息
- 更新頁面信息
- ?判斷登陸賬戶類型(學生、宿管)
- (學生)查詢數據、展示所有歷史訪問申請信息。(宿管)查詢數據、展示所有歷史審批記錄,展示未審批記錄的一條。
- (學生)若要申請訪問,檢測是否正確選擇時間、目標宿舍樓、事由。(宿管)點擊同意或者拒絕。
- 更新對應數據庫信息
- 更新頁面信息
-
6、查看更新故障報修信息
① 檢測登陸狀態
?????? ② 檢測登陸賬戶
- ?判斷登陸賬戶類型(學生、宿管)
- (學生)查詢數據、展示所有歷史故障上報信息。(宿管)查詢數據、展示所有歷史審批記錄,展示一個待審批信息表。
- (學生)若要上報故障信息,檢測是否正確填寫故障信息。(宿管)點擊選擇回復,檢查是否正確填寫。
- 更新對應數據庫信息
- 更新頁面信息
- ?判斷登陸賬戶類型(學生、宿管)
- ?????? 用戶若首次入學沒有賬號,則可以使用自己的學號對應注冊;管理員會已經分
配賬號。用戶在登錄界面輸入用戶名和密碼,經過系統驗證后會根據賬號類型進入學生或管理員界面。
學生注冊
.
?
學生賬號
管理員賬號
7.2.2 登陸后的頁面操作:
默認首先顯示個人信息頁面:
宿管頁面:
學生頁面:
?
7.2.3宿舍查詢頁面
下面是學生的宿舍查詢頁面,比宿管要缺少一項按照宿舍號查詢的權限
下面是宿管的查詢頁面,權限高于學生,有三項查詢方式:
?
7.2.4 學生專屬的班級信息查詢:
顯示男女人數、顯示班級總人數、展示所有班級成員信息
?
7.2.5 衛生信息頁面
學生頁面:
?
宿管頁面,可以選擇宿舍號進行打分
?
?
7.2.6 宿舍反饋(警告)
宿管頁面,可以向指定宿舍發送警告內容,可選擇的宿舍號已經過濾到所管理的宿舍樓
?
學生頁面:可查看收到的私信以及宿管的警告,可匿名向指定宿舍發送提醒私信,可選擇的宿舍號已經過濾到所住的宿舍樓
7.2.7訪問申請、審批:
學生頁面,可進行審批,查看歷史申請及通過狀態
?
宿管頁面,展示需要處理的審批單和已經審批過的審批單
7.2.8 宿舍故障上報、審批
學生頁面,可進行審批,查看歷史申請及通過狀態
?
宿管頁面,展示需要處理的審批單和已經審批過的審批單
?
?
7.2.8 離校登記
學生頁面:登記離校信息、展示歷史登記信息
宿管頁面:查看本宿舍樓的離校登記信息
7.2.9 退出登錄
?
返回登錄頁面
?
7.3 事務設計
該系統中,稍微復雜的查詢利用sql進行raw查詢,其他簡單的增刪改查利用filter和.save以及.delete完成。
7.3.1 登錄注冊事務
?????? 有關于登錄注冊時的查詢判斷增刪如下:
def to_login(request):
??? num = Logininfo.objects.filter().count()
??? if num >= 1:
??????? u = Logininfo.objects.filter()
??????? u.delete()
??? return render(request, 'login.html')
def to_reg(request):
??? return render(request, 'register.html')
def judge_login(request):
??? u = request.POST.get("user", '')
??? p = request.POST.get("pwd", '')
??? msg = "請正確輸入賬號密碼"
??? if u and p:
??????? c = Stu_Idpwd.objects.filter(sid=u, password=p).count()
??????? if c >= 1:
? ??????????state = Logininfo(id=u, password=p)
??????????? state.save()
??????????? if len(u) < 12:
??????????????? c = Logininfo.objects.filter().count()
??????????????? if c >= 1:
??????????????????? u = Logininfo.objects.get()
??????????????????? infodb = Manager.objects.get(mid=u.id)
??????????????? else:
??????????????????? msg = "請先登錄!"
??????????????????? return render(request, 'login.html', locals())
??????????????? return render(request, 'manageinfo.html', locals())
??????????? infodb = Stu.objects.get(sid=u)
??????????? return render(request, 'info.html', locals())
??????? else:
??????????? msg = "賬號或密碼錯誤!"
??????????? return render(request, 'login.html', locals())
??? else:
??????? return render(request, 'login.html', locals())
def judge_reg(request):
??? u = request.GET.get("user", '')
??? p = request.GET.get("pwd", '')
??? msg = ""
??? if u and p:
??????? c = Stu_Idpwd.objects.filter(sid=u).count()
??????? if c >= 1:
??????????? msg = "賬號已存在,如忘記密碼,請聯系系統管理員"
??????????? return render(request, 'register.html', locals())
??????? else:
??????????? cc = Stu.objects.filter(sid=u).count()
??????????? if cc >= 1:
??????????????? msg = "注冊成功"
??????????????? newaccount = Stu_Idpwd(sid=u, password=p)
??????????????? newaccount.save()
??????????????? return render(request, 'login.html', locals())
??????????? else:
??????????????? msg = "系統沒有您的學號,請確認您是否是山大學生"
??????????????? return render(request, 'register.html', locals())
??? else:
??????? return render(request, 'register.html', locals())
7.3.2 個人信息事務
def info(request):
??? c = Logininfo.objects.filter().count()
??? if c >= 1:
?? ?????u = Logininfo.objects.get()
??????? infodb = Stu.objects.get(sid=u.id)
??? else:
??????? msg = "請先登錄!"
?????? ?return render(request, 'login.html', locals())
??? return render(request, 'info.html', locals())
def infomove(request):
??? c = Logininfo.objects.filter().count()
??? if c >= 1:
??????? u = Logininfo.objects.get()
??????? infodb = Stu.objects.get(sid=u.id)
??????? newphone = request.GET.get('phone', '')
??????? newemail = request.GET.get('ema', '')
??????? if newemail or newphone:
????????? ??if newemail:
??????????????? infodb.email = newemail
??????????????? infodb.save()
??????????? if newphone:
???? ???????????infodb.phone = newphone
??????????????? infodb.save()
??????????? infomsg = "修改成功!"
??????? else:
??????????? infomsg = "請正確填寫手機號或郵箱!"
??????? return render(request, 'info.html', locals())
??? else:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
def minfomove(request):
??? c = Logininfo.objects.filter().count()
??? if c >= 1:
??????? u = Logininfo.objects.get()
??????? infodb = Manager.objects.get(mid=u.id)
??????? newphone = request.GET.get('phone', '')
??????? newemail = request.GET.get('ema', '')
??????? if newemail or newphone:
??????????? if newemail:
??????????????? infodb.email = newemail
??????????????? infodb.save()
??????????? if newphone:
??????????????? infodb.phone = newphone
??????????????? infodb.save()
??????????? infomsg = "修改成功!"
??????? else:
??????????? infomsg = "請正確填寫手機號或郵箱!"
??????? return render(request, 'manageinfo.html', locals())
??? else:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
7.3.3 班級信息事務
def classs(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? classinfo = Stu.objects.get(sid=num.id)
??????? membercount = Stu.objects.filter(classs=classinfo.classs).count()
??????? mancount = Stu.objects.filter(classs=classinfo.classs, sex='男').count()
??????? womancount = membercount - mancount
??????? allmember = Stu.objects.filter(classs=classinfo.classs)
??? return render(request, 'classs.html', locals())
7.3.4 宿舍查詢事務
def dormSearch(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? return render(request, 'dormSearch.html', locals())
def search(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? name = request.GET.get('searchname', '')
??????? ssid = request.GET.get('searchsid', '')
??????? sdormnum = Stu.objects.filter(sname=name).count()
??????? siddormnum = Stu.objects.filter(sid=ssid).count()
??????? msg = " "
??????? if siddormnum >= 1:
??????????? sdorm = Stu.objects.filter(sid=ssid)
??????? elif sdormnum >= 1:
??????????? sdorm = Stu.objects.filter(sname=name)
??????? else:
??????????? msg = "請輸入姓名或學號!"
??? return render(request, 'dormSearch.html', locals())
def managedormsearch(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
??????????????? listmm.append(m.dorm_id)
??????? dormid = request.GET.get('dormid', '')
??????? name = request.GET.get('searchname', '')
??????? ssid = request.GET.get('searchsid', '')
??????? dormidnum = Stu.objects.filter(dorm_id=dormid, dorm_building_id=nowinfo.mdorm).count()
??????? sdormnum = Stu.objects.filter(sname=name).count()
??????? siddormnum = Stu.objects.filter(sid=ssid).count()
??????? msg = " "
??????? if dormidnum >= 1:
??????????? sdorm = Stu.objects.filter(dorm_id=dormid, dorm_building_id=nowinfo.mdorm)
??????? elif siddormnum >= 1:
??????????? sdorm = Stu.objects.filter(sid=ssid)
??????? elif sdormnum >= 1:
??????????? sdorm = Stu.objects.filter(sname=name, dorm_building_id=nowinfo.mdorm)
??? ????else:
??????????? msg = "請輸入宿舍號或姓名或學號!"
??? return render(request, 'managedormsearch.html', locals())
7.3.5 衛生信息事務
def day(request):
??? c = Logininfo.objects.filter().count()
??? if c >= 1:
??????? num = Logininfo.objects.get()
??????? dorminfo = Stu.objects.get(sid=num.id)
??????? sdorm_id = dorminfo.dorm_id
??????? sbuil_id = dorminfo.dorm_building_id
??????? lii = dict()
??????? lii['dorm_building_id'] = sbuil_id
??????? lii['dorm_id'] = sdorm_id
??????? ct = Score.objects.filter(**lii).count()
??????? if ct < 1:
??????????? newscore = Score(dorm_building_id=sbuil_id, dorm_id=sdorm_id, ground=0, bathroom=0, tidness=0, smell=0,
???????????????????????????? windows=0)
??????????? newscore.save()
??????? dormscore = Score.objects.filter(**lii)[0]
??????? hsc = Historyscore.objects.filter(**lii).count()
??????? if hsc >= 1:
??????????? oldscore = Historyscore.objects.filter(**lii)
??? else:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? return render(request, 'dormClean.html', locals())
def manageday(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
???? ???????????listmm.append(m.dorm_id)
??? return render(request, 'manageday.html', locals())
def managedaysubmit(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
??????????????? listmm.append(m.dorm_id)
??? ????d = request.GET.get('dormid', '')
??????? g = request.GET.get('ground', '')
? ??????b = request.GET.get('bathroom', '')
??????? w = request.GET.get('windows', '')
??????? t = request.GET.get('tidness', '')
??????? s = request.GET.get('smell', '')
??????? if d and g and b and w and t and s:
??????????? oldnum = Score.objects.filter(dorm_building_id=nowinfo.mdorm, dorm_id=d).count()
??????????? if oldnum >= 1:
??????????????? old = Score.objects.get(dorm_building_id=nowinfo.mdorm, dorm_id=d)
??????? ????????tohistory = Historyscore(dorm_building_id=old.dorm_building_id, dorm_id=old.dorm_id, ground=old.ground,
???????????????????????????????????????? bathroom=old.bathroom, tidness=old.tidness, smell=old.smell,
???????????????????????????????????????? windows=old.windows)
??????????????? tohistory.save()
??????????????? old = Score.objects.get(dorm_building_id=nowinfo.mdorm, dorm_id=d).delete()
??????????? newscore = Score(dorm_building_id=nowinfo.mdorm, dorm_id=d, ground=g, bathroom=b, tidness=t, smell=s,
???????????????????????????? windows=w)
??????????? newscore.save()
??????????? msg = "打分數據上傳成功!"
??????? else:
??????????? msg = "請選擇宿舍并且正確打分!"
??? return render(request, 'manageday.html', locals())
7.3.6 宿舍反饋事務
def errorr(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid=num.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
??????????????? listmm.append(m.dorm_id)
?????? ?fbinfocount = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
??????? mfbinfocount = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
??????? if fbinfocount >= 1:
??????????? fbmsg = ""
??????????? feedbinfo = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
??????? else:
??????????? fbmsg = "當前沒有收到同學的投訴信息哦"
??????? if mfbinfocount >= 1:
??????????? mfbmsg = "以下是來自宿管的警告!"
??????????? mfeedbinfo = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
??????? else:
??????????? mfbmsg = "當前沒有收到來自宿管的警告哦"
??? return render(request, 'errorr.html', locals())
def feedback(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??? ????nowinfo = Stu.objects.get(sid=num.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
??????????????? listmm.append(m.dorm_id)
??????? fbinfocount = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
??????? if fbinfocount >= 1:
??????????? fbmsg = ""
??????????? feedbinfo = Fback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
??????? else:
??????????? fbmsg = "當前沒有收到投訴信息哦"
??? mfbinfocount = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
??? if mfbinfocount >= 1:
??????? mfbmsg = "以下是來自宿管的警告!"
??????? mfeedbinfo = Mfback.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
??? else:
??????? mfbmsg = "當前沒有收到來自宿管的警告哦"
??? dormid = request.GET.get('dormid', '')
??? judge = request.GET.get('message', '')
??? if judge:
??????? dbmsg = request.GET.get('message', '')
??????? dormnum = request.GET.get('dormid', '')
??????? dormbuildid = nowinfo.dorm_building_id
??????? newmsg = Fback(dorm_id=dormid, dorm_building_id=dormbuildid, fbinfo=dbmsg)
??????? newmsg.save()
??????? msg = "消息已發送"
??? else:
??????? msg = "請正確填寫消息"
??? return render(request, 'errorr.html', locals())
def managefeedback(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??? ????num = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=num.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
??????????????? listmm.append(m.dorm_id)
??? dormid = request.GET.get('dormid', '')
??? judge = request.GET.get('message', '')
??? if judge:
??????? dbmsg = request.GET.get('message', '')
??????? dormnum = request.GET.get('dormid', '')
??????? dormbuildid = nowinfo.dorm_building_id
??????? newmsg = Mfback(dorm_id=dormid, dorm_building_id=dormbuildid, mfbinfo=dbmsg)
??????? newmsg.save()
??????? msg = "警告已送達"
??? else:
??????? msg = "請選擇宿舍并填寫消息"
??? return render(request, 'manageerror.html', locals())
def manageerror(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=num.id)
??????? sql = "select distinct sid,dorm_id from stu where dorm_building_id = %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.mdorm])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_id not in listmm:
??????????????? listmm.append(m.dorm_id)
??????? msg = ""
??? return render(request, 'manageerror.html', locals())
7.3.7 訪問審批事務
def visit(request):
? ??c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
? ??????return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid=num.id)
??????? sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_building_id not in listmm:
??????????????? listmm.append(m.dorm_building_id)
??? dormid = request.GET.get('dormid', '')
??? judge = request.GET.get('message', '')
??? if judge:
??????? dbmsg = request.GET.get('message', '')
??????? dormnum = request.GET.get('dormid', '')
??????? visitTime = request.GET.get('time', '')
?? ?????newmsg = Svisit(time=visitTime, target=dormnum, why=dbmsg, sno=nowinfo.sid, sname=nowinfo.sname, ac=0,
? ??????????????????????dorm_building_id=nowinfo.dorm_building_id, dorm_id=nowinfo.dorm_id)
??????? newmsg.save()
??????? msg = "請求單已送達"
??? else:
??????? msg = "請正確填寫"
??? reqnum = Svisit.objects.filter(sno=nowinfo.sid).count()
??? if reqnum >= 1:
??????? reqform = Svisit.objects.filter(sno=nowinfo.sid)
??????? fbmsg = ''
??? else:
??????? fbmsg = '您還沒有上交過請求'
??? return render(request, 'visit.html', locals())
def visitt(request):
??? c = Logininfo.objects.filter().count()
?? ?if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid=num.id)
??????? sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_building_id not in listmm:
???? ???????????listmm.append(m.dorm_building_id)
??? dormid = request.GET.get('dormid', '')
??? judge = request.GET.get('message', '')
??? reqnum = Svisit.objects.filter(sno=nowinfo.sid).count()
??? if reqnum >= 1:
??????? reqform = Svisit.objects.filter(sno=nowinfo.sid)
??????? fbmsg = ''
??? else:
??????? fbmsg = '您還沒有上交過請求'
??? return render(request, 'visit.html', locals())
def mvisit(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??? waitinfonum = Svisit.objects.filter(ac=0, target=nowinfo.mdorm).count()
??? sql = "select * from svisit where target = %s and ac != 0"
??? alreadyinfo = Svisit.objects.raw(sql, [nowinfo.mdorm])
??? if alreadyinfo:
??????? hvmsg = ""
??? else:
??????? hvmsg = "您還沒有處理過申請信息"
??? if waitinfonum < 1:
??????? vmsg = "當前沒有需要處理的申請"
??? else:
??????? waitinfo = Svisit.objects.filter(ac=0, target=nowinfo.mdorm)[0]
??????? stuinfo = Stu.objects.get(sid=waitinfo.sno)
??? return render(request, 'managevisit.html', locals())
def mvisitt(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??? waitinfo = Svisit.objects.filter(ac=0, target=nowinfo.mdorm)[0]
??? res = request.GET.get('res', '')
??? waitinfo.ac = res
??? waitinfo.save()
??? waitinfonum = Svisit.objects.filter(ac=0, target=nowinfo.mdorm).count()
??? if waitinfonum < 1:
??????? vmsg = "當前沒有需要處理的申請"
??? else:
??????? waitinfo = Svisit.objects.filter(ac=0, target=nowinfo.mdorm)[0]
??????? stuinfo = Stu.objects.get(sid=waitinfo.sno)
??? sql = "select * from svisit where target = %s and ac != 0"
??? alreadyinfo = Svisit.objects.raw(sql, [nowinfo.mdorm])
??? if alreadyinfo:
??????? hvmsg = ""
??? else:
??????? hvmsg = "您還沒有處理過申請信息"
??? return render(request, 'managevisit.html', locals())
7.3.7 故障報修事務
def wrong(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid=num.id)
??????? sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
??????? listmm = []
??????? for m in dorminfo:
??????? ????if m.dorm_building_id not in listmm:
??????????????? listmm.append(m.dorm_building_id)
??? dormid = request.GET.get('dormid', '')
??? judge = request.GET.get('message', '')
??? if judge:
??????? dbmsg = request.GET.get('message', '')
??????? newmsg = Wrong(dorm_building_id=nowinfo.dorm_building_id, dorm_id=nowinfo.dorm_id, wronginfo=dbmsg,
?????????????????????? sid=nowinfo.sid, sname=nowinfo.sname, ac=0)
??????? newmsg.save()
??????? msg = "故障單已送達"
??? else:
??????? msg = "請正確填寫"
??? reqnum = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
??? if reqnum >= 1:
??????? reqform = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
??????? fbmsg = ''
??? else:
??????? fbmsg = '您的宿舍還沒有上交過故障信息'
??? return render(request, 'wrong.html', locals())
def wrongg(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid=num.id)
??????? sql = "select sid,dorm_building_id from stu where dorm_building_id != %s"
??????? dorminfo = Stu.objects.raw(sql, [nowinfo.dorm_building_id])
??????? listmm = []
??????? for m in dorminfo:
??????????? if m.dorm_building_id not in listmm:
??????????????? listmm.append(m.dorm_building_id)
??? dormid = request.GET.get('dormid', '')
??? judge = request.GET.get('message', '')
??? reqnum = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id).count()
??? if reqnum >= 1:
??????? reqform = Wrong.objects.filter(dorm_id=nowinfo.dorm_id, dorm_building_id=nowinfo.dorm_building_id)
??????? fbmsg = ''
??? else:
??????? fbmsg = '您的宿舍還沒有上交過請求'
??? return render(request, 'wrong.html', locals())
def mwrong(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??? waitinfonum = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm).count()
??? sql = "select * from wrong where dorm_building_id = %s and ac != 0"
??? alreadyinfo = Wrong.objects.raw(sql, [nowinfo.mdorm])
??? if alreadyinfo:
??????? hvmsg = ""
??? else:
??????? hvmsg = "您還沒有處理過申請信息"
??? if waitinfonum < 1:
??????? vmsg = "當前沒有需要處理的申請"
??? else:
??????? waitinfo = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm)[0]
??????? stuinfo = Stu.objects.get(sid=waitinfo.sid)
??? return render(request, 'managewrong.html', locals())
def mwrongg(request):
??? c = Logininfo.objects.filter().count()
??? if c < 1:
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else:
??????? now = Logininfo.objects.get()
??????? nowinfo = Manager.objects.get(mid=now.id)
??? waitinfo = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm)[0]
??? res = request.GET.get('res', '')
??? mes = request.GET.get('message', '')
??? waitinfo.ac = res
??? waitinfo.reply = mes
??? waitinfo.save()
??? waitinfonum = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm).count()
??? if waitinfonum < 1:
??????? vmsg = "當前沒有需要處理的申請"
??? else:
??????? waitinfo = Wrong.objects.filter(ac=0, dorm_building_id=nowinfo.mdorm)[0]
??????? stuinfo = Stu.objects.get(sid=waitinfo.sid)
??? sql = "select * from wrong where dorm_building_id = %s and ac != 0"
??? alreadyinfo = Wrong.objects.raw(sql, [nowinfo.mdorm])
??? if alreadyinfo:
??????? hvmsg = ""
??? else:
??????? hvmsg = "您還沒有處理過申請信息"
??? return render(request, 'managewrong.html', locals())
7.3.8 離校登記事務
def leavee(request) :
??? c = Logininfo.objects.filter().count()
??? if c < 1 :
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else :
? ??????num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid = num.id)
??????? reqnum = Leave.objects.filter(sid = nowinfo.sid).count()
??????? if reqnum >= 1 :
??????????? reqform = Leave.objects.filter(sid = nowinfo.sid)
??????????? fbmsg = ''
??????? else:
fbmsg = '您還沒有過離校登記'
return render(request, 'leave.html', locals())
def leave(request) :
??? c = Logininfo.objects.filter().count()
??? if c < 1 :
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else :
?? ?????num = Logininfo.objects.get()
??????? nowinfo = Stu.objects.get(sid = num.id)
??????? judge = request.GET.get('message', '')
??????? bbtime = request.GET.get('btime', '')
??????? eetime = request.GET.get('etime', '')
??????? if eetimeand bbtimeand judge:
if eetime >= bbtime :
??? newmsg = Leave(btime = bbtime, etime = eetime, why = judge, sid = nowinfo.sid, sname = nowinfo.sname,
??????? dorm_building_id = nowinfo.dorm_building_id, dorm_id = nowinfo.dorm_id)
??? newmsg.save()
? ??msg = "報備成功!"
else:
lmsg = "返校時間必須大于離校時間!"
??????? else:
msg = "請正確填寫"
reqnum = Leave.objects.filter(sid = nowinfo.sid).count()
if reqnum >= 1 :
??? reqform = Leave.objects.filter(sid = nowinfo.sid)
??? fbmsg = ''
else:
fbmsg = '您還沒有上交過請求'
return render(request, 'leave.html', locals())
def mleave(request) :
??? c = Logininfo.objects.filter().count()
??? if c < 1 :
??????? msg = "請先登錄!"
??????? return render(request, 'login.html', locals())
??? else :
??????? m = Logininfo.objects.get()
??????? minfo = Manager.objects.get(mid = m.id)
??????? num = Leave.objects.filter(dorm_building_id = minfo.mdorm).count()
??????? if num < 1 :
??????????? msg = "您管理的宿舍樓目前還沒有學生進行離校登記過哦"
??????? else:
msg = ""
allmember = Leave.objects.filter(dorm_building_id = minfo.mdorm)
return render(request, 'mleave.html', locals())
總結
以上是生活随笔為你收集整理的学生公寓管理系统-python+Django+Mysql(附视图代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 医疗保险如何报销
- 下一篇: VScode 代码特效