From a47b79770bcc8d5e657430cf4ccd767da1ea5920 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 18:14:20 +0800 Subject: [PATCH 1/8] mrz --- PythonProject/api/statistics_api.py | 7 +++---- PythonProject/dao/statistics_dao.py | 2 +- PythonProject/main.py | 8 +------- PythonProject/schema/statistics_schema.py | 4 ++++ 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/PythonProject/api/statistics_api.py b/PythonProject/api/statistics_api.py index ab3141d..f934c21 100644 --- a/PythonProject/api/statistics_api.py +++ b/PythonProject/api/statistics_api.py @@ -1,7 +1,7 @@ from fastapi import APIRouter,Depends from dao.statistics_dao import select_all,select_age,select_score,select_avg_score,select_salary,select_days from schema.student_schema import StudentResponse -from schema.statistics_schema import AllStuResponse,AvgDayResponse +from schema.statistics_schema import AllStuResponse,AvgDayResponse,AcgScoreResponse from util.database import get_db StatisticsAPI = APIRouter() @@ -21,10 +21,10 @@ def get_students(min_score:int|None=None,max_score:int|None=None,db=Depends(get_ l = select_score(min_score,max_score,db) return [i for i in l] -@StatisticsAPI.get("/avg_score",response_model=StudentResponse,tags=['统计分析模块'],summary='统计每次考试每个班级的平均分并排序') +@StatisticsAPI.get("/avg_score",response_model=list[AcgScoreResponse],tags=['统计分析模块'],summary='统计每次考试每个班级的平均分并排序') def get_scores(db=Depends(get_db)): l = select_avg_score(db) - return [i for i in l] + return l @StatisticsAPI.get("/salary",response_model=list[StudentResponse],tags=['统计分析模块'],summary='统计薪资最高的前五名的学员信息') def get_scores(db=Depends(get_db)): @@ -35,4 +35,3 @@ def get_scores(db=Depends(get_db)): def get_days(db=Depends(get_db)): l = select_days(db) return l - diff --git a/PythonProject/dao/statistics_dao.py b/PythonProject/dao/statistics_dao.py index 774fb74..52658c8 100644 --- a/PythonProject/dao/statistics_dao.py +++ b/PythonProject/dao/statistics_dao.py @@ -49,7 +49,7 @@ def select_score(min_score,max_score,db): # 实现统计每次考试每个班级的平均分并排序的功能 def select_avg_score(db): try: - l1 = db.query(func.avg(WlScore.score))\ + l1 = db.query(Student_Model.class_id,func.avg(WlScore.score).label('avg_score'))\ .join(Student_Model,WlScore.stu_id == Student_Model.stu_id)\ .filter(WlScore.delete_status==0,Student_Model.delete_status == 0)\ .group_by(Student_Model.class_id)\ diff --git a/PythonProject/main.py b/PythonProject/main.py index 9223bc4..c944c14 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -1,5 +1,4 @@ from fastapi import FastAPI - from api.employment_api import emp_api from api.student_api import StudentAPI from api.statistics_api import StatisticsAPI @@ -9,12 +8,7 @@ app = FastAPI(title='沃林学⽣管理系统') app.include_router(StudentAPI) app.include_router(StatisticsAPI) - app.include_router(teacher_api) app.include_router(emp_api) - - -if __name__ == '__main__': - import uvicorn - uvicorn.run("main:app",host='0.0.0.0',port=12310) +app.include_router(gradeAPI) app.include_router(gradeAPI) diff --git a/PythonProject/schema/statistics_schema.py b/PythonProject/schema/statistics_schema.py index 4c967e0..ab8e87b 100644 --- a/PythonProject/schema/statistics_schema.py +++ b/PythonProject/schema/statistics_schema.py @@ -5,6 +5,10 @@ class AllStuResponse(BaseModel): gender: str | None cnt: int +class AcgScoreResponse(BaseModel): + class_id: int + avg_score: float + class AvgDayResponse(BaseModel): class_id: int avg_days: str | None From b23fe9eafd6c4d0edd1cdb0d9a412cb0e93063f6 Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 18:21:31 +0800 Subject: [PATCH 2/8] mrz --- 需求文档.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/需求文档.md b/需求文档.md index d6eb866..4e1059b 100644 --- a/需求文档.md +++ b/需求文档.md @@ -18,10 +18,6 @@ wl_class(班级编号,开课时间,删除状态(0:已删除,1:初始 ⽼师管理表 **sgt 做完了** wl_teacher(老师编号,姓名,性别,年龄,删除状态(0:已删除,1:初始值),职位,作成时间,更新时间) -dao层(每一个功能就是一个函数,判断能否功能复用) - -通用模块 - 学生模块 实现增加学生的功能 **msj 做成中** 实现查询学生的功能:需要能进行多条件查询 **msj 做成中** @@ -56,8 +52,8 @@ dao层(每一个功能就是一个函数,判断能否功能复用) 实现根据年龄查询学生信息的功能 **mrz 已作成** 实现统计每个班级的学员总数以及男女生的总数的功能 **mrz 已作成** 实现根据成绩查询学员信息的功能 **mrz 已作成** -实现统计每次考试每个班级的平均分并排序的功能 **mrz 做成中** -实现统计薪资最高的前五名的学员信息 **mrz 做成中** +实现统计每次考试每个班级的平均分并排序的功能 **mrz 已作成** +实现统计薪资最高的前五名的学员信息 **mrz 已作成** 实现查询每个学生的就业时长 **msj 做成中** -实现统计每个班级的平均就业时长 **xxx 做成中** +实现统计每个班级的平均就业时长 **xxx 已作成** From 3ad17208681c4be5eb3e3cc06223a0cde53be2de Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 18:30:55 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/teacher_api.py | 22 ++++++++++++++-------- PythonProject/dao/teacher_dao.py | 18 +++++++++--------- PythonProject/main.py | 2 +- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 45ff834..0510985 100644 --- a/PythonProject/api/teacher_api.py +++ b/PythonProject/api/teacher_api.py @@ -1,10 +1,11 @@ from fastapi import APIRouter,HTTPException from schema.teacher_schema import Teacher_ResponseModel, Teacher_RequestModel from dao.teacher_dao import * +from util.database import * teacher_api=APIRouter() -@teacher_api.post("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='新增教师接口') +@teacher_api.post("/teachers",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='新增教师接口') def add_teacher(teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=add_teacher(req=d,session=session) @@ -13,14 +14,19 @@ def add_teacher(teacher:Teacher_RequestModel,session=Depends(get_db)): return Teacher_ResponseModel(totals=1,data=d) -@teacher_api.get("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='查询教师接口') -def get_teacher(id: int, session=Depends(get_db)): - r = get_teacher(id=id, session=session) - if not r: - raise HTTPException(status_code=500, detail='查询异常!') +@teacher_api.get("/teachers",tags=['教师基本信息管理模块'],summary='查询教师接口') +def get_teacher(teacid:int, session=Depends(get_db)): + # r = get_teacher(id=id,session=session) + # if not r: + # raise HTTPException(status_code=500, detail='查询异常!') + try: + l=get_teacher(teacid,session) + return {'code': 200,'msg':'查询成功','data':l} + except: + raise HTTPException(status_code=500,detail='数据库查询异常!') -@teacher_api.put("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='更新教师接口') +@teacher_api.put("/teachers",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='更新教师接口') def update_teacher(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): d=teacher.model_dump() r=update_teacher(id=id,req=d,session=session) @@ -29,7 +35,7 @@ def update_teacher(id:int,teacher:Teacher_RequestModel,session=Depends(get_db)): return {'code': 200, 'totals': r, 'detail': '更新成功'} -@teacher_api.delete("/",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='删除教师接口') +@teacher_api.delete("/teachers",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='删除教师接口') def delete_teacher(id:int,session=Depends(get_db)): r=delete_teacher(id=id,session=session) if not r: diff --git a/PythonProject/dao/teacher_dao.py b/PythonProject/dao/teacher_dao.py index 694598e..acce61c 100644 --- a/PythonProject/dao/teacher_dao.py +++ b/PythonProject/dao/teacher_dao.py @@ -1,7 +1,6 @@ from fastapi import HTTPException,Depends -from model.all_model import Teacher_Model -from util.database import * from schema.teacher_schema import Teacher_RequestModel +from model.all_model import * def add_teacher(req:Teacher_RequestModel,session): try: @@ -12,14 +11,15 @@ def add_teacher(req:Teacher_RequestModel,session): raise HTTPException(status_code=500,detail="添加异常!") return req.model_dump() -def get_teacher(session): - try: - teacher_list=session.query(Teacher_Model).filter(Teacher_Model.delete_status==0).all() - return teacher_list - except: - raise HTTPException(status_code=500,detail="查询异常!") +def get_teacher(id,session): + l=session.query(Teacher_Model).filter(Teacher_Model.teac_id==id)\ + .filter(Teacher_Model.delete_status==0).all() + if l: + return l + else: + raise HTTPException(status_code=404,detail='该老师不存在!') -def update_teacher(id:int,req:Teacher_RequestModel,session): +def update_teacher(teac_id:int,req:Teacher_RequestModel,session): try: session.query(Teacher_Model).filter(Teacher_Model.teac_id==id)\ .filter(Teacher_Model.delete_status==0).update(req.model_dump(exclude_unset=True)) diff --git a/PythonProject/main.py b/PythonProject/main.py index b2aef0b..025e417 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -13,5 +13,5 @@ app.include_router(teacher_api) if __name__ == '__main__': import uvicorn - uvicorn.run("main:app",host='0.0.0.0',port=12310) + uvicorn.run("main:app",host='0.0.0.0',port=12320) app.include_router(gradeAPI) \ No newline at end of file From 5e89b44b22ebd28c05888789f6678ea87d74f39e Mon Sep 17 00:00:00 2001 From: 0919word <835535015@qq.com> Date: Mon, 21 Sep 2026 19:21:34 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E8=92=8B=E7=AB=8B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/cla_api.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 PythonProject/api/cla_api.py diff --git a/PythonProject/api/cla_api.py b/PythonProject/api/cla_api.py new file mode 100644 index 0000000..871b78b --- /dev/null +++ b/PythonProject/api/cla_api.py @@ -0,0 +1,33 @@ +from fastapi import APIRouter, Depends +from util.database import get_db +from schema.cla_schema import claRequest +from dao.cla_dao import (add_class_dao,get_class_dao,update_class_dao,delete_class_dao + ,get_class_for_delete,hard_delete_class +) + +claAPI = APIRouter(prefix="/class", tags=["班级管理"]) +@claAPI.post("/{class_id}", summary="新增班级") +def add_class(data: claRequest, Session = Depends(get_db)): + return add_class_dao(data, Session) + +@claAPI.get("/list", summary="查询班级") +def list_class(Session = Depends(get_db)): + return get_class_dao(Session) + +@claAPI.put("/{class_id}", summary="更新班级信息") +def update_class(class_id: int, data: claRequest, Session = Depends(get_db)): + return update_class_dao(class_id, data, Session) + +@claAPI.get("/{class_id}", summary="隐藏单条信息") +def hidden_class(class_id: int, Session = Depends(get_db)): + return delete_class_dao(class_id, Session) + +@claAPI.get("/{class_id}", summary="硬删除前查询") +def check_delete(class_id: int, Session = Depends(get_db)): + return get_class_for_delete(class_id, Session) + +@claAPI.delete("/{class_id}", summary="删除班级信息") +def confirm_delete(class_id: int, Session = Depends(get_db)): + return hard_delete_class(class_id, Session) + + From 274fcd57a84b8b739dc2ffd9bbaa8189daf8920f Mon Sep 17 00:00:00 2001 From: maruizhi <3088243241@qq.com> Date: Mon, 21 Sep 2026 19:41:16 +0800 Subject: [PATCH 5/8] mrz --- PythonProject/api/cla_api.py | 7 +++---- PythonProject/main.py | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/PythonProject/api/cla_api.py b/PythonProject/api/cla_api.py index 871b78b..6f7e400 100644 --- a/PythonProject/api/cla_api.py +++ b/PythonProject/api/cla_api.py @@ -1,11 +1,10 @@ from fastapi import APIRouter, Depends from util.database import get_db from schema.cla_schema import claRequest -from dao.cla_dao import (add_class_dao,get_class_dao,update_class_dao,delete_class_dao - ,get_class_for_delete,hard_delete_class -) +from dao.cla_dao import add_class_dao,get_class_dao,update_class_dao,delete_class,get_class_for_delete,hard_delete_class claAPI = APIRouter(prefix="/class", tags=["班级管理"]) + @claAPI.post("/{class_id}", summary="新增班级") def add_class(data: claRequest, Session = Depends(get_db)): return add_class_dao(data, Session) @@ -20,7 +19,7 @@ def update_class(class_id: int, data: claRequest, Session = Depends(get_db)): @claAPI.get("/{class_id}", summary="隐藏单条信息") def hidden_class(class_id: int, Session = Depends(get_db)): - return delete_class_dao(class_id, Session) + return delete_class(class_id, Session) @claAPI.get("/{class_id}", summary="硬删除前查询") def check_delete(class_id: int, Session = Depends(get_db)): diff --git a/PythonProject/main.py b/PythonProject/main.py index c944c14..3b07189 100644 --- a/PythonProject/main.py +++ b/PythonProject/main.py @@ -4,11 +4,13 @@ from api.student_api import StudentAPI from api.statistics_api import StatisticsAPI from api.teacher_api import teacher_api from api.grade_api import gradeAPI +from api.cla_api import claAPI app = FastAPI(title='沃林学⽣管理系统') app.include_router(StudentAPI) + app.include_router(StatisticsAPI) app.include_router(teacher_api) app.include_router(emp_api) app.include_router(gradeAPI) -app.include_router(gradeAPI) +app.include_router(claAPI) From 60165857bf0d7bcb801b36841c1e0e2e3e2c3875 Mon Sep 17 00:00:00 2001 From: 0919word <835535015@qq.com> Date: Mon, 21 Sep 2026 19:52:17 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E8=92=8B=E7=AB=8B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/cla_api.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PythonProject/api/cla_api.py b/PythonProject/api/cla_api.py index 6f7e400..d72fa09 100644 --- a/PythonProject/api/cla_api.py +++ b/PythonProject/api/cla_api.py @@ -5,27 +5,27 @@ from dao.cla_dao import add_class_dao,get_class_dao,update_class_dao,delete_clas claAPI = APIRouter(prefix="/class", tags=["班级管理"]) -@claAPI.post("/{class_id}", summary="新增班级") +@claAPI.post("/class", summary="新增班级") def add_class(data: claRequest, Session = Depends(get_db)): return add_class_dao(data, Session) -@claAPI.get("/list", summary="查询班级") +@claAPI.get("/class/list", summary="查询班级") def list_class(Session = Depends(get_db)): return get_class_dao(Session) -@claAPI.put("/{class_id}", summary="更新班级信息") +@claAPI.put("/class/{class_id}", summary="更新班级信息") def update_class(class_id: int, data: claRequest, Session = Depends(get_db)): return update_class_dao(class_id, data, Session) -@claAPI.get("/{class_id}", summary="隐藏单条信息") -def hidden_class(class_id: int, Session = Depends(get_db)): +@claAPI.get("/class/{class_id}", summary="逻辑删除班级信息") +def delete_class(class_id: int, Session = Depends(get_db)): return delete_class(class_id, Session) -@claAPI.get("/{class_id}", summary="硬删除前查询") +@claAPI.get("/class/delete/check/{class_id}", summary="硬删除前查询") def check_delete(class_id: int, Session = Depends(get_db)): return get_class_for_delete(class_id, Session) -@claAPI.delete("/{class_id}", summary="删除班级信息") +@claAPI.delete("/class/delete/confirm/{class_id}", summary="删除班级信息") def confirm_delete(class_id: int, Session = Depends(get_db)): return hard_delete_class(class_id, Session) From 6bb3a779554f965d8eeb5e3302fdc1075e551972 Mon Sep 17 00:00:00 2001 From: 0919word <835535015@qq.com> Date: Mon, 21 Sep 2026 19:57:17 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E8=92=8B=E7=AB=8B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/cla_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PythonProject/api/cla_api.py b/PythonProject/api/cla_api.py index d72fa09..b002d34 100644 --- a/PythonProject/api/cla_api.py +++ b/PythonProject/api/cla_api.py @@ -1,7 +1,7 @@ from fastapi import APIRouter, Depends from util.database import get_db from schema.cla_schema import claRequest -from dao.cla_dao import add_class_dao,get_class_dao,update_class_dao,delete_class,get_class_for_delete,hard_delete_class +from dao.cla_dao import add_class_dao,get_class_dao,update_class_dao,delete_class_dao,get_class_for_delete,hard_delete_class claAPI = APIRouter(prefix="/class", tags=["班级管理"]) @@ -19,7 +19,7 @@ def update_class(class_id: int, data: claRequest, Session = Depends(get_db)): @claAPI.get("/class/{class_id}", summary="逻辑删除班级信息") def delete_class(class_id: int, Session = Depends(get_db)): - return delete_class(class_id, Session) + return delete_class_dao(class_id, Session) @claAPI.get("/class/delete/check/{class_id}", summary="硬删除前查询") def check_delete(class_id: int, Session = Depends(get_db)): From 5811a68d654dd7146c94fd5fb599892a03c10d14 Mon Sep 17 00:00:00 2001 From: test1 Date: Mon, 21 Sep 2026 20:00:35 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E9=A9=AC=E7=9D=BF=E6=99=BA=E7=89=9B?= =?UTF-8?q?=E9=80=BC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PythonProject/api/teacher_api.py | 16 +++++++--------- PythonProject/dao/teacher_dao.py | 16 +++++++++++----- PythonProject/schema/teacher_schema.py | 18 ++++-------------- 3 files changed, 22 insertions(+), 28 deletions(-) diff --git a/PythonProject/api/teacher_api.py b/PythonProject/api/teacher_api.py index 0510985..c0ba4fb 100644 --- a/PythonProject/api/teacher_api.py +++ b/PythonProject/api/teacher_api.py @@ -1,18 +1,16 @@ -from fastapi import APIRouter,HTTPException +from fastapi import APIRouter,HTTPException,Depends from schema.teacher_schema import Teacher_ResponseModel, Teacher_RequestModel -from dao.teacher_dao import * -from util.database import * +from dao.teacher_dao import add_teacher +from util.database import get_db teacher_api=APIRouter() @teacher_api.post("/teachers",response_model=Teacher_ResponseModel,tags=['教师基本信息管理模块'],summary='新增教师接口') -def add_teacher(teacher:Teacher_RequestModel,session=Depends(get_db)): - d=teacher.model_dump() - r=add_teacher(req=d,session=session) - if not r: +def get_teacher(x1:Teacher_RequestModel,session=Depends(get_db)): + y=add_teacher(x1.model_dump(),session) + if not y: raise HTTPException(status_code=500,detail='添加异常!') - return Teacher_ResponseModel(totals=1,data=d) - + return x1 @teacher_api.get("/teachers",tags=['教师基本信息管理模块'],summary='查询教师接口') def get_teacher(teacid:int, session=Depends(get_db)): diff --git a/PythonProject/dao/teacher_dao.py b/PythonProject/dao/teacher_dao.py index acce61c..cfb3eed 100644 --- a/PythonProject/dao/teacher_dao.py +++ b/PythonProject/dao/teacher_dao.py @@ -2,14 +2,20 @@ from fastapi import HTTPException,Depends from schema.teacher_schema import Teacher_RequestModel from model.all_model import * -def add_teacher(req:Teacher_RequestModel,session): +def add_teacher(teacher,session): try: - data=req.model_dump() - session.add(Teacher_Model(**data)) + print(teacher) + x=Teacher_Model(**teacher) + print(1) + session.add(x) + print(2) session.commit() + print(3) + return teacher except: - raise HTTPException(status_code=500,detail="添加异常!") - return req.model_dump() + session.rollback() + # raise HTTPException(status_code=500,detail='添加异常!') + return None def get_teacher(id,session): l=session.query(Teacher_Model).filter(Teacher_Model.teac_id==id)\ diff --git a/PythonProject/schema/teacher_schema.py b/PythonProject/schema/teacher_schema.py index 8f60539..604c53b 100644 --- a/PythonProject/schema/teacher_schema.py +++ b/PythonProject/schema/teacher_schema.py @@ -1,27 +1,17 @@ -from datetime import date from pydantic import BaseModel -# from pydantic.v1 import BaseModel -from datetime import datetime + class Teacher_RequestModel(BaseModel): teac_name:str teac_gender:str teac_age:int teac_position:str - delete_status:int class Teacher_ResponseModel(BaseModel): code:int=200 detail:str='OK!' teac_name:str - totals:int=0 - data:str|list|tuple|dict - - - - - - - - + teac_gender:str + teac_age:int + teac_position:str