1、 综合程序 课程设计说明书 课程设计名称: 综合程序设计 课程设计题目: 学生成绩管理系统 学 院 名 称: 专业: 班级: 学号: 姓名: 评分: 教师: 20 16 年 3 月 15 日
2、 综合程序 课程设计任务书 20 15 -20 16学年 第 2 学期 第 1 周 - 2周 题目 学生成绩管理系统 内容及要求 (一)功能要求: (1)信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息。 (2)信息查询: 要求:查询时可实现按姓名查询、按学号查询。 (3)成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。 (4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的
3、形式显示排序后的输出结果)(使用多种方法排序者,加分)。 (二)其它要求: (1)只能使用C或C++语言,源程序要有适当的注释,使程序容易阅读。 (2)采用文本菜单界面。 (3)学生可增加新功能模块。 进度安排 第一周确定学生成绩管理系统索要实现的功能,查询与实现所需功能相关的资料,并完成一些实现较为简单的功能模块;第二周通过第一周所查询到的资料,编写完成所确定的较为复杂的功能,对系统进行调试,尽可能排除各种bug并完善系统,增加界面友好。 学生姓名: 指导时间 2016年2月29日~2016 年 3 月13 日 指导地点: 任务下达 年 月 日 任务完成
4、 年 月 日 考核方式 1.评阅 □ 2.答辩 □ 3.实际操作□ 4.其它□ 指导教师 系(部)主任 综合程序 课程设计任务书 20 15 -20 16学年 第 2 学期 第 1 周 - 2周 题目 学生成绩管理系统 内容及要求 (一)功能要求: (1)信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息。 (2)信息查询: 要求:查询时可实现按姓名查询、按学号查询。 (3)成绩统计: 要求:A输入任意的一个课程名
5、如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。 (4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果)(使用多种方法排序者,加分)。 (二)其它要求: (1)只能使用C或C++语言,源程序要有适当的注释,使程序容易阅读。 (2)采用文本菜单界面。 (3)学生可增加新功能模块。 进度安排 第一周确定学生成绩管理系统索要实现的功能,查询与实现所需功能相关的资料,并完成一些实现较为简单的功能模块;第二周通过第一周所查询到的资料,编写完成所确定的较为复杂的功能,对系统进行调试,尽可能排除各种b
6、ug并完善系统,增加界面友好。 学生姓名: 指导时间 2016年2月29日~2016 年 3 月13 日 指导地点: 任务下达 2016年2月29日 任务完成 2016 年 3 月13 日 考核方式 1.评阅 □ 2.答辩 □ 3.实际操作□ 4.其它□ 指导教师 系(部)主任 摘要 在学校或班级,经常会对某次考试中所有学生的成绩进行统计和管理,由于学生数量非常繁多,所以在处理统计学生总成绩和平均成绩时工作会相对繁琐,所以针对这种情况,为方便对学生的成绩进行统计和管理,利用C++语言及MicroSoft
7、 2010程序和数据库软件SQL 2008运行平台,设计了一种小型的学生成绩管理系统,该系统具有学生成绩相关信息的录入、显示、查询、修改、删除和统计等功能。 关键字:学生成绩管理系统、MicroSoft 2010、SQL 2008、模块化设计。 目录 1、 需求分析······················································1 ⑴设计目的·····································
8、···········1 ⑵设计任务················································1 ⑶软件性能需求············································1 2、 数据表的设计··················································2 3、 软件结构设计··················································3 4、 软件程序的详细设计········································
9、····4 ⑴软件主界面··············································4 ⑵信息维护模块············································5 ①添加·············································6 ②修改·············································8 ③删除·············································14 ⑶信息查询模块···············
10、·····························15 ⑷成绩统计模块············································18 ⑸排序模块················································20 5、 系统的调试与测试分析··········································24 6、 用户使用手册··················································26 7、 设计总结··························
11、····························27 8、 参考文献······················································28 9、 附录··························································29 一、需求分析 1、设计目的 ①掌握运用数据库原理进行系统分析和设计的方法; ②掌握关系数据库的设计方法; ③掌握利用SQL Server 2008技术; ④加强C++的编程能力; 2、设计任务 ①设计一个简易学生成绩管理的数据库系统,包括数据
12、库的建立的需求 分析,数据的输入输出。 ②设计用户的操作界面,主要实现数据的查询,录入,显示,修改,删 除,统计基本功能。 3、软件的性能需求 学生成绩管理系统主要是提供成绩查询,方便网上信息查阅的平台。教师可以通过程序管理系统查询所有学生的各科成绩,根据学生的成绩情况为自己的后续教学安排提供依据。老师同时还对成绩管理系统具有添加、修改、删除、查询、信息统计等相关操作。 二、数据表的设计 数据表包含学生的姓名、学号、语文、数学、英语、政治成绩和个人总成绩、个人平均成绩。教师在输入或修改学生的各
13、科成绩后,相应学生的个人总成绩和平均成绩就会相应的即时更新。 其实体关系图如下所示: 学生 学号 语文 数学 英语 政治 个人总成绩 平均成绩 姓名 创建数据表的代码如下所示: create table 学生成绩信息 (姓名CHAR(10) NOT NULL, 学号CHAR(10) NOT NULL, 语文 CHAR(5) NOT NULL, 数学 CHAR (5) NOT NULL, 英语CHAR (5) NOT NULL, 政治 CHAR (5) NOT NULL, 个人总成绩 CHAR (5) N
14、OT NULL, 平均成绩 CHAR (5) NOT NULL); 三、软件结构设计 成绩管理系统主要分为五个功能模块:信息维护模块(添加、修改、删除)、信息查询模块(按学号、姓名查询)、成绩统计模块(查询分数段内学生情况、人数)、排序模块(按单科成绩、总成绩、平均成绩排序)、查询所有模块。 其关系图如下所示: 成绩管理系统 查询所有 添加 修改 删除 按学号 分数段及此分数段人数 按姓名 个人总成绩降序 排序 成绩统计 信息查询 信息维护 单科成绩降序 单科成绩升序
15、平均成绩降序 四、软件程序的详细设计 1、 软件主界面 在软件主界面中有四个按钮,分别可以进入四个功能模块,还有一个查询所有学生成绩信息的菜单栏按钮选项。主界面的交互界面如图1所示: 图1 实现页面跳转的主要代码如下所示: 在form1的构造函数中定义变量如下: Form2^ f2; Form3^ f3; Form4^ f4; Form5^ f5; 再在系统的头文件库stdafx.h中包含各个头文件,代码如下: #include"Form2.h" #include"
16、Form3.h" #include"Form4.h" #include"Form5.h" 点击页面跳转代码如下: private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {//打开信息查询窗口 f2=gcnew Form2(); f2->Show(); } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {//打开信息维护窗口
17、 f3=gcnew Form3(); f3->Show(); } private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {//打开成绩统计窗口 f4=gcnew Form4(); f4->Show(); } private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {//打开成绩统计窗口 f5=gcn
18、ew Form5(); f5->Show(); } 2、信息维护模块 图2 信息维护模块交互界面如图2所示。此模块可实现对学生成绩信息的添加、修改和删除。 ①添加 在信息输入栏中输入完整的学生信息,再点击添加按钮,即可完成学生成绩信息的添加,且在添加学生四科成绩之后,系统可自动计算出所添加学生的个人总成绩和平均成绩并显示在数据库文件当中,为避免重复添加,系统还会检测学生信息是否已经添加,若存在则系统会提示当前所添加学生已经添加。 输入数据 输入的信息是否完整 N Y Y 学号已存在
19、 添加成功 N 此模块功能实现的主要代码如下所示: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {//添加学生成绩信息 if(textBox1->Text==""||textBox2->Text==""||textBox3->Text==""||textBox4->Text==""||textBox5->Text==""||textBox6->Text=="") { MessageBox::Show("请输入完整
20、的学生成绩信息!");///判断是否有输入添加的信息 return; } String^ abc="select * from 学生成绩 where 学号="+textBox2->Text;//判断所添加的学号是否已经存在 DataTable^ abctable =gcnew DataTable(); SqlDataAdapter^ abcda =gcnew SqlDataAdapter(abc,con); abcda->Fill(abctable); if (abctable->Rows->Count==1) {
21、 MessageBox::Show("此学号已存在!"); return; } String^ sql="insert into 学生成绩(姓名,学号,语文,数学,英语,政治) values ('" + textBox1->Text + "','" + textBox2->Text + "','" + textBox3->Text + "','" + textBox4->Text + "','" + textBox5->Text + "','" + textBox6->Text + "')"; MessageBox::Show(s
22、ql); DataTable^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con);////添加学生信息 try { ourda->Fill(ourtable); } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); re
23、turn; } MessageBox::Show("添加成功!"); //////////////更新个人总成绩////////////// String^ zf="update 学生成绩 set 个人总成绩=语文+数学+英语+政治"; DataTable^ zftable =gcnew DataTable(); SqlDataAdapter^ zfda =gcnew SqlDataAdapter(zf,con); try { zfda->Fill(zftable); } cat
24、ch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } ///////////////更新平均成绩///////////////// String^ ave="update 学生成绩 set 平均成绩=个人总成绩/4"; DataTable^ avetable =gcnew DataTable(); SqlDataAdapter^ aveda =gcnew SqlDa
25、taAdapter(ave,con); try { aveda->Fill(avetable); } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } } ②修改 在信息栏中输入所要修改的学生姓名与学号,且在所要修改的科目一栏输入修改后的分数,并勾选所要修改的科目,若要全部修改可在填写完分数后点击全部勾选即可,若
26、想要单独修改某一科成绩,则只需单独勾选该一科成绩即可。并且在修改成功后系统会自动更新该学生成绩修改后的个人总成绩和平均成绩。 输入要修改的内容 输入的学号与姓名是否匹配 N Y 是否已勾选所要修改的成绩 N Y 修改成功 此功能的实现代码如下所示: private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {//修改学生成绩信息 if(textBox1->Text==""||textBox2->Tex
27、t=="")//判断姓名和学号是否为空 { String^sql="请输入姓名和学号!"; MessageBox::Show(sql); return;} String^ abc="select * from 学生成绩 where 姓名='"+textBox1->Text+"' and 学号="+textBox2->Text; DataTable^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(abc,con); ou
28、rda->Fill(ourtable); if (ourtable->Rows->Count==0)////判断输入的学号在数据库中是否存在 { MessageBox::Show("输入的姓名与学号不匹配或此学生不存在!"); return; } if((textBox3->Text==""||checkBox1->Checked==false) && (textBox4->Text==""||checkBox2->Checked==false) && (textBox5->Text==""||checkBox3->Checke
29、d==false) && (textBox6->Text==""||checkBox4->Checked==false)) { MessageBox::Show("请输入需要修改内容的值并勾选相应的方框!");///判断是否已经输入正确的需改内容和操作 return; } if(checkBox1->Checked==true&&textBox3->Text!="")//////语文成绩的修改 { String^ sql="update 学生成绩 set 语文"+"='"+textBox3->Text+"' "+"where 姓名"
30、"='"+textBox1->Text+"' "+"and 学号="+textBox2->Text+""; MessageBox::Show(sql); DataTable^ ourtable =gcnew DataTable(); SqlDataAdapter^ our =gcnew SqlDataAdapter(sql,con); try { our->Fill(ourtable); } catch (System::Data::SqlClient::SqlException^ ex)
31、 { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } } if(checkBox2->Checked==true&&textBox4->Text!="")//数学成绩的修改 { String^ sql="update 学生成绩 set 数学"+"='"+textBox4->Text+"' "+"where 姓名"+"='"+textBox1->Text+"' "+"and 学号="+textBox2->Text+""; DataTa
32、ble^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con); try { ourda->Fill(ourtable); } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } } if
33、checkBox3->Checked==true&&textBox5->Text!="")//英语成绩的修改 { String^ sql="update 学生成绩 set 英语"+"='"+textBox5->Text+"' "+"where 姓名"+"='"+textBox1->Text+"' "+"and 学号="+textBox2->Text+""; DataTable^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con);
34、 try { ourda->Fill(ourtable); } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } } if(checkBox4->Checked==true&&textBox6->Text!="")//政治成绩的修改 { String^ sql="update 学生成绩 set
35、政治"+"='"+textBox6->Text+"' "+"where 姓名"+"='"+textBox1->Text+"' "+"and 学号="+textBox2->Text+""; DataTable^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con); try { ourda->Fill(ourtable); } catch (System::Data::SqlClient::SqlExc
36、eption^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } } MessageBox::Show("修改成功!"); //////////////更新个人总成绩////////////// String^ zf="update 学生成绩 set 个人总成绩=语文+数学+英语+政治"; DataTable^ zftable =gcnew DataTable(); SqlDataAdapter^ zfda =
37、gcnew SqlDataAdapter(zf,con); try { zfda->Fill(zftable); } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } ///////////////更新平均成绩///////////////// String^ ave="update 学生成绩 se
38、t 平均成绩=个人总成绩/4"; DataTable^ avetable =gcnew DataTable(); SqlDataAdapter^ aveda =gcnew SqlDataAdapter(ave,con); try { aveda->Fill(avetable); } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息");
39、return; } } 全部选择功能实现代码如下所示: private: System::Void checkBox5_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {//全部修改checkBox选择操作 if(checkBox5->Checked==true) { checkBox1->Checked=true; checkBox2->Checked=true; checkBox3->Checked=true; chec
40、kBox4->Checked=true; } if(checkBox5->Checked==false) { checkBox1->Checked=false; checkBox2->Checked=false; checkBox3->Checked=false; checkBox4->Checked=false; } } ③删除 在姓名和学号栏中输入要删除的学生信息,点击删除按钮,若此学生在数据库中存在则会显示删除成功,若不存在则会提示所要删除的学生不存在。 输入姓名和学号 姓
41、名与学号是否匹配 N Y 删除成功 其代码实现如下所示: private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {//删除学生成绩信息 if(textBox1->Text==""||textBox2->Text=="")//判断是否有输入必要信息 { String^sql="请输入姓名和学号!"; MessageBox::Show(sql); return; } String^ a
42、bc="select * from 学生成绩 where 姓名='"+textBox1->Text+"' and 学号="+textBox2->Text; DataTable^ f3 =gcnew DataTable(); SqlDataAdapter^ f4 =gcnew SqlDataAdapter(abc,con); f4->Fill(f3); if (f3->Rows->Count==0) //判断所要删除的学号是否存在 { MessageBox::Show("输入的姓名与学号不匹配!"); return;
43、 } String^ sql="delete 学生成绩 where 姓名"+"='"+textBox1->Text+"' and "+"学号="+textBox2->Text+""; MessageBox::Show(sql); DataTable^ ourtable =gcnew DataTable();//信息输入正确后删除次学生信息的操作 SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con); try { ourda->Fill(ourtable)
44、 } catch (System::Data::SqlClient:SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息"); return; } String^ ac="select * from 学生成绩 where 姓名='"+textBox1->Text+"' and 学号="+textBox2->Text; DataTable^ f1 =gcnew DataTable(); SqlDataAdapter^
45、f2 =gcnew SqlDataAdapter(abc,con); ourda->Fill(f1); if (f1->Rows->Count==0) //删除后再次查询此学生信息,验证是否删除成功 { MessageBox::Show("删除成功!"); } } 3、信息查询模块 图3 信息查询模块的交互界面如图3所示,此模块可实现按照学号、姓名两种方式对学生的所有成绩信息进行查询。在查询内容一栏中输入与所选查询方式相对应的查询内容并点击查询按钮就会在窗口下方显示符合条件的学生的所有成绩信息。 选择查询方式
46、 输入查询内容 输入内容是否存在 N Y 显示相关信息 此功能实现的代码如下所示: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { con=gcnew SqlConnection();//链接数据库 con -> ConnectionString =L"Data Source = DESKTOP-0FETV4R; Initial Catalog=学生成绩管理系统; Integrated Securi
47、ty=True"; if(textBox1->Text=="")//判断是否有输入内容 { String^ sql="请输入所要查询的内容!"; MessageBox::Show(sql); return; } if(radioButton1->Checked==true)//按学号查询 { String^sql="select * from 学生成绩 where 学号" +"='"+textBox1->Text+"'"; MessageBox::Show(sql); DataT
48、able^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con); try { ourda->Fill(ourtable); this->dataGridView1->DataSource=ourtable; } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->
49、Errors,"提示信息"); } } if(radioButton2->Checked==true)//按姓名查询 { String^ sql="select * from 学生成绩 where 姓名"+"='"+textBox1->Text+"'"; MessageBox::Show(sql); DataTable^ ourtable =gcnew DataTable(); SqlDataAdapter^ ourda =gcnew SqlDataAdapter(sql,con); tr
50、y { ourda->Fill(ourtable); this->dataGridView1->DataSource=ourtable; } catch (System::Data::SqlClient::SqlException^ ex) { MessageBox::Show("数据异常信息是:"+ex->Errors,"提示信息");} }} 4、成绩统计模块 图4 成绩统计模块的交互界面如图4所示。此模块主要实现对学生成绩的分布情况进行查询,在课程名一栏输入所要查询的课程名称包括恶人总成绩和平均






