C++程序设计——公司信息管理系统

对公司管理系统的简单实现,实际上功能不是很全。
登陆界面:
头文件logindialog.h:

#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H

#include <QDialog>
#include <dialog.h>

namespace Ui {
class LoginDialog;
}

class LoginDialog : public QDialog
{
    Q_OBJECT

public:
    explicit LoginDialog(QWidget *parent = 0);
    ~LoginDialog();

private slots:
    void on_LoginButton_clicked();

    void on_exit_clicked();

private:
    Ui::LoginDialog *ui;
    Dialog *dialog;
};

#endif // LOGINDIALOG_H

logindialog.cpp:

#include "logindialog.h"
#include "ui_logindialog.h"
#include <QtWidgets/QMessageBox>
#include <dialog.h>

LoginDialog::LoginDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::LoginDialog)
{
    ui->setupUi(this);
    ui-> pwdLineEdit-> setEchoMode(QLineEdit::Password);//设置密码为输入后不可见
}

LoginDialog::~LoginDialog()
{
    delete ui;
}

//点击登录按钮进入系统
void LoginDialog::on_LoginButton_clicked()
{
    if((ui->usrLineEdit->text().trimmed()==tr("admin"))&&(ui->pwdLineEdit->text()==tr("admin")))
    {
        ui->usrLineEdit->clear();//清空用户名输入框
        ui->pwdLineEdit->clear();//清空密码输入框
        //进入系统,打开系统界面
        dialog = new Dialog(this);
        dialog->show();
    }
    else
    {
        QMessageBox::warning(this,tr("Error!"),tr("Username or password is incorrect!"),QMessageBox::Yes);
        //如果输入的用户名或密码不正确,弹出提示对话框
        ui->usrLineEdit->clear();//清空用户名输入框
        ui->pwdLineEdit->clear();//清空密码输入框
        ui->usrLineEdit->setFocus();//将光标转到用户名输入框
    }

}

//点击退出按钮退出系统
void LoginDialog::on_exit_clicked()
{
    close();
}

主界面:
头文件dialog.h:

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <adddialog.h>
#include <calcdialog.h>
#include <querydialog.h>
#include <deldialog.h>
#include <updatedialog.h>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_add_clicked();

    void on_calculate_clicked();

    void on_query_clicked();

    void on_exit_clicked();

    void on_del_clicked();

    void on_update_clicked();

private:
    Ui::Dialog *ui;
    AddDialog *dialog1;
    calcDialog *dialog2;
    queryDialog *dialog3;
    delDialog *dialog4;
    updateDialog *dialog5;
};

#endif // DIALOG_H

dialog.cpp:

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}

//点击“新增”按钮打开新增人员界面
void Dialog::on_add_clicked()
{
    dialog1 = new AddDialog(this);
    dialog1->show();
}

//点击“计算奖金”按钮打开计算奖金界面
void Dialog::on_calculate_clicked()
{
    dialog2 = new calcDialog(this);
    dialog2->show();
}

//点击“查询”按钮打开查询界面
void Dialog::on_query_clicked()
{
    dialog3 = new queryDialog(this);
    dialog3->show();
}

//点击“退出”按钮退出系统
void Dialog::on_exit_clicked()
{
    close();
}

//点击“删除”按钮打开删除界面
void Dialog::on_del_clicked()
{
    dialog4 = new delDialog(this);
    dialog4->show();
}

//点击“修改”按钮打开修改界面
void Dialog::on_update_clicked()
{
    dialog5 = new updateDialog(this);
    dialog5->show(); 
}

以下均以姓名:张三、工号:20151001、职务:主任、部门:客管中心、本月全勤为例
新增职工信息:
头文件adddialog.h:

#ifndef ADDDIALOG_H
#define ADDDIALOG_H

#include <QDialog>

namespace Ui {
class AddDialog;
}

class AddDialog : public QDialog
{
    Q_OBJECT

public:
    explicit AddDialog(QWidget *parent = 0);
    ~AddDialog();

private slots:
    void on_confirm_clicked();

    void on_exit_clicked();

private:
    Ui::AddDialog *ui;
};

