2023年6月21日发(作者:)
数据库报告记录
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
企业实训实习报告
系别:计算机科学与技术
班级:
姓名:
学号:
成绩:
评语:
指导教师签字: 日期:
数据库应用系统开发
一、 需求分析------大学生选课管理系统
【实验内容】
教务处的管理人员录入全校的课程基本信息和本学期的课程授课教师、地点、时间;
在学生入学的时候,学院的管理人员录入学生基本信息;
学生每学期自己上网登录系统选课,选课成功后信息存入数据库中,学生自己可以查询选课的情况;
学生选课不成功的情况有:
所选课程的先修课还没有记录,系统提示“缺先修课,选课失败”;
本学期所选课程的上课时间有冲突,系统提示“上课时间有冲突,选课失败”;
学生一学期所选课程的学分最多不能超18学分
学生可以注销所选课程。
学院管理员可以查询学生前几学期的选课信息、可以查询课程基本信息、学生基本信息;
当学生退学时,由教务处的管理人注销学生基本信息;
如果开课之后,学生要求退课,则由教务处的工作人员为学生注销所选课程;
允许学生休学,教务处为休学的退学做学籍冻结处理;复学后为其办理解冻处理;
每学期教务处为学生办理学期注册手续;没有办理学期注册的学生不能选课;
学期末,学院工作人员负责录入学生的成绩。
【实验目的】
通过本实验使学生掌握结构化需求分析的方法、过程和相应的文档内容与格式。特别是熟悉数据流程图、数据字典和IPO图三个核心技术的应用。
【实验步骤】
1) 结合实验内容说明,对现有的学生选课系统进行必要的调研,了解基本的工作流程、软件功能、数据需求和界面风格。
2) 分析实验内容说明和调研结果,画出系统的数据流程图。
3) 编写系统的数据字典。
4) 用IPO图描述系统的处理过程。
5) 画出系统ER图。
【实验结果】
数据流程图:
数据字典:
学生基本信息
字段名
StudentID
Name
数数数是键
据名称 据长度 据类型 否为主学号
姓名
50字节
50字节
nvarchar
nvarchar
否
是
Sex
Age
Academy
Major
Class
Enrollment
Address
beizhu
State
RoleID
用户信息
性别
年龄
学院
专业
班级
入学时间
家庭地址
备注
状态
角色号
数50字节
4字节
50字节
50字节
50字节
50字节
50字节
50字节
4字节
4字节
数nvarchar
int
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
int
int
否
否
否
否
否
否
否
否
否
否
字
数是 段名
userID
Password
Role
Academy
Time
课程基本信息
据名称 据长度 据类型 否为主键
用户名
密码
角色
角色号
登陆时间
字段名
据名称
CourseID
程号
50字节
50字节
50字节
4字节
50字节
数据长度
课0字节
学5nva否
5nvarchar
nvarchar
数数否为主键
是
是否
nvarchar
nvarchar
nvarchar
int 否
否
否
是
据类型
CourseName
号 0字节
Classify
程分类
Credit
分
Major
学字节
专业 0字节
Academy 学院 0字节
Advanced_coursename 修课程名
Advanced_course
修
rchar
5nvarchar
否 课0字节
4int 否
5nvarchar
否
5nvarchar
否
先0字节
5nvarchar
否
先0字5nvarchar
否 课程号
授课信息
节
字段名 数数数是键
据名称 据长度 据类型 否为主CourseID
CourseName
Schooltime
Credit
Address
Start_end
Teacher
Class
课程号
课程名称
上课时间
学分
上课地点
起止时间
授课老师
上50字节
50字节
50字节
4字节
50字节
50字节
50字节
50nvarchar
nvarchar
nvarchar
int
nvarchar
nvarchar
nvarchar
nva是
否
否
否
否
否
否
否 课班级
Sum
Renshu
Sel_count
选课信息
字节
4字节
4字节
4字节
数rchar
int
int
int
否
否
否
课程容量
上课人数
选课人数
数字段名 数是键
据名称 据长度 据类型 否为主StudentID
CourseID
CourseName
StateCourse
Year
Season
学号
课程号
课程名称
中签状态
年份
季50字节
50字节
50字节
50字节
4字节
50nvarchar
nvarchar
nvarchar
nvarchar
int
nva是
是
否
否
是
否 别
Classify
成绩信息
字节
50字节
数rchar
nvarchar
数是键
否 课程分类
数字段名
据名称 据长度 据类型 否为主StudentID
CourseID
CourseName
Grade
Credit
TeacherName
Year
Season
学号
课程号
课分数
学分
授年份
季50字节
50字节
504字节
4字节
504字节
50nvarchar
nvarchar
nvarchar
int
int
nvarchar
int
nva是
是
否
否
否
否
否
否
程名称 字节
课老师 字节 别
学生注册信息
字节
数rchar
数是键
字段名
StudentID
Name
Year
Season
Register
教师信息
数据名称 据长度 据类型 否为主学号
姓名
年份
季别
注册
数50字节
50字节
4字节
4字节
4字节
数数是键
nvarchar
int 否
是
nvarchar
nvarchar
int 是
否
是
字段名
TeacherID
Name
据名称 据长度 据类型 否为主教师编号
姓名
50字节
50字节
nvarchar
nvarchar
否
是 Sex
Title
Academy
Position
Birth
jiguan
beizhu
性别
职称
所属学院
职务
出生日期
籍贯
备注
50字节
50字节
50字节
50字节
50字节
50字节
50字节
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
否
否
否
否
否
否
否
系统ER图:
二、 系统设计------选课管理系统设计
【实验内容】
1) 对实验1的结果进行概要设计和详细设计,画出功能模块图。
2) 对系统的主界面、课程基本信息录入界面、学生选课操作界面、学生选课结果浏览界面进行设计。
3) 进行数据库设计。得到数据库的逻辑结构图。
【实验结果】
系统功能模块图
a) 顶层模块结构图
b) 详细模块结构图
用例图
a) 学生用例图
b) 学院管理员用例图
c) 教务处管理员用例图
数据库设计(包括表名、字段名、字段类型、字段大小、字段说明)
a) 用户表(Account)
b) 课程基本信息表(Course_basic_info)
c) 授课信息表(course_info)
d) 学生成绩表(Score)
e) 学生选课表(Select_course)
f) 学生基本信息表(Student)
g) 学生注册信息表(Student_record)
h) 教师基本信息表(Teacher_info)
三、 选课管理系统编程
【实验内容】
教务处的管理人员录入全校的课程基本信息和本学期的课程授课教师、地点、时间;
在学生入学的时候,学院的管理人员录入学生基本信息;
学生每学期自己上网登录系统选课,选课成功后信息存入数据库中,学生自己可以查询选课的情况;
学生选课不成功的情况有:
所选课程的先修课还没有记录,系统提示“缺先修课,选课失败”;
本学期所选课程的上课时间有冲突,系统提示“上课时间有冲突,选课失败”;
学生一学期所选课程的学分最多不能超18学分
学生可以注销所选课程。
学院管理员可以查询学生前几学期的选课信息、可以查询课程基本信息、学生基本信息;
当学生退学时,由教务处的管理人注销学生基本信息;
如果开课之后,学生要求退课,则由教务处的工作人员为学生注销所选课程;
允许学生休学,教务处为休学的退学做学籍冻结处理;复学后为其办理解冻处理;
每学期教务处为学生办理学期注册手续;没有办理学期注册的学生不能选课;
学期末,学院工作人员负责录入学生的成绩。
【实验目的】
1) 通过本实验使学生通过掌握选课管理系统的实现。
【实验步骤】
根据实验1和实验2对选课管理系统的了解,选用C#编程语言实现本系统,并对编码通过注释进行必要的说明。
【实验结果】
a) 登陆界面
b) 学生操作界面
c) 选课查看
d) 课程信息修改
e) 学生信息修改
f) 选课抽签
g) 学生信息录入
h) 查询选课信息
i) 学生注册
j) 休学、复学
主要功能源代码
登录界面:
private void button1_Click(object sender, EventArgs e)
{
string userid = ;//用户名
string pwd = ; //密码
string un= ;
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection(conn);//创建数据库连接
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
string str_sql = "select count(*) from u where userid=@userid and
password=@password and userno=@un";//执行的命令Sql
dText = str_sql;//设置命令文本
(new SqlParameter("@userid", userid));
(new SqlParameter("@password", pwd));
(new SqlParameter("@un",un));
int count = 32(eScalar());//执行命令
if (count>0)
{
if (("学生"))
{
name = userid;
//用户名等于输入的用户名,密码等于输入的密码的记录条数大于0, 表示登陆成功,显示主界面
Form2 f2 = new Form2();
();
}
if (("院管理员"))
{
//用户名等于输入的用户名,密码等于输入的密码的记录条数大于0,表示登陆成功,显示主界面
Form3 f3 = new Form3();
();
}
if (("教务处管理员"))
{
//用户名等于输入的用户名,密码等于输入的密码的记录条数大于0,表示登陆成功,显示主界面
Form4 f4 = new Form4();
();
}
}
else
{
("用户名或者密码输入错误");
}
学生选课:
private void button4_Click(object sender, EventArgs e)
{
string cname = ;
string n = ;
string semester = ;
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection(conn);//创建数据库连接
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
string str_sql="select sout from s where sno=@n";
(new SqlParameter("@n", n));
dText = str_sql;
SqlDataReader d = null;
d = eReader();
if (())
{
int sout = 32(d["sout"].ToString());
if (sout == 0)
{
();
();
str_sql = "select count(*) from course where cname=@cname and
(cfirst='' or cfirst in (select cno from Sc where sno=@n and grade!=0))";//执行的命令Sql
dText = str_sql;//设置命令文本
(new SqlParameter("@cname", cname));
int count= 32(eScalar());//执行命令
if (count > 0)
{
();
();
str_sql = "select count(*) from c where cname=@cname and ctime
not in (select ctime from sc,c where sno=@n and = and grade=0)";
dText = str_sql;//设置命令文本
count = 32(eScalar());//执行命令
if (count > 0)
{
();
();
str_sql = "select sum(ccredit) from c where cno in(select
cno from sc where grade=0 and sno=@n)";
dText = str_sql;//设置命令文本
int sum = 32(eScalar());//执行命令
();
();
str_sql = "select ccredit,cno from c where cname=@cname";
dText = str_sql;//设置命令文本
SqlDataReader dr = null;
dr = eReader();
if (())
{
int a = 0;
a = 32(dr["ccredit"].ToString());
string cno = dr["cno"].ToString();
int c = sum + a;
if (c < 18)
{
();
();
str_sql = "insert into sc values('" + n + "','"
+ cno + "','"
+ null + "','"
+ semester + "') ";
dText = str_sql;//设置命令文本
eNonQuery();//执行命令
("选课成功!");
}
else ("本学期所选课程学分已满18,请下学期再选!");
}
}
else ("与已有课程时间冲突!");
}
else
{
("缺少先选课!");
}
}
else ("该学生尚未注册,不能选课!");
}
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
查询选课:
private void button2_Click(object sender, EventArgs e)
{
();
string semester = ;
string n = ;
string str_sql;
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
SqlConnection connection = new SqlConnection(conn);//创建数据库连接
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
if (("所有选课"))
{
str_sql = "select ,Cname,Cteacher,Ccredit from sc,c where
=@n and =";//执行的命令Sql
}
else
{
str_sql = "select ,Cname,Cteacher,Ccredit from sc,c where
=@n and semester=@semester and =";//执行的命令Sql
}
(new SqlParameter("@n", n));
(new SqlParameter("@semester", semester));
dText = str_sql;
tion = connection;
SqlDataReader str = null;
str = eReader();
int count = 0;
while (())
{
();
[count].Cells[0].Value =
str["Cno"].ToString();
[count].Cells[1].Value =
str["Cname"].ToString();
[count].Cells[2].Value =
str["Cteacher"].ToString();
[count].Cells[3].Value =
str["Ccredit"].ToString();
count++;
}
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
录入学生信息:
private void button1_Click(object sender, EventArgs e)
{
string sno = ;//学号
string sname = ; //姓名
string ssex = ;//性别
string sclass = ; //班级
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection();//创建数据库连接
tionString = conn;
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
string str_sql1 = "select count(*) from s where sno=@sno";
dText = str_sql1;//设置命令文本
(new SqlParameter("@sno", sno));
int count = 32(eScalar());//执行命令
if (count < 1)
{
string a, b, c;
a = "";
b = "";
c = "";
string str_sql = "insert into S values('" + sno + "','"
+ sname + "','"
+ ssex + "','"
+ sclass + "','"
+ a + "','"
+ b + "','"
+ c + "')"; //执行的命令S
(str_sql);
dText = str_sql;//设置命令文本
eNonQuery();//执行命令
("录入成功");
}
else ("学号已存在,请输入正确学号!");
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
查询学生选课:
private void button2_Click(object sender, EventArgs e)
{
();
string sno = ;
string semester = ;
string conn2 = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
SqlConnection connection2 = new SqlConnection(conn2);//创建数据库连接
try
{
();
SqlCommand comm2 = new SqlCommand();//创建数据库命令
tion = connection2;//设置命令的数据库连接
string str_sql2;
if (("所有选课"))
{
str_sql2 = "select Cname,Cteacher,Cplace,Ctime,Ccredit from sc,c where
=@sno and =";//执行的命令Sql
}
else
{
str_sql2 = "select Cname,Cteacher,Cplace,Ctime,Ccredit from sc,c where
=@sno and semester=@semester and =";//执行的命令Sql
}
(new SqlParameter("@sno", sno));
(new SqlParameter("@semester", semester));
dText = str_sql2;
tion = connection2;
SqlDataReader str2 = null;
str2 = eReader();
int count = 0;
while (())
{
();
[count].Cells[0].Value =
str2["Cname"].ToString();
[count].Cells[1].Value =
str2["Cteacher"].ToString();
[count].Cells[2].Value =
str2["Cplace"].ToString();
[count].Cells[3].Value =
str2["Ctime"].ToString();
[count].Cells[4].Value =
str2["Ccredit"].ToString();
count++;
}
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
录入课程信息:
private void button5_Click(object sender, EventArgs e)
{
string cno = ;//课程号
string cname = ; //课程名
string cteacher = ; //教师
string ctime = ;
string cplace = ;
string ccredit = (string);//学分
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection();//创建数据库连接
tionString = conn;
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据
string str_sql1 = "select count(*) from c where cteacher=@cteacher and
cno=@cno and cname=@cname";
dText = str_sql1;//设置命令文本
(new SqlParameter("@cteacher", cteacher));
(new SqlParameter("@cno", cno));
(new SqlParameter("@cname", cname));
int count = 32(eScalar());//执行命令
if (count <1)
{
string str_sql2= "select count(*) from c where cteacher=@cteacher and
ctime=@ctime and cplace!=@cplace";
(new SqlParameter("@ctime", ctime));
(new SqlParameter("@cplace", cplace));
dText = str_sql2;//设置命令文本
count = 32(eScalar());
if (count < 1)
{
string str_sql3 = "insert into C values('" + cno + "','"
+ cname + "','"
+ cteacher + "','"
+ ctime + "','"
+ cplace + "','"
+ ccredit + "')"; //执行的命令S
(cno + "," + cname + "," + cteacher + "," + cplace
+ "," + ctime + "," + ccredit);
dText = str_sql3;//设置命令文本
eNonQuery();//执行命令
("录入成功");
}
else ("教师时间冲突!");
}
else ("与已有课程存在冲突!");
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
四、选课管理系统测试
【实验内容】
教务处的管理人员录入全校的课程基本信息和本学期的课程授课教师、地点、时间;
在学生入学的时候,学院的管理人员录入学生基本信息;
学生每学期自己上网登录系统选课,选课成功后信息存入数据库中,学生自己可以查询选课的情况;
学生选课不成功的情况有:
所选课程的先修课还没有记录,系统提示“缺先修课,选课失败”;
本学期所选课程的上课时间有冲突,系统提示“上课时间有冲突,选课失败”;
学生一学期所选课程的学分最多不能超18学分
学生可以注销所选课程。
学院管理员可以查询学生前几学期的选课信息、可以查询课程基本信息、学生基本信息;
当学生退学时,由教务处的管理人注销学生基本信息;
如果开课之后,学生要求退课,则由教务处的工作人员为学生注销所选课程;
允许学生休学,教务处为休学的退学做学籍冻结处理;复学后为其办理解冻处理;
每学期教务处为学生办理学期注册手续;没有办理学期注册的学生不能选课;
学期末,学院工作人员负责录入学生的成绩。
【实验目的】
1) 通过本实验使学生掌握选课管理系统的测试。
2) 学生在实验过程中熟练掌握测试方法。
【实验步骤】
根据实验3编写的选课管理系统,设计测试用例并实现测试。
【实验结果】
测试用例
主要功能测试结果:
2023年6月21日发(作者:)
数据库报告记录
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
企业实训实习报告
系别:计算机科学与技术
班级:
姓名:
学号:
成绩:
评语:
指导教师签字: 日期:
数据库应用系统开发
一、 需求分析------大学生选课管理系统
【实验内容】
教务处的管理人员录入全校的课程基本信息和本学期的课程授课教师、地点、时间;
在学生入学的时候,学院的管理人员录入学生基本信息;
学生每学期自己上网登录系统选课,选课成功后信息存入数据库中,学生自己可以查询选课的情况;
学生选课不成功的情况有:
所选课程的先修课还没有记录,系统提示“缺先修课,选课失败”;
本学期所选课程的上课时间有冲突,系统提示“上课时间有冲突,选课失败”;
学生一学期所选课程的学分最多不能超18学分
学生可以注销所选课程。
学院管理员可以查询学生前几学期的选课信息、可以查询课程基本信息、学生基本信息;
当学生退学时,由教务处的管理人注销学生基本信息;
如果开课之后,学生要求退课,则由教务处的工作人员为学生注销所选课程;
允许学生休学,教务处为休学的退学做学籍冻结处理;复学后为其办理解冻处理;
每学期教务处为学生办理学期注册手续;没有办理学期注册的学生不能选课;
学期末,学院工作人员负责录入学生的成绩。
【实验目的】
通过本实验使学生掌握结构化需求分析的方法、过程和相应的文档内容与格式。特别是熟悉数据流程图、数据字典和IPO图三个核心技术的应用。
【实验步骤】
1) 结合实验内容说明,对现有的学生选课系统进行必要的调研,了解基本的工作流程、软件功能、数据需求和界面风格。
2) 分析实验内容说明和调研结果,画出系统的数据流程图。
3) 编写系统的数据字典。
4) 用IPO图描述系统的处理过程。
5) 画出系统ER图。
【实验结果】
数据流程图:
数据字典:
学生基本信息
字段名
StudentID
Name
数数数是键
据名称 据长度 据类型 否为主学号
姓名
50字节
50字节
nvarchar
nvarchar
否
是
Sex
Age
Academy
Major
Class
Enrollment
Address
beizhu
State
RoleID
用户信息
性别
年龄
学院
专业
班级
入学时间
家庭地址
备注
状态
角色号
数50字节
4字节
50字节
50字节
50字节
50字节
50字节
50字节
4字节
4字节
数nvarchar
int
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
int
int
否
否
否
否
否
否
否
否
否
否
字
数是 段名
userID
Password
Role
Academy
Time
课程基本信息
据名称 据长度 据类型 否为主键
用户名
密码
角色
角色号
登陆时间
字段名
据名称
CourseID
程号
50字节
50字节
50字节
4字节
50字节
数据长度
课0字节
学5nva否
5nvarchar
nvarchar
数数否为主键
是
是否
nvarchar
nvarchar
nvarchar
int 否
否
否
是
据类型
CourseName
号 0字节
Classify
程分类
Credit
分
Major
学字节
专业 0字节
Academy 学院 0字节
Advanced_coursename 修课程名
Advanced_course
修
rchar
5nvarchar
否 课0字节
4int 否
5nvarchar
否
5nvarchar
否
先0字节
5nvarchar
否
先0字5nvarchar
否 课程号
授课信息
节
字段名 数数数是键
据名称 据长度 据类型 否为主CourseID
CourseName
Schooltime
Credit
Address
Start_end
Teacher
Class
课程号
课程名称
上课时间
学分
上课地点
起止时间
授课老师
上50字节
50字节
50字节
4字节
50字节
50字节
50字节
50nvarchar
nvarchar
nvarchar
int
nvarchar
nvarchar
nvarchar
nva是
否
否
否
否
否
否
否 课班级
Sum
Renshu
Sel_count
选课信息
字节
4字节
4字节
4字节
数rchar
int
int
int
否
否
否
课程容量
上课人数
选课人数
数字段名 数是键
据名称 据长度 据类型 否为主StudentID
CourseID
CourseName
StateCourse
Year
Season
学号
课程号
课程名称
中签状态
年份
季50字节
50字节
50字节
50字节
4字节
50nvarchar
nvarchar
nvarchar
nvarchar
int
nva是
是
否
否
是
否 别
Classify
成绩信息
字节
50字节
数rchar
nvarchar
数是键
否 课程分类
数字段名
据名称 据长度 据类型 否为主StudentID
CourseID
CourseName
Grade
Credit
TeacherName
Year
Season
学号
课程号
课分数
学分
授年份
季50字节
50字节
504字节
4字节
504字节
50nvarchar
nvarchar
nvarchar
int
int
nvarchar
int
nva是
是
否
否
否
否
否
否
程名称 字节
课老师 字节 别
学生注册信息
字节
数rchar
数是键
字段名
StudentID
Name
Year
Season
Register
教师信息
数据名称 据长度 据类型 否为主学号
姓名
年份
季别
注册
数50字节
50字节
4字节
4字节
4字节
数数是键
nvarchar
int 否
是
nvarchar
nvarchar
int 是
否
是
字段名
TeacherID
Name
据名称 据长度 据类型 否为主教师编号
姓名
50字节
50字节
nvarchar
nvarchar
否
是 Sex
Title
Academy
Position
Birth
jiguan
beizhu
性别
职称
所属学院
职务
出生日期
籍贯
备注
50字节
50字节
50字节
50字节
50字节
50字节
50字节
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
nvarchar
否
否
否
否
否
否
否
系统ER图:
二、 系统设计------选课管理系统设计
【实验内容】
1) 对实验1的结果进行概要设计和详细设计,画出功能模块图。
2) 对系统的主界面、课程基本信息录入界面、学生选课操作界面、学生选课结果浏览界面进行设计。
3) 进行数据库设计。得到数据库的逻辑结构图。
【实验结果】
系统功能模块图
a) 顶层模块结构图
b) 详细模块结构图
用例图
a) 学生用例图
b) 学院管理员用例图
c) 教务处管理员用例图
数据库设计(包括表名、字段名、字段类型、字段大小、字段说明)
a) 用户表(Account)
b) 课程基本信息表(Course_basic_info)
c) 授课信息表(course_info)
d) 学生成绩表(Score)
e) 学生选课表(Select_course)
f) 学生基本信息表(Student)
g) 学生注册信息表(Student_record)
h) 教师基本信息表(Teacher_info)
三、 选课管理系统编程
【实验内容】
教务处的管理人员录入全校的课程基本信息和本学期的课程授课教师、地点、时间;
在学生入学的时候,学院的管理人员录入学生基本信息;
学生每学期自己上网登录系统选课,选课成功后信息存入数据库中,学生自己可以查询选课的情况;
学生选课不成功的情况有:
所选课程的先修课还没有记录,系统提示“缺先修课,选课失败”;
本学期所选课程的上课时间有冲突,系统提示“上课时间有冲突,选课失败”;
学生一学期所选课程的学分最多不能超18学分
学生可以注销所选课程。
学院管理员可以查询学生前几学期的选课信息、可以查询课程基本信息、学生基本信息;
当学生退学时,由教务处的管理人注销学生基本信息;
如果开课之后,学生要求退课,则由教务处的工作人员为学生注销所选课程;
允许学生休学,教务处为休学的退学做学籍冻结处理;复学后为其办理解冻处理;
每学期教务处为学生办理学期注册手续;没有办理学期注册的学生不能选课;
学期末,学院工作人员负责录入学生的成绩。
【实验目的】
1) 通过本实验使学生通过掌握选课管理系统的实现。
【实验步骤】
根据实验1和实验2对选课管理系统的了解,选用C#编程语言实现本系统,并对编码通过注释进行必要的说明。
【实验结果】
a) 登陆界面
b) 学生操作界面
c) 选课查看
d) 课程信息修改
e) 学生信息修改
f) 选课抽签
g) 学生信息录入
h) 查询选课信息
i) 学生注册
j) 休学、复学
主要功能源代码
登录界面:
private void button1_Click(object sender, EventArgs e)
{
string userid = ;//用户名
string pwd = ; //密码
string un= ;
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection(conn);//创建数据库连接
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
string str_sql = "select count(*) from u where userid=@userid and
password=@password and userno=@un";//执行的命令Sql
dText = str_sql;//设置命令文本
(new SqlParameter("@userid", userid));
(new SqlParameter("@password", pwd));
(new SqlParameter("@un",un));
int count = 32(eScalar());//执行命令
if (count>0)
{
if (("学生"))
{
name = userid;
//用户名等于输入的用户名,密码等于输入的密码的记录条数大于0, 表示登陆成功,显示主界面
Form2 f2 = new Form2();
();
}
if (("院管理员"))
{
//用户名等于输入的用户名,密码等于输入的密码的记录条数大于0,表示登陆成功,显示主界面
Form3 f3 = new Form3();
();
}
if (("教务处管理员"))
{
//用户名等于输入的用户名,密码等于输入的密码的记录条数大于0,表示登陆成功,显示主界面
Form4 f4 = new Form4();
();
}
}
else
{
("用户名或者密码输入错误");
}
学生选课:
private void button4_Click(object sender, EventArgs e)
{
string cname = ;
string n = ;
string semester = ;
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection(conn);//创建数据库连接
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
string str_sql="select sout from s where sno=@n";
(new SqlParameter("@n", n));
dText = str_sql;
SqlDataReader d = null;
d = eReader();
if (())
{
int sout = 32(d["sout"].ToString());
if (sout == 0)
{
();
();
str_sql = "select count(*) from course where cname=@cname and
(cfirst='' or cfirst in (select cno from Sc where sno=@n and grade!=0))";//执行的命令Sql
dText = str_sql;//设置命令文本
(new SqlParameter("@cname", cname));
int count= 32(eScalar());//执行命令
if (count > 0)
{
();
();
str_sql = "select count(*) from c where cname=@cname and ctime
not in (select ctime from sc,c where sno=@n and = and grade=0)";
dText = str_sql;//设置命令文本
count = 32(eScalar());//执行命令
if (count > 0)
{
();
();
str_sql = "select sum(ccredit) from c where cno in(select
cno from sc where grade=0 and sno=@n)";
dText = str_sql;//设置命令文本
int sum = 32(eScalar());//执行命令
();
();
str_sql = "select ccredit,cno from c where cname=@cname";
dText = str_sql;//设置命令文本
SqlDataReader dr = null;
dr = eReader();
if (())
{
int a = 0;
a = 32(dr["ccredit"].ToString());
string cno = dr["cno"].ToString();
int c = sum + a;
if (c < 18)
{
();
();
str_sql = "insert into sc values('" + n + "','"
+ cno + "','"
+ null + "','"
+ semester + "') ";
dText = str_sql;//设置命令文本
eNonQuery();//执行命令
("选课成功!");
}
else ("本学期所选课程学分已满18,请下学期再选!");
}
}
else ("与已有课程时间冲突!");
}
else
{
("缺少先选课!");
}
}
else ("该学生尚未注册,不能选课!");
}
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
查询选课:
private void button2_Click(object sender, EventArgs e)
{
();
string semester = ;
string n = ;
string str_sql;
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
SqlConnection connection = new SqlConnection(conn);//创建数据库连接
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
if (("所有选课"))
{
str_sql = "select ,Cname,Cteacher,Ccredit from sc,c where
=@n and =";//执行的命令Sql
}
else
{
str_sql = "select ,Cname,Cteacher,Ccredit from sc,c where
=@n and semester=@semester and =";//执行的命令Sql
}
(new SqlParameter("@n", n));
(new SqlParameter("@semester", semester));
dText = str_sql;
tion = connection;
SqlDataReader str = null;
str = eReader();
int count = 0;
while (())
{
();
[count].Cells[0].Value =
str["Cno"].ToString();
[count].Cells[1].Value =
str["Cname"].ToString();
[count].Cells[2].Value =
str["Cteacher"].ToString();
[count].Cells[3].Value =
str["Ccredit"].ToString();
count++;
}
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
录入学生信息:
private void button1_Click(object sender, EventArgs e)
{
string sno = ;//学号
string sname = ; //姓名
string ssex = ;//性别
string sclass = ; //班级
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection();//创建数据库连接
tionString = conn;
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据库连接
string str_sql1 = "select count(*) from s where sno=@sno";
dText = str_sql1;//设置命令文本
(new SqlParameter("@sno", sno));
int count = 32(eScalar());//执行命令
if (count < 1)
{
string a, b, c;
a = "";
b = "";
c = "";
string str_sql = "insert into S values('" + sno + "','"
+ sname + "','"
+ ssex + "','"
+ sclass + "','"
+ a + "','"
+ b + "','"
+ c + "')"; //执行的命令S
(str_sql);
dText = str_sql;//设置命令文本
eNonQuery();//执行命令
("录入成功");
}
else ("学号已存在,请输入正确学号!");
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
查询学生选课:
private void button2_Click(object sender, EventArgs e)
{
();
string sno = ;
string semester = ;
string conn2 = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
SqlConnection connection2 = new SqlConnection(conn2);//创建数据库连接
try
{
();
SqlCommand comm2 = new SqlCommand();//创建数据库命令
tion = connection2;//设置命令的数据库连接
string str_sql2;
if (("所有选课"))
{
str_sql2 = "select Cname,Cteacher,Cplace,Ctime,Ccredit from sc,c where
=@sno and =";//执行的命令Sql
}
else
{
str_sql2 = "select Cname,Cteacher,Cplace,Ctime,Ccredit from sc,c where
=@sno and semester=@semester and =";//执行的命令Sql
}
(new SqlParameter("@sno", sno));
(new SqlParameter("@semester", semester));
dText = str_sql2;
tion = connection2;
SqlDataReader str2 = null;
str2 = eReader();
int count = 0;
while (())
{
();
[count].Cells[0].Value =
str2["Cname"].ToString();
[count].Cells[1].Value =
str2["Cteacher"].ToString();
[count].Cells[2].Value =
str2["Cplace"].ToString();
[count].Cells[3].Value =
str2["Ctime"].ToString();
[count].Cells[4].Value =
str2["Ccredit"].ToString();
count++;
}
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
录入课程信息:
private void button5_Click(object sender, EventArgs e)
{
string cno = ;//课程号
string cname = ; //课程名
string cteacher = ; //教师
string ctime = ;
string cplace = ;
string ccredit = (string);//学分
string conn = "Data Source= .SQLEXPRESS;Initial Catalog=XKXT; User ID=sa;
pwd=lfj123456";
//Data Source 服务器名 ;Initial Catalog 数据库名; User ID 用户名; pwd 密码
SqlConnection connection = new SqlConnection();//创建数据库连接
tionString = conn;
try
{
();
SqlCommand comm = new SqlCommand();//创建数据库命令
tion = connection;//设置命令的数据
string str_sql1 = "select count(*) from c where cteacher=@cteacher and
cno=@cno and cname=@cname";
dText = str_sql1;//设置命令文本
(new SqlParameter("@cteacher", cteacher));
(new SqlParameter("@cno", cno));
(new SqlParameter("@cname", cname));
int count = 32(eScalar());//执行命令
if (count <1)
{
string str_sql2= "select count(*) from c where cteacher=@cteacher and
ctime=@ctime and cplace!=@cplace";
(new SqlParameter("@ctime", ctime));
(new SqlParameter("@cplace", cplace));
dText = str_sql2;//设置命令文本
count = 32(eScalar());
if (count < 1)
{
string str_sql3 = "insert into C values('" + cno + "','"
+ cname + "','"
+ cteacher + "','"
+ ctime + "','"
+ cplace + "','"
+ ccredit + "')"; //执行的命令S
(cno + "," + cname + "," + cteacher + "," + cplace
+ "," + ctime + "," + ccredit);
dText = str_sql3;//设置命令文本
eNonQuery();//执行命令
("录入成功");
}
else ("教师时间冲突!");
}
else ("与已有课程存在冲突!");
}
catch (SqlException ex)
{
(e);
}
finally
{
();//关闭数据库连接
}
}
四、选课管理系统测试
【实验内容】
教务处的管理人员录入全校的课程基本信息和本学期的课程授课教师、地点、时间;
在学生入学的时候,学院的管理人员录入学生基本信息;
学生每学期自己上网登录系统选课,选课成功后信息存入数据库中,学生自己可以查询选课的情况;
学生选课不成功的情况有:
所选课程的先修课还没有记录,系统提示“缺先修课,选课失败”;
本学期所选课程的上课时间有冲突,系统提示“上课时间有冲突,选课失败”;
学生一学期所选课程的学分最多不能超18学分
学生可以注销所选课程。
学院管理员可以查询学生前几学期的选课信息、可以查询课程基本信息、学生基本信息;
当学生退学时,由教务处的管理人注销学生基本信息;
如果开课之后,学生要求退课,则由教务处的工作人员为学生注销所选课程;
允许学生休学,教务处为休学的退学做学籍冻结处理;复学后为其办理解冻处理;
每学期教务处为学生办理学期注册手续;没有办理学期注册的学生不能选课;
学期末,学院工作人员负责录入学生的成绩。
【实验目的】
1) 通过本实验使学生掌握选课管理系统的测试。
2) 学生在实验过程中熟练掌握测试方法。
【实验步骤】
根据实验3编写的选课管理系统,设计测试用例并实现测试。
【实验结果】
测试用例
主要功能测试结果:
发布评论