Tải bản đầy đủ (.docx) (38 trang)

Phân tích và thiết kế hệ thống Phần mềm quản lý quán Cà Phê

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.25 MB, 38 trang )

MỤC LỤC

TỔNG QUAN VỀ ĐỀ TÀI
1

Lý do chọn đề tài

Ngày nay ngành công nghệ thông tin phát triển mạnh kéo theo đó là các dịch vụ
mạng ngày càng phát triển, mở rộng và hoàn thiện hơn, tuy vẫn tồn tại nhiều khuyết
điểm song không ít tiện lợi từ công nghệ đem lại cho xã hội loài người sự nhanh chóng
và chính xác... Ngày xưa mọi thứ đều quản lý bằng tay, ghi chép sổ hàng vì vậy khi
tìm kiếm một tài liệu nào đó rất là khó khăn. Khi công nghệ thông tin phát triển người
ta đã dần dần nghĩ tới việc lưu trữ, xử lý và quản lý dữ liệu trên máy tính.
Từ ý tưởng áp dụng công nghệ thông tin vào việc quản lý, bớt phần gánh nặng về
sổ hàng cũng như đầu óc con người, đồ án này hướng đến xây dựng một phần mềm
quản lý quán Cà Phê. Giúp chủ quán có thể dễ dàng hơn trong công việc quản lý của
mình.
Với lượng khách càng ngày càng tăng, để phục vụ khách được tốt hơn, chính xác
hơn và nhanh chóng hơn thì chủ quán đang từng bước tin học hoá các khâu quản lí.
Đặc biệt là trong công tác kế toán và quản lí hàng hoá,đồ uống.Bởi vì với công tác thủ
công trước đó mà cửa hàng thực hiện đã bộc lộ nhiều hạn chế như sau:


Tra cứu thông tin về hàng hoá, các đại lí cung cấp hàng và khách hàng mất nhiều thời



gian và nhiều khi không chính xác.
Lưu trữ thông tin về nhập xuất hàng hoá, về thu chi cần nhiều loại giấy tờ nên cồng

kềnh và không đạt hiệu quả.


• Cập nhật các thông tin hằng ngày tốn nhiều thời gian và khó khăn trong việc thực hiện
báo cáo thống kê, nhất là khi có sự việc đột xuất.
Sau khi nghiên cứu một số tài liệu liên quan, em quyết định chọn đề tài: “Xây
dựng phần mềm quản lý quán Cà Phê”
1


Trong quá trình xây dựng chương trình không tránh khỏi sai sót kính mong các
thầy cô và các bạn đóng góp ý kiến xây dựng để chương trình có thể hoàn thiện hơn.
2

Đối tượng nghiên cứu

Chương trình quản lý quán lý cà phê là chương trình hỗ trợ cho việc quản lý bán
hàng, quản lý các hoạt động nghiệp vụ của quán café, giúp cho việc quản lý quán
thuận tiện và hiệu quả hơn.
Chương trình được xậy dựng, thiết kế cơ sở dữ liệu trên Sql Server 2014, được
thiết kê giao diện, viết chương trình trên Microsoft Visual Studio 2015 và ngôn ngữ
lập trình C#.

2


CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1 Công cụ và ngôn ngữ lựa chọn
• Ngôn ngữ C # là gì?
Ngôn ngữ C# là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó được tạo ra
từ nền tảng phát triển hơn. Microsoft bắt đầu với công việc trong C và C++ và thêm
cào những đặc tính mới để làm cho ngôn ngữ này dễ sử dụng hơn. Nhiều trong số
những đặc tính này khá giống với những đặc tính có trong Java. Không dừng lại ở đó,

