《程序设计基础》课程设计------学生成绩排名系统第一章课程设计的目的和要求高级语言课程设计的主要目的是培养学生能够提高综合应用语言的能力,通过课程设计的训练,使学生能及时巩固已学的知识,补充未学的但有必要的内容,掌握应用计算机解决实际问题的基本方法,熟悉程序开发的全过程,提高综合应用语言的能力。
高级语言程序设计的主要任务是要求学生遵循软件开发过程的基本规范,运用结构程序设计的方法按照课程设计的题目要求,分析,编写,调试和测试高级语言程序及编写设计报告。
1.1课程设计的目的1.巩固和掌握高级语言程序设计基本概念;2.掌握基本的程序设计方法;3.掌握开发软件所需的需求定义能力;4.提高书写程序设计说明文档的能力;5.提高综合运用高级语言的能力,强化编程和调试能力。
1.2 课程设计的基本要求1.根据所给的课程设计题目,分析课程设计题目的要求;2.对系统功能模块进行分析,写出详细的设计说明文档;3.编写程序代码,调试所编写程序使其能正确运行;4.设计完成的软件便于完成和使用;5.设计完成后提交课程设计报告;第二章课程设计任务内容2.1 考核内容2.1.1 编写的C++语言程序●针对编写的C++程序,应该主要考查下列内容:●是否符合题目要求,是否完成了主要功能;●是否存在语法错误、逻辑错误及运行错误;●程序设计是否合理;●程序是否具有良好的可读性和可靠性;●是否符合结构化程序设计所倡导的基本理念;●用户界面是否友好。
2.1.2 课程设计报告●针对提交的课程设计报告,应该主要考查下列内容:●程序设计的报告内容是否全面,观点是否正确;●设计过程是否符合结构化程序设计方法的基本原则;●层次是否清楚,语言是否通顺;●各种图表是否规范;是否具有良好的程序设计习惯。
2.2 课题设计一个学生成绩排名系统,实现以下功能:1.具备对成绩的管理功能(添加、删除、排序);2.具备对成绩的统计功能(最高分、最低分、平均分、及格率);3.具备按学号、姓名或课程名查询成绩的功能;备注:成绩记录以下信息:班级、学号、姓名、成绩(百分制)。
第三章详细设计说明3.1 模板设计图该系统可以按功能进行模块划分,其模块如图3-1所示:图3-1 模板设计图其中:1.增加学生成绩记录模块可以完成学生成绩的输入,输入信息包括班级、学号、姓名、课程名、成绩。
2.删除学生成绩记录模块可以完成学生成绩的删除。
3.查询学生成绩记录模块可以完成学生成绩的查询,可以通过输入姓名、学号或者是课程名来查询学生成绩。
4.统计学生成绩记录模块可以完成对学生成绩的统计,可以在已有的学生成绩记录中,输出平均分、最高分、最低分、及格率。
5.学生成绩排序模块可以完成对学生成绩的排序,按照成绩的高低来进行排序。
3.2 函数模块、功能分析、参数说明1.增加学生成绩记录模块(void Manage::add( ))对应于总体设计时的系统功能模块图,各个功能模块的处理逻辑如下:主要完成将数据存入单链表中的工作。
在这次增加学生成绩记录中,记录可以从二进制形式存储的数据文件中读入,也可以从键盘逐个读入学生记录。
如图3-2所示:图3-2 增加学生成绩记录流程图.2.删除学生成绩记录模块(void Manage::del( ))要删除某个学生的信息,就要从磁盘文件中将所有同学信息读出来,然后除要删除的学生外,其它的所有记录再重新存入原来的磁盘文件中,如图3-3所示:NY图3-3 删除学生成绩记录流程图3..查询学生成绩记录模块(void Manage::search( ))开始 读入信息 输入要删除学生的学号是否找到删除成功结束主要完成在单链表中查找满足相关条件的学生记录。
用户可以按照学生的学号、姓名或课程名在单链表中进行查找。
未找到输出提示信息,如图3-4所示:图3-4 查询学生成绩记录流程图4.统计学生成绩记录(void Manage::( ))主要完成对最高分、最低分、平均分、及格率的统计,如图3-5所示:图3-5 统计学生成绩记录流程图5.学生成绩排序模块主要完成按照成绩的高低来进行排序,如图3-6所示:图3-6 学生成绩排序流程图3.3 函数流程图系统首先进入欢迎界面并提示用户输入不同的阿拉伯数字会进行不同的操作。
在用户做出选择后,根据用户输入的阿拉伯数字,程序将调用相应的功能模块,实现用户要进行的操作。
完成一次用户的操作后,再回到欢迎界面,等待用户再做出选择,再调用相应的功能模块……,知道用户在欢迎界面选择了退出,该系统结束,终止执行,如图3-7所示:图3-7 函数流程图第四章编码与调试4.1 软件与测试打开软件后,界面会出现你所需要的功能,根据你要进行的操作来选择。
4.2 运行结果及截图1.此图为程序运行成功后,出现的界面,此为主菜单界面,可依据界面执行。
如图4-1所示:图4-1 主菜单2.首先增加学生成绩记录,输入学生的班级、学号、姓名、课程名、成绩,如图4-2所示:图4-2 增加学生成绩记录3.返回主菜单,进行查询学生成绩记录操作,如图4-3所示:图4-3 查询学生成绩记录4.返回主菜单,选择相应的操作,对学生成绩进行排序,如图4-4所示:图4-4 学生成绩排序5.返回主菜单,进行对学生成绩统计操作,输出最高分、最低分、平均分和及格率,如图4-5所示:图4-5 统计学生成绩6.返回主菜单,进行删除学生成绩记录操作,按照学号来删除学生信息,如图4-6所示:图4-6 删除学生成绩记录第五章课程设计心得与体会本次课程设计,使我对《数据结构》这门课程有了更深入的理解。
《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知识的同时,加强上机实践。
一个人的力量是有限的,要想把课程设计做的更好,就要学会参考一定的资料,吸取别人的经验,让自己和别人的思想有机的结合起来,得出属于你自己的灵感。
在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。
培养了基本的、良好的程序设计技能以及合作能力。
这次课程设计同样提高了我的综合运用所学知识的能力。
程序的编写需要有耐心,有些事情看起来很复杂,但问题需要一点一点去解决,分析问题,把问题一个一个划分,划分成小块以后就逐个去解决。
再总体解决大的问题。
这样做起来不仅有条理也使问题得到了轻松的解决。
在这段时间里,一直修改着相应的程序,并且尝试着调试各种运行结果。
终于,在自己的努力下,课程设计还算是有点起色。
经过这次的编程,我学会了很多东西。
比如说,如何在网上查找一些有用的东西,如何设计自己的目标,如何规划好自己的学习时间,如何让自己的思想应用到程序的编程过程中去,如何合理运用各种资源来提高自己的编程甚至是学习的能力。
另外,还有几点,我深有感触,就是我还问了别人怎样在Word文档中截图、怎样扩大或缩小图片等等。
总之,收获真的是挺大的。
通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。
需要多花时间上机练习。
这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。
这次的课程设计我对于专业课的学习有了更加深刻的认识,以为现在学的知识用不上就加以怠慢,等到想用的时候却发现自己的学习原来是那么的不扎实。
以后努力学好每门专业课,让自己拥有更多的知识,才能解决更多的问题!总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。
不管怎么说,这次C++课程设计不仅给了我提高编程的能力的机会,而且让我的综合素质得到了一个全面的发展。
我相信,这样的日子一定能成为我以后生活中一段美好的回忆。
附录一参考文献[1]谭浩强著《C++程序设计》,清华大学出版社[2]严蔚敏、吴伟民编著《数据结构(C语言版)》,清华大学出版社[3]王杰《数据结构经典算法实现与习题解答》,人民邮电大学出版社_附录二程序清单#include <iostream>#include <string>using namespace std;class Node{public:string banji;//班级string xuehao;string name;string kcm;//课程名int score;int index;Node *next;Node(){index = 0;next = NULL;}Node(string _banji, string _xuehao, string _name, string _kcm, int _score, Node *_next){banji = _banji;xuehao = _xuehao;name = _name;kcm = _kcm;score = _score;next = _next;index = 0;}};class Manage{public:Manage();void app();void del(string &_xuehao); void sort();void stat();//统计void search(string &_xuehao);private:Node *head, *tail;};_Manage::Manage(){head = tail = NULL;}void Manage::app(){Node *u;string banji;//班级string xuehao;string name;string kcm;//课程名int score;char ch;cout << " 班级学号姓名课程名成绩" << endl;do{cin >> banji;cin >> xuehao;cin >> name;cin >> kcm;cin >> score;u = new Node(banji, xuehao, name, kcm, score, NULL); if (head == NULL){head = u;tail = u;}else{tail->next = u;tail = u;}cout << "是否继续(y/n)";cin >> ch;} while (ch == 'y');}void Manage::search(string &_xuehao){Node *u;cout << "查找结果:" << endl;cout << " 班级学号姓名课程名成绩" << endl;for (u = head; u != NULL; u = u->next){if (u->xuehao == _xuehao){cout <<" "<< u->banji << " " << u->xuehao << " " << u->name << " " << u->kcm << " " << u->score << endl; break;}}if (u == NULL)cout << "不存在查找对象!" << endl;}void Manage::del(string &_xuehao){Node *u;Node *p;if (head == NULL){cout << "error" << endl;exit(0);else{for (u = head; u != NULL; u = u->next) {if (u->xuehao == _xuehao){if (u == head){head = head->next;break;}else{p = u->next;break;}p = u;}}}}void Manage::stat(){double aver, max, min, percent; Node *u;int countAll = 0, count = 0;min = max = head->score;for (u = head; u; u = u->next){aver += u->score;if (u->score >= max)max = u->score;if (min > u->score)min = u->score;if (u->score >= 60.0)count++;countAll++;}aver = aver / countAll;percent = count / countAll;cout << "平均分:" << aver << endl;cout << "最高成绩:" << max << endl;cout << "最低成绩:" << min << endl;cout<< "及格率:" << percent << endl;}void Manage::sort(){Node *temp, *temp2;double s;for(temp=head ;temp;temp=temp->next){s = temp->score;if (head->next != NULL)for(temp2 = head,temp->index=1; temp2; temp2=temp2->next) if(temp2->score > s)temp->index++;}cout << " 班级学号姓名课程名成绩" << endl;int count = 0;for (Node *u = head; u; u = u->next)count++;for (int i = 1; i <= count; i++)for (Node *s = head; s; s = s->next)if (s->index == i)cout <<" "<< s->banji << " " << s->xuehao << " " << s->name << " " << s->kcm << " " << s->score << endl; }int main(){Manage m;int operChoice;do{cout<<endl;cout<<"*************************"<<endl;cout<<"* 主菜单*"<<endl;cout<<"* *"<<endl;cout<<"* (1) 统计学生成绩*"<<endl;cout<<"* *"<<endl;cout<<"* (2) 删除学生成绩记录*"<<endl;cout<<"* *"<<endl; cout<<"* (3) 增加学生成绩记录*"<<endl; cout<<"* *"<<endl; cout<<"* (4) 查询学生成绩记录*"<<endl; cout<<"* *"<<endl; cout<<"* (5) 退出*"<<endl; cout<<"* (6) 排序*"<<endl; cout<<"*************************"<<endl; cout<<endl;cout<<"请输入要选择的阿拉伯数字: "; cin>>operChoice;if(operChoice==2){string xuehao;cout << "输入学号:";cin >> xuehao;m.del(xuehao);}if(operChoice==3)m.app();if (operChoice == 1)m.stat();if (operChoice == 4) {string xuehao;cout << "输入学号:";cin >> xuehao;m.search(xuehao);}if (operChoice == 6)m.sort();} while (operChoice != 5);return 0;}。