ℒฺℴฺνℯ̶ฺ归̶零̶⋆68 2022-01-01 13:22 采纳率: 100%
浏览 113
已结题

学生选课管理系统这个怎么搞啊

假定有n门课程,每门课程有课程编号,课程名称,课程性质(必须/选修),学时,授课学时,实验或上机学时,学分等信息,学生按要求(总学分不得少于15,其中必修课不得低于10分)自由选课。试设计一个简单选修课程系统。

功能要求:

(1) 输入功能:可以完成若干条课程信息记录的输入。

(2) 显示功能:完成全部记录的显示。

(3) 插入功能:插入添加一条或多条记录。

(4) 查找功能:按课程编号查找并显示。

(5) 删除功能:按课程编号号进行删除。

(6) 修改功能:按课程编号进行修改。

(7) 排序功能:实现学分进行排序。

  • 写回答

2条回答 默认 最新

  • 五一编程 2022-01-01 13:57
    关注
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    #define Mc_CourseNameLength          61                  /*课程名称不超过30个字*/
    #define Mc_FileName                  ("CourseData.csd")   /*存储课程信息的文件名称*/
    #define Mc_OpenFileError             0                   /*打开文件失败*/
    #define Mc_OpenFileSucceed           1                   /*打开文件成功*/
    class ElectiveSystem /*选课系统*/
    {
     protected:
      struct Course /*课程*/
      {
        long    ID;                         /*课程编号,0 到 65535*/
        char    name[Mc_CourseNameLength];  /*课程名称*/
        float   credit;                     /*学分*/
        short   TimeTotal;                  /*总学时*/
        short   TimeLesson;                 /*授课学时*/
        short   TimeExperiment;             /*实验学时*/
        short   nature;                     /*课程性质,值域为 1 到 3,每种数值代表一种性质。因为不知道什么是课程的性质,所以没给出具体的含义*/
        bool    term;                       /*为真表示上学期,为假表示下学期*/
        short   number;                     /*节点编号,从 1 开始*/
        struct  Course *next;               /*下一个节点*/
      } *PtHead;                            /*头结点*/
      int       AddNewCourse();                       /*增加新课程信息*/
      int       SaveCourseData(struct Course *cs);    /*保存单个课程信息*/
      int       LoadCourseData();                     /*加载课程信息*/
      void      ShowCourseData();          /*显示课程信息*/
      int       MainInterface();           /*系统主界面*/
      void      InputCourseData();         /*录入课程信息界面*/
      void      SelectCourse();            /*学生选课界面*/
      void      SearchCourse();            /*课程查询界面*/
      void      SearchCredit();            /*按学分查询*/
      void      SearchNature();            /*按性质查询*/
      void      FreePtHeadMemery();        /*释放PtHead指向的空间*/
     public:
      ElectiveSystem();                    /*构造函数*/
      ~ElectiveSystem();                   /*析构函数*/
      void      BeginRun();                /*开始运行此系统*/
    };
    int ElectiveSystem::AddNewCourse()
    {
       struct Course cs;
       cout<<"请输入课程信息,每输入完一个项目按一次Enter键"<<endl<<endl<<endl;
       cout<<"课程编号 (0 到 65535,且必须是唯一的,不能与其他课程编号重复): ";
       cin>>cs.ID;
       cout<<endl;
       cout<<"课程名称 (不超过30个文字): ";
       cin>>cs.name;
       cout<<endl;
       cout<<"课程学分 (0.5 到 5): ";
       cin>>cs.credit;
       cout<<endl;
       cout<<"总学时 (0 到 300): ";
       cin>>cs.TimeTotal;
       cout<<endl;
       cout<<"授课学时: ";
       cin>>cs.TimeLesson;
       cout<<endl;
       cout<<"实验学时: ";
       cin>>cs.TimeExperiment;
       cout<<endl;
       cout<<"课程性质 ( 1 到 3): ";
       cin>>cs.nature;
       cout<<endl;
       cout<<"开课学期 (输入 1 表示上学期,0 表示下学期): ";
       cin>>cs.term;
       cout<<endl;
       return SaveCourseData(&cs);
    }
    int ElectiveSystem::SaveCourseData(struct Course *cs)
    {
       fstream file;
       file.open(Mc_FileName, ios::binary | ios::out | ios::app);
       if (!file)
         return Mc_OpenFileError;
       file.write((char*)&cs->ID, sizeof(long));
       file.write(cs->name, Mc_CourseNameLength * sizeof(char));
       file.write((char*)&cs->credit, sizeof(float));
       file.write((char*)&cs->TimeTotal, sizeof(short));
       file.write((char*)&cs->TimeLesson, sizeof(short));
       file.write((char*)&cs->TimeExperiment, sizeof(short));
       file.write((char*)&cs->nature, sizeof(short));
       file.write((char*)&cs->term, sizeof(bool));
       file.close();
       return Mc_OpenFileSucceed;
    }
    int ElectiveSystem::LoadCourseData()
    {
       ifstream file;
       FreePtHeadMemery();
       PtHead = NULL;
       file.open(Mc_FileName, ios::binary);
       if (!file)
         return Mc_OpenFileError;
       struct Course *cur, *New, test;
       short  num = 1;
       while (!file.eof())
       {
         if (PtHead == NULL)
         {
           test.nature = 0;
           file.read(reinterpret_cast<char*> (&test.ID), sizeof(long));
           file.read(reinterpret_cast<char*> (test.name), Mc_CourseNameLength * sizeof(char));
           file.read(reinterpret_cast<char*> (&test.credit), sizeof(float));
           file.read(reinterpret_cast<char*> (&test.TimeTotal), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.TimeLesson), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.TimeExperiment), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.nature), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.term), sizeof(bool));
           if (test.nature != 0)
           {
             cur = PtHead = new struct Course;
             *cur = test;
             cur->number = num ++;
           }
           else
             break;
         }
         else
         {
           test.nature = 0;
           file.read(reinterpret_cast<char*> (&test.ID), sizeof(long));
           file.read(reinterpret_cast<char*> (test.name), Mc_CourseNameLength * sizeof(char));
           file.read(reinterpret_cast<char*> (&test.credit), sizeof(float));
           file.read(reinterpret_cast<char*> (&test.TimeTotal), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.TimeLesson), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.TimeExperiment), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.nature), sizeof(short));
           file.read(reinterpret_cast<char*> (&test.term), sizeof(bool));
           if (test.nature !=0)
           {
             New = new struct Course;
             *New = test;
             cur->next = New;
             cur = New;
             cur->number = num ++;
           }
           else   /*nature的值域为1 到 3。之前有test.nature  = 0,如果能正确读到数据,那么不应该是0;如果是0,表明到了文件尾部*/
             break; /*因为eof()这个函数到了文件尾部会多停留一次,所以为了解决这个问题,采用此策略*/
         }
       }
       cur->next = PtHead;
       file.close();
       return Mc_OpenFileSucceed;
    }
    void ElectiveSystem::ShowCourseData()
    {
       bool flag = true;
       if (PtHead == NULL)
       {
         LoadCourseData();
         if (PtHead == NULL)
         {
           flag = false;
           cout<<endl<<"管理员尚未录入任何课程信息! 请管理员录入课程信息后,再来浏览!"<<endl;
           system("pause");
         }
       }
       if (flag)
       {
         struct Course *cs = PtHead->next;
         cout<<"编号     学分     总学时   授课学时 实验学时 性质     开课学期 名称"<<endl<<endl;
         cout.precision(2);
         cout.setf(ios::left);
         while (cs->number != 1)
         {
           cout.width(9);
           cout<<cs->ID;
           cout.width(9);
           cout<<cs->credit;
           cout.width(9);
           cout<<cs->TimeTotal;
           cout.width(9);
           cout<<cs->TimeLesson;
           cout.width(9);
           cout<<cs->TimeExperiment;
           cout.width(9);
           cout<<cs->nature;
           if (cs->term == 1)
             cout<<"上学期   ";
           else
             cout<<"下学期   ";
           cout<<cs->name<<endl<<endl;
           cs = cs->next;
         }
         cout.width(9);
         cout<<cs->ID;
         cout.width(9);
         cout<<cs->credit;
         cout.width(9);
         cout<<cs->TimeTotal;
         cout.width(9);
         cout<<cs->TimeLesson;
         cout.width(9);
         cout<<cs->TimeExperiment;
         cout.width(9);
         cout<<cs->nature;
         if (cs->term == 1)
           cout<<"上学期   ";
         else
           cout<<"下学期   ";
         cout<<cs->name<<endl<<endl;
         system("pause");
       }
    }
    ElectiveSystem::ElectiveSystem()
    {
       PtHead = NULL;
       LoadCourseData();
    }
    ElectiveSystem::~ElectiveSystem()
    {
       FreePtHeadMemery();
    }
    int ElectiveSystem::MainInterface()
    {
       short selection = 0;
       cout<<"学生选课系统: 请输入相应的序号,然后按Enter键"<<endl<<endl<<endl;
       cout<<"1.课程录入"<<endl<<endl;
       cout<<"2.浏览课程信息"<<endl<<endl;
       cout<<"3.学生选课"<<endl<<endl;
       cout<<"4.课程查询"<<endl<<endl;
       cout<<"5.退出"<<endl<<endl;
       cout<<"请在此输入你的选择: ";
       cin>>selection;
       return selection;
    }
    void ElectiveSystem::InputCourseData()
    {
       LoadCourseData();
       if (PtHead == NULL)
       {
         short CourseCount = 0;
         int   loop = 0;
         cout<<"你将要录入多少个课程的信息?请输入课程个数,然后按Enter键"<<endl<<endl<<endl;
         cout<<"请在此输入你要录入的课程的个数: ";
         cin>>CourseCount;
         system("cls");
         for ( ; loop < CourseCount; loop ++)
         {
           cout<<"正在录入第 "<<loop + 1<<" 个课程信息,共 "<<CourseCount<<" 个课程信息"<<endl<<endl;
           AddNewCourse();
           system("cls");
         }
         cout<<"录入完成 ! 按任意键返回主界面 ......"<<endl;
         system("pause");
       }
       else
       {
         cout<<"你已经进行过数据录入,要想重新录入数据请将文件 "<<Mc_FileName<<" 删除!"<<endl<<endl<<endl;
         cout<<"按任意键返回主界面 ......"<<endl<<endl;
         system("pause");
       }
    }
    void main()
    {
       ElectiveSystem es;
       es.BeginRun();
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月28日
  • 已采纳回答 5月20日
  • 创建了问题 1月1日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效