爱码单车队——项目原型设计+概要设计

作业所属课程 班级链接
作业要求 作业要求链接
作业的目标 Speak with AI的原型设计+概要设计
团队名称 爱码单车队
成员1 102201542--曾庆徽
成员2 102201211--池家益
成员3 102201302--毛震
成员4 102201420--林传昊
成员5 102201425--郑礼鑫
成员6 102201538--黄志梁
成员7 102201630--岳俊杰
成员8 102201227--陈铭扬
成员9 102201239--翁林靖
成员10 102201257--王党兵

一.原型设计

这是我们的原型链接:https://j58t0t.axshare.com/?id=z3hodb&p=登录界面&sc=3&g=1
原型真机演示动画:

特色说明(这里的图片参考我们的原型设计加概要设计的pdf):



1.核心功能介绍:
场景模拟对话:用户可以选择不同的日常生活场景进行模拟对话,以提高实际对话能力。
自然语言对话生成:通过集成AI,生成自然语言对话,提供语音互动功能。
发音纠正:利用调用语音识别技术,系统分析用户发音的准确性,并提供改进建议。
值得注意的是我们开发了语种选择功能,以便后续拓展到不同语种,初始时是英语(ENGLISH)。
2.主界面:
顶部显示当前语种
左上角为“个人”图标,点击可进入个人中心页面--(中心界面里可以看到历史对话记录,可以做到快速复盘),
中间区域为对话窗口,显示AI和用户的对话历史,
底部为输入区域,包含麦克风图标和“按住说话”提示。
用户通过按住麦克风图标说话,AI响应后以文字形式显示在对话窗口。
下方“示例回答”“场景选择”“翻译”和“设置”选项分别对应其功能,其中“场景选择”可以切换对话场景,“设置”可以切换对话难。
3.总结:
可以看到我们的原型里的界面设计主要就是简化操作流程,保持用户界面简洁友好。
同时还支持快速切换不同学习场景和翻译,示例回答等功能,方便用户操作,快速上手练习。

二.概要设计



这部分内容主要围绕图片来展示,分为两部分UML设计和数据库设计:

UML设计:

用例图:

活动图:

时序图:

类图:

协作图:

数据库设计:

E-R图:

关系数据模型:





对象关系映射:

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;

// User 表
@Entity
@Table(name = "User")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int userId;
    
    private String username;
    private String profession;
    private String voice;
    private String speechSpeed;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private UserLogin userLogin;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<LearningRecord> learningRecords;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<UserEnglishScore> englishScores;

    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
    private Settings settings;

    // Getters and Setters
}

// UserLogin 表
@Entity
@Table(name = "UserLogin")
public class UserLogin {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int loginId;
    
    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    private String password;
    private Timestamp lastLogin;

    // Getters and Setters
}

// UserEnglishScore 表
@Entity
@Table(name = "UserEnglishScore")
public class UserEnglishScore {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int scoreId;
    
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    private String scoreType;
    private int score;
    private Date examDate;

    // Getters and Setters
}

// LearningRecord 表
@Entity
@Table(name = "LearningRecord")
public class LearningRecord {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int recordId;
    
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    private String studyContent;
    private String studyFeedback;
    private int studyTimes;

    @OneToMany(mappedBy = "learningRecord", cascade = CascadeType.ALL)
    private List<Dialogue> dialogues;

    @OneToMany(mappedBy = "learningRecord", cascade = CascadeType.ALL)
    private List<AudioRecord> audioRecords;

    // Getters and Setters
}

// Scene 表
@Entity
@Table(name = "Scene")
public class Scene {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int sceneId;
    
    private String sceneTopic;
    private String sceneDescription;

    @OneToMany(mappedBy = "scene", cascade = CascadeType.ALL)
    private List<Dialogue> dialogues;

    // Getters and Setters
}

// Dialogue 表
@Entity
@Table(name = "Dialogue")
public class Dialogue {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int dialogueId;
    
    @ManyToOne
    @JoinColumn(name = "record_id")
    private LearningRecord learningRecord;

    @ManyToOne
    @JoinColumn(name = "scene_id")
    private Scene scene;
    
    private String dialogueContent;
    private int score;

