学生成绩管理系统[通俗易懂]

学生成绩管理系统

大家好,又见面了,我是全栈君。

#include<iostream>
#include<string>
#include<fstream>
#include<cstdlib>

using namespace std;
enum {SUBJECT=5};//一共五门

typedef struct
{
char subject[10];//科目名称
int score;//科目成绩
}markinfo;

typedef struct studentnode
{
markinfo mark[SUBJECT];
int totalmark;
char name[10];//学生姓名
studentnode * next;
}studentnode;

class student 
{
studentnode * head;
public:
student();
int addstudent();
~student();
int countmark();
int sortbymark();
int save();
int show();
int display();
int readfiletolist();
int searchbyname();
};
student::student() //用构造函数来初始化。

{head=new studentnode;head->next=NULL;}//1.输入学生姓名、成绩等数据,并保存在链表中。int student::addstudent(){studentnode * p;int i;char check;system("cls");cout<<"**********************"<<endl;cout<<"请输入学生信息:"<<endl;do{p=new studentnode;cin.ignore();cout<<"姓名:";gets(p->name);i=0;p->totalmark=0;do{cout<<"科目:";gets(p->mark[i].subject);cout<<"成绩(0--100):";do{cin>>p->mark[i].score;}while(p->mark[i].score>100||p->mark[i].score<0);p->totalmark=p->totalmark+p->mark[i].score;getchar();}while(++i!=SUBJECT);if(head->next==NULL){head->next=p;p->next=NULL;}else {p->next=head->next;head->next=p;}cout<<"继续加入?y or n :";check=getchar();}while(check!='n' &&check!='N');return 0;}//2.计算每位学生总成绩。int student::countmark(){studentnode * p=head->next;if(p==NULL){cout<<"没有学生,请又一次输入"<<endl;system("pause");return 0;}else {cout<<"***************"<<endl;cout<<"学生成绩汇总:"<<endl;while(p){cout<<"姓名:"<<p->name<<" 总成绩:"<<p->totalmark<<endl;p=p->next;}}system("pause");return 0;}//4.输出全部学生成绩到一个文件里。int student::save(){char address[35];int i;studentnode * p=head->next;cout<<"请输入保存的地址"<<endl;cin.ignore(); gets(address);ofstream fout;fout.open(address,ios::app|ios::out);while(p){fout<<"*";fout<<p->name<<"*";i=0;while(i!=SUBJECT){fout<<p->mark[i].subject<<"*";fout<<p->mark[i].score;i++;}//fout<<"*";p=p->next;}fout.flush();fout.close();cout<<"已经保存。请查阅";system("pause");return 0;}student::~student() //析构函数{studentnode * p,* s;p=head->next;while(p){s=p->next;delete p;p=s;}delete head;}//3.依照总成绩大小对记录进行排序int student::sortbymark(){studentnode *move1=head->next;studentnode *move2,*max,*pre1,*pre2,*maxpre,*s=move1;if(head->next==NULL){cout<<"没有记录,请加入"<<endl;system("pause");return 0;}for(pre1=head,max=move1,maxpre=pre1;move1->next!=NULL;pre1=move1,maxpre=pre1,move1=move1->next,max=move1){for(pre2=move1,move2=move1->next;move2!=NULL;pre2=move2,move2=move2->next)if(move2->totalmark>max->totalmark){maxpre=pre2;max=move2;}if(move1->next==max) //交换max和move1。

