3. 1 Các giao diện của chơng trình
3.1.6. Giao diện nhập danh sách sinh viên
a. Giao diện
Hình 6: Cập nhật danh sách sinh viên b. Mô tả chức năng
- Thêm:
Chọn tên khoa, tên hệ đào tạo, và nhập tên sinh viên, ngày sinh, quê quan, đối tợng của sinh viên cần thêm.
- Ghi:
+ Kiểm tra tính hợp lệ của các thông tin vào và đa ra thông báo (nếu có) + Kiểm tra xem là Ghi cho chức năng Thêm hay Sửa:
• Thêm: Cập nhật vào bảng TBLSINHVIEN trong CSDL.
• Sửa: Cập nhật vào bảng TBLSINHVIEN nơi thông tin sinh
viên cần chỉnh sửa. - Huỷ:
- Sửa:
+ Chọn tên sinh viên cần sửa trên bảng danh sách các sinh viên
+ Sửa lại thông tin ở các ô: tên khoa, tên hệ đào tạo, tên sinh viên, ngày sinh, quê quan, đối tợng.
- Xoá:
+ Chọn tên sinh viên bảng danh sách sinh viên + Thông báo có thực sự muốn xoá không.
• Nếu không: Huỷ bỏ thao tác này.
• Nếu xoá: Xoá tên sinh viên trong bảng TBLSINHVIEN.
- Thoát:
Thoát khỏi chức năng hiện tại.
3.1.7. Giao diên xử lý thu học phí
a. Giao diện
Hình 7: Xử lý thu học phí
STVH:Bùi Thị H ơng - 44B CNTT
b. Mô tả chức năng
* Form này bao gồm hai lới trong đó:
Lới bên trái: Chứa thông tin sinh viên của lớp đợc chọn chỉ bao gồm những sinh viên cha nộp hoặc nộp cha đủ của kỳ hiện tại
Lới bên phải: Chứa thông tin sinh viên của lớp đó bao gồm những sinh viên đã nộp (Đủ hoặc còn thiếu)
Ghi lại: Ghi sinh viên sinh viên nộp học phí, sau đó nháy vào nút in hóa đơn để in biên lai cho sinh viên.
3.1.8. Giao diện in danh sách sinh viên nộp học phí
Hình 8: Danh sách sinh viên nộp học phí
Lu toàn bộ những sinh viên tham gia nộp học phí.
Nếu muốn in danh sách này ra thi ta nháy chuột vào nút in danh sách, ngợc lại thì kích vào nút đóng.
3.1.9. Giao diện thống kê thông tin nộp học phí
Hình 9: Xem thông tin về sinh viên
Form này cho phép xem thông tin sinh viên sinh viên nộp học phí theo tng khoa, từng lớp hoặc từng ngày.
STVH:Bùi Thị H ơng - 44B CNTT
3.10. Giao diện thống kê thông tin những sinh viên nộp học phí trong khoảng thời gian nào đó
Hình 10. Thông kê danh sách sinh viên
Khi ban lãnh đạo muốn biết thông tin sinh viên đã nộp học phí trong khoảng thời gian nào đó thì sử dụng form này.
Nhập khoảng thời gian (từ ngày-> đến ngày) cần thống kê, sau đó kích vào nút hiện thị thì tất cả những sinh viên nộp học phí trong khoảng thời gian đó sẽ đợc lọc ra.
3.1.11. Thống kê tổng hợp nộp học phí của lớp đó
Hình 11: Tổng hợp học phí theo lớp
Thống kê tổng hợp học phí theo từng lớp. Chọn khoa đào tạo, hệ đào tạo và lớp học rồi nháy vào nút in danh sách, danh sách của lớp đó sẽ đợc in.
STVH:Bùi Thị H ơng - 44B CNTT
3.1.12. Giao diện thay đổi ngời sử dụng
Hình 12: Thay đổi ngời sử dụng
3.1.13. Giao diện khi muốn thêm ngời sử dụng
3.2. Chơng trình
Code chơng trình xử lý thu học phí (Form frmmain.cs)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace Hoc_phi {
public partial class frmMain: Form {
//Đối tượng của lớp DataService private DataServices myData;
//Đối tượng để đưa dữ liệu từ bảng vào DataSet private SqlDataAdapter myAdapter;
//Đối tượng (chỉ đọc) dữ liệu từ bảng private SqlDataReader myReader;
//Đối tượng chứa nội dung cỏc bảng CSDL private DataSet myDataset;
//Biến chứa xõu truy vấn CSDL public string strSql;
public int Malop; public int Masosv;
//Biến chứa học kỳ của sinh viờn đang nộp private int m_Hocky;
//Biến lấy giỏ trị học phớ của hệ đào tạo private int D_Money;
//Lấy số tiền mà sinh viờn đú phải đúng private int Money;
//Lấy mức giảm (%) private int Mucgiam; public bool Inhoadon;
//Biến dựng để xỏc định xem sinh viờn //vừa nộp là nộp lần 1 hay nhiều hơn 1 private bool Danop;
private int Mucphainop; public int Mahp_Conthieu; private int Dadong_Thieu; private int Conno_Thieu; public int So_tien_vua_nop; /// <summary>
/// </summary>
private void frmMain_Load(object sender, EventArgs e) {
myData = new DataServices(); }
//Hàm để đọc giỏ trị từ CSDL nguồn
private void btnGo_Click(object sender, EventArgs e) {
STVH:Bùi Thị H ơng - 44B CNTT
//======================================================================= //Lấy thụng tin Mó lớp khi biết mó khoa và tờn lớp
strSql = "SELECT tblLop.MaLop" + " FROM tblLop INNER JOIN" +
" tblKhoa ON tblLop.MaKhoa = tblKhoa.MaKhoa" + " WHERE (tblLop.TenLop = N'" + cboLop.Text.Trim() + "') AND (tblLop.MaKhoa = '" +
Convert.ToInt16(cboTenkhoa.SelectedValue.ToString()) + "')"; myReader = this.SetReader(strSql,
Program.LoGin.strConnection);
while (myReader.Read() == true) {
Malop = myReader.GetInt16(0); }
///////////////////////////////////////////////////////////// ////////////
strSql = "SELECT HOCKY FROM TBLLOP WHERE (TENLOP=N'" + cboLop.Text.Trim() + "') AND (MAKHOA='" +
Convert.ToInt16(cboTenkhoa.SelectedValue.ToString()) + "')"; myReader = this.SetReader(strSql,
Program.LoGin.strConnection);
while (myReader.Read() == true) { m_Hocky = myReader.GetInt16(0); } ///////////////////////////////////////////////////////////// //////////// try {
//Lọc dữ liệu trong CSDL sinh viờn sao cho lưới bờn trỏi chứa
//danh sỏch những sinh viờn của lớp được chọn nhưng khụng bao gồm //cỏc sinh viờn đó đúng đầy đủ và cỏc sinh viờn thuộc diện ưu tiờn giảm 100%
//Cũn lưới bờn phải chứa danh sỏch sinh viờn của lớp đú gồm những ng //nộp đủ hoặc nộp cũn thiếu
strSql = "SELECT
TBLSINHVIEN.MASV,TBLSINHVIEN.TENSV,TBLSINHVIEN.NGAYSINH,TBLSINHVIEN.MADT, TBLSINHVIEN.MAHDT" +
" FROM TBLSINHVIEN WHERE" +
" (TBLSINHVIEN.MALOP='" + Malop + "')" + " AND (TBLSINHVIEN.CONTHIEU!=0)";
//Khi thay đổi tờn lớp: Nếu trong DataGrid View đang cú dữ liệu cũ thỡ xúa
//đi trước khi đưa dữ liệu mới vào if (dgvSV.Rows.Count > 1)
myDataset.Tables[3].Clear();
//--- ---
myDataset = myData.SelectSqlData(strSql, Program.LoGin.strConnection, myDataset, "TBLSINHVIEN"); dgvSV.AutoGenerateColumns = false; dgvSV.DataSource = myDataset.Tables[3]; //--- //this.btnGo.Enabled = false; } catch {
} //======================================================================= if (dgvHocphi.Rows.Count > 1) { myDataset.Tables[4].Clear(); this.Load_Display_Table(); } else this.Load_Display_Table(); }
//Load bảng Học phớ để hiển thị lờn lưới (Khụng cho phộp Update) private void Load_Display_Table()
{
strSql = "SELECT * " +
" FROM tblHocPhi INNER JOIN" +
" tblSinhVien ON tblHocPhi.MaSV = tblSinhVien.MaSV" + " WHERE (tblHocPhi.MaSV IN" +
" (SELECT tblSINHVIEN.MASV" + " FROM tblSINHVIEN" +
" WHERE (TBLSINHVIEN.MALOP = '" + Malop + "')))"; myDataset = myData.SelectSqlData(strSql,
Program.LoGin.strConnection, myDataset, "TBLHOCPHI"); dgvHocphi.AutoGenerateColumns = false; dgvHocphi.DataSource = myDataset.Tables[4]; }
//Load bảng học phớ, cho phộp Update private void Load_Select_Update() {
strSql = "SELECT * FROM TBLHOCPHI";
myDataset = myData.SelectUpdateDataSet(strSql, Program.LoGin.strConnection, myDataset, "TBLHOCPHI");
} }
private void dgvSV_CellContentClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != myDataset.Tables[3].Rows.Count) { cboTenkhoa.Enabled = false; cboHedaotao.Enabled = false; cboLop.Enabled = false; btnGo.Enabled = false; //int Masv; ///////////////////////////////////////////////////////// ////////////////
//Xỏc định số tiền sinh viờn phải đúng trong trường hợp khụng ưu tiờn strSql = "SELECT HOCPHI FROM TBLHEDT WHERE MAHDT='" + myDataset.Tables[3].Rows[e.RowIndex][4].ToString() + "'";
myReader = this.SetReader(strSql, Program.LoGin.strConnection);
while (myReader.Read() == true) { D_Money = Convert.ToInt32(myReader.GetInt32(0)); } //--- STVH:Bùi Thị H ơng - 44B CNTT 46
//Xỏc định số tiền mà sinh viờn phải đúng đỳng theo mức ưu tiờn strSql = "SELECT GIAM FROM TBLDOITUONG WHERE MADT='" + myDataset.Tables[3].Rows[e.RowIndex][3].ToString() + "'";
myReader = this.SetReader(strSql, Program.LoGin.strConnection);
while (myReader.Read() == true) {
Mucgiam = myReader.GetInt16(0); }
Money = D_Money - D_Money * Mucgiam / 100;
//--- Masosv = Convert.ToInt32(myDataset.Tables[3].Rows[e.RowIndex][0]); //--- DataRow newRow = myDataset.Tables[4].NewRow();
newRow[1] = myDataset.Tables[3].Rows[e.RowIndex][0].ToString(); newRow[2] = myDataset.Tables[3].Rows[e.RowIndex][1].ToString(); newRow[3] = myDataset.Tables[3].Rows[e.RowIndex][3].ToString(); newRow[4] = Convert.ToString(Program.LoGin.Manguoithu); newRow[5] = Program.LoGin.MtNgaythu.Text.Trim(); newRow[6] = m_Hocky; newRow[8] = Money; //--- myDataset.Tables[4].Rows.Add(newRow); dgvSV.Enabled = false; this.btnCancel.Enabled = true; this.btnSave.Enabled = true; //--- //Kiểm tra xem sinh viờn được chọn đó nộp lần nào chưa bằng
cỏch //tỡm xem trong bảng Học phớ cú mó sinh viờn trựng với mó sinh viờn
//vừa được chọn trong bảng Sinh viờn hay khụng
strSql = "Select Mahp, Masv FROM TBLHOCPHI";
myReader = this.SetReader(strSql, Program.LoGin.strConnection); while (myReader.Read() == true)
{ if (Masosv != myReader.GetInt32(1)) { Danop = true; } else { Danop = false; Mahp_Conthieu = myReader.GetInt32(0); Masosv = myReader.GetInt32(1); return; } } } }
private void btnSave_Click(object sender, EventArgs e) {
try {
//Trường hợp sinh viờn nộp lần đầu tiờn của kỳ đú if (Danop == true)
if
(myDataset.Tables[4].Rows[myDataset.Tables[4].Rows.Count - 1] [7].ToString().Trim() == "")
MessageBox.Show("Bạn chưa nhập học phớ", "Thụng bỏo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else if
(Convert.ToInt32(myDataset.Tables[4].Rows[myDataset.Tables[4].Rows.Count - 1][7].ToString()) > Money)
MessageBox.Show("Số tiền bạn vừa nhập vượt quỏ mức quy định", "Cảnh bỏo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else { dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[7].Value = Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value); dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[6].Value = (Money - Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value)); //--- strSql = "Update tblSinhvien set danop='" +
Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value) + "'," +
" Conthieu='" + (Money -
Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value)) + "'" +
" where Masv='" + Masosv + "'"; myDataset = myData.SelectUpdateDataSet(strSql,
Program.LoGin.strConnection, myDataset, "tblSinhvien"); myData.UpdateDataSet(myDataset, "tblSinhvien"); this.Load_Select_Update(); myData.UpdateDataSet(myDataset, "TBLHOCPHI"); myDataset.Tables[4].Clear(); this.Load_Display_Table(); //--- this.btnCancel.Enabled = false; this.btnSave.Enabled = false; this.btnPrint.Enabled = true; dgvSV.Enabled = true; btnGo.PerformClick(); } }
//Trường hợp sinh viờn nộp lần thứ 2 trở đi, chương trỡnh sẽ tự động tỡm đến mó số của sinh viờn này trong lần nộp trước đú và cập nhật số tiền mới này vào số tiền đó nộp trước đú.Ở đõy sinh viờn cú thể nộp được nhiều lần
else if (Danop == false) {
if
(myDataset.Tables[4].Rows[myDataset.Tables[4].Rows.Count - 1] [7].ToString().Trim() == "")
MessageBox.Show("Bạn chưa nhập học phớ", "Thụng bỏo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
else {
strSql = "Select danop,conthieu from tblSinhvien where masv='" + Masosv + "'";
myReader = this.SetReader(strSql, Program.LoGin.strConnection);
while (myReader.Read() == true)
STVH:Bùi Thị H ơng - 44B CNTT
{ Dadong_Thieu = myReader.GetInt32(0); Conno_Thieu = myReader.GetInt32(1); } if (Convert.ToInt32(myDataset.Tables[4].Rows[myDataset.Tables[4].Rows.Count - 1][7].ToString()) > Conno_Thieu)
MessageBox.Show("Số tiền bạn vừa nhập vượt quỏ mức quy định", "Cảnh bỏo", MessageBoxButtons.OK,
MessageBoxIcon.Warning); else { dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[7].Value = Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value);
strSql = "Update tblHocphi set Dadong='" + (Dadong_Thieu + Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value)) + "'," + " Conno='" + (Money - Dadong_Thieu -
Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value)) + "'," + " VuaNop='" + Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[7].Value.ToString()) + "'," + " NgayThu='" + Convert.ToDateTime(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[3].Value) + "'" +
" where Mahp='" + Mahp_Conthieu + "'"; myDataset =
myData.SelectUpdateDataSet(strSql, Program.LoGin.strConnection, myDataset, "tblSinhvien");
myData.UpdateDataSet(myDataset, "tblHocphi"); //---
strSql = "Update tblSinhvien set Danop='" + (Dadong_Thieu + Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value)) + "'," +
" Conthieu='" + (Money - Dadong_Thieu - Convert.ToInt32(dgvHocphi.Rows[dgvHocphi.Rows.Count - 2].Cells[5].Value)) + "'" +
" where Masv='" + Masosv + "'";
//--- myDataset = myData.SelectUpdateDataSet(strSql,
Program.LoGin.strConnection, myDataset, "tblSinhvien"); myData.UpdateDataSet(myDataset, "tblSinhvien"); //--- --- myDataset.Tables[4].Rows[myDataset.Tables[4].Rows.Count - 1].Delete(); this.Load_Select_Update(); //Cập nhật vào CSDL myData.UpdateDataSet(myDataset, "TBLHOCPHI"); myDataset.Tables[4].Clear(); this.Load_Display_Table(); //--- dgvSV.Enabled = true; this.btnCancel.Enabled = false; this.btnSave.Enabled = false; this.btnPrint.Enabled = true; btnGo.PerformClick(); } } }
cboTenkhoa.Enabled = true; cboHedaotao.Enabled = true; ; cboLop.Enabled = true;
btnGo.Enabled = true; }
catch (SqlException ex) {
MessageBox.Show(ex.Message); }
}
private void btnDelete_Click(object sender, EventArgs e) {
try
{
DialogResult dialogResult;
dialogResult = MessageBox.Show("Bạn cú chắc chắn xúa bản ghi này khụng?", "Thụng bỏo", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes) {
//Khi xúa 1 sinh viờn trong bảng học phớ cú nghĩa ta xem sinh viờn đú chưa nộp học phớ do đú trong bảng tblSinhviờn ta phải cập nhật lại thụng tin về việc nộp học phớ của sinh viờn đú
Masosv =
Convert.ToInt32(myDataset.Tables[4].Rows[dgvHocphi.CurrentRow.Index] [1].ToString());
strSql = "Select phainop from tblsinhvien where masv='" + Masosv + "'";
myReader = this.SetReader(strSql, Program.LoGin.strConnection);
while (myReader.Read() == true) {
Mucphainop = myReader.GetInt32(0); }
strSql = "Update tblSinhvien set danop=0," + " Conthieu='" + Mucphainop + "' " + " where Masv='" + Masosv + "'"; myDataset = myData.SelectSqlData(strSql, Program.LoGin.strConnection, myDataset, "tblSinhvien");
myData.UpdateDataSet(myDataset, "tblSinhvien");
//---