- 20196014 물리학과 고지흔
- 20224680 소프트웨어학부 김경민
- 20224566 소프트웨어학부 김동우
- 20225779 소프트웨어학부 김제신
- 20224280 간호학과 윤재훈
- 테이블 30개 이상
- stock_info
- 입출금
- 통화 변환: 환율에 따라 통화를 변환하는 기능을 수행합니다.
CREATE FUNCTION ExchangeCurrency(
p_account_id INT,
p_base_currency VARCHAR(3),
p_foreign_currency VARCHAR(3),
p_base_amount DECIMAL(65,7),
p_exchange_rate DECIMAL(65,7)
) RETURNS BOOLEAN DETERMINISTIC
BEGIN
DECLARE v_base_balance DECIMAL(65,7);
DECLARE v_foreign_balance DECIMAL(65,7);
DECLARE v_required_foreign_amount DECIMAL(65,7);
DECLARE v_total_balance DECIMAL(65,7);
DECLARE v_success BOOLEAN;
-- 필요한 기본 통화량 계산
SET v_required_foreign_amount = p_base_amount * p_exchange_rate;
-- 잔액 확인
SELECT krw_balance, usd_balance, total_balance INTO v_base_balance, v_foreign_balance, v_total_balance
FROM Balance
WHERE account_id = p_account_id;
-- 잔액 확인 및 환전 처리
IF (p_base_currency = 'KRW' AND v_base_balance >= p_base_amount) OR
(p_base_currency = 'USD' AND v_foreign_balance >= p_base_amount) THEN
-- Balance 테이블 업데이트
UPDATE Balance
SET krw_balance = IF(p_base_currency = 'KRW', v_base_balance - p_base_amount, v_base_balance + v_required_foreign_amount),
usd_balance = IF(p_base_currency = 'USD', v_foreign_balance - p_base_amount, v_foreign_balance + v_required_foreign_amount)
WHERE account_id = p_account_id;
-- CurrencyExchange 테이블 업데이트
INSERT INTO CurrencyExchange (account_id, base_currency, foreign_currency, base_amount, foreign_amount, exchange_time)
VALUES (p_account_id, p_base_currency, p_foreign_currency, p_base_amount, v_required_foreign_amount, NOW());
SET v_success = TRUE;
ELSE
SET v_success = FALSE;
END IF;
RETURN v_success;
END $$
DELIMITER ;
- 수익 계산: 투자 자산의 수익을 계산합니다.
DELIMITER $$
create
unction CalculateInvestment(p_account_id int, p_item_id int) returns decimal(20, 6)
deterministic
BEGIN
DECLARE investmentReturn DECIMAL(20, 6);
DECLARE currentPrice DECIMAL(20, 6);
DECLARE p_quantity INT;
DECLARE totalInvestment DECIMAL(20, 6);
SELECT quantity INTO p_quantity FROM ItemPortfolio WHERE account_id = p_account_id AND item_id = p_item_id;
SELECT current_price INTO currentPrice FROM CurrentPrice WHERE item_id = p_item_id ORDER BY updated_at DESC LIMIT 1;
SELECT total_purchase_price INTO totalInvestment FROM ItemPortfolio WHERE account_id = p_account_id AND item_id = p_item_id;
SET investmentReturn = currentPrice * p_quantity - totalInvestment;
RETURN investmentReturn;
END$$
DELIMITER ;
- 주문 유효성 검사: 주문이 유효한지 검사하는 데 사용됩니다.
DELIMITER //
CREATE FUNCTION CheckOrderValidity(p_item_id INT, p_quantity INT, p_account_id INT)
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
DECLARE v_currencyType VARCHAR(3);
DECLARE v_itemPrice DECIMAL(65, 7);
DECLARE v_balance DECIMAL(65, 7);
DECLARE v_sufficientBalance BOOLEAN;
-- 아이템의 마켓을 확인하여 통화 유형 결정
SELECT IF(LEFT(market, 1) = 'k', 'KRW', 'USD') INTO v_currencyType
FROM Item
WHERE item_id = p_item_id;
-- 해당 아이템의 현재 가격 조회
SELECT current_price INTO v_itemPrice
FROM CurrentPrice
WHERE item_id = p_item_id;
-- 사용자의 해당 통화 잔액 조회
IF v_currencyType = 'KRW' THEN
SELECT krw_balance INTO v_balance
FROM Balance
WHERE account_id = p_account_id;
ELSE
SELECT usd_balance INTO v_balance
FROM Balance
WHERE account_id = p_account_id;
END IF;
-- 잔액이 충분한지 확인
SET v_sufficientBalance = v_balance >= (v_itemPrice * p_quantity);
RETURN v_sufficientBalance;
END //
DELIMITER ;
- ItemPriceInfo 내용 갱신: ItemPriceInfo 테이블의 내용을 갱신하는데 사용됩니다.
DELIMITER $$
CREATE PROCEDURE UpdateItemPriceInfo(IN p_item_id INTEGER, IN p_closing_price DECIMAL(65,7), IN p_opening_price DECIMAL(15,2))
BEGIN
UPDATE ItemPriceInfo
SET closing_price = p_closing_price, opening_price = p_opening_price, updated_at = NOW()
WHERE item_id = p_item_id;
END$$
DELIMITER ;
DELIMITER $$
- stockportfolio 테이블 total_purchase_price 갱신에 사용: stockportfolio 테이블 내의 total_purchase_price를 갱신하는 데 사용됩니다.
DELIMITER $$
CREATE PROCEDURE UpdateStockPortfolioTotalPurchasePrice(IN p_account_id INTEGER, IN p_item_id INTEGER, IN p_total_purchase_price DECIMAL(65,7))
BEGIN
UPDATE ItemPortfolio
SET total_purchase_price = p_total_purchase_price
WHERE account_id = p_account_id AND item_id = p_item_id;
END$$
DELIMITER ;
- 미체결을 체결로 만들어 주는 프로시저: 미체결 주문을 체결 상태로 만드는 프로시저입니다.
DELIMITER $$
CREATE PROCEDURE FinalizeOrder(IN p_order_id INTEGER)
BEGIN
UPDATE `Order`
SET order_status = 'success', success_at = NOW()
WHERE order_id = p_order_id;
END$$
DELIMITER ;
- AccountLogin 횟수 초기화: AccountLogin의 로그인 시도 횟수를 초기화합니다.
DELIMITER $$
CREATE TRIGGER ResetAccountLoginAttempts AFTER UPDATE ON AccountLoginPassword
FOR EACH ROW
BEGIN
IF NEW.password_hash = OLD.password_hash THEN
UPDATE AccountLoginMeta SET login_attempt = 0 WHERE account_id = NEW.account_id;
END IF;
END$$
DELIMITER ;
- AccountLogin 횟수 자동 증가: 로그인 실패 시 AccountLogin의 시도 횟수를 자동으로 증가시킵니다.
DELIMITER $$
CREATE TRIGGER IncreaseAccountLoginAttempts AFTER INSERT ON AccountLoginLog
FOR EACH ROW
BEGIN
IF NEW.login_status = 'fail' THEN
UPDATE AccountLoginMeta SET login_attempt = login_attempt + 1 WHERE account_id = NEW.account_id;
END IF;
END$$
DELIMITER ;
- UserLogin 횟수 초기화: UserLogin의 로그인 시도 횟수를 초기화합니다.
DELIMITER $$
CREATE TRIGGER ResetUserLoginAttempts AFTER UPDATE ON UserLoginPassword
FOR EACH ROW
BEGIN
IF NEW.password_hash = OLD.password_hash THEN
UPDATE UserLoginMeta SET login_attempt = 0 WHERE uid = NEW.uid;
END IF;
END$$
DELIMITER ;
- UserLogin 횟수 자동증가: 로그인 실패 시 UserLogin의 시도 횟수를 자동으로 증가시킵니다.
DELIMITER $$
CREATE TRIGGER IncreaseUserLoginAttempts AFTER INSERT ON UserLoginLog
FOR EACH ROW
BEGIN
IF NEW.login_status = 'fail' THEN
UPDATE UserLoginMeta SET login_attempt = login_attempt + 1 WHERE uid = NEW.uid;
END IF;
END$$
DELIMITER ;
- Nomalization
- Your program should create more than 10records for all tables
- Your program should be able to create, read, update and delete records in your DB
- Front and Back
-
로그인(/api/login)
- input
{ "id": "admin", "password_hash": "admin" }
- output
{ "uID" : 1 "username": "admin", "accountNumbers": [ "120312312-1231231" ] "account_type": [ "GeneralAccount" ] }
-
계좌 로그인(/api/account/login)
- input
{ "account_number" : "12300000000", "password_hash" : "26795f6e81e330d69174f2cfad2e7f21" }
- output
{ "account_id": 1, "uid": 1, "account_number": "12300000000", "account_type": "general", "stock_value": 10000.0, "status": "active", "created_at": "2023-12-12 04:32:35.0", "available_offer_Type": "Offer_Type_1" }
-
종목검색 - 검색어 / itemid, name, market_name, price
- input
{ "search" : "Apple" }
- output
[ { "item_id": 1, "name": "Apple Inc.", "market_name": "NYSE", "price": 149.0 } ]
-
주문창 페이지 created - account_id, itemid / balance, 주식 종목 명, current_price, start_price, 현재 나와있는 물량(가격,수량) - input
{ "account_id" : 1, "item_id" : 1 }
- output
{ "balance": 10000.0, "name": "Apple Inc.", "current_price": 149.0, "start_price": 145.0, "order_left_form": [ { "quantity": 1, "limit_price": 450.0 } ] }
-
주문 창 - (/api/order/order)
- input
{ "account_id" : 1, "item_id" : 1, "purchase_type" : "buyorder", "quantity" : 1, "order_type" : "limit" "limit_price" : 450.00 }
- output : OK or BadRequest
-
주문 창(미채결 주문) - (/api/order/pendings) -> 지금 data가 이상한 상황이라 테스트 보류.
- input
{ "account_id" : 1 }
-
주문 창(정정) - (/api/order/amend)
- input
{ "order_id" : 5, "quantity" : 10 }
- output : OK or BadRequest
-
주문 창(취소) - (/api/order/cancel)
- input
{ "order_id" : 5 }
- output : OK or BadRequest
-
잔고 조회 - (/api/balance)
- input
{ "account_id" : 1 }
- output
{ "account_id": 1, "total_Balance": 10000.0, "krw_Balance": 8000.0, "usd_Balance": 2.0, "itemPortfolios": [ { "item_id": 1, "name": "Apple Inc.", "profit_loss": 10000.0, "return_rate": -85.1, "quantity": 10, "current_value": 11000.0, "weight": 1.0, "purchase_price": 100.0, "purchase_amount": 1000.0, "current_price": 149.0 } ] }
-
환율 기록조회(/api/exchange/rate)
- input
{ "base_currency" : "USD", "foreign_currency" : "KRW", "created_at" : "2023-12-05" }
- output
{ 1000.0 }
-
환전(/api/exchange)
- input
{ "account_id" : 1 }
- output
{ "current_exchange_rate": 0.0, "krw_Balance": 8000.0, "usd_Balance": 2.0 }
-
환전 신청(/api/exchange/exchange)
- input
{ "account_id" : 1, "base_amount" : 2000, "base_currency" : "KRW", "foreign_currency" : "USD" }
- output
{ "account_id": 1, "usd_Balance": 4.0, "krw_Balance": 6000.0, "total_Balance": 10000.0 }
-
기업 정보(/api/item/info)
- input
{ "item_id" : 1, "report_period" : "2022-Q4" }
- output
{ "analyst_id": 1, "name": "Analyst 1", "firm": "Firm 1", "expertise_area": "Technology", "contact_info": "[email protected]", "item_id": 1, "analyst_rating": "A", "target_price": 160.0, "statement_id": null, "report_period": "2022-Q4", "revenue": 100000000, "net_income": 20000000, "total_assets": 500000000, "total_liabilities": 300000000, "equity": 200000000, "report_date": "2023-12-11T22:44:40.000+00:00" }
-
채결 기록 - (/api/order/log)
- input
{ "account_id" : 1, "date" : "2023-12-12" }
- output
[ { "order_id": 1, "account_id": 1, "item_id": 1, "purchase_type": "buyorder", "order_status": "cancelled", "created_at": "2023-12-11T22:44:16.000+00:00", "success_at": null }, { "order_id": 25, "account_id": 1, "item_id": 2, "purchase_type": "BuyOrder", "order_status": "success", "created_at": "2023-12-12T00:35:47.000+00:00", "success_at": "2023-12-12T00:36:47.000+00:00" }, { "order_id": 26, "account_id": 1, "item_id": 1, "purchase_type": "buyorder", "order_status": "cancelled", "created_at": "2023-12-12T01:08:12.000+00:00", "success_at": null } ]
-
개인 정보 확인 (수정) - userid/ user, username, email, phone, street_address, city, state, country, ..
- input(확인일때, /api/info)
{ "uid" : 1 }
- output
{ "uid": 1, "address": "123 Main St", "postal_code": 12345, "country": "Korea", "email": "[email protected]", "phone": "010-1234-5679", "age": 30, "sex": "Male", "contactValue": "[email protected]", "contactType": "secondary_email" }
-
- Front
- 주문 정정창에 등락 없애기, 취소 누르기, 정정에서 수량 칸 구매가능 주수 없애기
- 로그인 후 창에 계좌 선택 넣고 계좌를 선택해야 주문하기, 잔고확인 버튼 생기게
- vuex에 account 정보, 현재 선택된 account
- 종목 검색페이지 갈때 request parameter로 계좌 타입도 - 그냥 vuex state로 처리
- 주문 신청 성공 여부 창
- 정정신청 시 기존 주문 지우고 새주문 띄우기
- 잔고에서 전일가 지우고 표 열 맞추기
- 잔고에서 D+2빼고 달러 원화나눠서 표시
- 환율확인 -> 환전 / from to 통화/ 얼마할꺼냐 / from테이블 기준으로 얼마 환전 가능한지
- 잔고확인 창 박으로 빼기
- 환율 조회 기간-최대한달. end date 현재날짜 까지.
- 계좌 비밀번호 창
- 기업 정보 - 주문 창에서 넘어갈수 있는 페이지
- 채결 기록 잔고확인 전환 버튼
이 문서는 사용자, 개인 및 기업 상세 정보, 로그인 정보, 계좌, 주문 및 주식 관련 정보 등 다양한 엔터티를 처리하기 위한 주식 데이터베이스의 물리적 명세를 개요합니다.
- 사용자 관련 정보를 담은 테이블
- 필드:
uid
: integer (PK, Auto-increment) - 인공키username
: varchar - 사용자명usertype
: varchar - 사용자 타입account_status
: varchar - 계정 상태created_at
: timestamp - 레코드 생성일updated_at
: timestamp - 레코드 갱신일
- 개인 사용자 정보를 담은 테이블
- 필드:
uid
: integer (PK, FK: User.uid) - 인공키social_id_hash
: varchar - 암호화된 주민등록번호
- 기업 사용자 정보를 담은 테이블
- 필드:
uid
: integer (PK, FK: User.uid) - 인공키business_id_hash
: varchar - 암호화된 회사 고유 번호
- 사용자 계정 로그인을 위한 비밀번호 테이블
- 필드:
uid
: integer (PK, FK: User.uid) - 인공키password_hash
: varchar - 암호화된 비밀번호, 특수문자 "!","@","#","$"만 허용updated_at
: timestamp - 레코드 갱신일
- 계정 로그인 시도 횟수 테이블
- 필드:
login_id
: varchar - 로그인 시 사용하는 아이디, 특수문자 제한login_attempt
: integer - 로그인 시도 횟수, 성공시 초기화
- 계정 로그인하기 위한 비밀번호 찾기 질문 테이블
- 필드:
security_question
: varchar - 보안 질문security_answer_hash
: varchar - 암호화된 보안 질문 답
- 로그인 로그를 기록하기 위한 테이블
- 필드:
log_id
: integer (PK, Auto-increment) - 인공키uid
: integer (FK: User.uid) - 인공키login_time
: timestamp - 로그인 시도 시간login_status
: varchar - 로그인 성공/실패 여부
- 사용자의 민감한 정보를 담은 테이블
- 필드:
uid
: integer (PK, FK: User.uid) - 인공키email
: varchar - 이메일phone
: varchar - 전화번호age
: integer - 나이 (기업일 경우 -1)sex
: varchar - 성별
- 사용자의 추가 연락처 정보를 담은 테이블
- 필드:
contact_info_id
: integer (PK, Auto-increment) - 인공키uid
: integer (FK: SensitiveInfo.uid) - 인공키contact_type
: varchar - 추가 연락처 타입contact_value
: varchar - 추가 연락처 값
- 사용자 주소 정보를 담은 테이블
- 필드:
address_id
: integer (PK, Auto-increment) - 인공키uid
: integer (FK: SensitiveInfo.uid) - 인공키address
: varchar - 주소postal_code
: integer - 우편번호country
: varchar - 국가
- 계좌 정보를 담은 테이블
- 필드:
account_id
: integer (PK, Auto-increment) - 인공키uid
: integer (FK: User.uid) - 인공키account_number
: varchar - 계좌번호account_type
: varchar - 계좌 타입stock_value
: decimal - 주식, 채권, 금 자산 가치status
: varchar - 계좌 활성화 상태created_at
: timestamp - 계좌 생성 시간updated_at
: timestamp - 상태 갱신 시간
- 계정 로그인 후 계좌에 로그인하기 위한 테이블
- 필드:
account_id
: integer (PK, FK: Account.account_id) - 인공키password_hash
: varchar - 암호화된 계좌 비밀번호, 비밀번호 숫자 4자리로 고정updated_at
: timestamp - 비밀번호 최종 수정 날짜
- 계좌 로그인 시도 횟수를 저장하는 테이블
- 필드:
password_attempt
: integer - 계좌 비밀번호 시도 횟수
- 계좌에 로그인한 기록을 담은 테이블
- 필드:
log_id
: integer (PK, Auto-increment) - 인공키account_id
: integer (FK: Account.account_id) - 인공키login_time
: timestamp - 로그인 시도 시간login_status
: varchar - 로그인 성공 실패 여부 ("success", "fail")
- 계좌의 잔액 정보를 저장하는 테이블
- 필드:
account_id
: integer (PK, FK: Account.account_id) - 인공키total_balance
: decimal - 총액 (KRW + USD 환율 적용)krw_balance
: decimal - 원화 소유액usd_balance
: decimal - 달러 소유액
- 일반 계좌 정보를 저장하는 테이블
- 필드:
account_id
: integer (PK, FK: Account.account_id) - 인공키Available_offer_Type
: varchar - 주문 가능 타입
- 금 계좌 정보를 저장하는 테이블
- 필드:
account_id
: integer (PK, FK: Account.account_id) - 인공키Available_offer_Type
: varchar - 주문 가능 타입
- 주식 포트폴리오 정보를 저장하는 테이블
- 필드:
account_id
: integer (PK, FK: Account.account_id) - 인공키item_id
: integer (PK, FK: Item.item_id) - 인공키quantity
: integer - 보유 수량total_purchase_price
: decimal - 평균 구매 가격current_price
: decimal - 현재 주식 가격created_at
: timestamp - 주식 구매 날짜
- 주문 정보를 저장하는 테이블
- 필드:
order_id
: integer (PK, Auto-increment) - 인공키account_id
: integer (FK: Account.account_id) - 인공키item_id
: integer (FK: Item.item_id) - 인공키purchase_type
: varchar - 매수/매도 타입order_status
: varchar - 주문 상태created_at
: timestamp - 주문 생성 시간success_at
: timestamp - 거래 시간
- 구매 주문 정보를 저장하는 테이블
- 필드:
order_id
: integer (PK, FK: Order.order_id) - 인공키quantity
: integer - 주문 수량order_type
: varchar - 시장가/지정가 타입limit_price
: decimal - 지정 가격 (order_type이 'limit'일 때만 적용)
- 판매 주문 정보를 저장하는 테이블
- 필드:
order_id
: integer (PK, FK: Order.order_id) - 인공키quantity
: integer - 판매 수량order_type
: varchar - 시장가/지정가 타입limit_price
: decimal - 지정 가격 (order_type이 'limit'일 때만 적용)
- 통화 교환 정보를 저장하는 테이블
- 필드:
exchange_id
: integer (PK, Auto-increment) - 인공키account_id
: integer (FK: Account.account_id) - 인공키base_currency
: varchar - 기준 통화foreign_currency
: varchar - 바꿀 통화base_amount
: decimal - 기준 통화량foreign_amount
: decimal - 외화 통화량exchange_time
: timestamp - 교환 시간
- 현재 환율 정보를 저장하는 테이블
- 필드:
base_currency
: varchar (PK, FK: CurrencyExchange.base_currency) - 기준 통화foreign_currency
: varchar (PK, FK: CurrencyExchange.foreign_currency) - 바꿀 통화current_exchange_rate
: decimal - 현재 환율updated_at
: timestamp - 갱신 시간
- 역대 환율 정보를 계속 저장하는 테이블
- 필드:
base_currency
: varchar (PK, FK: CurrencyExchange.base_currency) - 기준 통화foreign_currency
: varchar (PK, FK: CurrencyExchange.foreign_currency) - 바꿀 통화created_at
: timestamp (PK) - 갱신 시간exchange_rate
: decimal - 환율
- 주식, 금 등의 정보를 저장하는 테이블
- 필드:
item_id
: integer (PK, Auto-increment) - 인공키symbol
: varchar - 심볼, 티커name
: varchar - 아이템 이름item_type
: varchar - 아이템 타입 (주식, 금, 채권)market
: varchar - 속한 마켓created_at
: timestamp - 생성 시간
- 역대 아이템의 가격 정보를 저장하는 테이블
- 필드:
item_id
: integer (PK, FK: Item.item_id) - 인공키closing_price
: decimal - 전일 종가opening_price
: decimal - 당일 시가daily_high
: decimal - 당일 최고가daily_low
: decimal - 당일 최저가week_52_high
: decimal - 52주 최고가week_52_low
: decimal - 52주 최저가historical_high
: decimal - 역대 최고가historical_low
: decimal - 역대 최저가updated_at
: timestamp - 갱신 시간
- 현재 시장 가격 정보를 저장하는 테이블
- 필드:
item_id
: integer (PK, FK: Item.item_id) - 인공키updated_at
: timestamp (PK) - 갱신 시간current_price
: decimal - 현재 주식 가격
- 주식 정보를 저장하는 테이블
- 필드:
item_id
: integer (PK, FK: Item.item_id) - 인공키CEO
: varchar - CEO 이름sector
: varchar - 섹터industry
: varchar - 산업군dividend_yield
: decimal - 배당율dividend_payment_month
: integer - 배당이 이루어질 월
- 주식 지표를 저장하는 테이블
- 필드:
item_id
: integer (PK, FK: Stock.item_id) - 인공키volume
: bigint - 거래량market_cap
: bigint - 시가총액PER
: decimal - PEREPS
: decimal - EPSupdated_at
: timestamp - 갱신 시간
- 주식의 재무제표 관련 정보를 저장하는 테이블
- 필드:
statement_id
: integer (PK, Auto-increment) - 인공키item_id
: integer (PK, FK: Stock.item_id) - 인공키report_period
: varchar - 재무제표의 기간revenue
: bigint - 회사의 총 매출액net_income
: bigint - 회사의 순이익total_assets
: bigint - 회사의 총자산total_liabilities
: bigint - 회사의 총부채equity
: bigint - 회사의 자본 (총자산 - 총부채)report_date
: timestamp - 재무제표 보고 날짜
- 애널리스트가 평가한 정보를 저장하는 테이블
- 필드:
stock_info_id
: integer (PK, Auto-increment) - 인공키item_id
: integer (FK: Stock.item_id) - 인공키analyst_id
: integer (FK: Analyst.analyst_id) - 인공키analyst_rating
: varchar - 애널리스트 목표 등급target_price
: decimal - 애널리스트 목표 주가updated_at
: timestamp - 갱신 시간
- 애널리스트의 정보를 저장하는 테이블
- 필드:
analyst_id
: integer (PK, Auto-increment) - 인공키name
: varchar - 애널리스트의 이름firm
: varchar - 애널리스트가 속한 회사expertise_area
: varchar - 전문 분야contact_info
: varchar - 연락처 정보
- 채권 정보를 저장하는 테이블
- 필드:
item_id
: integer (PK, FK: Item.item_id) - 인공키bond_type
: varchar - 채권 타입coupon_rate
: decimal - 채권 쿠폰 금리coupon_payment_date
: timestamp - 쿠폰 지급일maturity_date
: timestamp - 만기일credit_rating
: varchar - 채권 신용등급
- 금에 관한 정보를 저장하는 테이블
- 필드:
item_id
: integer (PK, FK: Item.item_id) - 인공키weight
: varchar - 금 무게
PK
: 기본 키FK
: 외래 키Auto-increment
: 자동 증가 필드
이 섹션은 주식 거래 시스템의 주요 기능과 제약사항에 대해 설명합니다.
- 유저는 자신의 계정을 만들고 로그인할 수 있습니다.
- 유저는 자신의 계정 정보를 열람하고 수정할 수 있습니다.
- 비밀번호를 잊어버린 경우, 보안 질문과 답변을 통해 비밀번호를 찾을 수 있습니다.
- 보안을 위해 10번 이상 로그인 실패 시 계정이 비활성화됩니다.
- 유저는 하나 이상의 계좌를 보유할 수 있으며, 계좌의 정보와 거래에 접근하기 위해서는 계좌 비밀번호가 필요합니다.
- 계좌도 10번 이상의 로그인 실패 시 비활성화됩니다.
- 유저는 금 또는 일반 금융 계좌를 보유할 수 있으며, 각각의 거래 가능 품목이 다릅니다.
- 계좌는 원화와 달러를 모두 저장할 수 있습니다.
- 계좌마다 현재 보유 중인 주식, 이익 및 총 주식 평가금액을 조회할 수 있습니다.
- 유저는 원화를 다른 국가의 화폐로 변경하거나 반대로 바꿀 수 있습니다. (현재는 원화와 달러만 가능)
- 유저는 환율 기록을 확인하여 환전을 결정할 수 있습니다.
- 유저는 각 종목의 상품 정보를 확인할 수 있습니다.
- 유저는 주식 검색을 통해 각 종목의 평가 정보를 확인할 수 있습니다.
- 각 계좌에서 상품을 주문할 수 있으며, 주문은 일정 시간 후에 자동으로 체결됩니다.
- 거래 체결 전에는 거래를 정정하거나 취소할 수 있습니다.
- 유저는 계좌별 거래 기록을 조회할 수 있습니다.
- 거래 가능 화폐는 원화와 달러로 제한됩니다.
- 환율과 금융상품의 가격은 하루에 한 번만 갱신됩니다.
- 거래의 체결은 30초 후에 자동으로 이루어집니다.
- 애널리스트 평점은 A, B, C, D, F로 고정됩니다.
- 계좌번호는 11자리, 비밀번호는 숫자 4자리로 고정됩니다.
- 계정 및 계좌의 잠금을 해제하는 방법은 없으며, 계좌 비밀번호를 찾을 수 있는 방법도 없습니다.