#include "menu.h"
#include <iostream>
#include <stdio.h>
using namespace std;
void changemenu()
{
printf("\n\n");
printf("\t\t\t\t*******************************\n");
printf("\t\t\t\t** 1.修改工资 **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 2.修改年龄 **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 3.修改工资(每小时) **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 4.修改姓名 **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 5.修改性别 **\n");
printf("\t\t\t\t** **\n");
printf("\t\t\t\t** 6.返回 **\n");
printf("\t\t\t\t*******************************");
printf("\n\n");
cout << "请选择您要进行的操作:";
}
void mangermenu()
{
cout << "\n\n";
printf(" 欢迎进入职工管理系统!\n");
printf(" **************************************************\n");
printf(" ** 1.增加职工 **\n");
printf(" ** **\n");
printf(" ** 2.开除职工 **\n");
printf(" ** **\n");
printf(" ** 3.修改职工信息 **\n");
printf(" ** **\n");
printf(" ** 4.搜索职工信息 **\n");
printf(" ** **\n");
printf(" ** 5.浏览职工信息 **\n");
printf(" ** **\n");
printf(" ** 6.发工资 **\n");
printf(" ** **\n");
printf(" ** 7.返回 **\n");
printf(" **************************************************\n");
printf("请按键选择:");
}
void mainmenu()
{
printf("\n\n");
printf(" 欢 迎 使 用 图 书 管 理 系 统 !\n");
printf(" **************************************************\n");
printf(" ** 1.登录 **\n");
printf(" ** **\n");
printf(" ** 2.注册 **\n");
printf(" ** **\n");
printf(" ** 3.修改密码 **\n");
printf(" ** **\n");
printf(" ** 4.退出 **\n");
printf(" **************************************************\n");
printf("请按键选择:");
}
#include <iostream>
#include <Windows.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include "menu.h"
#include "sqlite3.h"
#pragma comment(lib,"sqlite3.lib")
#define LEDTEST 0
using namespace std;
class Worker
{
private:
int number;
int salary;
int age;
int working_hours;
int salary_hour;
string name;
string sex;
class Worker* next;
public:
void CreateWorkerNode();
void Output();
void set_rand_working_hours(Worker* p);
void set_number(int _number) { number = _number; }
void set_salary(int _salary) { salary = _salary; }
void set_age(int _age) { age = _age; }
void set_working_hours(int _working_hours) { working_hours = _working_hours; }
void set_salary_hour(int _salary_hour) { salary_hour = _salary_hour; }
void set_name(string _name) { name = _name; }
void set_sex(string _sex) { sex = _sex; }
void set_next(Worker* _next) { next = _next; }
int get_number() { return number; }
int get_salary() { return salary; }
int get_age() { return age; }
int get_working_hours() { return working_hours; }
int get_salary_hour() { return salary_hour; }
string get_name() { return name; }
string get_sex() { return sex; }
Worker* get_next() { return next; }
};
class Manger
{
private :
string account;
string password;
string spassword;
int balance;
class Manger* next;
public:
void CreateMangerNode();
void Login();
void Register();
void change_password();
void Payoff(Manger* mp);
void Add();
void Delete();
void Modify();
void Seek();
void set_rand_balance(Manger* p);
public:
void set_account(string _account) { account = _account; }
void set_password(string _password) { password = _password; }
void set_spassword(string _spassword) { spassword = _spassword; }
void set_balance(int _balance) { balance = _balance; }
void set_next(Manger* _next) { next = _next; }
string get_account() { return account; }
string get_password() { return password; }
string get_spassword() { return spassword; }
int get_balance() { return balance; }
Manger* get_next() { return next; }
};
class Sql
{
private :
char** Result;
int Row;
int Column;
public:
Sql(int Row = 0, int Column = 0) {}
char** get_Result() { return Result; }
int& get_Row() { return Row; }
int& get_Column() { return Column; }
public:
bool sql_exec(string sql,int flag);
void update_exec(string sql);
void open_db();
void close_db();
void pay_off(Manger* mp, int sum);
};
class Link
{
private:
Worker* head;
Manger* mhead;
public:
Link() { head = NULL; mhead = NULL; mhead = new Manger; head = new Worker; head->set_next(NULL); }
Worker* get_head() { return head; }
Manger* get_mhead() { return mhead; }
void craete_worker_table();
void create_manger_table();
void MangerFunction(Manger* p);
void _main();
};
int n = 10;
sqlite3* db = NULL; sqlite3* root = NULL;
Worker* head = NULL; Worker* _end = NULL;
Manger* mhead = NULL; Manger* mend = NULL;
bool Sql::sql_exec(string sql, int flag )
{
if (flag == 1)
{
if (sqlite3_exec(db, sql.c_str(), NULL, NULL, NULL))
{
return true;
}
else
{
return false;
}
}
if (flag == 2)
{
if (sqlite3_exec(root, sql.c_str(), NULL, NULL, NULL))
{
return true;
}
else
{
return false;
}
}
}
void Sql::update_exec(string sql)
{
int ret = sqlite3_exec(db, sql.c_str(), NULL, NULL,NULL);
if (ret != SQLITE_OK)
{
cout << "修改失败!\n" << endl;
system("pause");
}
else
{
cout << "修改成功!";
system("pause");
}
}
void Sql::open_db()
{
if (sqlite3_open("worker.db", &db) != SQLITE_OK)
{
cout << "文件打开失败!\n";
system("pause");
exit(0);
}
if (sqlite3_open("manger.db", &root) != SQLITE_OK)
{
cout << "文件打开失败!\n";
system("pause");
exit(0);
}
}
void Sql::pay_off(Manger* mp, int sum)
{
Worker* wp = NULL;
Worker* pp = head->get_next();
string sql;
char buf[500];
mp->set_balance(mp->get_balance() - sum);
sprintf_s(buf, "update manger set balance=%d;", mp->get_balance() - sum);
sql = buf;
sqlite3_exec(root, sql.c_str(), NULL, NULL, NULL);
while (pp)
{
pp->set_salary(pp->get_salary_hour() * pp->get_working_hours() + pp->get_salary());
pp->set_working_hours(0);
pp = pp->get_next();
}
pp = head->get_next();
while (pp)
{
sprintf_s(buf, "update worker set salary=%d,working_hours=%d where number=%d;", pp->get_salary(), 0, pp->get_number());
sql = buf;
sqlite3_exec(db, sql.c_str(), NULL, NULL, NULL);
pp = pp->get_next();
}
system("cls");
cout << "\n\n\n\n工资发放成功!\n";
wp->Output();
system("pause");
}
void Sql::close_db()
{
sqlite3_close(db);
sqlite3_close(root);
}
#if LEDTEST
void Link::create_manger_table()
{
int ret;
string sql;
sql = "create table manger(account text primary key not null, \
password text not null,\
spassword text not null,\
balance real);";
ret = sqlite3_exec(root, sql.c_str(), NULL, NULL, NULL);
if (ret != SQLITE_OK)
{
cout << "已创建此表!";
system("pause");
}
}
void Link::craete_worker_table()
{
int ret;
string sql;
sql = "create table worker(number real primary key not null, \
salary real check(salary > 0) not null, \
age real check(age > 0) not null, \
working_hours real,\
salary_hour real not null,\
name text not null,\
sex text not null);";
ret = sqlite3_exec(db, sql.c_str(), NULL, NULL, NULL);
if (ret != SQLITE_OK)
{
cout << "已创建此表!!";
system("pause");
}
}
#endif
void Worker::CreateWorkerNode()
{
Sql* sp = new Sql;
string sql;
char** Result = sp->get_Result();
if (sqlite3_get_table(db, "select * from worker order by number desc;", &Result, &sp->get_Row(), &sp->get_Column(), NULL) != SQLITE_OK)
{
cout << "未找到worker表!" << endl;
system("pause");
return;
}
for (int i = 7; i < (sp->get_Row() + 1) * sp->get_Column();)
{
Worker* p = new Worker;
p->set_number(atoi(Result[i])); i++;
p->set_salary(atoi(Result[i])); i++;
p->set_age(atoi(Result[i])); i++;
p->set_rand_working_hours(p); i++;
p->set_salary_hour(atoi(Result[i])); i++;
p->set_name(Result[i]); i++;
p->set_sex(Result[i]); i++;
_end->set_next(p);
p->set_next(NULL);
_end = _end->get_next();
}
sqlite3_free_table(Result);
}
void Worker::set_rand_working_hours(Worker* p)
{
int a[10];
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
{
a[i] = (rand() % (24 - 16 + 1)) + 16 ;
}
p->set_working_hours(a[(rand() % (10 - 1 + 1)) + 1] * n);
n = n - 2;
if (n == 6)
{
n = 9;
}
if (n == 5)
{
n = 10;
}
}
void Worker::Output()
{
Worker* p = head->get_next();
cout << "\nnumber\tsalary\tage\tworking_hours\tsalary_hour\tname\tsex\n" << endl;
while (p)
{
cout << p->get_number() << "\t" << p->get_salary() << "\t" << p->get_age() << "\t"
<< p->get_working_hours() << "\t\t" << p->get_salary_hour() << "\t\t" << p->get_name() << "\t" << p->get_sex() << endl;
p = p->get_next();
}
_getch();
}
void Manger::CreateMangerNode()
{
Sql* sp = new Sql;
string sql;
char** Result;
int Row ;
int Column ;
if (sqlite3_get_table(root, "select * from manger;", &Result, &Row, &Column, NULL) != SQLITE_OK)
{
cout << "未找到manger表!" << endl;
system("pause");
return;
}
for (int i = 4; i < (Row + 1) * Column;)
{
Manger* p = new Manger;
p->set_account(Result[i]); i++;
p->set_password(Result[i]); i++;
p->set_spassword(Result[i]); i++;
p->set_rand_balance(p); i++;
mend->set_next(p);
p->set_next(NULL);
mend = mend->get_next();
}
sqlite3_free_table(Result);
}
void Manger::Add()
{
int number;
int salary;
int age;
int salary_hour;
char name[200];
char sex[200];
char buf[600];
int n;
Sql* sp = NULL;
Worker* p = new Worker;
string sql;
cout << "请输入要增加的人数:";
cin >> n;
for (int i = 0; i < n; i++)
{
system("cls");
cout << "请输入第" << i + 1 << "个职工的信息:\n";
cout << "请输入工号(按0退出):";
cin >> number;
if (number == 0)
{
return;
}
p->set_number(number);
cout << "请输入工资:";
cin >> salary;
p->set_salary(salary);
cout << "请输入年龄:";
cin >> age;
p->set_age(age);
cout << "请输入每小时工资:";
cin >> salary_hour;
p->set_salary_hour(salary_hour);
cout << "请输入姓名:";
cin >> name;
p->set_name(name);
cout << "请输入性别(男或女):";
while (cin >> sex)
{
if (strcmp(sex, "男") == 0 || strcmp(sex, "女") == 0)
{
p->set_sex(sex);
break;
}
else
{
cout << "请输入男或女:";
}
}
sprintf_s(buf, "insert into worker(number, salary, age, salary_hour, name, sex) values(%d,%d,%d,%d,'%s','%s');", number, salary, age, salary_hour, name, sex);
sql = buf;
if (sp->sql_exec(sql,1) != SQLITE_OK)
{
cout << "\n已有工号为" << number << "的职工!" << endl;
system("pause");
continue;
}
cout << "添加成功!!\n";
system("pause");
_end->set_next(p);
p->set_next(NULL);
_end = p;
}
}
void Manger::Delete()
{
Worker* p = head->get_next();
Sql* sp = NULL;
p->Output();
int number = 0;
int flag = 0;
string sql;
char buf[200];
cout << "请输入您要删除的职工号码(按0退出):";
while (cin >> number)
{
if (number == 0)
{
return;
}
while (p)
{
if (p->get_number() == number)
{
flag = 1;
break;
}
p = p->get_next();
}
if (flag)
{
break;
}
else
{
cout << "查无此人!请重新输入(按0退出):";
p = head->get_next();
}
}
p = head->get_next();
Worker* pp = head;
while (p)
{
if (p->get_number() == number)
{
if (p->get_next() == NULL)
{
head->set_next(NULL);
}
else
{
pp->set_next(p->get_next());
}
}
p = p->get_next();
pp = pp->get_next();
}
sprintf_s(buf, "delete from worker where number=%d;", number);
sql = buf;
if ( sp->sql_exec(sql,1) != SQLITE_OK)
{
cout << "删除失败!\n" << endl;
system("pause");
return;
}
cout << "删除成功!";
system("pause");
}
void Manger::Modify()
{
Worker* p = head->get_next();
Sql* sp = NULL;
int number;
int salary;
int age;
int salary_hour;
char name[20];
char sex[5];
int flag = 0;
string sql;
char buf[600];
p->Output();
cout << "请输入要修改职工的工号(按0退出):";
while (cin >> number)
{
if (number == 0)
{
return;
}
while (p)
{
if (p->get_number() == number)
{
flag = 1;
break;
}
p = p->get_next();
}
if (flag)
{
break;
}
else
{
cout << "查无此人!请重新输入(按0退出):";
p = head->get_next();
}
}
if (!flag)
{
return;
}
else
{
Sql* sp = NULL;
int sign = 0;
while (1)
{
system("cls");
changemenu();
switch (_getch())
{
case '1':
system("cls");
cout << "请输入要修改的工资:";
cin >> salary;
p->set_salary(salary);
sprintf_s(buf, "update worker set salary=%d where number=%d", salary, number);
sql = buf;
sp->update_exec(sql);
break;
case '2':
system("cls");
cout << "请输入要修改的年龄:";
cin >> age;
p->set_age(age);
sprintf_s(buf, "update worker set age=%d where number=%d", age, number);
sql = buf;
sp->update_exec(sql);
break;
case '3':
system("cls");
cout << "请输入要修改的每小时的工资:";
cin >> salary_hour;
p->set_age(salary_hour);
sprintf_s(buf, "update worker set salary_hour=%d where number=%d", salary_hour, number);
sql = buf;
sp->update_exec(sql);
break;
case '4':
system("cls");
cout << "请输入要修改的姓名:";
cin >> name;
p->set_name(name);
sprintf_s(buf, "update worker set name='%s' where number=%d", name, number);
sql = buf;
sp->update_exec(sql);
break;
case '5':
system("cls");
cout << "请输入要修改的性别:";
while (cin >> sex)
{
if (strcmp(sex, "男") == 0 || strcmp(sex, "女") == 0)
{
p->set_sex(sex);
break;
}
else
{
cout << "请输入男或女:";
}
}
sprintf_s(buf, "update worker set sex='%s' where number=%d", sex, number);
sql = buf;
sp->update_exec(sql);
break;
case '6':
system("cls");
sign = 1;
break;
}
if (sign)
{
break;
}
}
}
}
void Manger::Seek()
{
Worker* p = head->get_next();
int number;
int flag = 0;
cout << "请输入要查找职工的工号(按0退出):";
while (cin >> number)
{
if (number == 0)
{
return;
}
while (p)
{
if (p->get_number() == number)
{
flag = 1;
break;
}
p = p->get_next();
}
if (flag)
{
break;
}
else
{
cout << "查无此人!请重新输入(按0退出):";
p = head->get_next();
}
}
cout << "\nnumber\tsalary\tage\tname\tsex\n";
cout << p->get_number() << "\t" << p->get_salary() << "\t" << p->get_age() << "\t"
<< p->get_name() << "\t" << p->get_sex() << endl;
system("pause");
}
void Manger::Login()
{
Link* lp = NULL;
Manger* p = mhead->get_next();
char c;
int i;
int k = 0;
int flag = 0;
int cnt = 3;
char account[200];
char password[200];
cout << "请输入您的账户(按0退出):";
while (cin >> account)
{
if (strcmp(account,"0") == 0)
{
return;
}
if (strlen(account) <= 15)
{
break;
}
else
{
cout << "请输入长度为1到15的账户(按0退出):";
}
}
cout << "请输入密码(按0退出):";
for (i = 0; (c = _getch()) != '\r';)
{
if (c == '0')
{
return;
}
if (i <= 15 && isprint(c))
{
password[i] = c;
i++;
k++;
cout << "*";
}
if (k > 0 && c == '\b')
{
i--;
k--;
cout << "\b" << " " << "\b";
}
}
password[i] = '\0';
cout << "\n";
while (p)
{
if (p->get_account() == account)
{
flag = 1;
while (p->get_password() != password)
{
cnt--;
if (cnt == 0)
{
system("cls");
cout << "\n\n\n\n\n\n\n";
cout << "密码输入次数已用完!!即将退出登录页面...";
Sleep(1500);
return;
}
cout << "密码错误!您还有" << cnt << "次机会" << endl;
cout << "请重新输入(按0退出):";
for (i = 0; (c = _getch()) != '\r';)
{
if (c == '0')
{
return;
}
if (i <= 15 && isprint(c))
{
password[i] = c;
i++;
k++;
cout << "*";
}
if (k > 0 && c == '\b')
{
i--;
k--;
cout << "\b" << " " << "\b";
}
}
password[i] = '\0';
cout << "\n";
}
system("cls");
cout << "\n\n\n\n";
cout << "管理层" << account << "登录成功!!\n";
cout << "公司的总资产为" << p->get_balance() << "元\n";
system("pause");
lp->MangerFunction(p);
return;
}
p = p->get_next();
}
if (!flag)
{
cout << "不存在此账户!请先前往注册!" << endl;
system("pause");
}
}
void Manger::Register()
{
Link* lp = NULL;
char account[200];
char password[200];
char spassword[200];
Manger* p = new Manger;
cout << "\n\n\n\n\n\n\n";
cout << "请输入账户(按0退出):";
while (cin >> account)
{
if (strcmp(account, "0") == 0)
{
return;
}
if (strlen(account) <= 16 )
{
break;
}
else
{
cout << "请输入长度为1到16位的账户:";
}
}
p->account = account;
cout << "请输入密码(按0退出):";
while (cin >> password)
{
if (strcmp(password, "0") == 0)
{
return;
}
if (strlen(password) <= 16)
{
break;
}
else
{
cout << "请输入长度为1到16位的密码(按0退出):";
}
}
p->password = password;
cout << "请输入您的密保(按0退出):";
while (cin >> spassword)
{
if (strcmp(spassword, "0") == 0)
{
return;
}
if (strlen(spassword) <= 16)
{
break;
}
else
{
cout << "请输入长度为1到16位的密保(按0退出):";
}
}
p->spassword = spassword;
mend->set_next(p);
mend = p;
mend->set_next(NULL);
Sql* sp = NULL;
string sql;
char buf[500];
sprintf_s(buf, "insert into manger(account,password,spassword) values('%s','%s','%s');", account, password, spassword);
sql = buf;
char* Errmsg;
int ret = sqlite3_exec(root, sql.c_str(), NULL, NULL, &Errmsg);
if (ret != SQLITE_OK)
{
cout << "已有此账户!!\n注册失败!!" << endl;
cout << Errmsg << endl;
system("pause");
return;
}
system("cls");
cout << "\n\n\n\n\n\n\n";
cout << "\t\t\t\t\t*******************************\n";
cout << "\t\t\t\t\t** **\n";
cout << "\t\t\t\t\t 管理层" << account << "注册成功!!\n";
cout << "\t\t\t\t\t** **\n";
cout << "\t\t\t\t\t*******************************\n";
system("pause");
}
void Manger::change_password()
{
Manger* p = mhead->get_next(), *mp = new Manger;
Sql* sp = NULL;
string sql;
char buf[500];
int flag = 0;
int sign = 0;
char maccount[200];
char mpassword[200];
char mspassword[200];
cout << "请输入您的账户(按0退出):";
while (cin >> maccount)
{
if (strcmp(maccount, "0") == 0)
{
return;
}
while (p)
{
if (p->get_account() == maccount)
{
flag = 1;
break;
}
p = p->get_next();
}
if (flag)
{
break;
}
else
{
cout << "此账号不存在!请重新输入(按0退出):";
p = mhead->get_next();
}
}
if (flag)
{
p = mhead->get_next();
cout << "请输入您设置的密保(按0退出):";
while (cin >> mspassword)
{
if (strcmp(mspassword, "0") == 0)
{
return;
}
while (p)
{
if (p->get_spassword() == mspassword)
{
sign = 1;
break;
}
p = p->get_next();
}
if (sign)
{
cout << "请输入修改后的密码(按0退出):";
while (cin >> mpassword)
{
if (strcmp(mpassword, "0") == 0)
{
return;
}
if (strlen(mpassword) <= 16)
{
break;
}
else
{
cout << "请输入长度为1到16位的密码(按0退出):";
}
}
p->set_password(mpassword);
sprintf_s(buf, "update manger set password='%s' where account='%s';", mpassword, maccount);
sql = buf;
sqlite3_exec(root, sql.c_str(), NULL, NULL, NULL);
cout << "密码修改成功!!\n";
system("pause");
return;
}
else
{
cout << "密保输入错误!!请重新输入(按0退出):";
p = mhead->get_next();
}
}
}
}
void Manger::Payoff(Manger* mp)
{
Worker* wp = NULL;
Sql* sp = NULL;
wp->Output();
int sum = 0;
int sign = 0;
Worker* p = head->get_next();
while (p)
{
sum += p->get_salary_hour() * p->get_working_hours();
p = p->get_next();
}
cout << "所有员工总工资为:" << sum << endl;
cout << "公司总资产为:" << mp->get_balance() << endl;
if (sum <= mp->get_balance())
{
while (1)
{
cout << "检测到当前公司总资产大于职工工资总和,是否发放工资?\n";
cout << "1.是 2.否\n";
switch (_getch())
{
case '1':
sp->pay_off(mp, sum);
sign = 1;
break;
case'2':
system("cls");
sign = 1;
break;
}
if (sign)
{
break;
}
}
}
else
{
cout << "检测到当前公司总资产小于职工总工资,暂时不能发放工资!!\n";
system("pause");
}
}
void Manger::set_rand_balance(Manger* p)
{
int a[10], b[10];
srand((unsigned)time(NULL));
for (int i = 0; i < 10; i++)
{
a[i] = (rand() % (900000 * (i + 1) - 500000 * (i + 1) + 1)) + 500000 * (i + 1);
}
for (int i = 0; i < 10; i++)
{
b[i] = (rand() % (10 - 1 + 1)) + 1;
}
p->set_balance(a[b[5]]);
}
void Link::MangerFunction(Manger* p)
{
int sign = 0;
Worker* pp = NULL;
Manger* mp = NULL;
while (1)
{
system("cls");
mangermenu();
switch (_getch())
{
case '1':
system("cls");
mp->Add();
break;
case '2':
system("cls");
mp->Delete();
break;
case '3':
system("cls");
p->Modify();
break;
case '4':
system("cls");
mp->Seek();
break;
case '5':
system("cls");
pp->Output();
break;
case '6':
system("cls");
mp->Payoff(p);
break;
case '7':
system("cls");
sign = 1;
break;
}
if (sign)
{
break;
}
}
}
void Link::_main()
{
Manger* p = new Manger;
Link* lp = new Link;
while (1)
{
system("cls");
mainmenu();
switch (_getch())
{
case '1':
system("cls");
p->Login();
break;
case '2':
system("cls");
p->Register();
break;
case '3':
system("cls");
p->change_password();
break;
case '4':
system("cls");
exit(0);
}
}
}
int main()
{
Sql* sp = NULL;
sp->open_db();
#if LEDTEST
Link link;
link.craete_worker_table();
link.create_manger_table();
#endif
head = new Worker; _end = new Worker; head->set_next(NULL); _end = head;
mhead = new Manger; mend = new Manger; mhead->set_next(NULL);mend = mhead;
Manger* mp = new Manger;Worker* wp = new Worker;
mp->CreateMangerNode();wp->CreateWorkerNode();
Link* lp = new Link;
lp->_main();
sp->close_db();
return 0;
}