#endif // ADDDIALOG_H

头文件connection.h: 用于与数据库的连接

#ifndef CONNECTION_H
#define CONNECTION_H

#include <QtWidgets/QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>

static bool createConnection()
{
    QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");//添加数据库驱动
    dataBase.setDatabaseName(":memory:");//数据库连接命名
    bool ok=dataBase.open();//打开数据库
    if(ok)
    {
        return true;
    }
    else
    {
        QMessageBox::warning(NULL,"Error!","cannot open database!");
        return false;
    }
}

#endif // CONNECTION_H

adddialog.cpp:

#include "adddialog.h"
#include "ui_adddialog.h"
#include <QtWidgets/QMessageBox>
#include <QString>
#include <QtSql>
#include <connection.h>

AddDialog::AddDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::AddDialog)
{
    ui->setupUi(this);
}

AddDialog::~AddDialog()
{
    delete ui;
}

//确认按钮
void AddDialog::on_confirm_clicked()
{
    int flag1,flag2,flag3 = 0,flag4 = 0;
    QString name,no,pos,dep;
    name = ui->namelineEdit->text();
    no = ui->nolineEdit->text();
    //判断姓名是否未填写
    if(name=="")
    {
        ui->tip1->setText(QString::fromLocal8Bit("此处不可以为空"));
        flag1 = 1;
    }
    else
        flag1 = 0;
    //判断工号是否未填写
    if(no=="")
    {
        ui->tip2->setText(QString::fromLocal8Bit("此处不可以为空"));
        flag2 = 1;
    }
    else
        flag2 = 0;
    //判断职务是否已选择
    if(ui->positioncombo->currentIndex()==0)
    {    ui->tip3->setText(QString::fromLocal8Bit("此处不可以为空"));
         flag3 = 1;
    }
    //判断部门是否已选择
    if(ui->departcombo->currentIndex()==1)
    {    ui->tip4->setText(QString::fromLocal8Bit("此处不可以为空"));
         flag4 = 1;
    }
    //若四项都已填好、选好,将数据插入到数据库中
    if(flag1==0&&flag2==0&&flag3==0&&flag4==0)
    {
        QSqlQuery query;
        //设置创建information表的SQL语句
        query.exec("CREATE table information(name varchar(20) primary key, no varchar(20),"
                   "position varchar(20), department varchar(20))");
        //从姓名输入框、工号输入框、职务选项、部门选项中获取信息,设置要执行的SQL插入语句
        QString savesql = QString("INSERT INTO information(name,no,position,department)");
            savesql += QString(" VALUES('%1','%2','%3','%4')").arg(ui->namelineEdit->text())
                    .arg(ui->nolineEdit->text())
                    .arg(ui->positioncombo->currentText())
                    .arg(ui->departcombo->currentText());
        bool ok = query.exec(savesql);//返回执行SQL插入语句是否成功
        if(ok)
        {
            QMessageBox::about(NULL,"Success!","Insert is done!");
            ui->namelineEdit->clear();//清空姓名输入框
            ui->nolineEdit->clear();//清空工号输入框
        }
        else
        {
            QMessageBox::warning(NULL,"Error!","Insert fails!");
        }
    }
}

//返回按钮
void AddDialog::on_exit_clicked()
{
	close(); 
}

查询职工信息:
头文件querydialog.h:

#ifndef QUERYDIALOG_H
#define QUERYDIALOG_H

#include <QDialog>

namespace Ui {
class queryDialog;
}

class queryDialog : public QDialog
{
    Q_OBJECT

public:
    explicit queryDialog(QWidget *parent = 0);
    ~queryDialog();

private slots:
    void on_query_clicked();

    void on_exit_clicked();

private:
    Ui::queryDialog *ui;
};

#endif // QUERYDIALOG_H

querydialog.cpp:

#include "querydialog.h"
#include "ui_querydialog.h"
#include <adddialog.h>
#include <QtSql>

queryDialog::queryDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::queryDialog)
{
    ui->setupUi(this);
}

queryDialog::~queryDialog()
{
    delete ui;
}

