用C++写学生成绩管理系统

本文介绍了一个学生信息管理系统的设计与实现,主要包括学生类和节点类的定义,涵盖了学生信息的输入、输出、排序等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


直接上代码

首先定义两个类Student类和Node类

Student类用于表示学生信息

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class Student//学生类  
  2. {  
  3. public:  
  4.     Student();//构造函数  
  5.     void SetInfo(string N, int A);//设置学生的信息(设置姓名、年龄)  
  6.     void SetNo(int N);//设置学生的编号  
  7.     void SetScore(int C, int M, int E);//设置学生的成绩(C++、高数、英语)  
  8.     void CountTotal();//计算总分  
  9.     void CountAve();//计算平均分  
  10.     void SetS(int S);//设置序号(用于排名)  
  11.     void GetInfo(string *pN, int *pA);//得到学生的信息(得到姓名、年龄)  
  12.     int GetNo();//得到学生的编号  
  13.   
  14.     //得到学生的分数(C++ 高数 英语 总分 平均分)  
  15.     void GetScore(int *pC, int *pM, int *pE, int *pT, int *pA);  
  16.     int GetS();//得到序号(用于排名)  
  17.   
  18. private:  
  19.     int len;          //学生的人数  
  20.     string Name;     //姓名  
  21.     int Age;         //年龄  
  22.     int No;          //学号  
  23.     int Cpp;         //C++成绩  
  24.     int Math;       //高数成绩  
  25.     int English;    //英语成绩  
  26.     int Total;     //总分  
  27.     float Ave;      //平均分  
  28.     int Sort;     //排名  
  29. };  


定义Student类中的成员函数

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //构造函数  
  2. Student::Student()  
  3. {  
  4.     Sort = 0;  
  5. }  
  6.   
  7.   
  8. void Student::SetInfo(string N, int A)//设置学生的信息(设置姓名、年龄)  
  9. {  
  10.     Name = N;  
  11.     Age = A;  
  12. }  
  13.   
  14.   
  15. void Student::SetNo(int N)//设置学生的编号  
  16. {  
  17.     No = N;  
  18. }  
  19.   
  20.   
  21. void Student::SetScore(int C, int M, int E)//设置学生的成绩(C++、高数、英语)  
  22. {  
  23.     Cpp = C;  
  24.     Math = M;  
  25.     English = E;  
  26. }  
  27.   
  28. void Student::CountTotal()//计算总分  
  29. {  
  30.     Total = Cpp + Math + English;  
  31. }  
  32.   
  33.   
  34. void Student::CountAve()//计算学生的平均分  
  35. {  
  36.     Ave = Total / 3;  
  37. }  
  38.   
  39.   
  40. void Student::SetS(int s)//设置序号(用于排名)  
  41. {  
  42.     Sort = s;  
  43. }  
  44.   
  45.   
  46. void Student::GetInfo(string *pN, int *pA)//得到学生的信息(得到姓名、年龄)  
  47. {  
  48.     *pN = Name;  
  49.     *pA = Age;  
  50. }  
  51.   
  52.   
  53. int Student::GetNo()//得到学生的编号  
  54. {  
  55.     return No;  
  56. }  
  57.   
  58.   
  59. //得到学生的分数(C++ 高数 英语 总分 平均分)  
  60. void Student::GetScore(int *pC, int *pM, int *pE, int *pT, int *pA)  
  61. {  
  62.     *pC = Cpp;//得到C++成绩  
  63.     *pM = Math;//得到数学成绩  
  64.     *pE = English;//得到英语成绩  
  65.     *pT = Total;//得到总分  
  66.     *pA = Ave;//得到平均分  
  67. }  
  68.   
  69.   
  70. int Student::GetS()//得到序号(用于排名)  
  71. {  
  72.     return Sort;  
  73. }  

定义Node类用于处理学生信息

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class Node//结点类  
  2. {  
  3. public:  
  4.     void InputStudent();//输入学生信息  
  5.     void OutputStudent();//输出学生信息  
  6.     Node* AddStudent();//增加学生信息  
  7.     bool DeleteStudent();//删除学生信息  
  8.     void ChangeStudent();//修改学生信息  
  9.     void SearchStudent();//查找学生信息  
  10.     void SortCpp();//将C++成绩按照从大到小排序  
  11.     void SortMath();//将高数成绩按照从大到小排序  
  12.     void SortEnglish();//将英语成绩按照从大到小排序  
  13.     void SortTotal();//将总分按照从大到小排序  
  14.     void SetScort();//设置排名  
  15.     void ChangeNo(Node *p);//修改学生的学号  
  16.   
  17. private:  
  18.     Student st;//数据域  
  19.     Node *pNext;//指针域  
  20.     Node *pHead;//头结点  
  21. };  
  22. typedef Node NODE;  
  23. typedef Node* PNODE;  
  24. /* 
  25. NODE 相当于  Node 
  26. PNODE 相当于 Node* 
  27. */  


