2016华南理工计算机考研复试数据库

跟大佬学的2015华工复试数据库题目详细步骤

以下是2016年的题目:

一、数据库设计

2016华南理工计算机考研复试数据库

2016华南理工计算机考研复试数据库

2016华南理工计算机考研复试数据库

手动打开SQL Server代理(从来记不住,总是等到Sqlserver连不上才打开)

2016华南理工计算机考研复试数据库

(1)打开数据库后,新建数据库,新建查询,建表代码:

use Student2016;
-- 因为三张表之间的以来关系,建表顺序如下
create table Department
 ( deptNo varchar(2) primary key,
   deptName varchar(30) not null
   )

create table CLASS
 ( classNo varchar(5) primary key,
   specName varchar(30) not null,
   deptNo varchar(2) not null,
   [year] int check([year]>0) not null,
   num int check(num<=30 and num>=0)not null,
   foreign key (deptNo) references Department(deptNo)
   )
   
create table Student
  ( SNo varchar(5) primary key,
    SName varchar(20) not null,
	[Date] date,
	classNo varchar(5),
	foreign key (classNo) references CLASS(classNo)
	)

  因为题目非要给的列名有关键词,所以加上[]才行

(2)插入数据

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','王亮','1997-5-27','111');
insert into Student values('8305','董庆','1996-4-2','102');
insert into Student values('8409','赵龙','1995-6-1','101');

(3)全选,点击 2016华南理工计算机考研复试数据库 执行完成后,右击建立的数据库->任务->备份,添加题目要求的路径,备份的文件类型是.bak

  完成!不要关掉SQLServer

二、C#管理系统设计

2016华南理工计算机考研复试数据库

(1)新建项目,填写题目中的路径。一共建了两个窗体,Form1是主窗体,Form2用来在数据维护功能传入学生信息

(2)Form1如下

    右下角有Properties设置

     Form1 设置

            formBorder: fixedSingle

            StartPosition: center

            MaximizeBox = false

            MinimizeBox = false

     四个tabPage的 Text 依次设置为查询,统计1,统计2,数据维护

     listView的设置是

                 View = Details

                FullRowSelect=True    

                MultiSelect = false     

                gridLine =true    

2016华南理工计算机考研复试数据库

2016华南理工计算机考研复试数据库

2016华南理工计算机考研复试数据库

2016华南理工计算机考研复试数据库

(3)Form2如下

2016华南理工计算机考研复试数据库

(4)用来连接数据库的类DB.cs

   server='值1'   值1是打开SqlServer时用的用户名

  database='值2'   值2是连接的数据库的名字

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;  //添加
using System.Data.SqlClient; //添加

namespace Anita
{
    class DB
    {
        private SqlConnection sqlConnection;

        public DB()
        {//连接
            sqlConnection = new SqlConnection(@"server=PC201805211617\SQL2012;database=Student2016;Trusted_Connection=SSPI");
            sqlConnection.Open();
        }
        public DataTable getBySql(string sql)
        {//查询
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(new SqlCommand(sql,sqlConnection));
            DataTable dataTable = new DataTable();
            sqlDataAdapter.Fill(dataTable);
            return dataTable;
        }
        public void setBySql(string sql)
        {//修改
            new SqlCommand(sql,sqlConnection).ExecuteNonQuery();
        }
        public void Dispose()
        {//折构
            sqlConnection.Close();
        }
    }
}

(5)用来在form1和form2之间传递数据的类Intent.cs

using System;
using System.Collections.Generic;
using System.Text;

namespace Anita
{
    class Intent
    {
        public static Dictionary<string, Object> dict = new Dictionary<string, Object>();
    }
}

 

(6)双击控件跳转到编辑页面,为控件添加事件。题目中要求的约束基本都在代码中实现

    Form1代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;//这一行自己加上,正则表达式用到


