学生成绩管理C++版
【标题】学生成绩管理的设计与实现
【开发语言】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++版的更多相关文章
- 学生成绩管理C语言版
[标题]学生成绩管理的设计与实现 [开发语言]C语言 [概要设计]使用结构体存储学生的学号.姓名和成绩信息,实现对学生成绩类的基本操作:增加.删除.查询.排序 [测试数据]按提示输入5组正确的正确的数 ...
- JAVA课程设计 学生成绩管理
学生成绩管理 可实现功能: 添加学生功能:姓名.学号.性别.出生年月日.(学号自动生成且唯一) 添加学生成绩功能:每个人都有数学.Java与体育四门课,可分课程输入成绩. 根据学生学号查找学生成绩功能 ...
- C语言文件实现学生成绩管理
C语言实现学生成绩管理 项目简介 用C语言的链表及文件操作实现学生成绩的管理,实现主要的添加.修改.删除.查询的主要功能,并在程序关闭时将数据存储在二进制的文件中并加密.下一次打开程序,先解密二进制文 ...
- 开学考试学生成绩管理Java
首先student类 package xuexi; public class Student { private String stunumber; private String name; priv ...
- JAVA基础代码分享--学生成绩管理
问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’ 成绩>=最高分-30 等级为’C’ ...
- JAVA课程设计个人博客 学生成绩管理 201521123001 张陈东芳
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现学生信息的添加功能.学生成绩的录入 ...
- c++链表实现学生成绩管理系统(简易版)
#include<iostream> using namespace std; typedef struct student{ int id;//学号 string sex; string ...
- 简易学生成绩管理管理系统(java描述)
没正式学过java,但是系统学过C++后,初略的看了下java的基本语法,于是我就尝试着用java来写个简单的学生管理系统,功能不齐全,以后有空再补充吧. 写的时候定义了不同的包名字,如jeaven1 ...
- JAVA课程设计个人博客 学生成绩管理 201521123023 戴建钊
1. 团队课程设计博客链接 http://www.cnblogs.com/kawajiang/p/7062407.html 2.个人负责模块或任务说明 我主要负责实现随机生成10万个学生及其姓名.学号 ...
随机推荐
- Linux 上做免密码登陆
基于密钥验证1.生成一对密钥ssh-keygen -t {rsa|dsa} -f /path/to/keyfile -N 'password'2.将公钥传输至服务器某用户的家目录的.ssh/autho ...
- 关于bootstrap原理及优缺点
网格系统的实现原理,是通过定义容器大小,平分12份(也有平分成24份或32份,但12份是最常见的),再调整内外边距,最后结合媒体查询,就制作出了强大的响应式网格系统.Bootstrap框架中的网格系统 ...
- 【Egret】Lakeshore 使用中的一些疑难解决技巧!
用Lakeshore 1.2.1版本发布的html,会出现一些用户不想要的东西,下面讲讲如何去掉: 一.问题:游戏或者动画在PC端也能跟随游览器自适应. 解决方法:①找到发布文件下的 egret_l ...
- poj 2155 Matrix (二维树状数组)
题意:给你一个矩阵开始全是0,然后给你两种指令,第一种:C x1,y1,x2,y2 就是将左上角为x1,y1,右下角为x2,y2,的这个矩阵内的数字全部翻转,0变1,1变0 第二种:Q x1 y1,输 ...
- ThreadLocal学习笔记
首先,ThreadLocal是Java语言提供的用于支持线程局部变量的标准实现类.很多时候,ThreadLocal与Synchronized在功能上有一定的共性,都可以用来解决多线程环境下线程安全问题 ...
- SQL基础增删改查
一.基础语句介绍 SQL 可以分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 1.数据操作语言(DML)基本指令: select 从数据表中获取数据(现阶阶段,二次开发常用) ...
- redis 字典
redis 字典 前言 借鉴了 黄健宏 的 <<Redis 设计与实现>> 一书, 对 redis 源码进行学习 欢迎大家给予意见, 互相沟通学习 概述 字典是一种用于存储键值 ...
- pwm最后的解释
之前学东西总是模模糊糊,前几天看了pwm,虽然知道怎么配置,但是如果让我自己去写一个pwm的程序,我却不知如何下手. 不知道如何配置他的频率和占空比.今天痛定思痛,决定彻底搞懂pwm. 百度给 的答案 ...
- stm32中断学习总结
经过了两天,终于差不多能看懂32的中断了,由于是用的库函数操作的,所以有些内部知识并没有求甚解,只是理解知道是这样的.但对于要做简单开发的我来说这些已经够了. 我学习喜欢从一个例程来看,下面的程序是我 ...
- Android Gradle manifestPlaceholders 占位符详解
Android Gradle manifestPlaceholders 占位符详解 在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也 ...