调研后发现近三年机试都是数据库+C#做一个小型管理系统。在这里边复习边做笔记。
拿15的作为练手材料。
首先是建立数据库
注意将数据库的文件跟日志的路径放到考试要求的文件夹下。
然后点击右上角的新建查询来建表。建议有约束的表格用SQL语言来建速度较快。

一、建立数据库,并建立以下各表 一个员工可以到多个不同公司上班。

员工关系表EMPLOYEE(员工号EmpNo,员工姓名EmpName,性别EmpSex,年龄EmpAge)

示例:E01, 张三,男, 20
工作关系表WORKS(EmpNo员工号,CmpNo公司号,Salary薪水)

示例:E01,C01,2000
公司关系表COMPANY(CmpNo公司号,CmpName公司名)
示例:C01,阳关科技

通过近三年的题目发现。一般都是建立3个表,中间的表有两个外键是来自于第1, 3两个表的,所以建表前看清楚,先建两个独立的表。

CREATE TABLE EMPLOYEE(
EmpNo varchar(10) primary key,
EmpName nvarchar(20) not null,
EmpSex nvarchar(10) check(EmpSex='男' or EmpSex='女'),
EmpAge int check(EmpAge>0));

注意

  1. 性别与年龄要加入检测。能检测的都检测
  2. nvarchar与varchar的区别:中文多点的用nvarchar。
  3. 建完表后左侧栏没有更新,需要右击“表”这一项进行刷新。

第三个表COMPANY

create table COMPANY(
CmpNo varchar(10) primary key,
CmpName nvarchar(20) not null);

第二个表WORKS

CREATE TABLE WORKS(
CmpNo varchar(10),
EmpNo varchar(10),
Salary int check(Salary>0),
PRIMARY KEY(EmpNo, CmpNo),
foreign key (EmpNo) references EMPLOYEE(EmpNo),
foreign key (CmpNo) references COMPANY(CmpNo));

关系的完整性

实体完整性:必须满足的完整性之一,若一个属性是主属性,则不能为空。
参照完整性:必须满足的完整性之二,比如WORKS中引用了EMPLOYEE的EmpNo,则EmpNo必须是存在于EMPLOYEE中的。


之后便是插入数据,一定要使用语言。可能会要求将insert语句也保存下来。

右键表格,选编辑前200行。

之后备份。右击我们的数据库SCUT,任务,备份。记得修改路径到非C盘。填写文件名加后缀“bak”.

二、基于上述数据库,请使用sql server2005+vs2008或vs2010完成员工信息管理系统,并生成相应的可运行文件(文件名为你的名字)。

具体要求如下:

  1. 要求程序与数据库能进行有效连接,并具有完善的人机交互界面, 要求有参数输入界面和执行按钮,在界面上有结果输出展现区, 要求不要把所有操作全部集中在一个菜单内

2.完成对员工关系表添加,删除,修改和浏览四项功能。老师的性别要求用单选按钮实现。(15分)

3.统计和查询:

(1)根据员工号或员工名查找员工所在的公司名和工资,员工号或员工名不能文本输入,要求使用下拉菜单实现,并与数据库中现有信息一致(10分)

(2)统计年龄至少为40岁员工的总工资工资按从大到小顺序排列;与数据库中现有信息一致(10分)

(3)查询至少具有两份工作员工的姓名和其公司名。(10分)
4.具有数据完整性校验功能,当出现数据异常和操作异常时,程序应给出清楚完整的异常提示信息。(10分)

先解决SQL查询问题。
首先解决的思路就是将所需要的信息的表连接在一起。使用外键相连。比如将EMPLOYEE& COMPANY相连,select * from EMPLOYEE,COMPANY where EMPLOYEE.EmpNo=COMPANY.CmpNo;
解:(1)表中需要员工号EmpNo,员工名EmpName,员工所在公司名CmpName和工资Salary。所以需要连接三个表。

