Camellia.332 2023-12-07 19:16 采纳率: 92.3%
浏览 5
已结题

学生管理系统如何实现文件的加密与解密

DevC++学生管理系统如何实现文件的加密与解密

#include<iostream> 
#include<fstream> 
#include<ctime>
#include<string.h>
#include<conio.h>//getch这样才能用  
using namespace std;
void Welcome();//起始页面 
void pop(int);//接续文件输出函数 
void cpop();//重置文件输出函数
void InputStudent1(); //单个录入
void InputStudent2();//批量输入
int searchname();//按姓名查询并打印学生信息
int searchschoolid();//按学号查询并打印学生信息 
void editname();//输入姓名查找并修改学生成绩   
void editschoolid(); //输入学号查找并修改学生成绩  
void batch_modify();//batch批量 modify修改 
void phonequery();//查找通讯公司对应学生信息
void searchclassnum();//按班级查询全部同学的信息
void searchmajor();//按专业查询全部同学的信息
void schoolid_search_score1();//按学号查询指定同学的全部成绩信息 
void schoolid_search_score2();//按学号查询指定同学指定课程的成绩
void orderclass_sum(); //输入班级,实现按总成绩降序输出学生基本信息与成绩信息
void searchscore_fail();//查询单科不及格同学全部信息及不及格课程的成绩 
void searchscore_beyond(); //实现按指定课程查询成绩大于指定值全部同学信息及成绩
void ordermajor_sum();//实现按专业,输出按给定课程成绩降序排序的学生成绩及学生信息   
void search_fuzzy();//实现模糊查询 

class Student {
public:
     
    string name;//姓名 
    string sex;//性别 
    string nation;//籍贯 
    string id;//身份证号 
    string classnum;//班级
    string schoolid;//学号 
    string collage;//学院 
    string major;//专业 
    string phonenum;//电话号码 
    string QQnum; //QQ号码 
    float Chinese;//语文成绩 
    float Math;//数学成绩 
    float English;//英语成绩 
    float total_score;//总成绩 
   
    void checkName(); //姓名检验 
    void checkSex();  //性别检验
    void checknation(); //籍贯检验
    void checkId(); //身份证号检验
    void checkClass( );//班级检验
    void checkSchoolId(); //学号的检验
    void checkCollage(); //学院检验 
    void checkMajor() ;//专业检验 
    void checkPhoneNum();//电话号码检验
    void checkQQNum(); //qq号检验
    void inputscore(); //成绩的录入和检验 
    
    
};

Student stu[10];//全局变量 
int size;  // size为学生数量
string Name;
string classNum;

