学生成绩管理系统(c++代码)(自己写的,大佬勿喷)(代码有大量注释,包看懂的)

#include<bits/stdc++.h>
#include <conio.h>
#include<windows.h>
using namespace std;
int mark1;
string Account;//账号
char Password[20];//密码
//管理员类
class controller{
	public:
		void print();//版权信息
		bool login();//登录
		void mysystem();//主菜单
		void initdata(int n);//初始化数据
		void read_massage();//从文件读入数据
		bool enroll();//注册
		bool check(string a,string b);//登录检查账号密码
		void quit();//退出系统
		controller(){}//无惨构造函数
		controller(string a,string b):account(a),password(b){}//有参构造函数
	private:
		string account;//账号
		string password;//密码
};

//用户信息
vector<controller>user_massage;


void controller::read_massage(){
	ifstream input("D:\\asus\\user_massage",ios::in);//以只读方式打开文件
	if(input.is_open()){//if条件语句判断是否打开文件
		
		while(!input.eof()){//while循环从文件头到文件尾
			string account="",password="";
			input>>account;
			if(input.eof())break;
			input>>password;
			user_massage.push_back({account,password});//从文件读入账号密码
		}
		input.close();//关闭文件
	}else cout<<"\t\t\t error ,文件打开失败"<<endl;
}


bool controller::check(string a,string b){//a是账号   b是密码
	for(int i=0;i<user_massage.size();i++){
		//for循环比对账号密码是否正确
		if(a==user_massage[i].account&&b==user_massage[i].password)return true;//如果正确返回true
	}
	return false;
}


//学生类
class student{
	public:
		student(){}//无参构造函数
		student(string sid,string sname,int sage,string tle,string sex,int score):sid(sid),sname(sname),sage(sage),tle(tle),sex(sex),score(score){}//有参构造函数
		void show();//展示学生信息
		void inquire();//查询学生信息
		void alter();//修改学生信息
		void add();//添加学生信息
		void sdelete();//删除学生信息
		bool save(int n);//添加数据时将信息导入文件
		bool update(int n);//更新文件信息
		friend bool cmp2(student a,student b);//友元比较函数
		friend bool cmp3(student a,student b);//友元比较函数
		friend bool cmp4(student a,student b);//友元比较函数
		friend bool cmp5(student a,student b);//友元比较函数
	private:
		string sid;//学号
		string sname;//姓名
		int sage;//年龄
		string tle;//联系方式
		string sex;//性别
		int score;//成绩
};

//友元比较函数
bool cmp2(student a,student b){
	return a.sage<b.sage;//年龄从小到大
}
bool cmp3(student a,student b){
	return a.sage>b.sage;//年龄从大到小
}
bool cmp4(student a,student b){
	return a.score<b.score;//成绩从小到大
}
bool cmp5(student a,student b){
	return a.score>b.score;//成绩从大到小
}


vector<student>mysql;//学生信息

//更新文件信息
bool student::update(int n){
	if(n==1){
		ofstream out("D:\\asus\\student1_score",ios::out);//打开文件并且清空
		if(out.is_open()){//if语句判断是否打开文件
			for(int i=0;i<mysql.size();i++){
				//把mysql中的数据写到文件
				out<<mysql[i].sid<<"\t"<<mysql[i].sname<<"\t"<<mysql[i].sage<<"\t"<<mysql[i].tle<<"\t"<<mysql[i].sex<<"\t"<<mysql[i].score<<"\t"<<endl;
			}
			out.close();//关闭文件
			return true;
		}
		return false;
	}else if(n==2){
		ofstream out("D:\\asus\\student2_score",ios::out);//打开文件并且清空
		if(out.is_open()){//if语句判断是否打开文件
			for(int i=0;i<mysql.size();i++){
				//把mysql中的数据写到文件
				out<<mysql[i].sid<<"\t"<<mysql[i].sname<<"\t"<<mysql[i].sage<<"\t"<<mysql[i].tle<<"\t"<<mysql[i].sex<<"\t"<<mysql[i].score<<"\t"<<endl;
			}
			out.close();//关闭文件
			return true;
		}
		return false;
	}else{
		ofstream out("D:\\asus\\student3_score",ios::out);//打开文件并且清空
		if(out.is_open()){//if语句判断是否打开文件
			for(int i=0;i<mysql.size();i++){
				//把mysql中的数据写到文件
				out<<mysql[i].sid<<"\t"<<mysql[i].sname<<"\t"<<mysql[i].sage<<"\t"<<mysql[i].tle<<"\t"<<mysql[i].sex<<"\t"<<mysql[i].score<<"\t"<<endl;
			}
			out.close();//关闭文件
			return true;
		}
		return false;
	}
}

