c++ stl list实现简单的学生信息管理系统

问题描述:
已知有20个学生记录(包括学号、姓名、成绩)的文件student.dat。要求编程序实现查询、排序、插入、删除诸功能。
系统的基本功能:
A.要求显示如下界面
****************************************
1--------------查询
2--------------排序
3--------------插入
4--------------删除
****************************************
通过选择1-4来确定要做哪一个操作。
B.若选1,则出现如下界面
****************************************
1.1----------按学号查询
1.2----------按姓名查询
1.3----------按成绩查询
****************************************
通过选择1.1-1.3来确定要做哪一个操作,其中:按学号查询用二分法实现;按姓名查询用顺序法实现;按成绩查询实现查询成绩小于m分的学生;找到该生将学生记录输出到屏幕,若查无此人,输出相关信息。
C.若选2,则按成绩从大到小排序,姓名,学号顺序也随之调整。
D.若选3,将一个新学生记录按学号顺序插入,并把结果保存到文件student.dat中。
E.若选4,删除指定学生的记录,并把结果保存到文件student.dat中。
F.以上各个功能均编写成子函数,由主函数调用实现。
c++代码如下:

#include <iostream>
#include <fstream>
#include <list>
#include <cmath>
#include <string.h>
#define MAX_STU 100//读入学生的最大数目
/**郑海波 blog.csdn.net/nuptboyzhb/*email:zhb931706659@126.com*/
using namespace std;
class Student
{
public:char * name;char *ID;int grade;Student(){name = new char[strlen("Anonymous-----") + 1];ID = new char[strlen("NoIdInput------") + 1];grade = 0;}Student(char * pName,char * pID, int pgrade):grade(pgrade){name = new char[strlen(pName) + 1];strcpy(name, pName);ID = new char[strlen(pID) + 1];strcpy(ID, pID);}Student(const Student& rhs):grade(rhs.grade){name = new char[strlen(rhs.name) + 1];strcpy(name, rhs.name);ID = new char[strlen(rhs.ID) + 1];strcpy(ID, rhs.ID);}Student& operator=(const Student& rhs){name = new char[strlen(rhs.name) + 1];strcpy(name, rhs.name);ID = new char[strlen(rhs.ID) + 1];strcpy(ID, rhs.ID);grade = rhs.grade;return *this;}// overload the == operator// for sorting purposes, we consider that two Student objects are "equal"// if they have the same gradebool operator==(const Student& rhs) const{return (grade == rhs.grade) ? true : false;}// overload the < operator// for sorting purposes, we consider that a Student object is "less than" another// if it's grade is less than the other object's gradebool operator<(const Student& rhs) const{return (grade < rhs.grade) ? true : false;}// overload the > operator// for sorting purposes, we consider that a Student object is "greater than" another// if it's grade is greater than the other object's gradebool operator>(const Student& rhs) const{return (grade > rhs.grade) ? true : false;}// 显示学生的信息void print(){cout << name <<" " <<ID << " " << grade << endl;}//构造函数~Student(){delete []name;delete []ID;}
};
list<Student> lst;//学生链表,用于存放学生数据
void print(list<Student> lst, char * name)//输入链表中所有的学生
{list<Student>::iterator it;cout << name << ":" << endl;for(it = lst.begin(); it != lst.end(); ++it)it->print();cout << endl;
}
void screenA()//显示屏幕操作A
{cout<<"****************************************"<<endl;cout<<"               1--------------查询"<<endl;cout<<"               2--------------排序"<<endl;cout<<"               3--------------插入"<<endl;cout<<"               4--------------删除"<<endl;cout<<"               5--------------显示"<<endl;cout<<"               6--------------保存"<<endl;cout<<"               7--------------清屏"<<endl;cout<<"****************************************"<<endl;
}
void screenB()//显示屏幕查询
{system("cls");cout<<"****************************************"<<endl;cout<<"       1----------按学号查询"<<endl;cout<<"       2----------按姓名查询"<<endl;cout<<"       3----------按成绩查询"<<endl;cout<<"       4----------返回"<<endl;cout<<"****************************************"<<endl;
}
void searchByID()//按学号查找
{cout<<"-------请输入学号ID"<<endl;char tID[12];memset(tID,0,12);cin>>tID;bool flag=false;list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){if (strcmp(it->ID,tID)==0){cout<<"----查找到,该学生信息如下:-----"<<endl;it->print();flag=true;break;}}if (flag==false){cout<<"未找到!"<<endl;}
}
void searchByName()//按名字查找
{cout<<"-------请输入姓名:"<<endl;char tname[12];memset(tname,0,12);cin>>tname;bool flag=false;list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){if (strcmp(it->name,tname)==0){cout<<"----查找到,该学生信息如下:-----"<<endl;it->print();flag=true;break;}}if (flag==false){cout<<"未找到!"<<endl;}
}
void searchByGrade()//按分数查找
{cout<<"-------请输入分数:"<<endl;int tgrade;cin>>tgrade;bool flag=false;list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){if (it->grade==tgrade){cout<<"----查找到,该学生信息如下:-----"<<endl;it->print();flag=true;break;}}if (flag==false){cout<<"未找到!"<<endl;}
}
void sortByGrade()//按分数进行排序,由高到低
{system("cls");cout<<"-------按分数排序完毕,结果如下:"<<endl;lst.sort( greater<Student>() );list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){it->print();}
}
void insertStudent()//插入一个学生
{system("cls");cout<<"-------请输入学号ID"<<endl;char tID[12];memset(tID,0,12);cin>>tID;cout<<"-------请输入姓名:"<<endl;char tname[12];memset(tname,0,12);cin>>tname;cout<<"-------请输入分数:"<<endl;int tgrade;cin>>tgrade;Student stu(tname,tID,tgrade);lst.push_back(stu);list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){it->print();}
}
void deleteStudent()//按要求删除一个学生
{system("cls");cout<<"-------请输入要删除学生的学号ID:"<<endl;char tID[12];memset(tID,0,12);cin>>tID;bool flag=false;list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){if (strcmp(it->ID,tID)==0){cout<<"----查找到,该学生信息如下:-----"<<endl;it->print();lst.erase(it);cout<<"删除完毕!"<<endl;flag=true;break;}}if (flag==false){cout<<"未找到!"<<endl;}
}
void inputData()//从文件中读取数据
{cout<<"正在从文件读入数据..."<<endl;ifstream ifile("student.dat");  if(!ifile)  {  cout<<"student.dat cannot be opened!"<<endl;  return;  }char ch;  int i;for (i=0;i<MAX_STU;i++)//读取数目  {  string s_name,s_id,s_grade;if(!ifile.get(ch))  {cout<<"文件已经读完!"<<endl;  return;  }  while (ch!='#')//读取姓名 {  if (ch==' ')//跳过空格  {  ifile.get(ch);  continue;  }s_name+=ch; ifile.get(ch);}  ifile.get(ch);  while (ch!='#')//读取学号 {  if (ch==' ')  {  ifile.get(ch);//跳过空格  continue;  }  s_id+=ch;  ifile.get(ch);  }  ifile.get(ch);  while(ch!='\n')//读取分数  {  if (ch==' ')  {  ifile.get(ch);  continue;  }  s_grade+=ch;  if(!ifile.get(ch))  {cout<<"文件已经读完!"<<endl;  return;  }   }Student temp;strcpy(temp.name,s_name.c_str());strcpy(temp.ID,s_id.c_str());temp.grade=atoi(s_grade.c_str());lst.push_back(temp);}  ifile.close();system("cls");
}
void SaveAsFile()
{  system("cls");ofstream ofile("student.dat",ios::out);  if (!ofile){  cout<<"打开文件失败!"<<endl;  return;  }  list<Student>::iterator it;for(it = lst.begin(); it != lst.end(); ++it){ofile<<it->name<<"#"<<it->ID<<"#"<<it->grade<<"\n";}cout <<"保存完毕..."<< endl;ofile.close();  return ;
}
int main()
{inputData();//从文件中读入数据char ch;screenA();while (cin>>ch){switch(ch){case '1':screenB();while (cin>>ch){int flag=0;switch(ch){case '1':searchByID();break;case '2':searchByName();break;case '3':searchByGrade();break;case '4':flag=1;break;default:flag=1;break;}if (flag==1){break;}}break;case '2'://排序sortByGrade();break;case '3'://插入学生insertStudent();break;case '4'://删除学生deleteStudent();break;case '5'://显示当前信息print(lst,"---------当前数据列表如下");break;case '6'://将数据保存到文件SaveAsFile();break;case '7'://清屏system("cls");break;default:return 0;}screenA();}cout<<"系统退出"<<endl;return 0;
}

