当前位置:首页 >> 工学 >> STL模板c++学生成绩管理

STL模板c++学生成绩管理


C++课程设计 课程设计

学生资料 姓名: 指导老师: 联系: 学号:

目录 课程题目: 课程题目: ...................................................................................................................................... 2 一 程序设计界面 ............................................................................................................................ 2 需求分析: 二 需求分析: ................................................................................................................................ 7 三 概要设计 .................................................................................................................................... 7 四 详细设计 .................................................................................................................................... 8 五 调试分析 .................................................................................................................................... 8 总结: 六 课程总结: ................................................................................................................................ 8

课程题目: 课程题目:学生成绩管理系统 题目
任务: 建立一个简单的学生信息管理系统, 该系统为注册学生保存基本信息、 选课信息以及课 程成绩。系统要方便基本信息、选课信息、成绩的增加、删除、修改及查询。为实现快速查 询,要求对基本信息、选课信息和成绩建立相应的索引,学生成绩采用平衡二叉树建索引, 对学生姓名采用 Hash 建立索引,对学号实现折半查找。 界面要求:学生成绩管理系统各项功能具有可视性,可操作性 要求: 1) 可以按成绩高低输出所有成绩; 2) 可以按区间段查询成绩; 3) 可以按区间段统计成绩。 4) 可以按成绩、姓名、学号等信息查询。 5) 二叉树的各种操作要求写出递归和非递归两种方式。

程序设计 设计界面 一 程序设计界面 1.1. 系统初始界面:

1.2.录入学生基本信息界面

在控制台界面中输入 A,按回车键,根据界面提示开始录入学生基本信息: 1.请输入学生数量:2 2.请输入第 1 个学生的学号, 姓名, 性别, 年龄, 电话号码: 孟 女 19 8940214 01 姓名, 性别, 年龄, 电话号码: 刘 男 20 8940124 02 3.请输入第 2 个学生的学号, 提示学生信息录入完毕,则返回初始界面。

1.3.添加课程界面

1.初始界面中输入所要选择的操作:G,按回车键 2.请输入课程数量:2 3.请输入第一个课程信息:课程名称 数据结构 4.请输入第二个课程信息:课程名称 操作系统 5.提示添加课程成功。返回初始界面。

1.4.录入学生成绩界面

1.初始界面中输入所要选择的操作:B, 按回车键 2.请输入学号为:1,学生姓名为:孟的各科成绩 [数据结构]的成绩为:86 [操作系统]的成绩为:89 3.请输入学号为:2,学生姓名为:刘的各科成绩 [数据结构]的成绩为:96 [操作系统]的成绩为:98 4.请输入学号为:3 学生姓名为:梦的各科成绩 [数据结构]的成绩为:78 [操作系统]的成绩为:97 5.请输入学号为:4 学生姓名为:赵的各科成绩 [数据结构]的成绩为:86 [操作系统]的成绩为:79 6.提示学生成绩输入完毕,返回初始界面。

1.5.查询学生成绩界面

1.初始界面中输入所要选择的操作:C , 按回车键 @。2.在输入选项中选择 N,按学号查找学生成绩 3.输入学号: 4.显示该学号对应的学生的学生成绩 @。2. 在输入选项中选择 M,按姓名查找学生成绩 3.输入学生姓名: 4:显示该姓名对应的学生的学生成绩 @。2. 在输入选项中选择 F,显示所有学生的成绩信息 @。2. 在输入选项中选择 U,返回上一页。

1.6.统计成绩界面

1.输入 T,进入统计学生成绩界面 2.选择操作 S,统计不及格学生 3.选择操作 P,统计成绩区间情况 1.7.选择操作 E,退出系统。 需求分析: 二 需求分析:
建立一个简单的学生信息管理系统, 该系统为注册学生保存基本信息、 选课信息以及课 程成绩。系统要方便基本信息、选课信息、成绩的增加、删除、修改及查询。为实现快速查 询,要求对基本信息、选课信息和成绩建立相应的索引,学生成绩采用平衡二叉树建索引, 对学生姓名采用 Hash 建立索引,对学号实现折半查找。可以按成绩高低输出所有成绩;可 以按区间段查询成绩;可以按区间段统计成绩。可以按成绩、姓名、学号等信息查询。

概要设计 三 概要设计 录入学生基本信 息模块:录入学生 基本信息

添加课程模 块:添加学生 的课程信息

查询学生信息 模块:查询学 生的基本信息

统计学生成绩模 块:统计不及格学 生的情况

四 详细设计
参考附录A

