ADO.NET测试题

时间:2023-03-09 13:37:45
ADO.NET测试题

第一部分:

新建一个数据库:ADO测试,包含下面两个数据表,使用代码创建,并保留创建的代码文本。

学生表Student:

编号(Code):nvarchar类型,不能为空,主键

姓名(Name):nvarchar类型,不能为空

性别(Sex):bit类型,不能为空,true为男,false为女

生日(Birthday):datetime类型,不能为空

专业编号(SubjectCode):nvarchar类型,可以为空

Code(主键)

Name

Sex

Birthday

SubjectCode

S001

张三

true

1994/1/12

Z001

S002

李四

true

1995/2/22

Z002

S003

王五

true

1996/8/28

Z002

S004

小花

false

1997/3/6

Z003

专业表Subject:

专业编号(SubjectCode):nvarchar类型,不能为空,主键

专业名称(SubjectName):nvarchar类型,不能为空

SubjectCode(主键)

SubjectName

Z001

商务英语

Z002

软件工程

Z003

旅游

Z004

工商管理

第二部分:

新建一个控制台应用程序:

一、数据显示:

将Student表数据查询显示,显示格式为:

编号   姓名   性别   年龄         生日            专业

001   张三    男     22   1994年1月12日     商务英语

……

……

统计:总人数为xx人,平均年龄为xx岁。

性别显示为男/女(true为男,false为女),自动计算出年龄,生日显示为“XXXX年XX月XX日”,专业显示专业编号对应的专业名称,注意最后一行的统计内容要显示完整。

二、功能操作:

在上面的基础上增加功能,表数据显示完毕后,提示用户可以继续操作:

“请输入您要继续的操作(输入数字1为新增,输入数字2为修改,输入数字3为删除):”,输入其它内容提示输入有误,并回到上面继续等待用户操作。

三、新增:

当用户输入1并回车后,按照顺序让用户分别输入:学生编号,学生姓名,性别,生日,专业等内容,格式为:

请输入学生编号:

请输入学生姓名(不能为空):

请输入学生性别(男/女):

请输入学生生日(如:2000/12/12):

请输入专业:

每次输入都需要做以下判断,如果输入不正确,则提示输入有误,并让用户重新输入:

1、学生编号不允许重复

2、学生姓名不能为空

3、性别只能输入男/女,并自动转换为true/false

4、生日格式是否是正确

5、专业需要用户输入中文,如:当用户输入“商务英语”或“英语”,自动查到“Z001”专业编号,如果查不到则提示“没有此专业”

当以上内容全部填写完毕并无误后,将此学生信息打印显示出来,并询问用户“以上为新增学生的信息,是否确定添加?(Y/N):”,当用户输入Y确定添加后,才进行添加,如果添加成功,则将控制台程序清空,并刷新显示最新的Student表数据,提示添加成功,并继续回到“二”等待用户继续操作。

四、修改:

当用户输入2并回车时,提示用户输入需要更改的学生编号,如果有此学生,那么除学生编号外,其余的内容全部进行修改,格式为:

S001学生当前姓名为:张三

请输入您的修改:

S001学生当前的性别为:男

请输入您的修改:

……

每次修改后都需要与新增时一样的判断,当全部内容都修改完毕后,将修改后的学生信息打印显示出来,并询问“以上为修改后的学生信息,是否确定修改?(Y/N):”,当用户输入Y并回车才真正确定修改,并提示修改是否成功,如果修改成功,则清空控制台内容,刷新显示最新的Student表数据,并提示修改成功,继续回到“二”等待用户继续操作。

五、删除:

当用户输入3并回车时,提示用户输入需要删除的学生编号,如果有此学生,那么将此学生的信息展示出来,并提示“是否要删除此学生的信息?(Y/N)”,当用户输入Y确定删除后,才进行删除,并提示删除是否成功,如果删除成功,则清空控制台内容,刷新显示最新的Student表数据,并提示删除成功,继续回到“二”等待用户继续操作。

数据库内容:

ADO.NET测试题