select EMPLOYEE.EmpNo as '员工号',EMPLOYEE.EmpName as '员工名',
COMPANY.CmpName as '公司名', Salary as '工资'
where EMPLOYEE.EmpNo=WORKS.EmpNo
and COMPANY.CmpNo=WORKS.CmpNo;
  1. 选出的列名另名为可以用as.

(2)
查询条件1:40岁以上员工
查询条件2:总工资
查询条件3:从大到小排列

  • 查询条件1:EMPLOYEE.EmpAge>=40
  • 查询条件2:使用GROUP BY聚类查询。group
    by的意思是将表按条件分组,再按组内的来进行数学运算。比如WORKS里员工可能在多个公司有岗位工资,我们想查询每个员工的总工资,那么就GROUP
    BY EmpNo,在select中select sum(salary)。需要注意的是select中的表的列需要在group
    by中有出现。如果group
    by中没有EMPLOYEE.EmpName,而select中有EMPLOYEE.EmpName,则会显示group
    by中没有该元素,算术表达式则不需要,如下代码的sum(WORKS.Salary) as salary。having则是
    用于group
  • 查询条件3:order by xxx desc.(升序则是asc)
select EMPLOYEE.EmpNo, EMPLOYEE.EmpName, EMPLOYEE.Empage, sum(WORKS.Salary) as salary
from EMPLOYEE, WORKS
where EMPLOYEE.EmpNo=WORKS.EmpNo
group by EMPLOYEE.EmpNo, EMPLOYEE.EmpName,EMPLOYEE.EmpAge
having EMPLOYEE.EmpAge>40
order by salary desc;

(3)至少有两份工作的员工及公司名
计算个数使用count。

select EMPLOYEE.EmpNo
from WORKS
group by EMPLOYEE.EmpNo
having count(EMPLOYEE.EmpNo)>=2;

我们需要这个表中的EmpNo来查找员工的名字,以及公司名。所以连接4个表。这里涉及到嵌套子查询。可以直接将上面代码作为一个独立的表格,比如查询这些有两份工作的员工名字

select EMPLOYEE.EmpName
from EMPLOYEE
where EMPLOYEE.EmpNo in (
select EMPLOYEE.EmpNo
from WORKS
group by EMPLOYEE.EmpNo
having count(EMPLOYEE.EmpNo)>=2);

所以连接四个表。则是

select EMPLOYEE.EmpName, COMPANY.CmpName
from EMPLOYEE, COMPANY, (
select EMPLOYEE.EmpNo
from WORKS
group by EMPLOYEE.EmpNo
having count(EMPLOYEE.EmpNo)>=2) as c1
where EMPLOYEE.EmpNo=c1.EmpNo
and EMPLOYEE.CmpNo=COMPANY.CmpNo;

之后是C#编程。
C#首先是拖控件,有点类似于Andriod。在vs中的视图中打开工具箱侧边栏。常用的控件用图中红框框出来了

先审题。题目要求不要把所有操作全部集中在一个菜单内。所以我们使用容器里的TabControl。将其拖到Form1的窗口中右键属性。在如图中的TabPage位置进入就可以添加,移除标签,并且修改标签中的字。根据题目有四个要求。1是一个显示当前数据库中的EMPLOYEE表格内容并且提供增删改功能,2,3,4分别是上面实现的查询。所以总有4个tab


之后每个标签下都使用ListView来显示查询结果。


C#之ListView

首先是属性:这里只需要改几处,

  • FullRowSelect-true
  • MultiSelect-false
  • GridLines-true
  • View-details
    代码:以上属性更改后点击一项同一行的都会被选中。
    · 在修改时需要在两个窗口间传递数据,参考安卓的Intent,我们需要读取该行的数据放到Intent中。此时读取第一行的第一个数据的代码是(注意是数组从0开始)listView1.SelectedItems[0].SubItems[0].Text;其中SelectedItems是一个数组,里面存放了你选择的ListView行。SubItems则是该行中的某一列。
    · 在改与删时代码需要加入判断是否有选中的逻辑。所以此时代码是listView1.SelectedItems.Count>0,否则会报错:未处理ArgumentOutOfRangeException

    InvalidArgument=“0”的值对于“index”无效。
    参数名: index
    · 在显示查询到的数据时需要先加载表头才能够显示出来。代码是