定义Node类的成员函数

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //输入学生信息  
  2. void Node::InputStudent()  
  3. {  
  4.     //创建一个头结点  
  5.     pHead =  new NODE[sizeof(NODE)];  
  6.   
  7.     if(NULL == pHead)  
  8.     {  
  9.         cout<<"动态内存分配失败,程序终止!"<<endl;  
  10.   
  11.         exit(0);  
  12.     }  
  13.   
  14.     PNODE pTail = pHead;//创建一个指向头结点的指针  
  15.     pTail->pNext = NULL;//初始化指针的指针域为NULL  
  16.   
  17.     //将文件中的数据输入到程序中  
  18.     ifstream infile("score.dat", ios::in);  
  19.   
  20.     if(!infile)  
  21.     {  
  22.         cout<<"文件打开失败,程序终止!"<<endl;  
  23.   
  24.         exit(0);  
  25.     }  
  26.   
  27.     int l;//人数  
  28.     string name;//姓名  
  29.     int age;//年龄  
  30.     int no;//学号  
  31.     int cpp;//C++成绩  
  32.     int math;//数学成绩  
  33.     int english;//英语成绩  
  34.   
  35.     cout<<"请输入学生的人数:";  
  36.     cin>>l;  
  37.   
  38.   
  39.     for(int i=1; i<=l; i++)  
  40.     {  
  41.         //创建一个保存数据的新结点  
  42.         PNODE pNew = new NODE[sizeof(NODE)];  
  43.   
  44.         if(NULL == pNew)  
  45.         {  
  46.             cout<<"动态内存分配失败,程序终止!"<<endl;  
  47.   
  48.             exit(0);  
  49.         }  
  50.   
  51.         //读取文件中的数据  
  52.         infile>>name>>age>>no>>cpp>>math>>english;  
  53.   
  54.         //初始化结点  
  55.         //pNew->st.SetLen(l);//学生的人数  
  56.         pNew->st.SetInfo(name, age);//学生的姓名和年龄  
  57.         pNew->st.SetNo(no);//学生的编号  
  58.         pNew->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)  
  59.         pNew->st.CountTotal();//计算学生的总分  
  60.         pNew->st.CountAve();//计算学生的平均分  
  61.   
  62.         pTail->pNext = pNew;//将pNew挂在老结点的后面  
  63.         pTail = pNew;//将指针pTail移到pNew上  
  64.         pTail->pNext = NULL;//清空指针域  
  65.     }  
  66.   
  67.     //关闭文件  
  68.     infile.close();  
  69.   
  70.     cout<<"已经成功的向程序中输入了"<<l<<"个学生的信息"<<endl;  
  71. }  
  72.   
  73.   
  74. //遍历链表  
  75. void Node::OutputStudent()  
  76. {  
  77.     PNODE p = pHead->pNext;  
  78.   
  79.     cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  80.   
  81.     string name;  
  82.     int age;  
  83.     int cpp;  
  84.     int math;  
  85.     int english;  
  86.     int total;  
  87.     int ave;  
  88.   
  89.     //遍历学生信息  
  90.     while(NULL != p)  
  91.     {  
  92.         p->st.GetInfo(&name, &age);  
  93.         p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  94.   
  95.         cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  96.         <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<"\t"<<p->st.GetS()<<endl;  
  97.   
  98.         p = p->pNext;  
  99.     }  
  100. }  
  101.   
  102.   
  103. PNODE Node::AddStudent(void)//增加学生信息  
  104. {  
  105.     PNODE p = pHead->pNext;  
  106.     Student st;//定义一个学生类  
  107.     int i = 1000;  
  108.     int pos;  
  109.     string name;//姓名  
  110.     int age;//年龄  
  111.     int no;//学号  
  112.     int cpp;//C++成绩  
  113.     int math;//数学成绩  
  114.     int english;//英语成绩  
  115.   
  116.     cout<<"请输入一个学生的学号:";  
  117.     cin>>pos;  
  118.   
  119.     cout<<"你将在学号为"<<pos<<"的学生后增加一个学生"<<endl;  
  120.   
  121.     st.SetNo(pos+1);//设置需要添加的学生的学号  
  122.   
  123.     cout<<"增加的学生的学号为"<<pos+1<<endl;  
  124.     
  125.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的姓名:";  
  126.     cin>>name;  
  127.   
  128.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的年龄:";  
  129.     cin>>age;  
  130.   
  131.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的C++成绩:";  
  132.     cin>>cpp;  
  133.   
  134.      cout<<"请输入学号为"<<st.GetNo()<<"的学生的数学成绩:";  
  135.      cin>>math;  
  136.       
  137.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的英语成绩:";  
  138.     cin>>english;  
  139.   
  140.     while(NULL != p && i<pos-1)  
  141.     {  
  142.         p = p->pNext;  
  143.         i++;  
  144.     }  
  145.   
  146.     if(NULL == p || i>pos)  
  147.     {  
  148.         cout<<"程序错误!"<<endl;  
  149.   
  150.         exit(1);  
  151.     }  
  152.   
  153.     PNODE pt = new NODE[sizeof(NODE)];  
  154.   
  155.     if(NULL == pt)  
  156.     {  
  157.         printf("动态内存分配失败,程序终止!\n");  
  158.         exit(-1);  
  159.     }  
  160.   
  161.     //初始化结点  
  162.     pt->st.SetInfo(name, age);//学生的姓名和年龄  
  163.     pt->st.SetNo(pos+1);//学生的学号  
  164.     pt->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)  
  165.     pt->st.CountTotal();//计算学生的总分  
  166.     pt->st.CountAve();//计算学生的平均分  
  167.   
  168.     PNODE q = p->pNext;  
  169.     p->pNext = pt;  
  170.     pt->pNext = q;  
  171.   
  172.     return p->pNext;  
  173. }  
  174.   
  175.   
  176. bool Node::DeleteStudent()//删除学生信息  
  177. {  
  178.     int i = 1000;  
  179.     int pos;  
  180.     PNODE p = pHead;  
  181.   
  182.     cout<<"请输入要删除的学生的学号:";  
  183.     cin>>pos;  
  184.   
  185.     cout<<"\n删除学号为"<<pos<<"后的学生信息:"<<endl;  
  186.   
  187.     while(NULL != p && i<pos-1)  
  188.     {  
  189.         p = p->pNext;  
  190.         i++;  
  191.     }  
  192.   
  193.     if(NULL == p || i>pos)  
  194.     {  
  195.         return true;  
  196.     }  
  197.   
  198.     PNODE q = p->pNext;  
  199.   
  200.     p->pNext = p->pNext->pNext;  
  201.   
  202.     delete []q;  
  203.   
  204.     return true;  
  205. }  
  206.   
  207.   
  208. void Node::ChangeStudent()//修改学生信息  
  209. {  
  210.     PNODE p = pHead->pNext;  
  211.   
  212.     string name;//姓名  
  213.     int age;//年龄  
  214.     int no;//学号  
  215.     int cpp;//C++成绩  
  216.     int math;//数学成绩  
  217.     int english;//英语成绩  
  218.     int total;//总分  
  219.     int ave;//平均分  
  220.   
  221.     int flag = 0;//标识符,初始化表示没找到  
  222.   
  223.     cout<<"请输入你需要修改的学生的姓名:";  
  224.     cin>>name;  
  225.   
  226.     string nm;//姓名  
  227.   
  228.     //遍历学生信息  
  229.     while(NULL != p)  
  230.     {  
  231.         //得到学生的姓名和年龄  
  232.         p->st.GetInfo(&nm, &age);  
  233.         p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  234.   
  235.         if(name == nm)  
  236.         {  
  237.             flag = 1;  
  238.   
  239.             cout<<"\n修改前的学生信息:"<<endl;  
  240.   
  241.             cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  242.   
  243.             cout<<nm<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  244.             <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;  
  245.           
  246.             break;  
  247.         }  
  248.   
  249.         p = p->pNext;  
  250.     }  
  251.   
  252.     if(0 == flag)  
  253.     {  
  254.         cout<<"没找到你需要修改的学生信息!\n"<<endl;  
  255.   
  256.         return;  
  257.     }  
  258.   
  259.     cout<<"\n你将修改学号为"<<p->st.GetNo()<<"的学生信息"<<endl;  
  260.   
  261.     no = p->st.GetNo();//得到学生的学号  
  262.   
  263.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的姓名:";  
  264.     cin>>name;  
  265.   
  266.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的年龄:";  
  267.     cin>>age;  
  268.   
  269.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的C++成绩:";  
  270.     cin>>cpp;  
  271.   
  272.      cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的数学成绩:";  
  273.      cin>>math;  
  274.       
  275.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的英语成绩:";  
  276.     cin>>english;  
  277.       
  278.     //初始化结点  
  279.     p->st.SetInfo(name, age);//学生的姓名和年龄  
  280.     p->st.SetNo(no);//学生的编号  
  281.     p->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)  
  282.     p->st.CountTotal();//计算学生的总分  
  283.     p->st.CountAve();//计算学生的平均分  
  284.   
  285.     cout<<"\n修改后的学生信息:"<<endl;  
  286.     cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  287.   
  288.     //得到学生的姓名和年龄吧  
  289.     p->st.GetInfo(&name, &age);  
  290.   
  291.     //得到学生的成绩  
  292.     p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  293.       
  294.     cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  295.    <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;  
  296. }  
  297.   
  298.   
  299. void Node::SearchStudent()//查找学生信息  
  300. {  
  301.     PNODE p = pHead->pNext;  
  302.   
  303.     string name;//姓名  
  304.   
  305.     int flag = 0;//标识符,初始化表示没找到  
  306.   
  307.     cout<<"请输入你需要查找的学生的姓名:";  
  308.     cin>>name;  
  309.   
  310.     cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  311.   
  312.     string nm;//姓名  
  313.     int age;//年龄  
  314.     int no;//学号  
  315.     int cpp;//C++成绩  
  316.     int math;//数学成绩  
  317.     int english;//英语成绩  
  318.     int total;//总分  
  319.     int ave;//平均分  
  320.   
  321.     //遍历学生信息  
  322.     while(NULL != p)  
  323.     {  
  324.         //得到学生的姓名和年龄  
  325.         p->st.GetInfo(&nm, &age);  
  326.   
  327.         //得到学生的成绩  
  328.         p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  329.   
  330.         if(name == nm)  
  331.         {  
  332.             flag = 1;  
  333.   
  334.              cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  335.             <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;  
  336.               
  337.              break;//退出循环  
  338.         }  
  339.   
  340.         p = p->pNext;  
  341.     }  
  342.   
  343.     if(0 == flag)  
  344.     {  
  345.         cout<<"没找到你需要的学生信息!"<<endl;  
  346.     }  
  347. }  
  348.   
  349.   
  350. void Node::SortCpp()//将C++成绩按照从大到小排序  
  351. {  
  352.     PNODE p, q;//定义两个指针  
  353.       
  354.       
  355.     NODE temp;//定义一个临时结点  
  356.   
  357.     int cpp1, cpp2;//C++成绩  
  358.     int math1, math2;//数学成绩  
  359.     int english1, english2;//英语成绩  
  360.     int total1, total2;//总分  
  361.     int ave1, ave2;//平均分  
  362.   
  363.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  364.     {  
  365.         for(q = p->pNext; NULL != q; q = q->pNext)  
  366.         {  
  367.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  368.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  369.   
  370.             if(cpp1 < cpp2)//当前一个学生的C++成绩小于后一个学生的C++成绩时  
  371.             {  
  372.                 temp.st  = p->st;//交换学生的位置  
  373.                 p->st =  q->st;  
  374.                 q->st = temp.st;  
  375.             }  
  376.         }  
  377.     }  
  378. }  
  379.   
  380.   
  381. void Node::SortMath()//将高数成绩按照从大到小排序  
  382. {  
  383.      PNODE p, q;//定义两个指针  
  384.       
  385.     NODE temp;//定义一个临时结点  
  386.   
  387.     int cpp1, cpp2;//C++成绩  
  388.     int math1, math2;//数学成绩  
  389.     int english1, english2;//英语成绩  
  390.     int total1, total2;//总分  
  391.     int ave1, ave2;//平均分  
  392.   
  393.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  394.     {  
  395.         for(q = p->pNext; NULL != q; q = q->pNext)  
  396.         {  
  397.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  398.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  399.               
  400.             if(math1 < math2)//当前一个学生的高数成绩小于后一个学生的高数成绩时  
  401.             {  
  402.                 temp.st  = p->st;//交换学生的位置(交换结点中的数据域)  
  403.                 p->st = q->st;  
  404.                 q->st = temp.st;  
  405.             }  
  406.         }  
  407.     }  
  408. }  
  409.   
  410.   
  411. void Node::SortEnglish()//将英语成绩按照从大到小排序  
  412. {  
  413.     PNODE p, q;//定义两个指针  
  414.        
  415.     NODE temp;//定义一个临时结点  
  416.        
  417.     int cpp1, cpp2;//C++成绩  
  418.     int math1, math2;//数学成绩  
  419.     int english1, english2;//英语成绩  
  420.     int total1, total2;//总分  
  421.     int ave1, ave2;//平均分  
  422.       
  423.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  424.     {  
  425.         for(q = p->pNext; NULL != q; q = q->pNext)  
  426.         {  
  427.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  428.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  429.               
  430.             if(english1 < english2)//当前一个学生的英语成绩小于后一个学生的英语成绩时  
  431.             {  
  432.                 temp.st  = p->st;//交换学生的位置(交换结点中的数据域)  
  433.                 p->st = q->st;  
  434.                 q->st = temp.st;  
  435.             }  
  436.         }  
  437.     }  
  438. }  
  439.   
  440.   
  441. void Node::SortTotal()//将总分按照从大到小排序  
  442. {  
  443.     PNODE p, q;//定义两个指针  
  444.       
  445.     NODE temp;//定义一个临时结点  
  446.   
  447.     int cpp1, cpp2;//C++成绩  
  448.     int math1, math2;//数学成绩  
  449.     int english1, english2;//英语成绩  
  450.     int total1, total2;//总分  
  451.     int ave1, ave2;//平均分  
  452.       
  453.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  454.     {  
  455.         for(q = p->pNext; NULL != q; q = q->pNext)  
  456.         {  
  457.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  458.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  459.               
  460.             if(total1 < total2)//当前一个学生的总分小于后一个学生的总分时  
  461.             {  
  462.                 temp.st  = p->st;//交换学生的位置(交换结点中的数据域)  
  463.                 p->st = q->st;  
  464.                 q->st = temp.st;  
  465.             }  
  466.         }  
  467.     }  
  468. }  
  469.   
  470.   
  471. void Node::SetScort()//设置排名  
  472. {  
  473.     PNODE p;//定义一个指向结点的指针  
  474.     int i;//保存排名  
  475.   
  476.     //给学生的排名赋值  
  477.     for(p=pHead->pNext, i=1; NULL !=p; p=p->pNext, i++)  
  478.     {  
  479.         p->st.SetS(i);  
  480.     }  
  481. }  
  482.   
  483.   
  484. //修改学生的学号  
  485. void Node::ChangeNo(PNODE p)  
  486. {  
  487.     int i = p->st.GetNo();//提供修改的数据  
  488.   
  489.     //遍历学生信息  
  490.     while(NULL != p)  
  491.     {  
  492.         p->st.SetNo(i);  
  493.   
  494.         i++;  
  495.   
  496.         p = p->pNext;  
  497.     }  
  498. }  

