索引:

1、Java

———① 5-7章课后练习题

———② 阶段测试

———③ 8-11章练习题

2、数据库系统原理

———课堂练习(选择判断)

———编程/实验

———作图


Java

三、24年秋-《Java程序设计》-23软工-8-11章练习题

8-11章课后练习题

(一)判断题

判断题

1、所有异常都必须捕获。

答案:F


2、程序运行时所产生的系统定义的异常将自动被抛出。

答案:T


3、Java语言中的所有异常类都是java.lang.Throwable的子类。

答案:T


4、由Date到String的转换需要用到SimpleDateFormat类对象的format方法。

答案:T


(二)程序填空题

程序填空题

1、设计一个ComparableCircle类继承自Circle类并实现Comparable接口

2-1

作者 殷伟凤

单位 浙江传媒学院

设计一个Circle类,该类有属性radius,表示圆的半径,其默认值为1;getArea()返回该圆的面积。

创建一个名为ComparableCircle的类,它继承自Circle类,并实现Comparable接口,在类中实现compareTo方法,使其根据面积比较两个圆。

编写测试程序求出两个ComparableCircle实例对象的较大者。程序输出如下信息:

Cirlce: radius = 7.0
Area: 153.93804002589985
Cirlce: radius = 5.0
Area: 78.53981633974483
c1较大
class Circle {
private double radius;

public1】 {
radius = 1;
}

public Circle(double radius) {
2】 = radius;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}

public double getArea() {
3
}
public String toString() {
4
}
}

class ComparableCircle5】 Circle 【6】 Comparable<ComparableCircle> {

public ComparableCircle() {
}

public ComparableCircle(double radius) {
7
}

@Override // Implement the compareTo method defined in Comparable
public int compareTo(【8】) {
if (getArea() > o.getArea())
return 1;
else if (getArea() < o.getArea())
return -1;
else
return 0;
}

@Override
public String toString() {
return9】 + "\nArea: " + getArea();
}
}
public class Main {
public static void main(String[] args) {
ComparableCircle c1 = new ComparableCircle(7);
ComparableCircle c2 = new ComparableCircle(5);
System.out.println(c1);
System.out.println(c2);
System.out.println(【10】?"c1较大":"c2较大");

}
}

答案:

【1】

Circle()

【2】

this.radius

【3】

return this.getRadius()*this.getRadius()*Math.PI;

【4】

return "Cirlce: radius = "+this.getRadius();

【5】

extends

【6】

implements

【7】

super(radius);

【8】

ComparableCircle o

【9】

super.toString()

【10】

c1.getArea()>c2.getArea()

完整代码:

class Circle {
private double radius;

public Circle() {
radius = 1;
}

public Circle(double radius) {
this.radius = radius;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}

public double getArea() {
return this.getRadius()*this.getRadius()*Math.PI;
}
public String toString() {
return "Cirlce: radius = "+this.getRadius();
}
}

class ComparableCircle extends Circle implements Comparable<ComparableCircle> {

public ComparableCircle() {
}

public ComparableCircle(double radius) {
super(radius);
}

@Override // Implement the compareTo method defined in Comparable
public int compareTo(ComparableCircle o) {
if (getArea() > o.getArea())
return 1;
else if (getArea() < o.getArea())
return -1;
else
return 0;
}

@Override
public String toString() {
return super.toString() + "\nArea: " + getArea();
}
}
public class Main {
public static void main(String[] args) {
ComparableCircle c1 = new ComparableCircle(7);
ComparableCircle c2 = new ComparableCircle(5);
System.out.println(c1);
System.out.println(c2);
System.out.println(c1.getArea()>c2.getArea()?"c1较大":"c2较大");

}
}

(三)函数题

函数题

1、Java异常处理

3-1

作者 zhengjun

单位 浙江传媒学院

设有一个整数数组a[], a有10个元素,其值依次为0到9。

从键盘输入整数i的值,求a[i]的倒数。

注意处理各种异常。发生异常后,根据不同的异常,输出警告。

提示:

需要考虑InputMismatchException、ArrayIndexOutOfBoundsException、ArithmeticException等多种异常。 

裁判测试程序样例

import java.util.Scanner;
import java.util.InputMismatchException;

public class Main {
public static void main(String[] args) {
int[] a = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

/* 请在这里填写答案 */
}
}

输入格式:

先输入一个整数n,表示有n组数据。

此后有n行,每行有一个整数i。

输出格式

正常情况下,输出1/a[i]的值(整数形式)。

如果发生InputMismatchException异常,输出“catch a InputMismatchException”。

如果发生ArrayIndexOutOfBoundsException异常,输出“catch a ArrayIndexOutOfBoundsException”。

如果发生ArithmeticException异常,输出“catch a ArithmeticException”。

输入样例

4
1
10
0
a

输出样例

1
catch a ArrayIndexOutOfBoundsException
catch a ArithmeticException
catch a InputMismatchException

代码长度限制:16 KB

时间限制:400 ms

内存限制:32 MB

答案:

Scanner s=new Scanner(System.in);
int m=0;
try{
int n=s.nextInt();
m=n;
}catch(InputMismatchException ex){
System.out.println("catch a InputMismatchException");
System.exit(0);
}
for(int j=0;j<m;j++){
try{
int k=s.nextInt();
int b=1/a[k];
System.out.println(b);
}catch(InputMismatchException ex){
System.out.println("catch a InputMismatchException");
s.nextLine();
}catch(ArrayIndexOutOfBoundsException ex){
System.out.println("catch a ArrayIndexOutOfBoundsException");
}catch(ArithmeticException ex){
System.out.println("catch a ArithmeticException");

}
}

(四)编程题

编程题

1、定义接口(Biology、Animal)、类(Person)、子类(Pupil)

4-1

作者 吴光生

单位 新余学院

(1)定义Biology(生物)、Animal(动物)2个接口,其中Biology声明了抽象方法breathe( ),Animal声明了抽象方法eat( )sleep( )
(2)定义一个类Person(人)实现上述2个接口,实现了所有的抽象方法,同时自己还有一个方法think( )。breathe()、eat()、sleep()、think()四个方法分别输出:
我喜欢呼吸新鲜空气
我会按时吃饭
早睡早起身体好
我喜欢思考
(3)定义Person类的子类Pupil(小学生),有私有的成员变量school(学校),公有的成员方法setSchool( )getSchool( )分别用于设置、获取学校信息。
(4)在测试类Main中,用Pupil类创建一个对象zhangsan。尝试从键盘输入学校信息给zhangsan,获取到该信息后输出该学校信息,格式为“我的学校是XXX”;依次调用zhangsan的breathe()、eat()、sleep()、think()方法。

输入格式:

从键盘输入一个学校名称(字符串格式)

输出格式:

第一行输出:我的学校是XXX(XXX为输入的学校名称)
第二行是breathe()方法的输出
第三行是eat()方法的输出
第四行是sleep()方法的输出
第五行是think()方法的输出

输入样例:

在这里给出一组输入。例如:

新余市逸夫小学

输出样例:

在这里给出相应的输出。例如:

我的学校是新余市逸夫小学
我喜欢呼吸新鲜空气
我会按时吃饭
早睡早起身体好
我喜欢思考

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Pupil zhangsan=new Pupil(sc.next());
System.out.println("我的学校是"+zhangsan.getSchool());
zhangsan.breathe();
zhangsan.eat();
zhangsan.sleep();
zhangsan.think();
}

}
interface Biology{
abstract public void breathe();
}
interface Animal{
abstract public void eat();
abstract public void sleep();
}
class Person implements Biology,Animal{

@Override
public void breathe() {
System.out.println("我喜欢呼吸新鲜空气");
}

@Override
public void eat() {
System.out.println("我会按时吃饭");
}

@Override
public void sleep() {
System.out.println("早睡早起身体好");
}

public void think(){
System.out.println("我喜欢思考");
}
}
class Pupil extends Person implements Biology,Animal{
private String school;

public Pupil(String school) {
this.school = school;
}

public String getSchool() {
return school;
}

public void setSchool(String school) {
this.school = school;
}
}

2 、定义学生类覆盖Object中的方法实现Comparable接口

4-2

作者 万静

单位 北京化工大学

定义一个学生类Student,成员变量包括:姓名,生日,学号,学校;重写方法toString,equals,hashCode;实现接口Comparable,按照学号大小进行比较;定义构造方法。
代码形式如下:

public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int num=in.nextInt();
Student[] studentArray = new Student[num];
for(int i=0;i<num;i++)
{
String name=in.next();
int year=in.nextInt();
int month=in.nextInt();
int day=in.nextInt();
String studentId=in.next();
String school=in.next();
studentArray[i]=new Student(name,year,month,day,studentId,school);
}

Arrays.sort(studentArray);
for(Student s:studentArray)
System.out.println(s);
}
}
class Student implements Comparable
{
//给出Student的定义
}

输入格式:

第一行输入学生人数。其他各行每行输入一个学生的姓名,出生年月日,学号,学号,用空格分隔。

输出格式:

按照学号从小到大排序的学生信息,每个学生信息一行。

输入样例:

例如:

3
李翔 2002 10 9 202019001 北京化工大学
张凯 2002 11 23 202019015 北京化工大学
汪海 2002 7 5 202019012 北京化工大学

输出样例:

例如:

Student[name=李翔, birthday=2002-10-09, studentId=202019001, school=北京化工大学]
Student[name=汪海, birthday=2002-07-05, studentId=202019012, school=北京化工大学]
Student[name=张凯, birthday=2002-11-23, studentId=202019015, school=北京化工大学]

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Arrays;
import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int num=in.nextInt();
Student[] studentArray = new Student[num];
for(int i=0;i<num;i++)
{
String name=in.next();
int year=in.nextInt();
int month=in.nextInt();
int day=in.nextInt();
String studentId=in.next();
String school=in.next();
studentArray[i]=new Student(name,year,month,day,studentId,school);
}

Arrays.sort(studentArray);
for(Student s:studentArray)
System.out.println(s);
}
}
class Student implements Comparable
{
private String name;
private String birthday;
private String studentId;
private String school;
public Student(String name,int year,Integer month,Integer day,String studentId,String school) {
this.name=name;
String smonth,sday;
if(month<10){
smonth="0"+month.toString();
}else {
smonth=month.toString();
}
if(day<10){
sday="0"+day.toString();
}else {
sday=day.toString();
}
this.birthday=year+"-"+smonth+"-"+sday;
this.studentId=studentId;
this.school=school;
}
public String toString() {
return "Student[name="+name+", birthday="+birthday+", studentId="+studentId+", school="+school+"]";
}

public boolean equals(Object obj) {
if(this==obj)
return true;
if(obj==null)
return false;
if(this.getClass()!=obj.getClass())
return false;
Student s=(Student)obj;
return this.studentId.equals(s.studentId);
}
public int hashCode() {
return studentId.hashCode();
}
public int compareTo(Object obj) {
Student s=(Student)obj;
return this.studentId.compareTo(s.studentId);
}
}

3 、 jmu-Java-02基本语法-06-枚举

4-3

作者 郑如滨

单位 集美大学

定义一个枚举类型Grade来表示考试的4个等级,值包含A,B,C,D,E

编写一个函数Grade getGrade(int score)将传递进来的score转化为枚举类型
>=90 and <=100返回A,
>=80 and <90 返回B, \>=70 and <80 返回C, \>=60 and <70返回D,
其他的返回E

#main方法
输入分数后,调用getGrade函数返回相应的Grade,使用switch根据Grade,根据分数打印不同的评价:
Excellent Good Average Fair Poor
并且每输出一个评语后,要调用如下函数

public static void printGradeInfo(Grade grade){
System.out.println("class name="+Grade.class);
System.out.println("grade value="+grade);
}

输入样例:

90
80
70
60

输出样例:

Excellent
class name=class Grade
grade value=A
Good
class name=class Grade
grade value=B
Average
class name=class Grade
grade value=C
Fair
class name=class Grade
grade value=D

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Scanner;

enum Grade {
A, B, C, D, E;

public static Grade getGrade(int score) {
if (score >= 90 && score <= 100) {
return Grade.A;
} else if (score >= 80 && score < 90) {
return Grade.B;
} else if (score >= 70 && score < 80) {
return Grade.C;
} else if (score >= 60 && score < 70) {
return Grade.D;
} else {
return Grade.E;
}
}
}
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);

while (sc.hasNext()){
Grade grade = Grade.getGrade(sc.nextInt());

switch (grade) {
case A:
System.out.println("Excellent");
break;
case B:
System.out.println("Good");
break;
case C:
System.out.println("Average");
break;
case D:
System.out.println("Fair");
break;
case E:
System.out.println("Poor");
break;
}
printGradeInfo(grade);
}

}

public static void printGradeInfo(Grade grade) {
System.out.println("class name=" + Grade.class);
System.out.println("grade value=" + grade);
}

}

二、24年秋-《Java程序设计》-23软工12-阶段测试

阶段测试

(一)判断题

判断题

1、所有异常都必须捕获。

答案:F


2、Java中,局部变量在使用之前必须赋值,否则报错。

答案:T


3、在Java中,若有int x = 5,则表达式(x + 5)/3的值是3。

答案:T


4、Java中,布尔类型的true值是0,false是非0值。

答案:F


5、私有属性只能在它所在类中被访问,为了能让外界访问私有属性,需要提供一些使用public修饰的公有方法

答案:T


6、设String对象s=”Hello “,运行语句System.out.println(s.concat("world!"));后String对象s的内容为Hello world!,所以语句输出为Hello world!

答案:F


7、String类的equals()方法和==的作用是一样的。

答案:F


8、Java中,BigDecimal类的valueOf()计算结果是精确的。

System.out.println(BigDecimal.valueOf(2.0).multiply(new BigDecimal("0.9")));

