简易的学生成绩管理系统(C++实现)
最近浅显的学习了C++的基础知识,想来练练手,于是就用单链表写了最经典的小项目,存粹学习,所以就在控制台下写了,写的有点简陋,码了大概400多行。
下面上代码:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std; #define null NULL class student
{
private:
friend class studentMessage;
student *next; //节点指针
string name; //学生姓名
int age; //年纪
int id; //学号
double score[]; //三科成绩
double total; //总分
double average; //平均成绩
public:
student(string _name,int _age,int _id,double *_score)
{
name = _name;
age = _age;
id = _id;
score[] = _score[];
score[] = _score[];
score[] = _score[];
total = score[]+score[]+score[];
average = total/;
next = NULL;
}
student() //为studentMessage初始化头结点用
{
name = "null";
age = ;
id = ;
score[]=score[]=score[]=;
total = ;
average = ;
next = NULL;
}
~student(){}
void swap(student*);
}; void student::swap(student *q)
{
string _name;
int _age,_id;
double _score[],_total,_average; _name = name;
name = q->name;
q->name = _name; _age = age;
age = q->age;
q->age = _age; _id = id;
id = q->id;
q->id = _id; _score[] = score[];
score[] = q->score[];
q->score[] = _score[]; _score[] = score[];
score[] = q->score[];
q->score[] = _score[]; _score[] = score[];
score[] = q->score[];
q->score[] = _score[]; _total = total;
total = q->total;
q->total = _total; _average = average;
average = q->average;
q->average = _average;
} class studentMessage
{
private:
student *first; //头指针
int num; //信息中的学生人数
public:
studentMessage()
{
num = ; //初始化学生人数为0
first = new student; //初始化头结点
}
~studentMessage(){delete first;} /*管理系统常规操作*/
void Insret(void); //插入
void Display(void); //显示
void Delete(void); //删除
void Search(void); //搜索
void Change(void); //改动
void sortByLesson1(void); //按成绩一来排序
void sortByLesson2(void); //按成绩二来排序
void sortByLesson3(void); //按成绩三来排序
void sortByTotal(void); //按总分来排序
void SearchByid(void); //按照学号查找
void SearchByname(void); //按照姓名查找
int menu(void); //初始的菜单
void clear(void); //清空列表
}; int studentMessage::menu(void)
{
int ch;
cout<<"**********************************************************************"<<endl;
cout<<"======================================================================"<<endl;
cout<<"***************************学生成绩管理系统***************************"<<endl;cout<<endl;
cout<<"1.显示所有学生成绩"<<endl;
cout<<"2.添加学生信息"<<endl;
cout<<"3.查询学生信息"<<endl;
cout<<"4.修改学生信息"<<endl;
cout<<"5.删除最下面一个学生信息"<<endl;
cout<<"6.删除所有信息"<<endl;
cout<<"0.退出系统"<<endl;cout<<endl;
cout<<"********************Copyright@ By Jeaven Wong**************************"<<endl;
cout<<"======================================================================="<<endl;
cout<<"***********************************************************************"<<endl;
cin >> ch;
cout<<"\n\n\n"<<endl;
return ch;
} //插入
void studentMessage::Insret(void)
{
string name;
int age;
int id;
double score[];
cout<<"请输入学生姓名: ";
cin>>name;
cout<<"请输入学生年龄: ";
cin>>age;
cout<<"请输入学生学号: ";
cin>>id;
cout<<"下面请输入学生三门课程成绩: ";
cout<<endl;
cout<<"请输入第一门课的成绩: ";cin>>score[];
cout<<"请输入第二门课的成绩: ";cin>>score[];
cout<<"请输入第三门课的成绩: ";cin>>score[];
cout<<endl; student *newstu = new student(name,age,id,score);
student *p = first;
while(p->next != NULL)
{
p = p->next;
}
p->next = newstu;
newstu->next = null;
num++;
} void studentMessage::Display(void)
{
if(num == )
{
cout<<"当前记录中无学生..."<<endl;
} else
{
student *p = first->next;
while(p != null)
{
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"三门课程成绩: "<<p->score[]<<" "<<p->score[]<<" "<<p->score[]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
p = p->next;
}
}
} void studentMessage::Delete(void)
{
student *p = first;
student *pre = first;
while(p->next != NULL)
{
pre = p;
p = p->next;
}
pre->next = NULL;
delete p;
num--;
} void studentMessage::Search(void)
{
int temp = ;
cout<<"请输入查找的条件,有如下选项..."<<endl;
cout<<"按照学号查找(请输入【1】) 按照姓名查找(请输入【2】)"<<endl;
cin>>temp;
switch(temp)
{
case : SearchByid(); break;
case : SearchByname(); break;
default: cout<<"输入有误..."<<endl;
}
} void studentMessage::SearchByid(void)
{
int _id;
int flag = ;
cout<<"请输入待查找学生的学号:";
cin >> _id;
student *p = first->next;
while(p != null)
{
if(p->id == _id)
{
flag = ;
cout<<"下面是查找匹配结果:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"三门课程成绩: "<<p->score[]<<" "<<p->score[]<<" "<<p->score[]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
p = p->next;
}
if(flag == )
{
cout<<"抱歉,记录中没有查找匹配项..."<<endl;
}
} void studentMessage::SearchByname(void)
{
string _name;
int flag = ;
cout<<"请输入待查找的学生姓名: ";
cin >> _name;
student *p = first->next;
while(p != null)
{
if(p->name == _name)
{
flag = ;
cout<<"下面是查找匹配结果:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"三门课程成绩: "<<p->score[]<<" "<<p->score[]<<" "<<p->score[]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
p = p->next;
} if(flag == )
{
cout<<"抱歉,记录中没有查找匹配项..."<<endl;
}
} void studentMessage::Change(void)
{
string _name;
int flag = ,temp;
int _id,_age;
int course = ;
cout<<"请输入需要改动信息的学生的姓名: ";
cin >> _name;
student *p = first->next;
while(p != null)
{
if(p->name == _name)
{
flag = ;
cout<<"该学生当前信息如下:"<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"三门课程成绩: "<<p->score[]<<" "<<p->score[]<<" "<<p->score[]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
cout<<"请指明哪一项需要修改..."<<endl;
cout<<"修改学号(输入【1】) 修改年龄(输入【2】)修改成绩(输入【3】)"<<endl;
cin >> temp;
switch(temp)
{
case :
{
cout<<"请输入新的学号:";cin>>_id;
p->id = _id;
}
break;
case :
{
cout<<"请输入新的年龄:";cin>>_age;
p->age = _age;
}
break;
case :
{
cout<<"请按指示修改课程成绩..."<<endl;
cout<<"是否需要修改第一门课程成绩?(需要输入【1】不需要输入【0】)"<<endl;
cin >> course;
if(course == )
{
cout<<"请输入修改后的第一门课的成绩:"; cin >> p->score[];
}
course = ; cout<<"是否需要修改第二门课程成绩?(需要输入【1】不需要输入【0】)"<<endl;
cin >> course;
if(course == )
{
cout<<"请输入修改后的第二门课的成绩:"; cin >> p->score[];
}
course = ; cout<<"是否需要修改第三门课程成绩?(需要输入【1】不需要输入【0】)"<<endl;
cin >> course;
if(course == )
{
cout<<"请输入修改后的第三门课的成绩:"; cin >> p->score[];
}
course = ; p->total = p->score[]+p->score[]+p->score[];
p->average = p->total/; cout<<"修改后的信息如下: "<<endl;
cout<<"姓名:"<<p->name<<" ";
cout<<"年龄:"<<p->age<<" ";
cout<<"学号:"<<p->id<<" ";
cout<<"三门课程成绩: "<<p->score[]<<" "<<p->score[]<<" "<<p->score[]<<" ";
cout<<"总分:"<<p->total<<" ";
cout<<"平均分:"<<p->average<<endl;
}
break;
default: cout<<"输入有误..."<<endl;
}
}
p = p->next;
}
if(flag == )
cout<<"当前记录中没有次学生..."<<endl;
} /*排序我均采用冒泡排序法,均是从小到大排序*/ //按照科目一排序
void studentMessage::sortByLesson1(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[] > q->score[])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
} //按照科目二排序
void studentMessage::sortByLesson2(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[] > q->score[])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
} //按照科目三排序
void studentMessage::sortByLesson3(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->score[] > q->score[])
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
} //按照总成绩排序
void studentMessage::sortByTotal(void)
{
student *p = first->next;
while(p->next != null)
{
student *q = p->next;
while(q != null)
{
if(p->total > q->total)
{
p->swap(q);
}
q = q->next;
}
p = p->next;
}
} void studentMessage::clear(void)
{
student *p = first->next;
while(p != null)
{
first->next = p->next;
p->next = null;
delete p;
p = first->next;
}
} int main()
{
studentMessage stulist;
int ch;
while(ch = stulist.menu())
{
switch(ch)
{
case : stulist.Display(); break;
case : stulist.Insret(); break;
case : stulist.Search(); break;
case : stulist.Change(); break;
case : stulist.Delete(); break;
case : stulist.clear(); break;
default: cout<<"请按要求输入..."<<endl;
}
}
return ;
}
下面是程序运行的结果:
初始界面:

插入信息:


连续插入后显示:

修改信息:

修改后结果:

如有错误,欢迎批评指针哈~
简易的学生成绩管理系统(C++实现)的更多相关文章
- c++链表实现学生成绩管理系统(简易版)
#include<iostream> using namespace std; typedef struct student{ int id;//学号 string sex; string ...
- C语言学生成绩管理系统(简易版)
#include<stdio.h> #include<stdlib.h> #include<string.h> int readstudents(struct st ...
- 从零开始的C程序设计大作业——学生成绩管理系统
前言 学生成绩管理系统可以说是C语言程序设计的结课的必备大作业了.花了些时间,费了些头发肝了下,完成了两个系统,一个是控制台版本的,另一个用easyx图形库进行了优化. 先放出完成后的演示图片占个坑. ...
- Java项目:学生成绩管理系统(二)
学生成绩管理系统(二):项目介绍 一.设计要求: 1.1 简单的图形界面登录功能. 1.2 对数据库的的信息的查询功能. 1.3 对数据库的的信息的修改功能. 1.4 对数据库的的信息的删除功能. 1 ...
- Java项目:学生成绩管理系统(一)
学生成绩管理系统(一) 项目名称:学生成绩管理系统 项目需求分析(Need 需求): (1)该系统的用户分为教师和学生.教师的功能有:管理某一学生或课程的信息以及成绩,包括增.删.查.报表打印等:学生 ...
- 学生成绩管理系统[C]
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #d ...
- 【转】 [C/OC的那点事儿]NSMutableArray排序的三种实现(依赖学生成绩管理系统).
原文网址:http://blog.csdn.net/ministarler/article/details/17018839 c语言实现的学生成绩管理系统是面向过程的,而OC实现的学生成绩管理系统则是 ...
- 学生成绩管理系统 1.0(Java+MySql)
真难…… 数据库建立不会,中文编码不会,插入数据不会,删除不会…… Java读入数据不会……数据库连接不会…… 你也好意思说自己是学计算机的啊魂淡…… 我会慢慢写2.0,3.0版的……噗…… src/ ...
- 《C语言编写 学生成绩管理系统》
/* (程序头部凝视開始) * 程序的版权和版本号声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名: 学生成绩管理 ...
随机推荐
- 适合新手的160个creakme(一)
先跑一下 直接使用这个字符串去check,发现提示信息有关键字符串 CODE:0042FB80 00000021 C Sorry , The serial is incorect ! 找到这个字符串的 ...
- android 自定义控件之NetWorkImageView 处理listview等控件中的图片加载乱序问题
0.调用: BaseAdapter中设置方法 holder.iv.loadImage(url); adapter_xxx.xml 中 控件需要用 xxx.NetWorkImageView 1 NetW ...
- SIP 3pcc
3PCC全称Third Party Call Control,中文即第三方电话呼叫控制,指的是由第三方控制者在另外两者之间建立一个会话,由控制者负责会话双方的媒体协商.3PCC是一种非常灵活的会话控制 ...
- spark2.0新特性之DataSet
1.Spark SQL,DataFrame,DataSet的错误类型检测时机 spark SQL:其类型检测与语法检测是在运行时检测的 DataFrame:在spark2.0以前的版本中,DataFr ...
- C#/.net 通过js调用系统相机进行拍照,图片无损压缩后进行二维码识别
这两天撸了一个需求,通过 JS 调用手机后置相机,进行拍照扫码.前台实现调用手机相机,然后截取图片并上传到后台的功能.后台接收传过来的图片后,通过调用开源二维码识别库 ZXing 进行二维码数据解析 ...
- 【Day3】2.re模块使用案例
课程目标 1.提取 2.匹配 3.替换 1.提取 import re ret = re.findall([正则表达式]) # 返回的类型是列表 2.匹配 import re ret = re.matc ...
- (备忘)Nodepad++常用快捷键
Ctrl-H 打开Find / Replace 对话框 Ctrl-D 复制当前行 Ctrl-L 删除当前行 Ctrl-T 上下行交换 F3 找下一个 Shift-F3 找上一个 Ctrl-Shift- ...
- Linux 硬盘UUID相同处理方法
OVF模板部署的linux虚拟机磁盘id是相同的,当同一个模板生成的虚拟机挂载虚拟机磁盘时就会遇到两个磁盘UUID相同的情况,导致系统启动后只能识别一个磁盘.这里介绍一下LVM分区的磁盘UUID相同的 ...
- Django模型层:单表操作,多表操作,常用(非常用)字段和参数,Django-model进阶
一.web应用 二.模板的导入与继承 三.静态文件相关 四.inclusion_tag:返回html片段 五.模型层 一.web应用 -s包括两个部分:web服务器+application -目前阶段 ...
- NUC970 Linux CAN 驱动问题及解决办法之二
开发平台介绍: NUC970 + 内置CAN控制器(双通道CAN1\CAN2) + 官方Linux_Kernel(少量修改) 名词: 终端,使用NUC970的硬件 异常表现: 1.当CAN收发器(VP ...