首先定义两个类Student类和Node类

Student类用于表示学生信息

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class Student//学生类  
  2. {  
  3. public:  
  4.     Student();//构造函数  
  5.     void SetInfo(string N, int A);//设置学生的信息(设置姓名、年龄)  
  6.     void SetNo(int N);//设置学生的编号  
  7.     void SetScore(int C, int M, int E);//设置学生的成绩(C++、高数、英语)  
  8.     void CountTotal();//计算总分  
  9.     void CountAve();//计算平均分  
  10.     void SetS(int S);//设置序号(用于排名)  
  11.     void GetInfo(string *pN, int *pA);//得到学生的信息(得到姓名、年龄)  
  12.     int GetNo();//得到学生的编号  
  13.   
  14.     //得到学生的分数(C++ 高数 英语 总分 平均分)  
  15.     void GetScore(int *pC, int *pM, int *pE, int *pT, int *pA);  
  16.     int GetS();//得到序号(用于排名)  
  17.   
  18. private:  
  19.     int len;          //学生的人数  
  20.     string Name;     //姓名  
  21.     int Age;         //年龄  
  22.     int No;          //学号  
  23.     int Cpp;         //C++成绩  
  24.     int Math;       //高数成绩  
  25.     int English;    //英语成绩  
  26.     int Total;     //总分  
  27.     float Ave;      //平均分  
  28.     int Sort;     //排名  
  29. };  