答案:T


9、所谓方法重写,就是在同一个作用域内方法名相同但参数个数或者参数类型不同的方法。

答案:F


10、有两个引用变量t1和t2,如果 t1 == t2为true, 那么t1.equals(t2)也一定为true。

答案:T


11、Java中,继承的特点是:只支持单继承,不支持多继承,但是支持多层继承。

答案:T


12、Java中,final修饰的类,不能被子类继承。

答案:T


13、Java中break语句可用于循环结构或者switch-case结构,作用是终止当前循环或者分支语句。

答案:T


14、Java中垃圾回收机制保证了Java程序不会出现内存溢出。

答案:F


15、Java中,int[] arr = new int[5]{1,2,3,4,5};语句定义数组正确。

答案:F


16、有如下的父类和子类的定义,语法上是否正确?( )

class A{
int a;
public A(int a)
{
this.a=a;
}
}
public class B extends A{
}

答案:F


17、同一个类的不同对象是完全独立的个体,它们分别拥有各自的属性。

答案:T


18、Java中,类的静态代码块优先于类的其它成员(包括main(String[] args)方法)执行。

答案:T


19、(x % 2 == 0 && x % 3 ==0 )和 (x % 6 == 0)等价

答案:T


20、String对象和StringBuffer对象都是字符串类型,创建后的对象都可以在原地进行修改。

答案:F


(二)单选题

单选题

1、设有变量定义: short a = 300; 则以下哪一条语句会导致编译错误?

A.a += 3;

B.a = (short)a + 3;

C.a = (byte)(a + 3);

D.a = (short)(a * 100);

答案:B


2、设有下面Java程序,请阅读程序并完成选择,以下哪个表达式的值为true?

public class Sample{
long length;
public Sample(long l){ length = l; }
public static void main(String arg[]){
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;
}
}

A.s1 == s2;

B. s2 == s3;

C.m == s1;

D.s1.equals(m);

答案:B


3、现有如下方法:

/** Precondition: data is sorted in increasing order. */ 
public static int binarySearch(int[] data, int target)
{
int start = 0;
int end = data.length - 1;
while (start <= end)
{
int mid = (start + end) / 2; /* Calculate midpoint */
if (target < data[mid])
{
end = mid - 1;
}
else if (target > data[mid])
{
start = mid + 1;
}
else
{
return mid;
}
}
return -1;
}

假设调用binarySearch方法的数组包含2000个按递增顺序排序的元素。请问/* Calculate middpoint */所在的语句(第8行)可以执行的最大次数是多少?

A.2000

B.1000

C.20

D.11

E.1

答案:D


4、下列Java程序执行之后,j的值是?

public class A {
public static void main(String[] args) {
int j = 2, i = 5;
while (j < i--) j++;
System.out.println(j);
}
}

A.2

B.3

C.4

D.5

答案:C


5、在Java中,下面程序代码段的输出结果是?

int i=0,s=0;
do{
if (i%2 = = 0 ){
i++;
continue;
}
i++;
s = s + i;
} while (i<7);
System.out.println(s);

A.12

B.16

C.21

D.28

答案:A


6、Java的Math类中,功能实现的是四舍五入的方法是

A.ceil()

B.floor()

C.round()

D.random()

答案:C


7、以下关于构造函数的描述错误的是( )?

A.构造函数的返回类型只能是void型

B.构造函数是类的一种特殊函数,它的方法名必须与类名相同

C.构造函数的主要作用是完成对类的对象的初始化工作

D.一般在创建新对象时,系统会自动调用构造函数

答案:A


8、有如下程序代码, 程序运行的结果是( )。
String s1 = “中国”;
String s2 = “我爱 “ + s1;
String s3 = “我爱 “ + s1;
System.out.print(s2 == s3);
System.out.println(“ “+s2.equals(s3));

A.true false

B.true true

C.false false

D.false true

答案:D


9、下面Java程序段的输出结果是?

public class A{
public static void main(String args[]) {
String str ="hello,";
str=str+"guys!";
System.out.println(str);
}
}

A.hello,guys!

B.hello,

C.guys!

D.编译不通过

答案:A


10、在Java中,下列关于对象的类型转换的描述,说法错误的是?

A.对象的类型转换可通过自动转换或强制转换进行

B.无继承关系的两个类的对象之间试图转换会出现编译错误

C.由new语句创建的父类对象可以强制转换为子类的对象

D.子类的对象转换为父类类型后,父类对象不能调用子类的特有方法

答案:A


11、以下Java程序段编译运行后输出的结果是?

class Test {
String s1="java";
public static void main(String args[]) {
int z=2;
Test t=new Test();
System.out.println(t.s1+z);
}
}

A.java2

B.2

C.java

D.没有输出结果

答案:A


12、Java中关于对象成员占用内存的说法哪个正确?

A.同一个类的对象共用同一段内存

B.同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间

C.对象的方法不占用内存

D.以上都不对

答案:B


13、有两个类定义如下:

public class ClassOne
{
public void methodOne()
{
...
}
//Other methods are not shown.
}
public class ClassTwo extends ClassOne
{
public void methodTwo()
{
...
}
//Other methods are not shown.
}

现在另一个类中定义如下内容:

ClassOne c1 = new ClassOne();
ClassOne c2 = new ClassTwo();

请问以下哪个会产生错误?
I. c1.methodTwo();
II.c2.methodTwo();
III.c2.methodOne();

A.I

B.II

C.III

D.I and II

答案:D


14、下面这段代码的输出结果是什么?

class AA{
public int cal(int a,int b){
return a+b;
}
}
class BB extends AA{
@Override
public int cal(int a,int b){
return a*b;
}
}
class CC extends AA{
@Override
public int cal(int a,int b){
return 10*(a+b);
}
}
public class InterfaceTest2 {
public static void main(String args[]){
AA aa=new AA();
System.out.println(aa.cal(3,6));
aa=new BB();
System.out.println(aa.cal(3,6));
aa=new CC();
System.out.println(aa.cal(3,6));
}
}

A.

9
9
9

B.

9
18
18

C.

9
18
90

D.

18
18
90

答案:D


15、Java语言中,以下关于覆盖与重载说法正确的是?

A.覆盖只有发生在父类与子类之间,而重载可以发生在同一个类中

B.覆盖方法可以不同名,而重载方法必须同名

C.final修饰的方法可以被覆盖,但不能被重载

D.覆盖与重载是同一回事

答案:A


16、请问,以下那些是有关封装的优点的正确描述?

A.只需一个public方法。

B.从任何方法中没有抛出异常。

C.可以不需要改变接口来改变实现,以达到外部使用代码无需改变。

D.可以不需要改变实现来改变接口,以达到外部使用代码无需改变。

答案:C


17、在Java中,给出如下代码:

class Test{
private int m;
public static void fun() {
    //some code ...
  }
}

如何修改成员变量m的定义,让m可被函数fun()直接访问,以下选项正确的是?

A.将private int m 改为protected int m

B.将private int m 改为 public int m

C.将private int m 改为 static int m

D.将private int m 改为 int m

答案:C


18、下面Java程序的运行结果是?

import java.io.*;
public class Test{
public static void main(String args[]){
int i;
int a[]={11,22,33,44,55,66,77,88,99};
for(i=0;i<=a.length/2;i++)
System.out.print(a[i]+a[a.length-i-1]+" ");
System.out.println();
}
}

A.110 110

B.110 110 110

C.110

D.110 110 110 110 110

答案:D


19、下面关于构造方法的调用,正确的是?

A.构造方法在类定义的时候被调用

B.构造方法在创建对象的时候被调用

C.构造方法在类加载的时候被调用

D.构造方法在使用对象的变量时被调用

答案:B


20、简单变量和引用变量的初始化有什么区别?

A.简单变量的初始化需要为它分配一个数值单元,而引用变量的初始化只需要给它赋一个值就可以了

B.简单变量的初始化只需要给它赋一个值,而引用变量的初始化需要指向一个存在的对象

C.二者的初始化都需要指向一个存在的单元,但前者需要指向一个数值单元,后者需要指向一个对象

D.二者都需要初始化,因此它们的初始化也没有区别

答案:C


(三)程序填空题

程序填空题

1、判断两个日期的先后,计算间隔天数、周数

3-1

作者 吴光生

单位 新余学院

从键盘输入两个日期,格式如:2022-06-18。判断两个日期的先后,并输出它们之间间隔的天数、周数(不足一周按0计算)。

输入样例1:

2000-02-18
2000-03-15

输出样例1:

第一个日期比第二个日期更早
两个日期间隔26天
两个日期间隔3周

预备知识:通过查询Java API文档,了解Scanner类中nextLine()等方法、String类中split()等方法、Integer类中parseInt()等方法的用法,了解LocalDate类中of()、isAfter()、isBefore()、until()等方法的使用规则,了解ChronoUnit类中DAYS、WEEKS、MONTHS等单位的用法。

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =1】;

String s1 = sc.nextLine();
String s2 = sc.nextLine();

String [] dateStr1 = s1.split("-");
String [] dateStr2 = s2.split("-");

int year1 = Integer.parseInt( dateStr1[0] );
int month1 = Integer.parseInt( dateStr1[1] );
int day1 =2】;

int year2 = Integer.parseInt( dateStr2[0] );
int month2 = Integer.parseInt( dateStr2[1] );
int day2 = Integer.parseInt( dateStr2[2] );

LocalDate date1 = LocalDate.of(year1, month1, day1);
LocalDate date2 =3】;

if(【4】)
System.out.println("第一个日期比第二个日期更早");
else
System.out.println("第一个日期比第二个日期更晚");

long dayCount =5】;
long weekCount = date1.until(date2, ChronoUnit.WEEKS);

System.out.println("两个日期间隔" + Math.abs(dayCount) + "天" );
System.out.println("两个日期间隔" + Math.abs(weekCount) + "周" );
sc.close();
}
}

答案:

【1】

new Scanner(System.in);

【2】

Integer.parseInt( dateStr1[2] );

【3】

LocalDate.of(year2, month2, day2)

【4】

date1.isAfter(date2)

【5】

ChronoUnit.DAYS

完整代码:

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);;

String s1 = sc.nextLine();
String s2 = sc.nextLine();

String [] dateStr1 = s1.split("-");
String [] dateStr2 = s2.split("-");

int year1 = Integer.parseInt( dateStr1[0] );
int month1 = Integer.parseInt( dateStr1[1] );
int day1 = Integer.parseInt( dateStr1[2] );;

int year2 = Integer.parseInt( dateStr2[0] );
int month2 = Integer.parseInt( dateStr2[1] );
int day2 = Integer.parseInt( dateStr2[2] );

LocalDate date1 = LocalDate.of(year1, month1, day1);
LocalDate date2 = LocalDate.of(year2, month2, day2);

if( date1.isAfter(date2) )
System.out.println("第一个日期比第二个日期更早");
else
System.out.println("第一个日期比第二个日期更晚");

long dayCount = date1.until(date2, ChronoUnit.DAYS);;
long weekCount = date1.until(date2, ChronoUnit.WEEKS);

System.out.println("两个日期间隔" + Math.abs(dayCount) + "天" );
System.out.println("两个日期间隔" + Math.abs(weekCount) + "周" );
sc.close();
}
}

(四)编程题

编程题

1、统计字符串中字符的个数

4-1

作者 pintia

单位 泉州师范学院

输入一个字符串,分别统计字符串中出现的大写字母、小写字母个数,以及出现的数字字符以及其他字符的个数。

输入格式:

输入一个字符串。

输出格式:

输出字符串中大写字母、小写字母个数,以及出现的数字字符以及其他字符的个数。

输入样例:

在这里给出一组输入。例如:

aBc3#d?>2D

输出样例:

在这里给出相应的输出。例如:

小写字母有: 3个
大写字母有: 2个
数字有: 2个
其他字符有: 3个

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.next();
int bz=0,sz=0,num=0,oth=0;
for (int i = 0; i < str.length(); i++) {
char c=str.charAt(i);
if(c>='A'&&c<='Z'){
bz++;
}else if(c>='a'&&c<='z'){
sz++;
}else if(c>='0'&&c<='9'){
num++;
} else {
oth++;
}
}
System.out.println("小写字母有: "+sz+"个");
System.out.println("大写字母有: "+bz+"个");
System.out.println("数字有: "+num+"个");
System.out.println("其他字符有: "+oth+"个");
}
}

2 、多态练习-计算面积

4-2

作者 向北

单位 丽江文化旅游学院

定义三个类,父类(抽象类)GeometricObject代表几何形状,子类Circle代表圆形,子类Rectangle代表矩形。具体属性和方法如下:
父类 (抽象类)GeometricObject
属性:
private String color;
private String name;
为上述变量提供getter()和setter()方法
构造方法:为color和name初始化
public GeometricObject(String color, String name)
public GeometricObject(字符串颜色,字符串名称)
抽象方法:
public double findArea();用于计算几何图形的面积

子类:
Circle
属性:
private double radius;半径
为上述变量提供getter()和setter()方法
构造方法:
设计构造方法为圆形的name,color和radius初始化
方法:
实现findArea()方法用于计算圆形的面积并返回计算结果

子类:
Rectangle
属性:
private double width;宽
private double height;高
为上述变量提供getter()和setter()方法
构造方法:
设计构造方法为圆形的name,color,width和height初始化
方法:
实现findArea()方法用于计算矩形的面积并返回计算结果

测试类Main
方法:
public static void main(String[] args) {
创建圆形对象(”长方形”,”蓝色”,3.2,4.5)
输出圆形的颜色和面积
创建矩形对象(“圆形”,”红色”,3.4)
输出矩形的颜色和面积
}
public static void show(GeometricObject g){
//形参传入圆形或者矩形的对象,输出其面积
//判断传入的对象是圆形还是矩形
//如果是圆形就输出圆形的颜色和面积;
//如果是矩形就输出矩形的颜色和面积;
}
注意:1.所有类不用修饰词
2.测试类名称为“Main”,否则编译出错

