数据结构课程设计-学生成绩管理系统_第1页
数据结构课程设计-学生成绩管理系统_第2页
数据结构课程设计-学生成绩管理系统_第3页
数据结构课程设计-学生成绩管理系统_第4页
数据结构课程设计-学生成绩管理系统_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务书题目:学生成绩管理系统设计内容及要求:1。课程设计任务内容设计一个简易的学生成绩管理系统,能够完成学生成绩的增加、删除、查找、修改、统计等操作,数据信息保存文件保存。要求系统具有菜单和提示,界面友好。2。课程设计要求实现学生成绩的管理和保存。开发环境:vc++6.0实现目标:熟悉的运用c语言程序编写代码。能够理清整个程序的运行过程并绘画流程图了解如何定义局部变量和整体变量;学会上机调试程序,发现问题,并解决学习使用C++程序来了解程序原理.学习用文档书写程序说明摘要管理信息系统正在向着网络化、智能化和集成化等趋势发展。学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据管理软件。它对于一个学校是不可缺少的重要部分,它的内容对于学校的决策者和管理者来说都至关重要.学生成绩管理管理系统为用户提供充足的信息和快捷的查询手段,实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面的功能,是现实问题的迫切要求.本系统开发的总体任务是实现学生成绩管理的系统化、规范化、自动化.达到提高学生成绩管理效率的目的.与传统管理方法相比有明显的优点:查找方便,可靠性高,保密性好,成本低。彻底改变了以前繁杂的管理模式,实现全面的、相对集中的、职能化的信息综合管理.计算机被用到信息管理系统的环境正是适应了当今时代飞速发展的信息时代.人们深刻的认识到了计算机功能的强大,对于复杂的信息管理,计算机充分发挥着它的优越性。检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低,这些优点极大地减轻了学院教学人员的工作量,缩小开支,提高了学生档案管理的效率和准确性,能够合理的安排时间,学生能够尽快的知道自己的考试成绩。同时,学生管理系统的应用也为今天的教育在未来市场的竞争力有所提高。目录TOC\o”1—3”\h\uHYPERLINK\l”_Toc9981"1。引言5HYPERLINK\l”_Toc23148"2.课题分析7_Toc25036”3.3.函数实现说明10HYPERLINK\l”_Toc8845"4。程序运行结果13HYPERLINK\l”_Toc18029"5.软件使用说明14HYPERLINK\l”_Toc30483”6。结论14_Toc25462”附录:源代码161.引言数据结构在HYPERLINK”http:///view/92404。htm”计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法:SartajSahni在他的《数据结构、算法与应用》一书中称:“数据结构是HYPERLINK”http:///view/178571。htm"数据对象,以及存在于该对象的http:///view/15061.htm"函数来给出."他将数据对象(dataobject)定义为“一个数据对象是实例或值的集合”.CliffordA.Shaffer在《HYPERLINK”/view/2583391.htm”数据结构与算法分析》一书中的定义是:“数据结构是ADT(HYPERLINK”http:///view/178593。htm"抽象数据类型AbstractDataType)的物理实现。"LobertL.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。其中,抽象层是指抽象数据类型层,它讨论数据的HYPERLINK”/view/540423。htm”逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现.数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成成分,数据的逻辑结构,数据的存储结构和数据运算结构。1。1。重要意义一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的.对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的http:///view/575391。htm”软件设计方法和HYPERLINK”http:///view/128511.htm”程序设计语言的出现,HYPERLINK”http:///view/324458.htm”面向对象的程序设计语言就是其中之一.1。2。研究内容在计算机科学中,数据结构是一门研究非HYPERLINK”http:///view/920695。htm”数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的HYPERLINK”/view/1666047。htm”结构类型.“数据结构”作为一门独立的课程在国外是从1968年才开始设立的.1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《HYPERLINK”/view/1145297。htm”计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课.数据结构是介于HYPERLINK”http:///view/1284.htm”数学、计算机硬件和http:///view/7809。htm"数据库系统及其他系统程序的重要基础。HYPERLINK”http:///view/3314。htm”计算机是一门研究用计算机进行信息表示和处理的科学。这里面涉及到两个问题:HYPERLINK”/view/1527。htm”信息的表示,信息的处理。而信息的表示和组织又直接关系到处理信息的程序的效率。随着计算机的普及,信息量的增加,信息范围的拓宽,使许多系统程序和HYPERLINK”/view/330120。htm"应用程序的规模很大,结构又相当复杂.因此,为了编写出一个“好”的程序,必须分析待处理的对象的特征及各对象之间存在的关系,这就是数据结构这门课所要研究的问题。众所周知,计算机的程序是对信息进行加工处理。在大多数情况下,这些信息并不是没有组织,信息(数据)之间往往具有重要的结构关系,这就是数据结构的内容.数据的结构,直接影响算法的选择和效率。计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的HYPERLINK”http:///view/76167。htm”数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述.http:///view/38752。htm”数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并由HYPERLINK”http:///view/178184。htm”计算机程序处理的符号的总称。数据元素是数据的基本单位,在计算机程序中通常作为一个整体考虑。一个数据元素由若干个HYPERLINK”/view/178581。htm”数据项组成。数据项是数据的不可分割的最小单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数”5”,字符”N”等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列6个数据项组成。其中的出生日期又可以由三个数据项:”年”、”月”和”日”组成,则称"出生日期”为组合项,而其它不可分割的数据项为原子项。关键字指的是能识别一个或多个数据元素的数据项。若能起唯一识别作用,则称之为"主”关键字,否则称之为”次”关键字.数据对象是性质相同的数据元素的集合,是数据的一个HYPERLINK”http:///view/276935。htm”子集。数据对象可以是有限的,也可以是无限的。HYPERLINK”/view/51860。htm"数据处理是指对数据进行查找、插入、删除、合并、排序、统计以及简单计算等的操作过程。在早期,计算机主要用于科学和HYPERLINK”http:///view/1590193。htm”工程计算,进入八十年代以后,计算机主要用于数据处理。据有关统计资料表明,现在计算机用于数据处理的时间比例达到80%以上,随着时间的推移和\n请输入学生姓名:";cin〉〉p3—>name;//从键盘接收输入数赋值给结点的姓名cout〈<"\n请输入学生数学成绩:";cin>>p3—〉math;//从键盘接收输入数赋值给结点的数学成绩cout<〈”\n请输入学生英语成绩:”;cin〉〉p3—〉english;//从键盘接收输入数赋值给结点的英语成绩cout〈<"\n请输入学生的计算机基础成绩:”;cin〉>p3->computer;//从键盘接收输入数赋值给结点的计算机成绩 p3->scoresum=p3-〉math+p3—〉english+p3—>computer;//计算结点的总成绩 p3-〉next=NULL;//将要插入结点的指针域设置为空 if(h==NULL)//当链表中没有结点时,将要加入的结点作为头结点 {h=p3;returnh; } p1=p2=h;while(p1!=NULL&&p3—>num〉p1—>num)//查找结点的学号大于要插入结点学号的第一个结点 //指针p1表示符合条件的结点的指针,指针p2是指针p1的前一个结点指针 { p2=p1; p1=p1-〉next; } if(p1==h)//插入位置为头结点前 { p3—〉next=p3; h=p3;returnh; } else//插入位置为链表中间和链表尾部 { p2—〉next=p3; p3-〉next=p1; }studentSum+=1;//学生人数加1 returnh;//返回链表的头结点}voidrecord::PrintRecord(SCORE*h){if(h==NULL) {cout<〈"\n抱歉,没有任何记录!\n”;return; }cout<<”\n学号\t姓名\t数学\t英语\t计算机\t总分”<〈endl; while(h)//输出链表中每个结点的学生成绩信息 {cout〈〈h->num<〈”\t”<〈h—〉name〈〈”\t"〈〈h—〉math〈〈”\t"〈〈h—〉english〈〈"\t"<<h—〉computer<〈”\t”<<h—>scoresum〈〈endl; h=h—>next; }}structSCORE*record::DeleteRecord(structSCORE*h){structSCORE*p1,*p2;intnum; if(h==NULL)//链表为空 {cout<<”\n抱歉,没有任何记录!”;returnh; }p1=p2=h;//将链表的头结点指针h赋值给指针p1和指针p2cout<<"\n请输入要删除记录的学生学号";cin>〉num;while(p1!=NULL&&p1—〉num!=num)//查找结点的学号等于要删除学生学号的第一个结点 //指针p1表示符合条件的结点的指针,指针p2是指针p1的前一个结点指针 { p2=p1; p1=p1—>next; } if(p1=NULL)//没有找到符合要求的结点 {cout〈〈"\n抱歉啊,表中没有该记录哦!";returnh; }if(p1-〉num==num) {studentSum—=1;//学生人数减1 if(p1==h)//删除的是头结点 h=h—〉next; else//删除的是非头结点 p2-〉next=p1-〉next; deletep1;//释放p1所指向的储存单元 }returnh;}structSCORE*record::UpdateRecord(structSCORE*h){structSCORE*p1;intnum; if(h==NULL)//链表为空{cout<<"\n抱歉,没有任何记录!”;returnh; } p1=h;//将链表的头结点指针h赋值给指针p1cout〈<"\n请输入要修改记录的学生学号!";cin〉〉num;while(p1!=NULL&&p1—〉num!=num)//查找结点的学号等于要修改学生学号的指针结点 { p1=p1->next;//将p1指针移到下一个结点 } if(p1==NULL)//没有找到符合要求的结点 {cout〈<”\n抱歉啊,表中没有该记录哦!";returnh; } if(p1-〉num==num)//找到符合要求的结点,并修改学生的相关成绩 {cout〈〈"\n请重新输入学生的数学成绩:”;cin>〉p1—〉math;cout〈〈”\n请重新输入学生英语成绩:”;cin>>p1—〉english;cout<<”\n请重新输入学生的计算机基础成绩:”;cin〉>p1—>computer; p1—〉scoresum=p1—〉math+p1—〉english+p1—〉computer; }returnh;}voidrecord::FindRecord(structSCORE*h,intx,floats1,floats2){if(h==NULL)//链表为空 {cout<〈"\n抱歉,没有任何记录!";return; }cout〈〈"\n学号\t姓名\t数学\t英语\t计算机\t总分”〈<endl;while(h) { if(x==1)//查找数学成绩在某分数段的学生成绩信息if(h—〉math〉=s1&&h—〉math<=s2)cout<<h—〉num〈〈”\t”<<h—>name〈<"\t”<〈h-〉math〈〈"\t"〈〈h->english〈<"\t”<〈h-〉computer〈〈”\t"<〈h—〉scoresum〈<endl; if(x==2)//查找英语成绩在某分数段的学生成绩信息if(h—>english〉=s1&&h-〉english〈=s2)cout〈〈h-〉num<〈”\t"<〈h—>name〈〈”\t”<<h—>math<〈”\t”〈〈h—〉english<〈”\t"〈〈h—>computer〈<”\t"〈〈h—>scoresum〈〈endl; if(x==3)//查找计算机成绩在某分数段的学生成绩信息if(h—〉computer〉=s1&&h—〉english<=s2)cout<<h-〉num<<"\t”<〈h—>name<〈”\t”<〈h->math〈<"\t"〈〈h—〉english〈〈”\t”<<h—〉computer〈〈”\t”〈〈h—〉scoresum〈〈endl; h=h-〉next; }}voidrecord::FindRecord(structSCORE*h,intnum)//根据学生学号查找学生成绩信息{structSCORE*p1; if(h==NULL)//链表为空 {cout<〈”\n抱歉,没有任何记录!";return; } p1=h;//将链表的头结点指针h赋值给指针p1while(p1!=NULL&&p1-〉num!=num)//查找节点的学号等于要查找学生学号的指针结点 { p1=p1->next; } if(p1==NULL)//没有找到 {cout<〈”\n抱歉,表中没有该记录哦!”;return; } if(p1—>num==num)//找到并显示信息 {cout〈〈”\n学号\t姓名\t数学\t英语\t计算机\t总分"<<endl;cout〈<p1—>num〈〈”\t”〈<p1-〉name〈〈"\t”〈〈p1—>math〈<”\t"〈<p1-〉english〈<"\t"〈〈p1->computer〈<”\t”<〈p1—〉scoresum〈〈endl; }}voidrecord::FindRecord(structSCORE*h,stringname)//根据学生姓名查找学生成绩信息{structSCORE*p1; if(h==NULL)//链表为空 {cout<<"\n抱歉,没有任何记录”;return; } p1=h;while(p1!=NULL&&p1—>name!=name) { p1=p1—〉next; }if(p1==NULL) {cout〈〈"\n抱歉,表中没有该记录哦!";return; }if(p1—〉name==name) {cout<〈”\n学号\t姓名\t数学\t英语\t计算机\t总分”〈<endl;cout〈<p1-〉num〈<”\t"<〈p1—〉name〈〈”\t”<<p1—〉math<〈”\t"<<p1-〉english〈<”\t"〈<p1->computer〈〈”\t”<〈p1—〉scoresum<〈endl; }}voidrecord::StatisticRecord(structSCORE*h,intx){structSCORE*p=h;//将链表的头结点指针h复制给指针pintcount=0;//定义统计人数count变量并赋初始值为0 if(p==NULL)//链表为空 {cout〈〈"\n抱歉,没有任何记录!”;return; }while(p) { if(x==1)//统计数学成绩及格的学生人数if(p—〉math〉=60)count+=1; if(x==2)//统计英语成绩及格的学生人数if(p->english>=60)count+=1; if(x==3)//统计计算机成绩及格的学生人数if(p-〉computer〉=60)count+=1; p=p->next; } if(x==1)//显示数学成绩及格的学生人数及及格率 {cout<〈”数学成绩及格学生人数为";cout〈〈count;cout<〈”,及格率为";cout〈<count/(float)studentSum〈〈endl;if(count〈studentSum)cout〈<"\n学号\t姓名\t数学"<<endl;elsecout〈〈”没有数学成绩不及格学生”〈<endl; }else if(x==2)//显示英语成绩及格的学生人数及及格率 {cout〈〈"英语绩及格学生人数为”;cout<<count;cout〈〈”,及格率为”;cout<〈count/(float)studentSum〈<endl;if(count<studentSum)cout〈〈"\n学号\t姓名\t英语”〈<endl;elsecout〈〈"没有英语成绩不及格的学生”〈〈endl; }else if(x==3)//显示计算机成绩及格的学生人数及及格率 {cout<<"计算机成绩及格的学生人数为”;cout〈〈count;cout<<",及格率为”;cout〈〈count/(float)studentSum<<endl;if(count〈studentSum)cout<<”\n学号\t姓名\t计算机"<<endl;elsecout〈<”没有计算机成绩不及格的学生"〈<endl; } p=h;while(p) { if(x==1)//显示数学成绩不及格的学生信息if(p-〉math<60)cout〈〈p—>num〈〈”\t”〈〈p-〉name〈<”\t”〈<p-〉math〈<endl; if(x==2)//显示英语成绩不及格的学生信息if(p->english〈60)cout<〈p-〉num〈<”\t"〈〈p-〉name<<"\t"<〈p-〉english〈<endl; if(x==3)//显示计算机成绩不及格的学生信息if(p—〉computer〈60)cout〈〈p—>num<<"\t"〈<p-〉name<<”\t”<<p-〉computer<〈endl; p=p—〉next; }}voidrecord::StacRecordFine(structSCORE*h){structSCORE*p=h;//将链表的头结点指针h赋值给指针平pintcount=0;//定义统计人数count变量并赋初始值为0 if(p==NULL)//链表为空 {cout〈<”\n抱歉,没有任何记录!”;return; }while(p) { if(p->math>=90&&p—>english>=90&&p—〉computer〉=90) //统计三门成绩全部为优秀的学生人数count+=1; p=p—〉next;//将指针移到下一结点 }cout〈<"三门成绩全为优秀的学生人数为”;cout<<count<〈endl;cout〈〈”\n学号\t姓名\t数学\t英语\t计算机\t总分"〈〈endl; p=h;//将链表的头结点指针h赋值给指针pwhile(p) { if(p-〉math〉=90&&p—〉english〉=90&&p—〉computer>=90)//显示三门成绩全部为优秀的学生信息cout〈<p—〉num〈<"\t"〈〈p—〉name<<”\t”〈〈p-〉math<〈”\t”<<p-〉english<〈"\t"〈〈p—〉computer〈〈”\t"〈<p—〉scoresum〈〈endl; p=p—〉next; }}voidrecord::StacRecordDisq(structSCORE*h){structSCORE*p=h;//将链表的头结点指针h赋值给指针pintcount=0;//定义统计人数count变量并赋初值为0 if(p==NULL)//链表为空 {cout〈〈”\n抱歉,没有任何记录!";return; }while(p) { if(p-〉math〈60&&p->english<60&&p—>computer<60)//统计三门成绩全部为不及格的学生人数count+=1; p=p—〉next; }cout〈<”三门成绩全部不及格的学生信息为";cout〈〈count〈〈endl;cout〈〈"全为不及格的学生信息为:”〈<endl;cout<〈”\n学号\t姓名\t数学\t英语\t计算机\t总分"〈<endl; p=h;while(p) { if(p->math<60&&p—〉english〈60&&p—〉computer〈60)//显示三门成绩全部为不及格的学生信息cout<〈p-〉num〈<"\t"<<p-〉name<<”\t”〈〈p—〉math〈〈"\t"<〈p->english〈〈”\t"〈<p—〉computer<〈”\t”<〈p—〉scoresum〈<endl; p=p—>next; }}voidrecord::SaveRecordFile(structSCORE*h)//将链表中的数据写入文件{structSCORE*p;ofstreamofile;ofile。open(”score。dat",ios::out);//以写的方式打开文件score。dat,若该文件不存在,则创建score。dat文件if(!ofile)//文件打开错误 {cout<〈”\n数据文件打开错误没有将数据写入文件!\n”;return; }ofile<〈"学号\t姓名\t数学\t英语\t计算机\t总分";while(h) {ofile〈〈endl<〈h—〉num<〈"\t”〈〈h—〉name〈〈”\t”<〈h—>math〈<”\t"〈〈h—〉english<〈”\t"〈〈h—>computer<<"\t"〈〈h—〉scoresum;//将当前结点的数据信息写入到文件中 p=h;h=h—>next;deletep; }ofile.close();//关闭文件对象}structSCORE*record::LoadRecordFile(structSCORE*h){ifstreamifile;//定义输入文件对象ifile.open(”score。dat",ios::in);//以读的方式打开文件score.datstructSCORE*p,*q;if(!ifile)//文件打开错误 {cout<〈"\n数据文件不存在,加载不成功!\n";returnNULL; }chars[50];ifile。getline(s,50);//读取文件指针当前行数据while(!ifile.eof()) {studentSum=studentSum+1;//学生人数加1 p=newSCORE;//创建新的score变量ifile〉〉p—〉num>〉p-〉name〉>p—>math>〉p—〉english〉〉p—〉computer〉〉p—〉scoresum;//将数据从文件中读取到新的结点中 p—>next=NULL;//新结点的指针域为空 if(h==NULL)//将新结点插入到链表中 q=h=p;else { q—〉next=p; q=p; } }ifile.close();//关闭文件对象returnh;}voidSystemMenu(recordr)//系统菜单,及处理用户的选择{intchoice;while(1) {cout〈〈”\n\t\t欢迎进入学生成绩管理系统!”;//显示系统主菜单cout<〈”\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@”;cout〈〈”\n\t1、添加学生成绩信息”;cout〈〈"\n\t2、删除学生成绩信息”;cout<<”\n\t3、修改学生成绩信息”;cout<〈"\n\t4、查询学生成绩信息";cout〈<”\n\t5、显示所有学生成绩信息”;cout〈<”\n\t6、统计学生成绩信息";cout<〈”\n\t0、退出系统";cout〈<”\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@”;cout〈〈”\n请根据提示选择操作:”;cin〉〉choice;switch(choice) { case1://增加学生成绩信息head=r。InsertRecord(head);break; case2://删除学生成绩信息head=r。DeleteRecord(head); case3://修改学生成绩信息head=r.UpdateRecord(head); case4://查询学生成绩信息while(1) {intc;cout〈〈”\n************************************************";cout〈〈”\n\t1。根据学号查询学生成绩信息”;cout〈〈"\n\t2。根据姓名查询学生成绩信息";cout〈〈"\n\t3.根据数学分数查询学生成绩信息";cout〈<"\n\t4。根据英语成绩查询学生成绩信息”;cout<<"\n\t5。根据计算机基础成绩查询学生成绩信息";cout<<”\n\t6.返回上级目录”;cout<<”\n************************************************”; //显示查询子菜单cout<〈”\n请根据提示选择操作:”;cin〉〉c; if(c==1)//根据学号查询学生成绩信息 {intx;cout<〈"\n请输入需要查询的学生学号:”;cin>〉x;r.FindRecord(head,x); } if(c==1)//根据学生学号查询学生成绩信息 {intx;cout〈<”\n请输入需要查询的学生学号:”;cin>〉x;r。FindRecord(head,x); } if(c==2)//根据学生姓名查询学生成绩信息 {stringname;cout〈〈”\n请输入需要查询的学生姓名:";cin〉〉name;r.FindRecord(head,name); }if(c==3)//根据数学分数查询学生成绩信息 {floats1,s2;cout〈<”\n请输入查询的数学最低分和最高分:”;cin〉>s1〉>s2;r。FindRecord(head,1,s1,s2); } if(c==4)//根据英语分数段查询学生成绩信息 {floats1,s2;cout〈<”\n请输入查询的英语最低分和最高分:";c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论