定义Student类中的成员函数

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //构造函数  
  2. Student::Student()  
  3. {  
  4.     Sort = 0;  
  5. }  
  6.   
  7.   
  8. void Student::SetInfo(string N, int A)//设置学生的信息(设置姓名、年龄)  
  9. {  
  10.     Name = N;  
  11.     Age = A;  
  12. }  
  13.   
  14.   
  15. void Student::SetNo(int N)//设置学生的编号  
  16. {  
  17.     No = N;  
  18. }  
  19.   
  20.   
  21. void Student::SetScore(int C, int M, int E)//设置学生的成绩(C++、高数、英语)  
  22. {  
  23.     Cpp = C;  
  24.     Math = M;  
  25.     English = E;  
  26. }  
  27.   
  28. void Student::CountTotal()//计算总分  
  29. {  
  30.     Total = Cpp + Math + English;  
  31. }  
  32.   
  33.   
  34. void Student::CountAve()//计算学生的平均分  
  35. {  
  36.     Ave = Total / 3;  
  37. }  
  38.   
  39.   
  40. void Student::SetS(int s)//设置序号(用于排名)  
  41. {  
  42.     Sort = s;  
  43. }  
  44.   
  45.   
  46. void Student::GetInfo(string *pN, int *pA)//得到学生的信息(得到姓名、年龄)  
  47. {  
  48.     *pN = Name;  
  49.     *pA = Age;  
  50. }  
  51.   
  52.   
  53. int Student::GetNo()//得到学生的编号  
  54. {  
  55.     return No;  
  56. }  
  57.   
  58.   
  59. //得到学生的分数(C++ 高数 英语 总分 平均分)  
  60. void Student::GetScore(int *pC, int *pM, int *pE, int *pT, int *pA)  
  61. {  
  62.     *pC = Cpp;//得到C++成绩  
  63.     *pM = Math;//得到数学成绩  
  64.     *pE = English;//得到英语成绩  
  65.     *pT = Total;//得到总分  
  66.     *pA = Ave;//得到平均分  
  67. }  
  68.   
  69.   
  70. int Student::GetS()//得到序号(用于排名)  
  71. {  
  72.     return Sort;  
  73. }  