//n是该行分成n等分,m是这个表头占m/n行的宽度
listView1.Columns.Add('表头名',listView1.Width/n-m',HorizontalAlignment.Left)

· 加载表头后要将数据一个个添加到行,行组成表。代码有通用性

//通过查表返回DataTable类型表格,数据由此表格得到,@表示禁止字符串强制转换。注意数据库语句最后要加‘;’
DataTable table=db.GetBySql(@"select * from EMPLOYEE;");
//与EndUpdate()配合有效提高加载速度,注意先建表头
listView1.BeginUpdate();
listView1.Columns.Add("员工编号", listView1.Width / 4 - 1, HorizontalAlignment.Left);
listView1.Columns.Add("员工姓名", listView1.Width / 4 - 1, HorizontalAlignment.Left);listView1.Columns.Add("员工性别", listView1.Width / 4 - 1, HorizontalAlignment.Left);
listView1.Columns.Add("员工年龄", listView1.Width / 4 - 1, HorizontalAlignment.Left);
for(int i=0;i<table.Rows.Count;i++){ListViewItem listViewItem =new ListViewItem();//新建一行for (int j = 0; j < table.Columns.Count; j++)  {  if (j <= 0){  listViewItem.Text = table.Rows[i][j] + "";  //第一列使用Text。后面才是SubItem}  else  {  listViewItem.SubItems.Add(table.Rows[i][j] + "");  }listView1.Items.Add(listViewItem);//添加该行  }
}
listView1.EndUpdate();

在判断数据有效性时需要遍历整个ListView,使用foreach遍历listView中的ListViewItem。与上面的相同,SubItems[i]表示这一行的第i-1列的内容。

foreach(ListViewItem item in this.listView1.Items){if(Intent.dict['form2_textbox2_text"]+""==item.SubItems[0].Text){}
}

注意在添加行时,第一列是使用listViewItem.Text来设置的。之后则是使用listViewItem.SubItems.Add来添加。dataTable.Row[i][j]要加“”强制转换成字符串

删除选中行:listView1.SelectedItems[0].Remove();


C#之ComboBox

combobox是下拉框。即题目要求的要求使用下拉菜单实现。属性只需要将DropDownStyle设置为DropDownList(不可编辑)。
将员工名/员工编号加载进comboBox

table=db.getBySql(@"select EmpNo from EMPLOYEE");
for(int i=0;i<table.Rows.Count;i++)
for(int j=0;j<table.Columns.Count;j++)
comboBox1.Items.Add(table.Rows[i][j]+"");
comboBox1.SelectedIndex=0;//设置显示为第1个

获取选中的comboBox:comboBox1.Text
在选中查询后,若想表格只显示当前的员工信息,则需要将listView清空,使用listView2.clear();但使用后表头也会没有,所以需要注意每次clear后重新增加表头


C#之Button

与安卓类似。直接在设计界面选中按钮,然后在属性框中的闪电标志下的Click中填入Click事件函数的函数名,回车,就会自动生成函数


C#之窗口

在Program.cs中可以设定应用程序入口点,默认新建项目时的窗口文件Form1.cs。
Form的属性设置FormBorderStyle为FixedSingle,MaximizeBox,MinimizeBox为false,即无法最大最小化。StartPosition为CenterScreen。事件中Load即弹出窗口时运行的函数。这个项目中有多个子菜单。几个查询都是点击标签即显示,所以在弹出窗口时就要查询好查好,放在Form1_Load()中。鼠标点击事件则按上面说的自动生成,在load函数外。
添加修改员工时需要弹出第二个窗口来填写信息,这时候直接新建一个对象Form2就好。Form2是个新的窗口Form2 form2=new Fomr2();
若要制造登陆窗口切换到另外一个窗口的效果,则使用

this.Hide();
form2.Show();

如果是非初始窗口则可以使用close。

窗口间信息交换

与安卓一样使用Intent的概念。新建一个Intent静态类,这个类是个字典。这样就可以通过键值来存储信息,通过静态的来共享。

using System;
using System.Collections.Generic;
using System.Text;
namespace SCUT
{class Intent{public static Dictionary<string, Object> dict=new Dictiionary<string, object>();}
}

例子:

//存:
Intent.dict["form2_textbox1_text"]=textBox1.Text;
Intent.dict["form2_raidobutton"]="男";
//取:
listViewItem.SubItems.Add(Intent.dict["form2_textbox1_text"]+"");
db.getBySql(@"select EmpName From EMPLOYEE where EmpNo='"+Intent.dict["form2_textbox2_text"]+"';"

连接数据库语句时要特别该变量是字符串还是数字,如果是varchar则要加’ ‘,数字则不用。
使用DialogResult来判断是否正确返回

//form1.cs
if(form2.showDialog()==DialogResult.OK){}//form2.cs
this.DialogResult=DialogReslut.OK;
this.close();

C#之其他控件

  1. RadioButton:多选一用的RadioButton要放在同一个panel里保证互斥,要取被选中的radioBUtton需要一个个检测if(radioButton.Checked),获取值是radioButton.Text;
  2. Label: 增加文本说明。

SqlServer

在最开始,先建立两个工具类,一个是数据库的操作,一个是Intent。这里说数据库:
首先是建立连接。写在构造函数中:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;//DataTable用到
using System.Data.SqlClient;//一系列的数据库操作类用到    private SqlConnection sqlConnection;
public DB(){sqlConnection=new SqlConnection(@"server=.\SQLEXPRESS;database=SCUT;Trusted_Connection=SSPI;");//server名字看数据库的sqlConnection.Open();//要Open,否则无法增删
}

数据库的操作分为增删改和查两大类。因为前一类不会返回表,只执行操作,而查询需要返回的表。
所以分成两个函数;

public Datatable getSql(string sql){SqlDataAdapter sqlDataAdapter=new SqlDataAdapter(new SqlCommand(sql, sqlConnection));DataTable dataTable=new DataTable();sqlDataAdapter.Fill(dataTable);return dataTable;
}public void setSql(string sql){new SqlCommand(sql, sqlConnection).ExecuteNonQuery();
}

最后需要析构函数关闭数据库

public void Dispose(){sqlConnection.Close();
}

最后效果如图:



华南理工大学计算机研究生复试机试复习相关推荐

  1. 计算机复试机试题目与答案,二零一四年华中科技大学计算机研究生复试机试题目...

    2014年华中科技大学计算机研究生复试机试题目 2014年研究生复试终于结束了,因为自己寻找往年机试题目的经历很艰难,故我希望为之后的学弟,学妹们提供一些资料,以供参考. 今年机试题目总共有3道,编译 ...

  2. 暨南大学计算机研究生复试机试历年真题

    师弟师妹: 你好,2022年暨南大学硕士研究计算机专业考研初试已经结束.还能来这个网站的同学,应该是考的比较理想的.在这里,分享下暨大计算机复试的相关经验. 今年较去年比较,最大的区别是没有疫情了.从 ...

  3. 2013年中南大学计算机研究生复试机试题解

    高温假闲着无聊,在voj上把CSU的机试题 刷了一道,可能是因为题目年代比较久远,题目的难度并不是很大.稍稍整理一下,希望以后用得着. 1264: 惠民工程 所有题目中唯一的数据结构题 一道最小生成树 ...

  4. 华师大计算机在线作业,华东师范大学计算机考研复试机试习题

    华东师范大学计算机考研复试机试习题 华东师范大学计算机考研:计算机系.数据学院复试机试历年真题以及AC代码.历年学长总结得到.适用学院:计算机学院.数据学院.软件学院也可参考.sum/=10;prin ...

  5. 1004: 惠民工程 (2013年中南大学研究生复试机试 )

    1004: 惠民工程 时间限制: 1 Sec  内存限制: 128 MB 提交: 404  解决: 81 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 市政府"惠民工程&q ...

  6. 2022年华南理工大学计算机考研复试时间

    2022年华南理工大学计算机考研复试在几月份呢?2022年华南理工大学计算机考研初试已于2021年12月结束,现已进入2022年,迎接计算机考研党的是考研初试成绩.复试分数线以及复试时间,接下来就由小 ...

  7. 华南理工大学计算机/软件 复试 经验贴整理

    文章目录 最新更新2023/02/24 : 我能提供?(21,22届复试全流程,如何找复试资料,一些学习技巧,前人经验,闲聊,会就答...) 2020年 2019年 其它 资料来源 最新更新2023/ ...

  8. 上海交大计算机考研复试,上海交大计算机考研复试机试

    上海交大 计算机考研 SJTU-CS 复试机试 (2005-2010) 题目 我自己在准备考研时曾做了下06,07,08,09年的题目,并且在博客中提供了一个参考的题解,10年的题目以及11年保研的题 ...

  9. 南京大学java机试,2019年南京大学计算机考研复试机试真题

    目录 第一题 Stepping Numbers 题意 思路 代码 反思 第二题 Nodes from the Root 题意 思路 代码 大佬的标准题解代码: 菜鸡我的又费空间,又费时间,又臭又长,思 ...

最新文章

  1. Android Layer List 使用实现实例
  2. 编译Hi3516a osdrv目录
  3. RCP:解决Navigator快捷键不生效的问题
  4. webSocket使用心跳包实现断线重连
  5. Matlab中的文件读取函数
  6. [导入]关于阶乘的两个常见算法及一个相关面试题
  7. linux显示mem进行排序,Linux查看系统负载(CPU和MEM考虑)
  8. SpringBoot引入Redis
  9. Python办公自动化——8行代码实现文件去重
  10. 诺基亚3090微信java,适合Asha系列,微信登陆诺基亚S40平台
  11. spring集成flyway
  12. 实验一 利用Excel表格进行掷硬币模拟实验
  13. 范里安《微观经济学:现代观点》(第9版)章节习题精编详解
  14. [Validation set: 'activiti-executable-process' | Problem: 'activiti-exclusive-gateway-condition-not-
  15. Chronometer实现计时器 开始、暂停、停止功能
  16. ios与android指纹识别,iOS开发实现TouchID指纹解锁
  17. 索尼xz Android 内存,首发Android 9.0索尼新旗舰XZ2P曝光:搭载骁龙845处理器和6GB内存...
  18. 适合短期内想快速上手数字孪生系统的人使用的数字孪生软件推荐
  19. RSA算法和RSA数字签名算法
  20. 电子招投标采购系统源码-适合于招标代理、政府采购、企业采购、工程交易等业务的企业

热门文章

  1. 仿新版QQ锁屏下弹窗
  2. CarSim仿真快速入门(十三)—转向系统
  3. 如何做好企业公众号的专属微社区?满足内部员工交流互动
  4. Hackers' Crackdown
  5. 模糊pid和神经网络pid对比,神经网络pid控制率计算
  6. 怎么备份织梦网站数据 网站备份教程
  7. Druid拦截sql语句,实现在添加一个查询条件
  8. Vivado生成及仿真网表文件
  9. more-cdn自建 cdn 服务器,包含常用的js库文件
  10. 推挽、开漏、强上拉、弱上拉、强下拉、弱下拉输出