C++大作业——学生选课系统

2024-05-09 5367阅读

C++大作业——学生选课系统

  • 前言
  • 1.系统概述
  • 2.系统设计
    • 2.1概要设计
    • 2.2详细设计
      • 2.2.1学生类和课程类模块设计
      • 2.2.2文件信息读取和录入模块设计
      • 2.2.3增删改查模块设计
      • 2.2.4登入模块设计
      • 2.2.5选课模块设计
      • 2.2.6退选模块设计
      • 3.完整代码
      • 4.总结与展望
        • 4.1设计总结
        • 4.2设计展望

          前言


          本次课程设计是我第一次独自完成这样一个相对完整的项目,收获很多。但是我更想说一下本次设计中存在的不足。

          首先就是在最初设计课程类和学生类时,没有考虑的那么全面,导致出现了很多冗余的接口,和公有私有混着用的情况。其次就是,虽然是用C++写的,却没有把封装体现出来,使用了很多friend友元函数也破坏了类的封装效果。

          由于我最开始是在Linux系统上编写的代码,没有装中文包,所以很多注释和输出语句都是用英文写的。后来又转到Windows下的VS环境下编程,也写了一些中文的语句。导致会有中英文混用的情况,可能会影响观感。

          在学习这个系统之前,建议先把学生成绩管理系统熟练掌握,掌握最基本的增删改查操作,我在本文中就不再赘述了,把重点放在选课和退选的功能讲解上。

          在最后面,我也会把整个项目代码都放出来,大家可以拿去在自己的电脑上运行,应付下作业铁定是没问题的(手动狗头)。


          1.系统概述


          本系统是学生选课系统,主要是实现大学生的选课需求。进入系统,需要先选择用户(学生或管理员),选择管理员,需要输入对应的密码。选择完身份后,进入主菜单,会出现两个子菜单,学生菜单和课程菜单,选择相应的选项,就会进入相应的菜单,其中0选项是返回上级目录。

          进入课程菜单,会看到增删改查相应的操作,还有显示全部课程信息。其中,学生用户没有对课程进行增删改的权利。管理员是超级用户,有所有操作的权利。里面的细节我们在模块的具体实现时再说。

          进入学生菜单,也会看到增删改查相关的操作,还有显示全部学生的信息。不同的是,学生菜单中可以进行选课和退选的相关操作。学生用户只有查看信息,选课退选的权利,没有增删改的权利。具体细节也是放在模块中详谈。


          2.系统设计


          2.1概要设计


          C++大作业——学生选课系统 第1张


          2.2详细设计


          2.2.1学生类和课程类模块设计


          int flag = 0;                   // default is student
          class Course 
          {
          public:
              friend void Input_course(vector& cour);
              friend void Delete_course(vector& cour);
              friend void Modify_course(vector& cour);
              friend void Lookup_course(vector& cour);
              friend void Show_course(vector& cour);
              friend void Add_course(vector& cour);                        
              friend int Read_course(vector& cour);
              friend void Write_course(vector& cour, int n);
              const char* c_id() { return id; }
              const char* c_name() { return name; }
              const bool c_nature() { return nature; }
              Course()
                  : id("None")
                  , name("None")
                  , count(0)
              {}
          public:
              char id[20];
              char name[20];
          private:
              bool nature;            // 0 indicates elective and 1 indicates compulsory
              int hour;               // class time                              
              int credir;             // credit
          public:
              int count;              // count of student 0-60
          };
          class Student
          {
          public:
              friend void Input_stu(vector& stu);
              friend void Delete_stu(vector& stu);
              friend void Modify_stu(vector& stu);
              friend void Lookup_stu(vector& stu);
              friend void Add_stu(vector& stu);
              friend void Show_stu(vector& stu);
              friend int Read_stu(vector& stu);
              friend void Write_stu(vector& stu, int n);
              friend void Select(vector& cour, vector& stu);
              friend void Deselect(vector& cour, vector& stu);
          public:
              char _id[20];
              char _class[20];
              char _name[20];
              Course _cour_compulsory[2];
              Course _cour_elective[1];
              int _num_compulsory = 0;
              int _num_elective = 0;
          };
          vector cour;
          vector stu;
          

          在这个模块中,我设计了两个类来分别存储学生和课程的信息。课程的相关信息包括,课程编号、课程名、课程类型(选修/必修)、学时、学分、以及选课人数。其中规定,每门课选课人数最多不超过60人。还设计了一个构造函数,将课程的编号和课程名都定义为None。

          学生类中,相关信息包括,学号、班级、姓名、所选择的必修课信息、所选的选修课信息、所选必修课数量、所选选修课数量。其中规定,每名学生所选必修课不超过两门,选修课不超过一门。

          在接下来的增删查改操作中,我使用了全局变量cour,和stu这两个动态数组来分别存储课程和学生。其中全局变量flag是一个确定身份状态的变量,默认是0,学生用户。1是超级用户。


          2.2.2文件信息读取和录入模块设计


          void Write_course(vector& cour, int n)
          {
              fstream myfile;
              myfile.open("course.txt", ios::out | ios::binary);
              if (!myfile)
              {
                  cout 
                  myfile 
              cour.clear();                           // clear
              fstream myfile;
              myfile.open("course.txt", ios::in | ios::binary);
              if (!myfile)
              {
                  cout 
                  myfile  temp.id  temp.name  temp.nature
                       temp.hour  temp.credir  temp.count;
                  cour.push_back(temp);           // push_back
              }
              myfile.close();
              return n;
          }
          // 学生数据的文件操作
          void Write_stu(vector
              fstream myfile;
              myfile.open("student.txt", ios::out | ios::binary);
              if (!myfile)
              {
                  cout 
                  myfile 
              stu.clear();                            // clear
              fstream myfile;
              myfile.open("student.txt", ios::in | ios::binary);
              if (!myfile)
              {
                  cout 
                  myfile  temp._id  temp._class
                       temp._name
                       temp._cour_compulsory[0].id
                       temp._cour_compulsory[0].name
                       temp._cour_compulsory[1].id
                       temp._cour_compulsory[1].name
                       temp._cour_elective[0].id
                       temp._cour_elective[0].name
                       temp._num_compulsory  temp._num_elective;
                  stu.push_back(temp);            // push_back
              }
              myfile.close();
              return n;
          }
          
              system("cls");
              cour.clear();
              int i = 0;
              char sign = '0';
              Course temp;
              cout 
              loop:
                  cout 
                      c++;
                      if (!strcmp(temp.id, cour[i - c].id))
                      {
                          cout 
              system("cls");
              int n = Read_course(cour);
              int i = 0;
              char id[20];
              cout 
                  cout 
                  if (cour[i].count)
                  {
                      cout 
                  cour.erase(cour.end() - 1);
                  Write_course(cour, n - 1);
                  cout 
              system("cls");
              int n = Read_course(cour);                      // count of course
              char id[20];
              int i = 0;
              cout 
                  cout 
                  if (cour[i].count)
                  {
                      cout 
                  Write_course(cour, n);
                  cout 
              system("cls");
              int n = Read_course(cour);
              int i = 0;
              char id[20];
              cout 
                  cout 
                  cout 
              system("cls");
              int n = Read_course(cour);
              cout 
                  cout 
              system("cls");
              int n = Read_course(cour);
              char sign = '0';
              Course temp;
              cout 
              loop:
                  cout 
                      c++;
                      if (!strcmp(temp.id, cour[n - c].id))
                      {
                          cout 
              system("cls");
              stu.clear();
              int i = 0;
              char sign = '';
              Student temp;
              cout 
              loop:
                  cout 
                      c++;
                      if (!strcmp(temp._id, stu[i - c]._id))
                      {
                          cout 
              system("cls");
              int n = Read_stu(stu);
              int m = Read_course(cour);  // number of course
              int i = 0;
              char id[20];
              cout 
                  cout 
                  while (stu[i]._num_compulsory  0)
                  {
                      stu[i]._num_compulsory--;
                      int c = 0;
                      while (c 

    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]