五 调试分析 对于删除功能有一点问题。正在调试中。 总结:通过本课程的学习, 六 课程总结:通过本课程的学习,
通过本次课程设计,我深入体会到数据结构的重要性。同时对面向对像设计有更深的 体会, 对于对象的完备性还有对象的职责划分有更一步的理解, 我们小组的同学的编程能力 都有所提高,并且对算法和 STL 有了更一步的认识。 代码结构 附录 A:代码结构 代码 /**********************StudentMange.cpp************************/ #include "stdafx.h" #include<algorithm> #include"Student.h" #include"Course.h" #include<iostream> #include<map> #include<string> #include<fstream> #include<iomanip> #include<list> using namespace std; char chose; int Num; int CNum; bool haveinfo = false; list<Course> lc; list<Student> ls; list<Course>::iterator ic; list<Student>::iterator is; map<int,Student> ms; //按学号建立索引 void ShowMenu(); void findfailStudent(); void AddStudentInfo(); void AddScore(); void FindScore(); void statStudentScore(); void FindAllStudent(); void FindStudentByNo(); void findStudenScoreByArea();

int main(int argc, char* argv[]) { ShowMenu(); return 0; }

void ShowMenu() { cout<<"*******************************************"<<endl; cout<<"*********欢迎使用学生成绩管理系统**********"<<endl; cout<<"**** 录入学生基本信息(A) ******"<<endl; cout<<"**** 添加课程 (G) ******"<<endl; cout<<"**** 录入学生成绩 (B) ******"<<endl; cout<<"**** 查询学生成绩 (C) ******"<<endl; cout<<"**** 统计成绩 (T) ******"<<endl; cout<<"**** 退出系统 (E) ******"<<endl; cout<<"*******************************************"<<endl; cout<<"*******************************************"<<endl; cout<<endl; cout<<"请输入所要进行的操作:"; cin>>chose; switch(chose) { case'a':case'A': AddStudentInfo();break; case'b':case'B': AddScore();break; case'c':case'C': FindScore();break; case't':case'T': statStudentScore();break; case'e':case'E': system("PAUSE");break; case'g':case'G': Student::AddCourseInfo();ShowMenu(); break; default:system("cls");cout<<"Error:输入错误,请重新输入!"<<endl;ShowMenu(); }

} //添加学生信息 void AddStudentInfo() { ofstream of("student.txt"); if(!of) { cerr<<"打开文件错误"<<endl;

exit(1); } cout<<"***************************"<<endl; cout<<"请输入学生数量"<<endl; cin>>Num; //录入信息并保存到文本文件中 of<<setiosflags(ios::left)<<setw(10)<<" 学 号 "<<setw(10)<<" 姓 名 "<<setw(10)<<" 性 别 "<<setw(10)<<"年龄"<<setw(10)<<"电话号码"<<endl; for(int i=0; i<Num; i++) { cout<<"***************************"<<endl; cout<<"请输入第"<<i+1<<"个学生的学号、姓名、性别、年龄、电话号码。"<<endl; Student*s = new Student(); cin>>s->No>>s->Name>>s->Sex>>s->Age>>s->Phone; s->MyCourse = Student::AllCourse;

//cout<<ms[1].No<<endl;

/*for(iter = Student::AllCourse.begin(); iter!=Student::AllCourse.end(); iter++) { cout<<(*iter).CourseName<<endl; }*/ ls.push_back(*s); of<<setiosflags(ios::left)<<setw(10)<<s->No<<setw(10)<<s->Name<<setw(10)<<s->Sex<< setw(10)<<s->Age<<setw(10)<<s->Phone<<endl; } of.close(); /*for(iter = ls.begin(); iter!=ls.end(); iter++) { cout<<(*iter).Name<<endl; }*/ haveinfo = true; cout<<endl; cout<<"**************添加学生信息成功******************"<<endl; system("cls");

ShowMenu(); } //输入学生成绩 void AddScore() { if(!haveinfo) { cout<<endl; cout<<"请首先完成学生基本信息输入"<<endl; cout<<endl; cout<<"输入学生基本信息请按(A)"<<" "<<"退出请按任意键"<<endl; cout<<endl; cin>>chose; if(chose=='A'||chose=='a') AddStudentInfo(); } else { for(is = ls.begin(); is!=ls.end(); is++) { cout<<"***********************************"<<endl; cout<<"请输入学号为:"<<(*is).No<<"学生姓名为:"<<(*is).Name<<"的各科 成绩"<<endl; (*is).MyCourse = Student::AllCourse; for(ic = (*is).MyCourse.begin(); ic!=(*is).MyCourse.end(); ic++) { cout<<"["<<(*ic).CourseName<<"]"<<"的成绩为:"<<endl; cin>>(*ic).CourseScore; } //按学号建立索引 ms.insert(pair<int,Student>(is->No,*is)); //课程与分数建立索引 is->CourseRScore(); /*for(ic = (*is).MyCourse.begin(); ic!=(*is).MyCourse.end(); ic++) { cout<<(*ic).CourseName<<"的成绩为:"<<endl; cout<<(*ic).CourseScore;

}*/

} } system("cls"); cout<<"****成绩录入成功*****"<<endl; ShowMenu(); }

