河北工业大学计算机软件技术基础(VC)2008年课程设计报告学院:电气自动化学院班级:电气c071 姓名:刘翔学号:073806 成绩: _ _ 一、题目:你选择的题目名称(编号是17号)二、设计思路1、总体设计1)分析程序的功能本程序的功能,就是实现对一个班学生的成绩管理。
可按课程输入学生成绩,并可按学生或课程进行查询。
2)系统总体结构:设计程序的组成模块,简述各模块功能本程序是完成一个班学生的成绩管理,为完成程序功能,至少要有两个这样的功能模块:输入成绩查询成绩因为查询模块中又分为:按学生查询按课程查询输入成绩:把学生个人成绩输入并储存。
查询成绩:在储存的成绩中查询所需的成绩。
按学生查询:以学生为列表查询某学生课程成绩。
按课程查询:以课程为列表查询某学生课程成绩。
2、各功能模块的设计:说明各功能模块的实现方法输入成绩:先选择输入成绩的课程,用if实现课程选择,后输入成绩,储存在定义的二维数组中。
查询成绩:先选择按学生查询还是按课程查询,并选择所查询的课程与学生,输出相应的成绩,运用了结构体数组。
3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。
不会用结构体数组对成绩进行定义与调用,用二维数组代替并调用。
对学生信息与课程信息定义中格式有错。
1)困难1首先要解决信息的存储。
要定义两个结构数组,分别存储学生信息和课程信息。
学生信息包括学号和姓名,并且直接初始化;课程信息包括课程编号和课程名,也直接初始化。
因为主要是成绩管理,程序主要完成成绩的输入和查询,所以学生和课程信息直接在程序中进行初始化就可以了。
在数组中存储信息时,不仅要存储信息,还要为每个数组设置一个int变量,记录数组中实际存储了多少条信息。
2)困难2存储信息的调用。
3)困难3各个模块中函数的调用,循环。
4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能输入学生的成绩,查询成绩。
可按课程输入学生成绩,并可按学生或课程进行查询。
2)准备的测试数据及运行结果66 67 68 6955 56 57 58三、程序清单#include<iostream.h>void input();void inquire();void accordingtostudent();void accordingtocourse();int m[4][7],n[10],p=1;struct student{int num;char name[20];}stu[4]={{51001,"Alice"},{51002,"John"},{52001,"Tom"},{52003,"Jim"}};struct course{int num;char name[16];}cl[7]={{1,"计算机基础"},{2,"计算机软件"},{3,"单片机"},{4,"大学英语"},{5,"英语阅读"},{6,"高等数学"},{7,"数值分析"}};void main(){int a;for(int i=0;i<5;i++){cout<<"欢迎使用学生成绩管理程序!"<<endl;cout<<"1.输入学生成绩"<<endl;cout<<"2.查询学生成绩"<<endl;cout<<"0.退出"<<endl;cout<<"请选择要紧进行操作"<<endl;cin>>a;if(a==1)input();if(a==2)inquire();if(a==0)break;}cout<<"谢谢使用本系统"<<endl;}void input(){int b,s;cout<<"课程信息如下"<<endl;for(int i=0;i<7;i++)cout<<cl[i].num<<'\t'<<cl[i].name<<endl;cout<<"请选择课程(输入序号):";cin>>b;s=b-1;n[p++]=b;cout<<"请输入<<"<<cl[s].name<<">>课程成绩"<<endl;for(int j=0;j<4;j++){cout<<stu[j].num<<'\t'<<stu[j].name<<'\t'<<"Grade=";cin>>m[j][b];cout<<endl;}}void inquire(){int c;cout<<"可进行查询操作为"<<endl;cout<<"1.按学生查询成绩"<<endl;cout<<"2.按课程查询成绩"<<endl;cout<<"0.退出"<<endl;cout<<"请选择要进行的操作:"<<endl;cin>>c;if(c==1)accordingtostudent();if(c==2)accordingtocourse();if(c==0)cout<<"谢谢使用本系统"<<endl;}void accordingtostudent(){int d;cout<<"学生信息如下"<<endl;for(int i=0;i<4;i++)cout<<i+1<<'\t'<<stu[i].name<<endl;cout<<"请选择学生(输入序号):";cin>>d;cout<<"查询"<<stu[d-1].name<<"同学的成绩如下"<<endl;for(int j=1;j<p;j++){cout<<cl[n[j-1]].name<<'\t'<<m[j-1][n[j]]<<endl;}}void accordingtocourse(){int e;cout<<"课程信息如下:"<<endl;for(int i=0;i<p-1;i++)cout<<cl[n[i]].num<<'\t'<<cl[n[i]].name<<endl;cout<<"请选择课程(输入序号)"<<endl;cin>>e;cout<<"查询<<"<<cl[e].name<<">>课程的成绩如下"<<endl;for(int j=0;j<4;j++)cout<<stu[j].name<<'\t'<<m[j][e]<<endl;}四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。
能独立思考程序并完成程序编写与调试,不能很好的运用所学的知识解决程序中所出现的问题。
2、对课题提出更完善的方案1)可定义三个结构数组,分别存储学生信息、课程信息和成绩信息。
学生信息包括学号和姓名,并且直接初始化;课程信息包括课程编号、课程名和已登录成绩,也直接初始化;成绩信息包括学生信息的数组元素下标、课程信息数组元素下标、成绩。
学生和课程信息直接在程序中进行初始化就可以了。
2)对输入的数据要进行合理性检验,例如数组中存储了20名学生的信息,用户进行选择时,必须在这个范围内。
五、收获及心得体会1、通过本次课程设计,自己在哪些方面的能力有所提高。
对结构体数组运用,循环结构,函数的调用。
2、收获和心得体会。
1)能很好的运用结构体数组解决问题,对c++各个模块有了更深的认识,可以完成各种结构程序设计编写。
2)程序的编写很无聊,很难,编完以后觉得很有趣,喜欢编写程序。
日期:2008年6月21 日。