// Ham tinh thong ke // dung cho thong ke theo thoi gian public List <GiaoDich> ThongKeTheoThoiGian(ThoiGian ngayDauKy, ThoiGian ngayCuoiKy, out double sodudauky, out double tongthu, out double tongchi, out double soducuoiky) { List <GiaoDich> list = new List <GiaoDich>(); List <GiaoDich> temp; // duyet qua tuan tu cac ngay for (ThoiGian demNgay = ngayDauKy; demNgay <= ngayCuoiKy; demNgay++) { temp = LayGDCuaNgay(demNgay); // lay danh sach cac giao dich trong ngay do if (temp != null) { list.AddRange(temp); // chen vao danh sach chung } } // tinh so du dau ky sodudauky = LaySoDuTruocNgay(ngayDauKy); // tinh tong thu tongthu = TinhTongThu(list); // tinh tong chi tongchi = TinhTongChi(list); // so du cuoi ky soducuoiky = sodudauky + tongthu + tongchi; return(list); }
// CAC HAM STATIC // de cho cac lop khac va chuong trinh chinh cung su dung // ma khong can goi thong qua doi tuong public static int SoNgayTrongNam(ThoiGian t) { if (LaNamNhuan(t.nam)) { return(366); } return(365); }
// CAU TU public GiaoDich(int ma, ThoiGian ngaygd, double soluong, TaiKhoan thuocTaiKhoan, LoaiGiaoDich loaiGD, string ghichu = "") { this.ma = ma; this.ngaygd = ngaygd; this.soluong = soluong; this.ThuocTaiKhoan = thuocTaiKhoan; this.LoaiGD = loaiGD; this.GhiChu = ghichu; }
// Ham so sanh ngaythang dau vao co trung thang nam hay khong public bool LaTrungThangNam(ThoiGian ngaythang) { if (this.thang == ngaythang.thang && this.nam == ngaythang.nam) { return(true); } return(false); }
// Ham xu ly nhap thong tin cho tung tai khoan // Ham nay con duoc dung khi sua thong tin tai khoan static TaiKhoan ThemMotTKMoi() { Console.Write("Ten : "); string ten = Console.ReadLine(); // Nhap ten tai khoan TaiKhoan.KieuTaiKhoan kieuTK = XulyNhapKieuTK(); // Nhap kieu tai khoan ThoiGian ngaymo = XulyNhapNgayThangNam("Ngay thang"); // Nhap ngay tao double sodu = XulyNhapTien("So tien ban dau : "); // Nhap so tien ban dau return(new TaiKhoan(ten, sodu, ngaymo, kieuTK, listGD)); // tao doi tuong Taikhoan }
// THANH PHAN PRIVATE // Ham tra ra vi tri cua GiaoDichTheoThang co thang nam nao do private int LayViTriGDThangNam(ThoiGian ngay) { for (int i = 0; i < listThang.Count; i++) { if (listThang[i].ThangNam.LaTrungThangNam(ngay)) { return(i); } } return(-1); }
// CAU TU public GiaoDichTheoThang(GiaoDich gd) { // Mot doi tuong moi cua Giao dich theo thang duoc tao ra // khi co mot giao dich moi ma giao dich do co thang khong trung voi // cac giao dich theo thang da co ThoiGian ngay = gd.NgayGD; this.thangnam = new ThoiGian(1, ngay.Thang, ngay.Nam); listGD = new List <GiaoDich>(); listGD.Add(gd); // add giao dich moi do vao }
public TaiKhoan(string ten, double sotienbandau, ThoiGian ngaymo, KieuTaiKhoan kieuTK, DSGiaoDich listGD) { this.Ten = ten; this.SoTienBanDau = sotienbandau; // [Quan he thanh phan] this.ngaymo = ngaymo; // tao doi tuong ben trong lop this.KieuTK = kieuTK; //[Quan he ket hop voi DSGiaoDich] // doi tuong duoc tao ra ben ngoai lop // khi gan doi tuong moi thi khong xoa doi tuong cu this.listGD = listGD; }
} // thuoc tinh tu dong // CAU TU // Cau tu mac dinh public TaiKhoan(DSGiaoDich listGD) { this.Ten = ""; // gan bang ten mac dinh this.SoTienBanDau = 0; // [Quan he thanh phan] this.ngaymo = new ThoiGian(); // tao doi tuong ben trong lop this.KieuTK = KieuTaiKhoan.TienMat; //[Quan he ket hop voi DSGiaoDich] // doi tuong duoc tao ra ben ngoai lop // khi gan doi tuong moi thi khong xoa doi tuong cu this.listGD = listGD; }
// Ham tinh so du dau ky (truoc ngay nao do) private double LaySoDuTruocNgay(ThoiGian ngay) { double sodu = 0; foreach (GiaoDich gd in this) { // chuyen khoan khong duoc tinh la thu hay chi // nen khong tinh vao so du if (gd.NgayGD < ngay && !(gd is ChuyenKhoan)) { sodu += gd.SoLuong; } } return(sodu); }
// Ham xu ly nhap ngay thang static ThoiGian XulyNhapNgayThangNam(string message) { Console.Write("{0} (mm/dd/yyyy) : ", message); // Yeu cau nhap ngay thang dung dang ThoiGian ngay = Console.ReadLine(); // o day, co su dung ep kieu ngam dinh // kiem tra : while (ngay.LaNgayMacDinh) // ngay la ngay mac dinh khi chuoi ngay nhap vao la sai { // neu sai thi yeu cau nhap lai Console.WriteLine("Ngay ban nhap khong dung."); Console.Write("De nghi ban nhap lai theo dang mm/dd/yyyy : "); ngay = Console.ReadLine(); } return(ngay); }
// Ham xu ly nhap nam static ThoiGian XulyNhapNam(string message) { Console.Write("{0} (yyyy) : ", message); // Yeu cau nhap thang nam dung dang ThoiGian nam = "01/01/" + Console.ReadLine(); // kiem tra : while (nam.LaNgayMacDinh) { // neu trai lai thi yeu cau nhap lai Console.WriteLine("Nam ban nhap khong dung."); Console.Write("De nghi ban nhap lai theo dang yyyy : "); nam = "01/01/" + Console.ReadLine(); } return(nam); }
// Ham tinh thong ke // dung cho cac loai thong ke theo phan loai va thoi gian // mang tongthus va tongchis la hai mang tong thu va tong chi theo tung loai giao dich public void ThongKeTheoThoiGian(ThoiGian ngayDauKy, ThoiGian ngayCuoiKy, out bool coGD, out double tongthu, out double tongchi, out double[] tongthus, out double[] tongchis, out int size) { List <GiaoDich> list = new List <GiaoDich>(); List <GiaoDich> temp; for (ThoiGian demNgay = ngayDauKy; demNgay <= ngayCuoiKy; demNgay++) { temp = LayGDCuaNgay(demNgay); if (temp != null) { list.AddRange(temp); } } coGD = false; tongthu = 0; tongchi = 0; tongthus = null; tongchis = null; size = 0; if (list.Count != 0) { coGD = true; // tinh tong thu tongthu = TinhTongThu(list); // tinh tong chi tongchi = TinhTongChi(list); size = GiaoDich.SoLoaiGiaoDich; // tinh tong thu theo phan loai tongthus = new double[size]; KhoiTaoMang(tongthus, size); TinhTongTheoPhanLoai(list, tongthus, GiaoDich.KieuGiaoDich.Thu); // tinh tong chi theo phan loai tongchis = new double[size]; KhoiTaoMang(tongchis, size); TinhTongTheoPhanLoai(list, tongchis, GiaoDich.KieuGiaoDich.Chi); } }
// Ham xu ly nhap thong tin cho tung giao dich // dung duoc cho ca xu ly sua thong tin giao dich // ma : = -1 - nhap mot giao dich moi // != -1 - sua thong tin giao dich da co static GiaoDich ThemMotGDMoi(int ma) { if (ma == -1) { ma = listGD.MaChoGiaoDichMoi; // lay ma giao dich tiep theo } Console.WriteLine("Ma : {0}", ma); GiaoDich.KieuGiaoDich kGD = XulyNhapKieuGD(); // nhap kieu giao dich Console.Write("Chon tai khoan phat sinh giao dich - "); TaiKhoan tk = XulyChonTaiKhoan(); // chon tai khoan phat sinh giao dich TaiKhoan tkNhan = null; // neu la chuyen khoan thi co tai khoan nhan if (kGD == GiaoDich.KieuGiaoDich.ChuyenKhoan) { Console.Write("Chon tai khoan nhan - "); tkNhan = XulyChonTaiKhoan(); // chon tai khoan nhan // cho nay chua xu ly truong hop tkChuyen va tkNhan trung nhau } ThoiGian ngaygd = XulyNhapNgayThangNam("Ngay thang"); // nhap ngay giao dich double sotien = XulyNhapTien("So tien : "); // nhap so tien giao dich GiaoDich.LoaiGiaoDich lGD = XulyNhapLoaiGD(); // nhap loai giao dich Console.Write("Ghi chu : "); string ghichu = Console.ReadLine(); // nhap ghi chu GiaoDich gd = null; switch (kGD) // tao doi tuong phu thuoc vao kieu giao dich { case GiaoDich.KieuGiaoDich.Thu: // tao doi tuong thu gd = new Thu(ma, ngaygd, sotien, tk, lGD, ghichu); break; case GiaoDich.KieuGiaoDich.Chi: // tao doi tuong chi gd = new Chi(ma, ngaygd, sotien, tk, lGD, ghichu); break; case GiaoDich.KieuGiaoDich.ChuyenKhoan: // tao doi tuong chuyen khoan gd = new ChuyenKhoan(ma, ngaygd, sotien, tk, tkNhan, lGD, ghichu); break; } return(gd); }
// Ham tra ra danh sach cac giao dich thuc hien trong ngay nao do private List <GiaoDich> LayGDCuaNgay(ThoiGian ngay) { List <GiaoDich> list = new List <GiaoDich>(); int index; if ((index = LayViTriGDThangNam(ngay)) == -1) { return(null); } else { GiaoDichTheoThang gdThang = listThang[index]; return(gdThang.LayGDCuaNgay(ngay)); } }
// Ham tra ra danh sach cac giao dich duoc thuc hien trong ngay nao do public List <GiaoDich> LayGDCuaNgay(ThoiGian ngay) { List <GiaoDich> list = new List <GiaoDich>(); foreach (GiaoDich gd in listGD) { if (gd.NgayGD == ngay) { list.Add(gd); } } if (list.Count == 0) { return(null); } return(list); }
// Nap chong phep toan tru public static ThoiGian operator -(ThoiGian n1, int t) { int ngay = n1.Ngay - t; int thang = n1.Thang; int nam = n1.Nam; while (ngay <= 0) { ngay += NgayCuoiCungCuaThang(thang - 1, nam); thang--; if (thang <= 0) { thang = 12; nam--; } } ThoiGian ngayMoi = new ThoiGian(ngay, thang, nam); return(ngayMoi); }
// NAP CHONG CAC TOAN TU // Nap chong phep toan cong public static ThoiGian operator +(ThoiGian n1, int t) { int ngay = n1.Ngay + t; int thang = n1.Thang; int nam = n1.Nam; int ngaycuoicung; while (ngay > (ngaycuoicung = NgayCuoiCungCuaThang(thang, nam))) { thang++; ngay -= ngaycuoicung; if (thang > 12) { thang = 1; nam++; } } ThoiGian ngayMoi = new ThoiGian(ngay, thang, nam); return(ngayMoi); }
// CAI DAT GIAO DIEN ICOMPARABLE // de dung voi ham Sort cua cac lop Collection // va dung trong viec nap chong toan tu so sanh public int CompareTo(object o) { if (o is ThoiGian) { ThoiGian n = (ThoiGian)o; if (this == n) { return(0); } if (this.Nam > n.Nam || (this.Nam == n.Nam && this.Thang > n.Thang) || (this.Nam == n.Nam && this.Thang == n.Thang && this.Ngay > n.Ngay)) { return(1); } return(-1); } else { throw new ArgumentException(); } }
// CAU TU public Thu(int ma, ThoiGian ngaygd, double soluong, TaiKhoan thuocTaiKhoan, LoaiGiaoDich loaiGD, string ghichu = "") : base(ma, ngaygd, soluong, thuocTaiKhoan, loaiGD, ghichu) { }
// Ham xu ly chuc nang In thong ke theo phan loai va thoi gian static void InTKTheoPhanLoai() { // neu la rong thi bo qua if (listGD.LaRong) { Console.WriteLine("Co so du lieu khong co giao dich nao de thong ke."); return; } KieuNhapThoiGian kieuNhapTG = XulyNhapKieuNhapTG(); bool coGD; double tongthu = 0, tongchi = 0; double[] tongthus, tongchis; int size; //List<GiaoDich> list = null; switch (kieuNhapTG) { case KieuNhapThoiGian.Tuan: ThoiGian ngayDauTuan = XulyNhapNgayThangNam("Nhap ngay dau tuan"); listGD.ThongKeTheoThoiGian(ngayDauTuan, ngayDauTuan + 6, out coGD, out tongthu, out tongchi, out tongthus, out tongchis, out size); InKQTKTheoPhanLoai(coGD, tongthu, tongchi, tongthus, tongchis, size, "tuan"); break; case KieuNhapThoiGian.Thang: ThoiGian thangnam = XulyNhapThangNam("Nhap thang nam muon thong ke"); listGD.ThongKeTheoThoiGian(thangnam, thangnam + ThoiGian.NgayCuoiCungCuaThang(thangnam) - 1, out coGD, out tongthu, out tongchi, out tongthus, out tongchis, out size); InKQTKTheoPhanLoai(coGD, tongthu, tongchi, tongthus, tongchis, size, "thang"); break; case KieuNhapThoiGian.Nam: ThoiGian nam = XulyNhapNam("Nhap nam muon thong ke"); listGD.ThongKeTheoThoiGian(nam, nam + ThoiGian.SoNgayTrongNam(nam) - 1, out coGD, out tongthu, out tongchi, out tongthus, out tongchis, out size); InKQTKTheoPhanLoai(coGD, tongthu, tongchi, tongthus, tongchis, size, "nam"); break; case KieuNhapThoiGian.Khoang: ThoiGian dauky = XulyNhapNgayThangNam("Nhap ngay dau ky"); ThoiGian cuoiky = XulyNhapNgayThangNam("Nhap ngay cuoi ky"); listGD.ThongKeTheoThoiGian(dauky, cuoiky, out coGD, out tongthu, out tongchi, out tongthus, out tongchis, out size); InKQTKTheoPhanLoai(coGD, tongthu, tongchi, tongthus, tongchis, size, "ky"); break; } }
public static int NgayCuoiCungCuaThang(ThoiGian t) { return(NgayCuoiCungCuaThang(t.thang, t.nam)); }
// CAU TU public ChuyenKhoan(int ma, ThoiGian ngaygd, double soluong, TaiKhoan thuocTaiKhoan, TaiKhoan taikhoanNhan, LoaiGiaoDich loaiGD, string ghichu = "") : base(ma, ngaygd, soluong, thuocTaiKhoan, loaiGD, ghichu) { TaiKhoanNhan = taikhoanNhan; }