实现功能
1)录入学生信息:一次进行多人信息录入并在每次学号输入后判断是否该学号已存在。
2)插入学生信息:先判断学号是否已存在,再进行顺序插入,结束一次仍可继续该功能。
3)浏览学生信息:将所有新生人数和每人信息显示到屏幕上。
4)删除学生信息:先询问用户是否需要根据姓名查找该生学号,若是,则根据用户输入的姓名查找相符的所有新生信息,再根据用户所输学号进行删除,否则直接根据用户所输学号进行删除,删除信息保存于备份文件中。若无该生信息则输出提示“无该生信息”。结束一次仍可继续该功能。
5)学生信息搜索:按学号或姓名搜索,若一种搜索无果,会提示用户是否需要另一种方式搜索,若需要,则直接跳转到另一种查询方式。
6)修改学生信息:先询问用户是否需要根据姓名查找该生学号,若是,则根据用户输入的姓名查找相符的所有新生信息,再根据用户所输学号进行修改,否则直接根据用户所输学号进行修改,再判断所要修改的学号是否存在,若存在则根据学号进行单项修改,若修改学号,则对修改后的学号进行查重,若已存在该学号,则提示用户并让用户重新输入想要修改成的学号。结束一次仍可继续该功能修改其他新生。
7)学生信息统计:有性别,专业,和年龄统计。年龄自动计算。结束一次仍可继续该功能。
8)学生信息排序:按学号从小到大排序,和按英语入学成绩从大到小排序。
9)学生信息保存:用C++文件流的格式,将进行操作后的新生信息保存到文件中。 学生信息导入:打开程序时自动导入,若原文件中为空,则显示“文件为空”,否则显示“上次保存信息已自动导入”。
实验效果
运行
录入学生信息
插入学生信息
浏览学生信息
(之前保存过一名学生信息,运行时自动导入该生信息)
删除学生信息
其余功能不再展示,可自行复制代码测试
代码
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<iomanip>
#include<cstring>
#include<ctime>
using namespace std;
static int m=0;
template <typename T>
T inspect(T n)//检查输入格式
{
if(cin.fail())
{
cin.clear();cin.sync();
}
cout<<"输入错误,请重新输入"<<endl;
cin>>n;
return n;
}
class student//信息类
{
public:
void set_num(long int num) {
this->Num=num;}
void set_name(string name) {
this->Name=name;}
void set_sex(string sex) {
this->Sex=sex;}
void set_specialty(string specialty) {
this->Specialty=specialty;}
void set_year(int year) {
this->Year=year;}
void set_month(int month) {
this->Month=month;}
void set_day(int day) {
this->Day=day;}
void set_score(float score) {
this->Score=score;}
void set_address(string address) {
this->Address=address;}
void set_age(int age) {
this->Age=age;}
void set_next(student *p=NULL) {
this->next=p;}
long int get_num() {
return Num;}
string get_name() {
return Name;}
string get_sex() {
return Sex;}
string get_specialty() {
return Specialty;}
int get_year() {
return Year;}
int get_month() {
return Month;}
int get_day() {
return Day;}
string get_address() {
return Address;}
float get_score() {
return Score;}
int get_age() {
return Age;}
student *get_next() {
return this->next;}
void show();
private:
long int Num;
string Name;
string Sex;
string Specialty;
int Year,Month,Day;
int Age;
string Address;
float Score;
student *next;
};
void student::show()//单人输出
{
cout<<"学号:"<<setfill('0')<<setw(10)<<get_num()<<"\t";
cout<<"姓名:"<<get_name()<<"\t";
cout<<"性别:"<<get_sex()<<"\t";
cout<<"专业:"<<get_specialty()<<"\t";
cout<<"出生日期:";
cout<<get_year()<<"年";
cout<<setfill('0')<<setw(2)<<get_month()<<"月";
cout<<setfill('0')<<setw(2)<<get_day()<<"日";
cout<<"英语成绩:"<<get_score()<<endl;
cout<<"家庭住址:"<<get_address()<<endl;
cout<<"***************************************************************"<<endl;
}
class message:public student//管理类
{
public:
message(){
head=NULL;}
~message();
student* find1(long int num);
bool find2(string name);
void add();
void show_();
void charu();
void delete_();
void search();
void revision();
void save();
void rank();
void age_(student *pt);
void tongji();
void read();
private:
student *p1,*p2,*head;
};
message::~message()
{
student *pt;
while(head)
{
pt=head;
head=head->get_next();
delete pt;
}
}
bool message::find2(string name)//按姓名查找
{
student *p3=head;int i=0;
while(p3)
{
if(p3->get_name()==name)
{
p3->show();i=1;
}
p3=p3->get_next();
}
if(i==0) return false;
return true;
}
student* message::find1(long int num)//按学号查找
{
student *p3=head;
while(p3!=NULL)
{
if(num==p3->get_num())
{
return p3;
}
p3=p3->get_next();
}
return p3;
}
void message::add()//批量增加
{
int n,d,year,month,day;//n为添加新生人数,d为判断男女条件
long int num;
string name,specialty,sex,address;
float score;
p2=head;while(p2) {
if(!p2->get_next()) break;p2=p2->get_next();}
cout<<"请输入您要添加新生人数:";
cin>>n;while(n<=0)n=inspect(n);
for (int i=0;i<n;i++)
{
cout<<"请输入第"<<i+1<<"个学生的信息"<<endl;
cout<<"学号:";
cin>>num;
while(cin.fail()) num=inspect(num);
p1=new student();
while(find1(num))
{
cout<<"该学号已存在,请重新输入"<<endl;
cin>>num;while(cin.fail()) num=inspect(num);
}
p1->set_num(num);
cout<<"姓名:";cin>>name;
p1->set_name(name);
cout<<"性别"<<endl<<"1.男 "<<"2.女"<<endl<<"请选择性别";
cin>>d;
while(d<=0||(d!=1&&d!=2))
d=inspect