//添加数据时将信息导入文件
bool student::save(int n){
	if(n==1){
		ofstream out("D:\\asus\\student1_score",ios::app);//以追加的方式打开文件
		if(out.is_open()){//if语句判断文件是否打开
			//将追加的数据写入文件
			out<<sid<<"\t"<<sname<<"\t"<<sage<<"\t"<<tle<<"\t"<<sex<<"\t"<<score<<"\t"<<endl;
			out.close();//关闭文件
			return true;
		}
		return false;
	}else if(n==2){
		ofstream out("D:\\asus\\student2_score",ios::app);//以追加的方式打开文件
		if(out.is_open()){//if语句判断文件是否打开
			//将追加的数据写入文件
			out<<sid<<"\t"<<sname<<"\t"<<sage<<"\t"<<tle<<"\t"<<sex<<"\t"<<score<<"\t"<<endl;
			out.close();//关闭文件
			return true;
		}
		return false;
	}else{
		ofstream out("D:\\asus\\student3_score",ios::app);//以追加的方式打开文件
		if(out.is_open()){//if语句判断文件是否打开
			//将追加的数据写入文件
			out<<sid<<"\t"<<sname<<"\t"<<sage<<"\t"<<tle<<"\t"<<sex<<"\t"<<score<<"\t"<<endl;
			out.close();//关闭文件
			return true;
		}
		return false;
	}
}

