158
社区成员




这个作业属于哪个课程 | 2301-计算机学院-软件工程 |
---|---|
这个作业要求在哪里 | 团队作业——站立式会议+alpha冲刺 |
这个作业的目标 | Alpha冲刺Day1随笔 |
团队名称 | 代码写的都队 |
团队项目 | 闲置宝 |
团队随笔置顶集合 | 代码写的都队——Alpha 冲刺随笔置顶 |
昨天站立式会议到现在的进展
完成项目仓库、框架的搭建,安排项目进度和分配任务
存在的问题/遇到的困难
暂无
今天到明天会议的安排
Push组员完成工作任务
心得体会
第一次带团队编程,感觉还是有很多东西要学的,希望之后能带大家又快又好地做完这个项目。
昨天站立式会议到现在的进展(附代码图/页面图):
完成搜索页:
首次使用uni-app有些许不熟练,花了较长时间熟悉使用组件,历史记录的布局也较难调整。
完善搜索页,开始做商品分布页面。
体验使用了uni-app里的搜索栏组件和ui组件,参考了uni-app模板,使用起来较便捷。
完成了注册界面的设计
第一次使用uni-app还不是很熟练,配置各种组件花了一定时间,样式调整了比较久。
完善注册界面,把Element UI组件换成Uni UI组件,开始做商品详情界面,进一步学习相关知识。
使用Element UI组件很便利,效率提高很多。
完成了7张基本表(用户表Users、商品信息表Goods、交易表Trades、评价记录表Evaluations、消息表Messages、收藏Favorites、搜索历史Historys)的建立和插入新元组时的对数据合法性的检查
CREATE TABLE Users (
User_ID INT NOT NULL AUTO_INCREMENT,
User_Name VARCHAR(10) NOT NULL UNIQUE,
User_Key VARCHAR(18) NOT NULL,
FZU_Key CHAR(9) DEFAULT NULL UNIQUE,
Head_Portrait VARCHAR(255),
Delivery_Address VARCHAR(255),
PRIMARY KEY (User_ID)
);
-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER Users_insert_trigger
BEFORE INSERT ON Users
FOR EACH ROW
BEGIN
DECLARE Users_In_Table INT;
-- 检查表中是否已有元组
SELECT COUNT(*) INTO Users_In_Table FROM Users;
-- 如果表为空,将User_ID设为100000001
IF Users_In_Table = 0 THEN
SET NEW.User_ID = 100000001;
END IF;
-- 检查User_Name长度是否符合要求
IF LENGTH(NEW.User_Name) < 2 OR LENGTH(NEW.User_Name) > 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'User_Name长度不符合要求';
END IF;
-- 检查User_Name是否已存在
IF EXISTS (SELECT 1 FROM Users WHERE User_Name = NEW.User_Name) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'User_Name已存在';
END IF;
-- 检查User_Key长度是否符合要求
IF LENGTH(NEW.User_Key) < 6 OR LENGTH(NEW.User_Key) > 18 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'User_Key长度不符合要求';
END IF;
-- 检查FZU_Key是否为9个数字字符
IF LENGTH(NEW.FZU_Key) <> 9 OR NEW.FZU_Key REGEXP '[^0-9]' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'FZU_Key格式不正确';
END IF;
-- 检查FZU_Key是否已存在
IF EXISTS (SELECT 1 FROM Users WHERE FZU_Key = NEW.FZU_Key) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'FZU_Key已存在';
END IF;
END//
DELIMITER ;
CREATE TABLE Goods (
Goods_ID INT NOT NULL AUTO_INCREMENT,
Goods_Name VARCHAR(20) NOT NULL,
Seller_ID INT NOT NULL,
Goods_Price DECIMAL(10, 2) NOT NULL,
Goods_Description VARCHAR(100) NOT NULL,
Classification ENUM('文娱用品', '学习用品', '生活用品', '交通工具', '奇奇怪怪') NOT NULL,
Release_Time DATETIME,
Goods_Pictures VARCHAR(255),
PRIMARY KEY (Goods_ID),
FOREIGN KEY (Seller_ID) REFERENCES Users(User_ID)
);
-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER Goods_insert_trigger
BEFORE INSERT ON Goods
FOR EACH ROW
BEGIN
DECLARE Goods_In_Table INT;
-- 检查表中是否已有商品
SELECT COUNT(*) INTO Goods_In_Table FROM Goods;
-- 如果表为空,将Goods_ID设为1000000001
IF Goods_In_Table = 0 THEN
SET NEW.Goods_ID = 1000000001;
END IF;
-- 检查Goods_Name长度是否符合要求
IF LENGTH(NEW.Goods_Name) < 2 OR LENGTH(NEW.Goods_Name) > 20 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Goods_Name长度不符合要求';
END IF;
-- 检查Seller_ID是否在Users中存在
IF NOT EXISTS (SELECT 1 FROM Users WHERE User_ID = NEW.Seller_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Seller_ID在Users中不存在';
END IF;
-- 检查Goods_Price是否为数字且非负数
IF NEW.Goods_Price < 0 OR NEW.Goods_Price IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Goods_Price必须为非负数';
END IF;
-- 检查Goods_Description长度是否符合要求
IF LENGTH(NEW.Goods_Description) < 2 OR LENGTH(NEW.Goods_Description) > 100 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Goods_Description长度不符合要求';
END IF;
-- 检查Classification是否符合要求
IF NEW.Classification NOT IN ('文娱用品', '学习用品', '生活用品', '交通工具', '奇奇怪怪') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Classification不符合要求';
END IF;
-- 设置Release_Time为当前时间
SET NEW.Release_Time = NOW();
END//
DELIMITER ;
-- 创建交易记录表
CREATE TABLE Trades (
Trade_ID INT NOT NULL AUTO_INCREMENT,
Buyer_ID INT NOT NULL,
Seller_ID INT NOT NULL,
Trade_Time DATETIME NOT NULL,
Paid_Amount DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (Trade_ID),
FOREIGN KEY (Buyer_ID) REFERENCES Users (User_ID),
FOREIGN KEY (Seller_ID) REFERENCES Users (User_ID)
);
-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER Trades_insert_trigger
BEFORE INSERT ON Trades
FOR EACH ROW
BEGIN
DECLARE 交易数 INT;
-- 检查表中是否已有交易记录
SELECT COUNT(*) INTO 交易数 FROM Trades;
-- 如果表为空,将Trade_ID设为1000000001
IF 交易数 = 0 THEN
SET NEW.Trade_ID = 1000000001;
END IF;
-- 检查买家ID和卖家ID是否存在以及是否相同
IF NOT EXISTS (SELECT 1 FROM Users WHERE User_ID = NEW.Buyer_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '买家ID在Users中不存在';
END IF;
IF NOT EXISTS (SELECT 1 FROM Users WHERE User_ID = NEW.Seller_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '卖家ID在Users中不存在';
END IF;
IF NEW.Buyer_ID = NEW.Seller_ID THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '买家ID和卖家ID不能相同';
END IF;
-- 检查Paid_Amount是否为数字且非负数
IF NEW.Paid_Amount < 0 OR NEW.Paid_Amount IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Paid_Amount必须为非负数';
END IF;
-- 设置交易时间为当前时间
SET NEW.Trade_Time = NOW();
END//
DELIMITER ;
-- 创建评价记录表
CREATE TABLE Evaluations (
Trade_ID INT NOT NULL,
Buyer_Evaluation VARCHAR(200),
Seller_Evaluation VARCHAR(200),
PRIMARY KEY (Trade_ID),
FOREIGN KEY (Trade_ID) REFERENCES Trades (Trade_ID)
);
-- 创建消息记录表
CREATE TABLE Messages (
Message_ID INT NOT NULL AUTO_INCREMENT,
Sender_ID INT NOT NULL,
Receiver_ID INT NOT NULL,
Message_Content VARCHAR(200) NOT NULL,
Time DATETIME NOT NULL,
Read BOOLEAN DEFAULT FALSE,
PRIMARY KEY (Message_ID),
FOREIGN KEY (Sender_ID) REFERENCES Users (User_ID),
FOREIGN KEY (Receiver_ID) REFERENCES Users (User_ID)
);
-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER Messages_insert_trigger
BEFORE INSERT ON Messages
FOR EACH ROW
BEGIN
DECLARE 消息数 INT;
-- 检查表中是否已有消息记录
SELECT COUNT(*) INTO 消息数 FROM Messages;
-- 如果表为空,将Message_ID设为1000000001
IF 消息数 = 0 THEN
SET NEW.Message_ID = 1000000001;
END IF;
-- 检查Sender_ID是否存在于Users中
IF NOT EXISTS (SELECT 1 FROM Users WHERE User_ID = NEW.Sender_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Sender_ID在Users中不存在';
END IF;
-- 检查Receiver_ID是否存在于Users中
IF NOT EXISTS (SELECT 1 FROM Users WHERE User_ID = NEW.Receiver_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Receiver_ID在Users中不存在';
END IF;
-- 检查Message_Content是否超过200个字符
IF LENGTH(NEW.Message_Content) > 200 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Message_Content超过200个字符';
END IF;
-- 设置发送时间为当前时间
SET NEW.Time = NOW();
END//
DELIMITER ;
-- 创建收藏信息表
CREATE TABLE Favorites (
Favorite_ID INT NOT NULL AUTO_INCREMENT,
User_ID INT NOT NULL,
Good_ID INT NOT NULL,
Insert_Time DATETIME NOT NULL,
PRIMARY KEY (Favorite_ID),
FOREIGN KEY (User_ID) REFERENCES Users (User_ID),
FOREIGN KEY (Good_ID) REFERENCES Goods (Goods_ID)
);
-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER Favorites_insert_trigger
BEFORE INSERT ON Favorites
FOR EACH ROW
BEGIN
DECLARE Favorite_Amount INT;
-- 检查表中是否已有收藏记录
SELECT COUNT(*) INTO Favorite_Amount FROM Favorites;
-- 如果表为空,将Favorite_ID设为1000000001
IF Favorite_Amount = 0 THEN
SET NEW.Favorite_ID = 1000000001;
END IF;
-- 检查User_ID是否存在于Users中
IF NOT EXISTS (SELECT 1 FROM Users WHERE User_ID = NEW.User_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'User_ID在Users中不存在';
END IF;
-- 检查Good_ID是否存在于Goods中
IF NOT EXISTS (SELECT 1 FROM Goods WHERE Goods_ID = NEW.Good_ID) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Good_ID在Goods中不存在';
END IF;
-- 设置插入时间为当前时间
SET NEW.Insert_Time = NOW();
END//
DELIMITER ;
-- 创建搜索记录表
CREATE TABLE Historys (
Search_ID INT NOT NULL AUTO_INCREMENT,
User_ID INT NOT NULL,
Keyword VARCHAR(10) NOT NULL,
PRIMARY KEY (Search_ID),
FOREIGN KEY (User_ID) REFERENCES Users (User_ID)
);
-- 创建BEFORE INSERT触发器
DELIMITER //
CREATE TRIGGER Historys_insert_trigger
BEFORE INSERT ON Historys
FOR EACH ROW
BEGIN
DECLARE Favorite_Amount INT;
DECLARE User_Search_History INT;
-- 检查表中是否已有收藏记录
SELECT COUNT(*) INTO Favorite_Amount FROM Historys;
-- 如果表为空,将Search_ID设为1000000001
IF Favorite_Amount = 0 THEN
SET NEW.Search_ID = 1000000001;
END IF;
-- 检查相同User_ID的记录数量
SELECT COUNT(*) INTO User_Search_History FROM Historys WHERE User_ID = NEW.User_ID;
-- 如果数量等于十条,删除Search_ID最小的一条记录
IF User_Search_History = 10 THEN
DELETE FROM Historys WHERE Search_ID = (SELECT MIN(Search_ID) FROM Historys WHERE User_ID = NEW.User_ID);
END IF;
END//
DELIMITER ;
对接口不是很熟悉,对表的具体结构设计不是很清晰(比如:用户表的头像属性需要可以索引到图片,商品信息表的商品图片也需要索引到图片,目前没有图片表来规范的存储图片,而是在各个需要索引图片的属性中保存路径)
实现常见需求的查询、实现向表中插入数据的接口。
运用了学到的数据库知识,现在对数据库理解更加深刻。
初步完成对用户的登录注册请求的参数校验和返回处理
对于spring框架以及java servelet框架的httpsession使用不熟练,需要在后面冲刺环节继续学习。
完善用户登录以及注册接口的实现
对后端接口开发的总体过程有了很大的了解,学习使用springboot的过程中发现了其的自动配置功能,可以根据项目中的依赖自动配置相应的组件,大大减少了手动配置的工作量。
实现ueser类(完成登录和注册逻辑)
两个逻辑函数分别如下
对于某些逻辑的设想思考不全面,很多情况无法全部包含。
完善逻辑,减少使用bug
心得体会
对于逻辑的设计学习到了很多,将dao层的指令封装后可以供contorller层使用。
今天学习了postman执行接口测试的基本页面,了解了请求页面中params,authorization,body等所显示的意思,也了解了一些post,raw等请求传参的形式,以及相应界面body接口传回来的数据信息,以及了解了post请求创建标签接口和get请求获取接口统一鉴权码和token接口。与此同时也了解了post传参和get传参的本质区别:Get请求是在地址后面以?的形式传参,多个参数之间用&分开;Post请求是在body以表单的方式传参。在这之后,还学习了一些用Json提取器以及正则表达式提取器实现手动关联的接口连接。
存在的问题/遇到的困难:可能对真正实现接口的时候可能实现有些困难,不容易进行接口的连接。
今天到明天的安排
明天继续学习有关知识
心得体会:对postman一些接口的测试有了更加深刻的理解与认识,以前完全不知道所谓的接口测试应当如何去实现,现在应该能够处理一下简单的接口测试,同时借此机会也对接口的概念有了进一步的认识与理解。
昨天站立式会议到现在的进展
在查看文档时,没有发现什么需要进行测试的接口,于是在网上寻找了资料进行学习。大概了解了一下ssm和mvc等知识,大概了解一下接口方面的有关信息,方便以后测试接口。在接口测试方面,学习了postman的测试方法,例如post、get等测试方法。
存在的问题/遇到的困难
目前感觉学到的东西都比较浅薄,也没有进行上手实践,不太确定后续真正进行测试操作时能否正常地、成功地进行操作。
今天到明天的安排
在今天到明天的这段时间里,我打算继续更加深入地学习一下postman等测试工具和测试方法,同时查看其他成员的接口,在更新出有关内容时,需要进行测试时,及时尝试使用学习的方法进行测试,确保功能能够正常运行。
心得体会
个人感觉测试也不是非常简单的工作,需要大概读懂有关接口的内容,并且设计测试用例,考虑边界问题等等,并且熟练运用测试工具进行测试分析,对于不正确的地方要能够分析问题出现在什么地方。目前个人也没有对测试工具和方法非常熟悉,希望在后续的操作中能更加熟悉、掌握测试工具,不出现比较严重的失误,成功完成测试的任务。
在B站学习了vue2.0的课程,了解了在uniapp上如何利用组件进行开发的过程
基础不太行,边学还得边复习前端的内容,效率不太行
今天到明天会议的安排是尽快把vue部分知识过一遍,然后着手负责的开发内容
用vue比原生HTML+CSS+java写前端更方便快捷
并开始着手项目首页的制作