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

【开发语言】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)

【详细设计】

 #include<iostream>
 #include<string>
 #include<list>
 #include<algorithm>
 using namespace std;

 class student{
 private:
     string No;
     string Name;
     double Math;
     double Eng;
     double Chn;
     double Cpro;
     double Sum;
 public:
         student(string no, string name, double math, double eng,
                 double chn, double cpro){
                 No = no;
                 Name = name;
                 Math = math;
                 Eng = eng;
                 Chn = chn;
                 Cpro = cpro;
                 Sum = math + eng + chn + cpro;
                 }

         friend ostream& operator <<(ostream& out, student& S)
         {
             out << "\t" << S.No << "\t" << S.Name << "\t" << S.Math << "\t"
              << S.Eng << "\t" << S.Chn << "\t" << S.Cpro << "\t" << S.Sum;
             return out;
         }
         const string getno()
         {
            return No;
         }
         const string getname()
         {
             return Name;
         }
         const double getsum()
         {
             return Sum;
         }
          ~student(){

          }
 };

 void main_remid(); /*输出主要提示信息 */
 void score_remind(); /*输出成绩提示信息*/
 int add(list<student> &lst); /*增加学生*/
 int find(list<student> &lst); /*查询学生信息*/
 int del(list<student> &lst); /*删除学生*/
 void sort_sum(list<student> &lst); /*按总成绩降序打印学生成绩*/
 void sort_no(list<student> &lst); /*按学号升序打印学生成绩*/
 bool cmp_no(student& st1, student& st2); /*用于sort的比较函数*/

 int main()
 {
     list<student> lst; /*使用list容器存储学生信息*/
     char op = ' ';
     main_remid();
     while(op != 'q')
     {
         cin >> op;
         switch(op)
         {
             ':
                 sort_no(lst);
                 break;
             ':
                 add(lst);
                 break;
             ':
                 find(lst);
                 break;
             ':
                 del(lst);
                 break;
             ':
                 sort_sum(lst);
                 break;
             ':
                 main_remid();
                 break;
             default:
                 cout << "输入指令未知,请重新输入" << endl;
                 break;
         }
         if(op != 'q')
             cout << " 请继续选择您想要的操作:" << endl;
     }
     ;
 }

 /*增加学生*/
 int add(list<student> &lst)
 {
     string No;
     string Name;
     double Math;
     double Eng;
     double Chn;
     double Cpro;
     cout << " 请输入要增加学生的学号:" << endl;
      cin >> No;
      for(list<student>::iterator it=lst.begin(); it!=lst.end(); it++)
          if(No == it->getno()){
              cout << "添加失败,此学号已存在,请重新操作" << endl;
              ;
          }
      cout << " 请输入要增加学生的姓名" << endl;
      cin >> Name;
      cout << " 请输入要增加学生的数学成绩:" << endl;
      cin >> Math;
      cout << " 请输入要增加学生的英语成绩:" << endl;
      cin >> Eng;
      cout << " 请输入要增加学生的语文成绩:" << endl;
      cin >> Chn;
      cout << " 请输入要增加学生的C语言成绩:" << endl;
      cin >> Cpro;
      student *st = new student(No, Name, Math, Eng, Chn, Cpro);
      lst.push_back(*st);
 }

 /*查询学生信息*/
 int find(list<student> &lst)
 {
     cout << "请输入要查询学生的学号:" << endl;
     string no;
     cin >> no;
     for(list<student>::iterator it=lst.begin(); it!=lst.end(); it++)
     {
         if(no == it->getno())
         {
             score_remind();
             cout << *it << endl;
             ;
         }
     }
         cout << "不存在此学号,请重新选择操作" << endl;
 }

 /*删除学生*/
 int del(list<student> &lst)
 {
     cout << " 请输入要删除学生的学号:" << endl;
     string no;
     string name;
     cin >> no;
     for(list<student>::iterator it=lst.begin(); it!=lst.end(); it++)
         if(no == it->getno())
         {
             no = it->getno();
             name = it->getname();
             lst.erase(it);
             cout << "学生" << no << " " << name << "删除成功" << endl;
             ;
         }
     cout << " 删除失败,不存在此学号" << endl;
 }

 /*按学号升序打印学生成绩*/
 void sort_no(list<student> &lst)
 {
     list<student> temp;
     temp.push_front(*lst.begin());
     for(list<student>::iterator it=++lst.begin(); it!=lst.end(); it++)
     {
         list<student>::iterator jt = temp.begin();
         while(jt!=temp.end() && strcmp(it->getno().c_str(), jt->getno().c_str()))
             jt++;
         temp.insert(jt, *it);
     }
     score_remind();
     for(list<student>::iterator it=temp.begin(); it!=temp.end(); it++)
     {
         cout << *it << endl;
     }
 }

 /*用于sort的比较函数*/
 /*bool cmp_no(const student& st1, const student& st2)
 {
     return st1.getno() < st2.getno();
 }*/

 /*按成绩升序打印学生成绩*/
 void sort_sum(list<student> &lst)
 {
     list<student> temp;
     temp.push_front(*lst.begin());
     for(list<student>::iterator it=++lst.begin(); it!=lst.end(); it++)
     {
         list<student>::iterator jt = temp.begin();
         while(jt!=temp.end() && it->getsum()<jt->getsum())
             jt++;
         temp.insert(jt, *it);
     }
     score_remind();
     for(list<student>::iterator it=temp.begin(); it!=temp.end(); it++)
     {
         cout << *it << endl;
     }
 }

 /*输出主要提示信息 */
 void main_remid()
 {
     cout << "\t\t\t学生成绩类" << endl << endl;
     cout << "\t\t1.查询所有学生的成绩信息" << endl;
     cout << "\t\t2.增加学生" << endl;
     cout << "\t\t3.查找学生" << endl;
     cout << "\t\t4.删除学生" << endl;
     cout << "\t\t5.查看总分排名" << endl;
     cout << "\t\t6.查看提示" << endl;
     cout << "\t\tq.退出系统" << endl << endl;
 }

 /*输出成绩提示信息*/
 void score_remind()
 {
     cout << "\t\t\t 学生成绩信息" << endl << endl;
     cout << "\t学号\t" << "姓名\t" << "数学\t" << "英语\t"
     << "语文\t" << "C语言\t" << "总成绩" << endl;
 }