实体类:Student.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient; namespace ADONET测试.App_Code
{
public class Student
{
//连接数据库
SqlConnection conn = null;
SqlCommand comm = null;
public Student()
{
conn = new SqlConnection("server=.;database=ADO;user=sa;pwd=123");
comm = conn.CreateCommand();
} private string _Code;
/// <summary>
/// 学生编号
/// </summary>
public string Code
{
get { return _Code; }
set { _Code = value; }
}
private string _Name;
/// <summary>
/// 学生姓名
/// </summary>
public string Name
{
get { return _Name; }
set { _Name = value; }
}
private bool _Sex;
/// <summary>
/// 学生性别
/// </summary>
public bool Sex
{
get { return _Sex; }
set { _Sex = value; }
}
/// <summary>
/// 学生性别扩展属性
/// </summary>
public string SexStr
{
get
{
return _Sex ? "男" : "女";
}
} private DateTime _Birthday;
/// <summary>
/// 生日
/// </summary>
public DateTime Birthday
{
get { return _Birthday; }
set { _Birthday = value; }
}
/// <summary>
/// 生日扩展属性
/// </summary>
public string BirthdayStr
{
get
{
return _Birthday.ToString("yyyy年MM月dd日");
}
}
/// <summary>
/// 年龄-生日扩展属性
/// </summary>
public int Age
{
get
{
int dt1 = DateTime.Now.Year;
int dt2 = DateTime.Parse(_Birthday.ToString()).Year;
return dt1 - dt2;
}
} /// <summary>
/// 科目编号
/// </summary>
private string _SubjectCode; public string SubjectCode
{
get { return _SubjectCode; }
set { _SubjectCode = value; }
}
/// <summary>
/// 科目名称
/// </summary>
public string SubjectName
{
get
{
string end = "未填写";
comm.CommandText = "select *from Subject where SubjectCode=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a",_SubjectCode);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
dr.Read();
end = dr["SubjectName"].ToString();
}
conn.Close();
return end;
}
}
} }

数据访问类:StudentData.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient; namespace ADONET测试.App_Code
{
public class StudentData
{
//连接数据库
SqlConnection conn = null;
SqlCommand comm = null;
public StudentData()
{
conn = new SqlConnection("server=.;database=ADO;user=sa;pwd=123");
comm = conn.CreateCommand();
}
//查询 //查询所有学生的数据
public List<Student> Select()
{
List<Student> slist = new List<Student>();
comm.CommandText = "select *from Student";
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Student st = new Student();
st.Code = dr["Code"].ToString();
st.Name = dr["Name"].ToString();
st.Sex = Convert.ToBoolean(dr["Sex"]);
st.Birthday = Convert.ToDateTime(dr["Birthday"]);
st.SubjectCode = dr["SubjectCode"].ToString();
slist.Add(st); }
}
conn.Close();
return slist;
} //根据学生编号查询某个学生的数据
public List<Student> Select1(string code)
{
List<Student> slist = new List<Student>();
comm.CommandText = "select *from Student where Code=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", code);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
Student st = new Student();
st.Code = dr["Code"].ToString();
st.Name = dr["Name"].ToString();
st.Sex = Convert.ToBoolean(dr["Sex"]);
st.Birthday = Convert.ToDateTime(dr["Birthday"]);
st.SubjectCode = dr["SubjectCode"].ToString();
slist.Add(st); }
}
conn.Close();
return slist;
}
//根据编号查询判断某个学生在数据库中是否存在,存在返回true,不存在返回false
public bool Select(string code)
{
bool has = false;
comm.CommandText = "select *from Student where code=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", code);
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
has = true;
}
conn.Close();
return has;
} //科目名称模糊查询,判断该科目是否存在,存在返回true,不存在返回false
public bool select1(string suname)
{
bool has = false;
Student st = new Student();
comm.CommandText = "select SubjectCode from Subject where SubjectName like '%" + suname + "%'";
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
has = true;
}
conn.Close();
return has;
}
//科目名称模糊查询,获取对应的科目编号
public Student select(string suname)
{
Student st = new Student();
comm.CommandText = "select SubjectCode from Subject where SubjectName like '%" + suname + "%'";
conn.Open();
SqlDataReader dr = comm.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{ st.SubjectCode = dr["SubjectCode"].ToString(); }
}
conn.Close();
return st;
} //添加
public bool Insert(Student stu)
{
bool ok = false;
int count = ;
comm.CommandText = "insert into Student values(@a,@b,@c,@d,@e)";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", stu.Code);
comm.Parameters.AddWithValue("@b", stu.Name);
comm.Parameters.AddWithValue("@c", stu.Sex);
comm.Parameters.AddWithValue("@d", stu.Birthday);
comm.Parameters.AddWithValue("@e", stu.SubjectCode);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch
{
ok = false;
}
finally
{
conn.Close();
}
if (count > )
ok = true;
else
ok = false; return ok;
} //删除
public bool Delete(string st)
{
bool have = false;
int count_del = ;
comm.CommandText = "delete from Student where Code=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", st);
try
{
conn.Open();
count_del = comm.ExecuteNonQuery();
}
catch
{
have = false;
}
finally
{
conn.Close();
}
if (count_del > )
have = true;
return have;
} //修改
public bool Update(Student user)
{
bool ok = false;
int count = ;
comm.CommandText = "update Student set Name=@b,Sex=@c,Birthday=@d,SubjectCode=@e where Code=@a";
comm.Parameters.Clear();
comm.Parameters.AddWithValue("@a", user.Code);
comm.Parameters.AddWithValue("@b", user.Name);
comm.Parameters.AddWithValue("@c", user.Sex);
comm.Parameters.AddWithValue("@d", user.Birthday);
comm.Parameters.AddWithValue("@e", user.SubjectCode);
try
{
conn.Open();
count = comm.ExecuteNonQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex);
ok = false;
}
finally
{
conn.Close();
}
if (count > )
{
ok = true;
}
return ok;
} }
}

