写一个学生打卡管理系统

时间: 2023-03-19 09:22:41 浏览: 178
好的,下面是一个简单的学生打卡管理系统的示例: 该系统包括以下功能: 1. 学生注册:学生可以在系统中注册一个账户,输入自己的姓名、学号、密码等信息,注册成功后可以登录系统。 2. 学生登录:学生可以使用自己的账户登录系统,输入正确的学号和密码后才能进入系统。 3. 打卡记录:学生可以在系统中进行打卡操作,包括签到、签退和请假等功能。打卡记录将被保存在系统中,可以随时查看。 4. 统计分析:系统可以对打卡记录进行统计和分析,生成相关的报表和图表。可以查看每个学生的打卡情况,以及班级整体的打卡情况。 下面是该系统的基本架构: 1. 数据库:系统需要一个数据库来保存学生信息和打卡记录等数据。可以选择 MySQL、Oracle、SQLite 等数据库软件。 2. 后台管理系统:该系统需要一个后台管理系统来管理学生信息和打卡记录等数据,以及生成相关的报表和图表。可以选择 PHP、Python、Java 等编程语言。 3. 前端界面:该系统需要一个前端界面来展示学生信息和打卡记录等数据,以及提供打卡操作和统计分析等功能。可以选择 HTML、CSS、JavaScript 等前端技术。 以上是一个简单的学生打卡管理系统的示例,实际的系统可能需要更多的功能和细节来满足实际需求。
相关问题

帮我写一个学生打卡管理系统

好的,我可以帮你设计一个简单的学生打卡管理系统。 1. 数据库设计 我们需要设计一个数据库来存储学生信息和打卡记录。以下是一个基本的数据库表设计: 学生表(student): | 字段 | 类型 | 描述 | | --------- | ------- | ------------- | | id | int | 学生ID,主键 | | name | varchar | 学生姓名 | | gender | varchar | 学生性别 | | class | varchar | 学生班级 | | password | varchar | 登录密码 | 打卡记录表(record): | 字段 | 类型 | 描述 | | --------- | ------- | -------------------- | | id | int | 打卡记录ID,主键 | | studentid | int | 学生ID,外键 | | date | date | 打卡日期 | | status | varchar | 打卡状态(正常/迟到)| 2. 功能设计 接下来,我们需要设计系统的功能和用户界面。 2.1 登录界面 学生需要输入自己的学号和密码进行登录。如果密码错误,系统会提示错误信息。 2.2 打卡界面 学生可以在打卡界面进行打卡操作。当学生点击“打卡”按钮时,系统会自动记录当前日期和打卡状态,并将记录保存到数据库中。 2.3 查询界面 学生可以在查询界面查看自己的打卡记录。系统会显示学生的姓名、班级、打卡日期和打卡状态。 3. 技术实现 我们可以使用以下技术来实现学生打卡管理系统: - 前端:HTML、CSS、JavaScript、Bootstrap - 后端:PHP、MySQL 4. 总结 以上是一个简单的学生打卡管理系统的设计和实现。当然,这只是一个基础框架,你可以根据自己的需求进行扩展和优化。

帮我用c语言写一个学生打卡管理系统

