SCUT-2016机试题目数据库

往年代码没了,只能自己探索了,估计实现的功能没有那么完整。

题目

SCUT-2016机试题目数据库

SCUT-2016机试题目数据库SCUT-2016机试题目数据库

SCUT-2016机试题目数据库

个人答案

建立数据库:

create table student(
SNo int primary key,
SName varchar(20) not null,
Date date,
classNo int
);
create table class(
classNo int primary key,
specName varchar(20) unique,
deptNo int,
year varchar(20),
num int check(num<31)
);
create table department(
deptNo int primary key,
deptName varchar(20)
);
alter table student add  foreign key (classNo) references class(classNo) on delete cascade;
alter table class add foreign key (deptNo) references department(deptNo);


insert into department values(1,'数学');
insert into department values(2,'计算机');
insert into department values(3,'化学');
insert into class values(101,'软件',2,'2012',25);
insert into class values(102,'微电子',2,'2013',28);
insert into class values(111,'无机化学',3,'2012',20);
insert into class values(112,'高分子化学',3,'2013',19);
insert into class values(121,'统计数学',1,'2013',11);

insert into student values (8101,'张三','1996-7-9',101);
insert into student values (8102,'钱四','1996-2-6',121);
insert into student values (8105,'李飞','1994-1-21',102);
insert into student values (8201,'张飞','1996-2-25',111);
insert into student values (8302,'周瑜','1996-6-15',112);
insert into student values (8203,'王亮','1996-5-27',111);
insert into student values (8305,'董庆','1996-4-2',102);
insert into student values (8409,'赵龙','1996-6-1',101);

实现

WinForm窗体: 

 

SCUT-2016机试题目数据库

代码:

DBUtils.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
namespace Demo2016
{
    class DBUtils
    {
        private DBUtils() { }
        static SqlConnection con;
        static String strCon="";
        static DBUtils(){
              strCon = @"Data Source=dc2017-PC\sqlexpress;Initial Catalog=Students;Integrated Security=True";
              SqlConnection con=new SqlConnection(strCon);
        }
       
        public static SqlConnection getCon()
        {
            if(con==null)
                con=new SqlConnection(strCon);
            con.Close();
            return con;
        }
    }
}

Query.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;
namespace Demo2016
{
    class Query
    {
        internal static DataSet queryDate(string sql)
        {
            SqlConnection con = DBUtils.getCon();
            SqlCommand com = new SqlCommand(sql, con);
            SqlDataAdapter sda = new SqlDataAdapter(com);
            DataSet ds = new DataSet();
            sda.Fill(ds, "Students");
            return ds;
        }
    }
}

主窗体代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Demo2016
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        String sql = "";
        private void btn1_Click(object sender, EventArgs e)
        {
            String deptName = tb1.Text.Trim();
            String specName = tb2.Text.Trim();
            String SName = tb3.Text.Trim();
            //此处简单做了一下防止sql注入,使用参数赋值方法
            SqlParameter deptn=null;
            SqlParameter specn=null;
            SqlParameter sn=null;
            sql = "select deptName as 系名,specName as 班级名,Sname as 学生名 from student,class,department where student.classNo =class.classNo and class.deptNo=department.deptNo ";
            if (deptName != "")
            {
                sql += "and [email protected] ";
                deptn = new SqlParameter("@deptName", deptName);
            }
            if (specName != "")
            {
                sql += "and [email protected] ";
                specn = new SqlParameter("@specName", specName);
            }
            if (SName != "")
            {
                //注:在写@SName这些参数前后都要有空格!!!
                sql += "and SName like @SName ";
                sn = new SqlParameter("@SName","%"+SName+"%");
                
            }
            sql += "order by deptName desc,specName,Sname desc";
            SqlConnection con = DBUtils.getCon();
            SqlCommand com = new SqlCommand(sql, con);
            SqlDataAdapter sda = new SqlDataAdapter(com);
            if(deptn!=null)
                sda.SelectCommand.Parameters.Add(deptn);
            if(specn!=null)
                 sda.SelectCommand.Parameters.Add(specn);
            if (sn != null)
                sda.SelectCommand.Parameters.Add(sn);
            DataSet ds = new DataSet();
            sda.Fill(ds, "Students");
            dataGridView1.DataSource = ds.Tables["Students"];
            dataGridView1.ReadOnly = true;
            dataGridView1.MultiSelect = false;
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }
        //主菜单控制
        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            String name=this.tabControl1.SelectedTab.Name;
            if ("tabPage1".Equals(name))
            {

            }
            else if ("tabPage2".Equals(name))
            {
                sql = "select deptName as 系名,sum(num) as 人数 from class inner join department on class.deptNo=department.deptNo group by class.deptNo,deptName;";

                DataSet ds = Query.queryDate(sql);
                dataGridView2.DataSource = ds.Tables["Students"];
                dataGridView2.ReadOnly = true;
                dataGridView2.MultiSelect = false;
                dataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            }
            else if (this.tabControl1.SelectedTab==tabPage3)
            {
                sql = "select year as 入学年份,COUNT(year) as 人数 from class inner join department on class.deptNo=department.deptNo group by year";

                DataSet ds = Query.queryDate(sql);
                dataGridView3.DataSource = ds.Tables["Students"];
                dataGridView3.ReadOnly = true;
                dataGridView3.MultiSelect = false;
                dataGridView3.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            }
        }
    }
}

运行结果

第一题:

SCUT-2016机试题目数据库SCUT-2016机试题目数据库

第二题(1):

SCUT-2016机试题目数据库

(2)

SCUT-2016机试题目数据库