//主函数 
int main() { 
size=0;

    while(1)
    
    {Welcome();
    //从键盘接收一个字符
    char ch=getch(); 
    switch(ch){
        case '1':{//录入学生信息 
        cout<<"录入学生信息中;" <<endl;
        cout<<"选择功能列表"<<endl;
        cout<<"——————————"<<endl;
         cout<<"1.单个录入学生信息"<<endl;
        cout<<"2.批量录入学生信息"<<endl;
        cout<<"——————————"<<endl;
     
         char dd=getch();
            switch(dd){
                case '1':
                    InputStudent1();break;
                case '2' :
                    InputStudent2();break;    
                }break;}
        
          case '4':{//学生成绩 
        cout<<"学生成绩相关功能中;" <<endl;
        cout<<"选择功能列表"<<endl;
        cout<<"——————————"<<endl;
         cout<<"1.班级内部按总成绩排序"<<endl;
        cout<<"2.专业按总成绩排序"<<endl;
        cout<<"3.单科不及格的同学信息"<<endl;
        cout<<"4.查询小于指定分数线的同学信息"<<endl;
        cout<<"——————————"<<endl;
    char ee=getch();
            switch(ee){
                case '1':
                    orderclass_sum();break;
                case '2' :
                    ordermajor_sum();break;
                case '3' :
                    searchscore_fail();break;
                case '4' :
                    searchscore_beyond();break;    
                    
                }     
            break;}
   
        case '6':{//查找学生信息 
        cout<<"查找学生信息中;" <<endl;
        cout<<"选择功能列表"<<endl;
        cout<<"——————————"<<endl;
         cout<<"1.按姓名查找学生信息"<<endl;
        cout<<"2.按学号查找学生信息"<<endl;
        cout<<"3.查找通讯公司对应学生信息" <<endl;
        cout<<"4.按班级查找全部学生信息"<<endl;
        cout<<"5.按姓名模糊查找" <<endl;
        cout<<"——————————"<<endl;
    char aa=getch();
            switch(aa){
                case '1':
                    searchname();break;
                case '2' :
                    searchschoolid();break;    
                case '3' :
                    phonequery();break; 
                case '4' :
                    searchclassnum();break; 
                case '5':
                    search_fuzzy();break;
                }     
            break;}
           
        case '7':{//修改学生信息 
        cout<<"修改学生信息中;" <<endl;
        cout<<"选择功能列表"<<endl;
        cout<<"——————————"<<endl;
         cout<<"1.按名字查找并修改学生信息"<<endl;
        cout<<"2.按学号查找并修改学生信息"<<endl;
        cout<<"3.批量修改学生信息"<<endl;
        cout<<"——————————"<<endl;
        char bb=getch();
            switch(bb){
                case '1':
                    editname();break;
                case '2' :
                    editschoolid();break;
                case '3' :
                    batch_modify();break;        
                }     
       break; }
              case '9':{//查询学生成绩 
        cout<<"查询学生成绩中;" <<endl;
        cout<<"选择功能列表"<<endl;
        cout<<"——————————"<<endl;
         cout<<"1.按学号查询指定同学全部信息"<<endl;
        cout<<"2.按学号查询指定同学指定课程的成绩"<<endl;
        cout<<"——————————"<<endl;
        char cc=getch();
            switch(cc){
                case '1':
                    schoolid_search_score1();break;
                case '2':
                    schoolid_search_score2();break;    
                }     
       break; }
       case '0':return 0;
        }     
}
}
template <typename T> void log(int a,string message,T m,T n){
    
    ofstream ofile;
    ofile.open("日志.txt",ios::app);
    if(!ofile){
    cerr<<"Open file fail"<<endl;
    exit(1);
    }
        time_t nowtime;
    time(&nowtime); //获取197011000秒到现在经过的秒数
    tm* p = localtime(&nowtime); //将秒数转换为本地时间,年从1900算起,需要+1900,月为0-11,所以要+1
    ofile<<"修改"<<stu[a].name<<"的"<<message<<":"<<' '; 

    ofile<<"修改前:"<<m<<"    "<<"修改后:"<<n<<"\t" ;
    ofile<<p->tm_year + 1900<<"/"<<p->tm_mon + 1<<"/"<< p->tm_mday<<"/"<<p->tm_hour<<":"<<p->tm_min<<":"<<p->tm_sec<<endl;
    
    ofile.close();
}
 




//起始页面 
void Welcome()
{    
    cout<<"选择功能列表"<<endl;
    cout<<"——————————"<<endl;
    cout<<"0.退出系统" <<endl;
    cout<<"1.录入学生信息"<<endl;
    cout<<"2.打印学生信息"<<endl;
    cout<<"3.保存学生信息"<<endl;
    cout<<"4.学生成绩相关功能"<<endl;
    cout<<"5.统计所有学生人数"<<endl;
    cout<<"6.查找学生信息"<<endl;
    cout<<"7.修改学生信息"<<endl;
    cout<<"8.删除学生信息"<<endl;
    cout<<"9.查询学生成绩"<<endl; 
    cout<<"——————————"<<endl;
}
//接续文件输出函数 
void pop(int i){
    ofstream ofile;
    ofile.open("保存学生信息.txt",ios::app);
    if(!ofile){
        cerr<<"Open file1 fail!"<<endl;
        exit(1);
    }
    for(int n=size-i;n<size;n++)
    ofile<<stu[n].name<<" "<<stu[n].sex<<" "<<stu[n].nation<<" "<<stu[n].id<<" "<<stu[n].classnum<<" "<<stu[n].schoolid<<" "<<stu[n].collage<<" "<<stu[n].major<<" "<<stu[n].phonenum<<" "<<stu[n].QQnum<<" "<<stu[n].Chinese<<" "<<stu[n].Math<<" "<<stu[n].English<<" "<<stu[n].total_score<<endl; 
    ofile.close();
}
//重置文件输出函数 
void cpop(){
    ofstream ofile;
    ofile.open("保存学生信息.txt",ios::out);
    if(!ofile){
        cerr<<"Open file fail!"<<endl;
        exit(1);
    }
    for(int n=0;n<size;n++)
    ofile<<stu[n].name<<" "<<stu[n].sex<<" "<<stu[n].nation<<" "<<stu[n].id<<" "<<stu[n].classnum<<" "<<stu[n].schoolid<<" "<<stu[n].collage<<" "<<stu[n].major<<" "<<stu[n].phonenum<<" "<<stu[n].QQnum<<" "<<stu[n].Chinese<<" "<<stu[n].Math<<" "<<stu[n].English<<" "<<stu[n].total_score<<endl; 
    ofile.close();
}



