Web学生管理程序

Web学生管理程序:
学生的记录包括学号No、姓名Name、性别Sex与年龄Age,服务器的作用是建立与维护一个Sqlliite的学生数据库students.db中的学生记录表students:
create table students(No varchar(16)primary key,Name varchar(16),Sex varchar(8),Age int)服务器建立一个Web网站,同事提供查询学生记录、增加学生记录、删除学生记录等接口服务。服务器为了与客户端通讯,建立了一个opt的参数。

opt值含义
init初始化学生表
insert增加学生
delete删除学生
获取学生记录
  • 代码如下
"""
@Function:学生管理服务器程序
@Author  :王育红
@Date    :2020/8/31
"""
import flask
import sqlite3
import json

app = flask.Flask(__name__)


class StudentDB:
    # 通过学生类打开一个数据库,采用sqlite3connect来连接
    def openDB(self):
        self.con = sqlite3.connect("students.db")
        # 获取Cursor游标对象,用于执行sql语句并获得结果
        self.cursor = self.con.cursor()

    # 关闭连接
    def closeDB(self):
        self.con.commit()
        self.con.close()

    # 创建一个学生表
    def initTable(self):
        res = {}
        try:
            self.cursor.execute("create table students (No varchar(16) primary key,Name varchar(16),Sex varchar(8),"
                                "Age int)")
            res["msg"] = "OK"
        except Exception as err:
            res["msg"] = str(err)
            return res

    # 插入学生表
    def insertRow(self, No, Name, Sex, Age):
        res = {}
        try:
            self.cursor.execute("insert into students(No,Name,Sex,Age) values(?,?,?,?)", (No, Name, Sex, Age))
            res["msg"] = "OK"
        except Exception as err:
            res["msg"] = str(err)
        return res

    # 删除学生表
    def deleteRow(self, No):
        res = {}
        try:
            self.cursor.execute("delete from students where No=?", (No,))
            res["msg"] = "OK"
        except Exception as err:
            res["msg"] = str(err)
        return res

    # 获取学生的所有信息
    def selectRows(self):
        res = {}
        try:
            data = []
            self.cursor.execute("select * from students order by No")
            rows = self.cursor.fetchall()
            for row in rows:
                # 每一个学生记录都是一个字典
                d = []
                d["No"] = row[0]
                d["Name"] = row[1]
                d["Sex"] = row[2]
                d["Age"] = row[3]
                data.append(d)
            res["msg"] = "OK"
            res["data"] = data
        except Exception as err:
            res["msg"] = str(err)
        return res


@app.route("/", methods=["GET", "POST"])
def process():
    # 获取opt的值
    opt = flask.request.values.get("opt") if "opt" in flask.request.values else ""
    res = {}
    # 创建数据库
    db = StudentDB()
    db.openDB()
    if opt == "init":
        res = db.initTable()
    elif opt == "insert":
        No = flask.request.values.get("No") if "No" in flask.request.values else ""
        Name = flask.request.values.get("Name") if "Name" in flask.request.values else ""
        Sex = flask.request.values.get("Sex") if "Sex" in flask.request.values else ""
        Age = flask.request.values.get("Age") if "Age" in flask.request.values else ""
        res = db.insertRow(No, Name, Sex, Age)
    elif opt == "delete":
        No = flask.request.values.get("No") if "No" in flask.request.values else ""
        res = db.deleteRow(No)
    else:
        res = db.selectRows()
    db.closeDB()
    return json.dumps(res)


if __name__ == '__main__':
    app.run()

  • 学生程序:
    A.如果客户端服务器发送opt = “init”,那么服务器创建students表,并返回是否创建成功,如果成功就返回{“msg”:“OK”};
    B.如果客户端服务器发送opt = “insert”,同时发送No,Name,Sex,Age参数,那么服务器向数据库表插入一条学生记录,并返回是否插入成功,如果成功就返回{“msg”:“OK”};
    C.如果客户端服务器发送opt = “delete”,同时发送No参数,那么服务器从数据库表中删除学号为No的一条学生记录,并返回是否删除成功,如果成功就返回{“msg”:“OK”};
    D.如果客户端不向服务器发送opt参数值,那么服务器获取所有学生记录返回给客户端,如果成功就返回{“msg”:“OK”, “data”:“rows”},其中rows是学生记录行的列表。
  • 话不多说,提供代码如下:
"""
@Function:学生管理客服端程序
@Author  :王育红
@Date    :2020/8/31
"""
import urllib.request
import json


# 创建一个student的对象
class Student:
    def __init__(self, No, Name, Sex, Age):
        self.No = No
        self.Name = Name
        self.Sex = Sex
        self.Age = Age

    def show(self):
        # 打印方法
        print("%-16s%-16s%-8s%-4d" % (self.No, self.Name, self.Sex, self.Age))


students = []
# http的网址
url = "http://127.0.0.1:5000"


# 显示所有的学生
def listStudents():
    global students
    print("%-16s%-16s%-8s%-4s" % ("No", "Name", "Sex", "Age"))
    for s in students:
        # 调用show函数
        s.show()


# 插入学生记录
def insertStudent(s):
    global students
    i = 0
    while (i < len(students) and s.No > students(i).No):
        i = i + 1
    # 判断表格里面是否存在
    if (i < len(students) and s.No == students[i].No):
        print(s.No + "already exists")
        return False
    students.insert(i, s)
    return True


# 删除学生记录
def deleteRow():
    global students
    No = input("No=")
    if (No != ""):
        for i in range(len(students)):
            if (students[i].No == No):
                sr = ""
                try:
                    st = "No=" + urllib.request.quote(No)
                    st = st.encode()
                    # 找到No就调用urllib.request.urlopen
                    content = urllib.request.urlopen(url + "?opt=delete", st)
                    st = content.readline()
                    # 通过json解析数据
                    st = json.loads(st.decode())
                    st = st["msg"]
                except Exception as exp:
                    st = str(exp)

                if (st == "OK"):
                    del students[i]
                    print("删除成功")
                else:
                    print(st)
                break


# 插入学生记录
def insertRow():
    # 获取学生的学号、姓名、性别
    No = input("No=")
    Name = input("Name=")
    while True:
        Sex = input("Sex=")
        if (Sex == "男" or Sex == "女"):
            break
        else:
            print("Sex is not valid")
    Age = input("Age=")
    if (Age == ""):
        Age = 0
    else:
        Age = int(Age)
    if No != " " and Name != " ":
        s = Student(No, Name, Sex, Age)
        for x in students:
            if (x.No == No):
                print(No + "already exists")
                return
        st = ""
        try:
            # 调用远程数据
            st = "No=" + urllib.request.quote(No) + "&Nmae=" + urllib.request.quote(
                Name) + "&Sex=" + urllib.request.quote(Sex) + "&Age=" + str(Age)
            st = st.encode()
            content = urllib.request.urlopen(url + "?opt=insert", st)
            st = content.read()
            st = json.loads(st.decode())
            st = st["msg"]
        except Exception as exp:
            st = str(exp)

        if (st == "OK"):
            insertStudent(s)
            print("增加成功")
        else:
            print(st)

    else:
        print("学号、姓名不能为空")

# 初始化
def initialize():
    st = ""
    try:
        content = urllib.request.urlopen(url + "?opt=init")
        st = content.read()
        st = json.loads(st.decode())
        st = st["msg"]
    except Exception as exp:
        st = str(exp)

    if (st == "OK"):
        print("初始成功")
    else:
        print(st)
    return st

# 读取学生记录
def readStudent():
    global students
    try:
        students.clear()
        content = urllib.request.urlopen(url)
        data = b""
        while True:
            buf = content.read(1024)
            if (len(buf) > 0):
                data = data + buf
            else:
                break
        data = data.decode()
        # 反系列结构化的数据
        data = json.loads(data)
        if data["msg"] == "OK":
            data = data["data"]
            for d in data:
                s = Student(d["No"], d["Name"], d["Sex"], d["Age"])
                students.append(s)
    except Exception as exp:
        print(exp)


try:
    readStudent()

    while True:
        # 打印菜单
        print("")
        print("***学生名单***")
        print("0.初始化学生表")
        print("1.查看学生列表")
        print("2.增加学生记录")
        print("3.删除学生记录")
        print("4.退出这个程序")
        s = input("请选择(0,1,2,3,4):")
        if (s == "0"):
            initialize()
        elif (s == "1"):
            listStudents()
        elif (s == "2"):
            insertRow()
        elif (s == "3"):
            deleteRow()
        elif (s == "4"):
            break
