C课程设计报告学生成绩管理系统.doc
《C课程设计报告学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《C课程设计报告学生成绩管理系统.doc(29页珍藏版)》请在咨信网上搜索。
学生成绩管理系统 说明:该课程设计包含两个部分,一个为纯dos系统下的控制台程序,用C++编写;另一个为有界面的MFC项目。 目录 纯dos系统下的控制台程序 1、 设计要求...........................................3 2、 设计分析...........................................3 3、 调试说明...........................................4 4、 源代码.............................................8 5、 实验总结..........................................21 有界面的MFC项目 1、设计内容...........................................22 2、设计说明..........................................22 3、设计步骤..........................................22 4、运行演示..........................................27 5、实验总结..........................................29 纯dos系统下的控制台程序 1、 设计要求 现有学生成绩信息,内容如下: 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 请用C/C++编写一系统,实现学生信息管理,软件的入口界面应包括如下几个方面: 功能要求: (1) 信息维护: 要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息 (2) 信息查询: 要求:查询时可实现按姓名查询、按学号查询 (3) 成绩统计: 要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。 (4) 排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格的形式显示排序后的输出结果) 其它要求: (1) 只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读 (2) 至少采用文本菜单界面(如果能采用图形菜单界面更好) (3) 学生可自动增加新功能模块(视情况可另外加分) (4)写出课程设计报告,具体要求见相关说明文档 2、 设计分析 (1)需求分析: 该程序要能实现对学生成绩信息的增加、删除、修改,实现对学生按姓名查询,按学号查询显示,对任意一个课程名和分数段的学生人数进行输出并统计人数,最好还要根据用户的需求对学生成绩排序。 (2)系统性能要求: a. 系统安全、可靠; b. 功能齐全; c.操作方便、界面友好; d.易于维护和扩充。 (3) 系统功能模块: 学生成绩管理系统包括:增加、删除、修改、显示、信息查询、成绩统计、排序几个部分构成。 学生成绩管理系统 (4)模块框架图 排序 成绩统计 信息查询 显示 修改 删除 增加 输入课程名和升降序排序 输入课程名和分数段统计 按姓名查询 按学号查询 3、 调试说明 运行程序后,现出来一个简洁的主界面。 若没有学生信息,显示“这是一个新系统,无学生信息,请先输入。”若已存在学生信息,显示“读取学生信息成功!” 一秒钟后,自动切入主菜单界面。 首先选择1,增加学生信息。 录入学生信息后选择4,显示学生信息。 选择2,删除学生信息,输入要删除的学生姓名,这里我输入的是王露,显示剩下几位同学的信息。 选择3,修改学生信息,输入要修改的学生姓名,然后输入新的学生信息,这里我修改的是张明明,显示修改后的学生信息。 将张明明和王露的信息重新输入。 输入5,信息查询,出来选择界面,“1、按学生姓名查找”、“2、按学生学号查找”,输入1,运行结果如下: 输入2,运行结果如下: 输入6,排序,显示选择界面,用户可根据需求选择科目和升降序,这里我是按语文成绩降序排序。 输入7,成绩统计,用户自行输入要统计的科目和分数段进行统计。这里我统计的是英语成绩在60—90的学生。 4、 源程序代码 #include<iostream> #include<fstream> #include<iomanip> #include<stdlib.h> #include<Windows.h> #include<conio.h> using namespace std ; #define HEADER1 " -----------------------------学生成绩----------------------------\n" #define HEADER2 " | 姓名 | 学号 | 数学 | 语文 | 英语 | 总分 |\n" #define HEADER3 " |----------|----------|----------|----------|----------|----------|\n" class Student //定义学生类 { public: char name[20] ; char id[20] ; int math ; int chinese ; int english ; int sum ; Student *next ; void input() ; void ReadFile(istream & in) ; void show() ; } ; void Student::input() //输入学生信息函数 { cout<<"\n\t\t请输入:"<<endl<<endl ; cout<<"\t\t姓名:" ; cin>>name ; cout<<"\t\t学号:" ; cin>>id ; cout<<"\t\t数学成绩:" ; cin>>math ; cout<<"\t\t语文成绩:" ; cin>>chinese ; cout<<"\t\t英语成绩:" ; cin>>english ; sum = math + chinese + english ; } void Student::ReadFile(istream & in) //读取文件 { in>>name>>id>>math>>chinese>>english>>sum ; } void Student::show() //输出学生信息 { cout<<" |"<<setw(8)<<name<<" |"<<setw(6)<<id<<" |"<<setw(6)<<math<<" |"<<setw(6)<<chinese<<" |"<<setw(6)<<english<<" |"<<setw(7)<<sum<<" |"<<endl ; cout<<" |----------|----------|----------|----------|----------|----------|\n" ; } class StudentMassage //定义学生信息类,包含各项处理功能 { public: StudentMassage() ; ~StudentMassage() ; void ShowMenu() ; void Display() ; void AddItem() ; void Find() ; void save() ; void ModifyItem() ; void RemoveItem() ; void Swap(Student *p1 , Student *p2) ; void Sort() ; int ListCount() ; int Count() ; private: Student *Head , *End ; ifstream in ; ofstream out ; Student *FindItem(char *name) ; Student *FindId(char *id) ; } ; Student *StudentMassage::FindItem(char *name) { Student *p ; for(p = Head ; p->next != End ; p = p->next) if(!strcmp(p->next->name , name)) return p ; return NULL ; } Student *StudentMassage::FindId(char *id) { Student *p ; for(p = Head ; p->next != End ; p = p->next) if(!strcmp(p->next->id , id)) return p ; return NULL ; } StudentMassage::StudentMassage() //构造函数 { Head = new Student ; Head->next = new Student ; End = Head->next ; in.open("sort.txt") ; if(!in) cout<<"\n\t\t这是一个新系统,无学生信息,请先输入。"<<endl ; else { while(!in.eof()) { End->ReadFile(in) ; if(End->name[0]=='\0') break ; End->next = new Student ; End = End->next ; } in.close() ; cout<<"\n\t\t读取学生信息成功!"<<endl ; } } StudentMassage::~StudentMassage() //析构函数 { Student *temp ; save() ; for(temp ; Head->next != End ; ) { temp = Head->next ; Head -> next = Head ->next->next ; delete temp ; } delete Head , End ; } void StudentMassage::ShowMenu() //显示菜单 { cout<<"\n\n\t\t\t\t 主菜单"<<endl<<endl<<endl ; cout<<"\t\t****************************************"<<endl<<endl ; cout<<"\t\t1、增加学生信息 2、删除学生信息"<<endl<<endl ; cout<<"\t\t3、修改学生信息 4、显示学生信息"<<endl<<endl ; cout<<"\t\t5、信息查询 6、排序"<<endl<<endl ; cout<<"\t\t7、成绩统计 0、安全退出"<<endl<<endl ; cout<<"\t\t****************************************"<<endl<<endl<<endl ; cout<<"\t\t请选择:" ; } void StudentMassage::Display() //显示学生信息 { Student *p ; cout<<endl<<HEADER1<<HEADER2<<HEADER3 ; for(p = Head->next ; p != End ; p = p->next) p->show() ; cout<<"\n\n输入任意字符,继续......" ; getch() ; } void StudentMassage::AddItem() //添加学生信息 { End->input() ; End->next = new Student ; End = End->next ; cout<<"\n\t\t添加成功!"<<endl ; cout<<"\n输入任意字符,继续......" ; getch() ; } void StudentMassage::Find() //查找函数 { char name[20] , id[20] ; int x ; Student *p = NULL ; cout<<"\n\t\t****************************************\n" ; cout<<"\t\t\t 1、按学生姓名查找"<<endl ; cout<<"\t\t\t 2、按学生学号查找" ; cout<<"\n\t\t****************************************\n\n\t\t请选择:" ; cin>>x ; switch(x) { case 1: //按姓名查找 { cout<<"\n\t\t请输入要查找的学生的姓名:" ; cin>>name ; if(p = FindItem(name)) { cout<<endl<<HEADER1<<HEADER2<<HEADER3 ; p->next->show() ; cout<<"\n请输入任意字符,继续......" ; getch() ; } else { cout<<"\t\t没有找到该姓名的学生!"<<endl<<endl ; cout<<"请输入任意字符,继续......" ; getch() ; } } break ; case 2: //按学号查找 { cout<<"\n\t\t请输入要查找的学生的学号:" ; cin>>id ; if(p = FindId(id)) { cout<<endl<<HEADER1<<HEADER2<<HEADER3 ; p->next->show() ; cout<<"\n请输入任意字符,继续......" ; getch() ; } else { cout<<"\n\t\t没有找到该学号的学生!"<<endl<<endl ; cout<<"请输入任意字符,继续......" ; getch() ; } } break ; } } void StudentMassage::ModifyItem() //修改学生信息 { char name[20] ; Student *p = NULL ; cout<<"\n\t\t请输入要修改的学生的姓名:" ; cin>>name ; if(p = FindItem(name)) { cout<<"\n\t\t已找到该学生,请输入新的信息!"<<endl ; p->next->input() ; cout<<"\n\t\t修改成功!"<<endl ; Display() ; } else { cout<<"\n\t\t没有找到!"<<endl ; cout<<"\n输入任意字符!继续......." ; getch() ; } } void StudentMassage::RemoveItem() //删除学生信息 { char name[20] ; Student *p = NULL , *temp = NULL ; cout<<"\n\t\t请输入要删除的学生的姓名:" ; cin>>name ; if(p = FindItem(name)) { temp = p->next ; p->next = p->next->next ; delete temp ; cout<<"\n\t\t删除成功!"<<endl ; Display() ; } else { cout<<"\t\t没有找到!"<<endl ; cout<<"输入任意字符!继续......" ; getch() ; } } int StudentMassage::ListCount() //返回记录的学生总数 { Student *p ; int n = 0 ; if(!Head) return 0 ; for(p = Head->next ; p != End ; p = p->next) n ++ ; return n ; } int StudentMassage::Count() //成绩统计 { Student *p ; int x , m , n ,count = 0 ; if(!Head) { cout<<"\n\t\t没有资料可以统计!"<<endl ; return 0 ; } cout<<"\n\t\t****************************************\n" ; cout<<"\t\t\t 1、统计数学成绩"<<endl ; cout<<"\t\t\t 2、统计语文成绩"<<endl ; cout<<"\t\t\t 3、统计英语成绩" ; cout<<"\n\t\t****************************************\n"<<endl ; cout<<"\t\t请选择:" ; cin>>x ; switch(x) { case 1 : { cout<<"\n\t\t请输入分数段的起始分数和终止分数:" ; cin>>m ; cin>>n ; for(p = Head ; p != End ; p = p->next) if(p->math >=m && p->math <= n) { count ++ ; if(count == 1) cout<<endl<<HEADER1<<HEADER2<<HEADER3 ; p->show() ; } cout<<"\n\t\t数学成绩在"<<m<<"--"<<n<<"的学生共有"<<count<<"人!\n"<<endl ; cout<<"输入任意字符,继续......." ; getch() ; } ; break ; case 2: { cout<<"\n\t\t请输入分数段的起始分数和终止分数:" ; cin>>m ; cin>>n ; for(p = Head ; p != End ; p = p->next) if(p->chinese >=m && p->chinese <= n) { count ++ ; if(count == 1) cout<<endl<<HEADER1<<HEADER2<<HEADER3 ; p->show() ; } cout<<"\n\t\t语文成绩在"<<m<<"--"<<n<<"的学生共有"<<count<<"人!\n"<<endl ; cout<<"输入任意字符,继续......." ; getch() ; } ; break ; case 3: { cout<<"\n\t\t请输入分数段的起始分数和终止分数:" ; cin>>m ; cin>>n ; for(p = Head ; p != End ; p = p->next) if(p->english >=m && p->english <= n) { count ++ ; if(count == 1) cout<<endl<<HEADER1<<HEADER2<<HEADER3 ; p->show() ; } cout<<"\n\t\t英语成绩在"<<m<<"--"<<n<<"的学生共有"<<count<<"人!\n"<<endl ; cout<<"输入任意字符,继续......." ; getch() ; } ; break ; } } void StudentMassage::Swap(Student *p1 , Student *p2) //交p1,p2学生信息 { Student *temp = new Student ; strcpy(temp->name , p1->name) ; strcpy(temp->id , p1->id) ; temp->math = p1->math ; temp->chinese = p1->chinese ; temp->english = p1->english ; temp->sum = p1->sum ; strcpy(p1->name , p2->name) ; strcpy(p1->id , p2->id) ; p1->math = p2->math ; p1->chinese = p2->chinese ; p1->english = p2->english ; p1->sum = p2->sum ; strcpy(p2->name , temp->name) ; strcpy(p2->id , temp->id) ; p2->math = temp->math ; p2->chinese = temp->chinese ; p2->english = temp->english ; p2->sum = temp->sum ; } void StudentMassage::Sort() //排序 { Student *p = NULL , *p1 = NULL , *k = NULL ; int n = StudentMassage::ListCount() , x , y ; if(n < 2) { cout<<"数据较少,无法排序!"<<endl ; return ; } cout<<"\n\t\t**************************************\n" ; cout<<"\t\t\t 1、按数学成绩排序"<<endl ; cout<<"\t\t\t 2、按语文成绩排序"<<endl ; cout<<"\t\t\t 3、按英语成绩排序"<<endl ; cout<<"\t\t\t 4、按总分排序" ; cout<<"\n\t\t**************************************\n\n\t请选择:" ; cin>>x ; switch(x) { case 1: { cout<<"\n\t\t**************************************\n" ; cout<<"\t\t\t 1、按降序排序\n\t\t\t 2、按升序排序" ; cout<<"\n\t\t**************************************\n\n\t请选择:" ; cin>>y ; if(y == 1) { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->math < k->math) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } else { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->math > k->math) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } } ; break ; case 2: { cout<<"\n\t\t**************************************\n" ; cout<<"\t\t\t 1、按降序排序\n\t\t\t 2、按升序排序" ; cout<<"\n\t\t**************************************\n\n\t请选择:" ; cin>>y ; if(y == 1) { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->chinese < k->chinese) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } else { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->chinese > k->chinese) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } } ; break ; case 3: { cout<<"\n\t\t**************************************\n" ; cout<<"\t\t\t 1、按降序排序\n\t\t\t 2、按升序排序" ; cout<<"\n\t\t**************************************\n\n\t请选择:" ; cin>>y ; if(y == 1) { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->english < k->english) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } else { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->english > k->english) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } } ; break ; case 4: { cout<<"\n\t\t**************************************\n" ; cout<<"\t\t\t 1、按降序排序\n\t\t\t 2、按升序排序" ; cout<<"\n\t\t**************************************\n\n\t请选择:" ; cin>>y ; if(y == 1) { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->sum < k->sum) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } else { for(p = Head->next ; p != End ; p = p->next) for(k = p->next ; k != End ; k = k->next) { if(p->sum > k->sum) StudentMassage::Swap(p , k) ; } cout<<"\n\t\t排序完成!"<<endl ; StudentMassage::Display() ; getch() ; } } ; break ; } } void StudentMassage::save() //存入文件 { out.open("sort.txt"); for(Student *p=Head->next;p!=End;p=p->next) out<<p->name<<"\t"<<p->id<<"\t"<<p->math<<"\t"<<p->chinese<<"\t"<<p->english<<"\t"<<p->sum<<'\n'; out.close(); } void main() { int x ; bool quit = false ; cout<<"\n\n\n\n\n\n\n\n" ; cout<<"\t\t********************************************"<<endl ; cout<<"\t\t 欢迎使用学生成绩管理系统!"<<endl ; cout<<"\t\t********************************************"<<endl ; StudentMassage Grade ; Sleep(1000) ; while(!quit) { system("cls") ; Grade.ShowMenu() ; cin>>x ; switch(x) { case 0:quit = true ; break ; case 1:Grade.AddItem() ; break ; case 2:Grade.RemoveItem() ; break ; case 3:Grade.ModifyItem() ; break ; case 4:Grade.Display() ; break ; case 5:Grade.Find() ; break ; case 6:Grade.Sort() ; break ; case 7:Grade.Count() ; break ; } } } 5、 实验总结 通过编写这个纯dos系统下的控制台程序,加深了我对如何用C++编写一个简单的应用程序的理解。首先要对程序的设计要求有一个比较明确的认识,然后系统分析与系统设计,最后是代码设计与调试。程序实现上,设计了简单的菜单界面,将各个功能集中出来按照程序编写原则,便于查询。- 配套讲稿:
如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。
关于本文