namespace Anita
{
    public partial class Form1 : Form
    {
        DB db;
        public Form1()
        {
            InitializeComponent();
            db = new DB();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //菜单2-统计1 每个系的学生人数
              //生成表头
            listView2.Columns.Add("系号", listView2.Width / 3 - 1, HorizontalAlignment.Left);
            listView2.Columns.Add("系名", listView2.Width / 3 - 1, HorizontalAlignment.Left);
            listView2.Columns.Add("人数", listView2.Width / 3 - 1, HorizontalAlignment.Left);
            DataTable dataTable = db.getBySql(@"select Department.deptNo,Department.deptName,sum(CLASS.num)as '总人数' " +
                "from Department,CLASS " +
                "where Department.deptNo = CLASS.deptNo " +
                "group by Department.deptNo,Department.deptName;");
            listView2.BeginUpdate(); //开始加载数据
            //表的内容
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                ListViewItem listViewItem = new ListViewItem();
                for (int j = 0; j < dataTable.Columns.Count; j++)
                {
                    if (j <= 0)
                    {
                        listViewItem.Text = dataTable.Rows[i][j] + "";
                    }
                    else
                    {
                        listViewItem.SubItems.Add(dataTable.Rows[i][j] + "");
                    }
                }
                listView2.Items.Add(listViewItem);
            }
            listView2.EndUpdate();//加载完成

            //菜单3-统计2 按入学年份统计人数
               //表头
            listView3.Columns.Add("入学年份", listView3.Width / 2 - 1, HorizontalAlignment.Left);
            listView3.Columns.Add("总人数", listView3.Width / 2 - 1, HorizontalAlignment.Left);
            dataTable = db.getBySql(@"select CLASS.[year],sum(CLASS.num) as '总人数' " +
                "from CLASS group by CLASS.[year];");
            listView3.BeginUpdate(); //开始加载
                //表的内容
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                ListViewItem listViewItem = new ListViewItem();
                for (int j = 0; j < dataTable.Columns.Count; j++)
                {
                    if (j <= 0)
                    {
                        listViewItem.Text = dataTable.Rows[i][j] + "";
                    }
                    else
                    {
                        listViewItem.SubItems.Add(dataTable.Rows[i][j] + "");
                    }
                }
                listView3.Items.Add(listViewItem);
            }
            listView3.EndUpdate(); //加载完成

