C++实现简单的学生信息管理系统

最近开始入门C++了,在导师的指导下,让我先试着写一个学生信息管理系统,实现基本的增删改查,用C++实现,于是花了两三天写完一个,不过收获不太大吧,因为刚开始,还没有把C++的面向对象思想融入进去,相当于还是用C的面向过程来实现的,还得继续学习。
代码如下:

#include <iostream>
#include <iomanip>
#include <fstream>/*文件 */
#include <stdlib.h>/*cls */
#include <string> /*string字符 */
#include <cstring> /*strcmp函数等。 */

#define N 20  /*字符串变量长度,姓名、班级等 */
#define ARRAY 100 /*过程数组长度,账号密码数组等 */

using namespace std;
/*

by wangxiao
2021.6.22-24
C++入门练习

 */


char stu_file[20]="student.txt";/*学生信息储存文件 */
char user_file[20]="user.txt";/*用户账号密码储存文件 */

int login_UI();/*登录界面 */
int registe_UI();/*注册界面 */
bool registe_save(char *name,char *pwd);/*注册保存至user.txt */
bool check(char *name,char *pwd);/*登录检查 */

int index(char *name);/*主页 */
bool all_stu();/*展示所有学生信息 */
bool add_stu(int stu_id,char *stu_name,char *stu_class,int stu_grade);/*添加学生 */
bool select_stu(int type);/*查找学生 */

int gowhere(char *name);/*辅助页面 */

bool delete_student(int id);/*根据学号删除 */
void DelLineData(char* fileName, int lineNum);/*删除的核心 */

bool modify_student(int id);/*根据学号修改 */
void ModifyLineData(char* fileName, int lineNum, char* lineData);/*修改核心 */


/*首页 */
int main()
{
    system("clear");
    cout << setw(24) << "欢迎光临!" << endl;
    cout << setw(12) << "1.登录" << setw(12) << "2.注册" << endl;
    int num;
    cout << "请选择登录或注册:";
    cin >> num;
    if(num==1)
    login_UI();
    if(num==2)
    registe_UI();
    else
    return 0;

    return 0;

}
/*登录界面 */
int login_UI()
{
    char name[N],pwd[N];
    system("clear");
     cout << setw(24) << "欢迎登录!" << endl;
     cout << setw(12) <<"账号:";
     cin >> name;
     cout << endl;
     cout <<setw(12) <<"密码:";
     cin >> pwd;
     cout << endl;
     if(check(name,pwd))
     {
         cout << "登录成功" <<endl;
         index(name);
     }
     else{
       cout << "登录失败,请重新登录"<<endl;
       main();
       }
}
/*注册界面 */
int registe_UI()
{
    char name[N],pwd[N];
    system("clear");
     cout << setw(24) << "欢迎注册!" << endl;
    cout << setw(12) <<"账号:";
     cin >> name;
     cout << endl;
     cout <<setw(12) <<"密码:";
     cin >> pwd;
     cout << endl;
     if(registe_save(name,pwd))
     {
         cout << "注册成功" <<endl;
         main();
     }
     else{
         cout << "注册失败,请重新注册"<<endl;
     }

}

/*注册 */
bool registe_save(char *name,char *pwd)
{
    ofstream outfile;
    outfile.open(user_file,ios::out | ios::app);
    if(outfile.fail())
    {
        cout << "用户数据文件打开失败"<<endl;
        return false;
    }
    else{
   outfile << name << setw(18) << pwd <<endl;
    outfile.close();
    return true;
    }
 
}


/*检查输入的账号密码 */
bool check(char *name,char *pwd)
{
ifstream in(user_file); 
    if(!in) { 
        cerr<<"Can't open the file."<<endl; 
        return false; 
    } 
    string line;
    string name_data[ARRAY];/*账号数组 */
    string pwd_data[ARRAY];/*密码数组 */
    int i=0,j=0,l=0;
    while(in >> line)
    {
        if((l+1)%2==1)
        {
            name_data[i]=line;
            i++;
        }else
        {
            pwd_data[j]=line;
            j++;

        }
        l++;
    }
    in.close(); 

for(i=0;i<ARRAY;i++)
{
    if(name_data[i].compare(name)==0&&pwd_data[i].compare(pwd)==0)
    {
        return true;
    }
}
return false;

}