    @OneToOne(mappedBy = "dialogue", cascade = CascadeType.ALL)
    private ScoreDetail scoreDetail;

    // Getters and Setters
}

// AudioRecord 表
@Entity
@Table(name = "AudioRecord")
public class AudioRecord {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int audioId;
    
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    @ManyToOne
    @JoinColumn(name = "record_id")
    private LearningRecord learningRecord;
    
    private String audioPath;
    private Timestamp uploadTime;

    @OneToOne(mappedBy = "audioRecord", cascade = CascadeType.ALL)
    private Transcription transcription;

    // Getters and Setters
}

// Transcription 表
@Entity
@Table(name = "Transcription")
public class Transcription {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int transcriptionId;
    
    @OneToOne
    @JoinColumn(name = "audio_id")
    private AudioRecord audioRecord;
    
    private String transcribedText;
    private Timestamp transcriptionTime;

    // Getters and Setters
}

// ScoreDetail 表
@Entity
@Table(name = "ScoreDetail")
public class ScoreDetail {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int scoreId;
    
    @OneToOne
    @JoinColumn(name = "dialogue_id")
    private Dialogue dialogue;
    
    private int pronunciationScore;
    private int grammarScore;
    private int fluencyScore;
    private int overallScore;
    private String feedback;

    @OneToMany(mappedBy = "scoreDetail", cascade = CascadeType.ALL)
    private List<Feedback> feedbacks;

    // Getters and Setters
}

// Feedback 表
@Entity
@Table(name = "Feedback")
public class Feedback {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int feedbackId;
    
    @ManyToOne
    @JoinColumn(name = "score_id")
    private ScoreDetail scoreDetail;
    
    private String suggestion;
    private String improvementArea;

    // Getters and Setters
}

// Settings 表
@Entity
@Table(name = "Settings")
public class Settings {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int settingsId;
    
    @OneToOne
    @JoinColumn(name = "user_id")
    private User user;
    
    private String transcriptionLanguage;
    private String scoringStandard;
    private boolean notificationPreference;

    // Getters and Setters
}

三.团队协作记录

预计计划安排表:

周次 日期范围 里程碑 产出
第1周 11月2日 - 11月8日 后端开发初步完成 完成API接口文档,完成基础功能开发
第2周 11月9日 - 11月15日 前端开发初步完成 完成前端页面开发,进行初步集成测试
第3周 11月16日 - 11月22日 完成系统集成 提交集成测试报告,完成系统功能演示
第4周 11月23日 - 11月29日 代码审查与优化,用户测试与反馈 完成代码审查,进行性能优化,收集用户反馈,修复bug,完善功能

预计开发计划分工:

姓名 角色 负责的开发部分
曾庆徽 组长 项目整体规划与管理,进度跟踪与沟通
岳俊杰,池家益 前端开发人员 前端界面设计与开发,用户交互功能实现
郑礼鑫,黄志梁 后端开发人员 API设计与实现,数据库管理与接口集成
毛震 陈铭扬 测试人员 测试计划制定,功能测试与bug反馈
翁林靖 文档编写人员 项目文档撰写,需求文档与用户手册编写
林传昊 UI/UX设计师 用户界面设计,用户体验优化
王党兵 数据分析员 数据收集与分析,用户反馈汇总与改进建议

团队协作记录:



项目管理平台:
GitHubDesktop

团队协作记录:

四.仓库连接以及下载链接:

github团队仓库链接:https://github.com/zqh666nb/home
爱码单车队_系统设计说明书.pdf:链接: https://pan.baidu.com/s/12UcIY0JMM8qMuRfVsh4MpA?pwd=1234 提取码: 1234
爱码单车队_数据库设计说明书.pdf:链接: https://pan.baidu.com/s/1MFtuVeA3aXwvwj8e06MByg?pwd=1234 提取码: 1234
爱码单车队_原型设计+概要设计答辩PPT.pdf:链接: https://pan.baidu.com/s/1d6F2WHHuza-jBAupIC5PDg?pwd=1234 提取码: 1234

posted @ 2024-10-30 19:05  哎哎呦呦喂喂0211  阅读(163)  评论(0编辑  收藏  举报