From f6aa6681395462dc1a6e1f32c3dcf7b969fb4f38 Mon Sep 17 00:00:00 2001 From: Orangeeee Date: Tue, 22 Sep 2026 16:38:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EStatCalc=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=EF=BC=8C=E7=BB=9F=E8=AE=A1=E5=88=86=E6=9E=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E5=88=9D=E6=AD=A5=E6=A1=86=E6=9E=B6=E6=90=AD?= =?UTF-8?q?=E5=BB=BA=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StatCalc/api/__init__.py | 0 StatCalc/api/statcalc_api.py | 116 ++++++++++++++++++++++++++++ StatCalc/dao/__init__.py | 0 StatCalc/dao/statcalc_dao.py | 6 ++ StatCalc/main.py | 8 ++ StatCalc/model/__init__.py | 0 StatCalc/model/statcalc_model.py | 0 StatCalc/schema/__init__.py | 0 StatCalc/schema/statcalc_request.py | 9 +++ main.py | 11 +-- stu_jiuye/model.py | 2 +- 11 files changed, 146 insertions(+), 6 deletions(-) create mode 100644 StatCalc/api/__init__.py create mode 100644 StatCalc/api/statcalc_api.py create mode 100644 StatCalc/dao/__init__.py create mode 100644 StatCalc/dao/statcalc_dao.py create mode 100644 StatCalc/main.py create mode 100644 StatCalc/model/__init__.py create mode 100644 StatCalc/model/statcalc_model.py create mode 100644 StatCalc/schema/__init__.py create mode 100644 StatCalc/schema/statcalc_request.py diff --git a/StatCalc/api/__init__.py b/StatCalc/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/StatCalc/api/statcalc_api.py b/StatCalc/api/statcalc_api.py new file mode 100644 index 0000000..343e519 --- /dev/null +++ b/StatCalc/api/statcalc_api.py @@ -0,0 +1,116 @@ +# statcalc_api所有统计分析模块的api路由、接口 + +from fastapi import APIRouter , Depends , HTTPException +from StatCalc.dao.statcalc_dao import * +from StatCalc.model.statcalc_model import * +from StatCalc.schema.statcalc_request import * +from databases import * + +statcalc_api = APIRouter() + +@statcalc_api.get("/statcalc" + ,summary='人员信息查询' + ,description=f'查询所有超过30岁的学员的信息。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='人数统计' + ,description=f'统计每个班级的人数以及男生女生的人数。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='80分以上成绩学生信息查询' + ,description=f'查询每次考试成绩都在80分以上的学生的编号,姓名和成绩。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='不及格成绩查询' + ,description=f'查询有两次以上不及格的学生的姓名,班级和不及格成绩。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='班级平均分查询' + ,description=f'统计每次考试每个班级的平均分,按照从高到低排序。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='排名前五的学生信息' + ,description=f'统计就业薪资最高的前五名学生的姓名,班级和就业时间,就业公司。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='就业时长统计' + ,description=f'统计每个学生的就业时长(offer下发时间-就业开放时间)。' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + +@statcalc_api.get("/statcalc" + ,summary='班级的平均就业时长' + ,description=f'统计每个班级的平均就业时长(只统计进入就业阶段的学生,也就是有就业开放时间)' + ) +def get_students( stu:StudentsQuery = Depends() + , db=Depends(get_db) + ): + s_dict = stu.model_dump(exclude_unset=True) # 没值的不要 + result = get_student_dao( s=s_dict , db=db ) + if result: + return result + raise HTTPException(status_code=404, detail="没有找到符合条件的学生") + + + diff --git a/StatCalc/dao/__init__.py b/StatCalc/dao/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/StatCalc/dao/statcalc_dao.py b/StatCalc/dao/statcalc_dao.py new file mode 100644 index 0000000..928c60b --- /dev/null +++ b/StatCalc/dao/statcalc_dao.py @@ -0,0 +1,6 @@ +# from StatCalc.model.statcalc_model import +from StatCalc.schema.statcalc_request import * +from fastapi import HTTPException + + + diff --git a/StatCalc/main.py b/StatCalc/main.py new file mode 100644 index 0000000..f47a322 --- /dev/null +++ b/StatCalc/main.py @@ -0,0 +1,8 @@ +from fastapi import FastAPI,APIRouter +from StatCalc.api.statcalc_api import statcalc_api +from databases import * +from StatCalc.model import statcalc_model +from contextlib import asynccontextmanager + +StatCalc_API = APIRouter() +StatCalc_API.include_router(statcalc_api) diff --git a/StatCalc/model/__init__.py b/StatCalc/model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/StatCalc/model/statcalc_model.py b/StatCalc/model/statcalc_model.py new file mode 100644 index 0000000..e69de29 diff --git a/StatCalc/schema/__init__.py b/StatCalc/schema/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/StatCalc/schema/statcalc_request.py b/StatCalc/schema/statcalc_request.py new file mode 100644 index 0000000..660ffde --- /dev/null +++ b/StatCalc/schema/statcalc_request.py @@ -0,0 +1,9 @@ +# students_schema:请求、响应的模型框架 + +from pydantic import BaseModel , Field , field_validator +from datetime import datetime +import enum + + + + diff --git a/main.py b/main.py index af45b3c..c0906d6 100644 --- a/main.py +++ b/main.py @@ -4,24 +4,25 @@ from scores.main import Scores_API from stu_jiuye.main import Shtudent_Jiuye from students.main import Students_API from Teachers.main import Teachers_API +from StatCalc.main import StatCalc_API from databases import * app = FastAPI(title="学生管理系统") Base_all.metadata.create_all(bind=engine_all) + app.include_router(Classes_API,tags=["classes"]) app.include_router(Scores_API,tags=["scores"]) app.include_router(Shtudent_Jiuye,tags=["Employments"]) app.include_router(Students_API,tags=["students"]) app.include_router(Teachers_API,tags=["teachers"]) - - - -def main(): - print("Hello from student-manage-system!") +app.include_router(StatCalc_API,tags=["StatCalc"]) if __name__ == "__main__": + def main(): + print("Hello from student-manage-system!") + import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=59000) """ diff --git a/stu_jiuye/model.py b/stu_jiuye/model.py index 213a344..e370360 100644 --- a/stu_jiuye/model.py +++ b/stu_jiuye/model.py @@ -36,7 +36,7 @@ class Employments(Base_all): #学生 id = Column(Integer #主键,自增主键 , primary_key=True , autoincrement=True - # , ForeignKey='student.id' + # , ForeignKey('student.id') , comment='自增主键' ) sname = Column(String(50)) #学生姓名,冗余字段