HNU程序设计 类和对象练习(小班)

学生类Student类的设计与实现

要求:

创建一个 Student 类,包含公有数据成员:姓名(字符串)、学号、性别、 3 门课程成绩 ( 结构
体形式,属性包含课程名和分数 ) ,以及私有属性身份证信息。
1 )给出针对私有属性的 setID() getID() 函数,可以设置和读取身份证信息。
2 )给出构造函数,支持从键盘接收学生对象的初始信息,其中身份证信息的设置需调用 se
tID()
3 )给出输出信息的方法,格式化输出学生信息,每个属性之间占 18 位宽度,居中对齐;其
中身份证信息的输出需调用 getID()
4 )创建动态对象数组,存储若干名学生数据,并按总分,从高到低排序。若总分相同,则
按学号从小到大进行排序。
5 )输出排序后的列表,第一行为标题行,字段包括 姓名 学号 性别 身份证 课程成绩 总
,每个字段占 18 位宽度( 3 门课程成绩总共占 18 位宽度),居中对齐。
6 )根据输入的院系代码(学号的第 5-8 位),筛选输出某院系的学生数据。
7 )统计女生和男生的人数。
8 )根据输入的课程名信息,按标题行、 及格学生 不及格学生 的先后顺序,以一行 "----
" 为分隔符,输出学生信息,标题行字段只需包含姓名、学号、该课程成绩。
9 )可根据姓名、学号、课程名、身份证号等,查询输出符合的学生。
10 )可添加、删除学生信息。
【特别说明】
无标准答案,所有实现的细则可以自定,满足简单的信息输入 / 出,及增、删、改、查、排
序、统计等基本功能。
建议学生数据多样化,包含不同性别,不同院系专业,不同课程,不同成绩等。
将根据功能的丰富度、代码的规范性和可读性进行评分。
本人未按照题目要求写,而是自定义,参考于csdn某大佬的代码,在此说明!,并且是在codeblock中分文件编写完成!,没有完全完成所有代码,因为没那么时间去优化和修改完善,基本功能可以实现!
#pragma once
#include<algorithm>
#include<string>
#include<vector>
#include"Subject.h"
using namespace std;
//学生类的定义
class Student{private:string id;public:string stuName;string stuNum;//学号string gender;//性别int graNum;//年级int classNum;//班级string major;//专业vector<Subject> subs; //存放各个科目int subSum;//科目门数double sumScore;//总分double aveScore;//平均分void setID(string id);string getID();Student();//无参的构造函数Student(string stuName,string stuNum,string gender,int graNum,int classNum,string major,vector<Subject> subs,int subSum,double sumScore,double aveScore);//有参构造函数void showStuHeader(); //头标题void showStuInfo(); //学生信息
};
#include"Student.h"
#include<iostream>
#include<iomanip>
Student::Student(){}
Student::Student(string stuName,string stuNum,string gender,int graNum,int classNum,string major,vector<Subject> subs,int subSum,double sumScore,double aveScore)
{this->stuName=stuName;this->stuNum=stuNum;this->gender=gender;this->graNum=graNum;this->classNum=classNum;this->major=major;this->subs=subs;this->subSum=subSum;this->sumScore=sumScore;this->aveScore=aveScore;
}
void Student::setID(string id)
{this->id=id; //私有属性赋值
}
string Student::getID()
{return this->id; //拿到身份证信息
}
void Student::showStuHeader()//头标题
{cout<<setw(12)<<left<<"姓名";cout<<setw(10)<<left<<"学号";cout<<setw(6)<<left<<"性别";cout<<setw(6)<<left<<"年级";cout<<setw(8)<<left<<"班级";cout<<setw(23)<<left<<"专业";cout<<setw(12)<<left<<"总分";cout<<setw(6)<<left<<"平均分"<<endl;
}
void Student::showStuInfo()//具体信息展示
{cout<<setw(12)<<left<<stuName;cout<<setw(10)<<left<<stuNum;cout<<setw(6)<<left<<gender;cout<<setw(6)<<left<<graNum;cout<<setw(8)<<left<<classNum;cout<<setw(23)<<left<<major;cout<<setw(12)<<left<<sumScore;cout<<setw(6)<<left<<aveScore<<endl;
}
//学科类
#pragma once
#include<algorithm>
#include<string>
using namespace std;
class Subject
{public:string subName;//学科名double score;//分数void showSubInfo();//学科分数展示void showSubHeader();//头标题展示
};
#include"Subject.h"
#include<algorithm>
#include<string>
#include<iostream>
#include<iomanip>
using namespace std;
void Subject::showSubHeader()
{cout<<left<<setw(45)<<"科目";  //left左对齐cout<<left<<setw(6)<<"分数"<<endl;}
void Subject::showSubInfo()//成绩信息展示
{cout<<left<<setw(45)<<subName;cout<<left<<setw(6)<<score<<endl;
}
//学生列表类,对学生可以进行各种操作
#pragma once
#include<vector>
#include"Student.h"
#include"Subject.h"
#include<fstream> //文件操作头文件
class StudentList
{private:vector<Student> stuList;//学生列表,学生信息放在这里public:StudentList();StudentList(vector<Student> stuList);void init();//初始化,拿到初始学生信息void menu();//菜单,对学生进行操作void readFile();//进行读取文件void writeFile();//写入文件void addList();//添加学生信息void delList();//删除学生信息void modList();//修改学生信息void selList();//查询学生信息void showList();//展示学生信息,包括基本信息和成绩信息void calList();//统计学生成绩,总分,平均分,信息情况void clearList();//清空学生信息void disStuInfo(); //显示学生基本信息void disSubInfo();//显示学生成绩信息int checkExist(Student stu);//检查是否存在该学生};
#include"StudentList.h"
#include<iostream>
#include<iomanip>
StudentList::StudentList(){}
StudentList::StudentList(vector<Student> stuList)
{this->stuList=stuList;
}void StudentList::menu()
{int cho=0;system("cls");//清屏cout<<"--------欢迎来到学生成绩管理系统--------"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           0.退出学生系统             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           1.添加学生信息             |"<<endl; //制表符对齐cout<<"|--------------------------------------|"<<endl;cout<<"|           2.删除学生信息             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           3.修改学生信息             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           4.查询学生信息             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           5.统计学生信息             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           6.清空学生信息             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"|           7.显示学生信息             |"<<endl;cout<<"|--------------------------------------|"<<endl;cout<<"请选择功能序号:[0-7]:";cin>>cho;while(cho<0||cho>7){cout<<"没有该功能序号,请重新输入!"<<endl;cin>>cho;}if(cho==0){cout<<"感谢使用系统!"<<endl;exit(0);}else if(cho==1){this->addList();this->menu();//返回主菜单}else if(cho==2){this->delList();this->menu();}else if(cho==3){this->modList();this->menu();}else if(cho==4){this->selList();this->menu();}else if(cho==5){this->calList();this->menu();}else if(cho==6){this->clearList();this->menu();}else if(cho==7){this->showList();this->menu();}system("pause"); //按任意键继续
}
void StudentList::addList()
{while(true){system("cls");cout<<"--------欢迎来到添加学生信息功能界面--------"<<endl;cout<<"学生基本信息表如下:"<<endl;this->disStuInfo();cout<<endl;//换行cout<<"-------------------"<<endl;cout<<" 1.添加学生信息 "<<endl;cout<<" 2.返回主菜单界面 "<<endl;cout<<"-------------------"<<endl;cout<<"请输入功能序号[1/2]:";int n;cin>>n;while(n!=1&&n!=2){cout<<"没有该功能序号,请重新输入!"<<endl;cin>>n;}if(n==1){Student stu;cout<<"输入学生基本信息"<<endl;cout<<"请输入学号:";int check=-1;//判断学生是不是已经存在了while(true){cin>>stu.stuNum;check=this->checkExist(stu);if(check!=-1){cout<<"该学生已经存在,请重新输入!"<<endl;cin>>stu.stuNum;}else{cout<<"学号输入成功!"<<endl;break;}}cout<<"姓名:";cin>>stu.stuName;cout<<"性别:";cin>>stu.gender;cout<<"年级:";cin>>stu.graNum;cout<<"班级:";cin>>stu.classNum;cout<<"专业:";cin>>stu.major;cout<<endl;cout<<"基本信息输入完成!请问是否还要输入成绩信息? 1是0否";int opt;cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==1){int cou=0;//科目门数while(true){cou++;Subject sub;cout<<"第"<<cou<<"门科目名称: ";cin>>sub.subName;cout<<"第"<<cou<<"门科目分数: ";cin>>sub.score;stu.subs.push_back(sub); //在vector容器尾部添加元素cout<<"该学生该科目成绩信息添加成功!请问是否还要继续添加科目信息?1是0否";cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该输入选项,请重新输入!";cin>>opt;}if(opt==0){cout<<"该学生成绩信息添加完毕!"<<endl;break;}}stu.subSum=cou;}for(int i=0;i<stu.subs.size();i++){stu.sumScore+=stu.subs[i].score;//求总分}if(stu.sumScore>0){stu.aveScore=stu.sumScore/stu.subs.size();//求平均分}stuList.push_back(stu);//学生列表添加该学生信息cout<<"该学生信息添加成功!请问是否还要继续添加?1是0否";cin>>n;while(n!=0&&n!=1){cout<<"没有该输入选项,请重新输入!";cin>>n;}if(n==0){cout<<"添加学生信息完成!"<<endl;writeFile();break;}}else{break;//返回主菜单}system("pause"); //按任意键继续}
}
int StudentList::checkExist(Student stu)
{for(int i=0;i<stuList.size();i++){if(stu.stuNum==stuList[i].stuNum){return i;//该学生已经存在}}return -1; //没有找到
}
void StudentList::delList()
{while(true){system("cls");cout<<"--------欢迎来到删除学生信息功能界面--------"<<endl;cout<<"-------------------------"<<endl;cout<<" 1.输入学号删除学生信息 "<<endl;cout<<" 2.返回主菜单界面 "<<endl;cout<<"-------------------------"<<endl;cout<<"请输入功能序号[1/2]:";int n;Student stu;cin>>n;while(n!=1&&n!=2){cout<<"没有该功能序号,请重新输入!";cin>>n;}if(n==1){string stuNum;cout<<"请输入要删除学生学号:";cin>>stu.stuNum;int check=checkExist(stu);//删除学生是否存在if(check!=-1){cout<<"要删除学生信息如下:"<<endl;cout<<"-----------------------------"<<endl;stuList[check].showStuHeader();stuList[check].showStuInfo();cout<<"请问确认删除吗?1是0否";int opt;cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==0){break;}else{stuList.erase(stuList.begin()+check);//删除指定位置信息cout<<"删除该学生信息成功!"<<endl;break;}}else{cout<<"该学生不存在!无法删除!"<<endl;}}else if(n==2){cout<<"删除学生信息完成!"<<endl;writeFile();break;}system("pause"); //按任意键继续}}
void StudentList::modList()
{while(true){system("cls");cout<<"--------欢迎来到修改学生信息功能界面--------"<<endl;cout<<"-------------------------"<<endl;cout<<" 1.修改学生基本信息 "<<endl;cout<<" 2.修改学生成绩信息 "<<endl;cout<<" 3.返回主菜单界面 "<<endl;cout<<"-------------------------"<<endl;cout<<"请输入功能序号[1/2/3]:";int n;Student stu;cin>>n;while(n!=1&&n!=2&&n!=3){cout<<"没有该功能序号,请重新输入!";cin>>n;}if(n==1){string stuNum;cout<<"请输入要修改学生的学号:";cin>>stu.stuNum;int check=checkExist(stu);//要修改的学生是否存在if(check!=-1){cout<<"要修改学生的原来基本信息如下:"<<endl;cout<<"-----------------------------"<<endl;stuList[check].showStuHeader();stuList[check].showStuInfo();cout<<"-----------------------------"<<endl;cout<<"请问确认修改吗?1是0否";int opt;cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==0){break;}else{cout<<"修改后姓名:";cin>>stuList[check].stuName;cout<<"修改后性别:";cin>>stuList[check].gender;cout<<"修改后年级:";cin>>stuList[check].graNum;cout<<"修改后班级:";cin>>stuList[check].classNum;cout<<"修改后专业:";cin>>stuList[check].major;cout<<endl;cout<<"该学生基本信息修改完成!请问是否还要继续修改信息? 1是0否";cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==0){cout<<"修改学生信息完成!"<<endl;writeFile();break;}}}else{cout<<"该学生不存在!无法修改基本信息!"<<endl;}}else if(n==2){string stuNum;cout<<"请输入要修改学生的学号:";cin>>stu.stuNum;int check=checkExist(stu);//要修改的学生是否存在if(check!=-1){cout<<"要修改学生的原来成绩信息如下:"<<endl;cout<<"-------------------------------------"<<endl;stuList[check].subs[check].showSubHeader();for(int i=0;i<stuList[check].subs.size();i++){cout<<(i+1)<<internal<<setw(8);stuList[check].subs[i].showSubInfo();}stuList[check].showStuInfo();cout<<"-------------------------------------"<<endl;cout<<"请问确认修改吗?1是0否";int opt;cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==0){break;}else{for(int i=0;i<stuList[check].subs.size();i++)//遍历列表进行修改成绩信息{cout<<"第"<<(i+1)<<"门科目名称: "<<stuList[check].subs[i].subName;cout<<"请输入修改后的分数:";cout<<"第"<<(i+1)<<"门科目分数: "<<stuList[check].subs[i].score;}cout<<"该学生成绩信息修改完成!请问是否还要继续修改信息? 1是0否";cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==0){cout<<"修改学生信息完成!"<<endl;break;}}}}else{cout<<"该学生不存在!无法修改基本信息!"<<endl;break;}system("pause"); //按任意键继续}
}void StudentList::selList()
{while(true){system("cls");cout<<"--------欢迎来到查询学生信息功能界面--------"<<endl;cout<<"-------------------------"<<endl;cout<<" 1.输入学号查询学生信息 "<<endl;cout<<" 2.输入姓名查询学生信息 "<<endl;cout<<" 3.输入身份证号查询学生信息 "<<endl;cout<<" 4.输入课程名查询学生信息 "<<endl;cout<<" 5.输入班级查询学生信息 "<<endl;cout<<" 6.返回主菜单界面 "<<endl;cout<<"-------------------------"<<endl;cout<<"请输入功能序号[1/2]:";int n;Student stu;cin>>n;while(n!=1&&n!=2){cout<<"没有该功能序号,请重新输入!";cin>>n;}if(n==1){string stuNum;cout<<"请输入要查询学生学号[5-8位院系代码]:";cin>>stuNum;if(stuNum.size()>8){stuNum=stuNum.substr(5,9);stuList[0].showStuHeader();for(int i=0;i<stuList.size();i++){if(stuList[i].stuNum.substr(5,9)==stuNum){stuList[i].showStuInfo();}}cout<<"请问还要查询吗?1是0否";int opt;cin>>opt;while(opt!=0&&opt!=1){cout<<"没有该功能,请重新输入!";cin>>opt;}if(opt==0){cout<<"查询学生信息完成!"<<endl;break;}}else{cout<<"学生学号输入不正确,无对应院系编号!无法查询!"<<endl;}}
}
}
bool cmpAve(Student&s1,Student&s2) //自定义排序函数
{return s1.aveScore>s2.aveScore;
}
bool cmpSum(Student&s1,Student&s2)
{return s1.sumScore>s2.sumScore;
}
void StudentList::calList()
{while(true){system("cls");cout<<"--------欢迎来到统计学生信息功能界面--------"<<endl;cout<<"-------------------------"<<endl;cout<<" 1.统计男生女生数量 "<<endl;cout<<" 2.按照平均分排序学生 "<<endl;cout<<" 3.按照总分排序学生 "<<endl;cout<<" 4.返回主菜单界面 "<<endl;cout<<"-------------------------"<<endl;cout<<"请输入功能序号[1/2/3/4]:";int n;Student stu;cin>>n;while(n!=1&&n!=2&&n!=3&&n!=4){cout<<"没有该功能序号,请重新输入!";cin>>n;}if(n==1){int b=0,g=0;stuList[0].showStuHeader();for(int i=0;i<stuList.size();i++){if(stuList[i].gender=="女"){g++;stuList[i].showStuInfo();}}cout<<endl;cout<<"女生共有:"<<g<<"名"<<endl;stuList[0].showStuHeader();for(int i=0;i<stuList.size();i++) //遍历学生列表{if(stuList[i].gender=="男"){b++;stuList[i].showStuInfo(); //输出男生信息}}cout<<"男生共有:"<<b<<"名"<<endl;;}else if(n==2){sort(stuList.begin(),stuList.end(),cmpAve);//按照平均分降序排序cout<<"按照平均分降序排序如下:"<<endl;this->showList();}else if(n==3){sort(stuList.begin(),stuList.end(),cmpSum);//按照总分降序排序cout<<"按照总分升序排序如下:"<<endl;this->showList();}else{cout<<"学生信息统计完成!"<<endl;break;}system("pause"); //按任意键继续}
}
void StudentList::clearList()
{while(true){system("cls");cout<<"--------欢迎来到清空学生信息功能界面--------"<<endl;cout<<"-------------------------"<<endl;cout<<" 1.确认清空所有学生信息 "<<endl;cout<<" 2.返回主菜单界面 "<<endl;cout<<"-------------------------"<<endl;cout<<"请输入功能序号[1/2]:";int n;Student stu;cin>>n;while(n!=1&&n!=2){cout<<"没有该功能序号,请重新输入!";cin>>n;}if(n==1){stuList.clear();//清空容器cout<<"清空学生信息成功!"<<endl;system("pause"); //按任意键继续writeFile();}else{cout<<"清空学生信息完成!"<<endl;break;}}
}
void StudentList::disStuInfo()
{Student stu;cout<<"-----------------------"<<endl;stu.showStuHeader();cout<<"-----------------------"<<endl;for(int i=0;i<stuList.size();i++){cout<<"";stuList[i].showStuInfo();}cout<<"-----------------------"<<endl;
}
void StudentList::disSubInfo()//成绩信息展示
{Subject sub;cout<<"-----------------------"<<endl;cout<<"";cout<<left<<setw(10)<<"姓名";cout<<left<<setw(12)<<"学号";sub.showSubHeader();cout<<"-----------------------"<<endl;for(int i=0;i<stuList.size();i++){for(int j=0;j<stuList[i].subs.size();j++) //遍历每个学生的课程{cout<<left<<setw(10)<<stuList[i].stuName;cout<<left<<setw(12)<<stuList[i].stuNum;stuList[i].subs[j].showSubInfo();}cout<<"-----------------------"<<endl;}
}void StudentList::showList()
{system("cls");cout<<"--------欢迎来到显示学生信息功能界面--------"<<endl;cout<<" 1.学生基本信息表 "<<endl;this->disStuInfo();cout<<"--------------------------------------------------------------------------------------------------"<<endl;cout<<" 2.学生成绩信息表 "<<endl;this->disSubInfo();system("pause"); //按任意键继续
}
void StudentList::init()
{//初始化readFile();
}
void StudentList::readFile()
{//读取文件ifstream ifs;ifs.open("stuList.txt",ios::in);int n=0;//学生数量ifs>>n;for(int i=0;i<n;i++){Student s;ifs>>s.stuNum>>s.stuName>>s.gender>>s.graNum>>s.classNum>>s.major;for(int j=0;i<s.subSum;j++){Subject sub;ifs>>sub.subName>>sub.score;s.subs.push_back(sub);}stuList.push_back(s);}ifs.close();
}
void StudentList::writeFile()
{//写入文件ofstream ofs;ofs.open("stuList.txt",ios::out);ofs<<stuList.size()<<endl;//学生数量for(int i=0;i<stuList.size();i++){ofs<<stuList[i].stuNum<<" "<<stuList[i].stuName<<" "<< stuList[i].gender<<" "<<stuList[i].graNum<<" "<<stuList[i].classNum<<" "<<stuList[i].major<<endl;for(int j=0;j<stuList[i].subs.size();j++){ofs<<stuList[i].subs[j].subName<<" "<<stuList[i].subs[j].score<<endl;}}ofs.close();
}
#include <iostream>
#include"Student.h"
#include"Subject.h"
#include"StudentList.h"
using namespace std;int main()
{StudentList stuList;stuList.init();stuList.menu();return 0;
}

数字时钟Date类的设计与实现

要求:

创建一个 24 小时制的 Date 类,包含数据成员:时、分、秒。
1 )给出构造函数,根据形参初始化 Date 对象,如 Date(9,35,20)
2 )给出自增 1 秒的方法,注意 59 秒、 59 59 秒、 23:59:59 等特殊时间。
3 )给出输出方法,按 : : 的格式输出,每个属性占 2 位宽度,不足两位补 0 。如零
点,应表示为 00:00:00
4 )主程序中模拟不少于 12 小时的数字时钟,按秒变化,可参考如下主函数定义
#include <cstdlib>
#include <ctime> //Sleep()函数使用
using namespace std;
int main(){
Date my_clock(11,13,56);
for (int i=1;i<=50000;i++){ //模拟5万秒
my_clock.update(); // 自增1秒
my_clock.display(); // 时钟显示变化
Sleep(1000); // 下一秒
}
return 0;
}
//数字时钟类
#pragma once
#include<iomanip>
#include<iostream>
using namespace std;
class Date
{public :int hour;int minute;int second;public :Date();Date(int hour,int minute,int second);void update(); //自增一秒void display();//时钟显示变化};
#include"Date.h"Date::Date(){};//无参构造函数
Date::Date(int hour,int minute,int second)
{this->hour=hour;this->minute=minute;this->second=second;//有参构造函数
}
void Date::update()
{int sum=hour*3600+minute*60+second+1;//时间转化成秒if(sum>=3600*24){//超过一天sum-=3600*24;}hour=sum/3600;minute=(sum%3600)/60;//拿到新的分钟second=(sum%3600)%60;
}
void Date::display()
{cout<<setfill('0')<<setw(2)<<hour<<":";//2位宽度,不足两位补0cout<<setfill('0')<<setw(2)<<minute<<":";cout<<setfill('0')<<setw(2)<<second<<endl;
}

日历Calendar类设计与实现

要求:

创建一个日历 Calendar 类,包含数据成员:年、月、日、星期。
1 )给出构造函数,根据形参初始化 Calendar 对象,如 Calendar(2023,11,20,"Mon")
2 )给出自增 1 天的方法,注意每个月的最后一天、每年的最后一天等特殊时间。
3 )给出输出函数,按 / / 年 星期几 的格式输出,每个属性占 4 位宽度,不足补空格。
4 )主程序中模拟支持跨年变化的数字日历,按天变化。
#include<string>
#include<iostream>
using namespace std;
class Calendar
{//日历类public :int year;int month;int day;string week;  //年月日星期public :Calendar();Calendar(int year,int month,int day,string week);void update();//自增一天void display();//展示日历bool checkLeap(int y);//看是否是闰年bool checkWeek();//看输入的星期是否正确string changeInt(int n);//把数字转成星期int monDay(int month);//返回月份对应的天
};
#include<iomanip>
#include"Calendar.h"
Calendar::Calendar(){};
Calendar::Calendar(int year,int month,int day,string week)
{this->year=year;this->month=month;this->day=day;checkWeek(); //根据形参初始化对象
}
bool Calendar::checkLeap(int y)
{if(y%400==0||(y%4==0&&y%100!=0)){return true;//是闰年}return false;//不是闰年
}
string Calendar::changeInt(int n)
{switch(n){case 0:return "Sun";case 1:return "Mon";case 2:return "Tus";case 3:return "Wed";case 4:return "Thr";case 5:return "Fri";case 6:return "Sat";default:return "Error";}
}
int Calendar::monDay(int month)
{switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 4:case 6:case 9:case 11:return 30;}
}
bool Calendar::checkWeek()
{int ty=year;int tm=month;int td=day;int sum=0;//计算总天数while(ty>2000){if(checkLeap(ty)){sum+=366;}else{sum+=365;}ty--;}while(tm>1){if(tm==2){sum+=29;}else{sum+=monDay(tm);}tm--;//加月份对应的天数}sum+=day-1;//计算出与2000.1.1相距多少天sum+=6;//一开始周六string tw=changeInt(sum%7);//真实星期if(week!=tw){cout<<"星期输入不正确,已经自动更改为正确的星期:"<<tw<<endl;;}week=tw;//修改为真实星期return tw==week;//判断星期是否正确
}
void Calendar::update()
{int md;int st;//一开始星期对应的数字for(int i=0;i<7;i++){if(this->changeInt(i)==week){st=i;}}week=this->changeInt((st+1)%7);//星期几更新if(month!=2){md=monDay(month);//这个月有多少天}else{md=28+checkLeap(this->year);}if(md==day){//月份最后一天if(month==12){//12月最后一天year++;month=1;day=1;}else{month++;day=1;}}else{day++;}
}
void Calendar::display()
{cout<<setw(4)<<setfill(' ')<<day<<"/";cout<<setw(4)<<setfill(' ')<<month<<"/";cout<<setw(4)<<setfill(' ')<<year<<"/";cout<<setw(4)<<setfill(' ')<<week<<endl;
}
#include <cstdlib>
#include <ctime>
#include<windows.h>//Sleep函数使用
#include"Calendar.h"
using namespace std;
int main(){Calendar my_calendar(2023,12,1,"Mon");for (int i=1;i<=2000;i++){ //模拟2000天my_calendar.update(); // 自增1天my_calendar.display(); // 日历显示变化Sleep(1000); // 下一秒}return 0;
}

分数类Rational类的设计与实现

要求:

创建一个 Rational 类,表示分数形式的有理数,包含数据成员:分数名(字符串)、分子和分
( 整数 )
1 )给出构造函数,支持以形参方式对分数对象进行初始化。
2 )给出私有函数 Simplify() ,实现分数化简。
3 )给出输出信息的方法,要求调用 Simplify() 函数,按 分数 name: 分子 fz/ 分母 fm” 的形式输
出最简分数。
4 )给出输入属性的方法,从键盘输入分数的名称、分子和分母信息。
5 )给出成员方法 Multi Div Add Sub 函数,计算两个分数相乘、相除、相加和相减。
6 )给出成员函数 Small() 比较两个分数的大小。
7 )创建一个动态分数数组,对若干个分数实现从大到小排序,分数的个数和输入方式不限
定。
//分数类设计
#include<string>
#include<iostream>
using namespace std;
class Rational
{public :string name;//分数名int fz;//分子int fm;//分母public :Rational();Rational(string name,int fz,int fm);//有参构造函数void printInfo();//输出信息void inputInfo();//输入信息Rational Multi(Rational&r);//两个分数相乘Rational Div(Rational&r);//两个分数相除Rational Add(Rational&r);//两个分数相加Rational Sub(Rational&r);//两个分数相减bool Small(Rational&r);//比较两个分数大小private:void Simplify();//分数化简};

#include"Rational.h"
Rational::Rational(){};
Rational::Rational(string name,int fz,int fm)
{this->name=name;this->fz=fz;this->fm=fm;
}
int gcd(int a,int b)
{return a%b==0? b:gcd(b,a%b);//求最大公约数
}
void Rational::Simplify()
{int m=gcd(fz,fm);fz/=m;fm/=m;//化简
}
void Rational::printInfo()
{Simplify();cout<<"分数"<<name<<":"<<fz<<"/"<<fm<<endl;//指定形式输出
}
void Rational::inputInfo()
{cout<<"请输入分数名:";cin>>name;cout<<"请输入分子:";cin>>fz;cout<<"请输入分母:";cin>>fm;
}
Rational Rational::Multi(Rational&r)
{Rational r1;r1.fz=fz*r.fz;r1.fm=fm*r.fm;cout<<"分数相乘:"<<endl;r1.printInfo();//输出化简后的相乘结果return r1;
}
Rational Rational::Div(Rational&r)
{Rational r1;r1.fz=fz*r.fm;r1.fm=fm*r.fz;cout<<"分数相除:"<<endl;r1.printInfo();return r1;
}
Rational Rational::Add(Rational&r)
{Rational r1;r1.fz=fz*r.fm+fm*r.fz;r1.fm=fm*r.fm;//通分相加cout<<"分数相加:"<<endl;r1.printInfo();return r1;
}
Rational Rational::Sub(Rational&r)
{Rational r1;r1.fz=fz*r.fm-fm*r.fz;r1.fm=fm*r.fm;//通分相减cout<<"分数相减:"<<endl;r1.printInfo();return r1;
}
bool Rational::Small(Rational &r)
{Rational r1;r1=Sub(r);//两个分数相减if(r1.fz*r1.fm>=0){return false;//前者更大或者相等}else{return true;}
}
#include <iostream>
#include"Rational.h"
#include<vector>
#include<algorithm>
using namespace std;
bool comp(Rational&r1,Rational&r2)
{return ~r1.Small(r2);//从大到小排序
}
void printList(vector<Rational>r_List)
{for(int i=0;i<r_List.size();i++){r_List[i].printInfo();}
}
int main()
{vector<Rational> r_List;//动态分数数组Rational r1;Rational r2;Rational r;r1.inputInfo();r2.inputInfo();r1.printInfo();r2.printInfo();r=r1.Add(r2);r=r1.Sub(r2);r=r1.Multi(r2);r=r1.Div(r2);r_List.push_back(r1);r_List.push_back(r2);r_List.push_back(r);sort(r_List.begin(),r_List.end(),comp);printList(r_List);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/203544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 实现 excle读取时间序列数据并画图显示

示例&#xff1a;Excle第一列为时间&#xff0c;第二列Num为秒为单位的时间&#xff0c;第三列到第九列为观测的温度数据。第一行为标签信息&#xff0c;第二行开始是数据。 实现功能&#xff1a;以第二列秒为单位的数据为横坐标&#xff0c;纵坐标为温度&#xff0c;将第三列到…

Linux系统调试课:I2C tools调试工具

文章目录 一、如何使用I2C tools测试I2C外设1、I2C tools概述: 2、下载I2C tools源码:3、编译I2C tools源码: 4、i2cdetect 5、i2cget 6、i2cdump

Vue+ElementUI技巧分享:结合Sortablejs实现表格行拖拽

文章目录 前言准备工作示例代码代码说明1. 引入依赖和组件结构2. 组件数据和生命周期3. 实现拖拽功能4. 更新数据和服务器同步 运行效果总结 前言 在很多动态网页应用中&#xff0c;用户界面的交互性是提高用户体验的关键。在 Vue.js 中&#xff0c;结合 Element UI 和 sortab…

rust从0开始写项目-06-如何接受命令行参数clap-01

写web项目或者app等&#xff0c;必不可少的要接受参数和校验参数的准确性&#xff0c;基本也是项目开始的第一步&#xff0c;那么我们今天来看下rust提供了哪些优秀的crates 关注 vx golang技术实验室&#xff0c;获取更多golang、rust好文 Part1一、clap_v3 本来是想用structO…

【Flink on k8s】- 3 - Kubernetes 中的关键概念

目录 1、容器 VS 虚拟机 2、Kubernetes 架构 2.1 Master节点 2.2 Node 节点 3、Kubernetes 的基本对象

华为OD机试 - 分披萨(Java JS Python C)

题目描述 "吃货"和"馋嘴"两人到披萨店点了一份铁盘(圆形)披萨,并嘱咐店员将披萨按放射状切成大小相同的偶数个小块。但是粗心的服务员将披萨切成了每块大小都完全不同奇数块,且肉眼能分辨出大小。 由于两人都想吃到最多的披萨,他们商量了一个他们认…

初识树型结构与二叉树

1. 树型结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff08;它是根朝上&#xff0c;而叶朝下的&#xff09;&#xff0c;其物理结构如下图所示&#x…

Ubuntu 20.04 安装 mysql8 LTS

Ubuntu 20.04 安装 mysql8 LTS sudo apt-get update sudo apt-get install mysql-server mysql --version mysql Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) Ubuntu20.04 是自带了 MySQL8. 几版本的&#xff0c;低于 20.04 则默认安装是 MySQL5.7.33 s…

rpm安装gitlab

1.rpm包下载 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 2.进行安装 rpm -ivh gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm --nodeps --force 3.配置访问地址 vim /etc/gitlab/gitlab.rb 4.重新加载配置以及重启服务 gitlab-ctl reconfiguregitlab-ctl resta…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux文件管理(2)》(26)

《Linux操作系统原理分析之Linux文件管理&#xff08;2&#xff09;》&#xff08;26&#xff09; 8 Linux文件管理8.4 虚拟文件系统 VFS8.4.1 VFS 的工作原理8.4.2 VFS 超级块8.4.3VFS 的 inode 8.5 文件系统的安装与注册8.5.2 文件系统的注册 8 Linux文件管理 8.4 虚拟文件系…

HarmonyOS4.0从零开始的开发教程05 应用程序入口—UIAbility的使用

HarmonyOS&#xff08;三&#xff09;应用程序入口—UIAbility的使用 UIAbility概述 UIAbility是一种包含用户界面的应用组件&#xff0c;主要用于和用户进行交互。UIAbility也是系统调度的单元&#xff0c;为应用提供窗口在其中绘制界面。 每一个UIAbility实例&#xff0c;…

python数据分析基础

前言 2023年10月以来&#xff0c;一位在商学院就读的可爱同学遇上了一门课——python数据分析&#xff0c;并遇到了许多问题&#xff0c;找上了我&#xff0c;就此&#xff0c;我也开始了学习之路&#xff0c;虽然很浅显&#xff0c;但这些东西对部门同学来说也是受用的&#…

【XILINX】ISE chipscope出现错误 Can‘t load jre bin client jvm.dll

记录一个ISE软件使用过程中遇到的问题及解决方案。 问题 ISE chipscope出现错误 Cant load jre bin client jvm.dll C:\Xilinx\14.7\ISE_DS\ISE\bin\nt C:\Xilinx\14.7\ISE_DS\.xinstall\bin\nt C:\Xilinx\14.7\ISE_DS\.xinstall\bin\nt64 C:\Xilinx\14.7\ISE_DS\ISE\bin\nt6…

Weblogic CVE-2023-21839(metasploit版)

Step1&#xff1a;用docker搭建环境 Step2&#xff1a;docker查看映射端口 Step3&#xff1a;访问特定端口&#xff0c;然后靶标应用。 Step4&#xff1a;用metasploit进行攻击&#xff1a; 首先&#xff0c;打开metasploit&#xff0c;然后查询需要攻击的板块&#xff0…

【恶意刷券】电商中恶意刷券如何防止?

好的&#xff0c;更详细一些的解释如下&#xff1a; 1. **验证码验证** 验证码验证是防范恶意刷券的最基本手段之一。通过在关键操作前引入验证码&#xff0c;可以让机器无法进行自动化操作&#xff0c;只有真实用户才能完成验证。验证码种类包括文字、图片、计算等多种形式&…

C# 未处理System.InvalidOperationException HResult=-2146233079

1.异常信息&#xff1a; 未处理System.InvalidOperationException HResult-2146233079 MessageThe custom trace listener custom listener does not have a listener type name set or the type is invalid (F:\CBCT64\Output\Polaris.exe.Config line 45). SourceMicr…

[实践总结] 使用Apache HttpClient 4.x进行进行一次Http请求

使用Apache HttpClient 4.x进行进行一次Http请求 依赖 <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactI…

相位解包裹算法的研究现状和存在的问题

位相解包裹算法的研究现状 Phase unwrapping中文译法有&#xff1a;位相展开&#xff0c;位相解包寝&#xff0c;位相解缠绕等。因为数字全总术的重要步骤就是进行位相解包裹&#xff0c;所以伴随着数字全息显微术的发展&#xff0c;就对位相解包裹算法提出了更高的要求&#x…

华为OD机试 - 机场航班调度程序(Java JS Python C)

题目描述 XX市机场停放了多架飞机,每架飞机都有自己的航班号CA3385,CZ6678,SC6508等,航班号的前2个大写字母(或数字)代表航空公司的缩写,后面4个数字代表航班信息。 但是XX市机场只有一条起飞跑道,调度人员需要安排目前停留在机场的航班有序起飞。 为保障航班的有序…

Python:核心知识点整理大全4-笔记

目录 2.6 Python 之禅 2.7 小结 3.1 列表是什么 3.1.1 访问列表元素 3.1.2 索引从 0 而不是 1 开始 3.1.3 使用列表中的各个值 3.2 修改、添加和删除元素 3.2.1 修改列表元素 3.2.2 在列表中添加元素 2. 在列表中插入元素 1. 使用del语句删除元素 1 处的代码使用del…