Microsoft đưa ra một số mục đích khi xây dựng ngôn ngữ này. Những mục đích này
được tóm tắt như sau:
1.1.1 C# là ngôn ngữ đơn giản
Ngôn ngữ C# đơn giản vì nó dựa trên nền tảng C và C++. Nếu chúng ta thân thiện
với C và C++ hoặc Java, chúng ta sẽ thấy C# khá giống về diện mạo, cú pháp, biểu
thức, toán tử, và chức năng khác được lấy trực tiếp từ ngôn ngữ C và C++, nhưng nó
đã được cải tiến để làm cho ngôn ngữ đơn giản hơn. Một vài trong các sự cải tiến là
loại bỏ các dư thừa, hay là thêm vào những cú pháp thay đổi. Ví dụ như, trong C++ có
ba toán tử làm việc với các thành viên là ::, . , và ->. Để biết khi nào dùng ba toán tử
này cũng phức tạp và dễ nhầm lẫn. Trong C#, chúng được thay thế với một toán tử duy
nhất gọi là .(dot). Đối với người mới học thì điều này và những việc cải tiến khác làm
bớt nhầm lẫn và đơn giản hơn.
1.1.2 C# là ngôn ngữ hiện đại
Những đặc tính như là xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu
mở rộng, và bảo mật mã nguồn là những đặc tính được mong đợi trong một ngôn ngữ
hiện đại. C# chứa tất cả những đặc tính trên. Nếu là người mới học lập trình có thể
chúng ta sẽ cảm thấy những đặc tính trên phức tạp và khó hiểu. Tuy nhiên, cũng đừng
lo lắng chúng ta sẽ tìm hiểu những đặc tính qua các mục sau.
3


1.1.3 C# là ngôn ngữ hướng đối tượng
Những đặc điểm chính của ngôn ngữ hướng đối tượng (Object-oriented language)
là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình(polymorphism).
C# hỗ trợ tất cả những đặc tính trên. Là một ngôn ngữ hướng đối tượng, C # hỗ trợ các
khái niệm về đóng gói, thừa kế, và đa hình. Tất cả các biến và phương pháp, bao gồm
cả phương pháp chính, điểm vào của ứng dụng, được đóng gói trong định nghĩa
lớp. Một lớp có thể kế thừa trực tiếp từ một lớp cha mẹ, nhưng nó có thể thực hiện bất
kỳ số lượng các giao diện. Các phương thức ghi đè lên các phương pháp ảo trong một
lớp cha mẹ cần ghi đè lên các từ khóa như là một cách để tránh định nghĩa lại tình

cờ. Trong C #, cấu trúc giống như một lớp nhẹ, nó là một loại ngăn xếp giao có thể
thực hiện các giao diện nhưng không hỗ trợ thừa kế.
1.1.4 C# là ngôn ngữ mạnh mẽ và mền dẻo
Như đã đề cập trước, với ngôn ngữ C# chúng ta chỉ bị giới hạn ở chính bởi bản
thân hay là trí tưởng tượng của chúng ta. Ngôn ngữ này không đặt những ràng buộc
lên những việc có thể làm. C# được sử dụng cho nhiều các dự án khác nhau như là tạo
ra ứng dụng xử lư văn bản, ứng dụng đồ họa, bản tính, hay thậm chí những trình biên
dịch cho các ngôn ngữ khác.
1.1.5 C# là ngôn ngữ ít khóa
C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa được sử
dụng để mô tả thông tin. Chúng ta có thể nghĩ rằng một ngôn ngữ có nhiều từ khóa thh
sẽ mạnh hơn. Điều này không phải sự thật, ít nhất là trong trường hợp ngôn ngữ C#,
chúng ta có thể tìm thấy rằng ngôn ngữ này có thể được sử dụng để làm bất cứ nhiệm
vụ nào. Bảng sau liệt kê các từ khóa của ngôn ngữ C#.

abstract
as
base
bool
break
byte
case
catch
char
checked

default
delegate
Do
double

Else
Enum
Event
explicit
extern
False

Foreach
goto
if
implicit
in
int
interface
internal
is
lock

object
operator
out
overide
params
private
protected
public
readonly
ref

sizeof

stackalloc
static
string
struct
switch
this
throw
true
try

unsafe
ushort
using
virtual
volatile
void
while

4


class
const
continue
decimal

finally
Fixed
Float
For


ong
namespace
new
null

return
sbyte
sealed
short

typeof
uint
ulong
unchecked