//单个录入 
void InputStudent1(){ 
        
        int n;
    cout<<"请输入录入学生数"<<endl; 
    cin>>n;
        for(int i=size;i<n+size;i++){
        stu[i].checkName();
        stu[i].checkSex();
        stu[i].checknation(); 
        stu[i].checkId();
        stu[i].checkClass();
        stu[i].checkSchoolId();
        stu[i].checkCollage();
        stu[i].checkMajor();
        stu[i].checkPhoneNum();
        stu[i].checkQQNum();
        stu[i].inputscore();
        
        }
        size+=n;
        pop(n);//文件输出函数 
    
}
//批量录入 
void InputStudent2(){
    int i;
    cout<<"请输入批量输入的学生数目"<<endl; 
    cin>>i;

    ifstream ifile1;
    ifile1.open("批量输入.txt",ios::in);
    if(!ifile1){
        cerr<<"Open file fail"<<endl;
        exit(1);
    }
    int n=0;
    while(!ifile1.eof()&&n<i){
        ifile1>>stu[size].name>>stu[size].sex>>stu[size].nation>>stu[size].id>>stu[size].classnum>>stu[size].schoolid>>stu[size].collage>>stu[size].major>>stu[size].phonenum>>stu[size].QQnum>>stu[size].Chinese>>stu[size].Math>>stu[size].English>>stu[size].total_score; 
        size++;n++;
    }
    ifile1.close();
    pop(i);
}
//按学号查询指定同学的全部成绩信息 
void schoolid_search_score1(){
 cout << "请输入要查找的同学的学号:" << endl;  
                string schoolid;
                cin >> schoolid;
                 
                int j = -1;  //初始化要查找的同学的学号在数组中的下标 
                for (int k = 0; k < size; k++) {  
                    if (stu[k].schoolid == schoolid ) {  
                        j=k;  // 找到要查找的学号,记录其在数组中的下标  
                        break; } 
                    } 
                if (j == -1) {  
                    cout << "没有找到学号为 " <<schoolid<< " 的同学!"; }
                 else {   
                    cout<<"姓名:"<< stu[j].name<<endl;
                    cout<<"语文:"<< stu[j].Chinese<<endl; 
                    cout<<"数学:"<< stu[j].Math<<endl;
                    cout<<"英语:"<< stu[j].English<<endl; 
                    cout<<"总成绩:"<< stu[j].total_score<<endl;   
                     } 
                 }
                 
//按学号查询指定同学指定课程的成绩 
void schoolid_search_score2(){
 cout << "请输入要查找的同学的学号:" << endl;  
                string schoolid;
                cin >> schoolid;
                 
                int j = -1;  //初始化要查找的同学的学号在数组中的下标 
                for (int k = 0; k < size; k++) {  
                    if (stu[k].schoolid == schoolid ) {  
                        j=k;  // 找到要查找的学号,记录其在数组中的下标  
                        break; } 
                    } 
                if (j == -1) {  
                    cout << "没有找到学号为 " <<schoolid<< " 的同学!"; }
                 else {  
                    cout<<"该同学为:"<< stu[j].name<<endl; 
                    cout<< "输入1查询语文成绩,输入2查询数学成绩,输入3查询英语成绩,输入4查询全部成绩"<<endl; 
                    char ch=getch(); 
                switch(ch){ 
                case '1': cout<<"语文:"<< stu[j].Chinese<<endl; break; 
                case '2': cout<<"数学:"<<  stu[j].Math<<endl; break;
                case '3': cout<<"英语:"<<  stu[j].English<<endl; break;
                case '4': cout<<"总成绩:"<<  stu[j].total_score<<endl; break;
                   }
                }    
      }


int e;//e为需要修改信息同学的下标,方便返回 

