美文网首页
企业管理系统

企业管理系统

作者: Cathy_cheng | 来源:发表于2017-03-30 20:11 被阅读0次

    企业管理系统做了接近4天,能够明显感觉到自己的能力提升了,很多以前根本想不到的代码,在这次项目里都自主地用上了。

    在这里我要记录一下这个项目哪些地方对我自身知识库的更新:

    1、在数据库造表的时候,需要添加default charset=utf8,才能够在表中正确显示中文信息。e.g.:table xxx1(name char(20))default charset=utf8;

    2、在基类函数person中,首先在基类的构造函数中对每个私有成员进行初始化(拷贝函数是赋值),然后写了4个纯虚函数:

               a、计算工资 calssalary

               b、从数据库下载得到工资后对容器进行初始化工资setsalary

               c、奖罚员工使用的函数,在四个分类中 “ 重写 ” 实现award

               d、在查询员工信息时使用的output

    最后对company “友元”,使company能够访问person中的所有成员和函数。

    3、在company类中写了一个私有成员向量容器vector<person *> worker; 并在类中定义了11个成员函数,分别用于数据的增删改查。

               a、 包含头文件<iostream>

                      cin.clear(); //改变cin的状态标识符 

                      cin.ignore(10,'\n'); //忽略10个字符,遇到\n结束忽略。 cin.sync()每次只忽略一个字符。

               b、在建立每一个vector成员时,首先需要明白vector的成员是一个person型的指针变量,所以vector里的每一个成员装的是不同类的但是继承于person类的子类成员。先创建一个类person *per;再根据duty的不同new一个与duty吻合的子类:per = new manage(……)。创建成功后计算相应工资,用worker.push_back(per)装入容器中。

               c、在删除成员时,for(int i = 0; i < worker.size(); i++)循环遍历容器进行id的匹配,用worker.erase(worker.begin()+i)进行成员删除。在删除一个员工时他的编号会被保存,此时容器的size就会变少,当遍历时就会少一个人,此刻就需要查找编号最大的那一个,然后进行添加成员(在最大编号的基础上)。

               d、在对员工信息进行修改时,涉及到文件的操作,包含头文件<fstream>,举个例子                   

                     ofstream("text.txt",ios::app)    // 对文件进行追加写入       

                     fout << "……";    //即可讲……输入到text.txt文件中

    补充:ios::app 添加到文件尾

               ios::ate 把文件标志放在末尾而非起始。

               ios::trunc 默认. 截断并覆写文件。

               ios::nocreate 文件不存在也不创建。

              ios::noreplace 文件存在则失败。 

    详情见http://www.cnblogs.com/yingying0907/archive/2012/08/17/2643489.html

                 e、修改级别的时候,需要创建一个新的与级别对应的空间保存到容器中,把当前的数据放倒新的new中,然后删除当前空间。

                 f、查询信息:按编号顺序查询,用for循环i++与id进行匹配,使员工按编号输出。按级别查询,用了四次for循环一一输出每个级别信息。还可以按级别查询……

                g、用迭代器把容器中的信息保存到数据库中,关键代码如下:

    ```

    vector::iterator i = worker.begin();

    while(i != worker.end())

    {

    sprintf(buff,"%s%d,'%s', '%s' , %d, %lf)",buf,

    (*i)->Id,

    (*i)->Name,

    (*i)->Passwd,

    (*i)->Duty,

    (*i)->Earning

    );

    mysql_query(conn,buff);

    i++;

    }

    ```

              h、把mysql的信息保存到容器中,关键代码如下:

    while( (row = mysql_fetch_row(res)) != NULL )

    {

    id++;

    switch(atoi(row[3]))

    {

    case 1:per = new Manage(atoi(row[0]), row[1], row[2], atoi(row[3]));

    per->SetSalary(atoi(row[4]));

    break;

    case 2:per = new SaleManager(atoi(row[0]), row[1], row[2], atoi(row[3]),0);

    per->SetSalary(atoi(row[4]));

    break;

    case 3:per = new Technician(atoi(row[0]), row[1], row[2], atoi(row[3]),0);

    per->SetSalary(atoi(row[4]));

    break;

    case 4:per = new Sales(atoi(row[0]), row[1], row[2], atoi(row[3]),0);

    per->SetSalary(atoi(row[4]));

    break;

    }

    worker.push_back(per);

    }

          i、在登陆界面,也需要下载数据库,判断员工编号和密码进行登录,完成三次错误登录退出登录并等待6秒,这里用到<ctime>数据库中的clock()函数,关键代码如下:

    void delay_msec(int msec) 

     clock_t now = clock(); 

     clock_t d; cout << "6秒后重新登陆……" << endl; 

     while(clock() - now < msec) {}

     }

    在调用此函数时,delay_msec(6000000) 可完成延时6秒。

    相关文章

      网友评论

          本文标题:企业管理系统

          本文链接:https://www.haomeiwen.com/subject/nicpottx.html