完成程序设计课程的大作业,用python写的简单的股票交易系统

# coding=utf-8
"""


@author: liujiawei (Sy1507518),hanxu (Sy1507522)
@license: GPL
@contact: [email protected],[email protected]
@see: http://blog.csdn.net/largetalk/article/details/6950435


@version: 3.1.1
@todo[0.0.2]: StockMarketSys


@note: a comment
@attention: please attention
@bug: a exist bug
@warning: warnings
"""


import sqlite3, random, threading, time, thread
import numpy as np
from Tkinter import *
from tkMessageBox import askokcancel
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure




class User:
    """
    @Class describe:  用户类、属于事务管理层。包含所有当前用户操作,直接与表现层链接
    @private param:     __username              用户名
                        __balance               余额
                        __totalProperty         总资产
                        __profit                盈亏
                        __stockProperty         当前用户股票资产
                        __originalProperty      用户本金
    """
    __username = ''
    __balance = 10000
    __totalProperty = 10000
    __profit = 0
    __stockProperty = 0  #
    __originalProperty = 10000  # 用户本金


    def __init__(self, name):
        self.__username = name


    def calBalance(self):
        """查询返回用户余额"""
        db = Database('testDB.db', self.__username)
        db.getLinkedUser(self.__username)
        temp = db.getUserCurrentmoney()
        return temp


    def calToatalProperty(self):
        """查询返回用户总资产"""
        db = Database('testDB.db', self.__username)
        db.getLinkedUser(self.__username)
        temp = db.getUserCurrentprop()
        return temp


    def calPrfLoss(self):
        """查询返回当前利润"""
        return self.calToatalProperty() - self.__originalProperty


    def calStockProp(self):
        """查询返回用户股票资产"""
        db = Database('testDB.db', self.__username)
        db.getLinkedUser(self.__username)
        temp = db.getUserStockprop()
        return temp


    def update(self):
        self.__balance = self.calBalance()
        self.__totalProperty = self.calToatalProperty()
        self.__profit = self.calPrfLoss()
        self.__stockProperty = self.calStockProp()
        return True


    def buyOneStock(self, stockname, stocknum):
        """买入一支股票
            :param stockname:   购买股票名称
            :param stocknum:    购买数量
            :return:            BOOL
            """
        db = Database('testDB.db', self.__username)
        money = stocknum * db.getStockPrice(stockname)
        flag1 = (bool)(db.getUserCurrentmoney() > money)
        flag2 = (bool)(db.getStockBalance(stockname) > stocknum)


        if flag1 and flag2:
            db.changeUserStocknum(self.__username, stockname, stocknum)
            db.changeStockBalance(stockname, -stocknum)
            db.changeUserCurrentmoney(-money)
            return True
        else:
            return False


    def sellOneStock(self, stockname, stocknum):
        """卖出一支股票
                :param stockname:   购买股票名称
                :param stocknum:    购买数量
                :return:            BOOL
                """
        db = Database('testDB.db', self.__username)
        money = stocknum * db.getStockPrice(stockname)
        if (bool)(db.getUserStocknum(self.__username, stockname) > stocknum):
            db.changeUserStocknum(self.__username, stockname, stocknum)
            db.changeStockBalance(stockname, -stocknum)
            db.changeUserCurrentmoney(-money)
            return True
        else:
            return False


    def getUsername(self):
        """
        :return:    string用户名
        """
        self.update()
        return self.__username


    def getBalance(self):
        """
        :return:    float用户现金余额
        """
        self.update()
        db = Database('testDB.db', self.__username)
        self.__balance = db.getUserCurrentmoney()
        return self.__balance


    def getTotalProperty(self):
        """
        :return:    float用户现有总资产
        """
        self.update()
        return self.__totalProperty


    def getProfitOrLoss(self):
        """
        :return:    float用户总资产盈亏
        """
        self.update()
        return round(self.__profit, 2)


    def getStockProp(self):
        """
        :return:    float用户股票总额
        """
        self.update()
        return self.__stockProperty


    def drawUserExchange(self, figure):
        """
        用于在屏幕上显示用户持有的股票数量,显示方式为直方图图
        :param figure:  Figure
        :return:
        """
        db = Database('testDB.db', self.__username)
        stocknamelist = db.getStocknameList()
        userstocknumlist = db.getUserStocknnumlist(self.__username)


        width = 0.5
        a = figure.add_subplot(111)
        ind = np.arange(1, len(stocknamelist) + 1, 1)
        a.cla()
        a.bar(ind - width / 2, userstocknumlist, width, color='green')
        a.set_xticks(ind)
        a.set_xticklabels(stocknamelist)
        a.set_ylabel('Stock Num')
        a.set_xlabel('Stock ID')
        a.set_ylabel('Stock Num')


    def getStockholdingMsg(self):
        """
        :return:    string 用户所有股票数量信息
        """
        db = Database('testDB.db', self.__username)
        return db.getUserStockholdingStr(self.__username)