//查询按钮
void queryDialog::on_query_clicked()
{
    QString name = ui->namelineEdit->text();//获取要查询的职工的姓名
    QSqlQuery query;
    // 设置将要执行的SQL查询语句,:sname是要被绑定数据的位置
    query.prepare("SELECT * FROM information WHERE name = :name");
    query.bindValue(":name",name);//绑定数据到指定的位置
    query.exec();//执行上面的SQL语句
    //QSqlRecord 类封装了一条数据库记录。这里创建一个名为rec的对象存放刚才的查询结果
    QSqlRecord rec = query.record();
    while(query.next())
    {
        rec = query.record();
        //分别获得索引值
        int nameindex = rec.indexOf("name");
        int noindex = rec.indexOf("no");
        int posindex = rec.indexOf("position");
        int depindex = rec.indexOf("department");
        //利用索引值得到string类型的内容
        QString value1 = query.value(nameindex).toString();
        QString value2 = query.value(noindex).toString();
        QString value3 = query.value(posindex).toString();
        QString value4 = query.value(depindex).toString();
        //将得到的内容赋给对应的label,显示出查询结果
        ui->nameresult->setText(value1);
        ui->noresult->setText(value2);
        ui->positionresult->setText(value3);
        ui->departmentresult->setText(value4);
    }
}

//返回按钮
void queryDialog::on_exit_clicked()
{
    close();
}

修改职工信息:张三升职为经理,调至营销中心
头文件updatedialog.h:

#ifndef UPDATEDIALOG_H
#define UPDATEDIALOG_H

#include <QDialog>

namespace Ui {
class updateDialog;
}

class updateDialog : public QDialog
{
    Q_OBJECT

public:
    explicit updateDialog(QWidget *parent = 0);
    ~updateDialog();

private slots:
    void on_exit_clicked();

    void on_confirm_clicked();

private:
    Ui::updateDialog *ui;
};

#endif // UPDATEDIALOG_H

updatedialog.cpp:

#include "updatedialog.h"
#include "ui_updatedialog.h"
#include <QString>
#include <QtSql>
#include <QtWidgets/QMessageBox>

updateDialog::updateDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::updateDialog)
{
    ui->setupUi(this);
}

updateDialog::~updateDialog()
{
    delete ui;
}

//返回按钮
void updateDialog::on_exit_clicked()
{
    close();
}

//修改按钮
void updateDialog::on_confirm_clicked()
{
    QSqlQuery query;
    //设定查询SQL语句
    QString updatesql = QString("UPDATE information SET name,no,position,department");
        updatesql += QString(" VALUES('%1','%2','%3','%4')").arg(ui->namelineEdit->text())
                .arg(ui->nolineEdit->text())
                .arg(ui->positioncomboBox->currentText())
                .arg(ui->departmentcomboBox->currentText());
    bool ok = query.exec(updatesql);
    if(ok)
    {
        QMessageBox::about(NULL, "Success!", "Update is done!");
    }
    else
    {
        QMessageBox::warning(NULL, "Error!", "Update fails!");
    }
}

删除职工信息:
头文件deldialog.h:

#ifndef DELDIALOG_H
#define DELDIALOG_H

#include <QDialog>

namespace Ui {
class delDialog;
}

class delDialog : public QDialog
{
    Q_OBJECT

public:
    explicit delDialog(QWidget *parent = 0);
    ~delDialog();

private slots:
    void on_confirm_clicked();

    void on_exit_clicked();

private:
    Ui::delDialog *ui;
};

#endif // DELDIALOG_H

deldialog.cpp:

#include "deldialog.h"
#include "ui_deldialog.h"
#include <QtWidgets/QMessageBox>
#include <QtSql>
#include <QString>

delDialog::delDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::delDialog)
{
    ui->setupUi(this);
}

delDialog::~delDialog()
{
    delete ui;
}

