Kteam Q&A Community

Cộng đồng hỏi đáp về các vấn đề trong lập trình, công nghệ thông tin.

1

Lập lịch, thời gian biếu trong ngày

Em muốn tạo một form báo thức như tạo form lập lịch của C# mà e đọc code và xem giảng e hiểu j.
ai có thể giải thích cho em về chỗ tạo lịch, thêm, sửa, xóa và lưu trữ công việc được không ạ/??
em mem mới, chưa biết j. có j các đại huynh chỉ bảo

6 câu trả lời Thêm câu trả lời

2
huy nguyễn đã trả lời 2018-04-16 15:36:58

mình cũng mới học, biết sơ qua c# cơ bản, nâng cao và oop. thì sau khi bắt chước làm cái ứng dụng lập lịch đó mình cũng không hiểu, bắt tay vào làm 1 cái khác thì biết được chút
xây dựng class: xác định đối tượng hiển thị có những thuộc tính gì (ngày giờ, lời nhắc, ngày tạo, tình trạng, thời gian đến lúc báo)
tạo 1 đối tượng chung "data" để lưu toàn bộ list (mỗi cái báo thức là 1 phần tử). tạo 1 đối tượng chung này giúp mình dễ dàng trong thao tác ghi file
làm giao diện (form 1, form 2 ...)

khởi tạo đối tượng data mà mình sẽ ghi vào file
add báo thức:  ấn button thì ...(khởi tạo 1 cái đối tượng báo thức, mở chỗ để người dụng nhập liệu (nếu có), sau đó gán giá trị nhập vào đối tượng báo thức, add đối tượng ấy vào  list của data)
sửa thì như add(add thì có thông tin trống, còn dữ liệu sửa thì thông tin đã ghi), xóa thì bạn remove khỏi listdata luôn
mình thấy lỗi phát sinh nhiều nhất là do không kiểm soát được cái index của đối tượng, như khi sửa thì phải biết lấy thông tin ở cái đối tượng nào trong list, lưu vào cái nào, xóa cái nào. 
khi đóng thì mình ghi đối tượng data vào file xml, mở thì đọc và lưu trữ đối tượng lấy ra dùng.


mỗi khi bạn tạo tính tăng mới nhớ test kĩ fix hết bug rồi mới tạo tiếp tính năng khác. bám vào code của cái lập lịch, đoạn nào khó hiểu thì bạn nghĩ về cái Kết Quả để nghĩ hướng code khác (mình thấy phần code sửa với xóa của kteam khá khó hiểu, dù không hiểu người ta code kiểu gì nhưng mình code cũng có kết quả giống ý định mong muốn thì kệ cho qua luôn)

 

đăng nam đã bình luận 2018-04-16 15:51:46

anh có thể giải thích rõ hơn cho em về chỗ build class và add cái báo thức ý k ạ/??
ý anh có phải là tạo ra cái class và cái xml nữa để lưu trữ và thao tác với nó phải k ạ?

0 bình chọn
huy nguyễn đã bình luận 2018-04-16 16:23:37

xml chỉ giống như cái tờ giấy mà chương trình sẽ tự động tạo và lưu trữ thôi bạn, nếu có rồi thì lần sau nó lấy ra đọc ghi tiếp (bản chất là nó đọc rồi xóa tờ giấy ghi lại). kteam code đoạn serialize và deserialize này hết sức đơn giản rồi nếu bạn có học qua phần đọc ghi file của ngôn ngữ bất kì sẽ hiểu thôi.
class BaoThuc là kiểu dữ liệu gồm các thành phần của đối tượng bạn muốn sử dụng, khi sử dụng thì bạn lại phải có nhiều cái báo thức sẽ tạo thành list, mà ghi cả cái list thì lại phải dùng vòng lặp ghi từng cái, ta lại tạo class data để lưu cái list ấy, sau này có ghi đọc thì chỉ lấy 1 đối tượng là data thôi (đọc lại code của kteam bạn nhé)
phần add thì mình chưa biết giao diện bạn định hiển thị cái gì, nhưng nói chung chung thì là bạn phải tạo 1 đối tượng BaoThuc, rồi trong giao diện bạn muốn người dùng nhập vào dữ liệu, tìm cách gán dữ liệu vào cái Baothuc ấy, sau đó add vào data. 
tóm lại là : addbtn => tạo bt mới => mở giao diện nhập => người dùng nhập => lưu nội dung vào bt => add bt ấy vào list data
chia nhỏ ra như thế nhưng bạn phải bắt tay vào code mới tự hiểu được

1 bình chọn
2
đăng nam đã trả lời 2018-04-16 16:45:03

Vâng. Có j e gửi code qua. A xem cho e với nhá

huy nguyễn đã bình luận 2018-04-16 18:57:48

rất sẵn lòng, giúp người khác là giúp mình, tuy nhiên do trình mình cũng non nên bạn // code cho mình dễ đọc nhé