业务逻辑层:Program.cs

using ADONET测试.App_Code;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ADONET测试
{
class Program
{
static void Main(string[] args)
{
//查询所有学生的数据,统计总人数count,统计平均年龄
int count = , sum = ;
List<Student> slist = new StudentData().Select();//调用StudentData类中的Select()方法查询所有学生的数据
Console.Clear();
Console.WriteLine("编号\t姓名\t性别\t年龄\t生日\t\t专业");
foreach (Student sss in slist)
{
Console.WriteLine(sss.Code + "\t" + sss.Name + "\t" + sss.SexStr + "\t" + sss.Age + "\t" + sss.BirthdayStr + "\t" + sss.SubjectName);
count++;
sum += sss.Age;
}
Console.WriteLine("统计:总人数为" + count + "人,平均年龄为" + (sum / count) + "岁。"); for (; ; )
{
Console.Write("请输入您要继续的操作(输入数字1为新增,输入数字2为修改,输入数字3为删除):");
string operate = Console.ReadLine();
if (operate == "")
{
Student stu = new Student();
for (; ; )
{ Console.Write("请输入学生编号:");
stu.Code = Console.ReadLine();
if (stu.Code.Trim() == "")//判断编号是否为空
{
Console.WriteLine("编号不能为空!");
}
else
{
if (new StudentData().Select(stu.Code))//判断编号是否存在
{
Console.WriteLine("此编号已存在!");
}
else
{
break;
}
}
} for (; ; )
{
Console.Write("请输入学生姓名(不能为空):");
stu.Name = Console.ReadLine();
if (stu.Name.Trim() == "")//判断学生姓名是否为空
{
Console.WriteLine("姓名不能为空!");
}
else
{
break;
}
}
for (; ; )
{
Console.Write("请输入学生性别(男/女):");
string Sex = Console.ReadLine();
if (Sex == "男")//性别只能输入男或女
{
stu.Sex = true;
break;
}
else if (Sex == "女")
{
stu.Sex = false;
break;
}
else
{
Console.WriteLine("性别必须为男女!");
}
}
for (; ; )
{
Console.Write("请输入学生生日(如:2000/12/12):");
string Birthday = Console.ReadLine();
try//判断日期格式是否正确
{
stu.Birthday = Convert.ToDateTime(Birthday);
break;
}
catch
{
Console.WriteLine("日期格式错误!");
continue;
} }
for (; ; )
{
Console.Write("请输入专业:");
string SubjectName = Console.ReadLine();
if (SubjectName == "")//若科目名称不输入任何信息,则不赋给科目编号任何信息(值为空)
{
stu.SubjectCode = "";
break;
}
else
{
if (new StudentData().select1(SubjectName))//调用StudentData类中的select1(科目名称)方法,判断是否存在该科目
//若存在返回true
{
Student st = new StudentData().select(SubjectName);//调用StudentData类中的select(科目名称)方法获取该科目的所有信息
stu.SubjectCode = st.SubjectCode;
break; }
else
{
Console.WriteLine("没有此专业!");
}
}
}
Console.WriteLine("编号\t姓名\t性别\t生日\t\t专业");//输出新增学生的信息
Console.WriteLine(stu.Code + "\t" + stu.Name + "\t" + stu.SexStr + "\t" + stu.BirthdayStr + "\t" + stu.SubjectName); Console.Write("以上为新增学生的信息,是否确定添加?(Y/N):");//用户操作
string yn = Console.ReadLine();
if (yn.ToUpper() == "Y")
{
if (new StudentData().Insert(stu))//调用StudentData类中的Insert(Student 名称)方法
{
Console.Clear();
List<Student> stlist = new StudentData().Select();//泛型集合,调用StudentData类中的Select()方法查询所有学生的数据
Console.Clear();
Console.WriteLine("编号\t姓名\t性别\t年龄\t生日\t专业");
foreach (Student sss in stlist)//打印添加后所有学生的信息
{
Console.WriteLine(sss.Code + "\t" + sss.Name + "\t" + sss.SexStr + "\t" + sss.Age + "\t" + sss.BirthdayStr + "\t" + sss.SubjectName);
}
Console.WriteLine("添加成功!"); }
else
{
Console.WriteLine("添加失败!"); }
}
else
{
Console.WriteLine("取消添加!");
continue;
}
}
else if (operate == "")
{
Console.Write("输入要修改的学生编号:");
string operate_update = Console.ReadLine();
if (new StudentData().Select(operate_update))//调用StudentData类中的Select(学生编号)方法,判断是否存在该编号
{
//泛型集合,调用StudentData类中的Select1(学生编号)方法,查询当前学生的信息
List<Student> stlist = new StudentData().Select1(operate_update);
Console.Clear();
Student stu = new Student();
stu.Code = operate_update;
foreach (Student sss in stlist)
{
Console.WriteLine(sss.Code + "学生当前姓名为:" + sss.Name); for (; ; )
{
Console.Write("请输入您的修改:");
stu.Name = Console.ReadLine();
if (stu.Name.Trim() == "")//姓名不能为空
{
Console.WriteLine("姓名不能为空!");
}
else
{
break;
}
} Console.WriteLine(sss.Code + "学生当前性别为:" + sss.SexStr);
for (; ; )
{
Console.Write("请输入您的修改:");
string sex = Console.ReadLine();
if (sex == "男")//性别只能输入男或女
{
stu.Sex = true;
break;
}
else if (sex == "女")
{
stu.Sex = false;
break;
}
else
{
Console.WriteLine("性别必须为男女!");
}
} Console.WriteLine(sss.Code + "学生当前生日为:" + sss.BirthdayStr);
for (; ; )
{
Console.Write("请输入您的修改:");
string birthday = Console.ReadLine();
try//判断日期格式是否正确
{
stu.Birthday = Convert.ToDateTime(birthday);
break;
}
catch
{
Console.WriteLine("日期格式错误!");
continue;
}
}
Console.WriteLine(sss.Code + "学生当前专业为:" + sss.SubjectName);
for (; ; )
{
Console.Write("请输入您的修改:");
string subjectcode = Console.ReadLine(); if (subjectcode == "")//若科目名称不输入任何信息,则不赋给科目编号任何信息(值为空)
{
stu.SubjectCode = "";
break;
}
else
{
if (new StudentData().select1(subjectcode))//调用StudentData类中的select1(科目名称)方法,判断是否存在该科目
//若存在返回true
{
Student st = new StudentData().select(subjectcode);//调用StudentData类中的select(科目名称)方法获取该科目的所有信息
stu.SubjectCode = st.SubjectCode;
break; }
else
{
Console.WriteLine("没有此专业!");
}
}
}
}
//List<Student> stulist = new StudentData().Select1(operate_update);//泛型集合调用StudentData类中的Select1(学生编号)方法
Console.Clear();
Console.WriteLine("编号\t姓名\t性别\t年龄\t生日\t\t专业");//打印该学生修改后的所有信息 Console.WriteLine(stu.Code + "\t" + stu.Name + "\t" + stu.SexStr + "\t" + stu.Age + "\t" + stu.BirthdayStr + "\t" + stu.SubjectName); Console.Write("以上为修改后的学生信息,是否确定修改?(Y/N):");
string yn = Console.ReadLine();
if (yn.ToUpper() == "Y")
{
if (new StudentData().Update(stu))//调用StudentData类中的Updata(Student 名称)方法,返回True表示添加成功
{
List<Student> studlist = new StudentData().Select();//泛型集合调用StudentData类中的Select()方法,获取所有学生的信息
Console.Clear();
Console.WriteLine("编号\t姓名\t性别\t年龄\t生日\t\t专业");
foreach (Student sss in studlist)//打印修改后所有学生的信息
{
Console.WriteLine(sss.Code + "\t" + sss.Name + "\t" + sss.SexStr + "\t" + sss.Age + "\t" + sss.BirthdayStr + "\t" + sss.SubjectName);
}
Console.WriteLine("修改成功!");
}
else
{
Console.WriteLine("修改失败!");
continue;
}
}
else
{
Console.WriteLine("取消修改!");
}
}
else
{
Console.WriteLine("无此学生!");
continue;
} }
else if (operate == "")
{
Console.Write("输入要删除的学生编号:");
string operate_delete = Console.ReadLine();
if (new StudentData().Select(operate_delete))////调用StudentData类中的Select(学生编号)方法,返回True表示存在该学生
{
List<Student> stlist = new StudentData().Select1(operate_delete);//泛型集合调用StudentData类中的Select1(学生编号)方法
//获取当前学生的信息
Console.Clear();
Console.WriteLine("编号\t姓名\t性别\t年龄\t生日\t\t专业");
foreach (Student sss in stlist)//打印当前学生的信息
{
Console.WriteLine(sss.Code + "\t" + sss.Name + "\t" + sss.SexStr + "\t" + sss.Age + "\t" + sss.BirthdayStr + "\t" + sss.SubjectName);
}
Console.Write("是否删除(Y/N)");
string yn = Console.ReadLine();
if (yn.ToUpper() == "Y")
{
if (new StudentData().Delete(operate_delete))//调用StudentData类中的Delete(学生编号)方法,返回True便是删除成功
{
Console.Clear();
List<Student> stulist = new StudentData().Select();//泛型集合调用StudentData类中的Select()方法,获取所有学生的信息
Console.Clear();
Console.WriteLine("编号\t姓名\t性别\t年龄\t生日\t\t专业");
foreach (Student sss in stulist)//打印删除后的所有学生信息
{
Console.WriteLine(sss.Code + "\t" + sss.Name + "\t" + sss.SexStr + "\t" + sss.Age + "\t" + sss.BirthdayStr + "\t" + sss.SubjectName);
}
Console.WriteLine("删除成功!"); }
else
{
Console.WriteLine("删除失败!"); }
}
else
{
Console.WriteLine("取消删除!");
continue;
}
}
else
{
Console.WriteLine("无此学生!");
continue;
} }
else
{
Console.WriteLine("输入有误!");
} }
Console.ReadKey();
}
}
}