student.dat内容如下:

张山  # B11010101  #  98
李四  # B11010101  #  67
王五  # B11010101  #  88
李华  # B11010101  #  76
李阳  # B11010101  #  55
张伟  # B11010101  #  87
王大为  # B11010101  #  89
李小名  # B11010101  #  92
张山一  # B11010101  #  98
李四一  # B11010101  #  67
王五一  # B11010101  #  88
李华一  # B11010101  #  76
李阳一  # B11010101  #  55
张伟一  # B11010101  #  87
王大二  # B11010101  #  89
李小登  # B11010101  #  92

c++ stl list实现简单的学生信息管理系统相关推荐

  1. 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...

    一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...

  2. python成绩管理系统设计 gui csdn_用golang简单编写学生信息管理系统

    用golang简单编写学生信息管理系统 发布时间:2020-09-04 11:45:16编辑:三青(参考七米老师的视频)查看次数:187 student.gopackage main import & ...

  3. JavaWeb 入门 最简单的学生信息管理系统

    最近在学习JavaWeb,整理一下.写了个很简单的学生信息管理系统.系统只包括简单的对学生信息进行增删改查.系统采用三层设计模式. 先展示一下系统的业务处理逻辑图: 逻辑如图所示,获取前端用户交互信息 ...

  4. Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。

    我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...

  5. JavaWeb之简单的学生信息管理系统(二)

    JavaWeb之简单的学生信息管理系统(一) JavaWeb之简单的学生信息管理系统(二) JavaWeb之简单的学生信息管理系统(三) 今日任务:实现学生管理系统的查找和添加功能! 一. 查询学生信 ...

  6. java实现简单的学生信息管理系统

    java实现简单的学生信息管理系统(无界面) 学生类实体: package com.edu.imau.wcy;public class Stu {private String stuNum;//学号p ...

  7. php编写一个学生类_PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

  8. php学籍信息管理系统心得_PHP实现简单的学生信息管理系统(web版)

    (∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...

  9. 学生信息系统求助_Student Information Management -一个简单的学生信息管理系统(持续更新2)...

    这次更新的内容 1:优化了增加学生信息的函数 2:   增加了删除学生信息的功能 系统图 图片发自简书App 第一次见到的库和函数 #include "memory.h" void ...

最新文章

  1. 如何编译和运行C++程序
  2. Win64 驱动内核编程-3.内核里使用内存
  3. Java安卓 使用视图组 布局
  4. Android 入门之Intent应用
  5. MySQL查询结果导出到文件
  6. 论文阅读(3)--SPDA-CNN: Unifying Semantic Part Detection and Abstraction for Fine-grained Recognition
  7. 白话解说:阻塞和非阻塞,同步和异步
  8. Android之Intent传递数据
  9. LInux安装mbedtls
  10. 如何画好一套线性图标
  11. linux pmap命令
  12. android开发深入浅出,Android开发深入浅出RxJava(一:基础篇)
  13. 中国人口最多的姓氏排行
  14. iPXE部署Ubuntu无盘系统
  15. iOS load和initialize方法详解
  16. [VT虚拟化驱动]利用EPT实现无痕HOOK
  17. 痞子衡嵌入式:一表全搜罗常见低功耗广域物联网协议(NB-IoT/eMTC/LoRa/SigFox...)
  18. sw2014计算机配置,solidworks配置要求高吗,solidworks需要什么样的电脑配置
  19. 智能网关CE证书和SAA认证,CB认证。
  20. 数字IC设计随笔之一(Verdi自动添加波形脚本应用)

热门文章

  1. eclipse web项目启动后不自动打开浏览器,谷歌了一下终于找到设置了
  2. “阿法狗”之父:关于围棋,人类3000年来犯了一个错!
  3. CentOS 7系统安装Ghost
  4. NLP实践|CCKS2020金融知识图谱自动化构建技术方法总结
  5. 开学!可怕的日本,无情到令人感到恐惧!
  6. 优化Hexo性能,使用hexo-neat插件压缩页面,大幅度提升页面性能和响应速度
  7. C语言二进制求数集子集
  8. 64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场?
  9. 解决git commit提示Please tell me who you are
  10. 14- 决策树算法 (有监督学习) (算法)