net框架选修课成绩管理程序.docx
《net框架选修课成绩管理程序.docx》由会员分享,可在线阅读,更多相关《net框架选修课成绩管理程序.docx(20页珍藏版)》请在冰豆网上搜索。
![net框架选修课成绩管理程序.docx](https://file1.bdocx.com/fileroot1/2023-2/25/d9ca863c-1396-4776-8f86-76afa05909df/d9ca863c-1396-4776-8f86-76afa05909df1.gif)
net框架选修课成绩管理程序
实验报告
课程名称:
.NET框架
实验项目:
选修课成绩管理程序
专业班级:
计算机科学与技术1301班
姓名:
学号:
实验室号:
信息楼205实验组号:
实验时间:
2016.4.21批阅时间:
指导教师:
成绩:
沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
学号:
姓名:
实验名称:
个人成绩档案管理程序
1.实验目的:
本实验的目的是通过实践教学使学生加深对.NET技术框架的理解,提高对C#语言和开发工具VisualStudio.NET的应用熟练程度,强化对面向对象编程、Windows程序设计和数据库编程等方面的能力训练。
2.实验内容:
应用VisualStudio.NET和C#语言开发选修课成绩管理软件,实现功能包括:
按课程添加成绩;按课程产生成绩分析结果;按学号查询学生成绩;按班级统计选修课学习情况。
具体内容详见所给出的示例程序。
3.实验方案(程序设计说明)
1.指导教师提供选课数据库XKDB.MDB,内容包括课程信息(Couse表)、学生信息(Student表)和选课表(Elective表)。
2.利用数据绑定技术实现数据集的显示。
3.利用ADO.NET对象模型完成对数据库的联机和脱机数据处理,实现数据更新、统计查询等功能。
4.实验步骤或程序(经调试后正确的源程序)
见附件
5.程序运行结果
见附件
6.出现的问题及解决方法
问题1:
通过实体框架上下文实例操作数据的时候使用SaveChanges方法将更改保存到数据库的时候不能将数据提交到数据库。
解决方法:
创建SQL语句直接将更新的数据提交到数据库,但是这个方法增加了资源的消耗
问题2:
程序DataGrid控件选定值之后在更新列表时程序报错,提示列表返回的数据为空导致程序出错。
解决方法:
在程序中添加判断,当程序中的item值不为空时才执行后续的赋值语句,否则什么都不执行。
附件A沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
学号:
姓名:
一、系统登录模块
1.1功能简述
该模块主要用于登陆系统。
1.2程序实现
1.2.1窗体初始化事件的处理
(1)程序作用:
为用户提供登陆界面,用户可以输入账号密码以便登陆系统。
(2)实现代码:
Title="登陆界面"Height="350"Width="525">
"Margin="163,134,294,142"/>
"Margin="163,184,306,89"/>
Name="textBoxUserName"Margin="226,134,160,154"/>
Name="password"Margin="226,184,160,103"/>
Name="btnOK"Content="登录"Margin="139,257,306,28"Click="btnOK_Click"/>
Name="btnCancel"Content="取消"Margin="319,257,126,28"Click="btnCancel_Click"/>
1.2.2“登陆”按钮的点击事件处理
(1)作用:
将用户输入的内容与数据库的内容相比较,实现用户登录系统的功能,验证用户输入的账号密码,并给用户相应的提示。
(2)实现代码:
privatevoidbtnOK_Click(objectsender,RoutedEventArgse)
{
if(VI())
{
stringsql=string.Format("SELECT*FROMuserxWHEREname='{0}'ANDpwd='{1}'",textBoxUserName.Text,password.Password);
SqlCommandmycom=newSqlCommand(sql,conx.con);
conx.con.Open();
SqlDataReadermdr=mycom.ExecuteReader();
if(mdr.HasRows)
{
Window1a=newWindow1();
a.Show();
this.Close();
conx.con.Close();
}
else
{
MessageBox.Show("错误!
请检查!
","输入提示");
conx.con.Close();
}
}
}
1.2.3“取消”按钮的点击事件的处理
(1)作用:
用来退出系统。
(2)实现代码:
privatevoidbtnCancel_Click(objectsender,RoutedEventArgse)
{
this.Close();
}
1.3运行效果
图1.3.1窗体初始化功能的执行效果
图1.3.2登陆提示功能的执行效果
图1.3.3登陆成功后的执行效果
二、主界面模块
2.1功能简述
(1)作用:
提供选择的功能,用户可以选择成绩管理来录入成绩,也可以选择成绩分析以及学习成绩查询。
(2)实现代码:
2.2程序实现
2.2.1窗体初始化事件的处理
(1)程序作用:
显示窗体,为用户提供界面。
(2)实现代码:
publicWindow1()
{
InitializeComponent();
}
2.2.2“成绩管理”按钮的点击事件处理
(1)作用:
进入到成绩管理界面。
(2)实现代码:
privatevoidTestAbout_Click(objectsender,RoutedEventArgse)
{
Window2a=newWindow2();
a.Show();
//this.Close();
}
2.2.3“成绩分析”按钮的点击事件处理
(1)作用:
进入到成绩分析界面。
(2)实现代码:
privatevoidTestAbout_Click(objectsender,RoutedEventArgse)
{
Window3a=newWindow3();
a.Show();
//this.Close();
}
2.2.4“学习成绩查询”按钮的点击事件处理
(1)作用:
进入到成绩查询界面。
(2)实现代码:
privatevoidTestAbout_Click(objectsender,RoutedEventArgse)
{
Window4a=newWindow4();
a.Show();
//this.Close();
}
2.3运行效果
图2.3.1主界面功能的执行效果
三、成绩录入模块
3.1功能简述
(1)作用:
为用户提供成绩录入的功能,以及查看录入情况的功能。
(2)实现代码:
Title="成绩管理"Height="482.089"Width="764.179">
Key="ColumnHeaderStyle1"TargetType="{x:
TypeDataGridColumnHeader}">
……
……
……
Key="BirthDateTemplate">
Text="{BindingBirthDate,StringFormat=\{0:
yyyy-MM-dd\}}"/>
Key="PhotoTemplate">
Key="RowStyle1"TargetType="{x:
TypeDataGridRow}">
Name="comboBox1"Margin="103,0,482,0"
Grid.Column="0"VerticalAlignment="Top">
……
Name="dataGrid1"AutoGenerateColumns="False"SelectedCellsChanged="dataGridcar_SelectedCellsChanged"
Background="#FFDDFBF9"
……
……
Binding="{Bindingcj}"/>
Name="TextBox"HorizontalAlignment="Left"Height="23"TextWrapping="Wrap"VerticalAlignment="Top"Width="120"Margin="457,57,0,0"/>
……
Name="TextBox1"HorizontalAlignment="Left"Height="23"TextWrapping="Wrap"VerticalAlignment="Top"Width="120"Margin="457,95,0,0"/>
……
3.2程序实现
3.2.1窗体初始化事件的处理
(1)程序作用:
显示窗体,为用户提供界面。
(2)实现代码:
publicWindow2()
{
InitializeComponent();
}
3.2.2“加载数据”按钮的点击事件处理
(1)作用:
加载所选课程的人员信息。
(2)实现代码:
privatevoidButton_Click(objectsender,RoutedEventArgse)
{
strings=comboBox1.Text;
string[]kch1=newstring[]{"1001","1002","1003","1004"};
string[]kcm1=newstring[]{"数据结构",".net程序设计","C++程序设计","C语言程序设计"};
for(inti=0;i{
if(kcm1[i]==s)
{
temp=kch1[i];
break;
}
}
using(varcontext=newMyDbEntities1())
{
varq2=fromt1incontext.chengji
wheret1.kch==temp
selectt1;
dataGrid1.ItemsSource=q2.ToList();
}
}
3.2.3“确定”按钮的点击事件处理
(1)作用:
将学生信息录入到数据库。
(2)实现代码:
privatevoidButton_Click1(objectsender,RoutedEventArgse)
{
if(index!
=0)
{
using(varcontext=newMyDbEntities1())
{
floatx=float.Parse(TextBox3.Text);
varq=fromt1incontext.chengji
selectt1;
index=q.Count();
try
{
varq3=fromt1in
(fromtincontext.chengji
wheret.kch==temp
selectt)
wheret1.xh==TextBox.Text
selectt1;
foreach(varvinq3)
{
v.cj=x;
}
inti=context.SaveChanges();
conx.con.Open();
……
conx.con.Close();
}
catch(Exceptionex)
{
MessageBox.Show("修改失败:
"+ex.Message);
}
}
}
else
{
using(varcontext=newMyDbEntities1())
{
x=float.Parse(TextBox3.Text);
varq=fromt1incontext.chengji
selectt1;
index=q.Count();
chengjistudent=newchengji()
{
……
};
……
}
}
}
3.2.4“录入情况”按钮的点击事件处理
(1)作用:
对录入情况进行统计。
(2)实现代码:
privatevoidButton_Click_1(objectsender,RoutedEventArgse)
{
using(varcontext=newMyDbEntities1())
{
varq2=fromt1incontext.chengji
wheret1.kch==temp
selectt1;
varq3=fromt3in
……
selectt3;
varq4=fromt4in
……
selectt4;
intover=q2.Count()-q3.Count()-q4.Count();
MessageBox.Show("报名考生"+q2.Count()+"人\n"+"缺考"+q4.Count()+"人\n"+"以录成绩"+over+"人\n"+"零分或未录入成绩"+q3.Count()+"人","录入情况");
}
}
3.3运行效果
图3.3.1加载数据功能的执行效果
图3.3.2录入情况功能的执行效果
四、成绩分析模块
4.1功能简述
该模块主要用于产生各门选修课的学生成绩分析结果。
4.2程序实现
4.2.1窗体初始化事件的处理
(1)程序作用:
显示成绩分析的结果
(2)实现代码:
publicWindow3()
{
InitializeComponent();
}
4.2.2“成绩分析”按钮的点击事件处理
(1)作用:
用分析课程的成绩信息,例如及格率等信息。
(2)实现代码:
privatevoidButton_Click(objectsender,RoutedEventArgse)
{
nfi.NumberDecimalDigits=2;
stringtemp="";
strings=comboBox1.Text;
string[]kch1=newstring[]{"1001","1002","1003","1004"};
string[]kcm1=newstring[]{"数据结构",".net程序设计","C++程序设计","C语言程序设计"};
for(inti=0;i{
if(kcm1[i]==s)
{
temp=kch1[i];
break;
}
}
using(varcontext=newMyDbEntities1())
{
//统计总人数
varq=fromtincontext.chengji
wheret.kch==temp
selectt;
TextBox.Text=q.Count().ToString();
//统计缺考人数
varq2=fromt2in
……
selectt2;
intqk=q.Count()-q2.Count();
TextBox1.Text=qk.ToString();
//90分以上的
varq3=fromt3in
……
selectt3;
……
TextBox2.Text=q6.Count().ToString();
floatjgl=(float)q6.Count()/q.Count()*100;
TextBox3.Text=jgl.ToString("N",nfi)+"%";
varq7=fromtincontext.chengji
wheret.kch==temp
selectt.cj;
TextBox_Copy10.Text=q7.Max().ToString();
TextBox_Copy11.Text=q7.Min().ToString();
floatpjf=(float)q7.Sum()/q.Count();
TextBox4.Text=pjf.ToString("N",nfi);
……
}
}
4.3运行效果
图4.3.1成绩分析功能的执行效果
五、成绩查询模块
5.1功能简述
该模块主要用于成绩查询。
5.2程序实现
1.2.1窗体初始化事件的处理
(1)程序作用:
为用户提供登陆界面,用户可以输入账号查询成绩。
(2)实现代码:
publicWindow4()
{
InitializeComponent();
}
5.2.2“成绩查询”按钮的点击事件处理
(1)作用:
用户输入学号点击查询后系统查询数据返回到数据库。
(2)实现代码:
privatevoidButton_Click(objectsender,RoutedEventArgse)
{
strings=TextBox.Text;
using(varcontext=newMyDbEntities1())
{
varq2=fromt3incontext.kecheng
fromt2in
(fromt1incontext.chengji
wheret1.xh==