学生成绩管理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. Windows 10 IoT Serials 8 – 如何改变UWP应用的目标平台

    Windows Insider计划直接加速了Windows系统的迭代,缩短了系统发布的周期.就Windows 10 IoT Core而言,迭代的速度和Windows 10 for PC.Windows ...

  2. Linux集群

    集群的起源: 集群并不是一个全新的概念,其实早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发.由于主要用于科学工程计算,所以这些系统并不为大家所熟知.直到Linux集群的出现,集群的概念 ...

  3. js原生的轮播图

    <!DOCTYPE html>   <html>   <head>   <meta charset="UTF-8">   <t ...

  4. 【Hexo】(一)使用HEXO配置环境,创建Hello World

    现场直播,呵呵,就是我完成一步,就记录一下: 一.配置环境 1.安装 Node 下载地址:Node.js 2.安装 Git(win环境下) 下载地址:Git Git 绑定 GitHub账户: ①打开G ...

  5. MVC特性路由的提供机制

    回顾:传统路由是如何提供的? 我们知道最终匹配的路由数据是保存在RouteData中的,而RouteData通常又是封装在RequestContext中的,他们是在哪里被创建的呢?没错,回到了UrlR ...

  6. js正则表达式匹配字符串与优化过程

    前言 有时候需要实现对js源文件中的url字符串做拦截预处理,或者前端js语法高亮,或者需要对动态加载的关键源码做混淆保护,在某些步骤实现之前,有一个步骤是需要提炼出所有的合法字符串. 目标:检测源文 ...

  7. Java ClassLoader加载机制

    一.体系结构(自上向下) 1.Bootstrap ClassLoader(BootStrapClassLoader) --- 启动类加载器或者叫引导类加载器,加载jdk核心的APIs,这些APIs一般 ...

  8. PIC32MZ Live update bootloader

    PIC32MZ 的 flash memory 支持live update, 这是个全新的特性,在之前的所有PIC不管是8位还是16位的单片机上面都没有这个特性.我写过很多PIC 8位和16位单片机的b ...

  9. 读书笔记 effective c++ Item 46 如果想进行类型转换,在模板内部定义非成员函数

    1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例 ...

  10. 转账示例(二):service层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)

    缺点:Service层面把Dao层面的开启事务操作完成了1.自行创建C3P0Uti,account数据库,导入Jar包 2.Dao层面 接口: package com.learning.dao; im ...