1.需求分析
学校的学生成绩信息管理是学校管理中的一项重要任务,以往的手工操作已经不能适应现在办公的需要.为了摆脱繁琐的劳动,提高工作效率,利用计算机进行信息处理成为必然.开发功能完善及安全可靠的管理系统可以大大提高学校资源的利用率,及时,准确地获取需要的信息,充分发挥人员的工作潜力。因此,不难想象,正是咨询业的迅速发展使得人们从过去的手工劳动中得以解脱.同时,编写一套完善的学生成绩管理系统的任务就显得尤为重要。软件开发的意图为便于学校的管理,方便查看有关学校及学生的情况。如教务处对学生成绩的修改、删除、查找、添加等。
2概要设计
设计一个学生成绩管理系统,使之能完成以下功能:
1.信息录入功能
2.信息查询功能
3.信息删除功能
4.信息修改功能
5.信息浏览功能
6. 查询各个学生平均分
7. 各科不及格人数
8. 各学生按总分排名
使用的关于学生信息的信息
表2-1 学生表
名称 | 标识符 | 类型 | 备注 |
索引 | Index | Int | 自加1 |
学号 | ID | Int | 唯一性 |
姓名 | Name | String | 不唯一 |
数学成绩 | M | Double | 非空 |
英语成绩 | E | Double | 非空 |
C++成绩 | C | Double | 非空 |
总分 | Sum | Double | 非空 |
平均分 | Avg | Float | 非空 |
学生成绩管理系统的界面如下:
3.1.信息录入功能
界面如下:
代码如下
case 1: //数据的录入
{
用于在小项中选择是否继续操作
请输入姓名:"< 学号:"< 数据录入成功,想继续录入吗(y/n)"< 重复输入 } 3.2.增加功能 界面如下: 代码如下: 增加学生数据 { { 请输入您要增加的学生的姓名:"< } 学号:"< } 数据录入成功,想继续录入吗(y/n)"< 指令错误!请重新输入!"< }while(c=='y'); } 3.3.删除功能 界面如下: 代码如下: 删除学生信息 { char c; do { ifstream fin("f1.txt"); 作一个文本文档在文件夹中用于显示所录入的数据 请输入您要删除的学生的姓名:"< { getline(fin,line); 找到名字,判断是否相等 } 数据删除成功,想继续删除吗(y/n)"< 指令错误!请重新输入!"< }while(c=='y'); } 3.4.修改功能 界面如下: 代码如下: case 4://修改数据 { string sname,line,str,name; int nu;float eng,ma,com;int flag;char c; if(i==0) { 系统中没有输入数据,请先输入数据!"< do { flag=0; 请输入您要修改的学生的姓名:"; cin>>name; fstream fin("f1.txt",ios::in); ofstream outfile("f.txt",ios::trunc|ios::out); cout< { getline(fin,line); istringstream stream(line); sname = line.substr(0,line.find(" ",0)); if(name!=sname) { outfile< else flag=1; } fin.close(); if(flag=1) { 请输入修改学生姓名及其新学号,数学,c++和英语成绩:"; cin>>name>>nu>>ma>>com>>eng; cout< fstream outf("f1.txt",ios::trunc|ios::out); fstream inf("f.txt",ios::in); outf< inf.close(); } 对不起,您要修改的学生不存在!请查证后输入!"< cin>>c; cout< { 指令错误!请重新输入!"< } }while(c=='y'); break; } 3.5.查询各个学生平均分 界面如下: 代码如下: case 8://统计每个学生的平均成绩 { { 系统中没有输入数据,请先输入数据!"< for(int m=0;m { cout<<(*s[m]).name<<" 学号:"<<(*s[m]).number<<" 总分:"<<(*s[m]).getsum()<<" 均分:"<<(*s[m]).getaver()< break; } 3.6.信息浏览功能 界面如下: 代码如下: case 7://输出所有学生数据 { 所有学生数据如下:"< cout< break; } 4该设计所用的技术 使用c++面向对象语言开发,代码中使用了for,while,if,switch等循环判断语句,主函数依次调用外围函数,各个函数之间使用数组首地址传递,各个模块之间坚持高内聚低耦合的原则,最大程度上改善本软件的健壮性和可修改性。 5课程设计总结 课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。 课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础. 通过这次模具设计,本人在多方面都有所提高。通过这次模具设计,综合运用本专业所学课程的理论和生产实际知识进行一次冷冲压模具设计工作的实际训练从而培养和提高学生工作能力,巩固与扩充了冷冲压模具设计等课程所学的内容,掌握冷冲压模具设计的方法和步骤,掌握冷冲压模具设计的基本的模具技能懂得了怎样分析零件的工艺性,怎样确定工艺方案,了解了模具的基本结构,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,思考的能力也有了提高。 在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 在此感谢我们的老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次模具设计的每个实验细节和每个数据,都离不开老师您的细心指导。而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。 同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。 由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。 6参考文献 1.《C++程序设计课程设计》 刘振安编著 2.《C++ Builder和Delphi课程设计与系统开发案例》 伍俊良 清华大学出版社 3.Visual C++课程设计案例精编 严华峰 中国水利水电出版社 2004 4.Visual C++课程设计与系统开发案例 伍俊良 清华大学出版社 2002 5.Visual C++语言课程设计 : 案例精选与编程指导 陈清华朱红 东南大学出版社 2003 6.VisualC++课程设计案例精编 中国水利水电出版社 2002 7.数据结构课程设计案例精编 : 用C/C++描述 李建学李光元吴春芳 清华大学出版社 7-302-14536-9 2007 8.谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2007. 7全部代码 #include #include #include #include #include using namespace std; class Tstu //通过定义一个类来定义数据录入的函数 { char name[20]; int number; float math,cpp,english,average,sum; public: Tstu() {}; Tstu ( char n[20], int num,float ma,float cj,float eng ) ; float getsum();//得到总分的函数 float getaver(); //得到平均分的函数 friend void main(); //将主函数定义为友元函数,方便访问类中的成员 }; Tstu::Tstu ( char n[20], int num,float ma,float cj,float eng ) { strcpy(name,n); //得到姓名 number=num; //得到学号 math=ma; //得到数学成绩 cpp=cj; //得到c++成绩 english=eng; //得到英语成绩 } float Tstu::getsum() //得到总分的函数 { sum=cpp+english+math; return sum; } float Tstu::getaver() //得到平均分的函数 { average=getsum()/3; return average; } void main() { cout<<"*****************欢迎来到学生成绩查询系统*****************"< char w;//全局变量,用于在大项中选择是否继续操作 Tstu *s[100]; //类定义的指针将所录入的数据按类中的形式分别存储 ofstream *file[100]; int i=0; //全局变量,用于做每个录入数据的下标 int j=0; int chris1=0; //用于判断do—while语句 do //判断输入是否正确 { cin>>p; if((p>=1&&p<=11)) chris1=1; else cout<<"指令错误!请重新输入:"< do{ 数据的录入 { 用于在小项中选择是否继续操作 请输入姓名:"< 学号:"< 数据录入成功,想继续录入吗(y/n)"< 重复输入 } 增加学生数据 { { 请输入您要增加的学生的姓名:"< } 学号:"< } 数据录入成功,想继续录入吗(y/n)"< 指令错误!请重新输入!"< }while(c=='y'); } 删除学生信息 { char c; do { ifstream fin("f1.txt"); 作一个文本文档在文件夹中用于显示所录入的数据 请输入您要删除的学生的姓名:"< { getline(fin,line); 找到名字,判断是否相等 } 数据删除成功,想继续删除吗(y/n)"< 指令错误!请重新输入!"< }while(c=='y'); } 修改数据 { string sname,line,str,name; int nu;float eng,ma,com;int flag;char c; if(i==0) { 系统中没有输入数据,请先输入数据!"< do { flag=0; 请输入您要修改的学生的姓名:"; cin>>name; fstream fin("f1.txt",ios::in); ofstream outfile("f.txt",ios::trunc|ios::out); cout< { getline(fin,line); istringstream stream(line); sname = line.substr(0,line.find(" ",0)); if(name!=sname) { outfile< else flag=1; } fin.close(); if(flag=1) { 请输入修改学生姓名及其新学号,数学,c++和英语成绩:"; cin>>name>>nu>>ma>>com>>eng; cout< fstream outf("f1.txt",ios::trunc|ios::out); fstream inf("f.txt",ios::in); outf< inf.close(); } 对不起,您要修改的学生不存在!请查证后输入!"< cin>>c; cout< { 指令错误!请重新输入!"< } }while(c=='y'); break; } 按总分查询 { int j=0;float SUM;char c;int flag; if(i==0) { 系统中没有输入数据,请先输入数据!"< do { flag=0; 请输入您要查询的学生的总成绩:"< for(int j=0;j { if(s[j]->getsum()==SUM) { flag=1; 您要查询的学生是:"<<(*s[j]).name< } 对不起!您要查询的学生不存在!"< cin>>c; if(c!='y'&&c!='n') { 指令错误!请重新输入!"< cin>>c; }; }while(c=='y'); break; } 按姓名查询 { char n[20];char c;int j=0;int flag; if(i==0) { 系统中没有输入数据,请先输入数据!"< do { flag=0; 请输入要查询的名字: "< for(int j=0;j { if(strcmp(n,(*s[j]).name)==0) { flag=1; 您要查询的学生是:"<<(*s[j]).name< } if(flag==0) 对不起您要查询的学生不存在,请查证后再输入!"< cin>>c; if(c!='y'&&c!='n') { 指令错误!请重新输入:"< } }while(c=='y'); break; } 输出所有学生数据 { 所有学生数据如下:"< cout< break; } 统计每个学生的平均成绩 { { 系统中没有输入数据,请先输入数据!"< for(int m=0;m { cout<<(*s[m]).name<<" 学号:"<<(*s[m]).number<<" 总分:"<<(*s[m]).getsum()<<" 均分:"<<(*s[m]).getaver()< break; } 统计各学科不及格人数 { if(i==0) { 系统中没有输入数据,请先输入数据!"< int m,n,k,j;m=0;n=0;k=0; for(j=0;j { if(s[j]->math<60)m++; if(s[j]->cpp<60)n++; if(s[j]->english<60)k++; } 数学不及格人数为:"< } 按总分排名 { if(i==0) { 系统中没有输入数据,请先输入数据!"< int h,g,n;int j=0;float a[100],temp; for(g=0;g { a[j]=(*s[g]).getsum();j++; } {for(n=0;n { temp=a[n];a[n]=a[n+1];a[n+1]=temp; } } for(n=1;n<=i;n++)