苦恼的朋友

最近,我的朋友非常没有精神,常常郁郁寡欢,我感觉他的状态很欠好,于是关心他到底怎样了,然后他就和我说了他遇到的困惑

:今年年初开端,我一直在学习编程,眼看着现在现已6月多了,半年多过去了,但是我仍是只会写“黑窗口”的程序,我感觉很没有用,不知道能做什么,为什么我只能写这样的程序呢,这样的程序有什么用呢?

:那你写了什么样的“黑窗口”程序呢?

:比如说,我学会写了“学生办理体系”的程序,我的代码是这样写的

class StudentSystem:
    def __init__(self):
        self.students = dict()
    def add_student(self, name, age):
        if name in self.students:
            print(f"{name}现已存在,不能够增加同名学生")
        else:
            self.students[name] = age
            print(f"现已成功增加了学生,名字:{name}")
    def all_students(self):
        for name in self.students:
            print(f"学生,名字:{name},年纪:{self.students[name]}")
    def find_student(self, name):
        if name in self.students:
            print(f"学生,名字:{name},年纪{self.students[name]}")
        else:
            print(f"没有找到名为{name}的学生")
    def main(self):
        while 1:
            print("\n****\t欢迎来到学生办理体系!\t****")
            print("****\t1. 增加学生\t****")
            print("****\t2. 检查一切学生\t****")
            print("****\t3. 查找一个学生\t****")
            print("****\t4. 退出体系\t****")
            c = input("请挑选一个选项 (1-4): ")
            if c == "1":
                name = input("请输入学生的名字: ")
                age = input("请输入学生的年纪: ")
                self.add_student(name, age)
            elif c == "2":
                self.all_students()
            elif c == "3":
                name = input("请输入要查找的学生的名字: ")
                self.find_student(name)
            elif c == "4":
                print("感谢您运用咱们的体系!欢迎下次莅临!")
                break
            else:
                print("您输入的有误呢,请输入正确的选项(1-4)")
if __name__ == "__main__":
    s = StudentSystem()
    s.main()

:这个代码运行今后的效果就像是这样的

我的朋友之管理数据类型的小程序的思路
:你这个代码写的很厉害啊,你这个但是运用了“面向对象”的程序规划,将一切的代码都封装到了一个类中,是非常好的完成啊,为什么你不满意呢?

:但是没有用啊,这样的程序,虽然是我花了很长的时刻才写出来的,但是谁会用呢?谁会去运用这样的程序呢?

:你这样想就不对了,假如你把你的程序改写为“微信小程序”,就能够发挥出很大的效果了,在现实世界中,有许多许多的人都会运用这样的程序,你和他们的差异仅仅在于用户界面不一样算了,没什么值得灰心丧气的!

微信小程序很厉害,我也常常运用,甚至出门吃饭,买东西都要用,但是我仍是不知道我写的程序怎样才能够做成微信小程序,我该怎样做呢?

这没什么困难的,今天,咱们就以朋友的这个学生办理体系为基础,将其改写为微信小程序的学生办理体系

体系规划

许多人可能有一个错误的主意,也便是以为完成一个学生办理体系,是很没有用的,做不了什么事情,既不能用于工作,也没有实践的运用价值,这个主意是不对的。这样的体系是否有运用价值,取决于咱们对其的规划,事实上,假如咱们规划的功用较为完善,是彻底能够使其具有运用价值的。

例如说,咱们经过创立账户,以及区分职责,别离创立学生,教师和办理员的账户,还需求能够完成以下的功用:

  • 学生信息办理:办理学生的信息(包含名字、性别、生日、联系方法、所属班级、年级),其间答应办理员增加、修正和删去学生信息
  • 教师信息办理:办理教师的信息(包含名字、性别、生日、联系方法),其间,一个教师也可能教授多个年级和班级,同样答应办理员增加、修正和删去教师信息
  • 课程信息办理:办理员能够增加、修正和删去课程信息,包含课程名称、课程描绘、授课老师、上课时刻和地点。
  • 成果办理:学生能够检查他们的成果,教师能够增加和修正学生的成果。
  • 考勤办理:教师能够记载学生的出勤状况,包含迟到、早退、请假和缺席。
  • 作业告诉:教师能够安置作业,学生能够提交作业,教师能够批改并评分。
  • 告诉与公告:办理员和教师能够发布学校新闻、活动公告和重要告诉。

当然,即使现在现已包含了许多的功用,也仍是能够扩展增加更多的功用的。比如说,学习资料和文件的上传与下载,课程视频的上传与观看,讨论区/答疑区/论坛的创立与建造等等。经过不断的增加更多的功用,完善体系,就能够做出非常有用的程序,而非一般人以为的“毫无价值”。

