为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

大学C++课程设计报告--学生成绩管理系统(附源代码)

2017-09-16 44页 doc 283KB 120阅读

用户头像

is_005190

暂无简介

举报
大学C++课程设计报告--学生成绩管理系统(附源代码)大学C++课程设计报告--学生成绩管理系统(附源代码) 课程名称:C/C++语言程序设计 课程编号:@@ 学生姓名:陈@@ 学生班级:信管1071 学 号: 实习地点:科技楼 起止时间:2008.12.29-2009.01.02 指导教师:@@ 通过本课程设计的实践,全面总结C++课程学习中的的数据类型、程序结构、数组、函数、指针、结构体、链表等基本概念,掌 握其使用方法。掌握面向对象程序设计中有关类、对象、继承、重 载、多态性、输入输出流类体系、文件操作的基本概念,初步学会 用类与对象这种面向对象的程序设计方法...
大学C++课程设计报告--学生成绩管理系统(附源代码)
大学C++课程--学生成绩管理系统(附源代码) 课程名称:C/C++语言程序设计 课程编号:@@ 学生姓名:陈@@ 学生班级:信管1071 学 号: 实习地点:科技楼 起止时间:2008.12.29-2009.01.02 指导教师:@@ 通过本课程设计的实践,全面总结C++课程学习中的的数据类型、程序结构、数组、函数、指针、结构体、链等基本概念,掌 握其使用方法。掌握面向对象程序设计中有关类、对象、继承、重 载、多态性、输入输出流类体系、文件操作的基本概念,初步学会 用类与对象这种面向对象的程序设计方法编写应用程序。培养使用 面向对象的程序设计方法编写计算机程序的能力。 通过设计一个《学生成绩统计管理》,进一步熟悉C++中类的概 念、类的封装、继承的实现方式。了解系统开发的需求分析、类层次 设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对 C++的理解与Visual C++环境的使用;逐步熟悉程序设计的方法,并 养成良好的编程习惯。程序设计是一门实践性很强的课程,必须十分 重视实践环节。许多实际的知识不是靠听课和看书学到的,而是通过 长时间的实践积累的。 1.基本功能: a) 成绩的输入(学号、姓名、英语、数学、C++语言„); b) 成绩统计(各科平均成绩、各科成绩“优秀”、“良好”、“中等”、“及 格”、“不及格”的人数及其所占比例); c) 总成绩统计(学生的总成绩、平均成绩及成绩排名) d) 成绩的统计结果显示。 2.扩展功能: a) 学生数据的添加、修改、与删除 b) 学生数据的读取与存储 3.设计要求 1 a)采用面向对象的思想和方法完成设计,最好能够基于windows图形界面 。 b)至少设计四个类;学生类(描述学生基本信息);成绩类:班级类; 课程类(描述课程信息:课程编号,科目名称(如高等数学,大学英语等);学 生成绩及课程信息用文件保存,每个类一个文件,程序执行时从文件读入。 1. 首先,创建了一个student类.在student类的共有部分声明程序所需函数; 然后就是student类的函数实现部分,其中定义student类的带参数及不带参数 构造函数;再是常用函数的调用,并定义系统菜单函数及其界面;最后就是主函 数文件。 Student类的声明如下: 1. 关于计算总成绩和平均成绩以及评定成绩等级的函数,而用于成绩统计中优秀、良好、 中等、及格、不及格的计算,不过为便于表达,此程序采用字母A,B,C,D,E来分别表达上述 2 等级;代码如下: 2.此函数为查找函数的实现过程,通过while switch和if语句以及制表格和setw的使用将输入的数据以表格的形式打印出来,等级一栏宽度略小; 3 3.此函数为删除函数的实现部分,巧妙运用字母i,定义i的值0为数据不 存在,1为数据存在的情况,删除时考虑数据存在与否的问题; 4 4.排序函数中分四种情况排序,分别按学号,总分,平均分来排序,排序结 果也能有升序或降序操作,通过while else语句以及制表格和case的使用将输入的数据排序出来;因函数体过于庞大,在后面代码清单罗列出来时会标示出来。 数据输入以输出方式打开文件,通过this指针和地址引用把写入 的数据加在文件末尾; 5 1运行程序.会出现如下画面,按照提示进行选择. 2. 首先选择1,然后按Enter键.按照提示对学生情况进行输入.如图: 6 3. 按任意键程序自动保存第一个同学的数据,并返回菜单,按照刚才的步骤继续输入第二 个、第三个同学等等的数据; 4. 选择4, 然后按Enter键.对数据进行进行有目的性的排序.如图: 5.譬如选择2按总分排序,按Enter键,再在接下来的提示框中选择降序排序类型, 再按一次Enter键,排序结果如图:符合设计要求,但各科成绩“优秀”、“良好”、 “中等”、“及格”、“不及格”的人数及其所占比例因个人能力有限未能设计出来; 6.按任意键又返回菜单,继续接下来的操作; 7 这次课程设计基本上涵盖了大学学习到的C++ 语言,课程设计题目要求 不仅要求对课本知识有较深刻的了解,同时要求程序设计者有较强的思维和动手能力。这次 课设使我了解我编程思想和编程技巧,也认识了软件生命周期的各个环境,包括构思、设计、 编写、调试、发布、文档化、维护和修订。 C++程序编译是一种要求特别精细的工作,小到一个分号(或点)都能影响整个程序的 运行,这就要求我们编写程序时要特别细心,即使是一个符号,还是一个字母都不能乱用。 在这次的编写过程中,我就因为错把case序列语句里的变量中的p写成q使整个程序瘫痪。它让我记住了学习需要认真、仔细、负责的态度对待。 这次课程设计虽说很辛苦,而且设计出来的程序不全具备课程所需的,不过扩展功能学 生数据的添加、修改、与删除的函数嵌进去,而且排序功能关联升序和降序功能,正所谓鱼 与熊掌不可得兼。这次课程设计,在整个程序中,我们通过使用while循环,switch语句,冒泡排序法,表格设计中的setw()以及类的定义及使用来完成程序设计,使我提高了对C++中语句的使用能力和组合能力,进一步加强了我对使用C++编程的能力。还让我掌握了高级 程序设计语言的基本思想、基本概念、基本方法和基本技能,while语句,this指针,case作为程序的入口,一般结合switch使用等等。 一个星期以来的课程设计,感谢帮助我的同学和师长,通过和他们的交流,互相交流经 验,我这次设计的程序中各大主函数体得以设计出来,感谢他们在我编程过程中为我做的提 醒和指点,这真的很重要。 这次课程设计不仅让我修补了以前学习的漏洞,也让我知道一个道理:编程需要兴趣和 实际动手。这应该可以借鉴在同学或者师长们的编程经验上。创新思维至关重要,相对于我 这略感冗余却实现不了更多功能的程序来说,有必要写出精简的代码,也有助于开发出高效 的程序。虽说我编写的程序离专业人员设计的还有好大一段距离,但它已经是我目前的极限。 我相信,通过我的努力,在不久的将来,我会编出一组真正实用的程序的。 成绩 指导教师 日期 8 程序源代码清单: #include #include #include #include using namespace std; class student { private: string number; string name; double computer; double English; double math; double sum; double ave; char grade; student *head; student *curnode; student *next; public: student();//不带参数的构造函数 student(string ,string ,double ,double ,double ,double =0.0,double =0.0,char =NULL); // 带数据域参数的构造函数,用来动态建立节点 void sum_score();//总分函数 void ave_score();//平均分函数 void grade_score();//成绩等级 void cin_app();//修改用 void app_score(string ,string ,double ,double ,double); //动态的建立节点 void del_score(); //删除全部节点 void displist(); //输出节点中的全部数据 void lookup(int ,string ); //查找函数 void del_score(int ,string ); //删除函数 void compositor(int ,int ); //排序函数 void rework(int ,string ); //修改函数 }; ///////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////student类的实现 void err_char();//输入错误字符检测函数 void score_err();//成绩范围检测函数,当输入成绩不在0到100之间时提示重新输入 9 student::student():next(NULL)//不带参数的构造函数 { head=curnode=this; } //带参数的构造函数 student::student(string Number,string Name,double Computer,double ENglish,double Math,double Sum,double Ave,char Grade):next(NULL) { number=Number; name=Name; computer=Computer; English=ENglish; math=Math; sum=Sum; ave=Ave; grade=Grade; } void student::sum_score()///////////////////////计算总成绩 {sum=computer+English+math;} void student::ave_score()/////////////////////计算平均成绩 {ave=(computer+English+math)/3.0;} void student::grade_score()///////////////////计算成绩等级 { int i; i=ave; switch(i/10) { case 10: grade='A'; break; case 9: grade='A'; break; case 8: grade='B'; break; case 7: grade='C'; break; case 6: grade='D'; break; default: grade='E'; } } void student::app_score(string Number,string Name,double Computer,double ENglish,double Math)//动态建立节点 { curnode->next=new student(Number,Name,Computer,ENglish,Math); curnode=curnode->next; } 10 void student::del_score()//////////////////////删除表中的全部数据 { student *p; curnode=head->next; while(curnode!=NULL) { p=curnode->next; delete curnode; curnode=p; } head->next=NULL; curnode=head; cout<<"?????????????????????"<next==NULL) { cout<<"???????????"<next; cout<<"?????????????????????????????????? ????"<number; cout<<"?"<name; cout<<"?"<computer; cout<<"?"<English; cout<<"?"<math; curnode->sum_score(); 11 cout<<"?"<sum; curnode->ave_score(); cout<<"?"<ave; curnode->grade_score(); cout<<"?"<grade<<"?"<next!=NULL) cout<<"??????????????????????????????????????"<next; } curnode=pw; cout<<"???????????"<>Number; curnode=head->next; while(curnode!=NULL) { b=(Number==curnode->number); curnode=curnode->next; } if(!b) break; else { 12 cout<<"????????????????"<>Name; while(1) { cout<<" 计算机:"; cin>>Computer; while(cin.fail()) { err_char(); cout<<" 计算机:"; cin>>Computer; } if(Computer>=0&&Computer<=100) break; else score_err(); } while(1) { cout<<" 英 语:"; cin>>ENglish; while(cin.fail()) { err_char(); cout<<" 英 语:"; cin>>ENglish; } if(ENglish>=0&&ENglish<=100) break; else score_err(); } while(1) { cout<<" 数 学:"; cin>>Math; while(cin.fail()) { 13 err_char(); cout<<" 数 学:"; cin>>Math; } if(Math>=0&&Math<=100) break; else score_err(); } this->app_score(Number,Name,Computer,ENglish,Math); cout<<"??????????"<next)) { cout<<"?????????"<number==str;break; case 2: b=curnode->name==str;break; 14 default: return; } if(b) { i=0; cout<<"?"<number; cout<<"?"<name; cout<<"?"<computer; cout<<"?"<English; cout<<"?"<math; curnode->sum_score(); cout<<"?"<sum; curnode->ave_score(); cout<<"?"<ave; curnode->grade_score(); cout<<"?"<grade<<"?"<next; } //当i=1是代表没有找到数据 if(i) { cout<<"???????????????????????????????? ??????"<next)) { cout<<"?????????"<number==str;break; case 2: b=curnode->name==str;break; default: return; } if(b) { i=0; pw->next=curnode->next; delete curnode; curnode=pw->next; } else { pw=curnode; curnode=curnode->next; } } //当i=1是代表没有找到数据 if(i) { cout<<"?????????"<next) { curnode=curnode->next; } cout<<" ";system("pause"); } //////////////////////////////////////排序函数的实现 void student::compositor(int n,int m) { if(head->next==NULL) { cout<<"?????????????"<next->next==NULL) { cout<<"?????????????"<next; q=s; p=q->next; while(s!=NULL) { while(p!=NULL) { switch(n) { case 1: { if(m==1) { while(s->numbernumber) 17 { q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p==NULL) break; } } else { while(s->number>p->number) { q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p==NULL) break; } } break; } case 2: { if(m==1) { while(s->sumsum) { q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p==NULL) break; } } else { while(s->sum>p->sum) { 18 q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p==NULL) break; } } break; } case 3: { if(m==1) { while(s->aveave) { q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p==NULL) break; } } else { while(s->ave>p->ave) { q->next=p->next; r->next=p; p->next=s; s=p; p=q->next; if(p==NULL) break; } } break; } default: return; } if(p==NULL) 19 { break; } q=p; p=p->next; } r=s; s=s->next; q=s; p=q->next; if(p==NULL) { break; } } cout<<"????????????????????"<next)) { cout<<"??????????????????"<number==str;break; case 2: b=curnode->name==str;break; default: return; 20 } if(b) { i=0; string Number; string Name; double Computer; double ENglish; double Math; cout<<"??????????????????"<number<<" "; cin>>Number; curnode->number=Number; cout<<" 姓 名:"<name<<" "; cin>>Name; curnode->name=Name; while(1) { cout<<" 计算机:"<computer<<" "; cin>>Computer; while(cin.fail()) { err_char(); cout<<" 计算机:"<computer<<" "; cin>>Computer; } if(Computer>=0&&Computer<=100) break; else score_err(); } curnode->computer=Computer; while(1) { cout<<" 英 语:"<English<<" "; cin>>ENglish; while(cin.fail()) { err_char(); cout<<" 英 语:"<English<<" "; cin>>ENglish; } 21 if(ENglish>=0&&ENglish<=100) break; else score_err(); } curnode->English=ENglish; while(1) { cout<<" 数 学:"<math<<" "; cin>>Math; while(cin.fail()) { err_char(); cout<<" 数 学:"<math<<" "; cin>>Math; } if(Math>=0&&Math<=100) break; else score_err(); } curnode->math=Math; } curnode=curnode->next; } if(i) { cout<<"?????????????"<>n; while(cin.fail()) { err_char(); cout<<" 你的选择是:"; cin>>n; } if(n!=1&&n!=2) n=1; cout<<" 请输入查找关键字:"; cin>>str; a.lookup(n,str); 23 } //修改函数 void fun_rework(student &a) { int n; string str; name_of_number(); cout<<" 你的选择是:"; cin>>n; while(cin.fail()) { err_char(); cout<<" 你的选择是:"; cin>>n; } if(n!=1&&n!=2) n=1; cout<<" 请输入修改关键字:"; cin>>str; a.rework(n,str); } //删除函数的调用 void fun_del(student &a) { int n; string str; name_of_number(); cout<<" 你的选择是:"; cin>>n; while(cin.fail()) { err_char(); cout<<" 你的选择是:"; cin>>n; } if(n!=1&&n!=2) n=1; cout<<" 请输入删除关键字:"; cin>>str; a.del_score(n,str); } //排序函数的调用 void fun_compositor(student &a) { 24 int n,m; cout<<"???????????????????"<>n; while(cin.fail()) { err_char(); cout<<" 你的选择是:"; cin>>n; } if(n!=1&&n!=2&&n!=3) { n=1; } cout<<"???????????????????"<>m; while(cin.fail()) { err_char(); cout<<" 你的选择是:"; cin>>m; } if(n!=1&&n!=2) { m=1; } //输出排序后的结果 25 a.compositor(n,m); } //成绩范围检测函数 void score_err() { cout<<"?????????????????"<>i; if(cin.fail()) //输入非法字符时退出 fun_exit(); switch (i) { case 1: a.cin_app();break; //增加记录 case 2: fun_del(a);break; //删除记录 case 3: fun_rework(a);break; //修改记录 case 4: fun_compositor(a);break; //记录排序 case 5: a.displist();break; //查看记录 case 6: fun_lookup(a);break; //查找记录 case 7: a.del_score();break; //清空链表 default: fun_exit(); //其它键退出 } } } 27
/
本文档为【大学C++课程设计报告--学生成绩管理系统(附源代码)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索