在这里给出一组输入。例如:


输出样例:

在这里给出相应的输出。例如:

矩形的颜色是:蓝色,面积是:14.4
圆形的颜色是:红色,圆形的面积是:36.31681107549801

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] words = sc.nextLine().split(" ");
Arrays.sort(words);
for (String word : words) {
System.out.print(word + " ");
}
}
}

3 、字符串排队

4-3

作者 马俊

单位 兰州大学

从键盘上输入若干个英文单词,请按照字典顺序将这些单词输出。

输入格式:

在一行中输入不超过20个英文单词,用空格分开。

输出格式:

在一行中输出前面输入的英文单词,按照字典序顺序输出,用空格作为分割符。

输入样例:

I am a student

输出样例:

I a am student

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] words = sc.nextLine().split(" ");
Arrays.sort(words);
for (String word : words) {
System.out.print(word + " ");
}
}
}

4、古时年龄称谓知多少?

4-4

作者 王大伟

单位 南京理工大学泰州科技学院

输入一个人的年龄(岁),判断他属于哪个年龄段 ?

0-9 :垂髫之年;

10-19: 志学之年;

20-29 :弱冠之年;

30-39 :而立之年;

40-49 :不惑之年;

50-59: 知命之年;

60-69 :花甲之年;

70-79 :古稀之年;

80-89 :杖朝之年;

90-99 :耄耋之年。

输入格式:

输入一个人的年龄(整数)。题目保证输入整数的范围[0 , 99]

输出格式:

输出年龄对应的年龄段。

输入样例:

55

输出样例:

知命之年

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
if(n>=0&&n<=9){
System.out.println("垂髫之年");
}else if(n>=10&&n<=19){
System.out.println("志学之年");
}else if(n>=20&&n<=29){
System.out.println("弱冠之年");
}else if(n>=30&&n<=39){
System.out.println("而立之年");
}else if(n>=40&&n<=49){
System.out.println("不惑之年");
}else if(n>=50&&n<=59){
System.out.println("知命之年");
}else if(n>=60&&n<=69){
System.out.println("花甲之年");
}else if(n>=70&&n<=79){
System.out.println("古稀之年");
}else if(n>=80&&n<=89){
System.out.println("杖朝之年");
}else if(n>=90&&n<=99){
System.out.println("耄耋之年");
}
}
}

一、24年秋-《Java程序设计》-23软工-5-7章课后练习题

5-7章课后练习题

(一)单选题

单选题

1、在Java中,下列最终属性 i 的定义中,正确的是?

A.static final int i=100

B.final int i=1.2

C.final i=’w’

D.final char i

答案:A


2、Java语言中,类Student是类Person的子类,Student的构造方法中有一句:super(c),该语句意思是( )。

A.调用类Student中定义的super()方法

B.调用类Person中定义的super()方法

C.调用类Person的构造方法

D.语法错误

答案:C


3、以下关于面向对象设计的叙述中,错误的是( )。

A.类的属性用于封装数据,类的方法用于封装行为。

B.面向对象设计的基本思想包括抽象、封装和可扩展性。

C.对象继承和多态可用来实现可扩展性。

D.对象持久化是指将数据库中的数据加载到内存中供应用程序访问。

答案:D


4、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为

A.隐藏

B.覆盖

C.重载

D.重写

答案:C


5、给定如下代码,哪个表达是错误的?

class C1 {}
class C2 extends C1 { }
class C3 extends C2 { }
class C4 extends C1 { }

C1 c1 = new C1();
C2 c2 = new C2();
C3 c3 = new C3();
C4 c4 = new C4();

A.c1是C1的实例

B.c2是C1的实例

C.c3是C1的实例

D.c4是C2的实例

答案:D


6、关于以下程序代码的说明正确的是( ) 。

class  HasStatic{
private static int x=100
public static void main(String[ ] args){
HasStatic hs1=new HasStatic( );
hs1.x++;
HasStatic hs2=new HasStatic( );
hs2.x++;
hs1=new HasStatic( );
hs1.x++;
HasStatic.x--;
System.out.println(“x=”+x);
}
}

A.5行不能通过编译,因为引用了私有静态变量

B.10行不能通过编译,因为x是私有静态变量

C.程序通过编译,输出结果为:x=103

D.程序通过编译,输出结果为:x=102

答案:D


7、关于以下程序段,正确的说法是( ) 。

String  s1=”abc”+”def”;
String s2=new String(s1);
if(s1==s2)
System.out.println(“== succeeded”);
if (s1.equals(s2))
System.out.println(“.equals() succeeded”);

A.行4与行6都将执行

B.行4执行,行6不执行

C.行6执行,行4不执行

D.行4、行6都不执行

答案:C


8、假设类A有如下定义,且a是A类的一个实例,则必定错误的选项是( )。

class  A {
int i;
static String s;
void method1() { }
static void method2() { }
}

A.System.out.println(a.i);

B.a.method1();

C.A.method1();

D.A.method2() ;

答案:C


9、下列哪一种叙述是正确的() 。

A.abstract修饰符可修饰属性、方法和类

B.抽象方法的body部分必须用一对大括号{ }包住

C.声明抽象方法,大括号可有可无

D.声明抽象方法不可写出大括号

答案:D


10、定义字符串:String s1=”hello”;对下面程序描述正确的是()。

if(s1=="hello"){
System.out.println("s1 = "hello"");
}else{
System.out.println("s1 !=hello");
}

A.输出 s1 !=hello

B.编译正确,运行错误

C.产生编译错误

D.输出 s1=”hello”

答案:D


11、下面关于缺省构造方法的描述中正确的是( )。

A.当类中没有定义任何构造方法时,Java编译器将为这个类创建缺省构造方法

B.缺省构造方法可以初始化其他方法中定义的变量

C.Java编译器会为所有的类创建缺省构造方法。

D.如果在一个类中定义的构造方法都声明了参数,Java编译器将为这个类创建一个缺省构造方法

答案:A


12、有如下程序代码,程序执行的结果是:( )。

class Base {
static void test() {
System.out.println("Base.test()");
}
}

class Child extends Base {
static void test() {
System.out.println("Child.test()");
Base.test(); // Call the parent method
}
}

public class Main {
public static void main(String[] a) {
Child.test();
}
}

A.Child.test() Base.test()

B.Base.test() Base.test()

C.Base.test() Child.test()

D.Runtime error. Cannot override a static method by an instance method

答案:A


13、有如下程序代码,执行的结果是( )。

class Father {
int a = 100;
int b = 200;

public void print() {
System.out.println(a + " " + b);
}
}

class Child extends Father {
int b = 300;
int c = 400;

public void print() {
System.out.println(a + " " + b + " " + c);
}

public void printExtend() {
System.out.println(c);
}

}

public class Main {
public static void main(String[] a) {
Father obj=new Child();
System.out.println(obj.a+" "+obj.b);
obj.print();
}
}

A.

100 200

100 200 400

B.

100 300

100 300 400

C.

100 300

100 200 400

D.

100 200

100 300 400

答案:D


14、可以用于在子类中调用被重写父类方法的关键字是()

A.this

B. implements

C.extends

D.super

答案:D


15、何时发生成员方法的重写现象?

A.同一个包里的两个类有相同的方法名

B.引入包里的类与本类有相同的方法名

C.父类与子类的成员方法名称、参数列表相同的情况下

D.父类与子类的构造方法名称、参数列表相同的情况下

答案:C


16、下面这段代码的输出结果是什么?

class AA{
public int cal(int a,int b){
return a+b;
}
}
class BB extends AA{
@Override
public int cal(int a,int b){
return a*b;
}
}
class CC extends AA{
@Override
public int cal(int a,int b){
return 10*(a+b);
}
}
public class InterfaceTest2 {
public static void main(String args[]){
AA aa=new AA();
System.out.println(aa.cal(3,6));
aa=new BB();
System.out.println(aa.cal(3,6));
aa=new CC();
System.out.println(aa.cal(3,6));
}
}

A.

9
9
9

B.

9
18
18

C.

9
18
90

D.

18
18
90

答案:C


17、Java中关于方法覆盖的描述,下面错误的是?

A.覆盖包括方法的覆盖和成员变量的覆盖

B.成员方法的覆盖是多态的一种表现形式

C.子类可以调用父类中被覆盖的方法

D.任何方法都可以被覆盖

答案:D


18、Java中,下面是有关子类及父类构造方法的描述,其中正确的是?

A.创建子类的对象时,先调用子类自己的构造方法,然后调用父类的构造方法

B.子类无条件地继承父类不含参数的构造方法

C.子类必须通过super关键字调用父类的构造方法

D.子类无法继承父类的构造方法

答案:C


19、Java中关于抽象类的描述,错误的是?

A.抽象类中只有抽象方法

B.用abstract修饰的类是抽象类

C.抽象方法没有方法体

D.抽象类不能用来实例化对象

答案:A


20、在Java中,用abstract定义的类

A.可以被实例化

B.不能派生子类

C.不能被继承

D.只能被继承

答案:D


21、在Java语言中,关于this和super关键字说法正确的是?

A.都可以用在main()方法中

B.都是指一个内存地址

C.不能用在main()方法中

D.意义相同

答案:C


22、Java语言中,以下关于覆盖与重载说法正确的是?

A.覆盖只有发生在父类与子类之间,而重载可以发生在同一个类中

B.覆盖方法可以不同名,而重载方法必须同名

C.final修饰的方法可以被覆盖,但不能被重载

D.覆盖与重载是同一回事

答案:A


23、有以下Java程序,请问最后的t.printValue(10)会调用哪一个方法?(选择注释中编号)

class Person {
public void printValue(int i, int j) { } //1
public void printValue(int i){ } //2
}
public class Teacher extends Person {
public void printValue() { } //3
public void printValue(int i) {} //4
public static void main(String args[]){
Person t = new Teacher();
t.printValue(10);
}
}

A.1

B.2

C.3

D.4

答案:D


24、以下代码段将创建几个对象?

String s1="bc";
String s2="bc";

A.2

B.3

C.0

D.1

答案:D


25、请选择下面程序正确的输出结果( )

public class Main{
public static void main(String args[ ]){
String a = new String("A");
String b = new String("B");
mb_operate(a,b);
System.out.println(a + "." + b);
}
static void mb_operate(String x,String y){
x.concat(y);
y=x;
}
}

A.A.B

B.A.A

C.AB.AB

D.AB.B

答案:A


26、有如下程序代码,程序执行的结果是( )。

int i= 110; 
String str2=i+2+"lucky";
System.out.println(str2);

A.1102lucky

B.112lucky

C.lucky1102

D.lucky112

答案:B


27、关于字符串对象的比较,==用于比较字符串对象的( )是否相同;equals()方法用于比较字符串对象的( )是否相同。

A.存储地址 字符序列

B.存储地址 存储地址

C.字符序列 存储地址

D.字符序列 字符序列

答案:A


28、执行如下两行代码之后,则内存中存在几个字符串对象?( )

String str="abc"; 
str+="def";

A.1

B.2

C.3

D.4

答案:C


29、Java中,匹配11位手机号码的正则表达式是

A.(..)\1

B.[1-9]\d{4,14}

C.1[345789]\d{9}

D.(.)\1(.)\2

答案:C


30、有语句String s=”hello world”; ,以下操作哪个是不合法的?( )

A.int i=s.length();

B.s>>>=3;

C.String ts=s.trim();

D.String t=s+”!”;

答案:B


31、下列数组定义及赋值,错误的是( )。

A.int intArray[]; intArray = new int[3]; intArray[1] = 1; intArray[2] = 2; intArray[3] = 3;

B.int a[] = {1,2,3,4,5};

C.int a[][] = new int[2][]; a[0] = new int[3]; a[1] = new int[3]; a[0][2]=1;

D.int[] a = {1,2,3,4,5};

答案:A


32、有如下程序代码,程序输出结果是:( )。

int[] arr1=new int[10];
int[] arr2=new int[arr1.length];
System.out.println(Arrays.equals(arr1,arr2));

A.true

B.false

C.0

D.1

答案:A


33、有如下程序代码,执行后输出结果是:( )。

int[] arr1=new int[10];
int[] arr2=new int[arr1.length];
System.out.println(arr1==arr2);

A.true

B.false

C.0

D.1

答案:C


34、设有数组的定义int[] a = new int[3],则下面对数组元素的引用错误的是( )。

A.a[0]=8;

B.a[a.length-1]=90;

C.a[3]=9;

D.int i=1; a[i]=0;

答案:C


35、下面关于数组声明和初始化的语句那个有语法错误?( )

A.int a1[]={3,4,5};

B.String a2[]={“string1”,”string1”,”string1”};

C.String a3[]=new String(3);

D.int[][] a4=new int[3][3];

答案:C


36、在Java中,下列关于对象的类型转换的描述,说法错误的是?

A.对象的类型转换可通过自动转换或强制转换进行

B.无继承关系的两个类的对象之间试图转换会出现编译错误

C.由new语句创建的父类对象可以强制转换为子类的对象

D.子类的对象转换为父类类型后,父类对象不能调用子类的特有方法

答案:A


37、设有下面Java程序,请阅读程序并完成选择,以下哪个表达式的值为true?

public class Sample{
long length;
public Sample(long l){ length = l; }
public static void main(String arg[]){
Sample s1, s2, s3;
s1 = new Sample(21L);
s2 = new Sample(21L);
s3 = s2;
long m = 21L;
}
}

A.s1 == s2;

B. s2 == s3;

C.m == s1;

D.s1.equals(m);

答案:B


38、在Java中,下列关于常量的说法错误的是?

