用c++模拟实现一个学生成绩管理系统

https://blog.csdn.net/yanxiaolx/article/details/53393437

题目:用c++模拟实现一个学生成绩的信息管理系统,要求能添加、删除、修改、查看和保存学生的信息等功能

源代码如下:

[cpp]  view plain  copy
  1. #define  _CRT_SECURE_NO_WARNINGS  
  2.   
  3. #include<iostream>  
  4. using namespace std;  
  5. #include<string.h>  
  6. #include<fstream>  
  7.   
  8. class student  
  9. {  
  10. private:  
  11.     student* next;  
  12. public:  
  13.     char stu_num[15];                  //学号  
  14.     char stu_name[30];                //姓名  
  15.     float stu_score;                      //成绩  
  16.   
  17.     void afterInsert(student *p);//在该节点后插入一个节点  
  18.     void afterDelete();//在该节点后删除一个节点  
  19.       
  20.     student *getNext()//获得下一个节点的指针  
  21.     {   
  22.         return next;   
  23.     }  
  24.   
  25.     /***********查询学生信息************/  
  26.     void getMage();  
  27.   
  28.     /******学生信息修改******/  
  29.     void changeMage(int n, char *ptr);  
  30.     void changegrade(float p);  
  31.   
  32.     /******构造*****/  
  33.     student(char *num, char *name, float score);  
  34.     student();  
  35. };  
  36.   
  37. void student::changegrade(float p)  
  38. {  
  39.     stu_score = p;  
  40. }  
  41.   
  42. student::student()           //构造  
  43. {  
  44.     strcpy(stu_num, "\0");  
  45.     strcpy(stu_name, "\0");  
  46.     stu_score = 0;  
  47.     next = '\0';  
  48. }  
  49.   
  50. student::student(char *num, char *name, float score)  
  51. {  
  52.     strcpy(stu_num, num);  
  53.     strcpy(stu_name, name);  
  54.     stu_score = score;  
  55.     next = '\0';  
  56. }  
  57.   
  58. void student::afterInsert(student *p)//插入节点  
  59. {  
  60.     p->next = next;  
  61.     next = p;  
  62. }  
  63.   
  64. void student::afterDelete()        //删除节点  
  65. {  
  66.     student *p = next;  
  67.     next = p->next;  
  68.     delete p;  
  69. }  
  70.   
  71. void student::getMage()             //获得信息  
  72. {  
  73.     cout << "学号:" << stu_num << "      姓名:" << stu_name;  
  74.     cout << "      c++成绩:" << stu_score << endl;  
  75. }  
  76.   
  77. void student::changeMage(int n, char *ptr)  
  78. {  
  79.     switch (n)  
  80.     {  
  81.     case 1: strcpy(stu_num, ptr);   
  82.         break;  
  83.     case 2: strcpy(stu_name, ptr);  
  84.     }  
  85. }  
  86.   
  87. //建立链表函数  
  88. void  construct_list(student *tail)  
  89. {  
  90.     student *p = new student;  
  91.     char very[20];  
  92.     float achieve;  
  93.     cout << "请输入学号:" << endl;  
  94.     cin >> very;  
  95.     p->changeMage(1, very);  
  96.     cout << "请输入姓名:" << endl;  
  97.     cin >> very;  
  98.     p->changeMage(2, very);  
  99.     cout << "请输入c++成绩:" << endl;  
  100.     cin >> achieve;  
  101.     p->changegrade(achieve);  
  102.     system("cls");  
  103.     cout << "信息输入完毕" << endl;  
  104.   
  105.     for (; tail->getNext() != '\0';)  
  106.     {  
  107.         tail = tail->getNext();  
  108.     }  
  109.   
  110.     tail->afterInsert(p);  
  111. }  
  112.   
  113. /*********查询信息*********/  
  114. student *findmege(student *head)  
  115. {  
  116. loop:  
  117.     cout << "1--按姓名查询           2--按学号查询              q--返回上一级菜单" << endl;  
  118.     char p[5], ptr[20];  
  119.     student *mid = head;  
  120.     cin >> p;  
  121.   
  122.     if (p[0] != '1'&&p[0] != '2'&&p[0] != 'q' || strlen(p)>1)  
  123.     {  
  124.         system("cls");  
  125.         cout << "对不起,你的输入有误,请重新输入!" << endl;  
  126.         goto loop;  
  127.     }  
  128.   
  129.     switch (p[0])  
  130.     {  
  131.     case '1':  
  132.     {  
  133.         system("cls");  
  134.         cout << "请输入要查找的姓名:" << endl;  
  135.         cin >> ptr;  
  136.   
  137.         for (; strcmp(ptr, mid->stu_name) != 0; mid = mid->getNext())  
  138.         {  
  139.             if (mid->getNext() == '\0')  
  140.             {  
  141.                 cout << "对不起,你要查找的人不存在,请确认你的输入是否正确!" << endl;  
  142.                 goto loop;  
  143.             }  
  144.         }  
  145.         return mid;  
  146.     }  
  147.     case '2':  
  148.     {  
  149.         system("cls");  
  150.         cout << "请输入您要查找的学号:" << endl;  
  151.         cin >> ptr;  
  152.         for (; strcmp(ptr, mid->stu_num) != 0; mid = mid->getNext())  
  153.         {  
  154.             if (mid->getNext() == '\0')  
  155.             {  
  156.                 cout << "对不起,您要查找的内容不存在,请确认您的输入是否正确!" << endl;  
  157.                 goto loop;  
  158.             }  
  159.         }  
  160.         return mid;  
  161.     }  
  162.     case 'q':   
  163.     {  
  164.         return '\0';  
  165.     }  
  166.     default:  
  167.     {  
  168.         system("cls");  
  169.         cout << "对不起,您的输入有误,请重新输入!" << endl;  
  170.         goto loop;  
  171.     }  
  172.     }  
  173. }  
  174.   
  175. /******************删除链表 节点***********************/  
  176. void delete_list(student *head)  
  177. {  
  178.     student *p = '\0';  
  179.     char selet[4];  
  180.     system("cls");  
  181.     cout << "在删除前,系统会根据您的提示找到您要删除的学生信息!" << endl;  
  182.     p = findmege(head);  
  183.     if (p != '\0')  
  184.     {  
  185.         cout << "确认要删除吗(yes/任意键返回)" << endl;  
  186.         cin >> selet;  
  187.   
  188.         if (strcmp(selet, "yes") == 0)  
  189.         {  
  190.             for (; head->getNext() != p; head = head->getNext());  
  191.             head->afterDelete();  
  192.             system("cls");  
  193.             cout << "该信息删除成功!" << endl;  
  194.         }  
  195.     }  
  196. }  
  197.   
  198. /*******************修改节点信息********************/  
  199. void change_info(student *head)  
  200. {  
  201.     system("cls");  
  202.     cout << "在您修改前,系统会根据您提供的信息找的您要修改的信息:" << endl;  
  203.     student *p = '\0';  
  204.   
  205.     float achieve;  
  206.     p = findmege(head);  
  207.     if (p != '\0')  
  208.     {  
  209.         cout << "请输入c++成绩:" << endl;  
  210.         cin >> achieve;  
  211.         p->changegrade(achieve);  
  212.         system("cls");  
  213.         cout << "修改成功!" << endl;  
  214.     }  
  215.   
  216. }  
  217.   
  218. /**************输出学生成绩信息**************/  
  219. void output(student *head)  
  220. {  
  221.     system("cls");  
  222.     cout << "1-查看指定学生信息;2-查看所有学生信息;3-分段输出学生信息" << endl;  
  223.     char ch;  
  224.     int n = 0;  
  225.     head = head->getNext();  
  226.     cin >> ch;  
  227.     switch (ch)  
  228.     {  
  229.     case '1':   
  230.         head = findmege(head);  
  231.         if (head == '\0')  
  232.         {  
  233.             break;  
  234.         }  
  235.         head->getMage();  
  236.         break;  
  237.     case '2':   
  238.     while (head)  
  239.     {  
  240.         head->getMage();  
  241.         head = head->getNext();  
  242.     }  
  243.     break;  
  244.     case '3':   
  245.         cout << "a-60分以下;b-60~70分之间;c-70~80分之间;d-80~90分之间;e-90~100分之间:" << endl;  
  246.         cin >> ch;  
  247.         switch (ch)  
  248.         {  
  249.         case 'a':  
  250.         while (head)  
  251.         {  
  252.             if (head->stu_score <= 60)  
  253.             {  
  254.                 head->getMage();  
  255.                 n++;  
  256.             }  
  257.             head = head->getNext();  
  258.         }  
  259.          break;  
  260.         case 'b':   
  261.         while (head)  
  262.         {  
  263.             if (head->stu_score>60 && head->stu_score <= 70)   
  264.             {   
  265.                 head->getMage();  
  266.                 n++;   
  267.             }  
  268.             head = head->getNext();  
  269.         }  
  270.         break;  
  271.         case 'c':   
  272.         while (head)  
  273.         {  
  274.             if (head->stu_score>70 && head->stu_score <= 80)  
  275.             {   
  276.                 head->getMage();   
  277.                 n++;   
  278.             }  
  279.             head = head->getNext();  
  280.         }  
  281.         break;  
  282.         case 'd':   
  283.         while (head)  
  284.         {  
  285.             if (head->stu_score>80 && head->stu_score <= 90)  
  286.             {  
  287.                 head->getMage();  
  288.                 n++;  
  289.             }  
  290.             head = head->getNext();  
  291.         }  
  292.         break;  
  293.         case 'e':   
  294.         while (head)  
  295.         {  
  296.             if (head->stu_score>90 && head->stu_score <= 100)  
  297.             {   
  298.                 head->getMage();  
  299.                 n++;  
  300.             }  
  301.             head = head->getNext();  
  302.         }  
  303.         }  
  304.         if (n == 0)  
  305.         {  
  306.             cout << "该分段内没有您要找的学生信息" << endl;  
  307.         }  
  308.     }  
  309. }  
  310.   
  311. /*****************主菜单************************/  
  312. void mainmenu(student *head)  
  313. {  
  314.     char selet[10];  
  315.     int n = 1;  
  316.     ofstream outfile;  
  317.     ifstream infile;  
  318.     student *p, *ptr;  
  319.     student *test = head, *mid;  
  320.     cout << "*************************欢迎进入学生信息管理系统*************************" << endl;  
  321.     do {  
  322.         cout << "**************************************************************************" << endl;  
  323.         cout << "1.插入信息;   2.删除信息;  3.修改信息; 4.查看信息; 5.保存  " << endl;  
  324.         cout << "按'q'键退出      " << endl;  
  325.         cout << "**************************************************************************" << endl;  
  326.         cin >> selet;  
  327.         if (((selet[0]<'1' || selet[0]>'6') && selet[0] != 'q') || strlen(selet)>1)  
  328.         {  
  329.             system("cls");  
  330.             cout << "您的输入有误,请重新输入!" << endl;  
  331.             break;  
  332.         }  
  333.         switch (selet[0])  
  334.         {  
  335.   
  336.         case '1':  
  337.             construct_list(head);  
  338.             break;   
  339.         case '2':   
  340.             delete_list(head);   
  341.             break;  
  342.         case '3':   
  343.             change_info(head);  
  344.             break;  
  345.         case '4':   
  346.             output(head);  
  347.             break;  
  348.         case '5':    
  349.             outfile.open("students.txt", ios::out | ios::app);  
  350.             for (p = head->getNext(); p != '\0'; p = p->getNext())  
  351.             {  
  352.                 outfile << p->stu_name << ' ';  
  353.                 outfile << p->stu_num << ' ';  
  354.                 outfile << p->stu_score << ' ';  
  355.                 outfile << endl;  
  356.             }  
  357.             outfile.close();  
  358.             system("cls");  
  359.             cout << "保存成功!" << endl;  
  360.             break;  
  361.         case 'q':   
  362.             break;  
  363.         }  
  364.     } while (selet[0] != 'q');  
  365. }  
  366.   
  367. void main()  
  368. {  
  369.     student head;  
  370.     mainmenu(&head);  
  371. }  
运行结果部分截图:



猜你喜欢

转载自blog.csdn.net/sinat_35297665/article/details/80568954