好,下面是一个简单的学生打卡管理系统的示例代码。这个系统可以用来记录学生的考勤情况,包括学生的姓名、考勤日期、考勤时间等信息。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENTS 100 #define MAX_NAME_LEN 20 #define MAX_DATE_LEN 10 #define MAX_TIME_LEN 10 struct student { char name[MAX_NAME_LEN]; char date[MAX_DATE_LEN]; char time[MAX_TIME_LEN]; }; struct student students[MAX_STUDENTS]; int num_students = 0; void add_student() { if (num_students >= MAX_STUDENTS) { printf("Error: maximum number of students reached!\n"); return; } struct student new_student; printf("Enter student name: "); scanf("%s", new_student.name); printf("Enter date (format: YYYY-MM-DD): "); scanf("%s", new_student.date); printf("Enter time (format: HH:MM:SS): "); scanf("%s", new_student.time); students[num_students++] = new_student; printf("Student added successfully!\n"); } void list_students() { if (num_students == 0) { printf("No students found!\n"); return; } printf("%-20s %-10s %-10s\n", "Name", "Date", "Time"); printf("--------------------------------------------------\n"); for (int i = 0; i < num_students; i++) { printf("%-20s %-10s %-10s\n", students[i].name, students[i].date, students[i].time); } } int main() { int choice; while (1) { printf("1. Add student\n"); printf("2. List students\n"); printf("3. Quit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: add_student(); break; case 2: list_students(); break; case 3: printf("Goodbye!\n"); exit(0); default: printf("Invalid choice!\n"); break; } printf("\n"); } return 0; } ``` 这个系统使用了一个结构体来存储每个学生的信息,包括姓名、考勤日期和考勤时间。用户可以选择添加新的学生记录或者列出已有的学生记录。在添加新的学生记录时,用户需要输入学生的姓名、考勤日期和考勤时间,系统会将这些信息存储到一个结构体中,并将这个结构体添加到学生数组中。在列出已有的学生记录时,系统会遍历学生数组并输出每个学生的姓名、考勤日期和考勤时间。

相关推荐

好的,下面是一个简单的学生打卡管理系统,包括添加学生信息、打卡、查询打卡记录等功能,共计约300行C语言代码: c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_STUDENT_NUM 100 // 最大学生数量 #define MAX_NAME_LEN 20 // 学生姓名最大长度 #define MAX_RECORD_NUM 1000 // 最大打卡记录数量 typedef struct { int id; // 学生ID char name[MAX_NAME_LEN]; // 学生姓名 } Student; typedef struct { int student_id; // 学生ID time_t time; // 打卡时间 } Record; Student students[MAX_STUDENT_NUM]; // 学生数组 int student_num = 0; // 当前学生数量 Record records[MAX_RECORD_NUM]; // 打卡记录数组 int record_num = 0; // 当前打卡记录数量 // 添加学生信息 void add_student() { if (student_num >= MAX_STUDENT_NUM) { printf("学生数量已达到上限,无法继续添加!\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[student_num].name); students[student_num].id = student_num + 1; student_num++; printf("添加成功!\n"); } // 打卡 void check_in() { int student_id; printf("请输入学生ID:"); scanf("%d", &student_id); if (student_id < 1 || student_id > student_num) { printf("无效的学生ID!\n"); return; } if (record_num >= MAX_RECORD_NUM) { printf("打卡记录已达到上限,无法继续打卡!\n"); return; } records[record_num].student_id = student_id; records[record_num].time = time(NULL); record_num++; printf("打卡成功!\n"); } // 查询打卡记录 void query_records() { int student_id; printf("请输入学生ID(输入0查询全部学生):"); scanf("%d", &student_id); printf("学生ID\t学生姓名\t打卡时间\n"); for (int i = 0; i < record_num; i++) { if (student_id == 0 || records[i].student_id == student_id) { printf("%d\t%s\t%s", records[i].student_id, students[records[i].student_id - 1].name, ctime(&records[i].time)); } } } // 主函数 int main() { int choice; while (1) { printf("\n"); printf("学生打卡管理系统\n"); printf("1. 添加学生\n"); printf("2. 打卡\n"); printf("3. 查询打卡记录\n"); printf("4. 退出\n"); printf("请输入操作选项:"); scanf("%d", &choice); switch (choice) { case 1: add_student(); break; case 2: check_in(); break; case 3: query_records(); break; case 4: return 0; default: printf("无效的操作选项!\n"); } } } 以上代码仅为简单实现,仍有改进空间。例如可以将学生信息和打卡记录存储到文件中,以便下次启动程序时恢复数据。
前端代码: javascript import React, { useState } from 'react'; import axios from 'axios'; const DailyCheckIn = () => { const [isChecked, setIsChecked] = useState(false); const handleCheckIn = async () => { try { const res = await axios.post('/api/checkin'); if (res.status === 200) { setIsChecked(true); } } catch (err) { console.error(err); } }; return ( {isChecked ? ( 今日已打卡 ) : ( <button onClick={handleCheckIn}>打卡</button> )} ); }; export default DailyCheckIn; 后端代码: javascript const express = require('express'); const router = express.Router(); const { verifyToken } = require('../middlewares/auth'); const { checkin } = require('../controllers/checkinController'); // 打卡 router.post('/checkin', verifyToken, checkin); module.exports = router; javascript const Checkin = require('../models/checkinModel'); // 打卡 exports.checkin = async (req, res) => { try { const { userId } = req.decoded; const today = new Date(); const checkin = await Checkin.findOneAndUpdate( { userId, date: today }, { isChecked: true }, { upsert: true, new: true } ); res.status(200).json(checkin); } catch (err) { console.error(err); res.status(500).send('服务器错误'); } }; javascript const mongoose = require('mongoose'); const checkinSchema = new mongoose.Schema( { userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true, }, date: { type: Date, default: Date.now, }, isChecked: { type: Boolean, default: false, }, }, { timestamps: true } ); const Checkin = mongoose.model('Checkin', checkinSchema); module.exports = Checkin; 以上代码为一个简单的实现,仅供参考。实际项目中应该根据具体需求进行修改。
Spring Boot医疗管理系统是一个基于Java技术开发的系统,它使用Spring Boot框架作为后台开发技术,并使用MySQL作为数据库。该系统主要分为患者管理模块、医生管理模块和管理员管理模块三部分。 系统的功能包括但不限于医生信息管理、科室管理、挂号预约、用户管理、就诊单管理、住院办理、药品信息管理、住院通知、药品类别管理、退费信息管理和检查信息管理等。 患者管理模块中,患者可以进行登录注册操作,并可以查看首页、公告消息、医院资讯、医生信息以及个人账户和个人中心等功能。 医生管理模块中,医生可以查看和管理医生信息,进行挂号预约、就诊单管理、住院通知和检查信息等操作。 管理员管理模块中,管理员可以进行医生信息管理、科室管理、挂号预约管理、用户管理、就诊单管理、住院办理、药品信息管理、住院通知管理、药品类别管理、退费信息管理和检查信息管理等多项任务。 该系统界面简洁明了,易于维护,能够满足医疗管理系统的主要功能需求。它通过使用Spring Boot和Java等技术,实现了高校学生健康打卡系统所需的功能模块。123 #### 引用[.reference_title] - *1* *2* *3* [SpringBoot+Vue项目医疗管理系统](https://blog.csdn.net/m0_49113107/article/details/128044896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