//查询学生信息 void FindScore() { cout<<"**********************************"<<endl; cout<<"**********查询学生成绩************"<<endl; cout<<"***** 按学号查找 (N) ******"<<endl; cout<<"***** 姓名查找 (M) ******"<<endl; cout<<"***** 所有学生的成绩(F) ******"<<endl; cout<<"***** 返回上一页 (U) ******"<<endl; cout<<"**********************************"<<endl; cout<<"**********************************"<<endl; cout<<endl; cout<<"请输入所要进行的操作:"; cin>>chose; switch(chose) { case'f':case'F': FindAllStudent();break; case'n':case'N': FindStudentByNo();break; case'u':case'U': ShowMenu();break; default:cout<<"输入错误,请重新输入!"<<endl;FindScore(); }

} //按学号折半查找学生信息 void FindStudentByNo() { int sn; cout<<endl;

cout<<"请输入要查找的学生学号:"<<endl; cin>>sn; Student fs = ms[sn]; //输出此学生的相关信息 cout<<"学号"<<setw(10)<<"姓名"<<endl; cout<<fs.No<<setw(10)<<fs.Name<<endl; for(ic = fs.MyCourse.begin(); ic!=fs.MyCourse.end(); ic++) { cout<<"课程名称:"; cout<<setw(5); cout<<(*ic).CourseName; cout<<setw(5); cout<<"课程分数:"; cout<<setw(5); cout<<(*ic).CourseScore; } cout<<endl; FindScore();

}

//查询学生的所有成绩 void FindAllStudent() { cout<<"学号"<<setw(10)<<"姓名"<<setw(10); for(ic = Student::AllCourse.begin(); ic!=Student::AllCourse.end(); ic++) { cout<<(*ic).CourseName<<" "; } cout<<endl; for(is = ls.begin(); is!=ls.end(); is++) { cout<<(*is).No<<setw(10)<<(*is).Name<<setw(10); for(ic = (*is).MyCourse.begin(); ic!=(*is).MyCourse.end(); ic++) { cout<<(*ic).CourseScore<<" "; }

cout<<endl; } FindScore();

}

//统计成绩 void statStudentScore() { //具有不及格成绩的学生 cout<<"*************统计成绩**************"<<endl; cout<<"***** 统计不及格学生 (S) *****"<<endl; cout<<"***** 统计成绩区间情况(P) *****"<<endl; cout<<"***********************************"<<endl; cout<<endl; cout<<"请输入所要进行的操作:"; cin>>chose; switch(chose) { case's':case'S':findfailStudent();break; case'p':case'P':findStudenScoreByArea();break; default:cout<<"输入错误,请重新输入!"<<endl;FindScore(); }

} //统计不及格学生 void findfailStudent() { for(is = ls.begin(); is!=ls.end(); is++) { for(ic = (*is).MyCourse.begin(); ic != (*is).MyCourse.end(); ic++) { if((*ic).CourseScore<60) {

cout<<endl; cout<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"不及格科目"<<endl; cout<<(*is).No<<setw(10)<<(*is).Name<<setw(10)<<(*ic).CourseName<<":"<<(*ic).Cours eScore<<endl; } } } statStudentScore();

} //按区间查询学生成绩 void findStudenScoreByArea() { string findCourse; int f,s; cout<<endl; cout<<"请输入要查找的科目"<<endl; cin>>findCourse; cout<<"************输入区间参数(如,60 70)代表 60 至 70************"<<endl; cin>>f>>s; cout<<"学号"<<setw(10)<<"姓名"<<setw(10)<<"分数"<<endl; for(is = ls.begin(); is!=ls.end(); is++) { if(is->cm[findCourse]>=f&&is->cm[findCourse]<=s) { cout<<is->No<<setw(10)<<is->Name<<setw(10)<<is->cm[findCourse]<<endl; } else {

} }

cout<<endl; //返回到成绩查找菜单 statStudentScore(); }