//展示学生信息
void student::show(){
	system("cls");//清屏
	mysql.clear();//清空数组
	controller use;//创建对象
	use.initdata(mark1);//初始化数据
	use.print();//打印界面
	if(mysql.empty()){//判断数组是否为空
		cout<<"\t\t\t暂时没有数据"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	cout<<"\t\t\t\t**********请选择排序依据*********"<<endl;
	cout<<"\t\t\t\t1.年龄升序排序"<<endl;
	cout<<"\t\t\t\t2.年龄降序排序"<<endl;
	cout<<"\t\t\t\t3.成绩升序排序"<<endl;
	cout<<"\t\t\t\t4.成绩降序排序"<<endl;
	string operation;//操作变量
	cout<<"\t\t\t\t请输入操作:";
	cin>>operation;
	if(operation=="1"){
		vector<student>mysql1;//备份学生信息
		mysql1=mysql;//备份学生信息
		sort(mysql.begin(),mysql.end(),cmp2);
		if(mysql[0].update(mark1))cout<<"\t\t\t\t年龄升序排序成功"<<endl;
		else{
			cout<<"\t\t\t\t年龄升序排序失败"<<endl;
			mysql=mysql1;//还原学生信息
			system("pause");//屏幕暂停
			system("cls");//清屏
			return ;
		}
		system("pause");//屏幕暂停
		system("cls");//清屏
	}else if(operation=="2"){
		vector<student>mysql1;//备份学生信息
		mysql1=mysql;//备份学生信息
		sort(mysql.begin(),mysql.end(),cmp3);
		if(mysql[0].update(mark1))cout<<"\t\t\t\t年龄降序排序成功"<<endl;
		else{
			cout<<"\t\t\t\t年龄降序排序失败"<<endl;
			mysql=mysql1;//还原学生信息
			system("pause");//屏幕暂停
			system("cls");//清屏
			return ;
		}
		system("pause");//屏幕暂停
		system("cls");//清屏
	}else if(operation=="3"){
		vector<student>mysql1;//备份学生信息
		mysql1=mysql;//备份学生信息
		sort(mysql.begin(),mysql.end(),cmp4);
		if(mysql[0].update(mark1))cout<<"\t\t\t\t成绩升序排序成功"<<endl;
		else{
			cout<<"\t\t\t\t成绩升序排序失败"<<endl;
			mysql=mysql1;//还原学生信息
			system("pause");//屏幕暂停
			system("cls");//清屏
			return ;
		}
		system("pause");//屏幕暂停
		system("cls");//清屏
	}else if(operation=="4"){
		vector<student>mysql1;//备份学生信息
		mysql1=mysql;//备份学生信息
		sort(mysql.begin(),mysql.end(),cmp5);
		if(mysql[0].update(mark1))cout<<"\t\t\t\t成绩降序排序成功"<<endl;
		else{
			cout<<"\t\t\t\t成绩降序排序失败"<<endl;
			mysql=mysql1;//还原学生信息
			system("pause");//屏幕暂停
			system("cls");//清屏
			return ;
		}
		system("pause");//屏幕暂停
		system("cls");//清屏
	}else{
		cout<<"\t\t\t\t非法指令!!!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	cout<<"\t\t\t\t\t*************显示全部人员信息*************"<<endl<<endl;
	cout<<"\t\t\t\t\t*************共有"<<mysql.size()<<"位人员信息*************"<<endl<<endl;//mysql.size()统计数组个数
	cout<<"\n\n\n";
	cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
	int cnt=0;//计数器
	int num=1;//页数
	//分页查看
	for(int i=0;i<mysql.size();i++){
		//将学生信息打印到屏幕
		cnt++;
		cout<<"\t\t\t"<<mysql[i].sid<<"\t\t"<<mysql[i].sname<<"\t\t"<<mysql[i].sage<<"\t\t"<<mysql[i].tle[0]<<mysql[i].tle[1]<<mysql[i].tle[2];
		cout<<"***"<<mysql[i].tle[8]<<mysql[i].tle[9]<<mysql[i].tle[10]<<"\t\t"<<mysql[i].sex<<"\t\t"<<mysql[i].score<<endl;
		if(cnt%15==0||i==mysql.size()-1&&mysql.size()>15){
			int mark;
			if(i==mysql.size()-1)mark=cnt;//控制页数,mysql.size()-1最后一页标记
			cnt=0;
			cout<<"\t\t\t\t\t\t\t\t第"<<num<<"页"<<endl;
			if(i==mysql.size()-1){
				double cnt1=0;//优秀人数
				double cnt2=0;//及格人数
				double cnt3=0;//不及格人数
				for(auto j:mysql){
					if(j.score>=90)cnt1++;
					if(j.score>=60)cnt2++;
					if(j.score<60)cnt3++;
				}
				cout<<"\t\t\t优秀率\t\t\t及格率\t\t\t不及格率"<<endl;
				printf("\t\t\t%.2lf\t\t\t%.2lf\t\t\t%.2lf\n",cnt1/mysql.size(),cnt2/mysql.size(),cnt3/mysql.size());
			}
			cout<<"\t\t\t\t\t1.上一页*****\n\t\t\t\t\t2.下一页*****\n\t\t\t\t\t3.首页*****\n\t\t\t\t\t4.尾页*****\n\t\t\t\t\t5.退出\n\n"<<endl;
			cout<<"\t\t\t\t\t请输入操作:";
			string operation;//操作变量
			cin>>operation;
			//上一页
			if(operation=="1"){
				if(i==mysql.size()-1){
					i-=mark+15;
					num--;
					system("pause");//屏幕暂停
					system("cls");//清屏
					use.print();//打印界面
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
				}else if(num==1){
					cout<<"\t\t\t\t\t已经是首页"<<endl;
					i-=15;
					system("pause");//屏幕暂停
					system("cls");//清屏
					use.print();//打印界面
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
				}else{
					num--;
					i-=30;
					system("pause");//屏幕暂停
					system("cls");//清屏
					use.print();//打印界面
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
				}
			}else if(operation=="2"){//下一页
				if(i==mysql.size()-1){
					cout<<"\t\t\t\t\t已经是尾页"<<endl;
					i-=mark;
					system("pause");//屏幕暂停
					system("cls");//清屏
					use.print();//打印界面
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
				}else{
					num++;
					system("pause");//屏幕暂停
					system("cls");//清屏
					use.print();//打印界面
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
				}
			}else if(operation=="3"){//首页
				i=-1;
				num=1;
				system("pause");//屏幕暂停
				system("cls");//清屏
				use.print();//打印界面
				cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
			}else if(operation=="4"){//尾页
				int num1=mysql.size()%15;
				i=mysql.size()/15*15-1;
				num=mysql.size()/15+1;
				system("pause");//屏幕暂停
				system("cls");//清屏
				use.print();//打印界面
				cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
			}else if(operation=="5"){
				system("pause");//屏幕暂停
				return ;
			}
			else{
				cout<<"\t\t\t\t非法指令!!!"<<endl;
				system("pause");//屏幕暂停
				return ;
			}
		}
	}
	if(mysql.size()<=15)cout<<"\t\t\t\t\t\t\t\t第"<<1<<"页"<<endl;
	double cnt1=0;//优秀人数
	double cnt2=0;//及格人数
	double cnt3=0;//不及格人数
	for(auto j:mysql){
		if(j.score>=90)cnt1++;
		if(j.score>=60)cnt2++;
		if(j.score<60)cnt3++;
	}
	cout<<"\t\t\t优秀率\t\t\t及格率\t\t\t不及格率"<<endl;
	printf("\t\t\t%.2lf\t\t\t%.2lf\t\t\t%.2lf\n",cnt1/mysql.size(),cnt2/mysql.size(),cnt3/mysql.size());
	system("pause");//屏幕暂停
}

//查询学生信息
void student::inquire(){
	system("cls");//清屏
	if(mysql.empty()){//判断数组是否为空
		cout<<"\t\t\t\t\t暂时没有数据"<<endl;
		system("pause");//暂停
		return ;
	}
	mysql[0].update(mark1);//更新数据
	cout<<"\t\t\t\t\t**************条件查询人员信息**************"<<endl;
	cout<<"\t\t\t\t\t****************条件查询操作****************"<<endl;
	cout<<"\t\t\t\t\t*****************1.学号查询*****************"<<endl;
	cout<<"\t\t\t\t\t*****************2.姓名查询*****************"<<endl;
	cout<<"\t\t\t\t\t*****************3.模糊查询*****************"<<endl;
	cout<<"\t\t\t\t\t*****************4.成绩查询*****************"<<endl;
	cout<<"\t\t\t\t\t请输入操作:";
	string operation;//操作变量
	cin>>operation;
	if(operation=="1"){//学号查询
		cout<<"\t\t\t\t\t请输入学号:";
		string searchid;//操作变量
		int len=mysql.size(),num=0;//len取数组长度   ,num是计数器
		cin>>searchid;//操作变量
		for(int i=0;i<len;i++){//循环遍历mysql数组
			if(searchid==mysql[i].sid){
				num++;//计数器加加
				//把信息输出到屏幕
				cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
				cout<<"\t\t\t"<<mysql[i].sid<<"\t\t"<<mysql[i].sname<<"\t\t"<<mysql[i].sage<<"\t\t"<<mysql[i].tle[0];
				cout<<mysql[i].tle[1]<<mysql[i].tle[2]<<"***"<<mysql[i].tle[8]<<mysql[i].tle[9]<<mysql[i].tle[10]<<"\t\t"<<mysql[i].sex<<"\t\t"<<mysql[i].score<<endl;
				break;
			}
		}
		//如果没人
		if(num<=0)cout<<"\t\t\t\t\t查无此人"<<endl;
		else cout<<"\t\t\t\t\t共查询到"<<num<<"位学生"<<endl;//统计个数
	}else if(operation=="2"){//姓名查询
		cout<<"\t\t\t\t\t请输入姓名:";
		string searchname;//操作变量
		int len=mysql.size(),num=0,mark=0;//len取数组长度   ,num是计数器  ,mark标记变量
		cin>>searchname;//操作变量
		for(int i=0;i<len;i++){//循环遍历mysql数组
			if(searchname==mysql[i].sname){//如果找到
				num++;//计数器加加
				if(mark==0){
					//把信息输出到屏幕
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
					mark=1;//修改标记变量
				}
				//把信息输出到屏幕
				cout<<"\t\t\t"<<mysql[i].sid<<"\t\t"<<mysql[i].sname<<"\t\t"<<mysql[i].sage<<"\t\t"<<mysql[i].tle[0];
				cout<<mysql[i].tle[1]<<mysql[i].tle[2]<<"***"<<mysql[i].tle[8]<<mysql[i].tle[9]<<mysql[i].tle[10]<<"\t\t"<<mysql[i].sex<<"\t\t"<<mysql[i].score<<endl;
			}
		}
		if(num<=0)cout<<"\t\t\t\t\t查无此人"<<endl;
		else cout<<"\t\t\t\t\t共查询到"<<num<<"位学生"<<endl;//统计个数
	}else if(operation=="3"){//模糊查询
		cout<<"\t\t\t\t\t请输入字段:";
		string searchfield;//操作变量
		int len=mysql.size(),num=0,mark=0;//len取数组长度   ,num是计数器  ,mark标记变量
		cin>>searchfield;
		for(int i=0;i<len;i++){//循环遍历mysql数组
			if(strstr(mysql[i].sname.c_str(),searchfield.c_str())!=NULL){//if条件字段判断
				num++;//计数器加加
				if(mark==0){
					//把信息输出到屏幕
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
					mark=1;//修改标记变量
				}
				//把信息输出到屏幕
				cout<<"\t\t\t"<<mysql[i].sid<<"\t\t"<<mysql[i].sname<<"\t\t"<<mysql[i].sage<<"\t\t"<<mysql[i].tle[0];
				cout<<mysql[i].tle[1]<<mysql[i].tle[2]<<"***"<<mysql[i].tle[8]<<mysql[i].tle[9]<<mysql[i].tle[10]<<"\t\t"<<mysql[i].sex<<"\t\t"<<mysql[i].score<<endl;
			}
		}
		if(num<=0)cout<<"\t\t\t\t\t查无此人"<<endl;
		else cout<<"\t\t\t\t\t共查询到"<<num<<"位学生"<<endl;//统计个数
	}else if(operation=="4"){//成绩查询
		cout<<"\t\t\t\t\t请输入成绩:";
		int searchscore;//操作变量
		cin>>searchscore;
		if(!(searchscore>=0&&searchscore<=100)){//成绩限制条件
			cout<<"\t\t\t\t\t成绩无效"<<endl;
			system("pause");//暂停
			return ;
		}
		int len=mysql.size(),num=0,mark=0;//len取数组长度   ,num是计数器  ,mark标记变量
		for(int i=0;i<len;i++){//循环遍历mysql数组
			if(searchscore==mysql[i].score){//查看符合条件的成绩
				num++;//计数器加加
				if(mark==0){
					//把信息输出到屏幕
					cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
					mark=1;//修改标记变量
				}
				//把信息输出到屏幕
				cout<<"\t\t\t"<<mysql[i].sid<<"\t\t"<<mysql[i].sname<<"\t\t"<<mysql[i].sage<<"\t\t"<<mysql[i].tle[0];
				cout<<mysql[i].tle[1]<<mysql[i].tle[2]<<"***"<<mysql[i].tle[8]<<mysql[i].tle[9]<<mysql[i].tle[10]<<"\t\t"<<mysql[i].sex<<"\t\t"<<mysql[i].score<<endl;
			}
		}
		if(num<=0)cout<<"\t\t\t\t\t查无此人"<<endl;
		else cout<<"\t\t\t\t\t共查询到"<<num<<"位学生"<<endl;//统计个数
	}else{
		cout<<"\t\t\t\t\t非法操作"<<endl<<endl;
	}
	system("pause");//暂停
}

//修改学生信息
void student::alter(){
	system("cls");//清屏
	if(mysql.size()<=0){//判断数组是否为空
		cout<<"\t\t\t\t\t暂无信息,无法修改"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	mysql[0].show();//显示所有信息
	system("cls");//清屏
	cout<<"\t\t\t\t\t*************修改人员信息*************"<<endl<<endl;
	cout<<"\t\t\t\t\t请输入要修改的学生的学号:";
	string alter_id;//操作变量
	cin>>alter_id;
	int i=0,find=0;//i 循环变量  find标记变量
	for(;i<mysql.size();i++){//循环遍历mysql数组
		if(mysql[i].sid==alter_id){//判断学号是否相等
			find=1;//修改标记变量
			break;
		}
	}
	if(!find){
		cout<<"\t\t\t\t\t查无此人!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	cout<<"\t\t\t\t\t****请输入要修改的信息****"<<endl;
	cout<<"\t\t\t\t请输入姓名:";
	cin>>mysql[i].sname;
	cout<<"\t\t\t\t请输入年龄:";
	cin>>mysql[i].sage;
	cout<<"\t\t\t\t请输入联系方式:";
	cin>>mysql[i].tle;
	cout<<"\t\t\t\t请输入性别:";
	cin>>mysql[i].sex;
	cout<<"\t\t\t\t请输入成绩:";
	cin>>mysql[i].score;
	//年龄校验
	if(mysql[i].sage<=0||mysql[i].sage>=60){//年龄在0到60岁之间
		cout<<"\t\t\t年龄有误,信息修改失败!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	//联系方式校验
	if(mysql[i].tle.size()!=11){//联系方式必修是11位号码
		cout<<"\t\t\t联系方式有误,信息修改失败!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	//性别校验
	if(!(mysql[i].sex=="男"||mysql[i].sex=="女")){//性别是男或女
		cout<<"\t\t\t性别有误,信息修改失败!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	//成绩校验
	if(mysql[i].score<0||mysql[i].score>100){//成绩是0到100
		cout<<"\t\t\t成绩有误,信息修改失败!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	if(mysql[i].update(mark1))cout<<"\t\t\t\t更新成功"<<endl;//mysql[i].update()返回布尔值,判断是否更新成功
	else cout<<"\t\t\t\t更新失败"<<endl;
	system("pause");//屏幕暂停
}

//添加学生信息
void student::add(){
	system("cls");//清屏
	cout<<"\t\t\t请输入学生信息"<<endl;
	student stu;
	cout<<"\t\t\t请输入学号:";
	cin>>stu.sid;
	cout<<"\t\t\t请输入姓名:";
	cin>>stu.sname;
	cout<<"\t\t\t请输入年龄:";
	cin>>stu.sage;
	cout<<"\t\t\t请输入联系方式:";
	cin>>stu.tle;
	cout<<"\t\t\t请输入性别:";
	cin>>stu.sex;
	cout<<"\t\t\t请输入成绩:";
	cin>>stu.score;
	//学号校验
	if(stu.sid.size()!=3){
		cout<<"\t\t\t学号有误,信息添加失败!"<<endl;
		system("pause");//屏幕暂停
		return ;
	}
	//学号唯一性
	for(auto j:mysql){
		if(stu.sid==j.sid){//判断学号是否重复
			cout<<"\t\t\t学号重复,信息添加失败!"<<endl;
			system("pause");//屏幕暂停
			return ;
		}
	}
	//年龄校验
	if(stu.sage<=0||stu.sage>=60){
		cout<<"\t\t\t年龄有误,信息添加失败!"<<endl;//年龄在0到60岁之间
		system("pause");//屏幕暂停
		return ;
	}
	//联系方式校验
	if(stu.tle.size()!=11){
		cout<<"\t\t\t联系方式有误,信息添加失败!"<<endl;//联系方式必修是11位号码
		system("pause");//屏幕暂停
		return ;
	}
	//联系方式唯一性
	for(auto j:mysql){
		if(stu.tle==j.tle){//判断联系方式是否重复
			cout<<"\t\t\t联系方式重复,信息添加失败!"<<endl;
			system("pause");//屏幕暂停
			return ;
		}
	}
	//性别校验
	if(!(stu.sex=="男"||stu.sex=="女")){
		cout<<"\t\t\t性别有误,信息添加失败!"<<endl;//性别是男或女
		system("pause");//屏幕暂停
		return ;
	}
	//成绩校验
	if(stu.score<0||stu.score>100){
		cout<<"\t\t\t成绩有误,信息添加失败!"<<endl;//成绩是0到100
		system("pause");//屏幕暂停
		return ;
	}
	if(stu.save(mark1)){//stu.save()将添加的数据写入文件
		//把信息打印到屏幕
		cout<<"\t\t\t学号"<<"\t\t姓名"<<"\t\t年龄"<<"\t\t联系方式"<<"\t\t性别"<<"\t\t成绩"<<endl;
		cout<<"\t\t\t"<<stu.sid<<"\t\t"<<stu.sname<<"\t\t"<<stu.sage<<"\t\t"<<stu.tle<<"\t\t"<<stu.sex<<"\t\t"<<stu.score<<endl;
		cout<<"\t\t\t成功添加"<<endl;
	}
	else cout<<"文件打开异常,添加失败!!!"<<endl;
	system("pause");//屏幕暂停
	cout<<"\t\t\t是否要继续添加学生信息:";
	string operation;//操作变量
	cin>>operation;
	if(operation=="是")add();//递归调用add()
	else if(operation=="否"){
		cout<<"\t\t\t添加结束"<<endl;
		system("pause");//屏幕暂停
	}
	else{
		cout<<"\t\t\t  error :非法指令!!!"<<endl;
		system("pause");//屏幕暂停
	}
}

//删除学生信息
void student::sdelete(){
	system("cls");//清屏
	cout<<"\t\t\t\t\t*************删除人员信息*************"<<endl<<endl;
	cout<<"\t\t\t\t\t**************************************"<<endl;
	cout<<"\t\t\t\t\t**********1.删除单个学生信息**********"<<endl;
	cout<<"\t\t\t\t\t**************************************"<<endl;
	cout<<"\t\t\t\t\t**********2.删除全部学生信息**********"<<endl;
	cout<<"\t\t\t\t\t**************************************"<<endl<<endl;
	cout<<"\t\t\t\t\t请输入操作:";
	string operation;//操作变量
	cin>>operation;
	if(operation=="1"){
		system("cls");//清屏
		mysql[0].show();
		system("cls");//清屏
		if(mysql.size()<=0){
			cout<<"\t\t\t\t\t暂无信息,无法删除"<<endl;
			system("pause");//暂停
			return ;
		}
		cout<<"\t\t\t\t\t请输入要删除的学生学号:";
		string delete_id;//学号
		cin>>delete_id;
		cout<<"\t\t\t\t\t确认删除吗?(是/否)"<<endl;
		cout<<"\t\t\t\t\t请输入指令:";
		string operation1;//操作变量
		cin>>operation1;
		int find=0;//标记变量
		if(operation1=="是"){
			for(int i=0;i<mysql.size();i++){//循环遍历mysql数组
				if(delete_id==mysql[i].sid){//判断学号是否相等
					find=1;//改变变量
					mysql.erase(mysql.begin()+i);//删除操作
					break;
				}
			}
		}else if(operation1=="否"){
		}else cout<<"\t\t\t\t\t非法指令!!!"<<endl;
		if(find&&mysql[0].update(mark1))cout<<"\t\t\t\t删除成功"<<endl;//find&&mysql[0].update()更新并且标记成功
		else cout<<"\t\t\t\t查无此人"<<endl;
	}else if(operation=="2"){
		system("cls");//清屏
		cout<<"\t\t\t\t\t*************************************************"<<endl;
		cout<<"\t\t\t\t\t**********确定删除全部学生信息?(是/否)**********"<<endl;
		cout<<"\t\t\t\t\t*************************************************"<<endl;
		string operation1;//操作变量
		cout<<"\t\t\t\t\t请输入指令:";
		cin>>operation1;
		if(operation1=="是"){
			if(mark1==1){
				ofstream out("D:\\asus\\student1_score",ios::out);//以清空的方式打开文件
				if(out.is_open()){//判断文件是否打开成功
					cout<<"\t\t\t\t删除成功"<<endl;
					mysql.clear();
					out.close();//关闭文件
				}else cout<<"\t\t\t\t文件无法打开,删除失败"<<endl;
			}else if(mark1==2){
				ofstream out("D:\\asus\\student2_score",ios::out);//以清空的方式打开文件
				if(out.is_open()){//判断文件是否打开成功
					cout<<"\t\t\t\t删除成功"<<endl;
					mysql.clear();
					out.close();//关闭文件
				}else cout<<"\t\t\t\t文件无法打开,删除失败"<<endl;
			}else{
				ofstream out("D:\\asus\\student3_score",ios::out);//以清空的方式打开文件
				if(out.is_open()){//判断文件是否打开成功
					cout<<"\t\t\t\t删除成功"<<endl;
					mysql.clear();
					out.close();//关闭文件
				}else cout<<"\t\t\t\t文件无法打开,删除失败"<<endl;
			}
		}else if(operation1=="否"){
		}else cout<<"\t\t\t非法操作!!!"<<endl;
	}else cout<<"\t\t\t非法操作!!!"<<endl;
	system("pause");//暂停
}

//退出系统
void controller::quit(){
	cout<<"						成功退出系统"<<endl;
	exit(0);//结束程序
}

//初始化学生数据
void controller::initdata(int n){
	if(n==1){
		ifstream input("D:\\asus\\student1_score",ios::in);//以只读的方式打开文件
		if(input.is_open()){//判断文件是否打开
			string s;//变量(读取一行)
			string sum[6];//变量
			int cnt=0,num=0;
			while(getline(input,s)){
				cnt=0;
				num=0;
				int mark=s.find("\t",cnt);//记录第一次\t出现的下标
				while(mark>-1){
					sum[num++]=s.substr(cnt,mark-cnt);//substr字符串剪切函数
					cnt=mark+1;//cnt=\t出现的下标加一
					mark=s.find("\t",cnt);//记录第一次\t出现的下标
				}
				mysql.push_back({sum[0],sum[1],atoi(sum[2].c_str()),sum[3],sum[4],atoi(sum[5].c_str())});//往mysql中添加数据
				//atoi()把字符串转化为数字,c_str()函数返回一个指向正规C字符串的指针常量
			}
			input.close();//关闭文件
		}else{
			cout<<"\t\t\t打开文件失败!!!"<<endl;
		}
	}else if(n==2){
		ifstream input("D:\\asus\\student2_score",ios::in);//以只读的方式打开文件
		if(input.is_open()){//判断文件是否打开
			string s;//变量(读取一行)
			string sum[6];//变量
			int cnt=0,num=0;
			while(getline(input,s)){
				cnt=0;
				num=0;
				int mark=s.find("\t",cnt);//记录第一次\t出现的下标
				while(mark>-1){
					sum[num++]=s.substr(cnt,mark-cnt);//substr字符串剪切函数
					cnt=mark+1;//cnt=\t出现的下标加一
					mark=s.find("\t",cnt);//记录第一次\t出现的下标
				}
				mysql.push_back({sum[0],sum[1],atoi(sum[2].c_str()),sum[3],sum[4],atoi(sum[5].c_str())});//往mysql中添加数据
				//atoi()把字符串转化为数字,c_str()函数返回一个指向正规C字符串的指针常量
			}
			input.close();//关闭文件
		}else{
			cout<<"\t\t\t打开文件失败!!!"<<endl;
		}
	}else{
		ifstream input("D:\\asus\\student3_score",ios::in);//以只读的方式打开文件
		if(input.is_open()){//判断文件是否打开
			string s;//变量(读取一行)
			string sum[6];//变量
			int cnt=0,num=0;
			while(getline(input,s)){
				cnt=0;
				num=0;
				int mark=s.find("\t",cnt);//记录第一次\t出现的下标
				while(mark>-1){
					sum[num++]=s.substr(cnt,mark-cnt);//substr字符串剪切函数
					cnt=mark+1;//cnt=\t出现的下标加一
					mark=s.find("\t",cnt);//记录第一次\t出现的下标
				}
				mysql.push_back({sum[0],sum[1],atoi(sum[2].c_str()),sum[3],sum[4],atoi(sum[5].c_str())});//往mysql中添加数据
				//atoi()把字符串转化为数字,c_str()函数返回一个指向正规C字符串的指针常量
			}
			input.close();//关闭文件
		}else{
			cout<<"\t\t\t打开文件失败!!!"<<endl;
		}
	}
}

//打印版权信息
void controller::print(){
	cout<<"				****************** 欢迎来到成绩管理系统界面 ****************"<<endl<<endl;
	cout<<"				************************星辰版权所有************************"<<endl<<endl;
}

//注册
bool controller::enroll(){
	string account;//账号
	char password1[20],password2[20];
	cout<<"					请输入账号:";
	cin>>account;
	cout<<"					请输入密码:";
	//掩码登录
	char ch;
	int num=0;//计数
	while((ch=getch())!='\r'&&num<20){//密码最多20位
		if(ch=='\b'){
			if(num>0){
				cout<<"\b \b";//回退打印空格再回退
				num--;
			}
		}else{
			password1[num++]=ch;//更新密码
			cout<<'*';
		}
		password1[num]='\0';//字符串结束标记
	}
	cout<<"\n					请确认密码:";
	//掩码登录
	num=0;
	while((ch=getch())!='\r'&&num<20){//密码最多20位
		if(ch=='\b'){
			if(num>0){
				cout<<"\b \b";//回退打印空格再回退
				num--;
			}
		}else{
			password2[num++]=ch;//更新密码
			cout<<'*';
		}
		password2[num]='\0';//字符串结束标记
	}
	ofstream out("D:\\asus\\user_massage",ios::app);//以追加的方式打开文件
	if(out.is_open()){//判断文件是否打开
		if(strcmp(password1,password2)!=0){//判断密码和确认密码是否相同
			out.clear();//关闭文件
			return false;
		}
		out<<account<<endl<<password2<<endl;//把账号密码写到文件
		out.clear();//关闭文件
		return true;
	}else{
		cout<<"\t\t\t\t文件打开失败"<<endl;
		return false;
	}
}

//登录
bool controller::login(){
	controller user1;//用户对象
	user_massage.clear();
	user1.read_massage();//从文件读入数据
	system("cls");//清屏
	print();//打印界面
	if(user_massage.empty()){//判断有无注册信息
		cout<<"\t\t\t\t暂无用户信息"<<endl;
		system("pause");//暂停
		return false;
	}
	int count=1;//计数
	for(;count<=3;count++){
		cout<<"					请输入账号:";
		cin>>Account;
		cout<<"					请输入密码:";
		char ch;
		//掩码登录
		int num=0;//密码位数
		while((ch=getch())!='\r'&&num<20){
			if(ch=='\b'){
				if(num>0){
					cout<<"\b \b";//回退打印空格再回退
					num--;
				}
			}else{
				Password[num++]=ch;//更新密码
				cout<<'*';
			}
			Password[num]='\0';//字符串结束标记
		}
		
		if(user1.check(Account,Password)){//比对账号密码是否正确
			for(int i=0;i<user_massage.size();i++){
				if(Account==user_massage[i].account&&string(Password)==user_massage[i].password){
					mark1=i+1;
					break;
				}
			}
			return true;
		}
		if(count==3){
			cout<<"\n						检测到登录异常,即将退出系统"<<endl;
			return false;
		}
		cout<<"\n						您的账号或密码错误,您还有"<<3-count<<"次机会,请重新输入"<<endl;
	}
	return false;
}

//菜单选项
void controller::mysystem(){
	controller user2;//用户对象
	student stu;//学生对象
	int operation=0;//操作变量
	while(operation!=6){
		system("cls");
		cout<<"				*************************************************************"<<endl;
		cout<<"				*************************************************************"<<endl<<endl;
		cout<<"				********************欢迎来到成绩管理系统*********************"<<endl<<endl;
		cout<<"				**************************主菜单*****************************"<<endl<<endl;
		cout<<"				*********************1.浏览学生信息**************************"<<endl<<endl;
		cout<<"				*********************2.查询学生信息**************************"<<endl<<endl;
		cout<<"				*********************3.修改学生信息**************************"<<endl<<endl;
		cout<<"				*********************4.添加学生信息**************************"<<endl<<endl;
		cout<<"				*********************5.删除学生信息**************************"<<endl<<endl;
		cout<<"				*********************6.退出系统******************************"<<endl<<endl;
		cout<<"				请输入你的操作:";
		cin>>operation;
		switch(operation){
			case 1:stu.show();break;//浏览学生信息
			case 2:stu.inquire();break;//查询学生信息
			case 3:stu.alter();break;//修改学生信息
			case 4:stu.add();break;//添加学生信息
			case 5:stu.sdelete();break;//删除学生信息
			case 6:user2.quit();break;//退出系统
			default:cout<<"						操作无效请重新输入"<<endl;system("pause");//屏幕暂停
			break;
		}
	}
}


int main(){
	//字体颜色
	system("color 0b");
	controller user;//用户对象
	user.print();
	cout<<"\t\t\t\t\t\t    *****1.登录*****\n\n\t\t\t\t\t\t    *****2.注册*****"<<endl;
	cout<<"\t\t\t\t请输入你的操作:";
	string operation;//操作变量
	cin>>operation;
	if(operation=="1"){
		if(user.login()){//user.login()登录
			user.initdata(mark1);//初始化数据
			user.mysystem();//系统调用
			
		}else{
			cout<<"							登录失败"<<endl;
			exit(0);//结束程序
		}
	}else if(operation=="2"){
		if(user.enroll())cout<<"\n						注册成功"<<endl;
		else cout<<"\n							注册失败"<<endl;
	}else cout<<"\t\t\t非法操作!!!"<<endl;
	return 0;
}

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言学生成绩管理系统代码,包括添加学生、删除学生、查找学生和修改学生成绩等功能。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 // 最大学生数量 #define NAME_LEN 20 // 学生姓名最大长度 // 学生信息结构体 typedef struct { char name[NAME_LEN]; // 学生姓名 int score; // 学生成绩 } Student; // 学生数组 Student students[MAX_STUDENT_NUM]; int student_num = 0; // 当前学生数量 // 添加学生 void add_student() { if (student_num >= MAX_STUDENT_NUM) { printf("学生数量已达到上限,无法添加新学生!\n"); return; } // 输入学生姓名和成绩 Student new_student; printf("请输入学生姓名:"); scanf("%s", new_student.name); printf("请输入学生成绩:"); scanf("%d", &new_student.score); // 添加学生 students[student_num++] = new_student; printf("添加成功!\n"); } // 删除学生 void delete_student() { if (student_num <= 0) { printf("学生数量为0,无法删除学生!\n"); return; } // 输入要删除的学生姓名 char name[NAME_LEN]; printf("请输入要删除的学生姓名:"); scanf("%s", name); // 查找学生并删除 int i, found = 0; for (i = 0; i < student_num; i++) { if (strcmp(students[i].name, name) == 0) { found = 1; break; } } if (found) { for (; i < student_num - 1; i++) { students[i] = students[i + 1]; } student_num--; printf("删除成功!\n"); } else { printf("找不到要删除的学生!\n"); } } // 查找学生 void find_student() { if (student_num <= 0) { printf("学生数量为0,无法查找学生!\n"); return; } // 输入要查找的学生姓名 char name[NAME_LEN]; printf("请输入要查找的学生姓名:"); scanf("%s", name); // 查找学生并输出 int i, found = 0; for (i = 0; i < student_num; i++) { if (strcmp(students[i].name, name) == 0) { found = 1; printf("学生姓名:%s,学生成绩:%d\n", students[i].name, students[i].score); break; } } if (!found) { printf("找不到要查找的学生!\n"); } } // 修改学生成绩 void modify_score() { if (student_num <= 0) { printf("学生数量为0,无法修改学生成绩!\n"); return; } // 输入要修改成绩的学生姓名 char name[NAME_LEN]; printf("请输入要修改成绩的学生姓名:"); scanf("%s", name); // 查找学生并修改成绩 int i, found = 0; for (i = 0; i < student_num; i++) { if (strcmp(students[i].name, name) == 0) { found = 1; printf("请输入新的学生成绩:"); scanf("%d", &students[i].score); printf("修改成功!\n"); break; } } if (!found) { printf("找不到要修改成绩的学生!\n"); } } // 打印学生信息 void print_students() { if (student_num <= 0) { printf("学生数量为0,无法打印学生信息!\n"); return; } printf("学生信息如下:\n"); int i; for (i = 0; i < student_num; i++) { printf("学生姓名:%s,学生成绩:%d\n", students[i].name, students[i].score); } } // 主函数 int main() { int choice; do { printf("请选择要进行的操作:\n"); printf("1. 添加学生\n"); printf("2. 删除学生\n"); printf("3. 查找学生\n"); printf("4. 修改学生成绩\n"); printf("5. 打印学生信息\n"); printf("6. 退出程序\n"); printf("请输入操作编号:"); scanf("%d", &choice); switch (choice) { case 1: add_student(); break; case 2: delete_student(); break; case 3: find_student(); break; case 4: modify_score(); break; case 5: print_students(); break; case 6: printf("程序已退出。\n"); break; default: printf("无效的操作编号,请重新输入!\n"); break; } printf("\n"); } while (choice != 6); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值