/*展示所有学生信息 */
bool all_stu()
{
    ifstream student;
    student.open(stu_file,ios::out | ios::in); 
    string line;
    cout <<"学号"<<"\t"<<"姓名"<<"\t"<<"班级"<<"\t"<<"成绩"<<endl;
    while(getline(student,line))
    cout << line<<endl;
    student.close();
    return true;
}
/*添加学生信息 */
bool add_stu(int stu_id,char *stu_name,char *stu_class,int stu_grade)
{
    ofstream outfile;
    outfile.open(stu_file,ios::out | ios::app);
    if(outfile.fail())
    {
        cout << "学生信息文件打开失败"<<endl;
        return false;
    }else{
   outfile << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
    outfile.close();
    cout << "录入学生信息成功!" << endl;  
    return true;
    }
}
/*查找 */
bool select_stu(int type)
{

    int stu_id,stu_grade;
    char stu_name[N],stu_class[N];
    ifstream select;
    select.open(stu_file);
    if (type == 1) {  
         cout << "请输入查找的学号:";  
         int num;  
      cin >> num;
      while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
           if(num==stu_id){
          cout <<"按学号查找结果如下:"<<endl;
          cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
          return true;
          }  
      }
       
 } 
 else if (type == 2) {  
         cout << "请输入查找的姓名:";  
          char name[N];  
         cin >> name;  
         while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
             if(strcmp(name,stu_name)==0)
             {
                cout <<"按姓名查找结果如下:"<<endl;
                cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
                return true;
             }
         }
}  
 else if (type == 3) {  
         cout << "请输入查找的班级名称:";  
          char in_class[N];  
            cin >> in_class;  
            while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
             if(strcmp(in_class,stu_class)==0)
             {
                cout <<"按班级查找结果如下:"<<endl;
                cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
                return true;
             }
        }
}  
 else if (type == 4) {  
         cout << "请输入查找的分数:";  
          int grade;  
                cin >> grade;  
                while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
             if(grade==stu_grade)
             {
                cout <<"按分数查找结果如下:"<<endl;
                cout << stu_id << "\t" << stu_name<<"\t"<<stu_class<<"\t"<<stu_grade <<endl;
                return true;
             }
                }
}  
          cout << "找不到此学生信息" << endl << endl;  

 return false;

}



/*char转string */
string CharToStr(char * contentChar)
{
	string tempStr;
	for (int i=0;contentChar[i]!='\0';i++)
	{
		tempStr+=contentChar[i];
	}
	return tempStr;
}
/*int转string */
string IntToStr(int n)
{
	int m = n;
      char s[ARRAY];
     char ss[ARRAY];
     int i=0,j=0;
     if (n < 0)// 处理负数
     {
         m = 0 - m;
         j = 1;
         ss[0] = '-';
     }    
     while (m>0)
     {
         s[i++] = m % 10 + '0';
         m /= 10;
     }
     s[i] = '\0';
     i = i - 1;
     while (i >= 0)
     {
         ss[j++] = s[i--];
     }    
     ss[j] = '\0';    
     return ss;
}


