C学生成绩统计管理系统.doc
《C学生成绩统计管理系统.doc》由会员分享,可在线阅读,更多相关《C学生成绩统计管理系统.doc(50页珍藏版)》请在咨信网上搜索。
湖南科技学院 课程设计报告 课程名称: 计算机高级语言(C++)课程设计 课程设计题目: 学生通讯管理系统 系: 数学与计算科学系 专 业: 信息与计算科学 年级、班: 信计0801 姓 名: 谭鄱仑 学 号: 指导教师: 牛志毅 职 称: 讲师 2023年12月 目 录 课程实验报告--------------------------------3 一、需求分析---------------------------------------------3 二、概要设计---------------------------------------------3 三、程序实现思绪-----------------------------------------7 四、设计总结---------------------------------------------7 五、参考文献---------------------------------------------7 六、源代码-----------------------------------------------8 七、运营情况…………………………………………………………16 C++语言程序设计报告 一、 需求分析 用C++编写下面程序 学生成绩记录管理系统(*****) 规定实现如下功能: ①成绩的输入(学号、姓名、英语、数学、C++语言…)。 ②成绩记录(各科平均成绩、各科成绩“优秀”、“良好”、“中档”、“及格”、“不及格”的人数及其所占比例)。 ③总成绩记录(学生的总成绩、平均成绩及成绩排名)。 ④成绩的记录结果显示。 ⑤学生数据的添加、修改、与删除。 ⑥学生数据的读取与存储。 二、 概要设计 重要数据定义以及各程序模块的功能: Student类中: class Student { private: int id;//学号 string name;//姓名 double score[3]; int x;//指示是否存储了数据 double all;//总成绩 int rank;//名次 string dengji;//等级 public: Student();//构造函数 void SetStudentID(int);//输入学生学号 int StudentID();//返回学生学号 void SetStudentName(string str);//输入学生姓名 string StudentName();//返回学生姓名 void SetStudentScore(double y,double s,double c);//输入学生成绩 double StudentYscore();//返回学生英语成绩 double StudentSscore();//返回学生数序成绩 double StudentCscore();//返回学生C++成绩 void SetStudentX(int n);//给鉴定学生数据存在与否的X赋值 void Getall();//计算学生总成绩 void SetRank();//给学生名次值加1 int Rank();//返回学生名次值 int StudentX();//返回鉴定X的值,鉴定是否修改 void RankClear();//给学生的名次赋值为1 void Setdengji(string dengji);//输入等级 double All();//返回学生总成绩 string StudentDengji();//返回学生等级值 }; Studentifo类中: class Studentifo { private: int num;//学生个数 Student *stu;//定义指向存储学生类的指针 public: Studentifo(int n);//构造函数 void LoadID(int n);//输入学生学号 void LoadName(int ,string name);//输入学生姓名 void LoadScore(int ,double,double,double);//输入学生各科成绩 void Setifo();//插入学生数据 void Putifo();//输出所有学生数据 void Clear();//清除所有学生数据 void PutID();//输出指定学生数据 void ClearID();//删除指定学生数据 void MakeRank();//给所有学生排名 void ReSetifo();//修改指定学生数据 void ClearRank();//给指定学生的名次值赋为1 void MakeAll();//计算各个学生的总成绩 void PutifoRank();//按名次输出所有学生数据 int ID(int n);//返回学生学号 double Yscore(int);//返回学生英语成绩 double Sscore(int);//返回学生数学成绩 double Cscore(int);//返回学生C++成绩 double StudentAll(int n);//返回学生总成绩 int StudentRank(int n);//返回学生名次 string Name(int);//返回学生名次 int X(int);//指定X值,拟定是否有存储数据 string Dengji(int n);//返回学生等级 void Numadd();//num值加1 void Xfix(int);//将指定学生的X指示值赋为1 ~Studentifo();//析构函数释放new创建的空间 }; 类外: void DoMenu(int n,Studentifo*t);//将类里的各个函数组合起来实现各个功能,按指定数字执行 void Load(Studentifo *S);//从文献中载入学生信息 void Save(Studentifo *S);//将学生信息保存到文献 void ShowTip(); //显示操作提醒 void ShowMenu(); //显示菜单 主函数的程序流程图 开始 输出菜单及提醒信息 输入功能数字 1 N 2 Y N 3 清除学生数据 Y N 4 插入学生数据 N N Y Y 5 删除指定学生数据 6 N 7 Y Y 超找指定学生数据 修改指定学生数据 按名次输出学生信息 8 N 9 输出所有学生综合信息 载入数据 10 退出 保存 结束 三 程序实现思绪 本程序通过Studentifo类开辟一个Student的类数组用已储存学生数据。通过Studentifo类的公有函数和Student的公有函数进行关联,对Student类里的私有学生数据进行操作,达成输入,解决,输出学生数据的功能。同时运用文献输入输出流在项目文献夹中创建一个date.txt文档进行学生数据的保存与读取。 四 设计总结 (1)摆正心态,不心浮气躁 刚拿到题目,难免会觉得特别迷茫,无从下手,这时假如心浮气躁则会更加的觉得困难重重。但当我摆正心态,静小心来慢慢思考的时候,一个个的思绪不断的的冒出,头脑中的想法远比实践过的多。此时,困难已不是从何下手,而是如何下手会是程序更趋完美。 (2)一鼓作气,个个击破 一旦开始了编程后,就要一鼓作气的继续下去。选择个个击破,然后将所有的程序在组合起来,不久主程序的雏形就能展现出来,接下来的就只是一点点的修改关联是的小错误了。用不了多久任务即可完毕,特有成就感。但是假如断断续续的则会在每次编的时候被冗杂而繁多的定义弄糊涂,从而没有心情继续下去。 (3)有目的地修改、完善 运营时会出现一些错误,但我发现其实里面的参数并不复杂,只要跟着那个error的提醒,一个一个的改下去,其实很简朴的。结果事实也是如此,看完书后,只用了一个小时多一点,102个错误所有搞定了。错误几乎为以下三类: 1. 冒号,分号等符号打错了; 2. 大小写等导致的相应问题; 3. 变量的不完全修改。 改完以后,在执行时我发现界面不好看,于是我又将主界面略加修改了些。看上去美观了不少。再运营功能,前四个都能顺利运营,但对比例饼状图我傻眼了。不管我输入数据与否,输入了什么数据,结果都是同样的,相称离谱。我又糊涂了,搞不清是怎么回事。于是,又去问同学,在他们的帮助下,成功解决这个问题,在此真要好好谢谢他们! 终于大功告成!欣慰在这次实践中,我不仅填补了自己在C++课上所落下的内容,特别是指针那块部分,虽然现在概念搞的还不是很懂,但看见程序是可以理解的。这次C++实践是给我们这一学期来所学知识的一个总复习,总的实践。它让我们把所知道的知识点运用的更好,把不知道的知识点搞得明白了。实践出真知,通过这次实践,我也系统的把课本好好的回顾了下。猛然觉得,C++二级考试也有些把握了。 五 参考文献 谭浩强. C++程序设计. 清华大学出版社, 2023.5 六 源程序 main.cpp /***************************************** 课程设计题目:学生信息管理系统 班级:0901 学号: 姓名:谭鄱仑 *****************************************/ #include"student.h" int main() { int i=0; char ok; Studentifo stuifo; Studentifo *ifo=&stuifo; ShowMenu(); cout<<"选择相应数字进行操作:"; while(i!=9) { cin>>i; system("cls"); ShowMenu(); DoMenu(i,ifo); ShowTip(); } if(flag) cout<<"数据已改动,是否保存Y/N"; cin>>ok; if(ok=='Y'||ok=='y') { ifo->MakeAll(); ifo->ClearRank(); ifo->MakeRank(); Save(ifo); cout<<"数据已保存...按任意键安全退出"; } else cout<<"已安全退出...按任意键返回"; } Student.h #ifndef STUDENT_H_INCLUDED #define STUDENT_H_INCLUDED #include<iostream> #include<cstdlib> #include<string> #include<fstream> #include<sstream> #include<iomanip> using namespace std; class Student { private: int id;//学号 string name;//姓名 double score[3]; int x;//指示是否存储了数据 double all;//总成绩 int rank;//名次 string dengji;//等级 public: Student();//构造函数 void SetStudentID(int);//输入学生学号 int StudentID();//返回学生学号 void SetStudentName(string str);//输入学生姓名 string StudentName();//返回学生姓名 void SetStudentScore(double y,double s,double c);//输入学生成绩 double StudentYscore();//返回学生英语成绩 double StudentSscore();//返回学生数序成绩 double StudentCscore();//返回学生C++成绩 void SetStudentX(int n);//给鉴定学生数据存在与否的X赋值 void Getall();//计算学生总成绩 void SetRank();//给学生名次值加1 int Rank();//返回学生名次值 int StudentX();//返回鉴定X的值,鉴定是否修改 void RankClear();//给学生的名次赋值为1 void Setdengji(string dengji);//输入等级 double All();//返回学生总成绩 string StudentDengji();//返回学生等级值 }; class Studentifo { private: int num;//学生个数 Student *stu;//定义指向存储学生类的指针 public: Studentifo(int n);//构造函数 void LoadID(int n);//输入学生学号 void LoadName(int ,string name);//输入学生姓名 void LoadScore(int ,double,double,double);//输入学生各科成绩 void Setifo();//插入学生数据 void Putifo();//输出所有学生数据 void Clear();//清除所有学生数据 void PutID();//输出指定学生数据 void ClearID();//删除指定学生数据 void MakeRank();//给所有学生排名 void ReSetifo();//修改指定学生数据 void ClearRank();//给指定学生的名次值赋为1 void MakeAll();//计算各个学生的总成绩 void PutifoRank();//按名次输出所有学生数据 int ID(int n);//返回学生学号 double Yscore(int);//返回学生英语成绩 double Sscore(int);//返回学生数学成绩 double Cscore(int);//返回学生C++成绩 double StudentAll(int n);//返回学生总成绩 int StudentRank(int n);//返回学生名次 string Name(int);//返回学生名次 int X(int);//指定X值,拟定是否有存储数据 string Dengji(int n);//返回学生等级 void Numadd();//num值加1 void Xfix(int);//将指定学生的X指示值赋为1 ~Studentifo();//析构函数释放new创建的空间 }; void DoMenu(int n,Studentifo*t);//将类里的各个函数组合起来实现各个功能,按指定数字执行 void Load(Studentifo *S);//从文献中载入学生信息 void Save(Studentifo *S);//将学生信息保存到文献 void ShowTip(); //显示操作提醒 void ShowMenu(); //显示菜单 #include"studentifo.h" #endif // STUDENT_H_INCLUDED Studentifo.h #ifndef STUDENTIFO_H_INCLUDED #define STUDENTIFO_H_INCLUDED bool flag=false ;//数据是否修改过的标志 Student::Student() { id=0; name=""; score[0]=0; score[1]=0; score[2]=0; x=2; all=0; rank=1; dengji=""; } void Student::SetStudentID(int n) { id=n; } void Student::SetStudentName(string str) { if(str=="\0") { string str1; cout<<"输入姓名:"; cin>>str1; this->name=str1; } else this->name=str; } void Student::SetStudentScore(double y,double s,double c) { if(y!=0||s!=0||c!=0) { score[0]=y; score[1]=s; score[2]=c; } else { double a,b,c; cout<<"输入英语成绩:"; cin>>a; cout<<"输入数学成绩:"; cin>>b; cout<<"输入C++成绩:"; cin>>c; score[0]=a; score[1]=b; score[2]=c; } } int Student::StudentID() { return id; } string Student::StudentName() { return name; } double Student::StudentYscore() { return score[0]; } double Student::StudentSscore() { return score[1]; } double Student::StudentCscore() { return score[2]; } void Student::SetStudentX(int n) { x=n; } int Student::StudentX() { return x; } void Student::Getall() { this->all=0; this->all=score[0]+score[1]+score[2]; double n; n=all/3; if(0<=n&&n<60) this->dengji="不及格"; else if(60<=n&&n<70) this->dengji="及格"; else if(70<=n&&n<80) this->dengji="中档"; else if(80<=n&&n<90) this->dengji="良好"; else this->dengji="优秀"; } double Student::All() { return all; } void Student::SetRank() { rank+=1; } int Student::Rank() { return rank; } void Student::RankClear() { rank=1; } void Student::Setdengji(string dengji) { this->dengji=dengji; } string Student::StudentDengji() { return dengji; } Studentifo::Studentifo(int n=100) { num=0; stu=new Student[n]; } Studentifo::~Studentifo() { delete stu; } void Studentifo::Numadd() { num+=1; } void Studentifo::LoadID(int n) { stu[n].SetStudentID(n); } void Studentifo::LoadName(int n,string name) { stu[n].SetStudentName(name); } void Studentifo::LoadScore(int n,double y,double s,double c) { stu[n].SetStudentScore(y,s,c); } void Studentifo::Setifo() { int n; cout<<"输入学号:"; cin>>n; if(stu[n].StudentX()==1||n<=0) cout<<"该学号已有或者学号信息错误"<<endl; else { stu[n].SetStudentID(n); stu[n].SetStudentName("\0"); stu[n].SetStudentScore(0,0,0); stu[n].SetStudentX(1); num++; cout<<endl; } } void Studentifo::Putifo() { int i,s1=0,y1=0,c1=0,y2=0,s2=0,c2=0,y3=0,s3=0,c3=0,y4=0,s4=0,c4=0,y5=0,s5=0,c5=0; double Y=0,S=0,C=0; if(num==0) cout<<"没有学生数据"<<endl; else { cout<<" |***************************学生综合信息**************************|"<<endl; cout<<" | 学号"<<"\t"<<"姓名"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"C++"<<"\t"<<"总成绩"<<"\t"<<"名次"<<"\t"<<"等级 |"<<endl; cout<<" |*****************************************************************|"<<endl; for(i=1; i<=100; i++) { if(stu[i].StudentX()==1) { Y+=stu[i].StudentYscore(); S+=stu[i].StudentSscore(); C+=stu[i].StudentCscore(); cout<<" | "<<stu[i].StudentID()<<'\t'; cout<<stu[i].StudentName()<<'\t'; cout<<stu[i].StudentYscore()<<'\t'; cout<<stu[i].StudentSscore()<<'\t'; cout<<stu[i].StudentCscore()<<'\t'; stu[i].Getall(); cout<<stu[i].All()<<'\t'; cout<<stu[i].Rank()<<'\t'; cout<<stu[i].StudentDengji(); cout<<"\t|"<<endl; cout<<" |*****************************************************************|"<<endl; } if(stu[i].StudentX()==1) { if(stu[i].StudentYscore()>=0&&stu[i].StudentYscore()<60) y1++; else if(stu[i].StudentYscore()>=60&&stu[i].StudentYscore()<70) y2++; else if(stu[i].StudentYscore()>=70&&stu[i].StudentYscore()<80) y3++; else if (stu[i].StudentYscore()>=80&&stu[i].StudentYscore()<90) y4++; else y5++; if(stu[i].StudentSscore()>=0&&stu[i].StudentSscore()<60) s1++; else if(stu[i].StudentSscore()>=60&&stu[i].StudentSscore()<70) s2++; else if(stu[i].StudentSscore()>=70&&stu[i].StudentSscore()<80) s3++; else if (stu[i].StudentSscore()>=80&&stu[i].StudentSscore()<90) s4++; else s5++; if(stu[i].StudentCscore()>=0&&stu[i].StudentCscore()<60) c1++; else if(stu[i].StudentCscore()>=60&&stu[i].StudentCscore()<70) c2++; else if(stu[i].StudentCscore()>=70&&stu[i].StudentCscore()<80) c3++; else if (stu[i].StudentCscore()>=80&&stu[i].StudentCscore()<90) c4++; else c5++; } } cout<<" ___________________________________________________"<<endl; cout<<" |********************各科成绩信息*******************|"<<endl; cout<<"\t |\t"<<"\t"<<"英语"<<"\t\t"<<"数学"<<"\t\t"<<"C++\t |"<<endl; cout<<"\t |平均成绩\t"<<Y/num<<"\t\t"<<S/num<<"\t\t"<<C/num<<"\t |"<<endl; cout<<"\t |不及格\t"<<100*double(y1)/num<<"%"<<"\t\t"<<100*double(s1)/num<<"%"<<"\t\t"<<100*double(c1)/num<<"%"<<"\t |"<<endl; cout<<"\t |及格\t"<<setprecision(4)<<100*double(y2)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s2)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c2)/num<<"%"<<"\t |"<<endl; cout<<"\t |中档\t"<<setprecision(4)<<100*double(y3)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s3)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c3)/num<<"%"<<"\t |"<<endl; cout<<"\t |良好\t"<<setprecision(4)<<100*double(y4)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s4)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c4)/num<<"%"<<"\t |"<<endl; cout<<"\t |优秀\t"<<setprecision(4)<<100*double(y5)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(s5)/num<<"%"<<"\t\t"<<setprecision(4)<<100*double(c5)/num<<"%"<<"\t |"<<endl; cout<<" |___________________________________________________|"<<"\n"<<endl; cout<<"*********************************各等级人数*********************************"<<endl; cout<<"成绩"<<"\t"<<"优秀"<<"\t"<<"良好"<<"\t"<<"中档"<<"\t"<<"及格"<<"\t"<<"不及格为"<<endl; cout<<"英语"<<"\t "<<y5<<"\t "<<y4<<"\t "<<y3<<"\t "<<y2<<"\t "<<y1<<endl; cout<<"数学"<<"\t "<<s5<<"\t "<<s4<<"\t- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩 统计 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文