C#程序设计

来源:互联网 发布:catia软件介绍视频 编辑:程序博客网 时间:2024/05/22 05:09

一、 实习目的:

通过C#.net的学习,编写学生成绩管理系统;掌握学生成绩管理系统的需求分析、系统设计、代码编写和测试。

二、 实习时间:十七周(2007625号——629号)

三、 实习地点:学校机房(4212

四、 实习要求:

能够利用所学的基本知识和技能,进行简单关系数据库的设计与优化; 掌握ADO.NET数据库开发基本知识;进一步掌握.NET基本结构以及C#语言的基本知识和技能;基本掌握面向对象程序开发的基本思路和方法,编写学生成绩管理系统。
五、 实习内容:

一、需求分析

1、专业管理功能

1)新专业的增加。例如:2006年我们学校,新开物流专业。

2)旧专业的废除。如果随着时代的变迁,必然有的专业更不上时代,就会被淘汰。

3)班级人数是只读的,新专业的班级人数初始化为0,在后面的班级管理中添加班级时,相应专业的班级人数会增加。

2 班级管理功能

1)新班级的增加。例如:向网络工程专业添加网络051班,即可在专业下拉框中选择该专业,添加该班级,则回到专业管理模块中,该专业的班级人数自动加1。(注:选择专业时,不要自己写专业名字,只需要在下拉框选择,因为已经将所有的专业绑定到该下拉框。)

2)多余班级的删除。比如本学年计算机科学与技术专业少招一个班,即可删除掉多余的班级。

3、班级成员管理功能

1)班级成员的查询:可以输入学号根据相应的专业、班级查询相应的学生基本信息。(2)班级成员的添加、删除等功能和前面的几个模块差不多

4、课程管理功能

1)新课程的添加。课程的设置是分专业来进行的,即根据相应的专业来选择添加该专业的课程和相应的学分数。

2)旧课程的删除。选择要删除的课程名删除该课程

3)学分修改。选择课程名修改相应的学风

4)课程查询。分专业查询、向左向右导航查询以及查询全部。

5、成绩管理功能

1)成绩查看。通过选择相应的专业来通过ListView控件来显示该专业所有学生的成绩状况。还可以选择班级分班来查询

2)成绩添加、删除及修改。通过双击相应同学的记录弹出窗体来设置成绩,再通过点击刷新按钮来更新记录。

3)导出Excel文档。可以把ListView控件中的内容保存为Excel文件以便做进一步的加工。

 

 

 

6、综合查询功能

1)选择查询。通过用户点击选择相应的分类来查询。

2)自定义查询。通过用户自己定义Sql语句进行查询。

二、系统设计

1、系统功能模块

   (1) 增加学生信息

       增加学生——标记系别、专业、班级信息。

  2)学生离校

       删除学生记录——增加学生档案信息——标记系别、专业、班级信息。

  3)学生调动

       标记学生记录——增加学生档案信息——标记系别、专业、班级信息。

  4)学生结业

       标记学生记录——增加学生档案信息——增加就业信息。

  5)考试管理

       添加课程信息——添加考试信息——标记考试信息。

  6)课程管理

       增加信息

  7)成绩管理

       添加课程信息——添加考试信息——添加成绩信息。

三、数据库设计

 

