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

学生成绩管理系统

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

#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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Apache 中RewriteRule 规则参数[通俗易懂]

    Apache 中RewriteRule 规则参数[通俗易懂][size=medium]Apache中RewriteRule规则参数Apache模块mod_rewrite提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数…

    2022年5月15日
    43
  • P3381 【模板】最小费用最大流

    P3381 【模板】最小费用最大流

    2021年5月28日
    106
  • css滚动条样式修改_js设置滚动条样式

    css滚动条样式修改_js设置滚动条样式CSS滚动条选择器::-webkit-scrollbar—整个滚动条::-webkit-scrollbar-button—滚动条上的按钮(上下箭头)::-webkit-scrollbar-thumb—滚动条上的滚动滑块::-webkit-scrollbar-track—滚动条轨道::-webkit-scrollbar-track-piece—滚动条没有滑块的轨道部分::-webkit-scrollbar-corner—当同时有垂直滚动条和水平滚动条时交汇的部分::-

    2022年8月30日
    2
  • 【javaScript】cssText兼容及好处(相对于element.style)

    【javaScript】cssText兼容及好处(相对于element.style)cssText概念和特点cssText本质是什么?cssText的本质就是设置HTML元素的style属性值。cssText怎么用?document.getElementById(“d1”).style.cssText=“color:red;font-size:13px;”;cssText返回值是什么?在某些浏览器中(比如Chrome),你给他赋什么值,…

    2022年7月26日
    14
  • MacBook 屏幕录制 soundflower 只录内屏声音 无外界声音

    MacBook 屏幕录制 soundflower 只录内屏声音 无外界声音MacBook屏幕录制只包含内屏声音无外界录音目的录屏方法办法目的用Mac自带的QuickTimePlayer录制屏幕的时候(或者按快捷键⇧+⌘+5),三个选项:1)无声音2)选外置扬声器。电脑外放,确实能录到内屏声音,但是扬声器收录的人声、环境音也会录进来3)插耳机后,可以选择耳机。这样内屏声音也没了,只有耳机口的收音被录进来录屏方法办法下载插件soundflower:soundflower下载地址一开始可能下载失败,提示“来自开发者MATTINGALLS的系统软件已被阻止载

    2022年5月2日
    564
  • linux load average负载详细解释「建议收藏」

    linux load average负载详细解释「建议收藏」转载至linuxloadaverage负载详细解释一、loadaveragetop命令中loadaverage显示的是最近1分钟、5分钟和15分钟的系统平均负载。系统平均负载表示  系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中:  -它没有在等待I/O操作的结果  -它没有主动…

    2022年7月17日
    16

发表回复

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

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