Выводклиентов, неимеющихльгот
SELECT A.surname FROM Klient AS A WHERE A.id_klient not IN (select id_klient from lg_ab);
Выводклиентов, неимеющихуслуг
SELECT A.surname FROM Klient AS A WHERE A.id_klient not IN (select id_klient from ys_ab);
Выводсостоянийсчетов
SELECT id_klient,surname,ab_name,'norm' from Klient where bill>0 UNION SELECT id_klient,surname,ab_name,'minus' from Klient where bill<0;
Выводсостоянийсроковуслуг
SELECT *,Srok-Now() FROM ys_ab where (Srok-Now())>0 union SELECT *,Srok-Now() FROM ys_ab where (Srok-Now())<0;
Обновитьналичиедолга
update klient set [More info]='imeet dolg' where id_klient in (select id_klient from klient where bill<0);
Обновитьотсутствиедолга
update klient set [More info]='ne imeet dolg' where id_klient in (select id_klient from klient where bill>0);
4. Описание групп пользователей ИС
В данной области были выделены две группы пользователей.
Первая группа – менеджер-оператор:
- возможность просмотра таблиц "Клиенты", "Рекламы", "Льготы-Клиенты", "Услуги-Клиенты", "Оплаты".
- возможность выполнения всех перечисленных в анализе требований действий.
- возможность внесения оплаты.
Вторая группа – администратор:
- возможность просмотра таблиц "Клиенты", "Услуги", "Льготы-Клиенты", "Услуги-Клиенты", "Оплаты".
- возможность выполнения всех перечисленных в анализе требований действий.
- возможность внесения оплаты.
- возможность просмотра журнала событий, произошедших в системе.
- возможность изменения всех таблиц (кроме журнала событий):
-редактирование записей.
-добавление записей.
- удаление записей.
- возможность создания нового пользователя.
Интерфейс ИС
Программный продукт содержит одно окно, которое в зависимости от выполняемых действий преобразуется под выполняемое действие
1. Первоначальное окно программы:
2. Окно программы, которое видит менеджер-оператор после ввода своего логина и пароля:
3. Окно программы, которое видит менеджер-оператор после нажатия кнопки "Таблицы":
Окно программы, которое видит менеджер-оператор после нажатия кнопки "Функции":
4. Окно программы, которое видит менеджер-оператор после нажатия кнопки "Оплата":
При этом, пользователь вводит номер в поле ввода номера и автоматически вписывается фамилия в поле фамилии, которою в последствии пользователь должен согласовать с клиентом.
5. Окно программы, которое видит менеджер-оператор после выбора пункта в меню "Таблицы":
6. Окно программы, которое видит менеджер-оператор после выбора пункта в меню "Функции":
7. Окно программы, которое видит администратор после ввода своего логина и пароля:
8. Окно программы, которое видит администратор после нажатия кнопки "Изменить Клиент-Льгота":
9. Окно программы, которое видит администратор после нажатия кнопки "Добавить запись":
10. Окно программы, которое видит администратор после нажатия кнопки "Добавить льготу":
11. Окно программы, которое видит администратор после нажатия кнопки "Изменить Клиент-Услуга":
12. Окно программы, которое видит администратор после нажатия кнопки "Добавить запись":
13. Окно программы, которое видит администратор после нажатия кнопки "Добавить услугу":
Сообщения программы, причины, их вызывающие, и реакция пользователя на сообщения
-Сообщение о неверном имени пользователя или пароля.
При возникновении данной ошибки пользователю выводится сообщение о возникновении данной ситуации, очищается поле пароля и система ждет повторного ввода.
-Сообщение о неверном внесении оплаты.
При возникновении данной ошибки пользователю выводится сообщение о возникновении данной ситуации, очищаются все поля ввода. Требуется ввести верные данные.
-Сообщение о неверном внесении нового пользователя.
При возникновении данной ошибки пользователю выводится сообщение о возникновении данной ситуации, очищаются все поля ввода. Требуется ввести верные данные.
5. Тексты программы
#pragmaonce
intzap=0;//переменная для определения текущего запроса
intid=0;//переменная для определения текущего пользователя в системе
intlevel=0;//переменная для определения выдаваемых функций пользователю
intop_new=-1;//переменная для определения действий кнопки "добавить"
intChoiseToLV2=0;//переменная, определяющая выводимую и вводимую информацию в функциях.
//участок кода, реализующий один из запросов на вывод таблиц в программе..в основном в остальных запросах изменяется лишь значение переменной q, в которую и вписывается сам запрос.
private: System::Void listBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
this->listView1->Visible=true;
this->ClientSize = System::Drawing::Size(960, 580);
this->listView1->Items->Clear();
cn->Open();
int choise=this->listBox1->SelectedIndex;
if(choise==0)
{
String ^q="Select * from Klient;";
System::Data::OleDb::OleDbCommand^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader();
int k=0;
while(rdr->Read())
{
this->columnHeader1->Text=L"ид";
this->listView1->Items->Add(Convert::ToString(rdr[0]));
this->columnHeader2->Text=L"Фамилия";
this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[1]));
this->columnHeader3->Text=L"Имя";
this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[2]));
this->columnHeader4->Text=L"Номер";
this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[3]));
this->columnHeader5->Text=L"Счет";
this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[4]));
this->columnHeader6->Text=L"Доп.инф.";
this->listView1->Items[k]->SubItems->Add(Convert::ToString(rdr[5]));
this->columnHeader7->Text=L"";
k++;
}
rdr->Close();
cn->Close();}}
//действия при нажатии на кнопку "Внести" в меню "Оплата".
private: System::Void button11_Click(System::Object^ sender, System::EventArgs^ e) {
String ^q;
System::Data::OleDb::OleDbCommand ^cmd;
System::Data::OleDb::OleDbDataReader ^rdr;
cn->Open();
if(op_new==1)
{
double summ_ins=Convert::ToDouble(this->textBox8->Text);
double summ;
int chosen_id;
q="Select * from klient";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
while(rdr->Read())
{
if(Convert::ToString(rdr[1])==this->comboBox1->Text && Convert::ToInt32(rdr[3])==Convert::ToInt32(this->comboBox2->Text))
{
chosen_id=Convert::ToInt32(rdr[0]);
summ=summ_ins+Convert::ToDouble(rdr[4]);
q="update klient set bill ='"+Convert::ToString(summ)+"' where id_klient="+chosen_id+";";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
q="INSERT INTO Oplata ( Data, summ, id_klient )values (Date(),'"+Convert::ToString(summ_ins)+"','"+chosen_id+"'); ";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
}
}
rdr->Close();
q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Внесениесуммы "+Convert::ToString(summ_ins)+" насчетклиентас ID "+chosen_id+"');";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
rdr->Close();
}
}
//действия при нажатии на кнопку "Изменить"
private: System::Void button13_Click(System::Object^ sender, System::EventArgs^ e) {
cn->Open();
if(ChoiseToLV2==1)
{
String ^q="update lg_ab SET Data='"+this->textBox10->Text+"',Srok='"+this->textBox11->Text+"',id_lgot="+Convert::ToInt32(this->textBox12->Text)+",id_klient="+Convert::ToInt32(this->textBox13->Text)+" where id_lg_ab="+Convert::ToInt32(this->textBox9->Text);
System::Data::OleDb::OleDbCommand ^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader();
rdr->Close();
q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Изменениезаписивтаблицеклиент-льготас ID "+Convert::ToInt32(this->textBox9->Text)+"');";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
rdr->Close();
}
if(ChoiseToLV2==4)
{
String ^q="update ys_ab SET Data='"+this->textBox10->Text+"',Srok='"+this->textBox11->Text+"',id_service="+Convert::ToInt32(this->textBox12->Text)+",id_klient="+Convert::ToInt32(this->textBox13->Text)+" where id_ys_ab="+Convert::ToInt32(this->textBox9->Text);
System::Data::OleDb::OleDbCommand ^cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
System::Data::OleDb::OleDbDataReader ^rdr=cmd->ExecuteReader();
rdr->Close();
q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Изменениезаписивтаблицеклиент-услугас ID "+Convert::ToInt32(this->textBox9->Text)+"');";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
rdr->Close();
}
cn->Close();
}
//действия при нажатии на кнопку "Удалить"
private: System::Void button14_Click(System::Object^ sender, System::EventArgs^ e) {
cn->Open();
System::Data::OleDb::OleDbCommand ^cmd;
System::Data::OleDb::OleDbDataReader ^rdr;
if(ChoiseToLV2==1)
{
String ^q="delete from lg_ab where id_lg_ab="+Convert::ToInt32(this->textBox9->Text);
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удалениезаписивтаблицеклиент-льготас ID "+Convert::ToInt32(this->textBox9->Text)+"');";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
rdr->Close();
}
if(ChoiseToLV2==2)
{
String ^q="delete from lgot where id_lgot="+Convert::ToInt32(this->textBox9->Text);
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'Удалениезаписивтаблицельготас ID "+Convert::ToInt32(this->textBox9->Text)+"');";
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
rdr->Close();
}
if(ChoiseToLV2==3)
{
String ^q="delete from Klient where id_klient="+Convert::ToInt32(this->textBox9->Text);
cmd=gcnew System::Data::OleDb::OleDbCommand(q,cn);
rdr=cmd->ExecuteReader();
rdr->Close();
q="insert into changes(id_user,data,Opisanie) values("+id+",Now(),'УдалениезаписивтаблицеКлиентс ID "+Convert::ToInt32(this->textBox9->Text)+"');";