/*修改学生信息,根据学号 */
bool modify_student(int id)
{
    int stu_id,stu_grade;
    char stu_name[N],stu_class[N];
    ifstream select;
    select.open(stu_file);
    int line =1;//该学生在第几行
    while(select >> stu_id >> stu_name>>stu_class>>stu_grade){
    if(stu_id==id){
        cout <<endl;
        cout <<"已找到该学生,名为 “"<<stu_name<<"” 输入你想修改的属性(1.学号\t2.姓名\t3.班级\t4.成绩):"<<endl;
        cout <<"请输入:";
        int mod_ch;
        cin>>mod_ch;

    switch(mod_ch){

    case 1:
           cout << "原学号:"<<stu_id<<endl;
           cout << "请输入新学号:";
           int new_id;
           cin>>new_id;
           cout <<"确定修改?(1.是\t2.否)"<<endl;

           cout <<"请输入:";
           int mod_1;
           cin >> mod_1;
           if(mod_1==1){
               string new_data_s=IntToStr(new_id)+"\t" + CharToStr(stu_name) +"\t" + CharToStr(stu_class) +"\t" + IntToStr(stu_grade);
               cout<<new_data_s<<endl;
               char new_data[ARRAY];
               int i;
               for(i=0;i<new_data_s.length();i++)
               new_data[i] = new_data_s[i];
               new_data[i] = '\0';

               ModifyLineData(stu_file,line,new_data);
               cout <<"修改成功"<<endl;
               return true;
           }
           break;

    case 2:
           cout << "原姓名:"<<stu_name<<endl;
           cout << "请输入新姓名:";
           char new_name[N];
           cin>>new_name;
           cout <<"确定修改?(1.是\t2.否)"<<endl;

           cout <<"请输入:";
           int mod_2;
           cin >> mod_2;
           if(mod_2==1){
               string new_data_s=IntToStr(stu_id)+"\t" + CharToStr(new_name) +"\t" + CharToStr(stu_class) +"\t" + IntToStr(stu_grade);
               cout<<new_data_s<<endl;
               char new_data[ARRAY];
               int i;
               for( i=0;i<new_data_s.length();i++)
               new_data[i] = new_data_s[i];
               new_data[i] = '\0';

               ModifyLineData(stu_file,line,new_data);
               cout <<"修改成功"<<endl;
               return true;
           }
           break;


    case 3:
           cout << "原班级:"<<stu_class<<endl;
           cout << "请输入新班级:";
           char new_class[N] ;
           cin>>new_name;
           cout <<"确定修改?(1.是\t2.否)"<<endl;
           cout <<"请输入:";
           int mod_3;
           cin >> mod_3;
           if(mod_3==1){
               string new_data_s=IntToStr(stu_id)+"\t" + CharToStr(stu_name) +"\t" + CharToStr(new_class) +"\t" + IntToStr(stu_grade);
               cout<<new_data_s<<endl;
               char new_data[ARRAY];
               int i;
               for( i=0;i<new_data_s.length();i++)
               new_data[i] = new_data_s[i];
               new_data[i] = '\0';

               ModifyLineData(stu_file,line,new_data);
               cout <<"修改成功"<<endl;
               return true;
           }
           break;

    case 4:
           cout << "原成绩:"<<stu_grade<<endl;
           cout << "请输入新成绩:";
           int new_grade;
           cin>>new_grade;
           cout <<"确定修改?(1.是\t2.否)"<<endl;
           cout <<"请输入:";
           int mod_4;
           cin >> mod_4;
           if(mod_4==1){
               string new_data_s=IntToStr(stu_id)+"\t" + CharToStr(stu_name) +"\t" + CharToStr(stu_class) +"\t" + IntToStr(new_grade);
               cout<<new_data_s<<endl;
               char new_data[ARRAY];
               int i;
               for( i=0;i<new_data_s.length();i++)
               new_data[i] = new_data_s[i];
               new_data[i] = '\0';

               ModifyLineData(stu_file,line,new_data);
               cout <<"修改成功"<<endl;
               return true;
           }
           break;

       }
        break;
    }
    line++;
}
return false;

}


void ModifyLineData(char* fileName, int lineNum, char* lineData)
{
	ifstream in;
	in.open(fileName);
 
	string strFileData = "";
	int line = 1;
	char tmpLineData[1024] = {0};
	while(in.getline(tmpLineData, sizeof(tmpLineData)))
	{
		if (line == lineNum)
		{
			strFileData += CharToStr(lineData);
			strFileData += "\n";
		}
		else
		{
			strFileData += CharToStr(tmpLineData);
			strFileData += "\n";
		}
		line++;
	}
	in.close();
 
	//写入文件
	ofstream out;
	out.open(fileName);
	out.flush();
	out<<strFileData;
	out.close();
}