class Stock():
    """
    @Class describe:  股票类、属于事务管理层。包含所有股票市场的操作,直接与表现层链接
    @private param:    __username  用户名
    """
    __username = ''


    def __init__(self, username):
        self.__username = username
        return


    def showStockprice(self, f):
        """
        在屏幕上用柱状图的形式显示所有股票信息价格,包含了股票价格浮动功能,并且按照股价顺序列出各项股票
        :param f:   Figure
        :return:
        """


        """
        按照股价顺序排列各个股票
        """
        db = Database('testDB.db', '')
        self.floatStock()
        stockpricelist = []
        stocknamelist = []
        dict2 = sorted(dict(zip(db.getStocknameList(), db.getStockpriceList())).iteritems(), key=lambda d: d[1],
                       reverse=True)
        for i in range(len(dict2)):
            stockpricelist.append(dict2[i][1])
            stocknamelist.append(dict2[i][0])


        a = f.add_subplot(111)
        ind = np.arange(1, len(stocknamelist) + 1, 1)
        width = 0.5
        a.cla()
        a.bar(ind - width / 2, stockpricelist, width, color='green')
        a.set_xticks(ind)
        a.set_xticklabels(stocknamelist)
        a.set_xlabel(u'Stock ID')
        a.set_ylabel(u'Stock Price')


        return True


    def floatStock(self):
        """
        对股票市场进行价格浮动,10%以内上下随机浮动
        :return:    Bool
        """
        db = Database('testDB.db', '')
        stocknamelist = db.getStocknameList()
        for n in stocknamelist:
            temp = random.uniform(random.uniform(90, 110), random.uniform(90, 110)) / 100
            price1 = ((float)(db.getStockPrice(n)))
            price = round(price1 * temp, 2)
            a = db.changeStockPrice(n, price)
        return True


    def addNewstock(self, stockname, stockprice, stocknum):
        """
        在股票市场增加一支股票
        :param stockname:   股票名称
        :param stockprice:  股票价格
        :param stocknum:    股票总数量
        :return:            Bool
        """


        db = Database('testDB.db', '')
        stocknamelist = db.getStocknameList()
        if stockname in stocknamelist:
            return False
        else:
            stocknamelist.append(stockname)
        db.addnewstock(stockname, stockprice, stocknum)
  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python web程序设计期末大作业主要是一个基于Django框架的在线商城网站。这个网站包括了用户注册登录、商品浏览、购物车、订单管理、支付功能等。首先,用户可以通过注册登录来管理自己的个人信息和订单记录。其次,用户可以浏览网站上的各类商品,并且可以将感兴趣的商品加入购物车。在购物车中,用户可以对商品进行增删改操作,方便进行商品的管理和结算。当用户确认订单后,可以选择在线支付功能完成支付流程。同,网站还会有管理后台,管理员可以对商品信息、订单信息进行管理和统计。 在设计期末大作业中,我们将采用模块化的设计方法,将网站功能拆分成不同的模块,分别负责用户管理、商品管理、订单管理、支付处理等工作。同,我们会遵循Django框架的MVC设计模式,合理地组织网站的数据层、逻辑层和表示层。在前端方面,我们会使用HTML、CSS和JavaScript来构建用户友好的交互界面。在后端方面,我们会通过Python编写Django的视图函数和模型类,处理网站的业务逻辑和数据操作。另外,我们也会使用数据库来存储用户信息、商品信息和订单信息等数据。最后,在部署方面,我们会考虑使用Nginx和uWSGI来部署网站,保证网站的高性能和高可用性。 通过这个期末大作业,我们希望能够巩固所学的Python web程序设计知识,提高自己的web开发能力,同也为实际的电商网站开发打下基础。同,通过团队合作完成这个项目,我们也会提高沟通协作能力和项目管理能力。希望能够通过这个项目,展现我们的技术水平和团队合作能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值