A.常量的值被赋值后,在程序运行过程中不允许再改变。

B.必须用final关键字修饰

C.Java规范中常量名一般大写

D.常量只允许被赋值一次

答案:D


39、在Java中,设 m、n、h 为类 Test 中定义的 int 型变量名,下列类 Test 的构造方法中不正确的是?

A.Test( int m){ … }

B.void Test( int m){ … }

C.Test( int m,int n){ … }

D.Test( int m,int n,int h){ … }

答案:B


40、在Java中,给出如下代码:

class Test{
private int m;
public static void fun() {
    //some code ...
  }
}

如何修改成员变量m的定义,让m可被函数fun()直接访问,以下选项正确的是?

A.将private int m 改为protected int m

B.将private int m 改为 public int m

C.将private int m 改为 static int m

D.将private int m 改为 int m

答案:C


(二)函数题

函数题

1、写出派生类构造方法(Java)

2-1

作者 周强

单位 青岛大学

裁判测试程序样例中展示的是一段定义基类People、派生类Student以及测试两个类的相关Java代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。

函数接口定义

提示:
观察类的定义和main方法中的测试代码,补全缺失的代码。

裁判测试程序样例

注意:真正的测试程序中使用的数据可能与样例测试程序中不同,但仅按照样例中的格式调用相关方法(函数)。

class People{
private String id;
private String name;
public People(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
}

class Student extends People{
private String sid;
private int score;
public Student(String id, String name, String sid, int score) {

/** 你提交的代码将被嵌在这里(替换此行) **/

}
public String toString(){
return ("(Name:" + this.getName()
+ "; id:" + this.getId()
+ "; sid:" + this.sid
+ "; score:" + this.score
+ ")");
}

}
public class Main {
public static void main(String[] args) {
Student zs = new Student("370202X", "Zhang San", "1052102", 96);
System.out.println(zs);

}
}

输入样例

在这里给出一组输入。例如:

(无)

输出样例:

(Name:Zhang San; id:370202X; sid:1052102; score:96)

代码长度限制:16 KB

时间限制:400 ms

内存限制:32 MB

答案:

super(id, name);
this.sid = sid;
this.score = score;

2、微信名片类

2-2

作者 张峰

单位 山东科技大学

编码实现微信名片类WeChat,其中有属性number(微信号,String类型)和nickname(昵称,String类型),重写Object类的equals和toString方法,要求:1)两个微信名片对象的微信号相同则equals方法返回true,否则返回false;2)toString返回字符串“WeChat: xx, nicename: yy”,xx和yy分别表示微信名片的微信号和昵称。

函数接口定义

Object类中的equals和toString方法定义

裁判测试程序样例

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
WeChat weChat1 = new WeChat(scanner.next(), scanner.next());
WeChat weChat2 = new WeChat(scanner.next(), scanner.next());
System.out.println(weChat1);
System.out.println(weChat2);
System.out.println(weChat1.equals(weChat2));

scanner.close();
}
}

/* 请在这里填写答案 */

输入样例

15153206666 Tom
15153206666 Peter

输出样例

WeChat: 15153206666, nicename: Tom
WeChat: 15153206666, nicename: Peter
true

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

答案:

class WeChat{
String number;
String nickname;

public WeChat(String number, String nickname) {
this.number = number;
this.nickname = nickname;
}

public boolean equals(WeChat w) {
if(this.number.equals(w.number)){
return true;
}
return false;
}

@Override
public String toString() {
return "WeChat: "+this.number+", nicename: "+this.nickname+"";
}
}

(三)编程题

编程题

1、统计一个子串在整串中出现的次数

3-1

作者 吴光生

单位 新余学院

编写一个程序,统计一个子串在整串中出现的次数,例如子串“nba”在整串“nbaabcdefnbaxyzmba”中出现的次数为2。要求使用String或者StringBuffer类的常用方法来计算出现的次数。

请注意:含有main方法的类(class)的名字必须命名为Main,否则调试不成功。

输入格式:

输入两行,每行输入一个字符串。第一个当作整串,第二个当作子串。每个字符串的中间不要出现换行符(Enter)、空格、制表符(Tab)。

输出格式:

输出子串在整串中出现的次数,结果是一个大于或等于0的整数。

输入样例1:

在这里给出一组输入。例如:

吃葡萄不吐葡萄皮,不吃葡萄倒吐葡萄皮。
葡萄

输出样例1:

在这里给出相应的输出。例如:

4

输入样例2:

在这里给出一组输入。例如:

abcdefghijklmn
cdf

输出样例2:

在这里给出相应的输出。例如:

0

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.next();
String p=sc.next();
int count=0;
Pattern pt=Pattern.compile(p);
Matcher m=pt.matcher(str);
while(m.find()){
count++;
}
System.out.println(count);
}
}
// import java.util.Scanner;

// public class Main {
// public static void main(String[] args) {
// Scanner sc=new Scanner(System.in);
// String str=sc.next();
// String regex=sc.next();

// String[] s=str.split(regex);
// int count=s.length-1;
// System.out.println(count);
// }
// }

2 字符串排队

3-2

作者 马俊

单位 兰州大学

从键盘上输入若干个英文单词,请按照字典顺序将这些单词输出。

输入格式:

在一行中输入不超过20个英文单词,用空格分开。

输出格式:

在一行中输出前面输入的英文单词,按照字典序顺序输出,用空格作为分割符。

输入样例:

I am a student

输出样例:

I a am student

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] words = sc.nextLine().split(" ");
Arrays.sort(words);
for (String word : words) {
System.out.print(word + " ");
}
}
}

3、Java面向对象-类定义1

3-3

作者 马俊

单位 兰州大学

定义一个Person类 (非公有),有以下成员:
私有属性: name (字符串)
私有属性:age(整形)
公有方法:eat(),运行时输出“eating food!”
公有方法:intruduceMe(),运行时输出“My name is XXX, my age is YY”

其中XXX为不超过30个字符的字符串,YY为整数1-99之间的整数。

评测程序中Main类如下(可以复制粘贴以下代码到编写的源程序中,放到Person类后):

public class Main {
public static void main(String[] args) {
Scanner keyin=new Scanner(System.in);
Person p1=new Person();
String str=keyin.next();
int a=keyin.nextInt();
p1.setName(str);
p1.setAge(a);
try {
Field name=p1.getClass().getDeclaredField("name");
Field age=p1.getClass().getDeclaredField("age");
Field sex=p1.getClass().getDeclaredField("sex");
if(name.getModifiers()!=2||age.getModifiers()!=2||sex.getModifiers()!=2){
System.out.println("有属性不是私有的!");
}
}catch(NoSuchFieldException e1){
System.out.println("有属性没有定义!");
}


Method getName=null,getAge=null,setName=null,setAge=null,eat=null,introduceMe=null;

try {
eat=p1.getClass().getDeclaredMethod("eat");
introduceMe=p1.getClass().getDeclaredMethod("introduceMe");

getName=p1.getClass().getDeclaredMethod("getName");
getAge=p1.getClass().getDeclaredMethod("getAge");
setName=p1.getClass().getDeclaredMethod("setName",String.class);
setAge=p1.getClass().getDeclaredMethod("setAge",int.class);

if(eat.getModifiers()!=1||introduceMe.getModifiers()!=1||setName.getModifiers()!=1||getName.getModifiers()!=1||getAge.getModifiers()!=1||setAge.getModifiers()!=1){
System.out.println("有方法不是公有的!");
}
p1.eat();
p1.introduceMe();
}catch(NoSuchMethodException e){
System.out.println("有方法没有定义!");
}
}
}

输出格式:

输出两行,分别是eat方法和introduceMe方法的输出,参考输出样例。

输入样例:

在这里给出一行输入,其中年龄的值在1到99之间。例如:

zhangsan 25

输出样例:

在这里给出相应的输出。例如:

eating food!
My name is zhangsan,my age is 25

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Scanner;