/**********************Student.h************************/ #if !defined(AFX_STUDENT_H__CC6FCD1E_97CA_46CA_BB7F_6674DEEF92D8__INCLU DED_) #define AFX_STUDENT_H__CC6FCD1E_97CA_46CA_BB7F_6674DEEF92D8__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include"Course.h" #include<algorithm> #include<string> #include<list> #include<map> using namespace std; class Student { public: Student(); virtual ~Student(); int No; //学号 string Name; //姓名 string Sex; //性别 int Age; //年龄 string Phone; //电话号码 list<Course> MyCourse; map<string,int> cm; static list<Course> AllCourse;//课程信息 static void AddCourseInfo();//添加课程信息 void CourseRScore();//建立课程索引 }; #endif // !defined(AFX_STUDENT_H__CC6FCD1E_97CA_46CA_BB7F_6674DEEF92D8__INCLUD ED_)

/****************************Student.cpp***************************************/ #include "stdafx.h" #include<algorithm> #include"Student.h" #include"Course.h" #include<iostream> #include<map> #include<string> #include<fstream> #include<iomanip> #include<list> using namespace std; ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// Student::Student() { } Student::~Student() { } list<Course> Student::AllCourse; void Student:: AddCourseInfo(){ int CNum; cout<<"*********************"<<endl; cout<<"请输入课程数量"<<endl; cin>>CNum; for(int i=0; i<CNum; i++) { Course*c = new Course(); cout<<"请输入第"<<i+1<<"个课程信息:课程名称"<<endl; c->CourseNo = i; cin>>c->CourseName; AllCourse.push_back(*c);

} cout<<endl; cout<<"*************添加课程信息成功***************"<<endl; cout<<endl; system("cls"); } //建立课程与分数的索引 void Student::CourseRScore(){ list<Course>::iterator lc; for(lc = MyCourse.begin(); lc != MyCourse.end(); lc++) cm.insert(pair<string,int>((*lc).CourseName,(*lc).CourseScore)); }

/***********************************Course.h***********************************/ // Course.h: interface for the Course class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_COURSE_H__86B85C3C_C0F8_4DBC_9A98_1E1004D33636__INCLUDE D_) #define AFX_COURSE_H__86B85C3C_C0F8_4DBC_9A98_1E1004D33636__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include"Course.h" #include<algorithm> #include<iostream> #include<string> #include<list> #include<map> using namespace std; class Course { public: Course(); virtual ~Course(); int CourseNo;

string CourseName; int CourseScore;

}; #endif // !defined(AFX_COURSE_H__86B85C3C_C0F8_4DBC_9A98_1E1004D33636__INCLUDED _)


更多相关文档:

C++ 模板和STL_进阶_教学视频大全

C++进阶者模板STL视频教程,达内精品在线TMOOC全套教学,在线学习进阶课程,C++ 模板STL视频下载

标准模板库STL练习题

第十一章 标准模板库(STL)习题 1 标准模板库( 第...但迭代子保存所操作的特定容器需要的状态信息, 从而...答:C++标准模板库提供三种顺序容器:vector,list 和 ...

基于C++的学生信息管理系统

基于C++学生信息管理系统_IT/计算机_专业资料。毕业论文分类号: 2011 届本科生...MFC,只要愿意,用 Visual C++来编写 SDK 程序, 或者使用 STL,ATL,一样没有...

STL学习总结大全

统一的内存管理使得 STL 库的可用性、可移植行、以及效率都有 了很大的提升。...《C++标准程序库》本书将焦点放在标准模板库(Standard Template Library)身上,...

C++&STL复习整理

C++&STL复习整理_理学_高等教育_教育专区。C++基础及...函数和模板参数不能为 auto (一)、顺序容器 //...它提供了自动内存管理功能,可以动态的改变 vector ...

STL运用的C++技术(1)——成员模板

STL 运用的 C++技术(1)——成员模板 STLC++标准库的重要组成部分之一,它不仅是一个可复用的组件 库,更是一个包含算法与数据结构的软件框架,同时也是 C++...

C++STL学习经典

里倒水的水壶,排污的管道,撵人的那个物业管理人员…...//显示序列的状态信息 cout<<"vec1.size(): "<...C++ 标准模板库(STL) 20页 1下载券 多年学习C++...

实验报告_实验14 标准模板库 STL(1)

实验报告_实验14 标准模板STL(1)_数学_自然科学_专业资料。c++实验报告_实验14 标准模板STL(1)实验报告_实验 14 标准模板STL(1)(学 生学号_姓名)...

STL模板实现机制

C++之父 Bjarne 谈 C++中的 STL 模板在 1994 年...国际标准必须用大量的篇幅来关注细节信息;实际上,...运算也是很关键的,在这些环境中,资源的管理和正确性...

常用STL模板的使用

常用标准模板库(STL)的使用 容器部分 Vector 1.特点 优点: 随机访问、动态改变...vector <int> vTest; 3.访问 通过指示器 iterator(相当于 C++里的指针)来操作...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com