            //菜单4-数据维护 
              //数据加载
                // 生成表头
            listView4.Columns.Add("学号", listView4.Width / 4 - 1, HorizontalAlignment.Left);
            listView4.Columns.Add("姓名", listView4.Width / 4 - 1, HorizontalAlignment.Left);
            listView4.Columns.Add("出生年月", listView4.Width / 4 - 1, HorizontalAlignment.Left);
            listView4.Columns.Add("班号", listView4.Width / 4 - 1, HorizontalAlignment.Left);
            dataTable = db.getBySql(@"select * from Student;");
            listView4.BeginUpdate();//开始加载信息
                // 表的内容
            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                ListViewItem listViewItem = new ListViewItem();
                for (int j = 0; j < dataTable.Columns.Count; j++)
                {
                    if (j <= 0)
                    {
                        listViewItem.Text = dataTable.Rows[i][j] + "";
                    }
                    else
                    {
                        listViewItem.SubItems.Add(dataTable.Rows[i][j] + "");
                    }
                }
                listView4.Items.Add(listViewItem);
            }
            listView4.EndUpdate(); //加载完毕

        }//Form1

        private void button1_Click(object sender, EventArgs e)
        {//button1查询
            //若系的输入不为空,检查是不是存在这个系
            bool dept = false; //不存在这个系
            if(textBox1.Text!="")
            {//系有获取内容
                DataTable table = db.getBySql(@"select deptName from Department");
                for(int i=0;i<table.Rows.Count;i++)
                {
                   if(table.Rows[i][0]+"" == textBox1.Text)
                   {
                       dept=true;
                       break;
                   }
                }
                if(!dept)
                {
                    MessageBox.Show("系名不正确或不存在该系",this.Text);
                }
            }
            //若班级输入不为空,检查是不是存在这个班级
            bool clas = false;//不存在该班级
            if(textBox2.Text != "")
            {
                DataTable table = db.getBySql(@"select specName from CLASS");
                for(int i=0;i<table.Rows.Count;i++)
                {
                    if(table.Rows[i][0]+"" == textBox2.Text)
                    {
                        clas = true;
                        break;
                    }
                }
                if(!clas)
                {
                    MessageBox.Show("专业名称不正确或不存在该专业",this.Text);
                }
            }
            //注意名字模糊查询
            //我不会写,所以匹配写的是 '%飞%' 样子,可匹配 某飞某、某飞,飞某 
            DataTable dataTable = new DataTable();
            if(!dept && !clas)  //只有姓名
            {
                 dataTable = db.getBySql(@"select Department.deptName,CLASS.specName,Student.SName "+
                    "from CLASS,Department,Student "+
                    "where Student.classNo = CLASS.classNo and "+
                    "CLASS.deptNo = Department.deptNo and "+
                    "SName like '%"+textBox3.Text+"%' "+
                    "order by Department.deptNo desc, CLASS.classNo asc, Student.SNo desc; ");
            }
            else if(!dept && clas)//班,姓名
            {
                 dataTable = db.getBySql(@"select Department.deptName,CLASS.specName,Student.SName "+
                    "from CLASS,Department,Student "+
                    "where Student.classNo = CLASS.classNo and "+
                    "CLASS.deptNo = Department.deptNo and "+
                    "CLASS.specName = '"+textBox2.Text+"' and "+
                    "SName like '%"+textBox3.Text+"%' "+
                    "order by Department.deptNo desc, CLASS.classNo asc, Student.SNo desc; ");
            }
            else if(dept && !clas) //系,姓名
            {
                 dataTable = db.getBySql(@"select Department.deptName,CLASS.specName,Student.SName "+
                    "from CLASS,Department,Student "+
                    "where Student.classNo = CLASS.classNo and "+
                    "CLASS.deptNo = Department.deptNo and "+
                    "Department.deptName = '"+textBox1.Text+"' and "+
                    "SName like '%"+textBox3.Text+"%' "+
                    "order by Department.deptNo desc, CLASS.classNo asc, Student.SNo desc; ");
            }
            else if(dept && clas) //系,班,姓名
            {
                 dataTable = db.getBySql(@"select Department.deptName,CLASS.specName,Student.SName "+
                    "from CLASS,Department,Student "+
                    "where Student.classNo = CLASS.classNo and "+
                    "CLASS.deptNo = Department.deptNo and "+
                    "Department.deptName = '"+textBox1.Text+"' and "+
                    "CLASS.specName = '"+textBox2.Text+"' and "+
                    "SName like '%"+textBox3.Text+"%' "+
                    "order by Department.deptNo desc, CLASS.classNo asc, Student.SNo desc; ");
            }
            //生成表头
            listView1.Clear(); //清空当前内容
            listView1.Columns.Add("系名称",listView1.Width/3-1,HorizontalAlignment.Left);
            listView1.Columns.Add("专业名称",listView1.Width/3-1,HorizontalAlignment.Left);
            listView1.Columns.Add("学生名字",listView1.Width/3-1,HorizontalAlignment.Left);
            listView1.BeginUpdate();  //UI挂起,加载查询内容
            //表的内容
            for(int i=0;i<dataTable.Rows.Count;i++)
            {
                ListViewItem listViewItem = new ListViewItem();
                for(int j=0;j<dataTable.Columns.Count;j++)
                {
                    if(j<=0)
                    {
                        listViewItem.Text = dataTable.Rows[i][j]+"";
                    }
                    else
                    {
                        listViewItem.SubItems.Add(dataTable.Rows[i][j]+"");
                    }
                }
                listView1.Items.Add(listViewItem);
            }
            listView1.EndUpdate();  //加载查询完成
        }//button1查询

        private void button2_Click(object sender, EventArgs e)
        {//添加
            Form2 form2 = new Form2(); //使用Form2
            //将form1当前内容压入Intent
            Intent.dict["form1_text"] = this.Text;
            Intent.dict["form1_flag"] = 0;  // flag=0表示添加
            if(form2.ShowDialog() == DialogResult.OK)
            {
                bool canAdd = true;
                //检查学号是否重复
                foreach(ListViewItem item in this.listView4.Items)
                {
                    if(Intent.dict["form2_textbox1_text"]+"" == item.SubItems[0].Text)
                    {
                        canAdd = false;
                        MessageBox.Show("已存在该学号",this.Text);
                        break;
                    }
                }
                //检查生日
                Regex regex = new Regex(@"^[0-9]{4}[\-\/]((1[0-2])|(0?[1-9]))[\/\-]((0?[1-9])|([12][0-9])|(3[0-1]))$");//粗略的检查,至于2月多少天之类的不管
                if(!(regex.IsMatch(Intent.dict["form2_textbox3_text"]+"")))
                {
                    canAdd = false;
                    MessageBox.Show("请输入正确的日期格式",this.Text);
                }
                //检查班级号
                DataTable dataTable = new DataTable();
                dataTable = db.getBySql(@"select classNo from CLASS");
                bool isClass = false; //是否存在该班级,默认值不存在
                for(int i=0;i<dataTable.Rows.Count;i++)
                {
                    if((Intent.dict["form2_textbox4_text"]+"") == (dataTable.Rows[i][0]+""))
                    {
                        isClass = true;           
                        break;
                    }
                }
                if(!isClass){ //如果不存在该班级
                    canAdd = false;
                    MessageBox.Show("不存在该班级", this.Text);
                }
                //输入信息全部正确
                if(canAdd)
                {
                    ListViewItem listViewItem = new ListViewItem();
                    listViewItem.Text = Intent.dict["form2_textbox1_text"]+""; //学号
                    listViewItem.SubItems.Add(Intent.dict["form2_textbox2_text"]+"");//姓名
                    listViewItem.SubItems.Add(Intent.dict["form2_textbox3_text"]+"");//生日
                    listViewItem.SubItems.Add(Intent.dict["form2_textbox4_text"]+"");//班号
                    listView4.Items.Add(listViewItem);
                    db.setBySql("insert into Student values('"+Intent.dict["form2_textbox1_text"]+"','"+Intent.dict["form2_textbox2_text"]+"','"+Intent.dict["form2_textbox3_text"]+"','"+Intent.dict["form2_textbox4_text"]+"')");
                }
            }

        }//添加

        private void button3_Click(object sender, EventArgs e)
        {//修改
            Form2 form2 = new Form2();
            //将form1压入Intent
            Intent.dict["form1_text"] = this.Text;
            Intent.dict["form1_flag"] = 1; //flag=1表示修改
            if (listView4.SelectedItems.Count == 0)
            { //没有选中
                MessageBox.Show("请先选择要修改的学生", this.Text);
            }
            else
            { //选中
                //向form2传递数据
                Intent.dict["form1_textbox1_text"] = listView4.SelectedItems[0].SubItems[0].Text;
                Intent.dict["form1_textbox2_text"] = listView4.SelectedItems[0].SubItems[1].Text;
                Intent.dict["form1_textbox3_text"] = listView4.SelectedItems[0].SubItems[2].Text;
                Intent.dict["form1_textbox4_text"] = listView4.SelectedItems[0].SubItems[3].Text;
                if (form2.ShowDialog() == DialogResult.OK)
                {
                    bool canUpdate = true;
                    //检查学号是否重复
                    foreach (ListViewItem item in this.listView4.Items)
                    {
                        if (Intent.dict["form2_textbox1_text"] + "" == item.SubItems[0].Text)
                        {
                            canUpdate = false;
                            MessageBox.Show("已存在该学号", this.Text);
                            break;
                        }
                    }
                    //检查生日
                    Regex regex = new Regex(@"^[0-9]{4}[\-\/]((1[0-2])|(0?[1-9]))[\/\-]((0?[1-9])|([12][0-9])|(3[0-1]))$");//瞎几把写
                    if (!(regex.IsMatch(Intent.dict["form2_textbox3_text"] + "")))
                    {
                        canUpdate = false;
                        MessageBox.Show("请输入正确的日期格式", this.Text);
                    }
                    //检查班级号
                    DataTable dataTable = new DataTable();
                    dataTable = db.getBySql(@"select classNo from CLASS");
                    bool isClass = false; //是否存在该班级,默认值不存在
                    for (int i = 0; i < dataTable.Rows.Count; i++)
                    {
                        if (Intent.dict["form2_textbox4_text"] + "" == dataTable.Rows[i][0] + "")
                        {
                            isClass = true;
                            break;
                        }
                    }
                    if (!isClass)
                    { //如果不存在该班级
                        canUpdate = false;
                        MessageBox.Show("不存在该班级", this.Text);
                    }
                    //信息无误
                    if (canUpdate)
                    {
                        listView4.SelectedItems[0].SubItems[0].Text = Intent.dict["form2_textbox1_text"] + ""; //学号
                        listView4.SelectedItems[0].SubItems[1].Text = Intent.dict["form2_textbox2_text"] + "";//姓名
                        listView4.SelectedItems[0].SubItems[2].Text = Intent.dict["form2_textbox3_text"] + "";//生日
                        listView4.SelectedItems[0].SubItems[3].Text = Intent.dict["form2_textbox4_text"] + "";//班号
                        //借住要修改的人的学号
                        //如果是借住名字之类的,有两个叫张飞的就都改了
                        //先修改这个人的其他信息,最后修改学号,否则找不到这个人了
                        db.setBySql("update Student set SName='" + Intent.dict["form2_textbox2_text"] + "' where SNo='" + Intent.dict["form1_textbox1_text"] + "';");
                        db.setBySql("update Student set [Date]='" + Intent.dict["form2_textbox3_text"] + "' where SNo='" + Intent.dict["form1_textbox1_text"] + "';");
                        db.setBySql("update Student set classNo='" + Intent.dict["form2_textbox4_text"] + "' where SNo='" + Intent.dict["form1_textbox1_text"] + "';");
                        db.setBySql("update Student set SNo='" + Intent.dict["form2_textbox1_text"] + "' where SNo='" + Intent.dict["form1_textbox1_text"] + "';");
                    }
                }
            }
        }//修改

        private void button4_Click(object sender, EventArgs e)
        {//删除
            db.setBySql("delete from Student where SNo='"+listView4.SelectedItems[0].SubItems[0].Text+"';");
            listView4.SelectedItems[0].Remove();

        }//删除
    }
}

