第十二周作业-网络编程、数据库

利用本周学习的知识实现如下效果的程序:

  1. server端监听指定的tcp端口
  2. server端预先实现简单加减法的代码(可以自行扩展其他更复杂功能)
  3. client端可以通过socket连接与server端通信传输需要参数
  4. server端根据传的参数计算结果并返回
  5. client端打印返回结果
import socketserver
import threading
import logging
import cal
import re


FORMAT = "%(asctime)s %(threadName)s %(thread)d %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)


class Handler(socketserver.BaseRequestHandler):
    def setup(self) -> None:
        super().setup()

    def handle(self):
        self.request.send(b'please input a string like "1+1":')
        while True:
            try:
                data = self.request.recv(1024)
            except Exception as e:
                logging.info(e)
                data = b''
            if data == b'' or data == b'quit':
                break
            s = "".join(data.decode().split())
            result = None
            try:
                operator = re.search('[\*]|[/]|[\+]|[-]', s)[0]
                if operator == '*':
                    result = cal.mul(s)
                if operator == '/':
                    result = cal.div(s)
                if operator == '+':
                    result = cal.add(s)
                if operator == '-':
                    result = cal.sub(s)
                res = '{}={}\r\n'.format(s, result).encode()
            except Exception as e:
                logging.info(e)
                res = ''.format(e).encode()
            self.request.send(res)

    def finish(self) -> None:
        super().finish()


if __name__ == '__main__':
    addr = ('127.0.0.1', 9999)
    server = socketserver.ThreadingTCPServer(addr, Handler)
    threading.Thread(target=server.serve_forever, name='serve', daemon=True).start()
    while True:
        cmd = input('>>>')
        if cmd == 'quit':
            server.server_close()
            break

cal模块:

import re


def add(string):
    reg = re.compile(r'(?P<a>\d+)[+](?P<b>\d+)')
    a = reg.search(string).group('a')
    b = reg.search(string).group('b')
    answer = int(a) + int(b)
    return str(answer)


def sub(string):
    reg = re.compile(r'(?P<a>\d+)[-](?P<b>\d+)')
    a = reg.search(string).group('a')
    b = reg.search(string).group('b')
    answer = int(a) - int(b)
    return str(answer)


def mul(string):
    reg = re.compile(r'(?P<a>\d+)[*](?P<b>\d+)')
    a = reg.search(string).group('a')
    b = reg.search(string).group('b')
    answer = int(a) * int(b)
    return str(answer)


def div(string):
    reg = re.compile(r'(?P<a>\d+)[/](?P<b>\d+)')
    a = reg.search(string).group('a')
    b = reg.search(string).group('b')
    answer = int(a) / int(b)
    return str(answer)

写出以下操作的sql语句:

  1. 创建一个叫users的表包含username、age、sex字段
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(128) NOT NULL,
  `age` char(3) DEFAULT NULL,
  `sex` char(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

  1. 查询username为“张三”的一条纪录
SELECT * FROM users WHERE username = '张三'
  1. 查询age大于18且sex为“女“的所有纪录
SELECT * FROM users WHERE age > 18 and sex = '女'
posted @ 2021-12-30 22:28  Atlas-777  阅读(19)  评论(0)    收藏  举报