Bảng 1.1.- Bảng các từ khóa của C#
1.1.6 C# là ngôn ngữ hướng module
Mã nguồn C# có thể được viết trong những phần được gọi là những lớp, những
lớp này chứa các phương thức thành viên của nó. Những lớp và những phương thức có
thể được sử dụng lại trong ứng dụng hay các chương tŕnh khác. Bằng cách truyền các
mẫu thông tin đến những lớp hay phương thức chúng ta có thể tạo ra những mã nguồn
dùng lại có hiệu quả.
1.1.7 C# sẽ là một ngôn ngữ phổ biến
Mã nguồn C# có thể viết trong những phần gọi là những lớp, những lớp này chứa
các phương thức thành viên của nó. Những lớp và những phương thức có thể được sử
dụng lại trong các ứng duụng hay các chương trình khác. Bằng cách truyền mẫu thông
tin đến những lớp hay phương thức chúng ta có thể tạo ra những mã nguồn dùng lại có
hiệu quả.
1.2 Nền tảng của ngôn ngữ C#


1.2.1 Kiểu dữ liệu
1.2.1.1Kiểu loại dữ liệu dựng sẵn
Kiểu C#
Byte

Số byte
1

Kiểu.NET Mô tả
Byte
Số nguyên dương không dấu từ 0-255

Char
bool
sbyte

2
1
1
2

Char
Boolean
Sbyte
Int16

Ký tự Unicode
Giá trị logic true/Fale
Số nguyên có dấu(từ-128 đến 127)

Số nguyên có dấu giá trị từ =32768 đến

Uint16
Int32

32768
Số nguyên không dấu 0-65.535
Số nguyên có dấu -2.147.483.647 và

Uint32
Single

2.147.483.647
Số nguyên không dấu 0-4.294.967.295
Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E-

Short
Ushort
int
Uint
Float

2
4
4
4

38 đến 3,4E+38,với 7 chữ số nghĩa..
5



Kiểu dấu chấm dộng có độ chính xác gấp
Double

8

Double

đôi, giá trị xấp xỉ từ 1,7E-308 đến
1,7E+308,với 15,16 chữ số có nghĩa.
Có độ chính xác đến 28 con số và có giá trị

decimal

8

Decimal

thập phân, được dung trong tính toán tài
chính, kiểu này đòi hỏi phải có hậu tố “m”
hay “M” theo sau giá trị.
Kiểu số nguyên có dấu có giá trị trong

Long

ulong

8

8


Int64

Uint64

khoảng:
-9.223.370.036.854.775.808 đến
9.223.372.036.854.775.807
Số nguyên không dấu

từ

0

đến

0xfffffffffffffff

Bảng 1.2. - Các kiểu dựng sẵn của C#

1.2.1.2Kiểu tham chiếu
Chỉ tới nơi chứa dữ liệu có thể NULL(NULL: không chỉ tới bất cứ đâu). Bao
gồm(lớp class), string, object, giao diện(interface), mảng(array), đại diện(delegate).
Đặc tính
Kiểu giá trị
Variable hold
Value
Allocated
Stack
Default

Zero
Parmerter
Copy Value
Bảng 1.3. kiểu giá trị và tham chiếu

Kiểu tham chiếu
Reference
Heap
Null
Copy Reference

1.2.1.3Chọn kiểu dữ liệu
Thông thường để chọn một kiểu dữ liệu nguyên để sử dụng như short, int hay long
thường dựa vào độ lớn của giá trị muốn sử dụng. Tùy vào miền vào giá trị của phạm vi
sử dụng biến mà chọn các kiểu dữ liệu thích hợp nhất. Kiểu dữ liệu int thường được sử
dụng nhiều nhất trong lập trình vì kích thước 4 byte của nó cũng đủ để lưu trữ các giá
trị nguyên cần thiết. Kiểu số nguyên có dấu thường được lựa chọn sử dụng nhiều nhiều
nhất trong kiểu số trừ khi có lý do chính đáng để sử dụng kiểu dữ liệu không dấu.
6


1.2.1.4Stack và Heap
Ký tự
\’
\”
\\
\0
\a
\b
\f

\n
\r
\t
\v

Nghĩa
Dấu nháy đơn
Dấu nháy đôi
Dấu chéo ngược”\”
Null
Alert
Lùi về sau
Form feed
Xuống dòng
Về đầu dòng
Tab ngang
Tab dọc