当然,介于时刻的缘故,因而这次咱们只完成以上规划出的7个主要功用,后续假如有需求,还能够依据主要功用,进行扩展和增加

数据存储

依据咱们期望完成的功用,能够规划出对应的存储结构

1.学生表 :存储学生的信息。

  • id:学生ID,主键

  • name:学生的名字

  • gender:学生的性别

  • birthday:学生的出生日期

  • phone:学生的联系方法

  • grade:学生所在的年级

  • class:学生所在的班级

2.教师表 :存储教师的信息。

id:教师ID,主键

name:教师的名字

gender:教师的性别

birthday:教师的出生日期

phone:教师的联系方法

3.课程表 :存储课程的信息。

  • id:课程ID,主键

  • name:课程名称

  • description:课程描绘

  • teacher_id:授课教师的ID,外键,应当相关教师表的id

  • course_info:上课时刻和地点

4.成果表 :存储学生的成果。

  • id:成果ID,主键

  • student_id:学生的ID,外键,应当相关学生表的id

  • course_id:课程的ID,外键,应当相关课程表的id

  • grade:成果

5.出勤表 :存储学生的出勤状况。

  • id:出勤记载ID,主键

  • student_id:学生的ID,外键,应当相关学生表的id

  • course_id:课程的ID,外键,应当相关课程表的id

  • status:出勤状态

  • date:出勤日期

6.作业表:存储作业告诉。

  • id:作业ID,主键

  • course_id:课程的ID,外键,应当相关课程表的id

  • description:作业描绘

  • end_date:截止日期

7.告诉表 :存储告诉和公告。

  • id:告诉ID,主键

  • title:告诉标题

  • content:告诉内容

  • date:发布日期

在挑选了合适的字段类型今后,就能够依据先前的规划,创立出所需的数据表

1.学生表

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    gender ENUM('male', 'female'),
    birthday DATE,
    phone VARCHAR(15),
    grade INT,
    class INT );

2.教师表

CREATE TABLE teachers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    gender ENUM('male', 'female'),
    birthday DATE,
    phone VARCHAR(15)
);

3.课程表

CREATE TABLE courses (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    description TEXT,
    teacher_id INT,
    course_info VARCHAR(250),
    FOREIGN KEY (teacher_id) REFERENCES teachers(id)
);

4.成果表

CREATE TABLE grades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT,
    course_id INT,
    grade FLOAT,
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

5.出勤表