class Person {
private String name;
private int age;
private int sex;

public Person() {
}

public Person(String name, int age, int sex) {
this.name = name;
this.age = age;
this.sex = sex;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public int getSex() {
return sex;
}

public void setSex(int sex) {
this.sex = sex;
}

public void eat(){
System.out.println("eating food!");
}

public void introduceMe() {
System.out.println("My name is "+getName()+", my age is "+getAge()+"");
}
}
public class Main {
public static void main(String[] args) {
Scanner keyin=new Scanner(System.in);
Person p1=new Person();
String str=keyin.next();
int a=keyin.nextInt();
p1.setName(str);
p1.setAge(a);
try {
Field name=p1.getClass().getDeclaredField("name");
Field age=p1.getClass().getDeclaredField("age");
Field sex=p1.getClass().getDeclaredField("sex");
if(name.getModifiers()!=2||age.getModifiers()!=2||sex.getModifiers()!=2){
System.out.println("有属性不是私有的!");
}
}catch(NoSuchFieldException e1){
System.out.println("有属性没有定义!");
}


Method getName=null,getAge=null,setName=null,setAge=null,eat=null,introduceMe=null;

try {
eat=p1.getClass().getDeclaredMethod("eat");
introduceMe=p1.getClass().getDeclaredMethod("introduceMe");

getName=p1.getClass().getDeclaredMethod("getName");
getAge=p1.getClass().getDeclaredMethod("getAge");
setName=p1.getClass().getDeclaredMethod("setName",String.class);
setAge=p1.getClass().getDeclaredMethod("setAge",int.class);

if(eat.getModifiers()!=1||introduceMe.getModifiers()!=1||setName.getModifiers()!=1||getName.getModifiers()!=1||getAge.getModifiers()!=1||setAge.getModifiers()!=1){
System.out.println("有方法不是公有的!");
}
p1.eat();
p1.introduceMe();
}catch(NoSuchMethodException e){
System.out.println("有方法没有定义!");
}
}
}


4、多态练习-计算面积

3-4

作者 向北

单位 丽江文化旅游学院

定义三个类,父类(抽象类)GeometricObject代表几何形状,子类Circle代表圆形,子类Rectangle代表矩形。具体属性和方法如下:
父类 (抽象类)GeometricObject
属性:
private String color;
private String name;
为上述变量提供getter()和setter()方法
构造方法:为color和name初始化
public GeometricObject(String color, String name)
public GeometricObject(字符串颜色,字符串名称)
抽象方法:
public double findArea();用于计算几何图形的面积

子类:
Circle
属性:
private double radius;半径
为上述变量提供getter()和setter()方法
构造方法:
设计构造方法为圆形的name,color和radius初始化
方法:
实现findArea()方法用于计算圆形的面积并返回计算结果

子类:
Rectangle
属性:
private double width;宽
private double height;高
为上述变量提供getter()和setter()方法
构造方法:
设计构造方法为圆形的name,color,width和height初始化
方法:
实现findArea()方法用于计算矩形的面积并返回计算结果

测试类Main
方法:
public static void main(String[] args) {
创建圆形对象(”长方形”,”蓝色”,3.2,4.5)
输出圆形的颜色和面积
创建矩形对象(“圆形”,”红色”,3.4)
输出矩形的颜色和面积
}
public static void show(GeometricObject g){
//形参传入圆形或者矩形的对象,输出其面积
//判断传入的对象是圆形还是矩形
//如果是圆形就输出圆形的颜色和面积;
//如果是矩形就输出矩形的颜色和面积;
}
注意:1.所有类不用修饰词
2.测试类名称为“Main”,否则编译出错

在这里给出一组输入。例如:


输出样例:

在这里给出相应的输出。例如:

矩形的颜色是:蓝色,面积是:14.4
圆形的颜色是:红色,圆形的面积是:36.31681107549801

代码长度限制:16 KB

时间限制:400 ms

内存限制:64 MB

栈限制:8192 KB

答案:

import java.awt.*;

public class Main {
public static void main(String[] args) {
Rectangle r = new Rectangle("长方形","蓝色",3.2,4.5);
System.out.println("矩形的颜色是:"+r.getColor()+",面积是:"+r.findArea());
Circle c = new Circle("圆形", "红色", 3.4);
System.out.println("圆形的颜色是:"+c.getColor()+",圆形的面积是:"+c.findArea());
}
public static void show(GeometricObject g){
if(g instanceof Circle){
Circle c = (Circle) g;
System.out.println("圆形的颜色是:"+c.getColor()+", 圆形的面积是:"+c.findArea());
}else if(g instanceof Rectangle){
Rectangle r = (Rectangle) g;
System.out.println("矩形的颜色是:"+r.getColor()+", 面积是:"+r.findArea());
}
}
}

abstract class GeometricObject {
private String color;
private String name;

public GeometricObject(String color, String name) {
this.color = color;
this.name = name;
}

public String getColor() {
return color;
}

public String getName() {
return name;
}

public abstract double findArea();
}
class Circle extends GeometricObject {
private double radius;

public Circle(String name, String color, double radius) {
super(color, name);
this.radius = radius;
}

public double getRadius() {
return radius;
}

public void setRadius(double radius) {
this.radius = radius;
}

@Override
public double findArea() {
return Math.PI * radius * radius;
}
}
class Rectangle extends GeometricObject {
private double width;
private double height;

public Rectangle(String name, String color, double width, double height) {
super(color, name);
this.width = width;
this.height = height;
}

public double getWidth() {
return width;
}

public void setWidth(double width) {
this.width = width;
}

public double getHeight() {
return height;
}

public void setHeight(double height) {
this.height = height;
}

@Override
public double findArea() {
return width * height;
}
}

数据库系统原理

课堂练习(选择判断)

课堂练习(选择判断)

(13)数据库第11章1(23软工1)

数据库第11章1(23软工1)

1、存储过程是在 MySQL 服务器中定义并( )的 SQL 语句集合。

A.保存

B.解释

C.执行

D.编写

答案:C


2、调用自定义函数使用:

A.CALL

B.LOA

DC.CREATE

D.SELECT

答案:D


3、创建自定义函数使用:

A.CREATE TRIGGER

B.CREATE FUNCTION

C.CREATE PROCEDURE

D.CREATE VIEW

答案:B


4、在MySQL中创建存储过程,以下正确的是 __

A.CREATE PROCEDURE

B.CREATE FUNCTION

C.CREATE DATABASE

D.CREATE TABLE

答案:A


5、下面声明变量正确的是( )。

A.declare x char(10) default ‘outer ‘

B.declare x char default ‘outer ‘

C.declare x char(10) default outer

D.declare x default ‘outer ‘

答案:A


(12)数据库第3章范式(23软工1)

数据库第3章范式(23软工1)

判断

1、任何一个二目关系是属于3NF。(T)

2、在BCNF范式中所有非主属性对每一个码都是完全函数依赖。 (T)


选择

1、已知有关系模式R(A,B,C,D)其函数依赖集是F={A->B,B->CD,A->D},则下列函数依赖不成立的是( )。

A.AB->C

B.AB->D

C.B->ACD

D.A->BCD

答案:C


2、设F是某关系模式的极小函数依赖集。下列关于F的说法,错误的是:

A.F中每个函数依赖的右部都必须是单个属性

B.F中每个函数依赖的左部都必须是单个属性

C.F中不能有冗余的函数依赖

D.F中每个函数依赖的左部不能有冗余属性

答案:B


3、设有关系模式:学生(学号,姓名,所在系,班号,班主任,系主任),其语义为:一个学生只在一个系的一个班学习,一个系只有一个系主任,一个班只有一名班主任,一个系可以有多个班。学号是此关系模式的主码,则该关系模式至少属于:

A.第一范式

B.第二范式

C.第三范式

D.BC范式

答案:B


(11)第3章规范化(23软工1)

第3章规范化(23软工1)

1、下列函数中,( )是平凡的函数依赖

A.AB->BC

B.AB->CD

C.AB->A

D.AB->D

答案:C


2、在一个关系模式R(A,B,C,D)中,若各个属性间没有任何函数依赖关系,则该模式的主属性是( )。

A.A,B,C,D

B.R,A

C.A,B

D.R,A,B,C,D

答案:A


3、对关系模式进行规范化的主要目的是:

A.提高数据操作效率

B.维护数据的一致性

C.加强数据的安全性

D.为用户提供更快捷的数据操作

答案:B


4、关系模式中的插入异常是指:

A.插入的数据违反了实体完整性约束

B.插入的数据违反了用户定义的完整性约束

C.插入了不该插入的数据

D.应该被插入的数据不能被插入

答案:D


5、若关系模式R中属性A是N类属性,则A:

A.一定不包含在R任何候选码中

B.可能包含也可能不包含在R的候选码中

C.一定包含在R的某个候选码中

D.一定包含在R的任何候选码中

答案:D


(10)数据库第4章1(23软工1)

数据库第4章(23软工1)

1、在进行数据库逻辑结构设计时,判断设计是否合理的常用依据是:

A.规范化理沦

B.概念数据模型

C.数据字典

D.数据流图

答案:A


2、数据流图是从“数据”和“处理”两方面来表达数据处理的一种图形化表示方法,该方法主要用在数据库设计的:

A.需求分析阶段

B.概念结构设计阶段

C.逻辑结构设计阶段

D.物理结构设计阶段

答案:A


3、在将局部E-R图合并为全局E-R图时,可能会产生一些冲突。下列冲突中不属于合并E-R图冲突的是:

A.结构冲突

B.语法冲突

C.属性冲突

D.命名冲突

答案:B


4、—个银行营业所可以有多个客户,一个客户也可以在多个营业所进行存取款业务,则客户和银行营业所之间的联系是:

A. —对一

B.—对多

C.多对一

D.多对多

答案:D


5、E-R模型是数据库设计的工具之一,它一般适用于建立数据库的:

A.概念模型

B.结构模型

C.物理模型

D.逻辑模型

答案:A


(9)数据库第4章1(23软工1)

数据库第4章(23软工1)

1、概念模型依赖于DBMS和硬件设备。(F)

2、数据字典通常包括数据项,数据结构,数据流,数据存储,和处理过程五个部分。(T)

3、描述概念模型的有力工具是数据字典。 (F)

4、在 E-R 图中,用来表示属性的图形是椭圆形。(T)

5、概念结构设计中最经常采用的策略是自顶向下的方法。 (F)


(8)数据库第10章(23软工1)

数据库第10章(23软工1)

1、向视图添加数据时,不必满足视图的基本表中对应字段的约束条件。(F)

2、为视图添加数据,相当于向创建视图的表添加数据。(T)

3、视图是定义在基本表之上的,对视图的操作最终也要转换为对基本表的操作。(T)

4、视图可以看成是虚表,因为它是从基表中提取数据,自己不存储数据。(T)

5、删除视图同时也会删除视图依赖的数据表。(F)


(7)数据库第9章(23软工1)

数据库第9章(23软工1)

判断

1、主键约束的字段值要同时满足非空和唯一性。(T)

2、索引只能创建在单个字段上。(F)

3、索引如同书的目录一样,不会占用存储空间。(F)


选择

1、下列选项中,适合创建索引的情况是:

A.查询条件中较少使用的字段

B.更新频繁的字段

C.经常作为连接和分组条件的字段

D.重复值高的字段

答案:C


2、SQL语言中DROP INDEX语句的作用是__

A.删除索引

B.更新索引

C.建立索引

D.修改索引

答案:A


(6)数据库第8章4(23软工1)

数据库第8章4(23软工1)

1、表示删除记录的SQL语句是?

A.SELECT

B.INSERT

C.DELETE

D.UPDATE

答案:C


2、若要彻底删除数据库中已经存在的表S,可用()。

A.DELETE TABLE S

B.DELETE S

C.DROP TABLE S

D.DROP S

答案:C


3、在SQL语言中,修改表结构时,应使用的命令是:

A.CREATE

B.ALTER

C.UPDATE

D.INSERT

答案:B


4、语句 DELETE FROM sc 表示的含义是:

A.删除基本表 sc 中的全部记录

B.删除基本表sc

C.删除基本表 sc 中的重复数据

D.删除基本表 sc 中的部分行

答案:A


5、若要在基本表S中增加一列CN(课程名),可用()。

A.ADD TABLE S(CN CHAR(8))

B.ADD TABLE S ALTER(CN CHAR(8))

C.ALTER TABLE S ADD(CN CHAR(8))

D.ALTER TABLE S (ADD CN CHAR(8))

答案:C


(5)数据库第8章3(23软工1)

数据库第8章3(23软工1)

1、自连接查询指相互连接的表在物理上为同一个表,但逻辑上分为两个表。 (T)

2、左连接“表1 LEFT JOIN 表2”的作用与“表2 RIGHT JOIN 表1”等价。 (T)

3、外连接可以保留主表中与从表不匹配的记录。(T)

4、当为一个表定义了别名后,凡是列名前要求冠此表名的,在本语句中都得使用其表名,不得再使用原表名。(T)

5、内连接查询INNER JOIN可以获得两个表连接字段值相等的所有记录。(T)


(4)数据库第8章2(23软工1)

数据库第8章2(23软工1)

1、与表达式:成绩BETWEEN 0 AND 100 等效的表达式是:

A.成绩>0 and 100

B.成绩>=0 and <=100

C.成绩>=0 and 成绩<=100

D.成绩>0 and 成绩<100

答案:C


2、查询所有姓张的、且出生日期为空的学生信息,WHERE条件应为:

A.姓名 LIKE ‘张%’ AND 出生日期 = NULL

B.姓名 LIKE ‘张*’ AND 出生日期 = NULL

C.姓名 LIKE ‘张%’ AND 出生日期 IS NULL

D.姓名 LIKE ‘张_’ AND 出生日期 IS NULL

答案:C


3、SELECT 语句中,”HAVING 条件表达式”用来筛选满足条件的:

A.行

B.列

C.关系

D.分组

答案:D


4、已知关系:成绩(学号,课程号,分数),计算9512101号学生的考试总成绩之和正确的语句是?

A.select sum(分数) from 成绩 where 学号=’9512101’;

B.select avg(分数) from 成绩 where 学号=’9512101’;

C.select count(分数) from 成绩 where 学号=’9512101’;

D.select max(分数) from 成绩 where 学号=’9512101’;

答案:A


5、已知关系:学生(学号,姓名,性别,年龄,系别,班级),统计各系的男、女生人数正确的语句是?

A.SELECT系别,性别, count(姓名) as 人数 FROM 学生 GROUP BY 系别, 姓名;

B.SELECT系别,性别, count(学号) as 人数 FROM 学生 GROUP BY 系别, 性别;

C.SELECT系别,性别, count(班级) as 人数 FROM 学生 GROUP BY 系别, 班级;

D.SELECT系别,性别, count(学号) as 人数 FROM 学生 GROUP BY 学号, 性别;

答案:B


(3)数据库第8章1(23软工1)

数据库第8章1(23软工1)

1、在 SQL 中,WHERE 子句指出的是:

A.查询内容

B.查询条件

C.查询结果

D.数据源

答案:B


2、关于列别名,叙述正确的是:

A.列别名用关键字 NAME 说明替换为错误项

B.列别名用关键字 AS 说明

C.设置列别名就是永久性改变了基本表中的字段名

D.列别名设置后,其他所有查询都只能用别名

答案:B


3、在查询中,要把结果按照某一列的值进行排序,所用到的子句是:

A.ORDER BY

B.WHERE

C.GROUP BY

D.HAVING

答案:A


4、使用关键字( )可以清除查询结果中的重复行。

A.DISTINCT

B.UNION

C.ALL

D.TOP

答案:A


5、只有满足连接条件的记录才包含在查询结果中,这种连接为:

A.左外连接

B.右外连接

C.内连接

D.交叉连接

答案:C


(2)数据库第3章练习1(23软工1)

数据库第3章练习1(23软工1)

1、自然连接是构成新关系的有效方法。一般情况下,当对关系R和S使用自然连接时,要求R和S含有一个或多个共有的( )

A.元组

B.行

C.记录

D.属性

答案:D


2、关系运算中花费时间可能最长的运算是( )

A.投影

B.选择

C.笛卡尔积

D.除

答案:C


3、关系模式的任何属性( )

A.不可再分

B.可再分

C.命名在该关系模式中可以不唯一

D.其余选项均错误

答案:A


4、设关系R和S的元组个数分别为r和s,则R×S操作结果的元组个数为()。

A.r+s

B.r×s

C.r-s

D.无法确定

答案:B


5、有两个关系R(A,B,C) 和S(B,C,D) ,将R 和 S 进行等值连接,得到的结果包含( )列。

A.6

B.5

C.4

D.3

答案:A


(1)数据库第2章练习1(23软工1)

数据库第2章练习1(23软工1)

1、关系的完整性约束不包括?

A.实体完整性

B.参照完整性

C.用户定义完整性

D.结构完整性

答案:D


2、表的每一列的所有取值范围称为()。

A.元组

B.域

C.属性

D.分量

答案:B


3、关于关系的属性的描述,正确的是__

A.在一个关系中可以出现同名的属性

B.关系的属性可以分解为更小的操作单元

C.关系的属性不可再分

D.以上都不对

答案:C


4、设属性A是关系R的主属性,则属性A不能取空值(NULL),这是( )。

A.实体完整性约束

B.参照完整性约束

C.用户定义的完整性约束

D.不存在约束

答案:A


5、根据实体完整性的规则,下面关于一个关系中主码的 描述正确的是

A.主码分量的值不可以重复,但是可以为空

B.主码分量的值不可以重复,也不可以为空

C.主码分量的值可以重复,但是不可以为空

D.以上都不对

答案:B


编程/实验

编程/实验

一、SLECTE查询

SLECT查询

1 查询重量在[40,65]之间的产品信息

1-1

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求编写SQL语句,
检索出product表中所有符合40 <= Weight <= 65的记录。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `product` (
`Pid` varchar(20), --商品编号
`PName` varchar(50), --商品名称
`Weight` decimal(10, 3) --重量
);

表样例

product表:

PidPNameWeight
P01M6螺栓30
P02M8螺栓40
P03M16螺栓140
P04螺帽30
P05螺母45
P06垫片10
P07铰链70
P21螺钉3

输出样例:

PidPNameWeight
P02M8螺栓40
P05螺母45

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `product` (
`Pid` varchar(20),
`PName` varchar(50),
`Weight` decimal(10, 3)
);

答案:

select * from product where Weight<=65 and Weight>=40;

2 查询姓刘的员工信息

1-2

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求编写SQL语句,
检索出employee表中姓刘的员工信息。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `employee` (
`Eid` varchar(10), --职工编号
`EName` varchar(30), --职工姓名
`Wno` varchar(10), --所在仓库
`Salary` int(11) --职工工资
);

表样例

employee表:

EidENameWnoSalary
0010张三A013600
0011刘勇A012700
0012张立A018500
0021刘靖A022500
0022王强A025600
0023李军5000
0031王林3500

输出样例:

EidENameWnoSalary
0011刘勇A012700
0021刘靖A022500

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `employee` (
`Eid` varchar(10),
`EName` varchar(30),
`Wno` varchar(10),
`Salary` int(11)
);

答案:

select * from employee where EName like '刘%';

3 查询仓库号为’A01’的所有员工信息,并按照工资降序排列

1-3

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求编写SQL语句,
检索出employee表中仓库号为’A01’的所有员工信息,并按照工资降序排列。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `employee` (
`Eid` varchar(10), --职工编号
`EName` varchar(30), --职工姓名
`Wno` varchar(10), --所在仓库
`Salary` int(11) --职工工资
);

表样例

employee表:

EidENameWnoSalary
0010张三A013600
0011刘勇A012700
0012张立A018500
0021刘靖A022500
0022王强A025600
0023李军5000
0031王林3500

输出样例:

EidENameWnoSalary
0012张立A018500
0010张三A013600
0011刘勇A012700

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `employee` (
`Eid` varchar(10),
`EName` varchar(30),
`Wno` varchar(10),
`Salary` int(11)
);

答案:

select * from employee where Wno = 'A01' order by Salary desc;

4 查询Product表中登记日期在2019年的商品信息

1-4

作者 冰冰

单位 广东东软学院

本题目要求编写SQL语句,
检索出employee表中仓库号为’A01’的所有员工信息,并按照工资降序排列。

提示:请使用SELECT语句作答。

要求编写SQL语句,查询Product表中登记日期在2019年的商品信息,并按销售价格降序排列。

表结构:

CREATE TABLE Product
(product_id CHAR(4) NOT NULL, --商品编号
product_name VARCHAR(100) NOT NULL, --商品名称
product_type VARCHAR(32) NOT NULL, --商品种类
sale_price INTEGER , --销售价格
purchase_price INTEGER , --进货价格
regist_date DATE , --登记日期
PRIMARY KEY (product_id));

表样例

Product

图1.png

输出样例:

Product

图2.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `employee` (
`Eid` varchar(10),
`EName` varchar(30),
`Wno` varchar(10),
`Salary` int(11)
);

答案:

select * from Product where year(regist_date) = 2019 order by sale_price desc;

5 查询所在城市为‘上海’或‘杭州’的仓库编号

1-5

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求编写SQL语句,
检索出warehouse表中``所在城市为‘上海’或‘杭州’的仓库编号```的记录。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `warehouse` (
`Wno` varchar(10), --仓库编号
`City` varchar(20), --所在城市
`Size` int(11), --面积
);

表样例

warehouse表:

WnoCitySize
A01杭州15000
A02建德5000
B01宁波1200
B02奉化7500
C01温州10000
C02乐清8000
D01绍兴11000

输出样例:

Wno
A01

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `warehouse` (
`Wno` varchar(10),
`City` varchar(20),
`Size` int(11)
);

答案:

select Wno from warehouse where City = '上海' or City = '杭州';

6 查询销售过的产品编号

1-6

作者 浙大城院数据库课程组

单位 浙大城市学院

例如:本题目要求编写SQL语句,
检索出orders表中所有销售过的产品编号

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `orders` (
`OrdNo` int(11), --订单编号
`Sid` varchar(10), --供应商编号
`Eid` varchar(10), --职工编号
`Pid` varchar(20), --商品编号
`Price` decimal(10,2), --价格
`QTY` int(11), --订购数量
`ordDate` date --订单日期
);

表样例

orders表:

OrdNoSidEidPidPriceQTYordDate
1S010011P0111232022-02-13
2S020012P0112252022-02-14
3S030012P0360552022-02-14

输出样例:

请在这里给出输出样例。例如:

Pid
P01
P03

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `orders` (
`OrdNo` int(11),
`Sid` varchar(10),
`Eid` varchar(10),
`Pid` varchar(20),
`Price` decimal(10,2),
`QTY` int(11),
`ordDate` date
);

答案:

select distinct Pid from orders where QTY > 0;

7 查询每个供应商的信息及其供货的订单编号

1-7

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求编写SQL语句,
查询每个供应商的信息及其供货的订单编号。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `orders` (
`OrdNo` int(11), --订单编号
`Sid` varchar(10), --供应商编号
`Eid` varchar(10), --职工编号
`Pid` varchar(20), --商品编号
`Price` decimal(10,2), --价格
`QTY` int(11), --订购数量
`ordDate` date --订单日期
);

CREATE TABLE `supplier` (
`Sid` varchar(10), --供应商编号
`SName` varchar(50), --供应商名称
`City` varchar(20) --供应商地址
);

表样例

orders表:

OrdNoSidEidPidPriceQTYordDate
1S010011P0111232022-02-13
2S020012P0112252022-02-14
3S030012P0360552022-02-14

supplier表:

SidSNameCity
S01东风机械厂武汉
S02天鹰紧固件厂温州
S05长城机电杭州

输出样例:

SidSNameCityOrdNo
S01东风机械厂武汉1
S02天鹰紧固件厂温州2
S02天鹰紧固件厂温州3

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `supplier` (
`Sid` varchar(10),
`SName` varchar(50),
`City` varchar(20)
);
CREATE TABLE `orders` (
`OrdNo` int(11),
`Sid` varchar(10),
`Eid` varchar(10),
`Pid` varchar(20),
`Price` decimal(10,2),
`QTY` int(11),
`ordDate` date
);

答案:

select supplier.Sid, supplier.SName, supplier.City, orders.OrdNo
from orders, supplier
where orders.Sid = supplier.Sid ;

8 计算Product表中销售价格的最大值和进货价格的最小值

1-8

作者 冰冰

单位 广东东软学院

要求编写SQL语句,查询Product表中销售价格的最大值和进货价格的最小值。

表结构:

CREATE TABLE Product
(product_id CHAR(4) NOT NULL, --商品编号
product_name VARCHAR(100) NOT NULL, --商品名称
product_type VARCHAR(32) NOT NULL, --商品种类
sale_price INTEGER , --销售价格
purchase_price INTEGER , --进货价格
regist_date DATE , --登记日期
PRIMARY KEY (product_id));

表样例:

Product

图1.png

输出样例:

Product

图2.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE Product
(product_id CHAR(4) NOT NULL, --商品编号
product_name VARCHAR(100) NOT NULL, --商品名称
product_type VARCHAR(32) NOT NULL, --商品种类
sale_price INTEGER , --销售价格
purchase_price INTEGER , --进货价格
regist_date DATE , --登记日期
PRIMARY KEY (product_id));

答案:

select max(sale_price) top_sale, min(purchase_price) bottom_pur from Product;

9 查询每名职工的工号和姓名及所属的仓库编号和所在城市

1-9

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求使用外连接来编写SQL语句,
查询每名职工的工号和姓名及所属的仓库编号和所在城市。

提示:请使用SELECT语句作答。

表结构:

CREATE TABLE `employee` (
`Eid` varchar(10), --职工编号
`EName` varchar(30), --职工姓名
`Wno` varchar(10), --所在仓库
`Salary` int(11) --职工工资
);
CREATE TABLE `warehouse` (
`Wno` varchar(10), --仓库编号
`City` varchar(20), --所在城市
`Size` int(11), --面积
);

表样例

employee表:

EidENameWnoSalary
0010张三A013600
0011刘勇A012700
0012张立A018500
0021刘靖A022500
0022王强A025600
0023李军5000
0031王林3500

warehouse表:

WnoCitySize
A01杭州15000
A02建德5000
B01宁波1200
B02奉化7500
C01温州10000
C02乐清8000
D01绍兴11000

输出样例:

EidENameWnoCity
0010张三A01杭州
0011刘勇A01杭州
0012张立A01杭州
0021刘靖A02建德
0022王强A02建德
0023李军
0031王林

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE Product
(product_id CHAR(4) NOT NULL, --商品编号
product_name VARCHAR(100) NOT NULL, --商品名称
product_type VARCHAR(32) NOT NULL, --商品种类
sale_price INTEGER , --销售价格
purchase_price INTEGER , --进货价格
regist_date DATE , --登记日期
PRIMARY KEY (product_id));

答案:

select employee.Eid,employee.EName,employee.Wno,warehouse.City
from employee left join warehouse
on employee.Wno = warehouse.Wno;

10 查询所有产品名中包含’螺母’的产品种类数

1-10

作者 浙大城院数据库课程组

单位 浙大城市学院

本题目要求编写SQL语句,
检索出product表中所有产品名中包含’螺母’的产品种类数。

提示:请使用SELECT语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `product` (
`Pid` varchar(20), --商品编号
`PName` varchar(50), --商品名称
`Weight` decimal(10, 3) --重量
);

表样例

product表:

PidPNameWeight
P01M6螺栓30
P02M8螺栓40
P03M16螺栓140
P04螺帽30
P05螺母45
P06垫片10
P07铰链70
P21螺钉3

输出样例:

请在这里给出输出样例。例如:

count(*)
1

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `product` (
`Pid` varchar(20),
`PName` varchar(50),
`Weight` decimal(10, 3)
);

答案:

select count(*)
from product
where PName like '螺母';

11 查询学生表中的女生信息

1-11

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索出stu 表中所有的女生记录。注意:sex为1时表示 男生,sex为0时表示女生。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

输出样例:

请在这里给出输出样例。例如:

l23.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

答案:

select sno 学号,sname 姓名
from stu
where sex=0

12 查询年龄18-20之间的学生信息

1-12

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索出stu表中年龄在18-20之间的学生记录。

注意: 计算年龄时以年计算,不考虑出生月份。假定当前日期为‘2020-03-01’。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

输出样例:

请在这里给出输出样例。例如:

l25.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

答案:

select sno 学号,sname 姓名,sex 性别,mno 专业,2020-year(birdate) 年龄,memo 备注
from stu
where 2020-year(birdate) between 18 and 20

13 查询姓‘李’的学生记录

1-13

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索出stu表中所有姓‘李’的学生记录。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

输出样例:

请在这里给出输出样例。例如:

l26.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

答案:

select sno 学号,sname 姓名,sex 性别,mno 专业,birdate 出生日期,memo 备注
from stu
where sname like '李%'

14 查询未登记成绩的学生

1-14

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索出sc表中‘C001’课程未登记成绩的学生学号

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `sc` (
`sno` char(4) NOT NULL, -- 学号
`cno` char(4) NOT NULL, -- 课程号
`grade` decimal(6,1) DEFAULT NULL, -- 成绩
PRIMARY KEY (`sno`,`cno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l211.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `sc` (
`sno` char(4) NOT NULL, -- 学号
`cno` char(4) NOT NULL, -- 课程号
`grade` decimal(6,1) DEFAULT NULL -- 成绩
);

答案:

select sno 
from sc
where cno='C001'and grade is NULL

15 查询选修‘C语言’课程的学生

1-15

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索出所有选修’C语言’课程的学生成绩记录,输出结果集按照成绩降序排序。

分别尝试用以下几种方式实现。
1)采用连接查询
2)采用嵌套查询
3)采用EXIST查询

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `cou` (
`cno` char(4) NOT NULL,
`cname` varchar(30) NOT NULL,
`credit` smallint(6) DEFAULT NULL,
`ptime` char(5) DEFAULT NULL,
`teacher` char(10) DEFAULT NULL,
PRIMARY KEY (`cno`)
) ;
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

