爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      学生信息管理系统(C++实现)

      首页 知识中心 软件开发 文章详情页

      学生信息管理系统(C++实现)

      2023-02-27 09:25:35 阅读次数:157

      C++


      ​

       


      上个月程序设计作业做了一个学生信息管理系统,效果如下图

      学生信息管理系统(C++实现)

       

      附上源代码。

      //由于不熟悉文件读写,有些地方的代码有点奇怪。但是功能是可以实现的。

      //虽然是用C++,但主要还是用了面向过程

      /*
      ·File name: file.h
      ·Description: 所有和文件读写相关的操作
      */

      #pragma once
      #include<iostream>
      #include<fstream>
      #include<string>
      #include"student.h"

      /*
      函数:read_record()
      功能:从record.txt读入记录,得到现有的记录条数
      参数:学生信息记录条数&m, 成绩条数&n,
      返回值:1
      */
      int read_record(int &m, int &n)
      {
      std::ifstream fin("record.txt");
      fin >> m;
      fin >> n;
      return 1;
      }

      /*
      函数:write_record()
      功能:写入记录到record.txt,更新记录条数
      参数:学生信息记录条数m, 成绩条数n,
      返回值: 0
      */
      int write_record(int m, int n)
      {
      std::ofstream fout("record.txt");
      fout << m;
      fout << " ";
      fout << n;
      return 1;
      }
      /*
      函数:save_score()
      功能:保存文件到score.dat
      参数: 学生成绩指针StudentScore*, 学生成绩条数n
      */
      void save_score(StudentScore* stu_score,int n)
      {
      using namespace std;
      ofstream fout("score.dat", ios::binary);
      if (!fout)
      {
      cout << "创建文件失败\n";
      return;
      }
      int i = 0;
      for (int i = 0; i < n; i++)
      {
      fout << stu_score[i].ID << " " << stu_score[i].lesson_number << " "
      << stu_score[i].lesson_name << " " << stu_score[i].credit<< " "
      << stu_score[i].daily_score << " " << stu_score[i].exp_score<< " "
      << stu_score[i].exam_score << " " << stu_score[i].total_score<< " "
      << stu_score[i].actual_score << "\n";
      }
      fout.close();
      }
      /*
      函数:read_to_stu_score()
      功能:从文件score.dat读入分数到数组
      参数:学生成绩数组StudentScore*, 学生成绩条数&n
      */
      int read_to_stu_score(StudentScore* stu_score, int &n)
      {
      using namespace std;
      int i = 0;
      ifstream fin("score.dat", ios::binary);
      if (!fin)
      {
      cout << "读取成绩文件score.dat失败" << endl;
      return 0;
      }
      for (int i = 0; i < n; i++)
      {
      fin >> stu_score[i].ID >> stu_score[i].lesson_number
      >> stu_score[i].lesson_name >> stu_score[i].credit
      >> stu_score[i].daily_score >> stu_score[i].exp_score
      >> stu_score[i].exam_score >> stu_score[i].total_score
      >> stu_score[i].actual_score;
      }
      fin.close();
      return i;
      }

      /*
      函数:read_to_stu()
      功能:从文件student.txt读入学生信息到数组
      参数:学生数组Student*, 学生信息条数m
      */
      int read_to_stu(Student* stu, int &m)
      {
      using namespace std;
      int i = 0;
      ifstream fin("student.txt");
      if (!fin)
      {
      cout << "读取学生基本文件student.txt失败" << endl;
      return 0;
      }
      string temp;//临时string,读入第一行的5个字符串
      for (int i = 0; i < 5; i++)
      {
      fin >> temp;
      }
      for (int i = 0; i < m; i++)
      {
      fin >> stu[i].ID >> stu[i].name >> stu[i].sex >> stu[i].dor_number
      >> stu[i].phone;
      }
      fin.close();
      return 1;
      }
      /*
      函数:save_stu
      功能:写入学生信息到student.txt
      参数:学生数组Student*,学生信息条数m
      */
      void save_stu(Student* stu, int m)
      {
      using namespace std;
      ofstream fout("student.txt");
      if (!fout)
      {
      cout << "创建文件失败\n";
      return;
      }
      fout << "学号 姓名 性别 宿舍号码 电话号码\n";
      for (int i = 0; i < m; i++)
      {
      fout << stu[i].ID << " " << stu[i].name << " " << stu[i].sex << " "
      << stu[i].dor_number << " " << stu[i].phone<<"\n";
      }

      fout.close();
      }


      /*
      ·File name: func.h
      ·Description: 实现学生管理系统的相关函数的声明
      */
      #pragma once
      #include<string>
      #include"student.h"

      int read_data_and_calcu(StudentScore* stu_score, int & n);
      int find(Student * stu, StudentScore* stu_score,int m, int n);
      void find_baseinfo(Student* stu, int n);
      void find_baseinfo_by_id_name(Student* stu, int m);
      void find_baseinfo_by_dor(Student* stu, int m);
      void find_score(Student* stu, StudentScore * stu_score,int m, int n);
      int sort_score(StudentScore * stu_score, int n);
      int delete_by_ID(Student * stu, StudentScore * stu_score, int &m, int &n);


      /*
      ·File name: menu.h
      ·Description: 菜单相关函数的声明
      */
      #pragma once
      #include"student.h"
      void show_menu();
      bool choose_func(char choice, bool & active, StudentScore * stu_score, Student * stu,
      int & m, int& n);

      /*
      ·File name: student.h
      ·Description: 学生类和学生成绩类
      */
      #pragma once
      #include<iostream>
      #include<iomanip>
      #include<string>
      using std::string;


      // StudentScore 存储学生成绩
      class StudentScore
      {
      public:
      int ID; //学号
      string lesson_number; //课程编号
      string lesson_name; //课程名称
      int credit; //学分
      int daily_score; //平时成绩
      int exp_score; //实验成绩
      int exam_score; //卷面成绩
      double total_score; //综合成绩, 计算得到
      double actual_score; // 实际得分, 计算得到
      public:
      StudentScore() ;
      StudentScore(int ID, string lesson_number,string lesson_name,int credit,
      int daily_score,int exp_score,int exam_score);
      ~StudentScore() ;
      friend std::ostream& operator<<(std::ostream& os, const StudentScore& score);
      };

      //Student类,存储学生信息
      class Student
      {
      public:
      int ID; //学号
      string name; //姓名
      string sex; //性别
      int dor_number; //宿舍号码
      int phone; //电话
      public:
      Student();
      ~Student();
      friend std::ostream & operator<<(std::ostream & os, const Student& stu);
      };



      /*
      ·File name: func.cpp
      ·Description: 实现菜单的4项功能:1.读入数据; 2.查找; 3.删除; 4.成绩排序
      */


      #include<iostream>
      #include<iomanip>
      #include<string>
      #include<fstream>
      #include"student.h"

      using std::string;
      using std::cin;
      using std::cout;

      //下面这4个函数被find调用,故先声明。
      void find_baseinfo(Student* stu, int m);
      void find_baseinfo_by_id_name(Student* stu, int m);
      void find_baseinfo_by_dor(Student* stu, int m);
      void find_score(Student* stu, StudentScore * stu_score,int m,int n);


      /*
      函数:read_data_and_calcu()
      功能:从键盘读入成绩相关的7项数据,并根据公式计算出综合成绩和实得学分。
      参数:StudentScore*(分数数组地址), &n(已有的成绩条数)
      返回值:写入的条数
      */
      int read_data_and_calcu(StudentScore* stu_score, int & n)
      {
      int Max_read = 1; //每次最多读入的条数
      bool flag_input = true;// 用来判断是否正常输入
      int id = 0; //学号
      string lesson_number;//课程编号
      string lesson_name; //课程名称
      int credit; //学分
      int daily_score; //平时成绩
      int exp_score; //实验成绩
      int exam_score; //卷面成绩
      int i = 0;
      for( i = n; i< n+Max_read && flag_input; i++)
      {
      cout << "开始输入学生数据:\n";
      cout << "学号,"<< " 课程编号, " << " 课程名称: \n";
      cin >> id;
      cin >> lesson_number;
      cin >> lesson_name;
      cout << "学分, " << " 平时成绩, " << " 实验成绩," << " 卷面成绩:\n";
      cin >> credit>> daily_score >>exp_score>> exam_score;
      stu_score[i] = StudentScore(id, lesson_number, lesson_name, credit, daily_score,
      exp_score, exam_score);
      cout << "录入该学生数据成功";
      }
      cout << "\n";
      n += i;
      return i;
      }


      /*
      函数:find()
      功能:查询(总),通过用户选择查询类型调用find_baseinfo()或find_score(),显示对应的信息。
      参数:Student*(学生数组地址), StudentScore*(分数数组地址),int m(学生信息条数), int n(分数条数)
      返回值:0
      */
      int find(Student * stu,StudentScore* stu_score,int m, int n)
      {
      cout << "输入查询类型:1.学生基本情况查询; 2.成绩查询:";
      char find_kind;
      cin >> find_kind;
      switch (find_kind)
      {
      case '1':
      //学生基本情况查询
      find_baseinfo( stu, m);
      break;
      case '2':
      //成绩查询
      find_score(stu, stu_score,m, n);
      break;
      default:
      cout<<"无效选择\n";
      break;
      }
      cout << "\n";
      return 0;
      };

      /*
      函数:find_baseinfo()
      功能:查询_学生基本信息,被find()调用,显示对应的学生信息
      参数:Student*, m
      */
      void find_baseinfo(Student* stu, int m)
      {
      cout << "输入查询方式:1.按学号或姓名查询 2.按宿舍查询: ";
      int choice;
      cin >> choice;
      switch (choice)
      {
      case 1:
      find_baseinfo_by_id_name(stu, m);
      break;
      case 2:
      find_baseinfo_by_dor(stu, m);
      break;
      }
      }


      /*
      函数:find_baseinfo_by_id_name()
      功能:查询_学生基本信息_通过_id或name,被find_baseinfo()调用
      参数:Student*, m
      */
      void find_baseinfo_by_id_name(Student* stu, int m)
      {
      cout << "选择:1.使用学号查询 2.使用姓名: ";
      int choice_2;
      cin >> choice_2;
      switch (choice_2)
      {
      case 1:
      {
      //按学号查询,打印结果
      cout << "输入学号: ";
      int id;
      cin >> id;
      bool flag_find_id = false;
      for (int i = 0; i < m; i++)
      {
      if (id == stu[i].ID)
      {
      flag_find_id = true;
      cout << "学号 姓名 性别 宿舍号码 电话号码\n";
      cout << stu[i];
      break;
      }
      if (i == m - 1 && !flag_find_id )
      cout << " 此ID记录不存在\n";
      }
      }
      break;
      case 2:
      {
      //使用姓名查询,打印结果
      cout << "输入姓名: ";
      string name;
      cin >> name;
      bool flag_find_name = false;
      for (int i = 0; i < m; i++)
      {
      if (name == stu[i].name)
      {
      flag_find_name = true;
      cout << "学号 姓名 性别 宿舍号码 电话号码\n";
      cout << stu[i];
      break;
      }
      if (i == m - 1 && !flag_find_name)
      cout << " 此姓名记录不存在\n";
      }
      break;
      }
      }
      }

      /*
      函数:find_baseinfo_by_dor()
      功能:查询_学生基本信息_通过_宿舍,被find_baseinfo()调用
      参数:Stuent*, m
      */
      void find_baseinfo_by_dor(Student* stu, int m)
      {
      //按宿舍查询,打印结果
      cout << "输入宿舍号: ";
      int dor_number;
      cin >> dor_number;
      cout << "学号 姓名 性别 宿舍号码 电话号码\n";
      bool flag_find_dor = false;
      for (int i = 0; i < m; i++)
      {
      if (dor_number == stu[i].dor_number)
      {
      flag_find_dor = true;
      cout << stu[i];
      cout << "\n";
      }
      if (i == m - 1 && !flag_find_dor )
      cout << " 宿舍记录不存在\n";
      }
      }

      /*
      函数:find_score()
      功能:查询_分数,被find()调用,显示对应的分数信息
      参数:Student*, StudentScore*,m(学生信息条数),n(分数信息条数)
      */
      void find_score(Student* stu, StudentScore* stu_score, int m, int n)
      {
      cout << "输入该学生的学号:";
      int id;
      cin >> id;
      bool flag_find_id = false;
      for (int i = 0; i < m; i++)
      {
      if (id == stu[i].ID)
      {
      flag_find_id = true;
      cout << "\t\t\t\t学号: "<<std::setiosflags(std::ios::left)
      <<std::setw(10)<< stu[i].ID << "姓名: "
      <<std::setw(10)<< stu[i].name;
      break;
      }
      if (i == m - 1 && !flag_find_id)
      {
      cout << "\n\t\t此ID学生信息记录不存在\n";
      }
      }
      bool flag_find_score = false;
      int lesson_n = 0;
      double all_credit = 0;
      for (int i = 0; i < n; i++)
      {
      if (id == stu_score[i].ID)
      {
      flag_find_score = true;
      cout << "\n" << stu_score[i];
      lesson_n++;
      all_credit += stu_score[i].actual_score;
      }
      if (i == n - 1 && !flag_find_score)
      {
      cout << "\n\t\t此ID成绩记录不存在\n";
      }
      }
      cout << "\n\t\t共修: " << lesson_n << "科,实得总学分为: " << all_credit;
      }

      /*
      函数:delete_by_ID()
      功能:删除和ID相关的信息
      返回值:0
      */
      int delete_by_ID(Student * stu, StudentScore * stu_score, int &m, int &n)
      {
      cout << "删除该学号的所有相关信息:\n输入学号:";
      int ID;
      cin >> ID;
      //删除ID相关的学生基本信息
      for (int i = 0; i < m; i++)
      {
      if (stu[i].ID == ID)
      {
      int k = i;
      if (k == m - 1)
      {
      stu[i] = Student(); //使其为空
      m--;
      }
      else
      {
      for (int j = k+1; j < m; j++)
      {
      stu[j-1] = stu[j];
      }
      m--;
      }
      }
      }
      //删除ID相关的成绩信息
      for (int i = n-1; i >= 0; i--)
      {
      if (stu_score[i].ID == ID)
      {
      int k = i;
      if (k == n - 1)
      {
      stu_score[i] = StudentScore(); //使其为空
      n--;
      }
      else
      {
      for (int j = k + 1; j < n; j++)
      {
      stu_score[j - 1] = stu_score[j];
      }
      n--;
      }
      }
      }
      cout << "该学生所有相关信息删除成功\n";
      return 0;
      };

      /*
      函数:sort_score()
      功能:按分数排序,(降序)。
      参数:StudentScore*, n(成绩条数)
      返回值:n(成绩条数)
      */
      int sort_score(StudentScore * stu_score, int n)
      {
      int choice;
      cout << "选择:1.按综合成绩排序 2.按实得学分排序";
      cin >> choice;
      switch (choice)
      {
      case 1:
      {
      StudentScore temp;
      for (int i = 0; i < n - 1; i++)
      {
      for (int j = 0; j < n - i - 1; j++)
      {
      if (stu_score[j].total_score < stu_score[j + 1].total_score)
      {
      temp = stu_score[j];
      stu_score[j] = stu_score[j+1];
      stu_score[j + 1] = temp;
      }
      }
      }
      break;
      }
      case 2:
      {
      StudentScore temp;
      for (int i = 0; i < n - 1; i++)
      {
      for (int j = 0; j < n - i - 1; j++)
      {
      if (stu_score[j].actual_score < stu_score[j + 1].actual_score)
      {
      temp = stu_score[j];
      stu_score[j] = stu_score[j + 1];
      stu_score[j + 1] = temp;
      }
      }
      }
      break;
      }
      }

      for (int i = 0; i < n; i++)
      {
      cout<<"学号: "<<std::setiosflags(std::ios::left)<<std::setw(4)
      <<stu_score[i].ID<<stu_score[i] << "\n";
      }
      return n;
      };

      /*
      ·File name: menu.cpp
      ·Description: 所有和菜单相关的操作。
      */
      #include<iostream>
      #include"student.h"
      #include"func.h"

      using std::cout;
      using std::cin;

      /*
      函数:show_menu()
      功能:显示主菜单
      */
      void show_menu()
      {
      cout<<"############################\n";
      cout<<" 学生信息管理系统\n"
      <<" 选择功能\n"
      <<"1.数据的录入和计算\n"
      <<"2.查询功能\n"
      <<"3.删除功能\n"
      <<"4.排序功能\n"
      <<"q.退出程序。\n";

      }

      /*
      函数:choose_func
      功能:读入选择,执行功能
      返回:程序状态(运行ture,结束false)
      */

      bool choose_func(char choice, bool & active,StudentScore * stu_score,Student * stu,
      int & m, int& n )
      {
      switch(choice)
      {
      case '1' :
      n = read_data_and_calcu(stu_score,n);
      break;
      case '2':
      find( stu, stu_score,m, n);
      break;
      case '3':
      delete_by_ID(stu, stu_score, m, n);
      break;
      case '4':
      sort_score(stu_score, n);
      break;
      case 'q':
      cout<<"quit~\n";
      active = false;
      break;
      default:
      cout << "无效输入\n";
      }
      return active;
      }

      /*
      ·File name: student.cpp
      ·Description: 学生类和成绩类的相关函数。
      */
      #include"student.h"

      /*
      计算综合成绩,返回综合成绩。
      传入参数: exp_score, exam_score, daily_score
      返回值: total_score
      */
      double calcu_total_score(int exp_score, int exam_score, int daily_score);
      /*
      计算实得学分,返回实得学分
      传入参数: total_score, credit
      返回值: actual_score
      */
      double calcu_actual_score(double total_score, int credit);

      //分数的默认构造函数,初始化ID = 0,分数为负数,表示无效成绩;
      StudentScore::StudentScore() : ID(0),lesson_number("None"),lesson_name("None"),credit(-1),
      daily_score(-1),exp_score(-1),exam_score(-1)
      {

      }
      //分数的构造函数2,传入参数进行初始化,自动调用calcu_total_score,calcu_actual_score计算 综合成绩和实得学分
      StudentScore::StudentScore(int m_ID, string m_lesson_number, string m_lesson_name, int m_credit,
      int m_daily_score, int m_exp_score, int m_exam_score) : ID(m_ID),lesson_number(m_lesson_number),
      lesson_name(m_lesson_name),credit(m_credit),daily_score(m_daily_score),
      exp_score(m_exp_score),exam_score(m_exam_score)
      {
      total_score = calcu_total_score( m_exp_score, m_exam_score, m_daily_score);
      actual_score = calcu_actual_score( total_score, m_credit);
      }
      //分数的析构函数,暂无工作要做
      StudentScore::~StudentScore()
      {

      }
      //分数的友元函数<<,用于显示
      std::ostream& operator<<(std::ostream& os, const StudentScore& stu_score)
      {
      os << std::setiosflags(std::ios::left)
      <<"课程编号: " <<std::setw(8)<< stu_score.lesson_number
      << "课程名称: "<<std::setw(12) << stu_score.lesson_name
      << "综合成绩: "<<std::setw(8) << stu_score.total_score
      << "实得学分: " << stu_score.actual_score;

      return os;
      }


      //学生的默认构造函数,初始化0
      Student::Student(): ID(0), name("None"), sex("None"), dor_number(0), phone(0)
      {

      }

      //学生的析构函数,暂无工作要做
      Student::~Student()
      {

      }

      //学生的友元函数<< 用于打印输出.
      std::ostream & operator<<(std::ostream & os, const Student& stu)
      {
      os <<std::setiosflags(std::ios::left)
      <<std::setw(5)<< stu.ID
      <<std::setw(8)<< stu.name
      << stu.sex << " " << stu.dor_number << " "
      << stu.phone;
      return os;
      }




      // 计算实得学分
      double calcu_actual_score(double total_score, int credit)
      {
      double actual_score;
      int flag_total =total_score/10;
      switch (flag_total)
      {
      case 10: case 9: actual_score = credit;
      break;
      case 8: actual_score = credit * 0.8;
      break;
      case 7: actual_score = credit * 0.75;
      break;
      case 6: actual_score = credit * 0.6;
      break;
      default: actual_score = 0;
      break;
      }
      return actual_score ;
      }
      //计算综合成绩
      double calcu_total_score(int exp_score, int exam_score, int daily_score)
      {
      double total_score;
      if(exp_score == -1)
      total_score = daily_score * 0.3 + exam_score * 0.7;
      else
      total_score = daily_score * 0.15 + exp_score * 0.15 + exam_score * 0.7;
      return total_score;
      }

      /*
      # File name: main.cpp
      # Author: 一只大鸽子
      # Date: 2018/9/10
      # Description: 学生信息管理系统的主函数
      */

      #include<iostream>
      #include"menu.h"
      #include"student.h"
      #include"file.h"

      //主函数main,程序入口
      int main()
      {
      char choice = 0; //choice,让用户输入选择
      bool active = true; //active,用来判断程序运行状态,true代表运行中,false代表结束
      int m = 0; //学生基本信息 数量
      int n = 0; //成绩信息 数量
      read_record(m, n);//得到学生基本信息、成绩信息条数
      Student * stu = new Student[m+10]; //学生数组stu,存储学生信息
      StudentScore * stu_score = new StudentScore[n+400];//分数数组stu_score,存储成绩信息

      read_to_stu(stu, m); //从student.txt读入数据到数组中
      read_to_stu_score(stu_score, n); //从score.dat读入数据到数组中

      //显示主菜单
      show_menu();
      //进入循环,用户选择菜单上的功能。直到active为false,程序即将结束时,退出循环
      while(active)
      {
      std::cin>>choice;
      choose_func(choice,active,stu_score,stu,m,n);
      if(active)
      show_menu();
      }
      /*
      程序即将结束,将学生信息写入student.txt;将分数信息写入score.dat;
      写入信息数量到record.txt中;
      */
      save_stu(stu, m);
      save_score(stu_score, n);
      write_record(m, n);
      //归还使用的内存
      delete[] stu;
      delete[] stu_score;
      system("pause"); //暂停
      return 0;
      }

      小结:

      这是我的第一个C++实践程序,写了大概有两三天。

      中间遇到一些问题,比如文件读写,格式输出。。。。。。第一次运行时还有一些奇奇怪怪的问题。比如stackoverflow...

      最后还是通过看书和百度解决了。

      总结一点经验:

      1.变量和函数的命名很重要,一定要清晰易懂,一看到这个名字就知道它是干什么的,不要随便起 a,b,c或者fun1,fun2之类的名字。

      2.注释很重要

      3.代码格式很重要(对齐缩进)

      4.不要自己钻到一个问题里就不出来了,很浪费时间。 比如排序功能可能你一下子想不出来,就可以上网搜搜(c++排序),

      借鉴一下。如果找不到,也不要一直纠结,先空着,过一会可能就想到了。

      5.代码重构。当你代码写着写着感觉某个函数太长了,或者感觉一些功能可以提取出来,就可以把某个功能做成函数。

      6..注意身体,注意休息,喝水。最好能定时休息。

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.51cto.com/pigeon/5451276,作者:一只大鸽子,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:第一人称射击游戏 C++控制台版(未完成)

      下一篇:Python|快速掌握Python爬虫XPath语法

      相关文章

      2025-05-07 09:08:42

      C++Lambda表达式

      C++Lambda表达式

      2025-05-07 09:08:42
      C++ , 形参 , 捕获 , 类型 , 闭包
      2025-04-23 08:18:32

      C++小技巧---CString 转 double

      常规的转换函数,无法去除多余的0。

      2025-04-23 08:18:32
      C++ , double
      2025-04-14 09:28:32

      【C++】BitSet和Bloom_Filter

      在计算机图形学中,位图(Bitmap)也称为光栅图,是由像素点组成的图像表示方式。在 C++ 编程中,位图可以通过特定的函数和数据结构来进行处理和操作。

      2025-04-14 09:28:32
      C++ , 位图 , 操作 , 比特
      2025-04-14 09:28:32

      从零开始:Linux 环境下的 C/C++ 编译教程

      GCC(GNU Compiler Collection)是一个功能强大的编译器集合,支持多种语言,包括 C 和 C++。其中 gcc 用于 C 语言编译,g++ 专用于 C++ 编译。

      2025-04-14 09:28:32
      C++ , Linux , 安装 , 编译
      2025-04-14 09:27:25

      【C++11】lambda表达式

      随着 C++11 的发布,C++ 标准引入了许多新特性,使语言更加现代化,开发者编写的代码也变得更加简洁和易于维护。Lambda 表达式是其中一个重要的特性,它提供了一种方便的方式来定义匿名函数,这在函数式编程范式中非常常见。Lambda 表达式允许我们在函数内部定义小型的无名函数,减少了不必要的函数定义和代码冗余,是现代 C++ 开发的重要工具。

      2025-04-14 09:27:25
      C++ , lambda , Lambda , 变量 , 捕获
      2025-03-25 08:00:34

      【C++前后缀分解 最大子段和】918. 环形子数组的最大和|1777

      【C++前后缀分解 最大子段和】918. 环形子数组的最大和|1777

      2025-03-25 08:00:34
      C++ , lt , nums , preSum , 数组
      2025-03-25 08:00:34

      【C++前后缀分解】1186. 删除一次得到子数组最大和|1799

      【C++前后缀分解】1186. 删除一次得到子数组最大和|1799

      2025-03-25 08:00:34
      arr , C++ , 删除 , 后缀 , 数组
      2025-03-25 08:00:34

      【C++差分数组】2327. 知道秘密的人数|1893

      【C++差分数组】2327. 知道秘密的人数|1893

      2025-03-25 08:00:34
      C++ , diff , lt , 分享
      2025-03-25 07:59:39

      【C++图论】1584. 连接所有点的最小费用|1857

      【C++图论】1584. 连接所有点的最小费用|1857

      2025-03-25 07:59:39
      C++ , points , 示例
      2025-03-25 07:59:39

      【C++ DFS 换根法 图论】2385. 感染二叉树需要的总时间|1711

      【C++ DFS 换根法 图论】2385. 感染二叉树需要的总时间|1711

      2025-03-25 07:59:39
      C++ , start , 二叉树 , 节点
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5248018

      查看更多

      最新文章

      C++Lambda表达式

      2025-05-07 09:08:42

      C++小技巧---CString 转 double

      2025-04-23 08:18:32

      【C++】BitSet和Bloom_Filter

      2025-04-14 09:28:32

      从零开始:Linux 环境下的 C/C++ 编译教程

      2025-04-14 09:28:32

      【C++11】lambda表达式

      2025-04-14 09:27:25

      【C++前后缀分解】1186. 删除一次得到子数组最大和|1799

      2025-03-25 08:00:34

      查看更多

      热门文章

      C++最普通的定时器功能实现

      2023-03-08 10:27:24

      C/C++泛型编程实现数据结构之栈

      2023-05-15 10:00:33

      C++生成指定范围内随机数封装

      2023-02-07 10:34:04

      C++中substr函数的用法

      2023-04-18 14:14:13

      C++拷贝构造函数(深拷贝,浅拷贝)详解

      2023-03-30 09:59:46

      C++入门篇之C++ 指针

      2023-03-14 11:26:53

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      C++ cannot bind non-const lvalue reference of type

      【C++动态规划 划分型】2707. 字符串中的额外字符|1735

      C++中substr函数的用法

      【C++ 状态机动态规划 前缀和】2320. 统计放置房子的方式数|1607

      C++ 杂七杂八的东西

      C++ 虚析构函数作用

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号