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. python array与 list区别
  2. 每秒改变一次背景颜色以及由此引发的一些有趣的小事情(.net方向)
  3. session 安全问题(关闭页面时自动清除session)
  4. python 内置函数__name__的作用
  5. 树莓派上搭建Git服务器
  6. suse安装gcc,升级到4.8.5
  7. Storm-源码分析-Stats (backtype.storm.stats)
  8. Linux内核中工作队列的使用work_struct,delayed_work
  9. java.lang.UnsatisfiedLinkError: No implementation found for void com.mchsdk.paysdk.net.MCHKeyTools.n
  10. 中国十大最美梯田,个个都美如画!
  11. 杨辉再发声明:承认听取付向东报告后受其“鼓舞”,为没及时沟通向其致歉...
  12. python第三方库介绍和安装
  13. 20150430 调试分析之 根据内核报错信息栈信息分析错误
  14. python修改pip源脚本_修改python的pip源为国内源
  15. 极简主义︱利用apple机器学习平台Turicreate实现图像相似性检索(二)
  16. windows server 2008 添加磁盘
  17. 李阳疯狂英语900句 121-330
  18. linux参考文献_小白爱折腾·其二:手机Linux部署DiscuzX论坛
  19. 图片标注工具Labelme的安装及使用方法
  20. Windows Rootkit 技术分析

热门文章

  1. 简历怎么制作?简历制作的步骤是什么?
  2. Stack的概念和算法应用
  3. java程序框图 质数_程序框图——数据大爆炸
  4. 只需一步,永久白嫖!请低调使用!
  5. 西西吹雪:从程序员到项目经理(一)
  6. 阿里新一轮组织调整:电商与本地生活进一步融合,淘系中坚力量崛起
  7. Android 基础 UI 界面设计
  8. java语言可以编程无人机么_java可以作为第一门编程语言学习吗
  9. 数据分析之淘宝数据简介
  10. 向量L0、L1、L2、L∞范数,矩阵F-范数