Bảng 1.4- Các kí tự đặc biệt
1.2.1.5Chuyển đổi các kiểu dữ liệu
Việc chuyển đổi giá trị ngầm định được thực hiện một cách tự động và đảm bảo là
không mất thông tin. Ví dụ, chúng ta có thể gán ngầm định một số kiểu short (2 byte)
vào một số kiểu int (4 byte) một cách ngầm định. Sau khi gán hoàn toàn không mất dữ
liệu vì bất cứ giátrị nào của short cũng thuộc về int:
short x = 10;
int y = x; // chuyển đổi ngầm định
Tuy nhiên, nếu chúng ta thực hiện chuyển đổi ngược lại, chắc chắn chúng ta sẽ bị
mất thông tin. Nếu giá trị của số nguyên đó lớn hơn 32.767 thì nó sẽ bị cắt khi chuyển
đổi. Trình biên dịch sẽ không thực hiện việc chuyển đổi ngầm định từ số kiểu int sang
số kiểu short:

short x;
int y = 100;
x = y;
-

// Không biên dịch, lỗi ….!

Để không bị lỗi chúng ta phải dùng lệnh gán tường minh, đoạn mã trên được

7


viết lại như sau:
short x;
int y = 500;
x = (short) y;

// Ép kiểu tường minh, trình biên dịch không báo lỗi

1.2.2 Biến và hằng
Một biến là một vùng lưu trữ với một kiểu dư liệu. Biến có thể được gán giá trị
kh thực hiện các lệnh trong chương trình. Để tạo một biến chúng ta phải khai báo kiểu
của biến và gán cho biến một tên duy nhất. Biến có thể được khởi tạo giá trị ngay khi
khai báo, hay nó cũng có thể được gán giá trị mới vào bất cứ lúc nào chương trình.
1.2.2.1Gán giá trị xác định cho biến
C# đòi hỏi các biến phải được khởi tạo trước khi sử dụng. Việc sử dụng biến
khi chưa được khởi tạo là không hợp lệ trong C#. Tuy nhiên không nhất thiết lúc nào
ta cũng phải khởi tạo biến. Nhưng để dùng được thì bắt buộc phải gán cho chúng một
giá trị trước khi có một lệnh nào đó tham chiếu đến biến đó. Điều này được gọi lầ gán
giá trị xác định cho biến va C# bắt buộc phải thực hiện điều này.

1.2.2.2Hằng
Hằng cũng là một biến nhưng giá trị của hằng không thay đổi. Biến là công cụ
rất mạnh, tuy nhiên khi làm việc với một giá trị được định nghĩa là không thay đổi, ta
phải đảm bảo giá trị của nó không được thay đổi trong suốt chương trình.
Hằng được phân thành ba loại: giá trị hằng, biểu tượng hằng, kiểu liệu hằng.

1.2.2.3Câu lệnh switch
switch (biểu thức điều kiện)
{
8


case <giá trị>:
<Các câu lệnh thực hiện>
<lệnh nhảy>
[default:
<Các câu lệnh thực hiện mặc định>]
}
-

Cũng tương tự như câu lệnh if, biểu thức để so sánh được đặt sau từ khóa switch, tuy
nhiên giá trị so sánh lại được đặt sau mỗi các từ khóa case.
Giá trị sau từ khóa case là các giá trị hằng số nguyên.
1.2.2.4Câu lệnh if...else
if (biểu thức điều kiện)
{
<lệnh 1>
<lệnh 2>
....
}

[else
{
<lệnh 1>
<lệnh 2>
9


...
}]
Như trình bày bên trên do else là phần tùy chọn nên được đặt trong dấu ngoặc
vuông [...].
1.2.2.5Vòng lặp while
Ý nghĩa của vòng lặp while là: “Trong khi điều kiện đúng thì thực hiện các

-

công việc này”.
Cú pháp sử dụng vòng lặp while như sau:
while (Biểu thức)
<Câu lệnh thực hiện>
Biểu thức của vòng lặp while là điều kiện để các lệnh được thực hiện, biểu

-

thức này bắt buộc phải trả về một giá trị kiểu bool là true/false. Nếu có nhiều câu lệnh
cần được thực hiện trong vòng lặp while thì phải đặt các lệnh này trong khối lệnh.
1.2.2.6Vòng lặp for
Vòng lặp for bao gồm ba phần chính:




Khởi tạo biến đếm vòng lặp



Kiểm tra điều kiện biến đếm, nếu đúng thì sẽ thực hiện các lệnh bên trong vòng
for



