c#学生课程管理系统.docx
《c#学生课程管理系统.docx》由会员分享,可在线阅读,更多相关《c#学生课程管理系统.docx(41页珍藏版)》请在冰点文库上搜索。
![c#学生课程管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/19d63f18-d4e0-4978-b273-f6c263e7ce76/19d63f18-d4e0-4978-b273-f6c263e7ce761.gif)
c#学生课程管理系统
《面向对象程序设计》综合作业报告
专业班级:
类19-7班姓名:
刘一一学号:
190702140509
时间:
2020.06.20
一、作业题目要求:
基于面向对象的程序开发思想,结合C#窗体应用程序开发步骤,采用ADO.NET访问数据库相应组件,构建完成一套学生成绩系统。
学生成绩系统是学校教务系统中不可缺少的一个子系统,它涉及到学生、课程等信息的结合。
本套学生成绩系统主要包括以下四个功能模块,具体功能要求如下:
1、登录模块
登录模块提供用户登录界面,用户输入正确的用户名和密码后,则可进入系统主窗口(即导航页面),从而可以选择进入相应的子系统。
2、学生信息模块
学生信息模块主要用户管理学生的基本信息,包括学号、姓名、性别、年龄和所在系,能对学生信息进行添加、删除和修改等操作。
3、课程信息模块
课程信息模块主要用于管理课程信息,包括课程号、课程名、学分和学时,能对课程信息进行添加、删除和修改等操作。
4、成绩信息模块
成绩信息模块主要用于管理学生成绩的录入及查询。
二、数据库设计:
本节根据前面对学生成绩系统的分析,介绍创建SqlServer数据库、数据表以及数据表之间的关系的方法和步骤。
2.1数据表结构
基于SQLServer2008数据库管理系统构建数据库,根据作业题目要求共设计实现了四张表,分别是系统用户表、学生信息表、课程信息表以及成绩信息表。
首先,我们登录数据库。
如图2-1
图2-1
其次,在数据库中建表,如图2-2
图2-2
1、系统用户表
系统用户表“tbl_User”用于存放系统用户的相关数据。
其结构如图2.3所示。
图2-4
2、学生信息表
学生信息表“tbl_Student”结构如图2-4所示。
图2-4
3、课程信息表
课程信息表“tbl_Course”结构如图2-5所示。
图2-5
4、成绩信息表
成绩信息表“tbl_SC”结构如2.4所示。
图2-6
三、公共类设计
考虑到系统的各个模块(登录、学生信息管理、课程信息管理、成绩信息管理)都需要访问数据库,因此最好的方法是编写一些访问数据库的方法,如返回数据集的公共查询方法,执行数据操作的公共方法,并把它们放在一个公共的类(DataBase)中,然后在各模块中调用这些方法来实现对数据库的访问。
同样,在用户登录时,可能需要记录一些关于用户的信息,例如用户名、用户权限等,因此也需要使用到一些公共的静态变量,把这些变量放置在一个名为“ClassShared”的类中。
3.1添加DataBase公共类
首先为系统添加一个名为“DataBase”的公共类,用于存放访问数据库的公共方法。
添加公共类的方法和步骤如下:
(1)选择【项目】->【添加类】菜单项,将弹出【添加新项】对话框,保留默认的选择,在“名称”文本框中输入“DataBase”,如图3-1所示。
图3-1
(2)单击【添加】按钮,则类“DataBase”已经被添加到项目中,并自动切换到该类的代码窗口,如图3-2所示。
图3-2
(3)从图1-2可以看到,“DataBase”类默认的访问修饰符为空,而该类应该是公共的,因此需要给其添加访问修饰符“Public”,如图1-3所示。
图3-3
3.2添加LoginUser公共类
类似于添加DataBase公共类那样,为项目添加一个名为“LoginUser”的公共类,用来存放一些公共的静态变量,以在窗体之间传递数据。
添加的“LoginUser”公共类代码窗口如图3-4所示。
图3-4“ClassShared”类的代码窗口
3.3编写公共方法
代码如图所示:
四、系统窗体设计及功能代码编写
4.1主窗体设计
1选择启动项[BOOKUITSXS]单击鼠标右键,[添加]——[添加新项],选择[windows窗体],在[新建项目]对话框的[名称]文本框中,输入项目名称“frmMain”,单击[确定]按钮进行项目文件保存路径的选择,也可以直接输入项目文件保存的路径,如下图4-1所示:
图4-1
2在主窗体中添加Label、GroupBox和Button等控件,并进行修改调整各个控件的大小位置,最终效果如下图4-2所示:
图4-2
4.2登录窗体设计
1、选择启动项[BOOKUITSXS]单击鼠标右键,[添加]——[添加新项],选择[windows窗体],在[新建项目]对话框的[名称]文本框中,输入项目名称“Login.cs”,单击[确定]按钮进行项目文件保存路径的选择,也可以直接输入项目文件保存的路径,如下图4-3:
图4-3
2、默认选中[为解决方案创建目录]。
3、在frmUserLogin.cs窗体上添加标签、文本框及按钮,并对窗体属性进行修改,最终效果如下图4-4:
图4-4
4.3学生信息管理窗体设计1、添加Windows窗体:
在BOOKUITSXS类库中添加一个新的Windows窗体frmStudent.cs。
2、设计窗体外观
在窗体添加控件,调整各个控件的大小和位置,设计窗体的属性;设计效果如图4-5
图4-5
4.4课程信息管理窗体设计
1、添加Windows窗体:
在BOOKUITSXS类库中添加一个新的Windows窗体frmCourse.cs。
2、设计窗体外观
在窗体添加控件,调整各个控件的大小和位置,设计窗体的属性;设计效果如图4-6所示。
图4-6
4.4成绩管理窗体设计
1、添加Windows窗体:
所用部分控件
在BOOKUITSXS类库中添加一个新的Windows窗体frmSC.cs。
2、设计窗体外观
在窗体添加控件,调整各个控件的大小和位置,设计窗体的属性;设计效果如图4-7所示
图4-7
4.5代码设计
4.5.1登录代码
namespace学生选课系统
{
publicpartialclassLogin:
Form
{
publicLogin()
{
InitializeComponent();
}
privatevoidbtnOK_Click(objectsender,EventArgse)
{
try
{
DataSetds=newDataSet();
DataBasedb=newDataBase();
stringsqlStr=string.Format("SelectuserPassword,userPurviewfromtbl_UserwhereUserName='{0}'",txtUserName.Text.Trim());
ds=db.GetDataFromDB(sqlStr);
if(ds.Tables[0].Rows[0].ItemArray[0].ToString()==txtUserPassword.Text.Trim())//判断输入的账户名密码是否相同
{
frmMainob_FrmMain=newfrmMain();
LoginUser._userName=this.txtUserName.Text.Trim();
LoginUser._userPassword=ds.Tables[0].Rows[0]["userPassword"].ToString();
LoginUser._userPurview=ds.Tables[0].Rows[0]["userPurview"].ToString();
ob_FrmMain.Show();
this.Hide();
}
Else//如果不相同,则提示错误
{
MessageBox.Show("用户名或密码错误,请重新输入!
");
txtUserName.Text="";
txtUserPassword.Text="";
txtUserName.Focus();
}
}
catch
{
MessageBox.Show("用户名或者密码错误","错误");
}
}
privatevoidbtnClose_Click(objectsender,EventArgse)
{
Application.Exit();
}
privatevoidtxtUserPassword_KeyDown(objectsender,KeyEventArgse)
{
if(e.KeyCode==Keys.Enter)
{
btnOK_Click(sender,e);
}
}
}
}
4.5.2主窗体代码
namespace学生选课系统
{
publicpartialclassLogin:
Form
{
publicLogin()
{
InitializeComponent();
}
privatevoidbtnOK_Click(objectsender,EventArgse)
{
try
{
DataSetds=newDataSet();
DataBasedb=newDataBase();
//stringsqlStr="SelectuserPassword,userPurviewfromtbl_UserwhereUserName='"+txtUserName.Text.Trim()+"'";
stringsqlStr=string.Format("SelectuserPassword,userPurviewfromtbl_UserwhereUserName='{0}'",txtUserName.Text.Trim());
ds=db.GetDataFromDB(sqlStr);
if(ds.Tables[0].Rows[0].ItemArray[0].ToString()==txtUserPassword.Text.Trim())
{
frmMainob_FrmMain=newfrmMain();
//ClassShared.userInfo[0]=txtUserName.Text.Trim();
//ClassShared.userInfo[1]=ds.Tables[0].Rows[0].ItemArray[1].ToString();
LoginUser._userName=this.txtUserName.Text.Trim();
LoginUser._userPassword=ds.Tables[0].Rows[0]["userPassword"].ToString();
LoginUser._userPurview=ds.Tables[0].Rows[0]["userPurview"].ToString();
ob_FrmMain.Show();
this.Hide();
}
else
{
MessageBox.Show("用户名或密码错误,请重新输入!
");
txtUserName.Text="";
txtUserPassword.Text="";
txtUserName.Focus();
}
}
catch
{
MessageBox.Show("用户名或者密码错误","错误");
}
}
privatevoidbtnClose_Click(objectsender,EventArgse)
{
Application.Exit();
}
privatevoidtxtUserPassword_KeyDown(objectsender,KeyEventArgse)
{
if(e.KeyCode==Keys.Enter)
{
btnOK_Click(sender,e);
}
}
}
}
4.5.3学生信息管理代码
namespace学生选课系统
{
publicpartialclassfrmStudent:
Form
{
publicfrmStudent()
{
InitializeComponent();
}
voidobjOpen()//设置标签为可输入
{
txtNo.Enabled=true;
txtName.Enabled=true;
txtAge.Enabled=true;
cmbSex.Enabled=true;
txtDept.Enabled=true;
txtNo.Focus();
}
voidobjClose()//设置标签为不可输入
{
txtNo.Enabled=false;
txtName.Enabled=false;
txtAge.Enabled=false;
cmbSex.Enabled=false;
txtDept.Enabled=false;
}
voidClear()//清除标签中输入的内容
{
txtNo.Text="";
txtName.Text="";
txtAge.Text="";
cmbSex.SelectedIndex=-1;
txtDept.Text="";
}
voidRefreshData()
{
stringcomStr;
DataBasedb=newDataBase();
DataSetds=newDataSet();
comStr="select*fromtbl_Student";
ds=db.GetDataFromDB(comStr);
if(ds==null)
{
MessageBox.Show("没有任何学生记录!
");
}
else
{
dgrdvStudent.DataSource=ds.Tables[0];
SetHeaderText();
}
}
voidSetHeaderText()//将DataGridView数据控件(dgrdvStudent)中显示的学生信息具有更好的表达效果,将各列的标题改成相应的中文。
因此编写SetHeaderText()方法,然后在修改dgrdvStudent控件的DataSource属性后立即调用此方法,已达到修改列标题的效果
{
dgrdvStudent.Columns[0].HeaderText="学号";
dgrdvStudent.Columns[1].HeaderText="姓名";
dgrdvStudent.Columns[2].HeaderText="性别";
dgrdvStudent.Columns[3].HeaderText="年龄";
dgrdvStudent.Columns[4].HeaderText="所在系";
}
privatevoidfrmStudent_Load(objectsender,EventArgse)
{
objClose();
RefreshData();
}
privatevoiddgrdvStudent_RowHeaderMouseClick(objectsender,DataGridViewCellMouseEventArgse)//选择不同的学生记录时,将学生信息显示在相应的文本框中
{
intn=this.dgrdvStudent.CurrentCell.RowIndex;
txtNo.Text=this.dgrdvStudent[0,n].Value.ToString();
txtName.Text=this.dgrdvStudent[1,n].Value.ToString();
cmbSex.SelectedItem=this.dgrdvStudent[2,n].Value.ToString();
txtAge.Text=this.dgrdvStudent[3,n].Value.ToString();
txtDept.Text=this.dgrdvStudent[4,n].Value.ToString();
}
privatevoidbtnAdd_Click(objectsender,EventArgse)//添加学生信息
{
try
{
if(btnAdd.Text.Trim()=="添加")
{
btnAdd.Text="确定";
objOpen();
Clear();
btnUpdate.Enabled=false;
btnDelete.Enabled=false;
btnClose.Enabled=false;
dgrdvStudent.Enabled=false;
}
else
{
btnAdd.Text="添加";
if(txtNo.Text.Trim()!
=null&&txtName.Text.Trim()!
=null)//向数据库中注入学生信息
{
stringsqlStr;
sqlStr="insertintotbl_Studentvalues('"+txtNo.Text.Trim()+"','"+txtName.Text.Trim()+"','"+cmbSex.Text.Trim()+"','"+txtAge.Text.Trim()+"','"+txtDept.Text.Trim()+"')";
DataBasedb=newDataBase();
boolb;
b=db.UpdateDB(sqlStr);
if(b==true)
{
if(MessageBox.Show("添加成功!
继续添加吗?
","添加",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
Clear();
objOpen();
btnAdd.Text="确定";
}
else
{
objClose();
btnClose.Enabled=true;
btnDelete.Enabled=true;
btnUpdate.Enabled=true;
dgrdvStudent.Enabled=true;
}
}
else
{
return;
}
}
else
{
MessageBox.Show("学号与姓名不能为空!
");
txtNo.Focus();
btnAdd.Text="确定";
}
RefreshData();
txtNo.SelectAll();
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
Clear();
objClose();
dgrdvStudent.Enabled=false;
}
}
privatevoidbtnUpdate_Click(objectsender,EventArgse)//修改学生信息
{
try
{
if(btnUpdate.Text.Trim()=="修改")
{
btnUpdate.Text="确定";
btnAdd.Enabled=false;
btnDelete.Enabled=false;
btnClose.Enabled=false;
txtName.Enabled=true;
txtAge.Enabled=true;
cmbSex.Enabled=true;
txtDept.Enabled=true;
txtName.Focus();
}
else
{
btnUpdate.Text="修改";
btnAdd.Enabled=true;
btnDelete.Enabled=true;
btnClose.Enabled=true;
objClose();
stringsqlStr;
sqlStr="Updatetbl_StudentsetSname='"+txtName.Text.Trim()+"',Ssex='"+cmbSex.Text.Trim()+"',Sage='"+txtAge.Text.Trim()+"',Sdept='"+txtDept.Text.Trim()+"'whereSno='"+txtNo.Text.Trim()+"'";
DataBasedb=newDataBase();
db.UpdateDB(sqlStr);
RefreshData();
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidbtnDelete_Click(objectsender,EventArgse)//删除学生信息
{
try
{
if(txtNo.Text.Trim()!
="")
{
if(MessageBox.Show("确定要删除学生吗?
","删除",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes)
{
stringsqlStr;
sqlStr="deletefromtbl_StudentwhereSno='"+txtNo.Text.Trim()+"'";
DataBasedb=newDataBase();
db.UpdateDB(sqlStr);
RefreshData();
}
}
else
{
MessageBox.Show("没有可删除的记录!
","提示");
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidbtnClose_Click(objectsender,EventArgse)
{
this.Hide();
}
}
}
4.5.3课程信息管理代码
voidSetHeaderText()//将DataGridView数据控件(dgrdvStudent)中显