void welcome() { printf("**********欢迎使用管理系统*************\n"); //以不同的角色进行登录系统 printf("1.管理员身份登录\n"); printf("2.普通用户学生登录\n"); printf("3.退出\n"); printf("******************************************\n"); } //管理员的菜单界面 void mangeview() { printf("**********欢迎管理员登录********\n"); printf("-----------------1.注册学生信息------------------\n"); printf("-----------------2.输出学生信息------------------\n"); printf("-----------------3.删除学生信息------------------\n"); printf("-----------------4.修改学生信息------------------\n"); printf("-----------------5.查询学生信息------------------\n"); printf("-----------------6.学生请假和补卡------------------\n"); printf("-----------------7.排序(姓名、学号、打卡次数)--\n"); printf("-----------------8.考勤数据统计------------------\n"); printf("-----------------9.返回------o( ̄ヘ ̄o#)----\n"); //........ printf("********************************\n"); } //普通用户界面 //普通用户界面提示 void comuser(){ printf("************欢迎学生登录************\n"); printf("-----------------1.录入学生信息------------------\n"); printf("-----------------2.输出学生信息------------------\n"); printf("-----------------3.查询学生信息------------------\n"); printf("-----------------4.排序(姓名、学号、打卡次数)--\n"); printf("-----------------5.学生请假和补卡------------------\n"); printf("-----------------6.返回------o( ̄ヘ ̄o#)----\n"); printf("********************************************\n"); } 这个代码怎么描述,运用了什么函数

### 回答1: 智慧校园安全保障系统是一种基于现代信息技术,针对学校安全管理问题而设计的智能化系统。随着教育信息化的不断发展,学校的管理工作也越来越复杂,包括学生的安全管理、教职工的管理、设备的监控等。因此,智慧校园安全保障系统的出现,可以有效地解决这些问题。 已有的现状:目前,许多学校都已经开始采用智慧校园安全保障系统,以提高学校的安全管理水平。这些系统包括视频监控系统、门禁管理系统、考勤管理系统等。这些系统可以实现对学生、教职工、设备等的全面监控和管理,确保学校的安全。 技术:智慧校园安全保障系统采用了现代信息技术,如视频监控技术、人脸识别技术、RFID技术等。这些技术可以实现对学校内部各个区域的全面监控,对学生、教职工等进行身份识别和管理。 原理:智慧校园安全保障系统的原理是通过各种传感器、监控设备等收集学校内部各个区域的数据信息,并将其进行处理和分析。系统可以根据设定的规则进行报警和预警,及时发现学校内部的安全问题并进行处理。 性质:智慧校园安全保障系统具有智能化、自动化、实时化等特点。通过系统的数据分析和处理,可以实现对学校内部的安全管理工作进行优化,提高学校的安全性和管理效率。 ### 回答2: 智慧校园安全保障系统是为了提高校园安全管理效能而设计的一种系统。现代社会中,校园安全问题越来越受人们的关注,传统的校园安全管理方式已不能满足需求,因此需要引入智能化技术来提升校园安全管理水平。 目前,大部分学校的校园安全保障系统还存在一些问题,比如安全监控设备的局限性,如摄像头的分辨率较低、监控角度盲区多等;传统的考勤系统容易存在学生代签、打卡卡不准确等问题;应急管理和反恐系统的连通性和反应速度有待提高等。这些问题给校园安全带来了威胁。 智慧校园安全保障系统的设计采用了一系列现代化的技术,例如高清摄像头、人脸识别技术、智能考勤机、无线通信等。这些技术能够提高安全监控的准确性和效果。同时,智慧校园安全保障系统还采用了智能化的警报和应急管理系统,能够快速反应并有效处理紧急事件。 该系统的工作原理是通过摄像头对校园各个角落进行监控,通过人脸识别技术判断是否有异常人员进入校园。同时,智能考勤机配合学生的学生卡进行有效的考勤,避免了代替或者漏签的情况。警报和应急管理系统通过无线通信将监测画面和警报信息传输给相关部门,使其能够快速做出反应和处理。 智慧校园安全保障系统的性质是综合性、智能化和实时性。它综合了多种技术手段,能够全方位地监控校园内的安全情况。系统具有智能化功能,能够自动判断是否有异常情况,提高了校园安全管理的效率。同时,系统能够实时地获取校园内的安全信息并做出相应的快速反应,保障学生和教职工的人身安全。
基于百度AI的人脸识别考勤系统是一个通过使用百度开放平台中的人脸检测和人脸识别技术,结合Python图形界面开发(PyQt5)和线程管理等技术,实现学生人脸识别签到的系统。该系统可以通过摄像头实时检测学生的人脸,并将其与事先录入的学生人脸信息进行比对,从而实现学生的考勤功能。 该系统的主要功能包括: 1. 系统主界面:提供系统的整体操作界面。 2. 学生人脸检测及学生人脸识别信息展示:通过百度AI的人脸检测和人脸识别技术,实时检测学生的人脸并展示相关信息。 3. 班级的增加、删除、查询:提供对班级信息的管理功能,包括增加、删除和查询班级信息。 4. 学生信息的增加、删除、查找:提供对学生信息的管理功能,包括增加、删除和查找学生信息。 5. 学生签到信息导出:将学生的签到信息导出为文件,方便后续的数据分析和管理。 通过学习该专栏,你可以了解如何使用百度AI智能云的人脸检测和人脸识别技术,以及如何通过Python图形界面开发(PyQt5)实现相关功能。同时,你还可以学习到如何从零开始搭建一个完整的项目框架,并逐步实现功能需求。 希望以上信息对你有所帮助!如果你对人脸识别和Python图形界面开发感兴趣,可以订阅该专栏获取更多相关知识。 #### 引用[.reference_title] - *1* *2* *3* [百度AI人脸识别与检测十:学生人脸识别打卡签到系统之如何查看学生签到信息?](https://blog.csdn.net/qq_42451251/article/details/118614654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
### 回答1: 中控zktime8.5考勤软件是一款专业的考勤管理软件,能够帮助企业高效地管理员工的出勤情况。该软件具有以下几个特点: 首先,中控zktime8.5考勤软件具有强大的数据管理能力。用户可以通过该软件对员工的考勤数据进行集中管理,包括考勤记录、迟到早退等异常情况的统计以及节假日的安排等。软件提供了直观的统计图表和报表,方便企业管理层对员工考勤情况进行分析和评估。 其次,中控zktime8.5考勤软件支持多种考勤方式。不论是刷卡、指纹、密码等考勤方式,都能够与软件进行无缝对接,实现自动化的考勤管理。这种灵活的考勤方式能够满足不同企业的需求,提高了考勤的准确性和效率。 另外,中控zktime8.5考勤软件拥有友好的界面设计和简便的操作流程。即使是对于没有专业技术背景的人员也能够轻松上手。软件还提供了多语言版本,方便了海外企业的使用。 此外,中控zktime8.5考勤软件还具有多种扩展功能。比如,可以与员工工资系统进行对接,实现考勤与工资的自动关联。同时,软件还支持移动端的访问,方便员工随时查看自己的考勤情况和请假申请等。 综上所述,中控zktime8.5考勤软件是一款功能强大、操作简便、扩展性强的考勤管理软件。它能够帮助企业提高考勤管理的准确性和效率,简化人力资源管理流程,提升企业的整体运行效率。 ### 回答2: 中控zktime8.5考勤软件是一款专门用于企业考勤管理的软件。它的使用方便,功能强大,为企业提供了一站式的考勤解决方案。 首先,中控zktime8.5考勤软件具有多种考勤方式,可以根据企业实际需求选择合适的考勤方法,如刷卡、指纹、人脸识别等。这样可以满足不同企业的不同要求,提高考勤的准确性和便捷性。 其次,该软件具有自动化的考勤管理功能。它能够自动统计员工的出勤情况、工作时间等信息,并生成详细的考勤报表。这样,企业管理者可以方便地查看员工的考勤情况,及时发现考勤异常,并进行相应处理。 此外,中控zktime8.5考勤软件还支持多种考勤规则的设定。企业可根据自身的考勤规定和政策,灵活设定迟到、早退、加班等各种规则,并进行自动计算和统计。这样可以减少人工处理考勤数据的时间和工作量,提高工作效率。 另外,中控zktime8.5考勤软件还具备数据安全性和可靠性。它采用了先进的数据加密技术,保护企业的考勤数据不被泄露和篡改。此外,软件还支持数据备份和恢复功能,能够有效预防数据丢失和损坏。 总之,中控zktime8.5考勤软件是一款方便、强大的考勤管理工具,能够帮助企业提高考勤效率、准确性和安全性。它是企业进行现代化考勤管理的理想选择。 ### 回答3: 中控zktime8.5考勤软件是一款功能强大的考勤管理工具。该软件主要用于企业、学校等组织机构对员工或学生的考勤管理。以下是该软件的主要特点和功能。 首先,中控zktime8.5考勤软件具有灵活的考勤设置功能。用户可以根据实际情况设置打卡规则,包括上班打卡、下班打卡、加班打卡等。软件中还提供了多种打卡方式,包括刷卡、指纹识别、人脸识别等,以满足不同场景的需求。 其次,该软件具有全面的考勤统计和分析功能。用户可以通过软件生成各类考勤报表,包括考勤汇总表、迟到早退报表、加班统计报表等。这些报表可以帮助用户了解员工的考勤情况,及时发现并解决问题。 另外,中控zktime8.5考勤软件还具有强大的权限管理功能。管理员可以根据员工的工作职责进行权限分配,确保每个人只能操作自己相关的数据。同时,软件还可以设定权限审核流程,保证审批流程的合规性。 最后,该软件还具有便捷的数据导入导出功能。用户可以将考勤数据导出为Excel、PDF等格式,方便与其他管理软件进行数据交互。同时,软件也支持从其他系统导入员工信息,实现数据的快速迁移。 总之,中控zktime8.5考勤软件是一款功能强大、操作简便的考勤管理工具。它不仅能够帮助企业、学校等组织机构高效管理考勤,还能提升管理效率,节省人力成本。

最新推荐

BundleDemo本地和远程

BundleDemo本地和远程

MySQL安全加固.pdf

这个文档里面包含MySQL的基本操和MySQL安全加固两个方面。 基础部分包括: 1.数据库管理 2.数据库结构管理 3.增删改查 4.grant命令 5.用户权限 加固部分包括: 1.删除默认的数据库用户和数据库 2.不适用默认的密码和弱口令 3.改变默认的mysql管理账号 4.独立用户运行MySQL 5.禁止远程连接数据库等 ... 等等很多安全的加固项 是值得正在学习或者上班的同学参考的一份数据库加固资料

相机旋转控制的demo文件

类似于荒野乱斗一样的相机控制工程

setup_wm.exe.mui

setup_wm.exe

reverseStr.c 字符串逆序 翻转 C语言实现

字符串逆序 reverseStr.c 字符串逆序 翻转 C语言实现

市建设规划局gis基础地理信息系统可行性研究报告.doc

市建设规划局gis基础地理信息系统可行性研究报告.doc

"REGISTOR:SSD内部非结构化数据处理平台"

REGISTOR:SSD存储裴舒怡,杨静,杨青,罗德岛大学,深圳市大普微电子有限公司。公司本文介绍了一个用于在存储器内部进行规则表达的平台REGISTOR。Registor的主要思想是在存储大型数据集的存储中加速正则表达式(regex)搜索,消除I/O瓶颈问题。在闪存SSD内部设计并增强了一个用于regex搜索的特殊硬件引擎,该引擎在从NAND闪存到主机的数据传输期间动态处理数据为了使regex搜索的速度与现代SSD的内部总线速度相匹配,在Registor硬件中设计了一种深度流水线结构,该结构由文件语义提取器、匹配候选查找器、regex匹配单元(REMU)和结果组织器组成。此外,流水线的每个阶段使得可能使用最大等位性。为了使Registor易于被高级应用程序使用,我们在Linux中开发了一组API和库,允许Registor通过有效地将单独的数据块重组为文件来处理SSD中的文件Registor的工作原

要将Preference控件设置为不可用并变灰java完整代码

以下是将Preference控件设置为不可用并变灰的Java完整代码示例: ```java Preference preference = findPreference("preference_key"); // 获取Preference对象 preference.setEnabled(false); // 设置为不可用 preference.setSelectable(false); // 设置为不可选 preference.setSummary("已禁用"); // 设置摘要信息,提示用户该选项已被禁用 preference.setIcon(R.drawable.disabled_ico

基于改进蚁群算法的离散制造车间物料配送路径优化.pptx

基于改进蚁群算法的离散制造车间物料配送路径优化.pptx

海量3D模型的自适应传输

为了获得的目的图卢兹大学博士学位发布人:图卢兹国立理工学院(图卢兹INP)学科或专业:计算机与电信提交人和支持人:M. 托马斯·福吉奥尼2019年11月29日星期五标题:海量3D模型的自适应传输博士学校:图卢兹数学、计算机科学、电信(MITT)研究单位:图卢兹计算机科学研究所(IRIT)论文主任:M. 文森特·查维拉特M.阿克塞尔·卡里尔报告员:M. GWendal Simon,大西洋IMTSIDONIE CHRISTOPHE女士,国家地理研究所评审团成员:M. MAARTEN WIJNANTS,哈塞尔大学,校长M. AXEL CARLIER,图卢兹INP,成员M. GILLES GESQUIERE,里昂第二大学,成员Géraldine Morin女士,图卢兹INP,成员M. VINCENT CHARVILLAT,图卢兹INP,成员M. Wei Tsang Ooi,新加坡国立大学,研究员基于HTTP的动态自适应3D流媒体2019年11月29日星期五,图卢兹INP授予图卢兹大学博士学位,由ThomasForgione发表并答辩Gilles Gesquière