//确定按钮
void delDialog::on_confirm_clicked()
{
    QString name = ui->namelineEdit->text();//获取要删除信息的职工的姓名
    QSqlQuery deletequery;
    //设置删除信息的SQL语句
    QString deletesql = QString("DELETE FROM information WHERE name ='%1'").arg(name);
    bool ok = deletequery.exec(deletesql);
    if(ok)
    {
        QMessageBox::about(NULL, "Success!", "Delete is done!");
        ui->namelineEdit->clear();
    }
    else
    {
        QMessageBox::about(NULL, "Error!", "Delete fails!");
    }
}

//返回按钮
void delDialog::on_exit_clicked()
{
    close();
}

计算奖金:
头文件caldialog.h:

#ifndef CALCDIALOG_H
#define CALCDIALOG_H

#include <QDialog>

namespace Ui {
class calcDialog;
}

class calcDialog : public QDialog
{
    Q_OBJECT

public:
    explicit calcDialog(QWidget *parent = 0);
    ~calcDialog();

private slots:
    void on_exit_clicked();

    void on_confirm_clicked();

private:
    Ui::calcDialog *ui;
};

#endif // CALCDIALOG_H

头文件position.h:

#ifndef POSITION_H
#define POSITION_H

class position
{
public:
    double depSal,absSal,abs,sumSal;
    virtual double sum() = 0;//定义一个计算总奖金的虚函数
};

#endif // POSITION_H

头文件position_1.h:

#ifndef POSITION_1_H
#define POSITION_1_H
#include <position.h>

class position_1:virtual public position
{
public:
    double posSal1;
    virtual double sum()
    {
        sumSal = (depSal+posSal1+absSal)*abs;
        return sumSal;
    }
};
#endif // POSITION_1_H

头文件position_2.h:

#ifndef POSITION_2_H
#define POSITION_2_H
#include <position.h>

class position_2:virtual public position
{
public:
    double posSal2,fuelSal;
    virtual double sum()
    {
        sumSal = (depSal+posSal2+absSal)*abs+fuelSal;
        return sumSal;
    }
};

#endif // POSITION_2_H

头文件position_3.h:

#ifndef POSITION_3_H
#define POSITION_3_H
#include <position_1.h>
#include <position_2.h>

//position_3类由position_1类和position_2类派生而来
class position_3:public position_1,public position_2
{
public:
    double posSal3,extraSal;
    virtual double sum()
    {
        sumSal = (depSal+posSal3+absSal)*abs+fuelSal+extraSal;
        return sumSal;
    }
};

#endif // POSITION_3_H

caldialog.cpp:

#include "calcdialog.h"
#include "ui_calcdialog.h"
#include <stdlib.h>
#include <position.h>
#include <position_1.h>
#include <position_2.h>
#include <position_3.h>

calcDialog::calcDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::calcDialog)
{
    ui->setupUi(this);
}

calcDialog::~calcDialog()
{
    delete ui;
}

//返回按钮
void calcDialog::on_exit_clicked()
{
    close();
}