cou表:

cou.JPG

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l212.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `cou` (
`cno` char(4) NOT NULL,
`cname` varchar(30) NOT NULL,
`credit` smallint(6) DEFAULT NULL,
`ptime` char(5) DEFAULT NULL,
`teacher` char(10) DEFAULT NULL,
PRIMARY KEY (`cno`)
) ;
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

答案:

select sname 姓名,grade 成绩
from stu a,cou b,sc c
where a.sno=c.sno and b.cno=c.cno and cname='C语言'
order by grade desc

16 查询同专业的学生

1-16

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索Student表中与‘张三’在同一个专业的学生记录。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL, -- 学号
`sname` char(8) NOT NULL, -- 姓名
`sex` tinyint(1) DEFAULT NULL, -- 性别
`mno` char(2) DEFAULT NULL, -- 专业号
`birdate` datetime DEFAULT NULL, -- 出生日期
`memo` text, -- 备注
PRIMARY KEY (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

输出样例:

请在这里给出输出样例。例如:

l215.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL, -- 学号
`sname` char(8) NOT NULL, -- 姓名
`sex` tinyint(1) DEFAULT NULL, -- 性别
`mno` char(2) DEFAULT NULL, -- 专业号
`birdate` datetime DEFAULT NULL, -- 出生日期
`memo` text, -- 备注
PRIMARY KEY (`sno`)
);

答案:

select sno 学号,sname 姓名
from stu
where mno in(
select mno
from stu
where sname='张三') and sname!='张三'

17 查询平均分高于80分的学生

1-17

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
查询选修课程成绩的平均分高于80分的学生姓名。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l221.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

答案:

select sname
from stu
where sno in (
select sno
from sc
group by sno
having avg(grade)>80
)

18 查询所有不姓刘的教师姓名

1-18

作者 马丰媛

单位 大连东软信息学院

题目描述:本题目要求编写SQL语句,
查询所有不姓刘的教师姓名。

提示:请使用SELECT语句作答。

表结构:

teacher表结构:

create table teacher(
tno char(15) primary key,
tname varchar(10) not null,
gender char(2),
deptname varchar(50) , -- 所属系部
title varchar(20) -- 职称
);

表样例

teacher表:

image.png

输出样例:

请在这里给出输出样例。例如:

image.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 忽略顺序只对比数据

建表语句/结果表结构

 create table teacher(
tno char(15) primary key,
tname varchar(10) not null,
gender char(2),
deptname varchar(50) , -- 所属系部
title varchar(20) -- 职称
);

答案:

select tname
from teacher
where tname not like '刘%'

19 查询选修某两门课程的学生(MSSQL)

1-19

作者 张庆

单位 集美大学

本题目要求编写SQL语句,

本题目要求编写SQL语句,
检索出sc表中至少选修了’C001’与’C002’课程的学生学号。

提示:MSSQLServer 评测SQL语句。

表结构:

请在这里写定义表结构的SQL语句。例如:

-- 学生选课成绩表
CREATE TABLE sc (
sno char(4) NOT NULL, -- 学生学号
cno char(4) NOT NULL, -- 选修课程号
grade decimal(4,1) DEFAULT NULL,
PRIMARY KEY ( sno , cno )
)