//按姓名查询并打印学生信息 
int searchname(){     
 cout << "请输入要查找的学生名字:" << endl;  
                cin >> Name;
                int j;//j为要修改的学生在数组中的下标数组   
                int t = -1;  // 初始化要修改的学生在数组中的下标  
                for (int k = 0; k < size; k++) {  
                    if (stu[k].name == Name) {  
                         // 找到要修改的学生,记录其在数组中的下标  
                        j=k;
                        e=j;
                        t++;  
                    }  }
                 
                if (t ==-1) {  
                    cout << "没有找到名为 " << Name << " 的学生!" << endl;  }
                 else {  
                 if(t==0){cout << "名为 " << Name << " 的学生的信息是:" << endl;  
                    cout<<"姓名:"<<stu[j].name<<endl;
                    cout<<"性别:"<< stu[j].sex<<endl;
                    cout<<"籍贯:"<< stu[j].nation<<endl; 
                    cout<<"身份证号:"<<  stu[j].id<<endl;  
                    cout<<"班级:"<<  stu[j].classnum<<endl; 
                    cout<<"学号:"<<  stu[j].schoolid<<endl; 
                    cout<<"学院:"<<  stu[j].collage<<endl; 
                    cout<<"专业:"<< stu[j].major<<endl;  
                    cout<<"电话号码:"<<  stu[j].phonenum<<endl; 
                    cout<<"QQ号:"<<  stu[j].QQnum<<endl; 
                    cout<<"语文:"<<  stu[j].Chinese<<endl; 
                    cout<<"数学:"<<  stu[j].Math<<endl;
                    cout<<"英语:"<<  stu[j].English<<endl; 
                    cout<<"总成绩:"<<  stu[j].total_score<<endl;  
                 }
                 if(t>0){cout<<"重名!"<<endl;
                 searchschoolid();
                 } 
                } 
                return e;
                 }
//按学号查询并打印学生信息
int searchschoolid(){
 string Name; // 要修改的学生的名字  
 cout << "请输入要查找的学生学号:" << endl;  
                string schoolid;
                cin >> schoolid;
                  
                int j = -1;  // 初始化要修改的学生在数组中的下标  
                for (int k = 0; k < size; k++) {  
                    if (stu[k].schoolid == schoolid) {  
                        j = k;  // 找到要修改的学生,记录其在数组中的下标  
                        e=j;
                        break;  
                    }  }
                 
                if (j == -1) {  
                    cout << "没有找到学号为 " << schoolid << " 的学生!" << endl;  }
                 else {  
                    cout << "学号为 " << schoolid << " 的学生的信息是:" << endl;  
                   cout << "名为 " << Name << " 的学生的信息是:" << endl;  
                    cout<<"姓名:"<<stu[j].name<<endl;
                    cout<<"性别:"<< stu[j].sex<<endl;
                    cout<<"籍贯:"<< stu[j].nation<<endl; 
                    cout<<"身份证号:"<<  stu[j].id<<endl;  
                    cout<<"班级:"<<  stu[j].classnum<<endl; 
                    cout<<"学号:"<<  stu[j].schoolid<<endl; 
                    cout<<"学院:"<<  stu[j].collage<<endl; 
                    cout<<"专业:"<< stu[j].major<<endl;  
                    cout<<"电话号码:"<<  stu[j].phonenum<<endl; 
                    cout<<"QQ号:"<<  stu[j].QQnum<<endl; 
                    cout<<"语文:"<<  stu[j].Chinese<<endl; 
                    cout<<"数学:"<<  stu[j].Math<<endl;
                    cout<<"英语:"<<  stu[j].English<<endl; 
                    cout<<"总成绩:"<<  stu[j].total_score<<endl;   
                     } 
                     return e;
                 }
                 
                