班级信息表(Class

字段名

数据类型

长度

是否允许为空

备注

ClassID

Char

5

N

班级编号

ClassName

varChar

50

N

班级名称

Department

varCha

50

N

院系名称

StudentNumber

smallint

 

N

 

学生人数

课程信息表(Course

字段名

数据类型

长度

是否允许为空

备注

CourseID

Char

10

N

课程编号

CourseName

Varchar

50

N

课程名称

ScoreHour

Tinyint

 

N

课程学时

Department

varchar

50

N

所属院系

 

院系信息表(Departmet

字段名

数据类型

长度

是否允许为空

备注

DepartmetID

Char

10

N

院系编号

DepartmetName

Varchar

50

N

院系名称

phoneNo

Varchar

20

N

电话号码

成绩信息表(Score

字段名

数据类型

长度

是否允许为空

备注

Class

Varchar

20

N

班级名称

StudentID

Char

6

N

学生编号

Course

Varchar

50

N

课程名称

Score

Smallint

3

N

分数

学生信息表(Student

字段名

数据类型

长度

是否允许为空

备注

StudentID

Char

10

N

学生编号

StudentName

Char

10

N

学生姓名

Class

Varchar

50

N

班级名称

Department

Varchar

50

N

院系名称

Sex

Char

2

N

性别

Age

Smallint

10

N

年龄

Nation

Varchar

10

N

民族

Nativeplace

Varchar

50

N

籍贯

Status

Varchar

20

N

政治身份

InDate

Char

4

N

入学时间

picture

varchar

50

N

照片

选课信息表(SelectCourse

字段名

数据类型

长度

是否允许为空

备注

SeriaNo

char

8

N

选课序列号

Department

Varchar

50

N

院系名称

Class

Varchar

20

N

班级名称

Semester

Varchar

20

N

学期名称

Course

varchar

20

N

课程名称

 

学期信息表(Semester)

字段名

数据类型

长度

是否允许为空

备注

SemesterID

Char

5

N

学期编号

SemesterName

varchar

50

N

学期名称

学生离校信息表(StudentLeave

字段名

数据类型

长度

是否允许为空

备注

LeaveNO

Char

6

N

学校离校编号

StudentID

Char

6

N

学生编号

Department

Varcahr

20

N

院系名称

Class

Varchar

20

N

购买数量

Leavetype

Varchar

10

N

离校类别

Date

datetime

 

N

离校日期

 

      
     

四、界面设计

1、主界面:

 

 

 

为了应用SqlClient命名空间下的类以及方法本程序DataLevel下的类,在程序引用段添加下面代码:

using System;

using System.Data;

using System.Data.SqlClient;

using StudentManage.DataLevel;

在类变量声明阶段声明如下变量:

        private string selectStr;

        private SqlConnection Connection1=null;

        private SqlCommand  Command1=null;

        private SqlDataReader DataReader1=null;

在构造函数生成连接数据库和SqlDataAdapter命令,代码如下:

 

    public class Connection

    {

public static string  ConnString

        get{return"data source=localhost;initialcatalog=StudentManage;integrated security=SSPI;"; }

        }      

    }

 

        public StatusManage()

        {          

        this.Connection1=new  qlConnection(DataLevel.Connection.ConnString);

            this.Command1=new SqlCommand();    

            this.Command1.Connection=this.Connection1; 

         }

 

2、学生管理界面:

 

“确定按钮”的代码如下:

        this.StuClass=this.comboClass.Text;

            this.StuDepartment=this.comboDepartment.Text;

            this.selectStr="select * from Student where Department='"+this.comboDepartment.Text+"' and Class='"+this.comboClass.Text+"'";

            this.dataAdapter1=new SqlDataAdapter(this.selectStr,this.Connection1);         

            try

            {              

                if(this.Connection1.State==ConnectionState.Closed)

                this.Connection1.Open();

                this.DataSetStudent.Clear();

                this.dataAdapter1.Fill(this.DataSetStudent,"Student"); 

            }

            catch(Exception E)

            {

                MessageBox.Show(E.ToString());

            }

            finally

            {

                this.Connection1.Close();          

            }          

            if(first)

            {

                this.DataSet_Bingding();           

                first=false;

            }

            this.Buttons_Control(false);

            this.BindingContext[this.DataSetStudent,"Student"].Position=0;

            this.lblRecord_Change();

 

            this.comboDepartment.Enabled=true;

            this.comboClass.Enabled=true;

            try

            {

                this.BindingContext[this.DataSetStudent,"Student"].EndCurrentEdit();

                if(this.Connection1.State==ConnectionState.Closed)

                    this.Connection1.Open();

                SqlCommandBuilder commandbuilder1=new SqlCommandBuilder(this.dataAdapter1);

                this.dataAdapter1.Update(this.DataSetStudent,"Student");

                this.DataSetStudent.AcceptChanges();

                this.dataGrid1.Refresh();

            }

            catch(Exception E)

            {

                this.ErrorHandle(E);

            }

            finally

            {

                this.Connection1.Close();

                this.lblRecord_Change();

                this.Buttons_Control(false);

            }

             

 

“添加“按钮的代码如下:

    this.Buttons_Control(true);        

            this.BindingContext[this.DataSetStudent,"Student"].AddNew();   

            this.lblClass.Text=this.StuClass;

            this.lblDepartment.Text=this.StuDepartment;

            this.comboClass.Enabled=false;

            this.comboDepartment.Enabled=false;

“修改“按钮的代码如下:

             this.Buttons_Control(true);

            this.comboClass.Enabled=false;

            this.comboDepartment.Enabled=false;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、课程管理界面

 

 

“确定“按钮的代码如下:

            try

            {

                this.BindingContext[this.DataSetDep,"Class"].EndCurrentEdit();

                if(this.conn1.State==ConnectionState.Closed)

                    this.conn1.Open();

                SqlCommandBuilder commandbuilder1=new SqlCommandBuilder(this.sqlDataAdapter1);

                this.sqlDataAdapter1.Update(this.DataSetDep,"Class");

                this.DataSetDep.AcceptChanges();

                this.dataGrid1.Refresh();

            }

            catch(Exception E)

            {

                this.ErrorHandle(E);

            }

            finally

            {

                this.conn1.Close();

                   

                this.Buttons_Control(false);

            }  

 

            try

            {

                this.BindingContext[this.DataSetDep,"Class"].EndCurrentEdit();

                if(this.conn1.State==ConnectionState.Closed)

                    this.conn1.Open();

                SqlCommandBuilder commandbuilder1=new SqlCommandBuilder(this.sqlDataAdapter1);

                this.sqlDataAdapter1.Update(this.DataSetDep,"Class");

                this.DataSetDep.AcceptChanges();

                this.dataGrid1.Refresh();

            }

            catch(Exception E)

            {

                this.ErrorHandle(E);

            }

            finally

            {

                this.conn1.Close();

                   

                this.Buttons_Control(false);

            }  

“删除“按钮的代码如下:

    if((this.BindingContext[this.DataSetDep,"Class"].Count>0)&

                (MessageBox.Show("真的要删除此记录吗","确定删除",MessageBoxButtons.OKCancel,MessageBoxIcon.Question).Equals(DialogResult.OK)))

            {

                int position=this.BindingContext[this.DataSetDep,"Class"].Position;

                this.BindingContext[this.DataSetDep,"Class"].RemoveAt(position);

            }

            else

                return;

   

 

 

 

 

 

 

 

 

 

 

四、成绩管理界面: 

“确定“按钮的代码如下:

this.selectStr="select * from Score where Class='"+this.comboClass.Text+"'";

            this.sqlDataAdapter1=new SqlDataAdapter(this.selectStr,this.conn1);

            this.DataSetScore.Clear();

            this.sqlDataAdapter1.Fill(this.DataSetScore,"Score");

            if(this.DataSetScore.Tables[0].Rows.Count==0)

            {

                try

                {

    if(this.conn1.State==ConnectionState.Closed)this.conn1.Open();         

                    this.commandStr="select StudentID from Student where Class='"+this.comboClass.Text+"'";

                    this.Command1.CommandText=this.commandStr;

                    this.DataReader1=this.Command1.ExecuteReader();

                    while(this.DataReader1.Read())

                    {

                        DataRow newrow;

                        newrow=this.DataSetScore.Tables[0].NewRow();

                        newrow["StudentID"]=DataReader1[0].ToString();     

                        newrow["Class"]=this.comboClass.Text;

                        newrow["Course"]=this.comboCourse.Text;

                        newrow["Score"]=0;

                        this.DataSetScore.Tables[0].Rows.Add(newrow);

                    }

                    this.DataReader1.Close();          

                }

                catch(Exception E)

                {

                    MessageBox.Show(E.ToString());

                }

                finally

                {

                    this.conn1.Close();        

                }

            }

            this.dataGrid1.DataSource=this.DataSetScore;

            this.dataGrid1.DataMember="Score"; 

 

 

 

            this.comboCourse.Items.Clear();

            try

            {

                if(this.conn1.State==ConnectionState.Closed)this.conn1.Open();                     

                this.commandStr="select Course from SelectCourse where Class='"+this.comboClass.Text+"' and Semester='"+this.comboSemester.Text+"'";

                this.Command1.CommandText=this.commandStr;

                this.DataReader1=this.Command1.ExecuteReader();

                while(this.DataReader1.Read())

                {

    this.comboCourse.Items.Add(this.DataReader1["Course"].ToString());

                }

                this.DataReader1.Close();                              

            }

            catch(Exception E)

            {

                MessageBox.Show(E.ToString());

            }

            finally

            {

                this.conn1.Close();        

            }                 

 

 

 

“提交”按钮代码如下:

try

            {  

    this.BindingContext[this.DataSetScore,"Score"].EndCurrentEdit();

                if(this.conn1.State==ConnectionState.Closed)

                    this.conn1.Open();

                SqlCommandBuilder commandbuilder1=new SqlCommandBuilder(this.sqlDataAdapter1);

                this.sqlDataAdapter1.Update(this.DataSetScore,"Score");

                this.DataSetScore.AcceptChanges();             

            }

            catch(Exception E)

            {

                this.ErrorHandle(E);

            }

            finally

            {

                this.conn1.Close();                

            }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

六、 实习总结:

短短一周的实习过程使我受益匪浅。不仅是在专业知识方面,最主要是在怎样去解决编程中出现的问题。社会在加速度地发生变化,对人才的要求也越来越高,要用发展的眼光看问题,得不断提高思想认识,完善自己。作为一名IT从业者,所受的社会压力将比其他行业更加沉重,要学会创新求变,以适应社会的需要。这次实习成长了不少,从中有不少感悟,下面就是我的一点心得:
   
第一是沟通:要想在短暂的实习时间内,尽可能多的学一些东西,这就需要跟老师有很好的沟通,加深彼此的了解,老师并不了解你学的怎么样,不清楚你想了解的知识,所以跟老师很好的沟通是很必要的。同时我觉得这也是我们将来走上社会的一把不可缺少的钥匙。通过沟通了解,老师对我有了大体了解,边有针对性的教我一些知识,我对编程过程中要注意的问题,比如书写格式,怎样去检查程序中的错误。这样既巩固了旧知识,又掌握了新知识,甚至在实践中推翻了书本上旧有的不合实际的知识,这才真正体现了知识的真正价值,学以致用。

   
第二是激情与耐心:激情与耐心,就像火与冰,看似两种完全不同的东西,却能碰撞出最美丽的火花。在操作时,老师就跟我说,编程程序这一块,激情与耐心必不可少,在用户对软件产品要求方面,这一行业就像做新闻工作,补断的更新,这就需要你有激情,耐心的去不断的学习,提高自己的专业水平。在一些具体的工作当中也是这样的,也让我认识到了自己的不足,告诫自己,不管做什么,切忌眼高手低,要善于钻研

第三是细心和基本的专业素养:细心负责是做好每一件事情所必备的基本素质,基本的专业素养是前提。实习期间,我深深体会写程序细心的重要性。不细心负责,没有基本的专业素养,是很容易出现漏洞的。
   
第四是 讲究条理:如果你不想让自己在紧急的时候手忙脚乱,就要养成讲究条理性的好习惯。做什么事情都要有条理,这是从小爸爸给我的忠告。让我联想到在一本书上看到这么一个故事,一位在美国电视领域颇有成就的美籍华人当部门经理时,总裁惊讶于他每天都能把如山的信件处理完毕,而其他经理桌上总是乱糟糟堆满信件。他说,虽然每天信件很多,但我都按紧急性和重要性排序,再逐一处理。总裁于是把这种做法推广到全公司,整个公司的运作变得有序,效率也提高了。所以说:养成讲究条理的好习惯,能让我们在以后工作中受益匪浅。

    整个的实习过程是紧张而愉快的,我锻炼了上机动手能力,通过这次实习,收获颇丰,无论是数据库设计方面还是前端的编程方面都经历了初步设计-发现问题-解决问题-引入新的问题这一循环,使自己的动手能力有了很大的提高。今后,我将继续保持认真负责的学习态度,高尚的思想觉悟,进一步完善和充实自己,争取在以后学习中取得新的突破。