CREATE TABLE attendance (
    id INT AUTO_INCREMENT PRIMARY KEY,
    student_id INT,
    course_id INT,
    status ENUM('attend', 'late', 'absent'),
    date DATE,
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

6.作业表

CREATE TABLE homework (
    id INT AUTO_INCREMENT PRIMARY KEY,
    course_id INT,
    description TEXT,
    end_date DATE,
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

7.告诉表

CREATE TABLE news (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(250),
    content TEXT,
    date DATE
);

接口规划

针对以上的功用,咱们能够规划出以下的接口

1. 学生信息办理:

  • GET /students:获取一切学生的信息

  • GET /students/{studentId}:获取指定ID的学生的信息

  • GET /students/{studentName}:获取指定名字的学生的信息

  • GET /students/{studentPhone}:获取指定联系方法的学生的信息

  • POST /students:增加新的学生信息

  • PUT /students/{studentId}:更新指定ID的学生的信息

  • DELETE /students/{studentId}:删去指定ID的学生的信息

2.教师信息办理:

  • GET /teachers:获取一切教师的信息

  • GET /teachers/{teacherId}:获取指定ID的教师的信息

  • GET /teachers/{teacherName}:获取指定名字的教师的信息

  • GET /teachers/{teacherPhone}:获取指定联系方法的教师的信息

  • POST /teachers:增加新的教师信息

  • PUT /teachers/{teacherId}:更新指定ID的教师的信息

  • DELETE /teachers/{teacherId}:删去指定ID的教师的信息

3.课程信息办理:

  • GET /courses:获取一切课程的信息

  • GET /courses/{courseId}:获取指定ID的课程的信息

  • POST /courses:增加新的课程信息

  • PUT /courses/{courseId}:更新指定ID的课程的信息

  • DELETE /courses/{courseId}:删去指定ID的课程的信息

4.成果办理:

  • GET /students/{studentId}/grades:获取指定学生的一切成果

  • POST /students/{studentId}/grades:增加指定学生的新成果

  • PUT /students/{studentId}/grades/{gradeId}:更新指定学生的指定成果

  • DELETE /students/{studentId}/grades/{gradeId}:删去指定学生的指定成果

5.考勤办理:

  • GET /students/{studentId}/attendance:获取指定学生的出勤状况

  • POST /students/{studentId}/attendance:增加指定学生的出勤记载

  • PUT /students/{studentId}/attendance/{attendanceId}:更新指定学生的指定出勤记载

  • DELETE /students/{studentId}/attendance/{attendanceId}:删去指定学生的指定出勤记载

6.作业告诉:

  • GET /homework:获取一切作业告诉

  • GET /homework/{homeworkId}:获取指定ID的作业告诉

  • POST /homework:增加新的作业告诉

  • PUT /homework/{homeworkId}:更新指定ID的作业告诉

  • DELETE /homework/{homeworkId}:删去指定ID的作业告诉

7.告诉与公告:

  • GET /news:获取一切告诉和公告

  • GET /news/{newsId}:获取指定ID的告诉或公告

  • POST /news:增加新的告诉或公告

  • PUT /news/{newsId}:更新指定ID的告诉或公告

  • DELETE /news/{newsId}:删去指定ID的告诉或公告

能够看到这里,咱们别离运用了GETPOSTPUTDELETE四种恳求方法,可能许多人会以为运用这么多种恳求方法没有必要,反而麻烦,只运用GET和POST就能够了。

其实不然,多种恳求方法的运用是有优点的,假如咱们只运用GET和POST恳求,那么,以学生信息为例

  • GET /students/{studentId}:获取指定ID的学生的信息

  • POST /students:增加新的学生信息

  • PUT /students/{studentId}:更新指定ID的学生的信息

  • DELETE /students/{studentId}:删去指定ID的学生的信息

此刻,咱们就无法再运用相同的接口地址/students/{studentId},有必要修正为

  • GET /get_students/{studentId}:获取指定ID的学生的信息

  • POST /add_students:增加新的学生信息

  • POST /modify_students/{studentId}:更新指定ID的学生的信息

  • GET /delete_students/{studentId}:删去指定ID的学生的信息

很显然,这种修正方法即使每个都起了对应的名字,也是不如直接运用PUT,DELETE这样的恳求方法直观而清晰的。因而,在实践中,挑选合适的恳求方法也是必要的,并非总是只运用GET和POST两种恳求

也能够看到,这里咱们别离运用了多个不同的接口,来别离对应不同的功用,如下所示

  • GET /students/{studentId}:获取指定ID的学生的信息

  • GET /students/{studentName}:获取指定名字的学生的信息

  • GET /students/{studentPhone}:获取指定联系方法的学生的信息

当然,假如不喜欢增加接口的数量的话,也能够挑选运用恳求参数的方法,例如

  • GET /get_students:获取学生的学生信息

  • GET /get_students?id=指定ID

  • GET /get_students?name=名字

  • GET /get_students?phone=电话

页面制造

同样的,依据咱们期望完成的功用,制造所需求的微信小程序的页面,这些页面都应该增加到pages中

  1. 主页(index):在主页上能够展现放置重要的告诉和公告,也能够展现当时运用的用户的基本信息,如名字、班级。
  2. 登录页(login):用户能够经过此页面登录,需求经过微信小程序授权登录
  3. 学生信息页(students):该页面用于展现学生的一切信息。假如用户是办理员的话,还能够在这个页面上增加、修正和删去学生信息。
  4. 教师信息页(teachers):该页面用于展现教师的一切信息。假如用户是办理员的话,还能够在这个页面上增加、修正和删去教师信息。
  5. 课程信息页(courses):该页面用于展现课程的一切信息。假如用户是办理员的话,还能够在这个页面上增加、修正和删去课程信息。
  6. 成果页(grades):该页面用于展现学生的一切成果。假如用户是教师的话,还能够在这个页面上增加和修正学生成果。
  7. 出勤页(attendance):该页面展现学生的一切出勤记载。假如用户是教师的话,还能够在这个页面上增加和修正出勤的记载。
  8. 作业页(homework):该页面展现一切作业告诉。学生能够在此页面上检查作业,教师能够在此页面上发布和批改作业。

最终成果

朋友看完了我做的微信小程序的学生办理体系今后,不由连连称奇,“真没想到,扩展了功用,更换了显示方法今后,一个简单的学生办理体系,都能够发挥出这么大的效果,编程真是太棒了。现在我终于找到了学习的方向了,知道今后该怎样做了。今后,我也要学习制造微信小程序。”

我的朋友之管理数据类型的小程序的思路

看着朋友从头振作起来,我也是非常的欣喜,其实学习编程便是这样,看起来很不起眼,“没什么用”的常识,其实未来都能够发挥出大效果。因而,关于程序的初学者来说,仅仅是一时写的程序不能够真实的在现实中运用,是很正常的,彻底不需求心灰意冷。重要的是,学习到了这些“黑窗口”的常识,未来有一天,都能够在更宽广的天空下发挥效果。