表样例

请在这里给出上述表结构对应的表样例。例如

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l217.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: SQL Server

结果输出要求: 忽略顺序只对比数据

建表语句/结果表结构

CREATE TABLE  sc  (  
sno char(4) NOT NULL, -- 学生学号
cno char(4) NOT NULL, -- 选修课程号
grade decimal(4,1) DEFAULT NULL,
PRIMARY KEY ( sno , cno )
)

答案:

select a.sno 学号
from sc a ,sc b
where a.sno=b.sno and a.cno='C001' and b.cno='C002'

20 查询比“网络工程”专业所有学生年龄都小的学生姓名

1-20

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
查询比“网络工程”专业所有学生年龄都小的学生姓名。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`),
KEY `fk_stu_mno` (`mno`),
CONSTRAINT `fk_stu_mno` FOREIGN KEY (`mno`) REFERENCES `major` (`mno`)
);
CREATE TABLE `major` (
`mno` char(2) NOT NULL,
`mname` varchar(20) NOT NULL,
PRIMARY KEY (`mno`)
)

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

major表:

major.JPG

输出样例:

请在这里给出输出样例。例如:

midt01.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `major` (
`mno` char(2) NOT NULL,
`mname` varchar(20) NOT NULL,
PRIMARY KEY (`mno`)
);

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`),
KEY `fk_stu_mno` (`mno`),
CONSTRAINT `fk_stu_mno` FOREIGN KEY (`mno`) REFERENCES `major` (`mno`)
);

答案

select sname
from stu
where birdate > (
select max(birdate)
from stu a,major b
where a.mno=b.mno and mname='网络工程'
)

21 查询成绩最高的前三名同学

1-21

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
查询‘C语言’课程成绩最高的前三名同学。