Thay đổi bước lặp.
Cú pháp sử dụng vòng lặp for như sau:
for ([ phần khởi tạo] ; [biểu thức điều kiện]; [bước lặp])
<Câu lệnh thực hiện>
10


1.2.2.7Câu lệnh lặp foreach
Vòng lặp foreach cho phép tạo vòng lặp thông qua một tập hợp hay một mảng.
Đây là một câu lệnh lặp mới không có trong ngôn ngữ C/C++. Câu lệnh foreach có cú
pháp chung như sau:
foreach ( <kiểu tập hợp> <tên truy cập thành phần > in < tên tập hợp>)
<Các câu lệnh thực hiện>
Do lặp dựa trên một mảng hay tập hợp nên toàn bộ vòng lặp sẽ duyệt qua tất cả
các thành phần của tập hợp theo thứ tự được sắp. Khi duyệt đến phần tử cuối cùng
trong tập hợp thì chương trình sẽ thoát ra khỏi vòng lặp foreach.
1.3

Công cụ: SQL server
Để có thể hiểu rõ được cách làm việc của ADO.NET, chúng ta cần phải nắm được


một số khái niệm cơ bản về cơ sở dữ liệu quan hệ và ngôn ngữ truy vấn dữ liệu, như:
khái niệm về dòng, cột, bảng, quan hệ giữa các bảng, khóa chính, khóa ngoại và cách
truy vấn dữ liệu trên các bảng bằng ngôn ngữ truy vấn SQL : SELECT, UPDATE,
DELETE … hay cách viết các thủ tục (Store Procedure) ….
1.3.1 Kiến trúc ADO.NET
DataSet là thành phần chính cho đặc trưng kết nối không liên tục của kiến trúc
ADO.NET. DataSet được thiết kế để có thể thích ứng với bất kỳ nguồn dữ liệu nào.
DataSet chứa một hay nhiều đối tượng DataTable mà nó được tạo từ tập các dòng và
cột dữ liệu, cùng với khoá chính, khóa ngoại, ràng buộc và các thông tin liên quan đến
đối tượng DataTable này. Bản thân DataSet được dạng như một tập tin
XML.
Thành phần chính thứ hai của ADO.NET chính là NET Provider Data, nó chứa
các đối tượng phục vụ cho việc thao tác trên cơ sở dữ liệu được hiệu quả và nhanh
chóng, nó bao gồm một tập các đối tượng Connection, Command, DataReader và
DataAdapter. Đối tượng Connection cung cấp một kết nối đến cơ sở dữ liệu,
Command cung cấp một thao tác đến cơ sở dữ liệu, DataReader cho phép chỉ đọc dữ
liệu và DataAdapter là cấu nối trung gian giữa DataSet và nguồn dữ liệu.

11


1.3.2 Mô hình đối tượng ADO.NET
Có thể nói mô hình đối tượng của ADO.NET khá uyển chuyển, các đối tượng
của nó được tạo ra dựa trên quan điểm đơn giản và dễ dùng. Đối tượng quan trọng
nhất trong mô hình ADO.NET chính là Dataset. Dataset có thể được xem như là thể
hiện của cả một cơ sở dữ liệu con, lưu trữ trên vùng nhớ cache của máy người dùng
mà không kết nối đến cơ sở dữ liệu.
1.3.3 Mô hình đối tượng của Dataset
DataSet bao gồm một tập các đối tượng DataRelation cũng như tập các đối

