【标题】学生成绩管理的设计与实现

【开发语言】C++

【主要技术】STL

【概要设计】类名:student

      类成员:No、Name、Math、Eng、Chn、Cpro、Sum

      成员函数:getname、getno、getsum

【基本功能】使用list容器实现对学生成绩类的基本操作:增加、删除、查询、排序

【测试数据】功能测试:按提示输入5组正确的正确的数据和5组有问题的数据,查看程序能否运行正确

      性能测试:随机生成1、5、10、15万条数据,查看程序完成按总分排序所用的时间及打印完成的时间

【测试结果】功能测试:基本功能运行正确,没有进行异常处理

      性能测试:

数据量(万条) 1 5 10 15
排序所用时间(秒) 1.7 25.9 02:35.0 07:49.9
完成打印所用时间(秒) 21.2 01:59.9 05:40.7 11:43.5
排序所需内存(K) 640 3132 6264 9388

  

C语言版随机生成等量的数据情况对比:

数据量(万条) 1 5 10 15
排序所用时间(秒) 0.7 12.2 02:21.6 7:10.7
完成打印所用时间(秒) 8.0 48.7 03:33.5 09:10.7
排序所需内存(K) 1064 4700 9392 14050

 

 

  对比结果:使用C语言实现排序和打印所用时间少,消耗内存更多(C语言版地址:http://www.cnblogs.com/forerve/p/4177245.html)

【详细设计】

  1. #include<iostream>
  2. #include<string>
  3. #include<list>
  4. #include<algorithm>
  5. using namespace std;
  6.  
  7. class student{
  8. private:
  9. string No;
  10. string Name;
  11. double Math;
  12. double Eng;
  13. double Chn;
  14. double Cpro;
  15. double Sum;
  16. public:
  17. student(string no, string name, double math, double eng,
  18. double chn, double cpro){
  19. No = no;
  20. Name = name;
  21. Math = math;
  22. Eng = eng;
  23. Chn = chn;
  24. Cpro = cpro;
  25. Sum = math + eng + chn + cpro;
  26. }
  27.  
  28. friend ostream& operator <<(ostream& out, student& S)
  29. {
  30. out << "\t" << S.No << "\t" << S.Name << "\t" << S.Math << "\t"
  31. << S.Eng << "\t" << S.Chn << "\t" << S.Cpro << "\t" << S.Sum;
  32. return out;
  33. }
  34. const string getno()
  35. {
  36. return No;
  37. }
  38. const string getname()
  39. {
  40. return Name;
  41. }
  42. const double getsum()
  43. {
  44. return Sum;
  45. }
  46. ~student(){
  47.  
  48. }
  49. };
  50.  
  51. void main_remid(); /*输出主要提示信息 */
  52. void score_remind(); /*输出成绩提示信息*/
  53. int add(list<student> &lst); /*增加学生*/
  54. int find(list<student> &lst); /*查询学生信息*/
  55. int del(list<student> &lst); /*删除学生*/
  56. void sort_sum(list<student> &lst); /*按总成绩降序打印学生成绩*/
  57. void sort_no(list<student> &lst); /*按学号升序打印学生成绩*/
  58. bool cmp_no(student& st1, student& st2); /*用于sort的比较函数*/
  59.  
  60. int main()
  61. {
  62. list<student> lst; /*使用list容器存储学生信息*/
  63. char op = ' ';
  64. main_remid();
  65. while(op != 'q')
  66. {
  67. cin >> op;
  68. switch(op)
  69. {
  70. ':
  71. sort_no(lst);
  72. break;
  73. ':
  74. add(lst);
  75. break;
  76. ':
  77. find(lst);
  78. break;
  79. ':
  80. del(lst);
  81. break;
  82. ':
  83. sort_sum(lst);
  84. break;
  85. ':
  86. main_remid();
  87. break;
  88. default:
  89. cout << "输入指令未知,请重新输入" << endl;
  90. break;
  91. }
  92. if(op != 'q')
  93. cout << " 请继续选择您想要的操作:" << endl;
  94. }
  95. ;
  96. }
  97.  
  98. /*增加学生*/
  99. int add(list<student> &lst)
  100. {
  101. string No;
  102. string Name;
  103. double Math;
  104. double Eng;
  105. double Chn;
  106. double Cpro;
  107. cout << " 请输入要增加学生的学号:" << endl;
  108. cin >> No;
  109. for(list<student>::iterator it=lst.begin(); it!=lst.end(); it++)
  110. if(No == it->getno()){
  111. cout << "添加失败,此学号已存在,请重新操作" << endl;
  112. ;
  113. }
  114. cout << " 请输入要增加学生的姓名" << endl;
  115. cin >> Name;
  116. cout << " 请输入要增加学生的数学成绩:" << endl;
  117. cin >> Math;
  118. cout << " 请输入要增加学生的英语成绩:" << endl;
  119. cin >> Eng;
  120. cout << " 请输入要增加学生的语文成绩:" << endl;
  121. cin >> Chn;
  122. cout << " 请输入要增加学生的C语言成绩:" << endl;
  123. cin >> Cpro;
  124. student *st = new student(No, Name, Math, Eng, Chn, Cpro);
  125. lst.push_back(*st);
  126. }
  127.  
  128. /*查询学生信息*/
  129. int find(list<student> &lst)
  130. {
  131. cout << "请输入要查询学生的学号:" << endl;
  132. string no;
  133. cin >> no;
  134. for(list<student>::iterator it=lst.begin(); it!=lst.end(); it++)
  135. {
  136. if(no == it->getno())
  137. {
  138. score_remind();
  139. cout << *it << endl;
  140. ;
  141. }
  142. }
  143. cout << "不存在此学号,请重新选择操作" << endl;
  144. }
  145.  
  146. /*删除学生*/
  147. int del(list<student> &lst)
  148. {
  149. cout << " 请输入要删除学生的学号:" << endl;
  150. string no;
  151. string name;
  152. cin >> no;
  153. for(list<student>::iterator it=lst.begin(); it!=lst.end(); it++)
  154. if(no == it->getno())
  155. {
  156. no = it->getno();
  157. name = it->getname();
  158. lst.erase(it);
  159. cout << "学生" << no << " " << name << "删除成功" << endl;
  160. ;
  161. }
  162. cout << " 删除失败,不存在此学号" << endl;
  163. }
  164.  
  165. /*按学号升序打印学生成绩*/
  166. void sort_no(list<student> &lst)
  167. {
  168. list<student> temp;
  169. temp.push_front(*lst.begin());
  170. for(list<student>::iterator it=++lst.begin(); it!=lst.end(); it++)
  171. {
  172. list<student>::iterator jt = temp.begin();
  173. while(jt!=temp.end() && strcmp(it->getno().c_str(), jt->getno().c_str()))
  174. jt++;
  175. temp.insert(jt, *it);
  176. }
  177. score_remind();
  178. for(list<student>::iterator it=temp.begin(); it!=temp.end(); it++)
  179. {
  180. cout << *it << endl;
  181. }
  182. }
  183.  
  184. /*用于sort的比较函数*/
  185. /*bool cmp_no(const student& st1, const student& st2)
  186. {
  187. return st1.getno() < st2.getno();
  188. }*/
  189.  
  190. /*按成绩升序打印学生成绩*/
  191. void sort_sum(list<student> &lst)
  192. {
  193. list<student> temp;
  194. temp.push_front(*lst.begin());
  195. for(list<student>::iterator it=++lst.begin(); it!=lst.end(); it++)
  196. {
  197. list<student>::iterator jt = temp.begin();
  198. while(jt!=temp.end() && it->getsum()<jt->getsum())
  199. jt++;
  200. temp.insert(jt, *it);
  201. }
  202. score_remind();
  203. for(list<student>::iterator it=temp.begin(); it!=temp.end(); it++)
  204. {
  205. cout << *it << endl;
  206. }
  207. }
  208.  
  209. /*输出主要提示信息 */
  210. void main_remid()
  211. {
  212. cout << "\t\t\t学生成绩类" << endl << endl;
  213. cout << "\t\t1.查询所有学生的成绩信息" << endl;
  214. cout << "\t\t2.增加学生" << endl;
  215. cout << "\t\t3.查找学生" << endl;
  216. cout << "\t\t4.删除学生" << endl;
  217. cout << "\t\t5.查看总分排名" << endl;
  218. cout << "\t\t6.查看提示" << endl;
  219. cout << "\t\tq.退出系统" << endl << endl;
  220. }
  221.  
  222. /*输出成绩提示信息*/
  223. void score_remind()
  224. {
  225. cout << "\t\t\t 学生成绩信息" << endl << endl;
  226. cout << "\t学号\t" << "姓名\t" << "数学\t" << "英语\t"
  227. << "语文\t" << "C语言\t" << "总成绩" << endl;
  228. }

学生成绩管理C++版的更多相关文章

  1. 学生成绩管理C语言版

    [标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数 ...

  2. JAVA课程设计 学生成绩管理

    学生成绩管理 可实现功能: 添加学生功能:姓名.学号.性别.出生年月日.(学号自动生成且唯一) 添加学生成绩功能:每个人都有数学.Java与体育四门课,可分课程输入成绩. 根据学生学号查找学生成绩功能 ...

  3. C语言文件实现学生成绩管理

    C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...

  4. 开学考试学生成绩管理Java

    首先student类 package xuexi; public class Student { private String stunumber; private String name; priv ...

  5. JAVA基础代码分享--学生成绩管理

    问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10  等级为’A’   成绩>=最高分-20  等级为’B’ 成绩>=最高分-30  等级为’C’ ...

  6. JAVA课程设计个人博客 学生成绩管理 201521123001 张陈东芳

    1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现学生信息的添加功能.学生成绩的录入 ...

  7. c++链表实现学生成绩管理系统(简易版)

    #include<iostream> using namespace std; typedef struct student{ int id;//学号 string sex; string ...

  8. 简易学生成绩管理管理系统(java描述)

    没正式学过java,但是系统学过C++后,初略的看了下java的基本语法,于是我就尝试着用java来写个简单的学生管理系统,功能不齐全,以后有空再补充吧. 写的时候定义了不同的包名字,如jeaven1 ...

  9. JAVA课程设计个人博客 学生成绩管理 201521123023 戴建钊

    1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现随机生成10万个学生及其姓名.学号 ...

随机推荐

  1. PMP和PRINCE2的价值各是什么?PRINCE2的含金量如何?PMP和prince2有什么区别?

    很多学员朋友会问我同样的问题:"PMP和PRINCE2到底有什么区别?哪个含金量更高?"看来,这是所有要参加认证的朋友普遍关心的问题,我将根据自己的切身体会,从三个方面回答这个问题 ...

  2. [Python]获取子线程异常信息

    起因 今天在写东西的时候,用到了多线程.遇到了个问题: 子线程的异常,在父线程中无法捕获. 解决 问题代码 问题代码示例代码如下: import threading class SampleThrea ...

  3. 神奇的框架插件jquery layer

    layer 的这个相册功能是不是很炫酷,是滴,这就是layer,只要添加一个layerjs就行了 //Javascript代码 layer.photos({ photos: '#photosDemo' ...

  4. [SinGuLaRiTy] 数论基础

    [SinGuLaRiTy-1004] Copyright (c) SinGuLaRiTy 2017 . All Rights Reserved. 整除: 设a,b为整数,且a不为0,如果存在一个整数q ...

  5. 统一我的博客文章的CSS样式代码

    一.前因后果 之前写博客的时候也有写一些CSS代码来美化,不过都是凌乱的,每次再写一篇,又得重头来过去想,或者去拷贝原来的CSS设置.由于逻辑性不强,找一个配套的格式出来要花费不少时间. 今天我把部分 ...

  6. c++内存优化:二级间接索引模式内存池

    /********************************************************* 在一些不确定内存总占用量的情形下,频繁的使用new申请内存,再通过链表 进行索引似 ...

  7. 原生js轮播图

    //用原生js实现了一个简单的轮播图效果 <!DOCTYPE html><html> <head> <meta charset="UTF-8&quo ...

  8. memcached的安装以及php两个扩展软件安装(memcache、memcached)

    百度云安装包:http://pan.baidu.com/s/1pKZeDwn  k3ap 1.安装memcached Memcached是基于libevent的事件处理,所以它的安装依赖libeven ...

  9. stm32串口通讯问题

    stm32串口通讯问题 在串口试验中,串口通讯不正常,则可能会出现以下问题: 1. 配置完成后,串口没有任何消息打印. 原因:1,端口配置有问题,需要重新检查I/O口的配置 2,接线有问题,检查接线是 ...

  10. Xcode新建python项目

    1.找到电脑上安装Python的路径.OSX系统默认安装了python,默认的路径为/usr/bin/python.不确定的情况下,也可以打开命令行,用 whereis python 命令查看 2.打 ...