//计算奖金
void calcDialog::on_confirm_clicked()
{
    position_1 p1;
    position_2 p2;
    position_3 p3;
    double sumSal;//奖金和
    int flag = 0;//作为记号
    QString result;

    {
        //设定营销中心的部门奖金
        if(ui->departcomboBox->currentIndex()==1)
        {
            p1.depSal = 3516.5;
            p2.depSal = 3516.5;
            p3.depSal = 3516.5;
        }
        //设定客管中心的部门奖金
        else if(ui->departcomboBox->currentIndex()==2)
        {
            p1.depSal = 3755.7;
            p2.depSal =3755.7;
            p3.depSal = 3755.7;
        }
        //设定离退休管理中心的部门奖金
        else if(ui->departcomboBox->currentIndex()==3)
        {
            p1.depSal = 4166.8;
            p2.depSal = 4166.8;
            p3.depSal = 4166.8;}
        else
        {
            flag = 1;//若部门选项未选,flag记号为1
        }
    }

    {
        //设定全勤奖与奖金系数
        if(ui->absentcomboBox->currentIndex()==1)
        {
            p1.absSal = 300.0;p1.abs = 1.03;
            p2.absSal = 250.0;p2.abs = 1.04;
            p3.absSal = 300.0;p3.abs = 1.02;
        }
        //非全勤没有奖金,奖金系数也有所不同
        else if(ui->absentcomboBox->currentIndex()==2)
        {
            p1.absSal = 0.0;p1.abs = 0.95;
            p2.absSal = 0.0;p2.abs = 0.95;
            p3.absSal = 0.0;p3.abs = 0.95;
        }
        else
        {
            flag = 1;//若是否全勤未选,flag记号为1
        }
    }

    {
        //设定主管的职务奖金,并计算总奖金
        if(ui->positioncomboBox->currentIndex()==1)
        {
            p1.posSal1 = 550.0;
            sumSal = p1.sum();
        }
        //设定主任的职务奖金,并计算总奖金
        else if(ui->positioncomboBox->currentIndex()==2)
        {
            p2.posSal2 = 750.0;
            p2.fuelSal = 600.0;
            sumSal = p2.sum();
        }
        //设定经理的职务奖金,并计算总奖金
        else if(ui->positioncomboBox->currentIndex()==3)
        {
            p3.posSal3 = 950.0;
            p3.extraSal = 500.0;
            sumSal = p3.sum();
        }
        else
        {
            flag = 1;//若职务未选,flag记号为1
        }
    }

    if(flag==1)
    {
        ui->resultlineEdit->setText(QString::fromLocal8Bit("选项不可以为空!请重新选择!"));
    }
    else
    {
        //将double类型转换为string类型并在文本框中输出奖金计算的结果
        result = QString::number(sumSal,'f',2);
        ui->resultlineEdit->setText(result);
    }
}

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <dialog.h>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    Dialog *dialog;
};

#endif // WIDGET_H

widget.cpp:

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

main.cpp:

#include "widget.h"
#include <QApplication>
#include <logindialog.h>
#include <connection.h>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    LoginDialog login;
    //判断连接数据库是否成功
    if (!createConnection())
        return 1;
    //打开登陆界面
    if(login.exec()==QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else
        return 0;
}
#include "iostream" #include "fstream" #include "iomanip" #include "string" using namespace std; bool equal(char *a,char *b,int n)//判断两个字符串是否一样 { int temp=0; for(int i=0;i<n;i++) if(a[i]==b[i]) temp++; if(temp==n) return 1; else return 0; } int getline(int n)//求文件中信息的行数(既文件中学生的数量,课程的数量) n为5表示为求A.txt中的行数,n为7表示求B.txt中的行数 { int count=0; char temp[20]; char temp1[20]; for(int i=0;i<20;i++) { temp1[i]=0; } ifstream f1; if(n==5) { f1.open("A.txt"); } if(n==7) { f1.open("B.txt"); } while(f1.get()) { if(!equal(temp,temp1,20)) { for(int i=0;i>temp; count++; } else break; } f1.close(); return count/n; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// struct binfo//学生基本信息 { char num[8],name[8],sex[8],flatnum[4],telenum[11];//学号,姓名,宿舍号,电话号码 }; struct sinfo//学生课程信息 { char num[8],jectnum[8],jectname[20];//学号,课程编号,课程名称 double xuefen,usualscore,labscore,testscore,comscore,turexuefen;//学分,平时成绩,实验成绩,卷面成绩,综合成绩,实得学分 double subxufen,subscore; }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class studentb { friend ostream &operator;<>(istream &is;,studentb &st;); public: studentb(); void dele();//删除信息 void displayb1(ostream &os;);//查询基本信息 void displayb(ostream &os;); void displaypart(); void inputb(istream &is;); char* getnum(); char* getname(); private: binfo b;//基本信息 }; void studentb::displaypart() { cout<<"学号:"<<b.num<<'\t'<<"姓名:"<<b.name<<endl; } studentb::studentb() { } void studentb::displayb(ostream &os;) { os<<b.num<<'\t'<<b.name<<'\t'<<b.sex<<'\t'<<b.flatnum<<'\t'<<b.telenum<<endl; } void studentb::displayb1(ostream &os;) { os<<"学号:"<<b.num<<" "<<"姓名:"<<b.name<<" "<<"性别:"<<b.sex<<" "<<"宿舍号:"<<b.flatnum<<" "<<"电话号码:"<<b.telenum<>b.num>>b.name>>b.sex>>b.flatnum>>b.telenum; } ///////////////////////////////////////////////////////////////////////////////////////// class students { public: students(){}; void inputs(istream &is;); void displays(); void displays1(); void displays(ostream &os;); void inputsubxuefen(double x); void inputsubscore(double x); char *getnum(); double getxuefen(); double getcomscore(); void cal(); private: sinfo s; }; void students::inputsubscore(double x) { s.subscore=x; } void students::inputsubxuefen(double x) { s.subxufen=x; } double students::getcomscore() { return s.comscore; } double students::getxuefen() { return s.turexuefen; } void students::cal() { if(s.labscore==-1) s.comscore=s.usualscore*0.3+s.testscore*0.7; else s.comscore=s.usualscore*0.15+s.labscore*0.15+s.testscore*0.7; if(s.comscore<60) s.turexuefen=0; else s.turexuefen=s.xuefen; } char* students::getnum() { return s.num; } void students::inputs(istream &is;) { if(is==cin) cout<<"请输入学号,课程编号,课程名称,学分,平时成绩,实验成绩,卷面成绩:"<>s.num>>s.jectnum>>s.jectname>>s.xuefen>>s.usualscore>>s.labscore>>s.testscore; cal(); } void students::displays1() { cout<<"学号:"<<s.num<<" "<<"课程编号:"<<s.jectnum<<'\t'<<"课程名称:"<<s.jectname<<'\t'<<"综合成绩:"<<s.comscore<<'\t'<<"实得学分:"<<s.turexuefen<<endl; } void students::displays() { cout<<"课程编号:"<<s.jectnum<<'\t'<<"课程名称:"<<s.jectname<<'\t'<<"综合成绩:"<<s.comscore<<'\t'<<"实得学分:"<<s.turexuefen<<endl; } void students::displays(ostream &os;) { os<<s.num<<'\t'<<s.jectnum<<'\t'<<s.jectname<<'\t'<<s.xuefen<<'\t'<<s.usualscore<<'\t'<<s.labscore<<'\t'<<s.testscore<<endl; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class allstudentb { public: allstudentb(int n) { studentnum=n; sptr=new studentb [studentnum]; ifstream f("A.txt"); for(int i=0;i<studentnum;i++) sptr[i].inputb(f); f.close(); } ~allstudentb(){delete [] sptr;} void searchb(char *ch);//查询基本信息 void searchpart(char *ch); void deleb(char *ch);//删除信息 void sort();//信息排序 private: studentb *sptr; int studentnum; }; void allstudentb::deleb(char *ch) { int temp=strlen(ch); ofstream f("A.txt"); for(int i=0;i<studentnum;i++) { if(!equal(ch,sptr[i].getnum(),temp)&&!equal(ch,sptr[i].getname(),temp)) sptr[i].displayb(f); } f.close(); } void allstudentb::searchb(char *ch) { int temp=strlen(ch); for(int i=0;i<studentnum;i++) if(equal(ch,sptr[i].getnum(),temp)||equal(ch,sptr[i].getname(),temp)) sptr[i].displayb1(cout); } void allstudentb::searchpart(char *ch) { int temp=strlen(ch); for(int i=0;i<studentnum;i++) if(equal(ch,sptr[i].getnum(),temp)||equal(ch,sptr[i].getname(),temp)) sptr[i].displaypart(); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// class allstudents { public: allstudents(int n){ num=n; ifstream f("B.txt"); sptr=new students [n]; for(int i=0;i<n;i++) sptr[i].inputs(f); f.close(); } ~allstudents(){delete [] sptr;} void searchs(char *ch); void inputs(); void displays(); void deles(char *ch); void sortxuefen(int n); void sortcomscore(int n); void print();//在屏幕上显示信息 private: students *sptr; int num; }; void allstudents::print() { for(int i=0;i<num;i++) sptr[i].displays1(); } void allstudents::sortxuefen(int n) { students temp; int i,j; if(n==0) { for(i=1;i<num;i++) for(j=0;j<num-i;j++) if(sptr[j].getxuefen()<sptr[j+1].getxuefen())//降序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } else { for(i=1;i<num;i++) for(j=0;jsptr[j+1].getxuefen())//升序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } displays(); } void allstudents::sortcomscore(int n) { int i,j; students temp; if(n==0) { for(i=1;i<num;i++) for(j=0;j<num-i;j++) if(sptr[j].getcomscore()<sptr[j+1].getcomscore())//降序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } else { for(i=1;i<num;i++) for(j=0;jsptr[j+1].getcomscore())//升序 { temp=sptr[j]; sptr[j]=sptr[j+1]; sptr[j+1]=temp; } } displays(); } void allstudents::deles(char *ch) { int temp=strlen(ch); ofstream f("B.txt"); for(int i=0;i<num;i++) { if(!equal(ch,sptr[i].getnum(),temp)) sptr[i].displays(f); } f.close(); } void allstudents::searchs(char *ch) { int count=0; double subxuefen=0; double subscore=0; int temp=strlen(ch); for(int i=0;i<num;i++) { if(equal(ch,sptr[i].getnum(),temp)) { sptr[i].displays(); count++; subxuefen=subxuefen+sptr[i].getxuefen(); subscore=subscore+sptr[i].getcomscore(); } sptr[i].inputsubscore(subscore); sptr[i].inputsubxuefen(subxuefen); } cout<<"共修:"<<count<<"科 实得总学分为:"<<subxuefen<<endl; } void allstudents::inputs() { students *p=new students [num]; for(int i=0;i<num;i++) p[i]=sptr[i]; delete []sptr; num++; sptr =new students [num]; for(int i=0;i<num-1;i++) sptr[i]=p[i]; sptr[num-1].inputs(cin); displays(); } void allstudents::displays() { ofstream f("B.txt"); for(int i=0;i<num;i++) sptr[i].displays(f); f.close(); } int main() { int m,n; m=getline(5);//学生数 n=getline(7); allstudentb stb(m); allstudents sts(n); int *score=new int[m]; int *xuefen=new int[m]; int x; char ch[8]; while(1) { cout<<"\n\n\n" <<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n" <<"\t\t※ ※\n" <<"\t\t※ 学生管理系统 ※\n" <<"\t\t※ ※\n" <<"\t\t※ 操作: ※\n" <<"\t\t※ 1--查询学生基本信息 ※\n" <<"\t\t※ 2--查询学生课程信息 ※\n" <<"\t\t※ 3--录入学生课程信息 ※\n" <<"\t\t※ 4--对学生信息进行排序 ※\n" <<"\t\t※ 5--删除学生信息 ※\n" <<"\t\t※ 6--退出 ※\n" <<"\t\t※ ※\n" <<"\t\t※ ※\n" <<"\t\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n"<<endl; cout<>x; switch(x) { case 1: { if(m!=0) { cout<>ch; cout<<endl; cout<<endl; stb.searchb(ch); } else { cout<<"无学生基本信息可查!请录入学生信息!!"<<endl; } cout<<endl; cout<<endl; }break; case 2: { cout<>ch; stb.searchpart(ch);//查询学号为ch的学生的基本信息 sts.searchs(ch);//查询学号为ch的学生的所有课程信息 }break; case 3: { int temp1,count=0; cout<>temp1; while(count<temp1) { sts.inputs(); count++; } }break; case 4: { cout<<endl; cout<<endl; cout<<"1--按学分排序"<<endl; cout<<"2--按综合成绩排序"<<endl; cout<>temp1; if(temp1==1) { cout<<endl; cout<<endl; cout<<"输入0按降序排列"<<endl; cout<<"输入1安升序排列"<<endl; cout<>temp2; sts.sortxuefen(temp2); sts.print(); } if(temp1==2) { cout<<endl; cout<<endl; cout<<"输入0按降序排列"<<endl; cout<<"输入1安升序排列"<<endl; cout<>temp2; sts.sortcomscore(temp2); sts.print(); } }break; case 5: { char num[8]; cout<>num; stb.deleb(num); sts.deles(num); cout<<"学生信息已删除!"<<endl; }break; case 6:return 0; default:break; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值