定义Node类用于处理学生信息

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class Node//结点类  
  2. {  
  3. public:  
  4.     void InputStudent();//输入学生信息  
  5.     void OutputStudent();//输出学生信息  
  6.     Node* AddStudent();//增加学生信息  
  7.     bool DeleteStudent();//删除学生信息  
  8.     void ChangeStudent();//修改学生信息  
  9.     void SearchStudent();//查找学生信息  
  10.     void SortCpp();//将C++成绩按照从大到小排序  
  11.     void SortMath();//将高数成绩按照从大到小排序  
  12.     void SortEnglish();//将英语成绩按照从大到小排序  
  13.     void SortTotal();//将总分按照从大到小排序  
  14.     void SetScort();//设置排名  
  15.     void ChangeNo(Node *p);//修改学生的学号  
  16.   
  17. private:  
  18.     Student st;//数据域  
  19.     Node *pNext;//指针域  
  20.     Node *pHead;//头结点  
  21. };  
  22. typedef Node NODE;  
  23. typedef Node* PNODE;  
  24. /* 
  25. NODE 相当于  Node 
  26. PNODE 相当于 Node* 
  27. */  


定义Node类的成员函数

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //输入学生信息  
  2. void Node::InputStudent()  
  3. {  
  4.     //创建一个头结点  
  5.     pHead =  new NODE[sizeof(NODE)];  
  6.   
  7.     if(NULL == pHead)  
  8.     {  
  9.         cout<<"动态内存分配失败,程序终止!"<<endl;  
  10.   
  11.         exit(0);  
  12.     }  
  13.   
  14.     PNODE pTail = pHead;//创建一个指向头结点的指针  
  15.     pTail->pNext = NULL;//初始化指针的指针域为NULL  
  16.   
  17.     //将文件中的数据输入到程序中  
  18.     ifstream infile("score.dat", ios::in);  
  19.   
  20.     if(!infile)  
  21.     {  
  22.         cout<<"文件打开失败,程序终止!"<<endl;  
  23.   
  24.         exit(0);  
  25.     }  
  26.   
  27.     int l;//人数  
  28.     string name;//姓名  
  29.     int age;//年龄  
  30.     int no;//学号  
  31.     int cpp;//C++成绩  
  32.     int math;//数学成绩  
  33.     int english;//英语成绩  
  34.   
  35.     cout<<"请输入学生的人数:";  
  36.     cin>>l;  
  37.   
  38.   
  39.     for(int i=1; i<=l; i++)  
  40.     {  
  41.         //创建一个保存数据的新结点  
  42.         PNODE pNew = new NODE[sizeof(NODE)];  
  43.   
  44.         if(NULL == pNew)  
  45.         {  
  46.             cout<<"动态内存分配失败,程序终止!"<<endl;  
  47.   
  48.             exit(0);  
  49.         }  
  50.   
  51.         //读取文件中的数据  
  52.         infile>>name>>age>>no>>cpp>>math>>english;  
  53.   
  54.         //初始化结点  
  55.         //pNew->st.SetLen(l);//学生的人数  
  56.         pNew->st.SetInfo(name, age);//学生的姓名和年龄  
  57.         pNew->st.SetNo(no);//学生的编号  
  58.         pNew->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)  
  59.         pNew->st.CountTotal();//计算学生的总分  
  60.         pNew->st.CountAve();//计算学生的平均分  
  61.   
  62.         pTail->pNext = pNew;//将pNew挂在老结点的后面  
  63.         pTail = pNew;//将指针pTail移到pNew上  
  64.         pTail->pNext = NULL;//清空指针域  
  65.     }  
  66.   
  67.     //关闭文件  
  68.     infile.close();  
  69.   
  70.     cout<<"已经成功的向程序中输入了"<<l<<"个学生的信息"<<endl;  
  71. }  
  72.   
  73.   
  74. //遍历链表  
  75. void Node::OutputStudent()  
  76. {  
  77.     PNODE p = pHead->pNext;  
  78.   
  79.     cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  80.   
  81.     string name;  
  82.     int age;  
  83.     int cpp;  
  84.     int math;  
  85.     int english;  
  86.     int total;  
  87.     int ave;  
  88.   
  89.     //遍历学生信息  
  90.     while(NULL != p)  
  91.     {  
  92.         p->st.GetInfo(&name, &age);  
  93.         p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  94.   
  95.         cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  96.         <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<"\t"<<p->st.GetS()<<endl;  
  97.   
  98.         p = p->pNext;  
  99.     }  
  100. }  
  101.   
  102.   
  103. PNODE Node::AddStudent(void)//增加学生信息  
  104. {  
  105.     PNODE p = pHead->pNext;  
  106.     Student st;//定义一个学生类  
  107.     int i = 1000;  
  108.     int pos;  
  109.     string name;//姓名  
  110.     int age;//年龄  
  111.     int no;//学号  
  112.     int cpp;//C++成绩  
  113.     int math;//数学成绩  
  114.     int english;//英语成绩  
  115.   
  116.     cout<<"请输入一个学生的学号:";  
  117.     cin>>pos;  
  118.   
  119.     cout<<"你将在学号为"<<pos<<"的学生后增加一个学生"<<endl;  
  120.   
  121.     st.SetNo(pos+1);//设置需要添加的学生的学号  
  122.   
  123.     cout<<"增加的学生的学号为"<<pos+1<<endl;  
  124.     
  125.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的姓名:";  
  126.     cin>>name;  
  127.   
  128.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的年龄:";  
  129.     cin>>age;  
  130.   
  131.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的C++成绩:";  
  132.     cin>>cpp;  
  133.   
  134.      cout<<"请输入学号为"<<st.GetNo()<<"的学生的数学成绩:";  
  135.      cin>>math;  
  136.       
  137.     cout<<"请输入学号为"<<st.GetNo()<<"的学生的英语成绩:";  
  138.     cin>>english;  
  139.   
  140.     while(NULL != p && i<pos-1)  
  141.     {  
  142.         p = p->pNext;  
  143.         i++;  
  144.     }  
  145.   
  146.     if(NULL == p || i>pos)  
  147.     {  
  148.         cout<<"程序错误!"<<endl;  
  149.   
  150.         exit(1);  
  151.     }  
  152.   
  153.     PNODE pt = new NODE[sizeof(NODE)];  
  154.   
  155.     if(NULL == pt)  
  156.     {  
  157.         printf("动态内存分配失败,程序终止!\n");  
  158.         exit(-1);  
  159.     }  
  160.   
  161.     //初始化结点  
  162.     pt->st.SetInfo(name, age);//学生的姓名和年龄  
  163.     pt->st.SetNo(pos+1);//学生的学号  
  164.     pt->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)  
  165.     pt->st.CountTotal();//计算学生的总分  
  166.     pt->st.CountAve();//计算学生的平均分  
  167.   
  168.     PNODE q = p->pNext;  
  169.     p->pNext = pt;  
  170.     pt->pNext = q;  
  171.   
  172.     return p->pNext;  
  173. }  
  174.   
  175.   
  176. bool Node::DeleteStudent()//删除学生信息  
  177. {  
  178.     int i = 1000;  
  179.     int pos;  
  180.     PNODE p = pHead;  
  181.   
  182.     cout<<"请输入要删除的学生的学号:";  
  183.     cin>>pos;  
  184.   
  185.     cout<<"\n删除学号为"<<pos<<"后的学生信息:"<<endl;  
  186.   
  187.     while(NULL != p && i<pos-1)  
  188.     {  
  189.         p = p->pNext;  
  190.         i++;  
  191.     }  
  192.   
  193.     if(NULL == p || i>pos)  
  194.     {  
  195.         return true;  
  196.     }  
  197.   
  198.     PNODE q = p->pNext;  
  199.   
  200.     p->pNext = p->pNext->pNext;  
  201.   
  202.     delete []q;  
  203.   
  204.     return true;  
  205. }  
  206.   
  207.   
  208. void Node::ChangeStudent()//修改学生信息  
  209. {  
  210.     PNODE p = pHead->pNext;  
  211.   
  212.     string name;//姓名  
  213.     int age;//年龄  
  214.     int no;//学号  
  215.     int cpp;//C++成绩  
  216.     int math;//数学成绩  
  217.     int english;//英语成绩  
  218.     int total;//总分  
  219.     int ave;//平均分  
  220.   
  221.     int flag = 0;//标识符,初始化表示没找到  
  222.   
  223.     cout<<"请输入你需要修改的学生的姓名:";  
  224.     cin>>name;  
  225.   
  226.     string nm;//姓名  
  227.   
  228.     //遍历学生信息  
  229.     while(NULL != p)  
  230.     {  
  231.         //得到学生的姓名和年龄  
  232.         p->st.GetInfo(&nm, &age);  
  233.         p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  234.   
  235.         if(name == nm)  
  236.         {  
  237.             flag = 1;  
  238.   
  239.             cout<<"\n修改前的学生信息:"<<endl;  
  240.   
  241.             cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  242.   
  243.             cout<<nm<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  244.             <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;  
  245.           
  246.             break;  
  247.         }  
  248.   
  249.         p = p->pNext;  
  250.     }  
  251.   
  252.     if(0 == flag)  
  253.     {  
  254.         cout<<"没找到你需要修改的学生信息!\n"<<endl;  
  255.   
  256.         return;  
  257.     }  
  258.   
  259.     cout<<"\n你将修改学号为"<<p->st.GetNo()<<"的学生信息"<<endl;  
  260.   
  261.     no = p->st.GetNo();//得到学生的学号  
  262.   
  263.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的姓名:";  
  264.     cin>>name;  
  265.   
  266.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的年龄:";  
  267.     cin>>age;  
  268.   
  269.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的C++成绩:";  
  270.     cin>>cpp;  
  271.   
  272.      cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的数学成绩:";  
  273.      cin>>math;  
  274.       
  275.     cout<<"请输入学号为"<<p->st.GetNo()<<"的学生的英语成绩:";  
  276.     cin>>english;  
  277.       
  278.     //初始化结点  
  279.     p->st.SetInfo(name, age);//学生的姓名和年龄  
  280.     p->st.SetNo(no);//学生的编号  
  281.     p->st.SetScore(cpp, math, english);//设置学生的成绩(C++、高数、英语)  
  282.     p->st.CountTotal();//计算学生的总分  
  283.     p->st.CountAve();//计算学生的平均分  
  284.   
  285.     cout<<"\n修改后的学生信息:"<<endl;  
  286.     cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  287.   
  288.     //得到学生的姓名和年龄吧  
  289.     p->st.GetInfo(&name, &age);  
  290.   
  291.     //得到学生的成绩  
  292.     p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  293.       
  294.     cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  295.    <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;  
  296. }  
  297.   
  298.   
  299. void Node::SearchStudent()//查找学生信息  
  300. {  
  301.     PNODE p = pHead->pNext;  
  302.   
  303.     string name;//姓名  
  304.   
  305.     int flag = 0;//标识符,初始化表示没找到  
  306.   
  307.     cout<<"请输入你需要查找的学生的姓名:";  
  308.     cin>>name;  
  309.   
  310.     cout<<"姓名\t"<<"年龄\t"<<"学号\t"<<"C++\t"<<"数学\t"<<"英语\t"<<"总分\t"<<"平均分\t"<<"排名"<<endl;  
  311.   
  312.     string nm;//姓名  
  313.     int age;//年龄  
  314.     int no;//学号  
  315.     int cpp;//C++成绩  
  316.     int math;//数学成绩  
  317.     int english;//英语成绩  
  318.     int total;//总分  
  319.     int ave;//平均分  
  320.   
  321.     //遍历学生信息  
  322.     while(NULL != p)  
  323.     {  
  324.         //得到学生的姓名和年龄  
  325.         p->st.GetInfo(&nm, &age);  
  326.   
  327.         //得到学生的成绩  
  328.         p->st.GetScore(&cpp, &math, &english, &total, &ave);  
  329.   
  330.         if(name == nm)  
  331.         {  
  332.             flag = 1;  
  333.   
  334.              cout<<name<<"\t"<<age<<"\t"<<p->st.GetNo()<<"\t"<<cpp  
  335.             <<"\t"<<math<<"\t"<<english<<"\t"<<total<<"\t"<<ave<<endl;  
  336.               
  337.              break;//退出循环  
  338.         }  
  339.   
  340.         p = p->pNext;  
  341.     }  
  342.   
  343.     if(0 == flag)  
  344.     {  
  345.         cout<<"没找到你需要的学生信息!"<<endl;  
  346.     }  
  347. }  
  348.   
  349.   
  350. void Node::SortCpp()//将C++成绩按照从大到小排序  
  351. {  
  352.     PNODE p, q;//定义两个指针  
  353.       
  354.       
  355.     NODE temp;//定义一个临时结点  
  356.   
  357.     int cpp1, cpp2;//C++成绩  
  358.     int math1, math2;//数学成绩  
  359.     int english1, english2;//英语成绩  
  360.     int total1, total2;//总分  
  361.     int ave1, ave2;//平均分  
  362.   
  363.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  364.     {  
  365.         for(q = p->pNext; NULL != q; q = q->pNext)  
  366.         {  
  367.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  368.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  369.   
  370.             if(cpp1 < cpp2)//当前一个学生的C++成绩小于后一个学生的C++成绩时  
  371.             {  
  372.                 temp.st  = p->st;//交换学生的位置  
  373.                 p->st =  q->st;  
  374.                 q->st = temp.st;  
  375.             }  
  376.         }  
  377.     }  
  378. }  
  379.   
  380.   
  381. void Node::SortMath()//将高数成绩按照从大到小排序  
  382. {  
  383.      PNODE p, q;//定义两个指针  
  384.       
  385.     NODE temp;//定义一个临时结点  
  386.   
  387.     int cpp1, cpp2;//C++成绩  
  388.     int math1, math2;//数学成绩  
  389.     int english1, english2;//英语成绩  
  390.     int total1, total2;//总分  
  391.     int ave1, ave2;//平均分  
  392.   
  393.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  394.     {  
  395.         for(q = p->pNext; NULL != q; q = q->pNext)  
  396.         {  
  397.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  398.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  399.               
  400.             if(math1 < math2)//当前一个学生的高数成绩小于后一个学生的高数成绩时  
  401.             {  
  402.                 temp.st  = p->st;//交换学生的位置(交换结点中的数据域)  
  403.                 p->st = q->st;  
  404.                 q->st = temp.st;  
  405.             }  
  406.         }  
  407.     }  
  408. }  
  409.   
  410.   
  411. void Node::SortEnglish()//将英语成绩按照从大到小排序  
  412. {  
  413.     PNODE p, q;//定义两个指针  
  414.        
  415.     NODE temp;//定义一个临时结点  
  416.        
  417.     int cpp1, cpp2;//C++成绩  
  418.     int math1, math2;//数学成绩  
  419.     int english1, english2;//英语成绩  
  420.     int total1, total2;//总分  
  421.     int ave1, ave2;//平均分  
  422.       
  423.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  424.     {  
  425.         for(q = p->pNext; NULL != q; q = q->pNext)  
  426.         {  
  427.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  428.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  429.               
  430.             if(english1 < english2)//当前一个学生的英语成绩小于后一个学生的英语成绩时  
  431.             {  
  432.                 temp.st  = p->st;//交换学生的位置(交换结点中的数据域)  
  433.                 p->st = q->st;  
  434.                 q->st = temp.st;  
  435.             }  
  436.         }  
  437.     }  
  438. }  
  439.   
  440.   
  441. void Node::SortTotal()//将总分按照从大到小排序  
  442. {  
  443.     PNODE p, q;//定义两个指针  
  444.       
  445.     NODE temp;//定义一个临时结点  
  446.   
  447.     int cpp1, cpp2;//C++成绩  
  448.     int math1, math2;//数学成绩  
  449.     int english1, english2;//英语成绩  
  450.     int total1, total2;//总分  
  451.     int ave1, ave2;//平均分  
  452.       
  453.     for(p = pHead->pNext; NULL != p; p = p->pNext)  
  454.     {  
  455.         for(q = p->pNext; NULL != q; q = q->pNext)  
  456.         {  
  457.             p->st.GetScore(&cpp1, &math1, &english1, &total1, &ave1);  
  458.             q->st.GetScore(&cpp2, &math2, &english2, &total2, &ave2);  
  459.               
  460.             if(total1 < total2)//当前一个学生的总分小于后一个学生的总分时  
  461.             {  
  462.                 temp.st  = p->st;//交换学生的位置(交换结点中的数据域)  
  463.                 p->st = q->st;  
  464.                 q->st = temp.st;  
  465.             }  
  466.         }  
  467.     }  
  468. }  
  469.   
  470.   
  471. void Node::SetScort()//设置排名  
  472. {  
  473.     PNODE p;//定义一个指向结点的指针  
  474.     int i;//保存排名  
  475.   
  476.     //给学生的排名赋值  
  477.     for(p=pHead->pNext, i=1; NULL !=p; p=p->pNext, i++)  
  478.     {  
  479.         p->st.SetS(i);  
  480.     }  
  481. }  
  482.   
  483.   
  484. //修改学生的学号  
  485. void Node::ChangeNo(PNODE p)  
  486. {  
  487.     int i = p->st.GetNo();//提供修改的数据  
  488.   
  489.     //遍历学生信息  
  490.     while(NULL != p)  
  491.     {  
  492.         p->st.SetNo(i);  
  493.   
  494.         i++;  
  495.   
  496.         p = p->pNext;  
  497.     }  
  498. }  
