2 logo0819 logo0819 于 2015.05.27 20:46 提问

急 c++课程设计排序问题。要求如下:
c++

二、 课程设计的主要内容
功能描述:某实验室对研究生每天的科研时间进行管理,研究生每天进入实验室时记录其到达时间,离开实验室时记录其离开时间。两个时间之间的时间段作为其当天的科研工作时间。请你为其设计一个考勤管理系统,该系统需要提供下列功能:
(1) 研究生信息录入功能,提示用户逐项输入研究生信息(时、分、秒分三次逐项输入),并检查输入信息的合法性(如时、分、秒的取值范围),同时以分为单位计算每位同学的科研时间;

(2) 考勤信息浏览功能,显示所有研究生的考勤情况;例如:

学号 姓名 到达时间 离开时间 科研时间 排名

201101 张三 08:00:00 17:12:00 492 3
201102 李四 09:10:20 17:30:20 500 2

201103 王五 08: 10:20 16:10:20 540 1

(3) 排序功能,按科研时间长短进行排序并显示

提示:
(1) 使用数组、结构体
(2) 使用排序算法

 // 课程设计.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "iostream"
#include "string"
#include "iomanip"
#include "vector"
#include<fstream>
#include<algorithm>
#include<iomanip>
using namespace std;




class student{
protected:
    string name;//姓名
    string studentId;//学号
    int hour;//签到小时
    int minute;//签到分钟
    int second;//签到秒数
    int chour;//签退小时
    int cminute;//签退分钟
    int csecond;//签退秒数
    int researchTime[100];//科研时间
    int ranking;//排名
public:
    /*构造函数
    初始化变量*/
    student(){
        name = "";
        studentId = "";
        hour = 0;
        minute = 0;
        second = 0;
        chour = 0;
        cminute = 0;
        csecond = 0;
        ranking = 0;
        researchTime[100] = 0;

    }
    bool set_name(string);
    bool set_studentId(string);
    bool set_hour(int);
    bool set_minute(int);
    bool set_second(int);
    bool set_chour(int);
    bool set_cminute(int);
    bool set_csecond(int);
    bool set_researchTime(int);
    bool set_ranking(int);
    string get_name();
    string get_studentId();
    int   get_hour();
    int   get_minute();
    int   get_second();
    int   get_chour();
    int   get_cminute();
    int   get_csecond();
    int   get_researchTime();
    int   get_ranking();
};

bool student::set_studentId(string ID){
    studentId = ID;
    return true;
}
bool student::set_name(string na){
    name = na;
    return true;
}
bool student::set_hour(int ho){
    hour = ho;
    return true;
}
bool student::set_minute(int mi){
    minute = mi;
    return true;
}
bool student::set_second(int se){
    second = se;
    return true;
}
bool student::set_chour(int cho){
    chour = cho;
    return true;
}
bool student::set_cminute(int cmi){
    cminute = cmi;
    return true;
}
bool student::set_csecond(int cse){
    csecond = cse;
    return true;
}
bool student::set_researchTime(int res){
    researchTime[10] = res;
        return true;
}
bool student::set_ranking(int ran){
    ranking = ran;
    return true;
}
string student::get_studentId(){
    return studentId;
}
string student::get_name(){
    return name;
}
int student::get_hour(){
    return hour;
}
int student::get_minute(){
    return minute;
}
int student::get_second(){
    return second;
}
int student::get_chour(){
    return chour;
}
int student::get_cminute(){
    return cminute;
}
int student::get_csecond(){
    return csecond;
}
int student::get_researchTime(){
    return researchTime[10];
}
int student::get_ranking(){
    return ranking;
}
void drow(){
    cout << endl;
    cout << "********考勤统计********" << endl;
    cout << " " << "请输入相应字母进行操作!" << endl;
    cout << " " << "L:信息录入(Log in)" << endl;
    cout << " " << "O:输出(Output)" << endl;
    cout << " " << "E:退出(Exit)" << endl;
    cout << "************************" << endl;

}
student *Registration(){
    student *temp;
    string info;
    int timeIn = NULL;
    temp = new student;
    cout << "你的学号" << endl;
    cin >> info;
    temp->set_studentId(info);
    cout << "你的姓名" << endl;
    cin >> info;
    temp->set_name(info);
    cout << "***到达时间(按提示依次录入时,分,秒)***" << endl;
    cout << "到达整点" << endl;
    cin >> timeIn;
    if (timeIn >= 0 && timeIn < 24){
        temp->set_hour(timeIn);
    }
    else {
        cout << "输入有误,请重新输入" << endl;
        cin >> timeIn;
        temp->set_hour(timeIn);
    }

    cout << "到达分钟" << endl;
    cin >> timeIn;
    if (timeIn >= 0 && timeIn < 60){
        temp->set_minute(timeIn);
    }
    else{
        cout << "输入有误,请重新输入" << endl;
        cin >> timeIn;
        temp->set_minute(timeIn);
    }
    cout << "到达秒数" << endl;
    cin >> timeIn;
    if (timeIn >= 0 && timeIn < 60){
        temp->set_second(timeIn);
    }
    else
    {cout << "输入有误,请重新输入" << endl;
        cin >> timeIn;
        temp->set_second(timeIn);
    }

    cout << "***离开时间(按提示依次录入时,分,秒)***" << endl;
    cout << "离开整点" << endl;
    cin >> timeIn;
    if (timeIn >= 0 && timeIn < 24){
        temp->set_chour(timeIn);
    }
    else {
        cout << "输入有误,请重新输入" << endl;
        cin >> timeIn;
        temp->set_chour(timeIn);
    }

    cout << "离开分钟" << endl;
    cin >> timeIn;
    if (timeIn >= 0 && timeIn < 60){
        temp->set_cminute(timeIn);
    }
    else{
        cout << "输入有误,请重新输入" << endl;
        cin >> timeIn;
        temp->set_cminute(timeIn);
    }
    cout << "离开秒数" << endl;
    cin >> timeIn;
    if (timeIn >= 0 && timeIn < 60){
        temp->set_csecond(timeIn);
    }
    else
    {
        cout << "输入有误,请重新输入" << endl;
        cin >> timeIn;
        temp->set_csecond(timeIn);
    }

    cout << endl << "信息录入成功=^_^=" << endl;

    return temp;
}