tượng DataTable. Các đối tượng này đóng vai trò như các thuộc tính của DataSet.
1.3.3.1Đối tượng DataTable và DataColumn
Ta có thể viết mã C# để tạo ra đối tượng DataTable hay nhận về từ kết quả của
câu truy vấn đến cơ sở dữ liệu. DataTable có một số thuộc tính dùng chung ( public )
như thuộc tính Columns, từ thuộc tính này ta có thể truy cập đến đối tượng
DataColumnsCollection thông qua chỉ mục hay tên của cột để nhận về các đối tượng
DataColumn thích hợp, mỗi DataColumn tương ứng với một cột trong một bảng dữ
liệu. Ví dụ :
DataTable dt = new DataTable("tenBang");
DataColumn dc = dt.Columns["tenCot"];
1.3.3.2Đối tượng DataRelation
Ngoài tập các đối tượng DataTable được truy cập thông qua thuộc tính Tables,
DataSet còn có một thuộc tính Relations. Thuộc tính này dùng để truy cập đến đối
tượng DataRelationCollection thông qua chỉ mục hay tên của quan hệ và sẽ trả về đối
tượng DataRelation tương ứng. Ví dụ :
DataSet ds = new DataSet("tenDataSet");
DataRelation dre = ds.Relations["tenQuanHe"];
1.3.3.3Các bản ghi ( Rows )
Tương tự như thuộc tính Columns của đối tượng DataTable, để truy cập đến các
dòng ta cũng có thuộc tính Rows. ADO. NET không đưa ra khái niệm RecordSet, thay
vào đó để duyệt qua các dòng ( Row ), ta có thể truy cập các dòng thông qua thuộc
tính Rows bằng vòng lặp foreach.

12


1.3.3.4Đối tượng SqlConnection và SqlCommand
Đối tượng SqlConnection đại diện cho một kết nối đến cơ sở dữ liệu, đối tượng
này có thể được dùng chung cho các đối tượng SqlCommand khác nhau. Đối tượng
SqlCommand cho phép thực hiện một câu lệnh truy vấn trực tiếp : như SELECT,

UPDATE hay DELETE hay gọi một thủ tục (Store Procedure) từ cơ sở dữ liệu.
1.3.3.5Đối tượng DataAdapter
ADO.NET dùng DataAdapter như là chiếc cầu nối trung gian giữa DataSet và
DataSource ( nguồn dữ liệu ), nó lấy dữ liệu từ cơ sở dữ liệu sau đó dùng phương Fill()
để đẩy dữ liệu cho đối tượng DataSet. Nhờ đối tượng DataAdapter này mà DataSet tồn
tại tách biệt, độc lập với cơ sở dữ liệu và một DataSet có thể là thể hiện
của một hay nhiều cơ sở dữ liệu
1.3.3.6Trình cung cấp dữ liệu (.NET Data Providers)
NET Framework hỗ trợ hai trình cung cấp dữ liệu là SQL Server .NET Data
Provider ( dành cho phiên bản SQL Server 7.0 của Microsoft trở lên ) và OLE DB
.NET Data Provider ( dành cho các hệ quản trị cơ sở dữ liệu khác ) để truy cập vào cơ
sở dữ liệu.
SQL Server .NET Data Provider có các đặc điểm :


o

Dùng nghi thức riêng để truy cập cơ sở dữ liệu

o

Truy xuất dữ liệu sẽ nhanh hơn và hiệu quả hơn do không phải
thông qua lớp OLE DB Provider hay ODBC
Chỉ được dùng với hệ quản trị cơ sở dữ liệu SQL Server 7.0 trở

o

lên.
Được Mircrosoft hỗ trợ khá hoàn chỉnh.


o


OLE DB .NET Data Provider có các đặc điểm :

o

Phải thông qua 2 lớp vì thế sẽ chậm hơn

o

Thực hiện được các dịch vụ “Connection Pool”

o

Có thể truy cập vào mọi Datasource có hỗ trợ OLE DB Provider
thích hợp

13


CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Khảo sát hệ thống và bài toán đặt ra.

2.1

Phần mềm quản lý quán Cà Phê phải hỗ trợ việc quản lý các thông tin cho
quán… tự động hóa quy trình quản lý hàng hóa, chi phí nhân viên, tăng độ chính xác
của các hóa đơn bán hang và cung cấp dịch vụ nhanh chóng đến cho khách hàng. Nó
được phát triển với mục đích đáp ứng kịp thời mọi chức năng như quản lý nhân viên,

