愛碼單車隊——專案原型設計+概要設計

哎哎呦呦喂喂0211發表於2024-10-30
作業所屬課程 班級連結
作業要求 作業要求連結
作業的目標 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

相關文章