1. 编写一个高校学生成绩查询系统,具备课程、学生信息管理与查询功能,可以修改增加删除某一门课程的成绩,或修改增加删除某一学生的成绩。
  1. 学生类别包括研究生和本科生2类,要求用继承的方法构造两个类,学生信息主要包括姓名,学号,专业,校园卡号等,要求通过输入姓名、学号或校园卡号可以查询到相关学生的简单信息。
  2. 课程类至少包含3门本科课程、3门研究生课程,每门课程的选课人数不少于3人,包括:课程名称、课程编号、所属专业、学分、课程分数、绩点等信息;

要求学生类与课程类之间通过文本文件进行信息交互。该系统具备以下功能:

  1. 输入学生姓名、学号或校园卡号,显示该生所有课程信息、单科分数、单科绩点、平均绩点(要求用虚函数实现);
  2. 输入课程名称或编号,显示该课程所有同学基本信息与成绩。
​
#include<iostream>
#include<fstream>
#include<string>using namespace std;class course{private:string course_name;  //课程名称int course_number;   //课程编号string course_specialty;  //所属专业float credit;   //学分float mark;     //课程分数float GPA;      //绩点public:void set_GPA_(){GPA = mark/100*5;//本科生和研究生的单科成绩绩点计算方法一样,但是平均绩点计算方法不一样 };float get_GPA(){  return GPA; };void set_course_name(string str){  course_name = str; };string get_course_name(){  return course_name; };void set_course_number(int number){  course_number = number; };int get_coure_number(){  return course_number; };void set_course_specialty(string str){  course_specialty = str; };string get_course_specialty(){  return course_specialty; };void set_credit(float cre){  credit = cre; };float get_credit(){  return credit; };void set_mark(float mar){  mark = mar; };int get_mark(){  return mark; };
};class student{private:string name;string student_num;string school_num;string specialty;public:void set_name(string str){ name = str; };string get_name(){   return name; };void set_student_num(string num){    student_num = num; };string get_student_num(){  return student_num; };void set_school_num(string num){  school_num = num; };string get_school_num(){  return school_num; };void set_specialty(string str){  specialty = str; };string get_specialty(){return specialty;};virtual void calculate(){                 //虚函数定义 };
};class graduate_student:public student{private:float credit[3];                       //假定一名学生最多选择3门课,可以不选或者多选 float GPA[3];                          //course media,electron,politics;float average_GPA;string student_lable;public:void calculate(){int i=0;float a=0,b=0;while(credit[i]!=0 && i<3){a+=credit[i];b+=GPA[i]*credit[i];i++;}average_GPA = b/a * 4.5/5;         //研究生的最高绩点是4.5 };float get_average_GPA(){  return average_GPA; };void set_credit(float a,int b){  credit[b] = a; };void set_GPA(float a,int b){  GPA[b] = a; };void set_student_lable(string lable){  student_lable = lable; };string get_student_lable(){  return student_lable; };graduate_student(){credit[0]=0;credit[1]=0;credit[2]=0;GPA[0]=0;GPA[1]=0;GPA[2]=0;};
};class college_student:public student{private:float credit[3];                       //假定一名学生最多选择3门课,可以不选或者多选 float GPA[3];                          //course math,english,sport;float average_GPA;string student_lable;public:void calculate(){int i=0;float a=0,b=0;while(credit[i]!=0 && i<3){a+=credit[i];b+=GPA[i]*credit[i];i++;}average_GPA = b/a;     //本科生的最高几点是5.0 };float get_average_GPA(){  return average_GPA; };void set_credit(float a,int b){  credit[b] = a; };void set_GPA(float a,int b){  GPA[b] = a; };void set_student_lable(string lable){  student_lable = lable; };string get_student_lable(){  return student_lable; };college_student(){credit[0]=0;credit[1]=0;credit[2]=0;GPA[0]=0;GPA[1]=0;GPA[2]=0;};
};void write_student_information(college_student stu[],int num)
{int a;fstream myfile;myfile.open("student.txt",ios::out | ios::in);myfile.seekg(0);myfile>>a;a+=num;myfile.seekg(0);myfile<<a;myfile.seekg(0,ios::end);      //转到txt文件末尾继续写 //myfile<<endl;  for(int i=0;i<num;i++){myfile<<stu[i].get_student_lable()<<"\t"    //信息写入 <<stu[i].get_name()<<"\t"<<stu[i].get_student_num()<<"\t"<<stu[i].get_school_num()<<"\t"<<stu[i].get_specialty()<<endl;}myfile.close();
}void input_student(college_student stu[])
{system("cls");char oder = 'y';int i=0;string name,specialty;string sch_num,stu_num;int a;while(oder == 'y' || oder == 'Y'){system("cls");cout<<"-----------------欢迎使用学生信息录入功能!-------------------"<<endl;cout<<"请输入学生姓名:";cin>>name;stu[i].set_name(name);loop1:cout<<"请输入学号:";cin>>stu_num;stu[i].set_student_num(stu_num);int c=0;while(c<i){c++;if( stu[i].get_student_num() == stu[i-c].get_student_num() ){cout<<"学号已存在,请重新输入:"<<endl;goto loop1;}}loop2:cout<<"请输入校园卡号:";cin>>sch_num;stu[i].set_school_num(sch_num);c=0;while(c<i){c++;if( stu[i].get_school_num() == stu[i-c].get_school_num() ){cout<<"校园卡号已存在,请重新输入:"<<endl;goto loop2;}}cout<<"请输入专业:";cin>>specialty;stu[i].set_specialty(specialty);cout<<"本科生输入'1',研究生输入'2':";cin>>a;if(a==1){                            //录入学生的lable string lable = "本科生";stu[i].set_student_lable(lable);}else{string lable = "研究生";stu[i].set_student_lable(lable);}fstream myfile;int Q;string str1,str2,str3,str4,str5;myfile.open("student.txt",ios::out | ios::in);myfile.seekg(0);myfile>>Q;   //读出学生人数 for(int L=0;L<Q;L++){myfile>>str5>>str1>>str2>>str3>>str4;if( str2 == stu_num || str3 == sch_num){     //查找学生信息库进行信息对比,对于已经存在的学生不再录入。 cout<<"此学生已存在!"<<endl;i-=1; }   }myfile.close();cout<<"是否继续录入(y/n):";cin>>oder; i++;}write_student_information(stu,i);
}void write_course_information(course cou[],student stu[],int num)
{int a;fstream myfile;myfile.open("course.txt",ios::out | ios::in);myfile.seekg(0);myfile>>a;a+=num;myfile.seekg(0);myfile<<a;myfile.seekg(0,ios::end);  //转到txt文件末尾继续写 for(int i=0;i<num;i++){myfile<<stu[i].get_name()<<"\t"<<stu[i].get_student_num()<<"\t"<<stu[i].get_school_num()<<"\t"<<cou[i].get_coure_number()<<"\t"<<cou[i].get_course_name()<<"\t"<<cou[i].get_course_specialty()<<"\t"<<cou[i].get_credit()<<"\t"<<cou[i].get_mark()<<"\t"<<cou[i].get_GPA()<<endl;}myfile.close();
}void input_course(course cou[],student stu[])
{system("cls");char oder = 'y';int i=0;string name;string stu_num,sch_num;while(oder == 'y' || oder == 'Y'){system("cls");cout<<"-----------------欢迎使用课程成绩录入功能!-------------------"<<endl;loop:cout<<"请输入学生姓名:";cin>>name;stu[i].set_name(name);cout<<"请输入学号:";cin>>stu_num;stu[i].set_student_num(stu_num);cout<<"请输入校园卡号:";cin>>sch_num;stu[i].set_school_num(sch_num);fstream myfile;int Q;string str1,str2,str3,str4,str5;myfile.open("student.txt",ios::out | ios::in);myfile.seekg(0);myfile>>Q;   //读出学生人数 for(int L=0;L<Q;L++){myfile>>str5>>str1>>str2>>str3>>str4;if(str1 == name && str2 == stu_num && str3 == sch_num){     //查找学生信息库进行信息对比,信息不匹配则需要重新录入。 goto loop1;} }myfile.close();cout<<"输入姓名与学号或校园卡号不匹配!"<<endl;goto loop; loop1:cout<<"请输入课程名:";cin>>name;cou[i].set_course_name(name);cout<<"请输入课程号:";int d;cin>>d;cou[i].set_course_number(d); cout<<"请输入课程专业:";cin>>name;cou[i].set_course_specialty(name); cout<<"请输入课程学分:";float k;cin>>k;cou[i].set_credit(k);cout<<"请输入成绩:";cin>>k;cou[i].set_mark(k);cou[i].set_GPA_();cout<<"是否继续录入(y/n):";cin>>oder; i++;}write_course_information(cou,stu,i);
}void search_student_information()
{char oder='y';while(oder == 'y' || oder == 'Y'){system("cls");cout<<"-----------------欢迎使用学生信息查询功能!-------------------"<<endl;cout<<"请输入姓名或则学号或则校园卡号:";string str1,str2,str3,str4,str5,str6;int i,k=0;cin>>str5;fstream myfile;myfile.open("student.txt",ios::out | ios::in);myfile.seekg(0);myfile>>i;   //读出学生人数 for(int L=0;L<i;L++)    //逐行读出信息并输出 {myfile>>str6>>str1>>str2>>str3>>str4;if(str1 == str5 || str2 == str5 || str3 == str5){cout<<str6<<"\t"<<"姓名:"<<str1<<"\t"<<"学号:"<<str2<<"\t"<<"校园卡号:"<<str3<<"\t"<<"专业:"<<str4<<endl;k++;} }myfile.close();if(k==0)cout<<"查无此人!"<<endl;cout<<"是否继续查询(y/n):";cin>>oder;}
}void search_course_information()
{char oder='y';while(oder == 'y' || oder == 'Y'){system("cls");cout<<"-----------------欢迎使用课程信息查询功能!-------------------"<<endl;cout<<"请输入课程号:";string str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,lable;string str1_,str2_,str3_,str4_,str5_;int i,k=0;cin>>str10;fstream myfile;myfile.open("course.txt",ios::out | ios::in);myfile.seekg(0);myfile>>i;   //读出课程数 for(int L=0;L<i;L++){myfile>>str1>>str2>>str3>>str4>>str5>>str6>>str7>>str8>>str9;if(str4 == str10){int u=0;fstream myfile_;myfile_.open("student.txt",ios::out | ios::in);myfile_.seekg(0);myfile_>>u;   //读出学生数 for(int e=0;e<u;e++){myfile_>>str1_>>str2_>>str3_>>str4_>>str5_;if(str2_ == str1 || str4_ == str3 || str3_ == str2){lable = str1_;        //到学生信息库里找出学生的标签 break;}    }myfile_.close();cout<<lable<<"\t"<<"姓名:"<<str1<<"\t"<<"学号:"<<str2<<"\t"<<"校园卡号:"<<str3<<"\t"<<"课程号:"<<str4<<"\t"<<"课名:"<<str5<<"\t"<<"专业:"<<str6<<"\t"<<"学分:"<<str7<<"\t"<<"成绩:"<<str8<<"\t"<<"绩点:"<<str9<<endl;k++;}   }myfile.close();if(k==0)cout<<"此课程无学生选择!"<<endl;cout<<"是否继续查询(y/n):";cin>>oder;}
}void search_student_mark(college_student stu,graduate_student stu2)
{char oder='y';while(oder == 'y' || oder == 'Y'){string flag; system("cls");cout<<"-----------------欢迎使用学生成绩查询功能!-------------------"<<endl;cout<<"请输入姓名或者学号或者校园卡号:";string str1,str2,str3,str4,str5,str6,str8,str10;float str7,str9;string lable;int i,k=0;cin>>str10;fstream myfile;myfile.open("student.txt",ios::out | ios::in);myfile.seekg(0);myfile>>i;   //读出学生数 for(int L=0;L<i;L++){myfile>>str1>>str2>>str3>>str4>>str5;if(str2 == str10 || str4 == str10 || str3 == str10){lable = str1;   //到学生信息库里找到学生是研究生还是本科生,为后面区别计算平均绩点做准备 break;}  }myfile.close();myfile.open("course.txt",ios::out | ios::in);myfile.seekg(0);myfile>>i;   //读出课程数 for(int L=0;L<i;L++){myfile>>str1>>str2>>str3>>str4>>str5>>str6>>str7>>str8>>str9;if(str1 == str10 || str2 == str10 || str3 == str10){cout<<lable<<"\t"<<"姓名:"<<str1<<"\t"<<"学号:"<<str2<<"\t"<<"校园卡号:"<<str3<<"\t"<<"课程号:"<<str4<<"\t"<<"课名:"<<str5<<"\t"<<"专业:"<<str6<<"\t"<<"学分:"<<str7<<"\t"<<"成绩:"<<str8<<"\t"<<"绩点:"<<str9<<endl;if(lable == "研究生"){stu2.set_credit(str7,k);     //研究生和本科生分别存入到不同的类 stu2.set_GPA(str9,k);k++;}else{stu.set_credit(str7,k);stu.set_GPA(str9,k); k++;} }    }if(k!=0 && lable == "本科生"){stu.calculate();cout<<"平均绩点:"<<stu.get_average_GPA()<<endl;   //研究生和本科生用不同的虚函数计算平均绩点 }else if(k!=0){stu2.calculate();cout<<"平均绩点:"<<stu2.get_average_GPA()<<endl;}       myfile.close();if(k==0)cout<<"此学生没选课!"<<endl;cout<<"是否继续查询(y/n):";cin>>oder;}
}void DelLineData(char* fileName, int lineNum)    //删除固定行
{fstream myfile;myfile.open(fileName,ios::in | ios::out);string strFileData = "";int line = 1;char lineData[1024] = {0};while(myfile.getline(lineData, sizeof(lineData)))    //逐行读取数据 {if(line == lineNum)      //忽略要删除的行数 {}else{strFileData += lineData;strFileData += "\n";}line++;}myfile.close();int i=0;myfile.open(fileName,ios::trunc | ios::in | ios::out);myfile<<strFileData;     //重新写入数据 myfile.seekg(0);myfile>>i;i-=1;           //文件总行数减一 myfile.seekg(0);myfile<<i;myfile.close();
}void Del_student_or_course_mark()
{char oder='y';while(oder == 'y' || oder == 'Y'){system("cls");cout<<"-----------------欢迎使用学生课程成绩删除功能!-------------------"<<endl;cout<<"请输入需要删除成绩的学生姓名或则学号或则校园卡号:";string str1,str2,str3,str4,str5,str6,str8,str10,str11;float str7,str9;int line[100]={0};int i,k=0;cin>>str10;cout<<"请输入需要删除的课程名或课程号:";cin>>str11;fstream myfile;myfile.open("course.txt",ios::out | ios::in);myfile.seekg(0);myfile>>i;   //读出课程数 for(int L=0;L<i;L++){myfile>>str1>>str2>>str3>>str4>>str5>>str6>>str7>>str8>>str9;if((str1 == str10 || str2 == str10 || str3 == str10) && (str11 == str4 || str11 == str5)){line[k] = L+2;k++;}}myfile.close();if(k==0)cout<<"没找到该项成绩!"<<endl;else{int L=0;char* fileName="course.txt";while(line[L] != 0){DelLineData(fileName,line[L]);L++;}cout<<"删除成功!"<<endl;}cout<<"是否继续删除(y/n):";cin>>oder;}
}void modify_LineData(char* fileName, int lineNum,string line_data)    //修改固定行
{fstream myfile;myfile.open(fileName,ios::in | ios::out);string strFileData = "";int line = 1;char lineData[1024] = {0};while(myfile.getline(lineData, sizeof(lineData))){if(line == lineNum)      //重构修改行 {strFileData += line_data;strFileData += "\n";}else                  //不需要修改的行数原封不动 {strFileData += lineData;strFileData += "\n";}line++;}myfile.close();myfile.open(fileName,ios::trunc | ios::in | ios::out);   //清除文本文件,重新写入 myfile<<strFileData;myfile.close();
}void modify_student_or_course_mark()     //修改学生或者课程成绩
{char oder='y';while(oder == 'y' || oder == 'Y'){system("cls");cout<<"-----------------欢迎使用学生课程成绩修改功能!-------------------"<<endl;cout<<"请输入需要修改成绩的学生姓名或则学号或则校园卡号:";string str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11;float M;course cou;         //定义课程类对象,用于计算单科绩点 int i,k=0,P=0;cin>>str10;cout<<"请输入需要修改的课程号:";cin>>str11;cout<<"请输入修改后的成绩(1-100):";cin>>M;cou.set_mark(M);    //设置单科分数 cou.set_GPA_();  //重新计算绩点 char c[20]={0},d[20]={0};sprintf(c,"%.0f",M);      //将分数从float转换到string类型,不保留小数 sprintf(d,"%.2f",cou.get_GPA());   //将计算好的单科绩点转换为string类型,保留两位小数 string line=""; fstream myfile;myfile.open("course.txt",ios::out | ios::in);myfile.seekg(0);myfile>>i;   //读出课程数 for(int L=0;L<i;L++){myfile>>str1>>str2>>str3>>str4>>str5>>str6>>str7>>str8>>str9;if( (str10 == str1 || str10 == str2 || str10 == str3) && str11 == str4){//重构修改后的行信息 line = line+str1+"\t"+str2+"\t"+str3+"\t"+str4+"\t"+str5+"\t"+str6+"\t"+str7+"\t"+c+"\t"+d;P=L+2;  //找出对应行数 k++;break;}}myfile.close();char* fileName="course.txt";modify_LineData(fileName,P,line);    //修改 if(k==0)cout<<"没找到该项成绩,修改失败!"<<endl;elsecout<<"修改成功!"<<endl;cout<<"是否继续修改(y/n):";cin>>oder;}
}int menu()
{int a=10;do{system("cls");cout<<"*****************************************************************"<<endl;cout<<"-------------------欢迎使用高校学生成绩查询系统------------------"<<endl;cout<<" *                 录入学生信息请按【1】                       * "<<endl;cout<<" *                 录入课程信息请按【2】                       * "<<endl;cout<<" *                 查找学生信息请按【3】                       * "<<endl;cout<<" *                 查找课程成绩请按【4】                       * "<<endl;cout<<" *                 查找学生成绩请按【5】                       * "<<endl;cout<<" *                 删除学生或者课程成绩请按【6】               * "<<endl;cout<<" *                 修改学生或者课程成绩请按【7】               * "<<endl;cout<<" *                 退出高校学生成绩查询系统请按【0】           * "<<endl;cout<<"*****************************************************************"<<endl;cout<<"请选择您的操作(0-7):";cin>>a; }while(a<0 || a>7);return a;
}int main()
{course cou[10];college_student stu[10];graduate_student stu1;college_student stu2;for( ; ; ){switch(menu()){case 1:input_student(stu);break;case 2:input_course(cou,stu);break;case 3:search_student_information();break;case 4:search_course_information();break;case 5:search_student_mark(stu2,stu1);break;case 6:Del_student_or_course_mark();break;case 7:modify_student_or_course_mark();break;case 0:cout<<"-------------------感谢使用高校学生成绩查询系统!-----------------"<<endl;exit(0);}}
}​

以下是运行的结果:

txt文本存储格式:

C++编写高校学生成绩查询系统相关推荐

  1. Java综合实践——学生成绩查询系统

    数组是最常用的一种数据结构,利用它可以解决很多较复杂的问题.通过一个"学生成绩查询系统"的设计,提高运用数组和编写较大规模代码的综合能力. "学生成绩查询系统" ...

  2. 学生成绩查询系统(Java实现),你第一个Java小项目

    一.学生成绩查询系统(Java实现) 项目要求(我们可以做的更面向对象一点,灵活处理): 具体思路如下: 1.引入程序需要调用的包 2.创建总程序包 "stuScoreInquirySyst ...

  3. 期末课程设计—学生成绩查询系统

    /* *Copyright(c)2017,烟台大学计算机学院 *All right reserved. *文件名:main.cpp sqqueue.h sqqueue.cpp *作者:黄士胜 *完成日 ...

  4. 学生成绩查询系统(php+mysql)

    学生成绩查询系统(php+mysql)(毕业论文10479字以上,共25页,程序代码,MySQL数据库) 下载全套代码 [项目包含内容]                                ...

  5. 成绩查询系统c语言,学生成绩查询系统C语言代码(分服务器端和客户端).doc

    学生成绩查询系统C语言代码(分服务器端和客户端) 客户端:#include#include#include #pragma comment(lib , "Wsock32.lib " ...

  6. 学生成绩查询java版_学生成绩查询系统,基于ssm的JAVA系统

    每天记录学习,每天会有好心情.*^_^* 今天记录的项目是学生成绩查询系统,这个项目是这么回事:介绍了在Internet/WWW环境下构建学生成绩查询系统的设计思路与方法 ,阐述了在学生成绩查询系统中 ...

  7. c语言学生成绩查询系统2018,南昊网上阅卷学生成绩查询系统

    2018南昊网上阅卷学生成绩查询系统开放了,这是面向南昊当地的中小学生们的一款优质的查询学习成绩的平台,只要登录自己的账号就能查询自己的成绩排名情况.对于老师来说这也是一款网上阅卷系统,是一个非常幼稚 ...

  8. 学生成绩查询c#语言,C#学生成绩查询系统.doc

    ????学院 毕 业 论 文(设 计) 论文(设计)题目:学生成绩查询系统 所属系别: 信息工程系 专业班级:06计算机网络技术1班 姓 名: 常 军 玲 学 号: 200608090830129 指 ...

  9. android学生成绩查询代码,android学生成绩查询系统.pdf

    android学生成绩查询系统 嵌入式系统课程设计报告 学生成绩查询系统手机端 I 摘要 在 世纪的今天,互联网已深入世界的各个角落.而WAP技术的发展和无线业务的成 21 熟,为人们获取各种信息提供 ...

最新文章

  1. 【亲测可用】Xshell可视化配置一个登录服务器后自动进入指定目录的方法
  2. 怎么判断日出时间早晚_珠海最全防堵攻略,知道这些上班时间或缩短半小时!有大数据分析!...
  3. JavaWeb开发概述
  4. matlab调用q外部exe文件,Matlab GUI调用外部程序生成exe,DOS窗口输入问题
  5. python百度网盘_百度网盘突然大调整,网友炸了..
  6. 第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)
  7. 分享10个jQuery页面动态编辑插件
  8. 为Cubieboard打造完美Debian系统
  9. HTML5: 全局属性
  10. JavaScript css3模拟简单的视频弹幕功能
  11. Jsp+Ssm+Mysql实现的进销存管理系统
  12. SAP License:集团化企业的协同管理
  13. [转载].一直不怎么明白PID的运算输出结果怎么换算成执行机构的控制量
  14. 清华大学计算机期末试题,清华大学计算机系C++期末考试题及答案.doc
  15. jquery 弹出窗口_jQuery弹出窗口和工具提示窗口动画效果
  16. Linux下Qt的QPixmap加载图片无法显示的问题
  17. 用中位数代替平均数来衡量民生指标
  18. 用Adobe Flex3开发AIR应用程序–入门指南
  19. 即时通讯之xmpp协议简析
  20. 【升级到Java 17】switch 表达式

热门文章

  1. java负数转换二进制表示_负数的二进制和十进制之间的转换
  2. Zookeeper服务器动态上下线idea上server类中server.regist(args[0])数组越界解决
  3. 软考集成教程考点精讲之实施定量风险分析
  4. SDWebUI:AI绘图本地部署及绘图效率实验
  5. 小红书找探店达人有什么要求?品牌方怎么找探店达人
  6. 棋盘覆盖问题-分治法
  7. js 长整形 bigInt
  8. CS品牌小容量SD NAND在智能音箱领域的应用案例
  9. opencv的imread函数
  10. 手机中geetest是什么文件_安卓手机里这些全英文件夹,到底是什么?删了它,手机瞬间多了5个G...