提示:使用”limit n”语句实现 “top n” 。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `cou` (
`cno` char(4) NOT NULL,
`cname` varchar(30) NOT NULL,
`credit` smallint(6) DEFAULT NULL,
`ptime` char(5) DEFAULT NULL,
`teacher` char(10) DEFAULT NULL,
PRIMARY KEY (`cno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

cou表:

cou.JPG

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l223.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `cou` (
`cno` char(4) NOT NULL,
`cname` varchar(30) NOT NULL,
`credit` smallint(6) DEFAULT NULL,
`ptime` char(5) DEFAULT NULL,
`teacher` char(10) DEFAULT NULL,
PRIMARY KEY (`cno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_cno` FOREIGN KEY (`cno`) REFERENCES `cou` (`CNO`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

答案:

select sname 姓名,grade 成绩
from stu a,cou b,sc c
where a.sno=c.sno and b.cno=c.cno and cname='C语言'
order by grade desc
limit 3

22 查询S001学生选修而S003学生未选修的课程

1-22

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
检索出sc表中学号为S001的学生选修的而S003学号学生未选修的课程号。

提示:MySQL不允许使用 except语句。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `sc` (
`sno` char(4) NOT NULL, -- 学号
`cno` char(4) NOT NULL, -- 课程号
`grade` decimal(6,1) DEFAULT NULL, -- 成绩
PRIMARY KEY (`sno`,`cno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l218.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `sc` (
`sno` char(4) NOT NULL, -- 学号
`cno` char(4) NOT NULL, -- 课程号
`grade` decimal(6,1) DEFAULT NULL -- 成绩
);

答案

select cno 课程号
from sc a
where sno='S001' and cno not in (
select cno
from sc
where sno='S003'
)

23 查询各专业学生的平均成绩

1-23

作者 张庆

单位 集美大学

本题目要求编写SQL语句,
统计各专业的学生选课的平均成绩,如果某专业尚未有任何学生选修课程或成绩为空时,平均分计为0。输出结果集按照major表中的mno升序排序。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `major` (
`mno` char(2) NOT NULL,
`mname` varchar(20) NOT NULL,
PRIMARY KEY (`mno`)
);
CREATE TABLE `stu` (
`sno` char(4) NOT NULL, -- 学号
`sname` char(8) NOT NULL, -- 姓名
`sex` tinyint(1) DEFAULT NULL, -- 性别
`mno` char(2) DEFAULT NULL, -- 专业号
`birdate` datetime DEFAULT NULL, -- 出生日期
`memo` text, -- 备注
PRIMARY KEY (`sno`),
CONSTRAINT `fk_stu_mno` FOREIGN KEY (`mno`) REFERENCES `major` (`mno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

major表:

major.JPG

stu表:

stu.JPG

sc表:

sc.JPG

输出样例:

请在这里给出输出样例。例如:

l29B.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `major` (
`mno` char(2) NOT NULL,
`mname` varchar(20) NOT NULL,
PRIMARY KEY (`mno`)
);
CREATE TABLE `stu` (
`sno` char(4) NOT NULL, -- 学号
`sname` char(8) NOT NULL, -- 姓名
`sex` tinyint(1) DEFAULT NULL, -- 性别
`mno` char(2) DEFAULT NULL, -- 专业号
`birdate` datetime DEFAULT NULL, -- 出生日期
`memo` text, -- 备注
PRIMARY KEY (`sno`),
CONSTRAINT `fk_stu_mno` FOREIGN KEY (`mno`) REFERENCES `major` (`mno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

答案:

select a1.mname 专业,ifnull(avg(grade),0) 平均成绩
from major a1 left join
(select a.sno,mno,grade from stu a,sc b where a.sno=b.sno) as b1
on a1.mno=b1.mno
group by a1.mno
order by a1.mno

二、UPDATE更新

UPDATE更新

1 将学号为“1911203”的学生的联系电话改为“590987”

2-1

作者 sy

单位 宁波财经学院

本题目要求编写SQL语句,
students表中,将学号为“1911203”的学生的联系电话改为“590987”。

提示:请使用UPDATE语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE students (
sno char(7) ,
sname char(8) NOT NULL,
class char(10),
ssex char(2),
bday date ,
bplace char(10) ,
IDNum char(18) ,
sdept char(16),
phone char(11),
PRIMARY KEY (sno)
) ;

表样例:

请在这里给出上述表结构对应的表样例。例如

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1311104李嘉欣13英语11994-05-28山西太原330204199405281056人文学院15900002211
1311105苏有明13英语11995-04-16内蒙古包头330204199504162036人文学院15900002222
1711101赵薇17物流11999-02-11安徽合肥330203199902110925经管学院15900001177
1911201陈坤19信管21990-07-19山东烟台330204199007199604信息学院15911113388
1911203张三19物流11999-02-17上海330203199902170017经管学院15900001188

输出样例:

请在这里给出输出样例。例如:

students表:

snosnameclassssexbdaybplaceIDNumsdeptphone
1311104李嘉欣13英语11994-05-28山西太原330204199405281056人文学院15900002211
1311105苏有明13英语11995-04-16内蒙古包头330204199504162036人文学院15900002222
1711101赵薇17物流11999-02-11安徽合肥330203199902110925经管学院15900001177
1911201陈坤19信管21990-07-19山东烟台330204199007199604信息学院15911113388
1911203张三19物流11999-02-17上海330203199902170017经管学院590987

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE students (
sno char(7) ,
sname char(8) NOT NULL,
class char(10),
ssex char(2),
bday date ,
bplace char(10) ,
IDNum char(18) ,
sdept char(16),
phone char(11),
PRIMARY KEY (sno)
) ;

答案:

update students
set phone='590987'
where sno='1911203'

2 把选修了“平板撑”课程而成绩不及格的学生的成绩全改为空值(NULL)

2-2

作者 sy

单位 宁波财经学院

本题目要求编写SQL语句,
sc表中,把选修了“平板撑”课程而成绩不及格的学生的成绩全改为空值(NULL)。

提示:请使用UPDATE语句作答。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE sc (
sno char(7) ,
cno char(7) ,
score decimal(4,1),
point decimal(2,1),
PRIMARY KEY (sno,cno)
) ;

CREATE TABLE course (
cno char(7) ,
cname varchar(20) NOT NULL,
cpno char(7),
ccredit int NOT NULL,
PRIMARY KEY (cno)
) ;

表样例

请在这里给出上述表结构对应的表样例。例如

sc表:

snocnoscorepoint
1311104000001153.00.0
1311104000002780.01.0
1311105000002784.01.0
1711101000005271.02.0
1711101000001151.00.0

course表:

cnocnamecpnoccredit
0000001数据库OCP考证NULL4
0000002C语言基础00000279
0000003Linux操作系统00000135
0000004C#程序设计00000026
0000011平板撑NULL2

输出样例:

请在这里给出输出样例。例如:

sc表:

snocnoscorepoint
1311104000001153.00.0
1311104000002780.01.0
1311105000002784.01.0
1711101000005271.02.0
17111010000011NULL0.0

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构:

CREATE TABLE sc (
sno char(7) ,
cno char(7) ,
score decimal(4,1),
point decimal(2,1),
PRIMARY KEY (sno,cno)
) ;

CREATE TABLE course (
cno char(7) ,
cname varchar(20) NOT NULL,
cpno char(7),
ccredit int NOT NULL,
PRIMARY KEY (cno)
) ;

答案:

update sc
set score=NULL
where cno in(select cno from course where cname='平板撑')
and score < 60

3 修改女生成绩

2-3

作者 张庆

单位 集美大学

本题目要求编写UPDATE语句,
把所有低于75分的女生成绩提高5%;

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
)

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

sc表:

sc.JPG

输出样例:

例如:
修改女生成绩后的sc表如下:

u2b.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
)

答案:

update sc
set grade=grade*1.05
where grade<75 and sno in(select sno from stu where sex=0)

三、INSERT插入

INSERT插入

1 理学院(CS)新开一门课程“数学建模”,课程编号20, 学分4,学时72,选修课程,最多选课人数为50

3-1

作者 宋光慧

单位 浙大宁波理工学院

本题目要求编写SQL语句,理学院(CS)新开一门课程“数学建模”,无先行课,课程编号20, 学分4,学时72,选修课程,最多选课人数为50。

现有教务管理系统的关系描述如下:

  • 每个院系(部门)有多个班级和多名教师,每名教师各自开设有多门课程。

  • 每位教师管理多个班级(班主任),每个班级只能被一位老师管理。

  • 每名学生属于一个班级,可以选修多门课程。

  • 每门课程可被多位老师讲授,并且有些课程具有先导课程,每门课程的成绩由平时成绩、期中成绩、期末成绩组成,最终计算总评成绩。

  • 课程信息表供教师和学生查询,包含课程信息、任课教师、上课班级、上课教室、上课日期(周几)、上课时间(第几节课)、上课学期学年等信息。

    课程表:course

    表结构

    course-1.png

    表数据

    course-2.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 忽略顺序只对比数据

建表语句/结果表结构:

CREATE TABLE `course`  (
`CId` char(4),
`PCId` char(4),
`DId` char(2),
`CName` char(20),
`CCredit` int(11),
`CHour` int(11),
`CAttr` char(6),
`CNum` int(11)
);

答案:

insert into course (CId,DId,CName,CCredit,CHour,CAttr,CNum)
values('20','CS','数学建模',4,72,'选修',50)

2 添加一条学生记录

3-2

作者 张庆

单位 集美大学

本题目要求编写 Insert语句,在stu表中添加一条学生记录:

学号:S012,姓名:周强,性别:1,其它属性为NULL.

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu.JPG

输出样例:

插入一条学生记录后,stu表如下:

1.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);

答案:

insert into stu
(sno,sname,sex)
values('S012','周强',1)

3 将student表中的数计学院的学生信息插入到stu表中。

3-3

作者 白彦辉

单位 赤峰学院

将student表中的数计学院的学生信息插入到stu表中。

提示:请使用INSERT语句作答,stu数据表已存在,结构同student一样。

表结构:

定义表结构的SQL语句如下:

CREATE TABLE student (

sno varchar(6) NOT NULL ,

sname varchar(10) ,

sex char(2) ,

nation char(2) ,

pnum char(18) ,

birth date ,

phone char(11) ,

dept varchar(20) ,

PRIMARY KEY (sno)

) ;

表样例

上述表结构对应的表样例:

student表:

student.png

输出样例:

输出样例:

stu表:

3-3.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE student (
sno varchar(6) NOT NULL ,
sname varchar(10) ,
sex char(2) ,
nation char(2) ,
pnum char(18) ,
birth date ,
phone char(11) ,
dept varchar(20) ,
PRIMARY KEY (sno)
) ;
CREATE TABLE stu (
sno varchar(6) NOT NULL ,
sname varchar(10) ,
sex char(2) ,
nation char(2) ,
pnum char(18) ,
birth date ,
phone char(11) ,
dept varchar(20) ,
PRIMARY KEY (sno)
) ;

答案:

insert into stu
select * from student where dept='数计学院'

四、DELETE删除

DELETE删除

1 删除学生所有信息

4-1

作者 张庆

单位 集美大学

本题目要求编写DELETE语句,
删除学生姓名为’周强’的所有数据信息。

表结构:

请在这里写定义表结构的SQL语句。例如:

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

表样例

请在这里给出上述表结构对应的表样例。例如

stu表:

stu1.JPG

sc表:

sc1.JPG

输出样例:

删除学生周强的所有数据信息后:

stu表:

stu2.JPG

sc表:

sc2.JPG

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `stu` (
`sno` char(4) NOT NULL,
`sname` char(8) NOT NULL,
`sex` tinyint(1) DEFAULT NULL,
`mno` char(2) DEFAULT NULL,
`birdate` datetime DEFAULT NULL,
`memo` text,
PRIMARY KEY (`sno`)
);
CREATE TABLE `sc` (
`sno` char(4) NOT NULL,
`cno` char(4) NOT NULL,
`grade` decimal(6,1) DEFAULT NULL,
PRIMARY KEY (`sno`,`cno`),
CONSTRAINT `fk_sc_sno` FOREIGN KEY (`sno`) REFERENCES `stu` (`sno`)
);

答案:

delete from sc
where sno in
(select sno from stu where sname='周强');
delete from stu
where sname = '周强'

2 删除没有销售过的产品

4-2

本题目要求编写SQL语句,
删除没有销售过的产品。

表结构:

CREATE TABLE `product` (
`Pid` varchar(20), --商品编号
`PName` varchar(50), --商品名称
`Weight` decimal(10, 3) --重量
);
CREATE TABLE `orders` (
`OrdNo` int(11), --订单编号
`Sid` varchar(10), --供应商编号
`Eid` varchar(10), --职工编号
`Pid` varchar(20), --商品编号
`Price` decimal(10,2), --价格
`QTY` int(11), --订购数量
`ordDate` date --订单日期
);

表样例

product表:

PidPNameWeight
P01M6螺栓30
P02M8螺栓40
P03M16螺栓140
P04螺帽30
P05螺母45
P06垫片10
P07铰链70

orders表:

OrdNoSidEidPidPriceQTYordDate
1S010011P0111232022-02-13
2S020012P0512252022-02-14
3S030012P0360552022-02-14

输出样例:

PidPNameWeight
P01M6螺栓30
P03M16螺栓140
P05螺母45

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `product` (
`Pid` varchar(20),
`PName` varchar(50),
`Weight` decimal(10, 3)
);
CREATE TABLE `orders` (
`OrdNo` int(11),
`Sid` varchar(10),
`Eid` varchar(10),
`Pid` varchar(20),
`Price` decimal(10,2),
`QTY` int(11),
`ordDate` date
);

答案:

delete from product
where Pid not in(select Pid from orders)

五、create view 创建视图

create view 创建视图

1 创建视图计算学生课程平均分

5-1

作者 雷亮

单位 重庆科技大学

现有一个学生数据库,内包含学生表(Student)、课程表(Course)和选修表(SC)。

在每一学年,学生处需要统计每位学生的学习情况,以便进行奖学金评定。请你设计一个视图V_average_grade,统计数据库中课程平均分在80以上的学生。

提示:请使用CREATE VIEW语句作答,并请注意数据表名、列名大小写需与表结构定义一致

表结构:

学生表(Student)、课程表(Course)和选修表(SC)结构如下:

CREATE TABLE `Student` (
`Sno` varchar(20) NOT NULL,
`Sname` varchar(10) DEFAULT NULL,
`Ssex` varchar(2) DEFAULT NULL,
`Sage` int(3) DEFAULT NULL,
`Sdept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`Sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Course` (
`Cno` varchar(10) NOT NULL,
`Cname` varchar(20) DEFAULT NULL,
`Cpno` varchar(10) DEFAULT NULL,
`Ccredit` int(3) DEFAULT NULL,
PRIMARY KEY (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `SC` (
`Sno` varchar(20) NOT NULL,
`Cno` varchar(10) NOT NULL,
`Grade` int(3) DEFAULT NULL,
PRIMARY KEY (`Sno`,`Cno`),
KEY `Cno` (`Cno`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表样例

Student表:

Student.PNG

Course表:

Course.PNG

SC表:

SC.PNG

输出样例:

视图V_average_grade输出:

QQ截图20220419202249.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `Student` (
`Sno` varchar(20) NOT NULL,
`Sname` varchar(10) DEFAULT NULL,
`Ssex` varchar(2) DEFAULT NULL,
`Sage` int(3) DEFAULT NULL,
`Sdept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`Sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Course` (
`Cno` varchar(10) NOT NULL,
`Cname` varchar(20) DEFAULT NULL,
`Cpno` varchar(10) DEFAULT NULL,
`Ccredit` int(3) DEFAULT NULL,
PRIMARY KEY (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `SC` (
`Sno` varchar(20) NOT NULL,
`Cno` varchar(10) NOT NULL,
`Grade` int(3) DEFAULT NULL,
PRIMARY KEY (`Sno`,`Cno`),
KEY `Cno` (`Cno`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `Student` (`Sno`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`Cno`) REFERENCES `Course` (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案:

create view V_average_grade
as select Sdept,a.Sno,Sname,avg(Grade) Average_grade
from Student a join SC b
on a.Sno=b.Sno
group by a.Sno
having avg(Grade)>80

2 创建视图查找不及格学生

5-2

作者 雷亮

单位 重庆科技大学

现有一个学生数据库,内包含学生表(Student)、课程表(Course)和选修表(SC)。

每学期末,教务处要安排课程补考或者重修,因此需要统计本学期课程考试不合格的学生、课程、成绩。假设选修表中课程成绩小于60的同学都需要补考。请你设计一个视图V_FailedCourseStudent,统计数据库中课程成绩小于60的学生。

提示:请使用CREATE VIEW语句作答,并请注意数据表名、列名大小写。

表结构:

学生表(Student)、课程表(Course)和选修表(SC)结构如下:

CREATE TABLE `Student` (
`Sno` varchar(20) NOT NULL,
`Sname` varchar(10) DEFAULT NULL,
`Ssex` varchar(2) DEFAULT NULL,
`Sage` int(3) DEFAULT NULL,
`Sdept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`Sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Course` (
`Cno` varchar(10) NOT NULL,
`Cname` varchar(20) DEFAULT NULL,
`Cpno` varchar(10) DEFAULT NULL,
`Ccredit` int(3) DEFAULT NULL,
PRIMARY KEY (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `SC` (
`Sno` varchar(20) NOT NULL,
`Cno` varchar(10) NOT NULL,
`Grade` int(3) DEFAULT NULL,
PRIMARY KEY (`Sno`,`Cno`),
KEY `Cno` (`Cno`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `student` (`Sno`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`Cno`) REFERENCES `course` (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

表样例

Student表:

Student2.png

Course表:

Course2.png

SC表:

SC.PNG

输出样例:

视图V_FailedCourseStudent输出:

QQ截图20220420145858.jpg

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 严格对比顺序与数据

建表语句/结果表结构

CREATE TABLE `Student` (
`Sno` varchar(20) NOT NULL,
`Sname` varchar(10) DEFAULT NULL,
`Ssex` varchar(2) DEFAULT NULL,
`Sage` int(3) DEFAULT NULL,
`Sdept` varchar(10) DEFAULT NULL,
PRIMARY KEY (`Sno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Course` (
`Cno` varchar(10) NOT NULL,
`Cname` varchar(20) DEFAULT NULL,
`Cpno` varchar(10) DEFAULT NULL,
`Ccredit` int(3) DEFAULT NULL,
PRIMARY KEY (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `SC` (
`Sno` varchar(20) NOT NULL,
`Cno` varchar(10) NOT NULL,
`Grade` int(3) DEFAULT NULL,
PRIMARY KEY (`Sno`,`Cno`),
KEY `Cno` (`Cno`),
CONSTRAINT `sc_ibfk_1` FOREIGN KEY (`Sno`) REFERENCES `Student` (`Sno`),
CONSTRAINT `sc_ibfk_2` FOREIGN KEY (`Cno`) REFERENCES `Course` (`Cno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案:

create view V_FailedCourseStudent
as select Sdept,a.Sno,Sname,Cname,Grade
from Student a,Course b,SC c
where a.Sno=c.Sno and b.Cno=c.Cno and c.grade<60

3 创建分组统计视图

5-3

作者 李翔坤

单位 大连东软信息学院

创建每个专业学生修课信息的视图PerView,包括每个专业的专业名称、修课的学生人数、平均成绩。

表结构:

create table Student(
sno char(8) primary key,
sname varchar(10) not null,
gender char(2) check(gender='男' or gender='女'),
birthdate date,
major varchar(20) default '软件工程'
);

create table SC(
scid int auto_increment primary key,
sno char(8) references Student(sno),
cno char(10) references Course(cno),
tno char(15) references Teacher(tno),
grade int check(grade>=0 and grade<=100),
gpoint decimal(2,1),
memo text(100)
);

表样例

Student表:

snosnamegenderbirthdatemajor
21012101李勇2005-10-20计算机科学
21012102刘晨2006-5-5计算机科学
21012103王晓敏2005-10-6计算机科学
21021101李佳睿2006-3-30软件工程
21021102吴宾2005-9-21软件工程
21021103张海2005-10-20软件工程
21031101钱晓萍2006-6-1网络工程
21031102王大力2005-11-15网络工程
21041101于洋2006-3-15数据科学
21041102郭霖2006-3-2数据科学

SC表:

scidsnocnotnogradegpointmemo
null21012101c01t200306m1213290nullnull
null21012101c02t200703m1221886nullnull
null21012101c03t200703m12218nullnull缺考
null21012102c02t200703m1221878nullnull
null21012102c03t200703m1221866nullnull
null21021102c01t200306m1213282nullnull
null21021102c02t200608f1220575nullnull
null21021102c03t200306m12132nullnull缓考
null21021102c05t201803f1240550nullnull
null21021103c02t200703m1221868nullnull
null21021103c04t201208m1230892nullnull
null21031101c01t200306m1213280nullnull
null21031101c02t200608f1220595nullnull
null21041102c02t200608f1220556nullnull
null21041102c05t201803f1240588nullnull

输出样例:

PerView视图:
图片.png

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 忽略顺序只对比数据

建表语句/结果表结构

 create table Student(
sno char(8) primary key,
sname varchar(10) not null,
gender char(2) check(gender='男' or gender='女'),
birthdate date,
major varchar(20) default '软件工程'
);
create table Course(
cno char(10) primary key,
cname varchar(20) not null,
ccredit int check(ccredit>0),
semester int check(semester>0),
period int check(period>0)
);
create table Teacher(
Tno char(15) primary key,
Tname varchar(10) not null,
gender char(2),
deptname varchar(50) ,
title varchar(20)
);
create table SC(
scid int auto_increment primary key,
sno char(8) references Student(sno),
cno char(10) references Course(cno),
tno char(15) references Teacher(tno),
grade int check(grade>=0 and grade<=100),
gpoint decimal(2,1),
memo text(100)
);

答案:

create view PerView
as
select major 专业名,count(distinct a.sno)修课人数,avg(grade) 平均成绩
from SC a,Student b
where a.sno=b.sno
group by major


4 从视图PerView中查询数据

5-4

作者 李翔坤

单位 大连东软信息学院

从上题中创建的视图PerView中查询平均成绩超过75分的专业有哪些。

PerView视图结构:

 Create view PerView(专业名, 修课人数, 平均成绩)
AS Select major, count(distinct sc.sno), avg(grade) from student join sc on student.sno=sc.sno group by major;

PerView视图数据样例

PerView视图:

专业名修课人数平均成绩
数据科学172.0
网络工程187.5
计算机科学280.0
软件工程273.4

输出样例:

专业名平均成绩
网络工程87.5
计算机科学80.0

代码长度限制: 16 KB

时间限制: 400 ms

数据库: MySQL

结果输出要求: 忽略顺序只对比数据

建表语句/结果表结构

create table PerView(专业名 varchar(50), 修课人数 int , 平均成绩 dec(6,2));

答案:

select 专业名,平均成绩
from PerView
where 平均成绩>75

作图/主观题

作图/主观题

一、数据库第4章E-R图(23软工1)

一、数据库第4章E-R图

1 E-R图测试

1-1

在校田径运动会中设置了各类比赛,每一比赛类别有类别编号、类别名称和主管等属性,每一比赛类别包含很多比赛项目;每一比赛项目有项目编号、项目名称、比赛时间和级别等属性;各个系团队有团编号、团名称、领队等属性,每一代表团有多名运动员组成,运动员有编号、姓名、年龄、性别等属性;每一名运动员可以参加多个比赛项目,每一比赛项目也有多名运动员参加,运动员参加比赛有成绩属性,成绩限定在0-7分。
(1)根据上述语义,画出E-R图,并在图上注明属性、联系类型;
(2)将E-R图转换成关系模式。

答案:


2 E-R图1

1-2

4a2bb2e1-64a5-4438-9993-241fc7f87b98 (1).png)

答案:

.png)

user-uploads_1710917132478705664_2024-11-4_1730653563-3373d631-92ee-47f3-8699-2632609e8fe0


二、第3章模式分解(23软工1)

二、第3章模式分解(23软工1)

1 假设员工关系EMP(员工号,姓名,性别,部门,部门电话,部门负责人,家庭住址,家庭成员,成员关系)如下表所示。

2-1

假设员工关系EMP(员工号,姓名,性别,部门,部门电话,部门负责人,家庭住址,家庭成员,成员关系)如下表所示。如果规定:一个部门只能有一部电话和一位负责人,一个员工可以有多个家庭成员。

(1)写出关系模式EMP的基本FD和关键码;

(2)EMP最高属于第几范式;

(3)将EMP规范到3NF。

答案:

(1)基本FD:

员工号->姓名,员工号->性别,员工号->部门,员工号->家庭住址

部门->部门电话,部门->部门负责人

(员工号,家庭成员)->成员关系

关键码:员工号,部门,(员工号,家庭成员)

(2)第二范式

(3)

员工(员工号,姓名,性别,部门,家庭住址)

部门(部门,部门电话,部门负责人)

家庭(员工号,家庭成员,家庭关系)


2 有关系模式:Student(学号,姓名,所在系,班号,班主任,系主任)

2-2

有关系模式:Student(学号,姓名,所在系,班号,班主任,系主任),

其语义为:一个学生只在一个系的一个班学习,一个系只有一个系主任,一个班只有一名班主任。

(1)指出此关系模式的候选码。

(2)判断此关系模式是第几范式,若不是三范式,将其规范为三范式。

答案:

(1)候选码:学号

(2)

第二范式

学生(学号,姓名,所在系,班号)

班级(班号,班主任)

系(系名,系主任)