/*删除学生,根据学号 */
bool delete_student(int id)
{
    int stu_id,stu_grade;
    char stu_name[N],stu_class[N];
    ifstream select;
    select.open(stu_file);
    int line =1;//该学生在第几行
    while(select >> stu_id >> stu_name>>stu_class>>stu_grade)
    {
    if(stu_id==id){
        cout <<endl;
        cout <<"已找到该学生,名为“"<<stu_name<<"”是否删除?  1.是   2.否"<<endl;
        cout <<"请输入:";
        int del_ch;
        cin>>del_ch;
        if(del_ch==1)
        {
            DelLineData(stu_file,line);
            return true;
        }
        else
        return false;

        break;
    }
    line++;
}
return false;

}
void DelLineData(char* fileName, int lineNum)
{
	ifstream in;
	in.open(fileName);
	
	string strFileData = "";
	int line = 1;
	char lineData[1024] = {0};
	while(in.getline(lineData, sizeof(lineData)))
	{
		if (line == lineNum)
		{
			strFileData += "";
		}
		else
		{
			strFileData += CharToStr(lineData);
			strFileData += "\n";
		}
		line++;
	}
	in.close();
 
	//写入文件
	ofstream out;
	out.open(fileName);
	out.flush();
	out<<strFileData;
	out.close();
}


/*主页 */
int index(char *name)
{
    system("clear");
    cout <<"欢迎您:"<< name <<endl;
    cout<<endl;
    cout <<"请执行如下操作"<<endl;
    cout << "1.查看全体学生信息" <<endl;
    cout << "2.添加学生信息" <<endl;
    cout << "3.查找学生信息" <<endl;
    cout << "4.修改学生信息" <<endl;
    cout << "5.删除学生信息" <<endl;
    cout << "6.退出" <<endl;
    cout<<endl;
    cout<<"请输入执行号:";
    char choice;
    cin >> choice;
    switch (choice) {  
        case '1':  
            cout << endl;  
            cout << "显示当前全体学生信息:" << endl;  
            if(all_stu())
            gowhere(name);
            cout << endl;  
            break;  
        case '2':  
            cout << endl;  
            int stu_id,stu_grade;
            char stu_name[N],stu_class[N];
            cout << "输入学生信息:" << endl;  
    cout << "学号:";  
    cin >> stu_id;  
    cout << "姓名:";  
    cin >> stu_name;  
    cout << "班级:";  
    cin >> stu_class;  
    cout << "成绩:";  
    cin >> stu_grade;  

            cout << endl;  
            if(add_stu(stu_id,stu_name,stu_class,stu_grade))
            gowhere(name); 
            break;  
        case '3':  
            cout << endl;  
            cout << "1.根据学号查询\t2.根据姓名查询\t3.根据班级查询\t4.根据成绩查询"<<endl;  
            int ch;  
            cout <<"请输入:";
            cin >> ch; 
            select_stu(ch);
            gowhere(name); 
            break;  
        case '4':  
        {  
                    cout << endl;  
                    all_stu();
                    cout << "请输入你想修改的学号:";  
                    int id;  
                    cin >> id; 
                    if(modify_student(id))
                    {
                         cout <<"修改成功!"<< endl;
               cout << "当前全体学生信息:" << endl;  
               all_stu();
               gowhere(name); 
                    }
                
                    break;  
        }  
        case '5':  
            cout << endl;  
            all_stu();
            cout << "请输入你想删除的学号:";  
            int id;  
            cin >> id;  
           if(delete_student(id))
           {
               cout <<"删除成功!"<< endl;
               cout << "当前全体学生信息:" << endl;  
               all_stu();
               gowhere(name); 
           }else{
               cout <<"没有该学号,删除失败,请重试"<<endl;
              gowhere(name); 
           }
            cout << endl;  
            break;  
        case '6':  
        {  
            system("clear");
                    cout << "退出系统:";  
                    cout << endl;  
                    break;  
        }  
    }
}
/*辅助页面 */
int gowhere(char *name){
    cout <<endl;
    cout<<"操作执行完毕......"<<endl;
    cout<<"1.回主页  2.退出登录  3.退出系统"<<endl;
    cout <<"请选择:"<<endl;
    int go_w;
    cin>>go_w;
    if(go_w==1){
        index(name);
    }else if(go_w==2){
        main();
    }else{
         cout << "退出系统:";  
         cout << endl;  
        return 0;
    }
return 0;
}
  • 1
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值