//实现按指定课程查询成绩大于指定值全部同学信息及成绩                  
void searchscore_beyond(){
cout<<"选择科目"<<endl;
   cout<<"——————————"<<endl;
       cout<<"1.语文"<<endl;
   cout<<"2.数学"<<endl;
   cout<<"3.英语"<<endl; 
   cout<<"——————————"<<endl;
char ww=getch();
switch(ww){
             case'1':{
    cout<<"请输入需要查询的分数线(查询的同学大于等于该分数线)"<<endl;
    int score;
    cin>>score; 
        int k=-1;
        int i=0;
              for (i = 0; i < size; i++) {  
                  if (stu[i].Chinese >=score) { 
                  k++;
            cout<<"***********************************"<<endl;
                  cout<<"姓名:"<<stu[i].name<<endl;
            cout<<"性别:"<< stu[i].sex<<endl;
                    cout<<"籍贯:"<< stu[i].nation<<endl; 
                    cout<<"身份证号:"<<  stu[i].id<<endl;  
                cout<<"班级:"<<  stu[i].classnum<<endl; 
                    cout<<"学院 }:"<<  stu[i].collage<<endl; 
                    cout<<"专业:"<< stu[i].major<<endl;  
                    cout<<"电话号码:"<<  stu[i].phonenum<<endl; 
                    cout<<"QQ号:"<<  stu[i].QQnum<<endl; 
                    cout<<"语文:"<<  stu[i].Chinese<<endl; 
                    cout<<"数学:"<<  stu[i].Math<<endl;
                    cout<<"英语:"<<  stu[i].English<<endl; 
                    cout<<"总成绩:"<<  stu[i].total_score<<endl;  
                    }  }
                 
            if (k==-1) {  
                cout << "没有找到语文高于该分数线的同学!"<< endl;  }
                        break;
                    }
            
                    
            case'2':{
                cout<<"请输入需要查询的分数线(查询的同学大于等于该分数线)"<<endl;
                int score;
                cin>>score;  
                 int k=-1; 
                 int i=0;
                for (i = 0; i < size; i++) {  
                    if (stu[i].Math >=score) { 
                    k++;
                    cout<<"***********************************"<<endl;
                    cout<<"姓名:"<<stu[i].name<<endl;
                    cout<<"性别:"<< stu[i].sex<<endl;
                    cout<<"籍贯:"<< stu[i].nation<<endl; 
                    cout<<"身份证号:"<<  stu[i].id<<endl;  
                    cout<<"班级:"<<  stu[i].classnum<<endl; 
                    cout<<"学号:"<<  stu[i].schoolid<<endl; 
                    cout<<"学院:"<<  stu[i].collage<<endl; 
                    cout<<"专业:"<< stu[i].major<<endl;  
                    cout<<"电话号码:"<<  stu[i].phonenum<<endl; 
                    cout<<"QQ号:"<<  stu[i].QQnum<<endl; 
                    cout<<"语文:"<<  stu[i].Chinese<<endl; 
                    cout<<"数学:"<<  stu[i].Math<<endl;
                    cout<<"英语:"<<  stu[i].English<<endl; 
                    cout<<"总成绩:"<<  stu[i].total_score<<endl;  
                    }  }
                 
                if (k==-1) 
                    cout << "没有找到数学高于该分数线的同学!"<< endl; 
                            break;
                        }
                    
            case'3':{   
                   cout<<"请输入需要查询的分数线(查询的同学大于等于该分数线)"<<endl;
                int score;
                cin>>score; 
                int k=-1;
                 int i=0;
                for (i = 0; i < size; i++) {  
                    if (stu[i].English >=score) { 
                    k++;
                    cout<<"***********************************"<<endl;
                    cout<<"姓名:"<<stu[i].name<<endl;
                    cout<<"性别:"<< stu[i].sex<<endl;
                    cout<<"籍贯:"<< stu[i].nation<<endl; 
                    cout<<"身份证号:"<<  stu[i].id<<endl;  
                    cout<<"班级:"<<  stu[i].classnum<<endl; 
                    cout<<"学号:"<<  stu[i].schoolid<<endl; 
                    cout<<"学院:"<<  stu[i].collage<<endl; 
                    cout<<"专业:"<< stu[i].major<<endl;  
                    cout<<"电话号码:"<<  stu[i].phonenum<<endl; 
                    cout<<"QQ号:"<<  stu[i].QQnum<<endl; 
                    cout<<"语文:"<<  stu[i].Chinese<<endl; 
                    cout<<"数学:"<<  stu[i].Math<<endl;
                    cout<<"英语:"<<  stu[i].English<<endl; 
                    cout<<"总成绩:"<<  stu[i].total_score<<endl;  
                    }  }
                 
                if (k==-1)   
                    cout << "没有找到英语高于该分数线的同学!"<< endl;  
                            break;
                        }
                    
     }
    }
 //实现模糊查询
void search_fuzzy(){
    string s;
    cout<<"请输入您想模糊查找学生的部分姓名:";
    cin>>s;
    bool found = false;  
    for(int i=0;i<size;i++){  
        if(stu[i].name.find(s) != string::npos){  //使用了std::string的find函数来查找用户输入的字符串是否在每个学生的名字中
            cout << "查找到学生信息: " << stu[i].name << endl;  
            found = true;  
        }  
    }  cout<<"*******************"<<endl;
    if(!found) cout<<"未查找到学生信息!"<<endl;  
    else {cout<<"是否要进行精确查询:(1/0)"<<endl;
    char cc;
    cc=getch();
    switch(cc){
        case '1':{searchname();
            break;
        }
        case '0':
            break;    
    }
    }
    
}                

