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