except Exception as exp:
    print(exp)

  • 查看运行结果:
    先运行服务端先运行服务端

在这里插入图片描述
在这里插入图片描述

  • 说明:客户端与服务端是相互协商起来工作的,客户端我们可以把相应的数据进行读取,从服务器那里进行读取即url读取,不传入任何参数,数据可能有点大,可以一次性读出来,也可以采用分段的方法。读取的数据放入data中就进行翻译,编译成字符串,用json的方法把他反序列化成为一个机构化的数据,这个数据就是students的列表,然后再运行这个列表,把它创建成student的对象,加到students的列表当中,这就是客户端。客户端用student的对象来维护学生记录的,所有我们把转化成为studens的列表。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【摘 要】:学生成绩管理是学校教学工作的一个重要的组成部分,长期以来,学校都是手工来完成学生成绩的计算、排序等管理工作。随着科学技术的突飞猛进,信息技术和网络技术被广泛应用,计算机的高效性和准确性可以把工作人员从繁杂的学生成绩管理工作中解脱出来。本论文中的基于WEB学生成绩管理系统是使用IIS(Internet Information Server)+ASP(Active Server Page)+SQL查询语言+FLASH+ACCESS数据库来实现的。该系统主要包括五个模块:成绩录入模块、成绩查询模块、系统维护模块、成绩汇总模块、报表输出模块。 【关键字】:WEB ASP ACCESS FLASH SQL 成绩查询 一、背景分析 1.1 成绩查询系统的背景分析及必要性 随着信息技术的飞速发展,计算机和网络在学校的教育教学领域发挥着越来越重要的作用,学校管理、教师授课、学生学习已经离不开信息技术的支持。学生的成绩管理对于教师的学校的教学管理、教师的教学水平提高和学生的学习成绩进步来说都起着至关重要的作用。一直以来学生的成绩管理都要靠人工的方式来完成,是一个非常繁重的工作,使用人工计算和管理效率低、保密性差,而且历年的数据很不利于保存。使用计算机的数据处理功能对学生成绩进行信息化管理,可以实现数据的长期保存,而且检索迅速、安全性高、保存成本低、寿命长、存储数据量大,有着许多人工管理无法比拟的优势,可以减轻教师的工作压力。管理信息系统是进行信息的采集、存储、加工、维护和使用的系统,其强大的功能已为人们深知,它已经融入了人们生活的各个领域,并发挥着越来越重要的作用。 1.2成绩查询系统设计的功能需求及开发目标分析 本文中所论述的基于WEB学生成绩查询系统将计算机技术与传统的教育教学工作相结合,为用户提供实现学生成绩的录入、修改、查询、删除等操作,主要设计目标有: (1)系统具有安全性,只有授权的用户可以执行对数据的授权操作,未授权的用户不可以访问此系统; (2)系统具有实用性,使用ASP+ACCESS+IIS来实现,服务器架设方便,对运行环境要求较低,可以在网络上发布,方便多用户同时访问; (3)不同的用户登录后有不同的权限,管理员具有所有的权限,可以执行对教师、学生基本信息的添加、修改、删除、查询等操作和对查询系统的设置;教师用户只能对其体所任教学科和年级的学生进行添加、修改、删除、查询和修改自己的基本信息等操作;学生用户登录后可以查询自己成绩、查询或修改个人基本信息。 1.3 运行环境及开发工具分析 该系统采用C/S模式,为了使成绩查询系统能够稳定、可靠地运行,需要配置一台硬件配置稍高一些的计算机做为服务器,需要安装Windows 2000/ 2003/2008等服务器版的操作系统,并安装Internet Information Server 4/5 服务,安装Microsoft Office的Access 2000/2003/2007数据库;客户机则可以使用普通的PC,可以使用WINDOWS95、98/ME/2000/XP/VISTA操作系统,浏览器可以使用Internet Explorer6/7或Firefox等。 (1)IIS。由于该系统需要在网络环境中运行,考虑到安装方便、配置容易、使用简单等因素,本系统使用微软的IIS来提供WEB服务。 ....... (含论文及源程序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值