精华内容
下载资源
问答
  • 写在前面: 这是我学习的Linux入门笔记,我会分三篇写出,最后我还会总结Linux的常用命令,这个系列可以让你入门学会Linux命令,手写笔记。本套笔记使用了:xshell,...脚把脚教学,转载请声明,毕竟写了好久! 公众...

    写在前面: 这是我学习的Linux入门笔记,我会分三篇写出,最后我还会总结Linux的常用命令,这个系列可以让你入门学会Linux命令,手写笔记。本套笔记使用了:xshellxftpVmCentOS6 (分三篇) 若你喜欢点赞支持^ _ ^

    Linux也是后端开发者需要学习的内容,很多服务器都使用了Linux,因此需要学习Linux命令来操作。
    脚把脚教学,转载请声明,毕竟写了好久!过几天整理常用命令。
    公众号: 小白编码

    Linus介绍:

    林纳斯·本纳第克特·托瓦兹 Linux之父

    Linus 曾经公开表示,学生时期的他本来是想购买 PC 操作系统的,但是昂贵的价格实在让人望而却步,于是只好告诉自己说,“哎好吧,我需要自己写出来了。”然后他就写出来了。他响应GUN计划,写出了可开源的Linux系统。

    Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的

    Git版本控制工具,Linus只用了2个星期时间写出。可见他是一个多牛逼的人物。

    Linus与他的吉祥物:
    在这里插入图片描述

    Linux介绍:

    Linux,全称GNU/Linux,是一套免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年第一次释出,它主要受到Minix和Unix思想的启发,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统

    Linux主要发行版: Ubuntu(乌班图)、 **RedHat(红帽)、**CentOS、Debain[蝶变]、Fedora、SuSE、OpenSUSE

    常用的: Ubuntu(乌班图),CentOS,RedHat(红帽)

    Linux与Windows比较

    在这里插入图片描述

    LInux领域:

    linux在服务器领域的应用是最强的

    linux免费、稳定、高效等特点在这里得到了很好的体现,近些年来linux服务器市场得到了飞速的提升,尤其在一些高端领域尤为广泛。

    个人桌面领域的应用

    此领域是传统linux应用最薄弱的环节,传统linux由于界面简单、操作复杂、应用软件少的缺点,一直被windows所压制,但近些年来随着ubuntu、fedora [fɪˈdɔ:rə] 等优秀桌面环境的兴起,同时各大硬件厂商对其支持的加大,linux在个人桌面领域的占有率在逐渐的提高。

    一、★linux文件目录(必须熟悉)

    linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录

    在Linux世界里,一切皆文件。

    在这里插入图片描述

    重点目录:

    /bin [重点] (/usr/bin、/usr/local/bin)
    • 是Binary的缩写, 这个目录存放着最经常使用的命令

    /home [重点]
    存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
    /root [重点]
    • 该目录为系统管理员,也称作超级权限者的用户主目录

    /etc [重点]
    • 所有的系统管理所需要的配置文件和子目录 my.conf
    /usr [重点]
    • 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。

    /boot [重点]
    • 存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

    /media [重点]
    • linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。

    /mnt [重点]
    • 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。

    /opt [重点]
    • 这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。
    默认为空。
    /usr/local [重点]
    • 这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
    /var [重点]
    • 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件

    /selinux [security-enhanced linux]360
    • SELinux是一种**安全子系统,**它能控制程序只能访问特定文件

    /sbin(/usr/sbin、/usr/local/sbin)
    • s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序

    /dev
    • 类似于windows的设备管理器,把所有的硬件用文件的形式存储。

    /lib
    • 系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
    /lost+found
    • 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。

    /proc
    • 这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
    /srv
    • service缩写,该目录存放一些服务启动之后需要提取的数据。
    /sys
    • 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sy
    /tmp
    • 这个目录是用来存放一些临时文件的。

    Vi与Vim模式

    所有的Linux 系统都会内建vi 文本编辑器

    Vim 具有程序编辑的能力,可以看做是Vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计。

    ★Vi和Vim的三种常用模式

    • 正常模式:(#vim 文件名进入)

      vim打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用『上下左右』按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用『复制、贴上』来处理你的文件数据。

    • 插入模式:(进入正常模式后按以下字母进入插入模式)

      按下i, I, o, O, a, A, r, R等任何一个字母之后才会进入编辑模式, 一般来说按i即可.

    在这里插入图片描述

    • 命令行模式(:wq写入保存退出)

      在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim 、显示行号等的动作则是在此模式中达成的
      在这里插入图片描述

    • vi和vim快捷键介绍:(常用的一些)

      1)按在当前行按yy拷贝当前行内容,按p粘贴

      1. 删除当前行dd, 删除当前行向下的5行5dd
      2. 在文件中查找某个单词[命令行下/关键字,回车查找, 输入n 就是查找下一个]
      3. 设置文件的行号,取消文件的行号.[命令行下: set nu和:set nonu]

    在这里插入图片描述
    5) 在正常模式使用快捷键到底文档的最末行[G]和最首行[gg]
    6) 在一个文件中输入"hello" ,撤销这个动作按u
    7) 编辑/etc/profile 文件,并将光标移动到20行shift+g

    • Vi与Vim键盘图(提高开发速度)

    在这里插入图片描述

    关机&重启

    • shutdown -h now 表示立即关机
    • shudown -h 11 表示1分钟后会关机
    • shutdown –r now 立即重新启动计算机
    • halt 关机
    • reboot 立即重新启动计算机
    • sync把内存的数据同步到磁盘
    • logout 注销指令在图形运行级别无效,在运行级别3下有效

    细节:

    当我们关机或重启时,一般执行sync指令先保存数据的同步,再重启或关机。

    ★用户(添加与删除)

    用户概述图:

    在这里插入图片描述

    • Linux系统是一个多用户多任务的操作系统,任何一个要使用系统用户都要向系统管理员申请一个账号,然后以这个账号身份进入系统
    • Linux用户至少属于一个组

    添加用户:(useradd 用户名)

    • useradd xm 添加小明 (会自动创建同名的家目录)

    在这里插入图片描述

    • useradd -d指定目录 新的用户名
    • useradd -d /home/person xl创建家目录为person的 xl
      在这里插入图片描述

    用户设置密码:

    • passwd 用户名 (给xl设置密码)

    在这里插入图片描述

    删除用户:

    • userdel 用户名 删除

    • userdel xl删除lx,但保留xl的家目录(一般使用这种方式)

    • userdel -r xm 删除用户名 并且删除家目录

    查询用户信息

    • id 用户名
      在这里插入图片描述

    切换用户

    • su -切换用户名 (高权限切换低权限不需要密码,反之需要)

    • 案例:su - xm从root切换到xm账户,此时不用输入密码
      在这里插入图片描述
      此时若xm想使用root的文件,权限不够
      在这里插入图片描述

    • 案例,从xm切换root用户(此时需要密码)
      在这里插入图片描述

    • exit切换回上个用户(xm 切换root)(不需要密码)
      在这里插入图片描述

    • 查看当前用户whoami/who am i
      在这里插入图片描述

    用户组

    类似于角色,系统可以对有共性的多个用户进行统一的管理。

    • 创建组 groupadd 组名
    • 删除组 groupdel 组名
      在这里插入图片描述
    • 增加用户时直接加上指定组useradd -g 组 + 用户名
      在这里插入图片描述
    • 修改用户的组usermod -g 用户组 用户名
    • 案例: 创建tes2t组让xq用户修改到test2组:
      在这里插入图片描述

    用户和组的配置文件目录

    用户配置文件(用户信息) /etc/passwd

    每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    组配置文件(组信息)/etc/group

    每行含义: 组名:口令:组标识号:组内用户列表

    口令 配置文件(密码和登陆信息,是加密的)/etc/shadow

    **每行的含义:**登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

    ★实用指令篇

    ★运行级别介绍 linux中设置了7个级别

    0:关机

    1:单用户【找回丢失密码】

    2:多用户状态没有网络服务

    3:多用户状态有网络服务

    4:系统未使用保留给用户

    5:图形界面

    6:系统重启

    常用级别:3/5

    在这里插入图片描述

    系统的运行级别配置文件/etc/inittab

    切换到指定运行级别的指令

    Init [0123456] 基本语法

    面试题:★如何找回root密码

    1.先进入到 单用户模式,然后修改root 密码。因为单用户模式,root不需要密码就可以登陆。

    第一步:回车键进入了 按e进入第二步
    在这里插入图片描述

    第二步: 选中第二行按e进入第三步

    在这里插入图片描述

    第三步:在这行最后输入 空格 1,再输入 回车

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rQ6gQ6Wg-1588132957252)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200428164345366.png)]

    第四步:再次输入 b 进入第五步

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vPDSJZvs-1588132957253)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200428164440294.png)]

    第五步:进入了单用户模式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5RFIV7tJ-1588132957254)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200428164626661.png)]

    第六步:输入passwd 命令修改root密码,然后可以输入init 0关机

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eiye3YWS-1588132957255)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200428164739661.png)]

    帮助指令:

    man[命令或配置文件]获得帮助信息
    man ls查看命令的帮助信息
    help 命令(获得shell命令的帮助信息)
    ifconfig

    文件目录类

    • pwd(显示当前工作目录的绝对路径)
      在这里插入图片描述

    ★ls [选项] [目录或文件]

    • a :显示当前目录所有的文件和目录,包括隐藏的。
    • l :以列表的方式显示信息
      用法演示:
      ls查看所有目录文件
      ls -l以列表的方式显示信息
      在这里插入图片描述

    ls -al 显示当前目录所有的文件和目录,包括隐藏的。在这里插入图片描述

    ★cd 指令

    • cd 【参数】 进入指定目录
      • 常用参数
      绝对路径和相对路径
      cd ~ 或者cd :回到自己的家目录
      cd ..回到当前目录的上一级目录
      在这里插入图片描述

    ★mkdir指令

    • 基本语法 mkdir指令用于创建目录
      mkdir [选项] 要创建的目录
      在这里插入图片描述
      p:创建多级目录 mkdir -p + 目录
      在这里插入图片描述

    ★rmdir指令

    • 基本语法rmdir删除指定空目录
      rmdir [选项] 要删除的空目录

    在这里插入图片描述

    • 使用细节
      rmdir 删除的是空目录,如果目录下有内容时无法删除的。提示:如果需要删除非空目录,需要使用 rm -rf 要删除的目录
      在这里插入图片描述

    touch指令

    • touch指令创建空文件
      基本语法touch 文件名称

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tuPiqC6A-1588133978254)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200428183841740.png)]
    还可以创建多个文件
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9oJD4dCL-1588133978255)(C:\Users\JUN\AppData\Roaming\Typora\typora-user-images\image-20200428184001163.png)]

    ★cp指令

    • cp 指令拷贝文件到指定目录
      基本语法cp [选项]
      常用选项 r :递归复制整个文件夹
      案例1: 将/home/aaa.txt 拷贝到 /home/bbb 目录下
      在这里插入图片描述
      案例2:递归复制整个文件夹cp -r 源目录文件夹/ 目的目录文件夹/
      在这里插入图片描述
      \cp强制覆盖就不用麻烦的输入y确认覆盖文件
      在这里插入图片描述

    ★rm指令

    • rm 指令移除文件或目录
      基本语法rm [选项] 要删除的文件或目录
      常用选项
      rm -r :递归删除整个文件夹
      rm -f :强制删除不提示
      • 应用实例
      案例1: 将/home/aaa.txt 删除
      在这里插入图片描述
      案例2: 递归删除整个文件夹 /home/bbb(强制删除) 小心使用!
      在这里插入图片描述

    ★mv

    • mv 移动文件与目录或重命名
      基本语法
      mv oldNameFile newNameFile (功能描述:重命名)
      mv /temp/movefile /targetFolder (功能描述:移动文件)
      应用实例
      案例1: 将/home/aaa.txt 文件重新命名为bbb.txt
      在这里插入图片描述
      案例2: 将/home/bbb.txt 文件移动到/root 目录下
      在这里插入图片描述

    cat 指令

    • cat查看文件内容
      基本语法cat [选项] 要查看的文件
      常用选项n :显示行号
      案例1: /root/bbb.txt 文件内容,并显示行号
      在这里插入图片描述
      细节:
      cat 只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令| more
      如:cat -n /etc/profile | more

    more指令

    • more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。 more指令中内置了若干快捷键,详见操作说明
      基本语法:more 要查看的文件

    快捷键:

    操作 功能说明
    空白键(space) 代表向下翻一页;
    Enter 代表向下翻『一行』;
    q 代表立刻离开more ,不再显示该文件内容。
    Ctrl + F 向下滚动一屏
    Ctrl + B 返回上一屏
    = 输出当前行的行号
    :f 输出文件名和当前行的行号

    less指令

    • less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效.
      基本语法 less 要查看的文件

    快捷键:

    操作 功能说明
    空白键 向下翻动一页。
    [pagedown] 向下翻动一页。
    [pageup] 向上翻动一页;
    /字串 向下搜寻『字串』的功能;n:向下查找;N:向上查找;
    ?字串 向上搜寻『字串』的功能;n:向上查找;N:向下查找;
    q 离开less 这个程序;

    >指令和 >>指令

    • >输出重定向:会将原来的文件的内容覆盖
    • >> 追加:不会覆盖原来文件的内容,而是追加到文件的尾部

    基本语法
    1)ls -l >文件 功能描述:列表的内容写入文件a.txt中(覆盖写))
    案例: ls -l > a.txt 将ls 的内容写入a.txt中
    在这里插入图片描述
    2)ls -al >>文件(功能描述:列表的内容追加到文件aa.txt的末尾)
    3) cat 文件1 > 文件2(功能描述:将文件1的内容覆盖到文件2)
    4) echo "内容">> 文件 (添加引号内容到指定文件内)
    4)的案例演示:
    在这里插入图片描述

    echo命令

    • echo输出内容到控制台
      基本语法: echo [选项] [输出内容]
      案例: 使用echo 指令输出环境变量
      在这里插入图片描述

    head指令

    • head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
      基本语法:
      head 文件 (功能描述:查看文件头10行内容)
      head -n 5文件 (功能描述:查看文件头5行内容,5可以是任意行数)
      案例: 查看/etc/profile 的前面5行代码
      在这里插入图片描述

    tail指令

    • tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。
      基本语法:
      tail 文件 (功能描述:查看文件头10行内容)
      tail -n 5 文件(功能描述:查看文件头5行内容,5可以是任意行数)
      tail -f 文件(功能描述:实时追踪该文档的所有更新)(常用)
      案例1: 查看/etc/profile 最后5行的代码
      在这里插入图片描述

    ln 指令

    • 软链接也成为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
      基本语法
      ln -s [原文件或目录] [软链接名](功能描述:给原文件创建一个软链接)

    案例1: 在/home 目录下创建一个软连接 linkToRoot,连接到/root 目录
    在这里插入图片描述当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录。

    ★history指令

    • history查看已经执行过历史命令,也可以执行历史指令
      基本语法:history(功能描述:查看已经执行过历史命令)

    案例: 显示最近使用过的10个指令。
    在这里插入图片描述


    篇一总结:

    以上就是Linux第一天的总体内容,接下来还有两篇,希望我的笔记能够帮助大家,若对你有帮助的话可以点赞支持我 ^ _^
    转载请声明:谢谢,写的很累!
    公众号:小白编码

    展开全文
  • 返回:贺老师课程教学链接【项目2-玩转日期和时间】 定义个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。 提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计...

    返回:贺老师课程教学链接

    【项目2-玩转日期和时间】
    定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
    提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计一个函数,即刻进行测试,以降低复杂度。
    要实现的功能是:
    (1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
    (2)输出该日在本年中是第几天(注意闰年问题);
    (3)输出这是这一天中的第几秒;
    (4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
    (5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出。
    [参考解答]

    整体的考虑

      最后编好的程序的结构应该如下所示,其中所需要设计,一是存储数据所用的数据结构——结构体,二是整个程序的框架,除了main()函数之外,还要有一系列的其他函数作为支撑。在严格的软件工程中,需要提前将所需要的函数(工程中称之为模块)设计出来,而在学习语法阶段,不妨也便宜行事,需要什么写什么,这样做更快一些。在此基础上,main()函数只要按照题目中的要求,或输入,或调用函数,逐个地写出来即可。
      所以,这个程序最后的结构会是:

    #include <stdio.h>
    struct Time
    {
        int year;
        int month;
        int day;
        int hour;
        int minute;
        int second;
    };
    
    
    //待设计的一大堆函数,是哪些,暂不考虑
    
    int main()
    {
        struct Time t;
        //(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
        printf("请输入一个时间(包括年,月,日,时,分,秒):\n");
        getTime(&t);      //输入将不会是很简单的一两条语句,写个函数完成
        outputTime(t);   //马上验证输入,很自地完成
    
    
        //(2)输出该日在本年中是第几天(注意闰年问题);
        printf("这是这一年中的第%d天。\n", dayOfYear(t)); //设计专门的函数完成
    
    
        //(3)输出这是这一天中的第几秒;
        printf("这是这一天中的第%d秒。\n", secondOfDay(t));//设计专门的函数完成
    
    
        //(4)输出这是这一年中的第几秒;
        printf("这是这一年中的第%d秒。\n", dayOfYear(t)*24*3600+secondOfDay(t));
    
    
        //(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;
        scanf("%d", &d);
        printf("这一天后%d天是:", d);
        outputTime(afterDays(t,d));
    
    
        //(6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;
        scanf("%d", &d);
        printf("这一时的后%d秒是:", s);
        outputTime(afterSeconds(t,s));
    
    
        //到此任务完成
        return 0;
    }

      胖子是一口一口吃出来的,程序得一点一点写出来,做一些,就测试一点,保证局部不要出问题。不要妄图全写完了才去测试,医生说食物摄取过量,老百姓讲是吃撑了。

    完成第(1)个要求,测试通过键盘输入进行即可

      在这样一种指导思想下,先完成第(1)个要求,主要是写出自定义函数来。将需要多次用到的功能,例如,输入中要保证范围的要求,也“抽象”一下,做成函数getNum()。不少成员的取值范围是确定的,但每月的天数并不都一样有些麻烦,设计一个函数daysOfMonth()实现,将有利于整个程序的简洁。
      参考代码可以如下:

    #include <stdio.h>
    struct Time
    {
        int year;
        int month;
        int day;
        int hour;
        int minute;
        int second;
    };
    
    //输入一个限定范围内的整型数值
    int getNum(char *prompt, int min, int max)
    {
        int value=-1;
        printf("输入%s,范围[%d, %d]:", prompt, min, max);
        do
        {
            scanf("%d", &value);
        }
        while(value<min || value>max);
        return value;
    }
    
    //返回y年m月的天数
    int daysOfMonth(int m,int y)
    {
        int days;
        switch(m)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            days=31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days=30;
            break;
        case 2:
            if((y%4==0&&y%100!=0)||y%400==0)
                days=29;
            else
                days=28;
        }
        return days;
    }
    
    //输入时间,参数为指针,可以影响实参的值
    void getTime(struct Time *p)
    {
        p->year=getNum("年",0,3000); //getNum()用于输入一定范围内的数
        p->month=getNum("月",1,12);
        p->day=getNum("日",1,daysOfMonth(p->month, p->year));
        p->hour=getNum("时",0,24);
        p->minute=getNum("分",0,59);
        p->second=getNum("秒",0,59);
    }
    
    //输出时间
    void outputTime(struct Time t)
    {
        printf("时间为: %d年%d月%d日%d时%d分%d秒\n",t.year,t.month,t.day,t.hour,t.minute,t.second);
    }
    
    int main()
    {
        struct Time t;
        //(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
        printf("请输入一个时间(包括年,月,日,时,分,秒):\n");
        getTime(&t);
        outputTime(t);
        return 0;
    }

      从做练习的角度,程序就是完成了。要完成测试,关键是保证输入时数据取值范围是否能够得到保证,于是需要多次地启动程序,输入各种不同的时间,看是否能体现设计时的限制。需要考虑到的情形包括:
    2013年1月20日3时4分5秒 //中规中矩的输入
    2012年3月31日3时4分5秒 //重点考察取日期的“边界值”是否接受,类似地可以用其他月份检查,还可以设计出多种情形
    ……
    2013年2月29日3时4分5秒 //2013不是闰年,这个输入会如何处理
    2012年2月29日3时4分5秒 //2012是闰年,这个输入会如何处理
    2013年13月45日33时4分5秒 //各种的“捣乱”,这在测试中是必须的
      通过这样的多次运行多次输入查看结果是可行的。但是,如果考虑一次运行程序,可以支持多次输入对不同情形进行测试,那自然是更方便的事了。其实,写一个循环,那也不是难事。事实上,这是工程中更常用的方式。
      在这种思路下,main()函数这样写。

    int main()
    {
        struct Time t;
        do
        {
            printf("请输入一个时间(包括年,月,日,时,分,秒):\n");
            getTime(&t);
            outputTime(t);
        }while(t.year>0); //输入0年某月某日测试即结束,测试过程由人可控
        return 0;
    }

      这只是测试所需要的一部分内容。这样测试出的程序,质量信心必涨!好产品得经过严格的测试,放在程序设计中也是这样。

    完成第(2)个要求,测试不再靠键盘输入

      实现功能角度,增加一个函数dayOfYear()即可。涉及到测试时,要靠着键盘输入,那可就烦恼大了:改一点程序,输入若干数据测试,发现错误,改程序,再运行,输入测试数据。这时,可以采用的方法是,用测试用到的数据直接初始化结构体。再进一步,一组测试数据,一起测试,用结构体数组保存数据,测试过程做一个循环。
      实现了的函数和测试用的main()函数如下所示,实现任务(1)中的函数保留不动,它们是整个任务中的一部分,况且(2)任务可能会用到前面的劳动成果,删除不必要。
      参考程序如下:

    #include <stdio.h>
    struct Time
    {
        int year;
        int month;
        int day;
        int hour;
        int minute;
        int second;
    };
    
    //输入一个限定范围内的整型数值
    int getNum(char *prompt, int min, int max)
    {
        int value=-1;
        printf("输入%s,范围[%d, %d]:", prompt, min, max);
        do
        {
            scanf("%d", &value);
        }
        while(value<min || value>max);
        return value;
    }
    
    //返回y年m月的天数
    int daysOfMonth(int m,int y)
    {
        int days;
        switch(m)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            days=31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days=30;
            break;
        case 2:
            if((y%4==0&&y%100!=0)||y%400==0)
                days=29;
            else
                days=28;
        }
        return days;
    }
    
    //这天是这一年的第几天
    int dayOfYear(struct Time t)
    {
        int days=0;
        int m=1;
        while(m<t.month)  //前若干月的天数加起来
        {
            days+=daysOfMonth(m,t.year);  //充分利用已经设计的函数
            ++m;
        }
        days+=t.day; //再加上本月的天数
        return days;
    }
    
    //输入时间,参数为指针,可以影响实参的值
    void getTime(struct Time *p)
    {
        p->year=getNum("年",0,3000); //getNum()用于输入一定范围内的数
        p->month=getNum("月",1,12);
        p->day=getNum("日",1,daysOfMonth(p->month, p->year));
        p->hour=getNum("时",0,24);
        p->minute=getNum("分",0,59);
        p->second=getNum("秒",0,59);
    }
    
    //输出时间
    void outputTime(struct Time t)
    {
        printf("时间为: %d年%d月%d日%d时%d分%d秒\n",t.year,t.month,t.day,t.hour,t.minute,t.second);
    }
    
    int main()
    {
        //任务(2)输出该日在本年中是第几天(注意闰年问题);
        struct Time t[]=   //测试数据放在结构体数组中
        {
            {1971,1,8,14,25,48},  //最简单的一个测试数据,期望输出8
            {2011,2,27,14,25,48}, //2月,天数要加上1月的31天,期望输出31+27
            {2012,3,2,14,25,48},  //这个输入很敏感,看2月究竟算多少天,期望输出31+29+2=62
            {2013,3,2,14,25,48},  //这个期望输出是31+28+2=61
            {2013,4,10,14,25,48}  //期望结果100,这样的测试数据还可以继续列一些,期望结果要列出来,这是测试的依据
        };
        int i;
        for(i=0; i<5; ++i)   //测试过程用一个循环完成
        {
            outputTime(t[i]);
            printf("这是这一年中的第%d天。\n\n", dayOfYear(t[i]));
        }
        return 0;
    }

      体会上面测试数据设计和测试程序(main()函数)设计中的用心,查看运行测试的结果,生产好产品,需要这样做。

    第(3)和(4)个任务容易实现,测试过程类似进行

      只需要增加一个自定义函数

    //这天是这一天的第几秒  
    int secondOfDay(struct Time t)  
    {  
        return t.hour*3600+t.minute*60+t.second;  
    }  
    
      相应的测试函数定义为:
    [int main()
    {
        struct Time t[]=
        {
            {1971,1,8,0,0,2},
            {2011,2,27,0,25,10},
            {2012,3,2,10,20,20},
            {2013,3,2,10,20,20},
            {2013,4,10,10,20,20}
        };
        int i;
        for(i=0; i<5; ++i)
        {
            outputTime(t[i]);
            //3)输出这是这一天中的第几秒;
            printf("这是这一天中的第%d秒。\n", secondOfDay(t[i]));
            //4)输出这是这一年中的第几秒;
            printf("这是这一年中的第%d秒。\n", dayOfYear(t[i])*24*3600+secondOfDay(t[i]));
        }
        return 0;
    }

      请体会上面的测试数据的设计,也可以设计出更好的来

    再来第(5)个要求,测试数据的设计需要更动动脑子

      关于实现功能而言,主体在Time afterDays(struct Time t,int d)函数,这个求解有些麻烦,但是采用的算法统一从1月0日开始的思路,还是可以将复杂性降下来一些。

    #include <stdio.h>
    struct Time
    {
        int year;
        int month;
        int day;
        int hour;
        int minute;
        int second;
    };
    
    //输入一个限定范围内的整型数值
    int getNum(char *prompt, int min, int max)
    {
        int value=-1;
        printf("输入%s,范围[%d, %d]:", prompt, min, max);
        do
        {
            scanf("%d", &value);
        }
        while(value<min || value>max);
        return value;
    }
    
    //返回y年m月的天数
    int daysOfMonth(int m,int y)
    {
        int days;
        switch(m)
        {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            days=31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days=30;
            break;
        case 2:
            if((y%4==0&&y%100!=0)||y%400==0)
                days=29;
            else
                days=28;
        }
        return days;
    }
    
    //这天是这一年的第几天
    int dayOfYear(struct Time t)
    {
        int days=0;
        int m=1;
        while(m<t.month)  //前若干月的天数加起来
        {
            days+=daysOfMonth(m,t.year);  //充分利用已经设计的函数
            ++m;
        }
        days+=t.day; //再加上本月的天数
        return days;
    }
    
    //输入时间,参数为指针,可以影响实参的值
    void getTime(struct Time *p)
    {
        p->year=getNum("年",0,3000); //getNum()用于输入一定范围内的数
        p->month=getNum("月",1,12);
        p->day=getNum("日",1,daysOfMonth(p->month, p->year));
        p->hour=getNum("时",0,24);
        p->minute=getNum("分",0,59);
        p->second=getNum("秒",0,59);
    }
    
    //输出时间
    void outputTime(struct Time t)
    {
        printf("时间为: %d年%d月%d日%d时%d分%d秒\n",t.year,t.month,t.day,t.hour,t.minute,t.second);
    }
    
    //这天是这一天的第几秒
    int secondOfDay(struct Time t)
    {
        return t.hour*3600+t.minute*60+t.second;
    }
    
    //返回一年有多少天(365或366天)
    int daysOfYear(int y)
    {
        return ((y%4==0&&y%100!=0)||y%400==0)?366:365;
    }
    
    //求你输入的时间d天后是哪年哪月哪日
    struct Time afterDays(struct Time t,int d)
    {
        struct Time t1=t;
        int d1=d+dayOfYear(t); //dayOfYear(t)求出t是当年第几天
        t1.month=1;
        t1.day=0;  //这样,将问题转换为在当年1月0日基础上加d1天(这个0有意思),避免以后老为2月操心,以及剩余天数一加以后持续进位
    
        while(d1>daysOfYear(t1.year))  //天数还够一个整年
        {
            d1-=daysOfYear(t1.year);
            ++t1.year;
        }
        //天数不够一整年后,再考虑月,因为从1月1日开始,不用担心Nt.year再加1年
        while(d1>daysOfMonth(t1.month,t1.year))  //天数还够一个整月
        {
            d1-=daysOfMonth(t1.month,t1.year);
            ++t1.month;
        }
        //剩全天数加到日上
        t1.day+=d1;
        return t1;
    }
    
    int main()
    {
        int d[]= {68,365,366,798} ; //分别在一年内、恰1年(闰或不闰)、798(365+365+68)天时要复杂也最有说服力,考虑跨年、跨月,尤其有闰年时
        struct Time nt,t[]=
        {
            {2001,1,8,0,0,0},   //没有时分秒的事,都0
            {2012,2,20,0,0,0},   //2月是个敏感的月份
            {2014,2,20,0,0,0},   //直接遇到闰年
            {2013,4,20,0,0,0},   //过了2月
            {2013,4,20,0,0,0},   //过了2月
            {2013,12,10,0,0,0},   //近年关,稍加一点就下一年了,也测试下
        };
    
    
        //(5)求你输入的时间d天后是哪年哪月哪日
        int i, j;
        for(i=0; i<7; ++i)
            for(j=0; j<4; ++j)
            {
                outputTime(t[i]);
                printf("这是这一年中的第%d天。\n", dayOfYear(t[i]));
                printf("这一天后%d天是:", d[j]);
                nt=afterDays(t[i],d[j]);
                outputTime(nt);
                printf("\n");
            }
        return 0;
    }

    最后的测试

    在以上对函数的详细测试基础上,完成本项目中的工作,只需要下面的mian函数:
    int main()
    {
    struct Time t,nt;
    //(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
    printf(“请输入一个时间(包括年,月,日,时,分,秒):\n”);
    getTime(&t);
    outputTime(t);
    //(2)输出该日在本年中是第几天(注意闰年问题);
    printf(“这是这一年中的第%d天。\n”, dayOfYear(t));
    //(3)输出这是这一天中的第几秒;
    printf(“这是这一天中的第%d秒。\n”, secondOfDay(t));
    //(4)输出这是这一年中的第几秒;
    printf(“这是这一年中的第%d秒。\n”, dayOfYear(t)*24*3600+secondOfDay(t));
    //(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;
    int d;
    printf(“请输入一个天数: “);
    scanf(“%d”, &d);
    nt=afterDays(t,d);
    printf(“再过%d天, “, d);
    outputTime(nt);
    return 0;
    }
    “`

    展开全文
  • 作者: 胡春娟 (小学语文 酒泉市小学语文班 ) 设计理念: 1、探究学习。强调学生自己读书,自己探究,自己体验,在探究中获得自己的感受,加深对文章的理解。 2、合作学习。重视学生的原有知识水平,重视资料...


     作者: 胡春娟 (小学语文  酒泉市小学语文一班 )
    设计理念:
    1、探究学习。强调学生自己读书,自己探究,自己体验,在探究中获得自己的感受,加深对文章的理解。

    2、合作学习。重视学生的原有知识水平,重视资料的收集和整理。充分发挥群体中每个成员的作用,通过合作学习,加深理解,加深体验。通过生生交流,师生交流,解决重点问题。

    3、情感体验。挖掘文章本身的情感因素,加强学生学习过程中的情感参与和情绪体验。使学生在学习的过程中,不但受到文中情感的感染,而且能体会到探究和发现的快乐。

    教学目的: 

    1、学会本课8个生字、正确读写“吩咐、茅亭、榨油、价钱、石榴、爱慕”等词语。

    2、分角色朗读,背诵自己喜欢的段落。

    3、理解“父亲”所说的话的深刻含义,懂得"人要做有用的人,不要做只讲体面,而对别人没有好处的人”的道理。

    4、学习作者主次分明、借物喻理的表达方式。

    教学重点:

    理解“父亲”所说的话的深刻含义,懂得“人要做有用的人,不要做只讲体面,而对别人没有好处的人”的道理。

    教学难点:

    如何把花生的品格与做人的道理联系起来进而悟出做人的道理。

    教学过程:

    一、导入新课

    师:同学们,喜欢猜谜语吗?

    生:喜欢。

    师:现在,老师说个谜语,看看谁能猜出它是哪种植物?

    “根根胡须入泥沙,自造房屋自安家,地上开花不结果,地下结果不开花。”

    生:花生

    师:(出示花生的投影片)花生又叫落花生,因为花生的花落了,子房柄就钻到士里长成花生荚,所以叫落花生。这篇课文的作者许地山是现代小说家、散文家。因为小时候父亲关于落花生的一番话给他留下了深刻的印象,他决心要像花生那样,做一个对别人有用的人,所以常用的笔名是“落华生”。那么,他的父亲关于花生谈了些什么,是怎样谈的呢?我们来看课文。

    师:(板书:落花生)

    生:齐读课题。

    [设计意图:陶行知说:“创造始于问题”,问题是思维的起点,兴趣是求知的动力。教者引用猜谜语,营造和谐的氛围,激发了学生的兴趣。]

    二、朗读感悟

    师:自由选择你喜欢的方式读课文,思考课文围绕题目写了哪些内容?

    生:全文写了种花生、收花生、尝花生、议花生,  

    师:板书:种花生——收花生——尝花生——议花生

    师:一家人是怎样议论花生的好处的?

    生:姐姐说它味美;

    生:哥哥说可以榨油,“我”说便宜,大家都喜欢吃。

    生:父亲说花生最可贵的是它的果实理在地里。

    师:兄妹们所说的花生的好处是显而易见的,而父亲指出的却是花生常常被人忽视的一个特点。父亲对花生作了几次议论?几次议论有什么不同?

    生:两次。第一次把花生与桃子、石榴、苹果作比较;第二次告诉我们做人的道理。

    师:板书:花生——桃子、石榴、苹果

    师:齐读父亲的第一次议论。思考:父亲是怎样通过比较说明花生可贵之处的?

    生:父亲认为桃子、石榴、苹果高高地挂在枝头,炫耀自己,而花生却埋在地里。

    师:回答得真好。该抓住哪些关键词语来突出花生的可贵之处?

    生:我认为应该抓住“埋在地里”“鲜红嫩绿”“高高地挂在枝头上”这些关键词语;

    生:我认为还应该抓住“矮矮地长在地上”。

    师:板书:埋在地里、高高地挂在枝上

    师:谁愿意来读一读?

    生:抽一生读

    师:你认为他读得怎样?

    生:我认为他抓住了关键词语来读。

    生:我认为他读得很有感情,读得很流畅。

    生:他读出了桃子、石榴、苹果那种炫耀自己的语气。

    生:(齐声说)想。

    师:好,让我们一起来有感情的朗读。

    生:有感情的朗读。

    [设计意图:读,是语文实践活动中最重要的一环。教者在教学活动中,不但做到了在做上教,还做到了学生在做上学。让学生抓住关键词去读,在读中整体感知,在读中有所感悟,在读中品味,在读中生情,在读中培养语感。] 师:桃子、石榴、苹果鲜红嫩绿,惹人喜爱,而花生却将成熟的果实理进泥土,等待人们来挖掘,来利用。由此,你体会到花生可贵的品质是什么?

    生:我体会到花生默默奉献的精神;

    生:我体会到花生无私奉献的精神;

    生:我体会到花生不求名利,朴实无华的精神;

    师:父亲借花生来教育孩子们做什么样的人?用——勾划出来。谁来读读父亲的第二次议论?

    生:一生读。

    生:父亲借花生教育孩子做一个对别人有用的人;

    生:父亲借花生教育孩子做一个不求名利、默默奉献的人;

    师:作者“我”怎样理解父亲的话?在文中用~勾划出来。

    生:“我”认为人要做有用的人,不要做只讲体面而对别人没有好处的人。师:你怎样理解作者的话?结合实际,举例说明。

    生:有些人,你看他仪表堂堂,可是他却没有什么本事;

    生:有一次,我在街上看见一位非常漂亮的阿姨,边走边吃香蕉,吃完香蕉就把皮扔在大街上,如果把过路的老大爷、老奶奶摔到了,怎么办?

    生:有些人,虽然长得很丑,可是他很乐于助人。

    生:我的邻居是个清洁工,他每天天没亮就开始打扫卫生,我觉得他就是一个有用的人。

    师:其实,我们的身边像那位普通的清洁工一样,在平凡的工作岗位上默默奉献的人有很多,他们就是落花生那样的人。

    师:在我们身边有没有像落花生那样的人呢?举例说明。

    生:有,老师为了学生在工作上默默奉献。

    生:清洁工,为了一方的清洁,宁愿牺牲自己的青春。

    生:蜡烛是伟大的,牺牲了自己的身体给我们带来光明。

    生:春蚕,为了让人们穿上华丽的衣裳,到死都还在吐丝。

    生:太阳,因为你无私地奉献光和热,所以大地才一片生机昂然、万紫千红。 

    师:大家说得真棒,在我们的身边像落花生那样的人和事很多很多,只要你做一个有心人。

    [设计意图:《新课程标准》中指出:教学要贴近学生生活实际。陶行知先生也说:“生活就是教育,在生活里找教育,为生活而教育。”教者善于启发、诱导,在语文和生活之间架起一座彩虹,让语文走向生活,让生活走向语文。]

    师:这篇课文,从种花生到收花生、尝花生,经历了多少时间,在课文中占了多少篇幅?从尝花生到议花生,经历了多少时间,在课文中占了多少篇幅?作者为什么这样安排?

    生:作者这样安排的目的是为了强调我们应该做像落花生那样的人;

    生:课文重点写议花生,目的在于告诉我们做人的道理。

    师:这篇课文的重点是议花生,父亲的议论是着重写的,这样可以突出文章的中心,其它内容略写,但它为文章的主要内容起说明交待的作用,不能不写。我们在写作时也要确定重点,做到重点突出,主次分明。

    师:这篇课文借写花生,告诉我们一个深刻的道理:人要做有用的人,不要做只讲体面,而对别人没有好处的人。这种写法就叫“借物喻理”。在我们的周围也有许多事物能给我们以启迪,让我们懂得深刻的道理。如:粉笔这个平平常常、普普通通的小东西,为了让同学们获得知识,不惜牺牲自己;蜡烛,照亮了别人而毁灭了自己……我们在写作时可以学习本课“借物喻理”的写法。

    [设计意图:著名的教育家陶行知说:“先生的职责不在于教,而在于教学生学。”教学有法,贵在授法。教者充分得挖掘了教材的内涵,巧妙地把课文的阅读与写作的指导有机地结合起来了,让阅读更好地为写作服务。]

    三、总结升华

    师:学了这篇课文,你想说点什么?把你的想法写下来,在小组内交流。

    师:谁愿意毛遂自荐?

    生:我想说:“我要向花生学习”。

    生:做人不能光看外表,要看他是否有用;

    生:不是有一句名言:“用珠宝装扮自己,不如用知识装扮自己”,我觉得说得真好。

    生:我又学会了重点突出、主次分明和借物喻理两种写作方法,我想我的作文能力会更好。

    生:我认为父亲的话有些不对,桃子、石榴、苹果高高地挂在枝头,并不是炫耀自己,而是它们的生长特点。

    生:老师,你不是说现在的社会是竞争的时代,它需要敢于展示自己才华的人吗?难道像桃子、石榴、苹果敢于展示自己才华,错了吗?

    师:你们提得真好,的确现在的社会需要敢于展示自己才华的人,桃子、石榴、苹果高高地挂在枝头,并不是炫耀自己,而是它们的生长特点。但父亲为什么要这样说呢?这里父亲只是打个比喻,作个对比,诣在强调花生默默奉献的精神。当然,任何比喻都是跛脚的。

    师:现在的社会既需要像落花生那样的默默奉献的人,更需要像桃子、石榴、苹果一样敢于展示自己才华的人。

    [设计意图:《新课程标准》中倡导教学要个性化和个性化教学,要求教师在教学中尊重学生人格,张扬学生个性。鼓励学生大胆质疑,并敢于发表自己的独特见解。]

    四、布置作业。

    师:你们可以把自己的感受写下来,看老师留给你们的作业。

    1、用自己喜欢的方式写一篇读后感;

    2、读许地山的其他作品(教师推荐书──《空山灵雨》《春的林野》,网址印在发给学生的资料上);

    3、搜集整理许地山的文章和生平事迹,写出你的评价文章。(当然这个作业,可以用一学期,也可以用更长时间)

    同学们可以根据自己的实际情况选择一项或两项作业

    [设计意图:尊重学生的主体感受,把学习的主动权还给学生,让学生充分感受,深刻领悟,让学生真正成为学习的主人。]

     

     

    展开全文
  • 教学服务系统设计之PHP后台设计

    千次阅读 2017-06-25 00:03:52
    项目简介本项目是与@黄成越同学合作。黄成越同学负责vue 前端的设计,我负责php后台的接口实现。本文将主要记录php后台。

    项目简介

    本项目是与@nameoverflow同学合作。该同学负责vue 前端的设计,我负责php后台的接口实现。本文将主要记录php后台。
    本项目的Github地址:https://github.com/He11oLiu/Student_Information_management_system
    本项目仅作为尝试用途,很多功能尚未实现。
    这里写图片描述

    使用PHP连接MySQL数据库

    利用MySQLi接口库来连接MySQL数据库,连接测试如下:

    <html>
    <body>
    <?php
        //phpinfo();
        $con = mysqli_connect("127.0.0.1","root","","C_test");
        if(!$con){
            dir('Cannot connect "' . mysql_error());
        }
        echo "Connect Sucess!";
        echo "<br/>";
        $result = mysqli_query($con,"Select * from student");
        while($row = mysqli_fetch_array($result)){
            echo $row['student_no']." ".$row['student_name'];
            echo "<br/>";
        }
        mysqli_close($con);
        echo "Cannect Close!";
    ?>
    </body>
    </html>

    这里写图片描述

    数据库设计

    这里写图片描述

    PHP RESTful接口

    服务器端PHP提供RESTful接口的框架主要如下:

    <?php
        session_start();
        $func = $_GET['func'];
        switch($func){
            case 'func1':func1();break;
            case 'func2':func2();break;
            default: echo 'wrong func code';break;
        }
    
        function func1(){
          //func1 code
        }
        function func2(){
          //func2 code
        }
    ?>

    服务器设计

    .
    ├── adminQuery.php          #管理员功能
    ├── loginFunc.php           #登入登出控制
    ├── studentQuery.php        #学生功能
    ├── teacherQuery.php        #老师功能
    ├── test.py                 #测试
    └── util.php

    其中功能的设计大致框架如上RESTful框架所述,接口定义见接口文件。

    为了防止出现越权调用接口,每个功能利用Session做了权限检测。

    接口定义

    学生

    POST 登录

    学生/loginFunc.php?func=stuLogin

    老师/loginFunc.php?func=isTeacherLoggedIn

    管理员/loginFunc.php?func=isTeacherLoggedIn

    GET 登录信息

    /loginFunc.php?func=isXXXLoggedIn 其中 XXX=Stu | Teacher | Admin

    GET 成绩信息

    如果用户为学生用户则只能查同班同学
    为管理员则可以查任意学号
    教师用户不允许使用

    参数名 类型 语义
    stuid(可选) String 学号,无则返回自己成绩
    semid(可选) number 学期id,无则返回所有条目

    返回值:

    字段名 类型 语义
    cname String 课程名
    cno String 课程编号
    teacher String 教师姓名
    grade Number 成绩(百分制)

    /studentQuery.php?func=stuGrade&stuid='201408010115'&semid=2

    GET 个人信息

    返回登录用户的个人信息

    返回值:

    字段名 类型 语义
    sname String 学生姓名

    /studentQuery.php?func=stuInfo

    GET 选课列表

    用户当前可用的选课列表

    如果当前不能选课,返回空[]

    返回值(数组):

    字段名 类型 语义
    cid Number 课程数据库索引号
    cno String 课程编号
    cname String 课程名
    teacher String 任课教师

    /studentQuery.php?func=stuSel

    GET 可选课程

    /studentQuery.php?func=courseList
    返回值:

    Course.idCourse,Course.Cno,Course.Cname,Course.Ccredit,Course.Cplace,Course.Cnum,Dept.Dname,Teacher.Tname

    POST 选课

    参数名 类型 语义
    cid Number 课程索引号

    返回值:

    字段名 类型 语义
    status Number 0为成功;其它为失败
    msg String 提示信息(失败原因)

    /studentQuery.php?func=selCourse&cid=3

    GET 课程安排

    返回用户指定学期的课程安排列表

    参数名 类型 语义
    seid Number 学期索引号

    返回值(数组):

    字段名 类型 语义
    cname String 课程名
    cno String 课程号
    teacher String 教师名
    times [Time] 时间安排列表

    其中 Time 格式为

    字段名 类型 语义
    day Number 一周中的天序号
    tstart Number 第几节课开始
    tend Number 第几节课结束
    wstart Number 开始周数
    wend Number 结束周数
    sel Number 单双周;0 为全部,1 为单周,2 为双周
    loc String 上课地点

    /studentQuery.php?func=courseTime

    GET 学期列表

    返回当前用户入学时间以后所有的学期列表

    返回值(数组):

    字段名 类型 语义
    year String 年份
    term String 春夏秋学期
    seid Number 学期索引id

    GET 同班同学

    url:/student/studentQuery.php?func=classmate

    返回值:Sno,Sname

    老师

    GET 课程的学生

    url : /student/teacherQuery.php?func=stuGrade`

    返回值: Sno,Sname,Class.Cno,Class.Cyear,Grade

    GET 授课时间

    url : /student/teacherQuery.php?func=courseTime

    返回值:Course.Cno,Course.Cname,Time.ds,Time.Week,Time.day,Time.section,Building,Room

    POST 添加学生成绩

    url:/student/teacherQuery.php?func=updateGrade

    POST数据内容

    字段名 类型 语义
    idcourseset int Courseset的索引
    sno String 学生学号
    grade int 学生成绩

    返回值

    status
    0 成功
    -1 不成功带msg字段

    管理员

    POST Add student

    url:/student/adminQuery.php?func=addStu

    POST数据内容:

    字段名 语义
    sname 姓名
    sno 学号
    idclass 班级 可以用getclass获取可选id
    sage 年龄
    ssex 性别
    iddept 专业 可以用getdept获取可选dept
    idsemester 学期 可以用getSemester获取可选学期

    返回值

    status
    0 成功
    -1 不成功带msg字段

    GET 学期

    url:/student/adminQuery.php?func=getSemester

    返回值:idSemester,Semyear,Semseason

    GET 班级

    url:/student/adminQuery.php?func=getClass&iddept=1

    iddept为获取的专业

    返回值:idClass,Cno,Cyear,Dept_idDept

    GET 学期

    url:/student/adminQuery.php?func=getSemester

    返回值:idSemester,Semyear,Semseason

    测试

    利用Python写了接口测试脚本,类似如下:

    import urllib2 
    import urllib
    import cookielib 
    
    ##########################
    #     student test       #
    ##########################
    
    print ('=========student test==========')
    data = {}
    data['sno'] = '201408010113'
    data['spd'] = '123'
    post_data = urllib.urlencode(data)
    cj = cookielib.CookieJar() 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
    print('Check Login Status...')
    resp = opener.open("http://localhost/student/loginFunc.php?func=isStuLoggedIn")
    print (resp.read()  )
    print ('\n')

    详细见源代码。

    展开全文
  • 个嵌入式课程设计

    万次阅读 2017-06-25 21:33:11
    最近,嵌入式老师布置个关于QT的课程设计。这个课程设计,说实话,自己花了不少心思,当然也学到了不少内容。现记录如下。 我的课程设计的总体内容是,从串口读取传感器(温湿度、光照)发送的气温信息,然后...
  • 全人类的科技工作者每一天都将我们的机器人变得越来越智能,越来越像人; 而我们所接受的日常教育却使人越来越机械,越来越像机器…… 引用:https://github.com/mithi/robotics-coursework 机器人系列课程 EDX...
  • 周自学动态网站设计

    万次阅读 多人点赞 2011-12-18 17:26:36
    实际上,在做需求分析、页面与系统设计的时间占了将近四天,而真正动态功能的部分只花了两天时间来完成。当然,这其中包括了从零开始对网站的设计与实现的相关语言与工具(HTML、CSS、Javascript、PHP、Mysql)的...
  • LabVIEW入门第一天

    千次阅读 2020-02-19 22:17:27
    LabVIEW入门第一天 从今天开始,我将分享我的LabVIEW的编程之路!欢迎各位相互学习讨论(▽)!!! 一,LabVIEW介绍 LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是...
  • 【导读】本法具有特别的高效性,您不必为厚厚的教科书发愁,也不必为网上众多资料而担心时间不够,拥有教学经验、善于自学、擅长电脑以及本身就在建筑设计院工作的我保证,您会在一天内成为Sketch up准高手。...
  • 个游戏是如何被设计和开发出来的 窦月汐 游戏设计师,游戏理论,全能开发者 ​关注他 1,804 人赞了该文章 本专栏是着重于讨论“开发款游戏需要怎样的能力”,以及“如何学习开发游戏所需的所有技能”。...
  • 教学管理信息系统的设计

    千次阅读 2010-11-02 17:00:00
    上海交通大学教学管理信息系统的设计 董传良 蒋磊宏 张增泰 <br /> 摘 要:建设高水平的大学,校园信息系统的建设是重要的环。本文针对上海交通大学多校区、地域分散的特点,介绍了基于Internet/...
  • 教材分析: 学情分析: ... 、理解文言文主旨 1.继续交流从何体现杨修很聪明。引导学生逐步找出从哪里还能看出杨修很聪明? 2.交流讨论杨修第二个特点, (1)提出问题,杨修不仅十分聪明,而且还...
  • 《用递归法解决问题》教学设计

    千次阅读 2018-06-08 23:00:41
    原载于《中国信息技术教育》...、学习者分析 本节课的教学对象为高中二年级的学生。这个阶段的学生具有很强的自主意识,具备一定的探究能力,喜欢通过自己动手实践来获得新知。多次经历从问题到程序的思考过程...
  • C++程序设计三周教学记录

    千次阅读 2011-12-10 10:19:09
    用星号图玩控制结构是我在指导儿子自学程序设计时用过的,现在在课程教学中作尝试。的确,星号图相对其他任务,好玩多了。安排好学生事务助理复印学习指导后,构思 配套的实验指导 。我还不甘心这点成果,将用函数...
  • 作者:小傅哥 ... ????沉淀、分享、成长,让自己和他人都能有所收获! ...距离《重学Java设计模式》这本PDF书籍?... 7月12日出炉以后,因为工作内容时间加长,已经有两周没有推文了,对我自己来说还...就像有些人的时间一天等于
  • 回到课程主页,链接:C++程序设计课程主页-2012级 本次上机对应的教学内容:第3章 C++程序设计初步【项目1:学会单步执行和调试程序】 利用你上周编过的求1000以内所有偶数的和的程序,练习:(1)单步执行功能...
  • C++自学第一天--C++简介

    万次阅读 2019-05-20 20:55:24
    C++ 是种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Windows、MAC 操作系统以及 ...
  • 数据库的期末设计弄完了,Perl/Tk 做的前台,前台加数据库花了一天多的时间。代码量倒是不多姑且还没到4 位数,也不知道老师会不会怪自己用perl 做界面,Tk 库毕竟太古老了写出来的窗体有点90 年代的样子。相对于...
  • 第十届机械设计大赛省赛总结

    千次阅读 2014-04-27 22:11:46
    第十届机械设计大赛浙江省赛区比赛结束了,结果出来了,我们队的作品《基于机械原理反转法的“多机构单模型”教具》未能冲出省赛,止步于省赛答辩。 这次比赛持续时间估计有半年吧,自己的经历,磕磕绊绊, 辛酸的...
  • 写在2016年最后一天,致以后的自己

    千次阅读 2016-12-31 14:56:33
    2016年最后一天,写给未来的自己。
  • 网页设计课程设计报告

    万次阅读 多人点赞 2019-03-01 21:45:11
    学号 课 程 设 计 课程名称 网页设计 题 目 鑫晨之家特效网站设计 专 业 软件工程 ...
  • 本文采用自顶向下的结构化的系统分析方法,阐述了个功能全面的网络教学平台的开发过程、操作流程及其一些核心的技术。本文首先进行了项目概述,简单介绍了项目开发的背景、项目开发的目的和项目开发的意义;接下来...
  • 写在2019年的最后一天,有感而发

    千次阅读 多人点赞 2020-01-24 00:54:27
    又到一年的年底了,回首看自己匆忙度过的这几年,几乎所有时间都在工作、在公司、在客户那,不仅感慨自己的职业生涯,太悲催了,做的技术太容易被利用,这几年光帮别人挣的盆满钵满,自己还是苦的笔,穷的要死。...
  • 这些解决方案是众多软件开发人员经过相当长的时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人...
  • 系统架构设计师 报考指南,考试时间

    千次阅读 2013-07-24 15:42:12
    2013年系统架构设计师考试时间 资格名称 2013年上半年考试时间 2013年下半年考试时间 考试科目 系统架构设计师 未开考此科目 11月9日上午9:00-...
  • AD PCB设计入门总结(

    千次阅读 2019-05-05 11:29:53
    为了制作四轴飞行器,我需要自己设计电路板,这里面比我想的要难得多,网上搜的教程仅仅只是教你怎么使用这个软件,我也有点急于求成,想着下子将PCB板设计出来,但其实各种东西都还不会,更别提设计PCB板了。...
  • Flutter三天学习基础-------一天搞定项目

    万次阅读 多人点赞 2018-07-03 21:45:41
    Flutter学习三搞定项目 ,Flutter: Flutter和“ReactNative”,我想很多作为android和前端或者ios开发人员都听说过,我们可以JavaScript和React获得一致的开发体验,但是RN在实际平台上还需要适配和...
  • 事情是这样的,有一天他关掉37玩大天使之剑的网页,抽着闷烟突发奇想:马勒割鸡,那些搞游戏的做这么个辣鸡玩意儿动不动月流水上亿?劳资怎么不去搞一个呢?雾草,就是了,我也搞他妈一个,就不信在自己的游戏里还干...
  • 有时候人们用四位数字表示时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。 读入两个数字,第个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,999
精华内容 10,799
关键字:

一天的时间教学设计