//输入班级,实现按总成绩降序输出学生基本信息与成绩信息。
void orderclass_sum(){
    string Classnum;
    cin>>Classnum;
    Student t;
    for(int l=0;l<size;l++)
    for(int i=0;i<size;i++)
    for(int j=0;j<size-i-1;j++){
    if(stu[j].total_score<stu[j+1].total_score)
{
        t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}
        if(stu[j].total_score==stu[j+1].total_score){
            if(stu[j].schoolid>stu[j+1].schoolid){
                t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;
            }
        }
    }
    searchclassnum();
    
}

//实现按专业,输出按给定课程成绩降序排序的学生成绩及学生信息
void ordermajor_sum(){
    string Major;
    cin>>Major;
    Student t;
    for(int i=0;i<size;i++)
    for(int j=0;j<size-i-1;j++){
    if(stu[j].total_score<stu[j+1].total_score&&stu[j].major==Major&&stu[j+1].major==Major)
{
        t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;}
        if(stu[j].total_score==stu[j+1].total_score){
            if(stu[j].schoolid>stu[j+1].schoolid){
                t=stu[j];stu[j]=stu[j+1];stu[j+1]=t;
            }
        }
    }
    searchmajor();
    
}
template <typename T> void cclog(string message,T m,T n){
    
    ofstream ofile;
    ofile.open("日志.txt",ios::app);
    if(!ofile){
    cerr<<"Open file fail"<<endl;
    exit(1);
    }
        time_t nowtime;
    time(&nowtime); //获取197011000秒到现在经过的秒数
    tm* p = localtime(&nowtime); //将秒数转换为本地时间,年从1900算起,需要+1900,月为0-11,所以要+1
    ofile<<message<<'\t'<<"修改前:"<<m<<"    "<<"修改后:"<<n<<"\t" ;
    ofile<<p->tm_year + 1900<<"/"<<p->tm_mon + 1<<"/"<< p->tm_mday<<"/"<<p->tm_hour<<":"<<p->tm_min<<":"<<p->tm_sec<<endl;
    
    ofile.close();
}


//批量修改 
void batch_modify(){//batch批量 modify修改 
    cout<<"输入您想要批量修改的信息;"<<endl; 
    cout<<"1.学院 2.专业 3.班级 "<<endl; 
    char ccc=getch();
    switch(ccc){
        case'1':{
            cout<<"输入修改前学院的名称;";
            string nnnn;
            cin>>nnnn;
            cout<<"输入修改后学院的名称:"; 
            string nnnnn;
            cin>>nnnnn;
            for(int i=0;i<size;i++){
               if(stu[i].collage==nnnn){
               stu[i].collage=nnnnn; }
            }
            string nnn="批量修改学院信息"; 
            cclog(nnn,nnnn,nnnnn);
            cpop();
        break; }
        case'2':{
            cout<<"输入修改前专业的名称;";
            string nnnn;
            cin>>nnnn;
            cout<<"输入修改后专业的名称:"; 
            string nnnnn;
            cin>>nnnnn;
            for(int i=0;i<size;i++){
               if(stu[i].major==nnnn){
               stu[i].major=nnnnn; }
            }
        string nnn="批量修改专业信息"; 
            cclog(nnn,nnnn,nnnnn);cpop();
        break; }
        case'3':{
            cout<<"输入修改前的班级;";
            string nnnn;
            cin>>nnnn;
            cout<<"输入修改后的班级:"; 
            string nnnnn;
            cin>>nnnnn;
            for(int i=0;i<size;i++){
               if(stu[i].classnum==nnnn){
               stu[i].classnum=nnnnn; }
            }string nnn="批量修改班级信息"; 
            cclog(nnn,nnnn,nnnnn);cpop();
        break; }
    
    }
}
//姓名检验 
void Student::checkName(){
    char b[20];
    while(1){
        cout<<"请输入姓名:";
    cin>>name;
    strcpy(b,name.c_str());
    if(name.length()<2||name.length()>20)
    {cout<<"姓名位数不正确,请重新输入!"<<endl;
    continue;
    }
    int k=0;
    for(int i=0;i<name.length();i++){    
    if(isalpha(b[i])||isdigit(b[i])){
        //库函数isalpha检查字符是否是字母,isdigit检查字符是否是数字 
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }
        }if(k==1)continue;break;
    }
    cout<<"输入有效"<<endl;
    }
