• 选修课


    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <list>
    #include <map>
    using namespace std;
    typedef struct Student
    {
     int sid; // 学号
     char sname[20]; // 姓名
    } Student;

    typedef struct Course
    {
     int cid;//编号
     char cname[20];// 课程名
    } Course;

    typedef struct StudentCourse
    {
     int sid;
     int cid;
    } StudentCourse;

    #define STUDENT_DB "stuinfo.txt"
    #define COURSE_DB "courinfo.txt"
    #define STUCOUR_DB "stucourinfo.txt"

    void startMenu()
    {
     cout << "1. 录入课程" << endl;
     cout << "2. 学生注册" << endl;
     cout << "3. 浏览课程" << endl;
     cout << "4. 查看学生" << endl;
     cout << "5. 学生选课" << endl;
     cout << "6. 浏览选课" << endl;
     cout << "7. 删除选课" << endl;
     cout << "8. 根据学生名查询选课" << endl;
     cout << "9. 根据选课查询学生" << endl;
     cout << "#. 统计排序" << endl;
    }

    // 录入课程
    void addCourse()
    {
     // 清空输入缓冲
     int c;
     while ((c = getchar()) != ' ' && c != EOF);

     Course *pCourse = (Course *)malloc(sizeof(Course));
     cout << "课程名:";
     fgets(pCourse->cname, 20, stdin);
     // 去掉最后的换行符
     pCourse->cname[strlen(pCourse->cname) - 1] = '';

     cout << "课程编号:";
     char buf[100];
     gets_s(buf);
     pCourse->cid = atoi(buf);

     FILE *fp;
     if ((fp = fopen(COURSE_DB, "ab")) == NULL)
     {
      exit(1);
     }
     fwrite(pCourse, sizeof(Course), 1, fp);
     free(pCourse);
     fclose(fp);
    }

    // 录入学生
    void addStudent()
    {
     // 清空输入缓冲
     int c;
     while ((c = getchar()) != ' ' && c != EOF);

     Student *pStudent = (Student *)malloc(sizeof(Student));
     cout << "学号:";
     char buf[100];
     fgets(buf, 100, stdin);
     pStudent->sid = atoi(buf);
     cout << "姓名:";
     gets_s(pStudent->sname);

     FILE *fp;
     if ((fp = fopen(STUDENT_DB, "ab")) == NULL)
     {
      exit(1);
     }
     fwrite(pStudent, sizeof(Student), 1, fp);
     free(pStudent);
     fclose(fp);
    }

    // 浏览课程
    void browseCourses()
    {
     FILE *fp;
     if ((fp = fopen(COURSE_DB, "rb")) == NULL)
     {
      exit(1);
     }

     Course *pCourse = (Course *)malloc(sizeof(Course));

     while (fread(pCourse, sizeof(Course), 1, fp) == 1)
     {
      cout << "课程名:" << pCourse->cname << " ";
      cout << "编号:" << pCourse->cid << endl;
     }
     free(pCourse);
     fclose(fp);
    }

    // 查看学生
    void browseStudent()
    {
     FILE *fp;
     if ((fp = fopen(STUDENT_DB, "rb")) == NULL)
     {
      exit(1);
     }
     Student *pStudent = (Student *)malloc(sizeof(Student));
     while (fread(pStudent, sizeof(Student), 1, fp) == 1)
     {
      cout << "名字:" << pStudent->sname << " ";
      cout << "学号:" << pStudent->sid << endl;
     }
     free(pStudent);
     fclose(fp);
    }

    // 选课
    void selectCourse()
    {
     // 清空输入缓冲
     int c;
     while ((c = getchar()) != ' ' && c != EOF);

     FILE *fp;
     if ((fp = fopen(STUCOUR_DB, "ab")) == NULL)
     {
      exit(1);
     }
     StudentCourse *pSC = (StudentCourse *)malloc(sizeof(StudentCourse));

     cout << "学生学号:";
     char buf[100];
     gets_s(buf);
     pSC->sid = atoi(buf);
     cout << "课程编号:";
     gets_s(buf);
     pSC->cid = atoi(buf);

     fwrite(pSC, sizeof(StudentCourse), 1, fp);
     free(pSC);
     fclose(fp);
    }

    // 浏览选课
    void browseSelectCourse()
    {
     FILE *fp;
     if ((fp = fopen(STUCOUR_DB, "rb")) == NULL)
     {
      exit(1);
     }

     StudentCourse *pSC = (StudentCourse *)malloc(sizeof(StudentCourse));

     while (fread(pSC, sizeof(StudentCourse), 1, fp) == 1)
     {
      cout << "学号:" << pSC->sid << " " << "课程编号:" << pSC->cid << endl;
     }

     free(pSC);
     fclose(fp);
    }

    // 删除选课
    void deleteCourse()
    {
     // 清空输入缓冲
     int c;
     while ((c = getchar()) != ' ' && c != EOF);


     cout << "输入学生学号:";
     char buf[100];
     gets_s(buf);

     StudentCourse *pSC1 = (StudentCourse *)malloc(sizeof(StudentCourse));
     pSC1->sid = atoi(buf);
     cout << "输入选修课编号:";
     gets_s(buf);
     pSC1->cid = atoi(buf);

     FILE *fp;
     if ((fp = fopen(STUCOUR_DB, "rb")) == NULL)
     {
      exit(1);
     }

     StudentCourse pSC2;
     list<StudentCourse> lsc;
     bool flag = false;

     while (fread(&pSC2, sizeof(StudentCourse), 1, fp) == 1)
     {
      if (pSC2.cid == pSC1->cid&&pSC2.sid == pSC1->sid)
      {
       flag = true;
      }
      else
      {
       lsc.push_back(pSC2);
      }
     }
     if (flag)
     {
      fclose(fp);
      if ((fp = fopen(STUCOUR_DB, "wb")) == NULL)
      {
       exit(1);
      }
      while (!lsc.empty())
      {
       fwrite(&lsc.front(), sizeof(StudentCourse), 1, fp);
       lsc.pop_front();
      }
     }
     free(pSC1);
     fclose(fp);
    }

    // 根据学生名查询选课
    void browseCourseBySName()
    {
     // 清空输入缓冲
     int c;
     while ((c = getchar()) != ' ' && c != EOF);

     cout << "输入姓名:";
     char buf[100];
     gets_s(buf);
     // 根据姓名查出学号
     FILE *fp;
     if ((fp = fopen(STUDENT_DB, "rb")) == NULL)
     {
      exit(1);
     }
     int sid;
     Student *pStudent = (Student *)malloc(sizeof(Student));
     while (fread(pStudent, sizeof(Student), 1, fp) == 1)
     {
      if (strcmp(pStudent->sname, buf) == 0)
      {
       sid = pStudent->sid;
       break;
      }
     }
     free(pStudent);
     fclose(fp);
     // 根据学号查出选课
     if ((fp = fopen(STUCOUR_DB, "rb")) == NULL)
     {
      exit(1);
     }
     FILE *fp1;
     if ((fp1 = fopen(COURSE_DB, "rb")) == NULL)
     {
      exit(1);
     }
     StudentCourse *pSC = (StudentCourse *)malloc(sizeof(StudentCourse));
     Course *pCourse = (Course *)malloc(sizeof(Course));
     //list<char[100]> lbuf;
     cout << "已选课程:" << endl;
     while (fread(pSC, sizeof(StudentCourse), 1, fp) == 1)
     {
      if (sid == pSC->sid)
      {
       // 根据 cid 查出课程
       while (fread(pCourse, sizeof(Course), 1, fp1) == 1)
       {
        if (pCourse->cid == pSC->cid)
        {
         //strcpy(buf, pCourse->cname);
         //lbuf.push_back(buf);
         // 打印
         cout << " " << pCourse->cname << endl;
         break;
        }
       }
      }
     }
     fclose(fp);
     fclose(fp1);
     free(pSC);
     free(pCourse);
    }
    // 根据选课查询学生
    void browseStudentByCourse()
    {
     // 清空输入缓冲
     int c;
     while ((c = getchar()) != ' ' && c != EOF);
     cout << "输入课程名:";
     char buf[100];
     gets_s(buf);

     // 课程查出课程 cid
     FILE *fp;
     if ((fp = fopen(COURSE_DB, "rb")) == NULL)
     {
      exit(1);
     }
     Course *pCourse = (Course *)malloc(sizeof(Course));
     int cid;
     while (fread(pCourse, sizeof(Course), 1, fp) == 1)
     {
      if (strcmp(pCourse->cname, buf) == 0)
      {
       cid = pCourse->cid;
       break;
      }
     }

     fclose(fp);
     free(pCourse);

     if ((fp = fopen(STUCOUR_DB, "rb")) == NULL)
     {
      exit(1);
     }
     FILE *fp1;
     if ((fp1 = fopen(STUDENT_DB, "rb")) == NULL)
     {
      exit(1);
     }

     StudentCourse *pSC = (StudentCourse *)malloc(sizeof(StudentCourse));
     Student *pStudent = (Student *)malloc(sizeof(Student));
     cout << "已选学生:" << endl;
     while (fread(pSC, sizeof(StudentCourse), 1, fp) == 1)
     {
      if (cid == pSC->cid)
      {
       while (fread(pStudent, sizeof(Student), 1, fp1) == 1)
       {
        if (pStudent->sid == pSC->sid)
        {
         cout << " " << pStudent->sname << endl;
         break;
        }
       }
      }
     }

     fclose(fp1);
     fclose(fp);
     free(pSC);
     free(pStudent);
    }

    bool compareNocase(list<int>& first, list<int>& second)
    {
     return first.size() > second.size();
    }
    // 统计排序
    void statisticalSorting()
    {
     list<list<int>> llist;

     FILE *fp;
     if ((fp = fopen(STUCOUR_DB, "rb")) == NULL)
     {
      exit(1);
     }

     StudentCourse *pSC = (StudentCourse *)malloc(sizeof(StudentCourse));
     while (fread(pSC, sizeof(StudentCourse), 1, fp) == 1)
     {
      bool flag = false;
      // 寻找 llist 中是否存在 cid
      for (auto &l : llist)
      {
       if (l.front() == pSC->cid)
       {
        flag = true;
        l.push_back(0);
        break;
       }
      }
      if (!flag)
      {
       list<int> lint;
       lint.push_back(pSC->cid);
       llist.push_back(lint);
      }
     }
     cout << "课程编号" << " " << "选课人数" << endl;
     llist.sort(compareNocase);
     for (auto &l : llist)
     {
      cout << l.front() << " " << l.size() << endl;
     }
    }
    int main()
    {
     while (1)
     {
      startMenu();
     start:
      cout << "请选择:";
      int ch;
      ch = getchar();
      switch (ch)
      {
      case '1':
       addCourse();
       break;
      case '2':
       addStudent();
       break;
      case '3':
       browseCourses();
       break;
      case '4':
       browseStudent();
       break;
      case '5':
       selectCourse();
       break;
      case '6':
       browseSelectCourse();
       break;
      case '7':
       deleteCourse();
       break;
      case '8':
       browseCourseBySName();
       break;
      case '9':
       browseStudentByCourse();
       break;
      case '#':
       // todo 统计排序
       statisticalSorting();
       break;
      case ' ':
       goto start;
      default:
       cout << "非法输入" << endl;
      }

     }

     return 0;
    }

  • 相关阅读:
    第三章 IP地址分类及其子网划分
    第二章 NFS简单实战教程
    第一章 Rsync实战教程
    第三章 struts2 (二)
    第二章 struts2入门
    第一章 struts2 入门
    《Python语言及其应用》学习笔记
    ASPX页面请求响应过程
    Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)
    javascript 运行机制 事件循环 浏览器缓存 (慕课网 前段跳槽面试必备 4-1,4-2,4-3)
  • 原文地址:https://www.cnblogs.com/rong123/p/8176878.html
Copyright © 2020-2023  润新知