企业管理系统

企业管理系统做了接近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 worker; 并在类中定义了11个成员函数,分别用于数据的增删改查。

           a、 包含头文件

                  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、在对员工信息进行修改时,涉及到文件的操作,包含头文件,举个例子                   

                 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秒,这里用到数据库中的clock()函数,关键代码如下:

void delay_msec(int msec) 

 clock_t now = clock(); 

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

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

 }

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

你可能感兴趣的:(企业管理系统)