quản lý hàng hóa,…nhằm làm tăng hiệu quả kinh doanh của quán.
Khi nhập hàng quản lý quán cà phê nhân được nguyên liệu nhập về tiến hành phân
loại sản phẩm, kiểm tra số lượng để lưu vào trong kho.
Khi có khác bước vào nhân viên phục vụ sẽ hỏi khách số lượng người đi cùng để
có thể sắp xếp chỗ ngồi một cách hợp lý nhất. Sau khi đưa khách đến chỗ ngồi nhân
viên phục vụ sẽ mang ra một số thứ miễn phí như nước lọc, trà đá và Menu cho khách
lựa chọn đồ uống… Khi đã ghi hết các yêu cầu của khách, nhân viên phục vụ sẽ
chuyển hết yêu cầu này cho nhân viên pha chế. Đồ uống khi được pha chế xong thì
nhân viên phục vụ mang ra cho khách. Khách hàng khi ra về sẽ qua quầy thu ngân để
thanh toán và lấy hóa đơn.
Sau mỗi ngày quản lý tổng hợp các sản phẩm đã bán trong ngày thông qua hóa
đơn và tổng hợp ghi chép lại.
Tiền lương nhân viên sẽ được tính theo ca và thanh toán theo từng ngày.
Phân tích yêu cầu

2.2

Yêu cầu của người dùng
Cần phải thiết kế và cài đặt một chương trình quản lý có các chức năng sau:



1. Quản lý nhân viên: thêm, sửa, xóa thông tin các nhân viên, tính tiền lương cho nhân

viên (chỉ có người quản lý mới có quyền này).
2. Quản lý bàn: thêm, sửa, xóa bàn, quản lý đồ uống khách đã gọi theo từng bàn.
3. Quản lý kho: thêm, sửa, xóa thông tin hàng, theo dõi số lượng tồn kho.
4. Quản lý hóa đơn bán hàng: thêm sửa thông tin của hóa đơn.

14



2.3

Phân tích và thiết kế hệ thống
2.3.1 Sơ đồ phân cấp chức năng:

15


2.3.2 Lượt đồ DFD mức 0:

16


2.3.3 Lượt đồ DFD mức 1:
2.3.3.1

Quản lý người dùng:

17


2.3.3.2

Quản lý nhân viên:

2.3.3.3

Quản lý lương:


18


2.3.3.4

Quản lý bàn

2.3.3.5

Quản lý món:

19


2.3.3.6

Quản lý thanh toán:

2.3.3.7

Quản lý đặt món

20


2.3.3.8

Báo cáo thống kê:


2.3.3.9

Quản lý giảm giá:

Phân tích thiết kế về dữ liệu
2.4.1 Xác định các thực thể
• Thực thể 1: DANGNHAP
Các thuộc tính:
+ Tên đăng nhập (TENDN)
+ Mật khẩu (MATKHAU)
2.4

21
















+ Mã nhân viên (MANV)

+ Quyền (QUYEN)
Thực thể 2: NHANVIEN
Các thuộc tính:
+ Mã nhân viên (MANV)
+ Tên nhân viên (TENNV)
+ Giới tính (GIOITINH)
+ Địa chỉ (DIACHI)
+ Ngày sinh (NGAYSINH)
+ Số điện thoại (SDT)
+ Trạng thái (TRANGTHAI)
+ Mã đơn giá lương (MADGL)
Thực thể 3: LUONG
Các thuộc tính:
+ Mã lương (MALUONG)
+ Mã nhân viên (MANV)
+ Ngày làm (NGAYLAM)
+ Số ca (SOCA)
+ Đơn giá lương (DGL)
+ Tình trạng (TINHTRANG)
Thực thể 4: DONGIALUONG
Các thuộc tính:
+ Mã đơn giá lương (MADGL)
+ Đơn giá lương (DGL)
+ Ghi chú (GHICHU)
Thực thể 5: BAN
Các thuộc tính:
+ Mã bàn (MABAN)
+ Tên bàn (TENBAN)
+ Tình trạng (TINHTRANG)
Thực thể 6: HOADON

Các thuộc tính:
+ Mã hóa đơn (MAHD)
+ Mã nhân viên (MANV)
+ Mã bàn (MABAN)
+ Ngày lập (NGAYLAP)
+ Tình trạng (TINHTRANG)
Thực thể 7: MON
Các thuộc tính:
+ Mã món (MAMON)
+ Tên món (TENMON)
+ Đơn giá (DONGIA)
+ Đơn vị tính (DVT)
+ Trạng thái (TRANGTHAI)
Thực thể 8: GIAMGIA
Các thuộc tính:
+ Mã giảm giá (MAGG)
+ Mã món (MAMON)
22


