
学生成绩管理系统(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;
}
更多推荐
所有评论(0)