1 bình chọn
2
đăng nam đã trả lời 2018-04-17 10:04:21
public Form1()
        {
            InitializeComponent();
            timer1.Start();

            DeserializerFromXML(filePath);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            DateTime time = DateTime.Now;
            int s = Int32.Parse(lbSecond.Text);
            int m = Int32.Parse(lbMinutes.Text);
            int h = Int32.Parse(lbHour.Text);
            s = time.Second;
            m = time.Minute;
            h = time.Hour;
            s++;
            if (s > 59)
            {
                s = 0;
                m++;
            }
            else if (m > 59)
            {
                m = 0;
                h++;
            }
            if (s < 10) lbSecond.Text = "0" + s;
            if (m < 10) lbMinutes.Text = "0" + m;
            if (h < 10) lbHour.Text = "0" + h;
            lbSecond.Text = s + "";
            lbMinutes.Text = m + "";
            lbHour.Text = h + "";
        }

        private void SerializeToXML (object data, string filePath)
        {
            FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
            XmlSerializer sr = new XmlSerializer(typeof(PlanData));
            sr.Serialize(fs,data);
            fs.Close();
        }

        private void DeserializerFromXML(string filePath)
        {
            FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
            XmlSerializer sr = new XmlSerializer(typeof(PlanData));

            object result = sr.Deserialize(fs);
           
        }

đây là code chủ yếu của em. chứ còn 2 cái kia là 2 cái form và cái file xml e tạo ra mà chưa biết móc nối nó với nhau như thế nào ạ

huy nguyễn đã bình luận 2018-04-17 20:26:35

bạn tạo 1 thuộc tính trong form 1: private string filePath = "data.xml"; // tên của file
ngay khi chạy chương trình sẽ đọc dữ liệu của filePath // bạn có thể để hàm deserialize vào trong sự kiện form1_loading hoặc là ngay trong form 1(trước InitializeComponent) // DeserializerFromXML(filePath)
vì chương trình đọc dữ liệu phải lưu trữ để dùng khi chạy nên bạn phải tạo 1 biến toàn cục để lưu trữ nó.
// khâu xử lí, tất cả các thao tác xóa thêm sửa của người dùng thì bạn phải đảm bảo biến lưu trữ dữ liệu được cập nhật theo đó
khi tắt chương trình, tạo sự kiện đóng form, theo đó khi form đóng thì toàn bộ dữ liệu sẽ được sao chép từ biến lưu trữ về filepath // serialize(*biến lưu trữ*, filePath)

0 bình chọn
huy nguyễn đã bình luận 2018-04-17 20:40:34

mình đoán là bạn đang có khung nhập thời gian và chỉnh sửa dữ liệu tại chỗ, nhưng nếu bạn muốn lưu trữ xml thì phải có 1 <list> dateTime ở bên ngoài, mỗi lần nhập lại add time vào list. vai trò như biến lưu trữ dữ liệu nói ở trên

0 bình chọn
1
đăng nam đã trả lời 2018-04-22 22:16:58

em chỉ vừa ms làm theo cách hướng dẫn của video thôi chứ cái này cx chưa nắm rõ lắm.
a có tài liệu về vấn đề này cho e với

 

huy nguyễn đã sửa 2018-04-22 23:12:26

bạn tham khảo project này và tự rút kinh nghiệm nhé, nó đơn giản hơn và chú thích
app: https://drive.google.com/file/d/1Ripngq77eht7Gw07gGxmIGmGmduz7wE5/view
sourse code: https://github.com/huynguyen1999kh/QAsaver-1.0/archive/master.zip

VS2017

0 bình chọn
0
đăng nam đã trả lời 2018-04-23 10:13:33

em không đăng nhâp được anh ơi! nó có hiện lên cái bảng user rồi đăng nhập cái j ý ạ

 

huy nguyễn đã bình luận 2018-04-23 10:21:56

xin gửi vào quanghuy1998kh@gmail.com vì mình không biết bạn đang gặp vấn đề gì

0 bình chọn
0
đăng nam đã trả lời 2018-04-21 11:53:09

em cũng tạo ra biến thời gian để set up và form để set up thời gian đó.
bh e muốn thêm cái form set time đấy vào form to kia để mỗi lần thêm hoặc xóa hoặc chỉnh sửa được cơ ạ
anh có code được cho e với

huy nguyễn đã bình luận 2018-04-22 17:22:26

- bạn đã truyền dữ liệu của form 1 khi gọi form 2 bằng constructer chưa?
- khi form 2 được gọi ra cùng với dữ liệu đưa vào, bạn biết cách để lấy index của đối tượng mình cần hiển thị, sửa,xóa chưa?
rồi thì mọi thứ rất đơn giản: khi mở form 2 thì lấy dữ liệu gắn vào form 2 để hiển thị, khi nhấn sửa thì lấy dữ liệu gắn vào đối tượng, khi xóa thì tra về cái index và remove khỏi list

0 bình chọn

Câu trả lời của bạn

Bạn có thể trả lời câu hỏi này? Hãy chia sẻ nó cho mọi người.

Hủy bỏ hoặc

Chiến dịch

Kteam - Howkteam Free Education