(7)Form2代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Anita
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            if ((int)Intent.dict["form1_flag"] == 0)
            {//flag=0是添加
                this.Text = Intent.dict["form1_text"]+"";
                textBox1.Focus();
            }
            else
            {//flag=1是修改
                textBox1.Text = Intent.dict["form1_textbox1_text"] + "";
                textBox2.Text = Intent.dict["form1_textbox2_text"] + "";
                textBox3.Text = Intent.dict["form1_textbox3_text"] + "";
                textBox4.Text = Intent.dict["form1_textbox4_text"] + "";
                this.Text = Intent.dict["form1_text"] + "";
                textBox1.Focus();
                //textBox1.SelectAll();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {//取消
            this.Close();
        }

        private void button2_Click(object sender, EventArgs e)
        {//确认
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text=="" || textBox3.Text == "")
            {
                MessageBox.Show("信息填写不完整", this.Text);
            }
            else
            {
                Intent.dict["form2_textbox1_text"] = textBox1.Text;
                Intent.dict["form2_textbox2_text"] = textBox2.Text;
                Intent.dict["form2_textbox3_text"] = textBox3.Text;
                Intent.dict["form2_textbox4_text"] = textBox4.Text;
                this.DialogResult = DialogResult.OK;  //返回确认值
                this.Close();
            }
        }
    }
}

(8)结果

      a) from1代码中对查询写的很麻烦,也不晓对不对,反正最后的exe能用就是了

2016华南理工计算机考研复试数据库

    b) sqlServer中的出生年月是date数据类型,到c#中只有DateTime类型,不知道怎么换,无伤大雅,,反正考试都不一定能做到这儿(肯定做不到这)

2016华南理工计算机考研复试数据库