相当不错的一个成绩管理系统 #include #include #include #include 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<name); i=0; p->totalmark=0; do { cout<mark[i].subject); cout<>p->mark[i].score; } while(p->mark[i].score>100||p->mark[i].scoretotalmark=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<next; if(p==NULL) { cout<<"没有学生,请重新输入"<<endl;system("pause");return 0; } else { cout<<"***************"<<endl; cout<<"学生成绩汇总:"<<endl; while(p) { cout<<"姓名:"<name<<" 总成绩:"<totalmark<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<name<<"*"; i=0; while(i!=SUBJECT) { fout<mark[i].subject<<"*"; fout<mark[i].score; i++; } //fout<next; } fout.flush(); fout.close(); cout<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<<"没有记录,请添加"<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<<"已经按照从大到小排序"<next; int i; if(head->next==NULL){cout<<"没有学生记录,请添加"<<endl;system("pause"); return 0;} else { while(p) { cout<<"姓名:"<name; i=1; while(i!=SUBJECT+1) { cout<<"科目:"<mark[i-1].subject; cout<<" 成绩:"<mark[i-1].score; i++; } cout<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<<"没有此文件"<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<<"信息已经保存在链表中"<next==NULL) { cout<<"没有学生,请添加或者从文件中读取"<next; char findname[10]; int i; cout<name,findname)) { cout<<"经查找,找到该生信息如下:"<<endl<<endl; cout<<"姓名:"<name; i=1; while(i!=SUBJECT+1) { cout<<"科目:"<mark[i-1].subject; cout<<" 成绩:"<mark[i-1].score; i++; } cout<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"<>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; }
下面是一个简单的学生成绩管理系统C++ 代码示例: ```c++ #include <iostream> #include <string> using namespace std; const int MAX_STUDENT = 100; // 最大学生数 const int MAX_SUBJECT = 5; // 最大科目数 struct Student { string name; int score[MAX_SUBJECT]; // 每个学生的各科成绩 }; int main() { Student students[MAX_STUDENT]; // 存储所有学生信息 int numStudents = 0; // 学生总数 int numSubjects = 0; // 科目总数 // 输入学生和科目总数 cout << "请输入学生总数: "; cin >> numStudents; cout << "请输入科目总数: "; cin >> numSubjects; // 输入每个学生的信息 for (int i = 0; i < numStudents; i++) { cout << "请输入第" << i + 1 << "个学生的姓名: "; cin >> students[i].name; for (int j = 0; j < numSubjects; j++) { cout << "请输入" << students[i].name << "的第" << j + 1 << "门成绩: "; cin >> students[i].score[j]; } } // 输出每个学生的信息和平均分 for (int i = 0; i < numStudents; i++) { cout << students[i].name << "的成绩为: "; int sum = 0; for (int j = 0; j < numSubjects; j++) { cout << students[i].score[j] << " "; sum += students[i].score[j]; } double avg = (double)sum / numSubjects; cout << "平均分为: " << avg << endl; } return 0; } ``` 这个例子中,使用了结构体 `Student` 存储每个学生的信息,包括姓名和各科成绩。在 `main` 函数中,首先输入学生和科目总数,然后循环输入每个学生的信息,最后输出每个学生的信息和平均分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值