//性别检验
void Student::checkSex(){
    while(1){
    cout<<"请输入性别:";
    cin>>sex;
    if(sex != "男"&&sex != "女")
    {cout<<"性别输入不正确,请重新输入!"<<endl;
    continue;}break;}
    cout<<"输入有效"<<endl;
}
//籍贯检验
void Student::checknation(){
    cout<<"请输入籍贯:";
    cin>>nation;
}
//身份证号检验
void Student::checkId() {  
    // 检验身份证号码的长度是否正确  
    while(1){ 
    cout<<"请输入身份证号:";
    cin>>id;
    if (id.length() != 18) {  
        cout << "身份证号码无效!" << endl;
        continue;   
    }  
      // 检验身份证号码的前17位是否都是数字  
    for (int i = 0; i < 17; i++) {  
        if (id[i] < '0' || id[i] > '9') {  
            cout << "身份证号码无效!" << endl; 
            continue;    
        }  
    }  
      // 检验身份证号码的最后一位是否是数字或者X(代表罗马数字10if ((id[17] < '0' || id[17] > '9') && id[17] != 'X') {  
        cout << "身份证号码无效!" << endl;   
        continue;  
    }  
      // 检验身份证号码的校验位是否正确  
    int leng[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};  
    char validChar[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};  
    int sum = 0;  
    for (int i = 0; i < 17; i++) {  
        sum += (id[i] - '0') * leng[i];  
    }  
    if (validChar[sum % 11] != id[17]) {  
        cout << "身份证号码无效!" << endl;  
        continue; 
    }  break;
} 
    cout << "身份证号码有效!" << endl;  
} 
//班级检验 
void Student::checkClass(){
    
    char a[10];
    while(1){
        cout<<"请输入8位班级:";
    cin>>classnum;
    strcpy(a,classnum.c_str());
    if(classnum.length()!=8)
    {cout<<"班级位数不正确,请重新输入!"<<endl;
    continue;
    }    
    int k=0;
    for(int i=0;i<8;i++){    
    if(a[i]<'0'||a[i]>'9'){
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }    
        }if(k==1)continue;
    break;
    }
    cout<<"输入有效"<<endl;
}
//学号的检验
void Student::checkSchoolId(){
    char a[20];
    while(1){
    cout<<"请输入10位学号:";
    cin>>schoolid;
    strcpy(a,schoolid.c_str());
    if(schoolid.length()!=10)
    {cout<<"学号位数不正确,请重新输入!"<<endl;
    continue;
    }
    int k=0;
    for(int i=0;i<10;i++){    
    if(a[i]<'0'||a[i]>'9'){
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }
    
        }if(k==1)continue;break;
    }
    cout<<"输入有效"<<endl;
}
//学院检验 
void Student::checkCollage(){
    char c[20];
    while(1){
        cout<<"请输入学院:";
    cin>>collage;
    strcpy(c,collage.c_str());
    if(collage.length()<2||collage.length()>20)
    {cout<<"学院位数不正确,请重新输入!"<<endl;
    continue;
    }
    int k=0;
    for(int i=0;i<collage.length();i++){    
    if(isalpha(c[i])||isdigit(c[i])){
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }
    
        }if(k==1)continue;break;
    }
    cout<<"输入有效"<<endl;

}
//专业检验 
void Student::checkMajor(){
    char d[20];
    while(1){
        cout<<"请输入专业:";
    cin>>major;
    strcpy(d,major.c_str());
    if(major.length()<2||major.length()>20) 
    {cout<<"专业位数不正确,请重新输入!"<<endl;
    continue;
    }
    int k=0;
    for(int i=0;i<major.length();i++){    
    if(isalpha(d[i])||isdigit(d[i])){
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }
    
        }if(k==1)continue;break;
    }
    cout<<"输入有效"<<endl;

}
//电话号码检验
void Student::checkPhoneNum(){
    char b[20];
    while(1){
        cout<<"请输入11位电话号码:";
    cin>>phonenum;
    strcpy(b,phonenum.c_str());
    if(phonenum.length()!=11)
    {cout<<"电话号码位数不正确,请重新输入!"<<endl;
    continue;
    }
    int k=0;
    for(int i=0;i<11;i++){    
    if(b[i]<'0'||b[i]>'9'){
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }
    
        }if(k==1)continue;break;
    }
    cout<<"输入有效"<<endl;
}
//qq号检验
void Student::checkQQNum(){
    char c[12];
    while(1){
        cout<<"请输入QQ号码:";
    cin>>QQnum;
    strcpy(c,QQnum.c_str());
    if(QQnum.length()<5||QQnum.length()>10)
    {cout<<"QQ号码位数不正确,请重新输入!"<<endl;
    continue;
    }
    int k=0;
    for(int i=0;i<10;i++){    
    if(c[i]<'0'||c[i]>'9'){
    cout<<"输入字符格式错误,请重新输入!"<<endl;
    k=1;
    break;
    }
    
        }if(k==1)continue;break;
    }
    cout<<"输入有效"<<endl;
}
//成绩的录入和检验 
void Student::inputscore(){ 
    while(1){
        cout<<"请输入语文成绩:";
    cin>>Chinese;
    
    if(Chinese<0||Chinese>100){
        cout<<"输入成绩不正确,请重新输入:"<<endl;
        continue;
    }
     break;
}cout<<"语文成绩为:"<<Chinese<<endl;

while(1){
        cout<<"请输入数学成绩:";
    cin>>Math;
    
    if(Math<0||Math>100){
        cout<<"输入成绩不正确,请重新输入:"<<endl;
    continue;    
    }
 break;
}cout<<"数学成绩为:"<<Math<<endl;

while(1){
        cout<<"请输入英语成绩:";
    cin>>English;
    
    if(English<0||English>100){
        cout<<"输入成绩不正确,请重新输入:"<<endl;
    continue;
    }
     break;
}cout<<"英语成绩为:"<<English<<endl;

    total_score=Chinese+Math+English;
    cout<<"总成绩为:"<<total_score<<endl;
}



  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-12-07 22:57
    关注

    【以下回答由 GPT 生成】

    我可以帮助你了解如何实现文件加密的方法和建议。

    1. 选择合适的加密算法和密钥长度: 使用可靠的加密算法是确保文件安全的关键。常见的加密算法包括AES、RSA和Blowfish等。选择合适的加密算法与你的需求和可用的计算资源相关。同时,选择适当的密钥长度也很重要,一般来说,密钥长度越长,破解的难度就越大。

    2. 加密文件: 首先,你需要将文件读取到内存中。然后,使用选定的加密算法和密钥将文件内容进行加密。可以使用一些现成的加密库或者算法实现自己的加密功能。一般的步骤包括将文件内容转换为二进制数据,然后使用加密算法和密钥对数据进行加密,最后将加密后的数据写入新的文件中。

    下面以Python代码为例,展示如何使用AES算法进行文件加密:

    ```python
    from Crypto.Cipher import AES
    import os
    
    def encrypt_file(key, file_path, output_path):
        chunk_size = 64 * 1024
        init_vector = os.urandom(16)
    
        cipher = AES.new(key, AES.MODE_CBC, init_vector)
    
        with open(file_path, 'rb') as file:
            encrypted_data = init_vector
            while True:
                chunk = file.read(chunk_size)
                if len(chunk) == 0:
                    break
                elif len(chunk) % 16 != 0:
                    chunk += b' ' * (16 - len(chunk) % 16)
                encrypted_data += cipher.encrypt(chunk)
    
        with open(output_path, 'wb') as file:
            file.write(encrypted_data)
    ```
    
    1. 解密文件: 解密文件的步骤与加密相反。首先,将加密后的文件读取到内存中。然后,使用相同的加密算法和密钥将文件内容解密。解密后的数据可以直接写入一个新的文件中。

    下面以Python代码为例,展示如何使用AES算法进行文件解密:

    ```python
    from Crypto.Cipher import AES
    import os
    
    def decrypt_file(key, file_path, output_path):
        chunk_size = 64 * 1024
    
        with open(file_path, 'rb') as file:
            init_vector = file.read(16)
            cipher = AES.new(key, AES.MODE_CBC, init_vector)
    
            decrypted_data = b''
            while True:
                chunk = file.read(chunk_size)
                if len(chunk) == 0:
                    break
                decrypted_data += cipher.decrypt(chunk)
    
        with open(output_path, 'wb') as file:
            file.write(decrypted_data.strip())
    ```
    
    1. 安全管理密钥: 密钥的安全性非常重要,你应该采取措施来保护密钥的安全。在存储和传输密钥时,可以使用加密算法对密钥本身进行加密,或者将密钥保存在安全的硬件设备中。

    希望以上内容对你有所帮助。如果你还有任何问题,请随时向我提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月19日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 kotlin multiplaform 的共享模块支持蓝牙吗还是说安卓和ios的蓝牙都要自己配
  • ¥15 为什么我的查询总是显示无数据,该怎么修改呢(语言-java)
  • ¥15 IDDPM采样结果异常
  • ¥100 求一个,王者荣耀查询隐藏战绩的教材,爬虫代码
  • ¥60 Cocos creator缓动问题
  • ¥15 专业问题提问,7月5号2点之前
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变