void ResearchTime(student *temp){

    int reschT = ((temp->get_chour()) * 60 + temp->get_cminute()) - ((temp->get_hour()) * 60 + temp->get_minute()) ;
    temp->set_researchTime(reschT);
    int i = 0;
    i += 1;
    temp->set_ranking(i);



}
void save(student *temp){
    ofstream os;//文件操作

    os.open("outfile.txt",ios::app);
    os << endl;
    os << setw(2) << "学生学号:" << temp->get_studentId() << endl;
    os << setw(2) << "学生姓名:" << temp->get_name() << endl;
    os << setw(2) << "签到时间:" << setw(2) << setfill('0') << temp->get_hour();
    os << ":" << setw(2) << setfill('0') << temp->get_minute() << ":";
    os << setw(2) << setfill('0') << temp->get_second() << endl;
    os << setw(2) << "签退时间:" << setw(2) << setfill('0') << temp->get_chour();
    os << ":" << setw(2) << setfill('0') << temp->get_cminute() << ":";
    os << setw(2) << setfill('0') << temp->get_csecond() << endl;
    os << setw(2) << "科研时间:" << temp->get_researchTime() << endl;
    os << setw(2) << "时间排名:" << temp->get_ranking() << endl;
    temp++;
    os.close();

}
void read(){
    filebuf *pbuf;
    ifstream is;
    long size;
    char *buffer;
    if (!is){
        cout << "读取不到" << endl;
    }
    //采用二进制读取整个文件
        is.open("outfile.txt", ios::binary);
        // 获取filestr对应buffer对象的指针   
        pbuf = is.rdbuf();
        // 调用buffer对象方法获取文件大小  
        size = pbuf->pubseekoff(0, ios::end, ios::in);
        pbuf->pubseekpos(0, ios::in);
        // 分配内存空间  
        buffer = new char[size];
        // 获取文件内容  
        pbuf->sgetn(buffer, size);
        is.close();
        // 输出到标准输出  
        cout.write(buffer, size);
        delete[]buffer;

}
int _tmain(int argc, _TCHAR* argv[])
{
    student s;
    student *temp=NULL;
    int i = 1;
    char input = 'e';
    input = 'i';
    while (input != 'e'){
        drow();
        cin >> input;
        input = tolower(input);//大写转义为小写
        switch (input)
        {
        case 'l':
            cout << "信息录入:" << endl;
            temp = Registration();
            ResearchTime(temp);
            save(temp);
            break;
        case 'o':
            read();
            cout << endl << "信息读取成功=^_^= ,按提示信息进行其他操作" << endl;
            break;
        case'e':
            cout << "谢谢使用,再见!" << endl;
            std::system("pause");
            std::exit(0);
            break;
        default:
            cout << "输入有误" << endl;
            break;
        }

    }
    std::system("pause");
    return 0;
}


6个回答

caozhy
caozhy   Ds   Rxr 2015.05.28 00:03
已采纳

虽说你的老师也是一个混帐二胡老师,只会胡乱抄袭一点题目来哄骗你们。
可是你连你老师都不如,起码人家还动动鼠标搜索一下,而你连搜索都不会。
所以你的老师还能找些比他更傻的赖学生骗骗,可你将来骗人恐怕都干不来。

logo0819
logo0819 回复caozhy: 能给点提示么?
2 年多之前 回复
logo0819
logo0819 回复91program: 网上搜的都写的不明确 难以理解
2 年多之前 回复
caozhy
caozhy 回复小裸: 不好意思,昨天没仔细看,以为你直接贴出作业要答案。今天才看到你自己写了程序的。
2 年多之前 回复
91program
91program 回复小裸: 从文件中拿数据的功能,也可能搜索啊
2 年多之前 回复
logo0819
logo0819 我搜索了的 我的问题是从文件中拿数据存入数组排序
2 年多之前 回复
qq_18348403
qq_18348403   2015.05.27 23:35

我觉得你应该贴出来你有问题的那部分,而不是这样贴出一大段代码,还不加注释,谁愿意看?

xialeichang
xialeichang   2015.05.27 23:53

好长,作为新手也只能说排序算法有冒泡排序,选择排序,快速排序,桶排序,插入排序,归并排序等,你想要简单就冒泡排序,要性能就推荐快速排序。其实都可以的。还有vector其实自己也可以写的,用数组的话运算速度比vector快很多,但vector已经被别人写好方便使用。我也是来学习的

caozhy
caozhy   Ds   Rxr 2015.05.28 00:02
xy707707
xy707707   2015.05.28 08:29
cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.05.28 22:52
Csdn user default icon
上传中...
上传图片
插入图片