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实现简单的学生信息管理系统相关推荐
- 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...
一个简单的学生信息管理系统基于python和tkinter 1.需求分析1.大学生信息管理系统使用tkinter接口创建一个窗口.使界面更漂亮.2. 实现与数据库的连接,教师和学生的信息可以保存或读取 ...
- python成绩管理系统设计 gui csdn_用golang简单编写学生信息管理系统
用golang简单编写学生信息管理系统 发布时间:2020-09-04 11:45:16编辑:三青(参考七米老师的视频)查看次数:187 student.gopackage main import & ...
- JavaWeb 入门 最简单的学生信息管理系统
最近在学习JavaWeb,整理一下.写了个很简单的学生信息管理系统.系统只包括简单的对学生信息进行增删改查.系统采用三层设计模式. 先展示一下系统的业务处理逻辑图: 逻辑如图所示,获取前端用户交互信息 ...
- Java语言写一个简单的学生信息管理系统,通过JDBC连接数据库对学生信息进行增删改查,采用三层思想和DBUtils第三方框架。
我把源代码和sql文件放GitHub上了,你们可以自行下载:https://github.com/fenglily1/student. 有问题可以留言或私信,我看到就会回. 进阶版加上页面的管理系统在 ...
- JavaWeb之简单的学生信息管理系统(二)
JavaWeb之简单的学生信息管理系统(一) JavaWeb之简单的学生信息管理系统(二) JavaWeb之简单的学生信息管理系统(三) 今日任务:实现学生管理系统的查找和添加功能! 一. 查询学生信 ...
- java实现简单的学生信息管理系统
java实现简单的学生信息管理系统(无界面) 学生类实体: package com.edu.imau.wcy;public class Stu {private String stuNum;//学号p ...
- php编写一个学生类_PHP实现简单的学生信息管理系统(web版)
(∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...
- php学籍信息管理系统心得_PHP实现简单的学生信息管理系统(web版)
(∩_∩) 1.概述 学了php的一些基础,包括HTML,php,pdo,mysql操作等,一直都没有将它们有机结合.最近写了一个简单的网页版学生信息管理系统,前台用HTML,脚本用到了JavaScr ...
- 学生信息系统求助_Student Information Management -一个简单的学生信息管理系统(持续更新2)...
这次更新的内容 1:优化了增加学生信息的函数 2: 增加了删除学生信息的功能 系统图 图片发自简书App 第一次见到的库和函数 #include "memory.h" void ...
最新文章
- 如何编译和运行C++程序
- Win64 驱动内核编程-3.内核里使用内存
- Java安卓 使用视图组 布局
- Android 入门之Intent应用
- MySQL查询结果导出到文件
- 论文阅读(3)--SPDA-CNN: Unifying Semantic Part Detection and Abstraction for Fine-grained Recognition
- 白话解说:阻塞和非阻塞,同步和异步
- Android之Intent传递数据
- LInux安装mbedtls
- 如何画好一套线性图标
- linux pmap命令
- android开发深入浅出,Android开发深入浅出RxJava(一:基础篇)
- 中国人口最多的姓氏排行
- iPXE部署Ubuntu无盘系统
- iOS load和initialize方法详解
- [VT虚拟化驱动]利用EPT实现无痕HOOK
- 痞子衡嵌入式:一表全搜罗常见低功耗广域物联网协议(NB-IoT/eMTC/LoRa/SigFox...)
- sw2014计算机配置,solidworks配置要求高吗,solidworks需要什么样的电脑配置
- 智能网关CE证书和SAA认证,CB认证。
- 数字IC设计随笔之一(Verdi自动添加波形脚本应用)
热门文章
- eclipse web项目启动后不自动打开浏览器,谷歌了一下终于找到设置了
- “阿法狗”之父:关于围棋,人类3000年来犯了一个错!
- CentOS 7系统安装Ghost
- NLP实践|CCKS2020金融知识图谱自动化构建技术方法总结
- 开学!可怕的日本,无情到令人感到恐惧!
- 优化Hexo性能,使用hexo-neat插件压缩页面,大幅度提升页面性能和响应速度
- C语言二进制求数集子集
- 64匹马,8个赛道,找出跑得最快的4匹马,至少比赛几场?
- 解决git commit提示Please tell me who you are
- 14- 决策树算法 (有监督学习) (算法)