+ Ngày bắt đầu (NGAYBATDAU)
+ Ngày kết thúc (NGAYKETTHUC)
+ Giảm giá (GIAMGIA)
+ Trạng thái (TRANGTHAI)
2.4.2 Mô hình quan hệ thực thể (E-R)

2.4.3 Lược đồ quan hệ

DANGNHAP (TENDN, MATKHAU, MANV, QUYEN)
NHANVIEN (MANV, TENNV , GIOITINH, DIACHI, NGAYSINH, SDT,

TRANGTHAI, MADGL)
LUONG (MALUONG, MANV, NGAYLAM, SOCA, DGL, TINHTRANG)
DONGIALUONG (MADGL, DGL, GHICHU)
BAN (MABAN, TENBAN, TINHTRANG)
HOADON (MAHD, MANV, MABAN, NGAYLAP, TINHTRANG)
MON (MAMON, TENMON, DONGIA, DVT, TRANGTHAI)
GIAMGIA (MAGG, MAMON, NGAYBATDAU, NGAYKETTHUC, GIAMGIA,
TRANGTHAI)
23


GOIMON (MAGM, MABAN, MAMON, DONGIA, SOLUONG, DVT, GIAMGIA)
CHITIETHOADON (MACT, MAHD, MAMON, SOLUONG, DONGIA, DVT,
GIAMGIA)




Thực thể 1: DANGNHAP
Tên trường
TENDN

Kiểu dữ liệu
nvarchar(50)

MATKHAU
MANV

nvarchar(50)
int


QUYEN

bit

Khóa
Khóa
chính
Khóa
ngoại

Thực thể 2: NHANVIEN
Tên trường



Ràng buộc
Chú thích
NOT NULL Tên đăng
nhập
NULL
Mật khẩu
NULL
Mã nhân
viên
NULL
Phân quyền

Kiểu dữ liệu


Ràng buộc

MANV

int

TENNV

nvarchar(100)

NOT
NULL
NULL

GIOITINH
DIACHI
NGAYSINH
SDT

nvarchar(50)
nvarchar(100)
datetime
nvarchar(11)

NULL
NULL
NULL
NULL

TRANGTHAI

MADGL

bit
int

NULL
NULL

Chú thích
Mã nhân
viên
Tên nhân
viên
Giới tính
Địa chỉ
Ngày sinh
Số điện
thoại
Trạng thái
Mã đơn giá
lương

Khó
a
Khóa
chính

Khóa
ngoại


Thực thể 3: LUONG
Tên trường
MALUONG

Kiểu dữ liệu Ràng buộc
int
NOT NULL

MANV

int

NOT NULL

NGAYLAM

datetim

NULL

SOCA
DGL

int
int

NULL
NULL

TINHTRAN


bit

NULL

Chú thích
Mã lương

Khóa
Khóa
chính
Mã nhân viên Khóa
ngoại
Ngày làm

e
Số ca
Đơn
giá
lương
Tình trạng
24


G




Thực thể 4: DONGIALUONG

Tên trường
MADGL
DGL

Kiểu dữ liệu
int
int

Ràng buộc
NOT NULL
NULL

GHICHU

nvarchar(50)

NULL

Chú thích
Mã giảm giá
Đơn giá
lương
Ghi chú

Khóa
Khóa chính

Thực thể 5: BAN
Tên trường
MABAN


Kiểu dữ liệu
nvarchar(5
0)
nvarchar(5
0)
bit

TENBAN
TINHTRAN

Ràng buộc
NOT
NULL
NULL

Chú thích
Mã bàn

NULL

Tình trạng

Khóa
Khóa
chính

Tên bàn

G




Thực thể 6: HOADON
Tên trường
MAHD

Kiểu dữ liệu
int

Ràng buộc
Chú thích
NOT NULL Mã hóa đơn

MANV

int

NULL

MABAN

int

NULL

Mã nhân
viên
Mã bàn


NGAYLA

datetime

NULL

Ngày lập

Khóa
Khóa
chính
Khoái
ngoại
Khoái
ngoại

P


Thực thể 7: MON
Tên trường
MAMON

Kiểu dữ liệu
int

TENMON

nvarchar(5


Ràng buộc
NOT
NULL
NULL

Chú thích
Mã món

Khóa
Khóa
chính

Tên món

0)
25


×