{pre1->next=max;move1->next=max->next;max->next=move1;move1=max;} else{s=move1->next;move1->next=max->next;max->next=s;maxpre->next=move1;pre1->next=max;move1=max;}}cout<<"已经依照从大到小排序"<<endl;system("pause");return 0;}//5输出输入的信息int student::show(){studentnode * p=head->next;int i;if(head->next==NULL){cout<<"没有学生记录,请加入"<<endl;system("pause"); return 0;}else {while(p){cout<<"姓名:"<<p->name;i=1;while(i!=SUBJECT+1){cout<<"科目:"<<p->mark[i-1].subject;cout<<" 成绩:"<<p->mark[i-1].score;i++;}cout<<endl;p=p->next;}}system("pause");return 0;}//6:从文件按读取记录int student::display(){ifstream fin;char buf[100];char str[25];cout<<"请输入路径及文件名称:"<<endl;cin.ignore();gets(str);fin.open(str);if(!fin){cout<<"没有此文件"<<endl;system("pause");return 0;}while(fin){fin.getline(buf,sizeof(buf));cout<<buf<<endl;}system("pause");return 0;}//8从文件里读取数据,并将数据保存在链表中int student::readfiletolist(){ifstream fin;int i;char str[25];cout<<"请输入路径及文件名称:"<<endl;cin.ignore();gets(str);fin.open(str);if(!fin){cout<<"没有此文件"<<endl;system("pause");return 0;}studentnode * p;fin.ignore(100,'*');while(fin){p=new studentnode;p->totalmark=0;fin.getline(p->name,100,'*');i=0;while(i!=SUBJECT){fin.getline(p->mark[i].subject,100,'*');fin>>p->mark[i].score;p->totalmark+=p->mark[i].score;i++;}if(head->next==NULL){head->next=p;p->next=NULL;} else{p=head->next;head->next=p;}}cout<<"信息已经保存在链表中"<<endl;system("pause");return 0;}//9依据姓名进行查找int student::searchbyname(){if(head->next==NULL){cout<<"没有学生,请加入或者从文件里读取"<<endl;system("pause");return 0;}studentnode * p=head->next;char findname[10];int i;cout<<"请输入姓名:";cin.ignore();gets(findname);while(p){if(!strcmp(p->name,findname)){cout<<"经查找。找到该生信息例如以下:"<<endl<<endl;cout<<"姓名:"<<p->name;i=1;while(i!=SUBJECT+1){cout<<"科目:"<<p->mark[i-1].subject;cout<<" 成绩:"<<p->mark[i-1].score;i++;}cout<<endl;system("pause");return 1;}p=p->next;}cout<<"没有此学生,请加入或者从文件里读取"<<endl;system("pause");return 0;}int showmenu(){int choice;char * menu[9]={ "1:输入学生成绩保存到链表\n","2:计算每位学生总成绩\n","3:依照总成绩大小对记录进行排序\n","4:输出全部学生成绩到一个文件里\n","5:显示新输入的学生信息\n","6:从文件里读取信息\n","7:将文件信息保存在链表中\n","8:依据姓名查找学生记录\n","9:结束程序\n"};cout<<" "<<"*****************************************************"<<endl;cout<<" *"<<" "<<"学生成绩管理系统"<<" *"<<endl;cout<<" "<<"*****************************************************"<<endl;for(choice=0;choice<9;choice++)cout<<" "<<menu[choice];cout<<" "<<"*****************************************************"<<endl;cout<<"please choose to continue"<<endl;do{cin>>choice;}while(choice>9||choice<1);return choice;}int main(){int menuitem,flag=1;student stu;while(flag){system("cls");menuitem=showmenu();switch(menuitem){case 1:{stu.addstudent();break;}case 2:{stu.countmark();break;}case 3:{stu.sortbymark();break;}case 4:{stu.save();break;}case 5:{stu.show();break;}case 6:{stu.display();break;}case 7:{stu.readfiletolist();break;}case 8:{stu.searchbyname();break;}case 9:{flag=0;break;}}}return 0;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115232.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么是android原生系统版本,定制安卓和原生Android到底有哪些不同之处?彻底真相了…

    什么是android原生系统版本,定制安卓和原生Android到底有哪些不同之处?彻底真相了…相信大家都知道最近在搞机圈有个大新闻,就是小米即将于8月份推出MIUI9。近日小米MIUI市场副总监@黄龙中就在微博上征求米粉意见,暗示MIUI9可能长下面这样。小米最新官方主题《几何》,浓浓flyme风自2010年MIUI横空出世,国产定制安卓ROM在国内掀起了一阵风暴。MIUI成功后,乐蛙、点心等三方定制ROM迅速崛起,但随着手机系统生态逐渐稳定、刷机需求降低,定制安卓系统的范围逐渐缩小…

    2022年6月19日
    51
  • 安装MySQL8.0_mysql版本命令

    安装MySQL8.0_mysql版本命令第一步:下载下载地址:https://dev.mysql.com/downloads/file/?id=476233第二步:选择文件夹,将压缩包解压我这里放到了E盘第三步:创建my.ini配置文件[mysql]#设置mysql客户端默认字符集default-character-set=utf8[mysqld]#设置3306端口port=3306#…

    2025年11月15日
    4
  • linux_c之ioctl的FIONREAD参数

    linux_c之ioctl的FIONREAD参数ioctl是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的。而read,write是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区。FIONREAD就是返回缓冲区中有多少字节;ioctl(keyFd,FIONREAD,&b)得到缓冲区里有多少字节要被读取,然后将字节数放入b里面。接下来就可以用read了,read(keyFd,

    2022年7月23日
    21
  • 主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思

    主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思

    2022年1月17日
    68
  • CAN协议要点及车辆CAN协议激活成功教程

    CAN协议要点及车辆CAN协议激活成功教程一、CAN协议要点1.电压2.波形3.CAN报文概述CAN一共规定了5中类型的帧,帧也称为报文。CAN总线的数据帧有标准格式(StandardFormat)和扩展格式(ExtendedFormat)的区分。4.CAN报文编码格式Intel格式编码 当一个信号的数据长度不超过1Byte,并且信号在一个字节内实现时,该信号的高位(S_msb)将被放在该字节的高位,信号的低位(S_lsb)将被放在该字节的低位。 当一个信号的数据长度超过..

    2022年6月28日
    194
  • 火狐浏览器删除表单自动提示登陆账号密码

    火狐浏览器删除表单自动提示登陆账号密码

    2021年11月5日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号