Project 7: Northwind Traders Order Entry
1
Northwind Order Entry
Extend the Select Customer program from
Project 6 to permit the user to enter orders.
Add orders to the database.
Print invoices.
Refer the Concept Document for background material: http://www.cse.usf.edu/~turnerr/Software_Systems_Development/
Downloads/Northwind_Call_Center/
Note: This project is just a start. It does not fully implement the system described in the Concept
Document.
2
Database Tables
Use copies of the Northwind Traders
Database tables in your own database on scorpius.
Do not use the real Northwind database, which is read only.
You should have already added these tables to your scorpius database.
3
Orders Table
For this project, use only OrderID, CustomerID, and OrderDate.
Note that OrderID is an Identity field.
4
Order Details Table
For this project, set Discount to 0.00.
Other columns will have real values.
5
Products Table
For this project, ignore SupplierID, QuantityPerUnit, UnitsInStock,
UnitsOnOrder, ReorderLevel, and Discontinued.
6
Entity Classes
Define an Entity class corresponding to each database table used by the project.
Customers
Order Details
Orders
Products
7
Database Classes
Objects of Entity classes encapsulate information corresponding to one row of a database table.
The Entity classes encapsulate knowledge of how to access the database as well as information from the database.
8
Home Form
Add a button to the Home Form labeled
Enter Order.
Enabled only when a customer is selected.
This button brings up a new form that permits the user to enter an order for the selected customer.
9
Home Form
10
Order Entry Form
11
Order Entry Form
The Category dropdown list is bound to the Categories table.
Display Member: Category Name
Value Member: CategoryID
List never changes.
When a category is selected, the Product list is set up with products having the selected category.
12
Order Entry Form
The Product dropdown list is bound to the
Products table, but only lists products in the selected category.
When a product is selected, its Unit Cost should appear in the Unit Cost textbox, a default value of 1 should appear in the Quantity textbox, and the Add to Order button should be enabled.
13
Adding an Item to the Order
After selecting a product, the user can enter a different value into the Quantity textbox if desired.
Must be a positive integer.
Less than 1000.
14
Order Item Information Set Up
15
Adding an Item to the Order
When the user clicks Add to Order, a line item is added to the order as shown in the
DataGridView below the dropdown lists.
At this time the Submit Order button should be enabled.
It should be disabled until the first line item is added to the order.
In this project, we will not implement reservations for products in pending orders as described in the concept document.
16
Order with One Line Item
17
Entering an Order
The user can continue adding line items up to a maximum of 10.
The user can click Cancel to delete the current order and return to the Home form.
When all items have been entered, the user clicks Submit Order to add this order to the database.
One row is added to the Orders table.
One row is added to the Order Details table for each line item of the order.
18
Entering an Order
When the user clicks Submit Order the Print
Invoice button is enabled.
The Submit Order button is now disabled.
The text on the Cancel button becomes Return.
User can no longer cancel the order.
19
Ready to Submit Order
20
After Order Entered
21
Print Invoice
The Print Invoice button outputs order information to a printer.
Use a Print Dialog to let the user select a printer.
Always print “all” pages.
There will only be one page
Use a fixed width font for line items so that columns of numbers can be aligned.
22
Invoice
23
Implementation Specifications
Use a DataGridView to show the line items of the order on the Order Entry form.
Use a DataTable to hold the order information as the order is being entered.
Do not put anything into the database until the user clicks Submit Order.
24
Implementation Specifications
Declare the DataTable as a member of the Order Entry Form class.
Add columns programatically in the form class constructor.
Add rows to the DataTable as line items are added to the order.
25
Implementation Specifications
Bind the DataGridView to the DataTable in the form class constructor.
Set DataGridView column widths and style programatically.
http://www.cse.usf.edu/~turnerr/Software_Systems_Development/
044_DataGridView.pdf
26
Printing Tip
Numerical quantities should be right aligned in their boxes.
DrawString specifies position of left edge.
Where to you put the left edge of the string so that the right edge comes out at the right edge of the box?
We need to know how long the printed string will be.
27
Printing Tip
In Visual Studio Help
Search for MeasureText http://msdn.microsoft.com/en-us/library/system.windows.forms.textrenderer.measuretext(VS.80).aspx
http://msdn.microsoft.com/en-us/library/y4xdbe66(VS.80).aspx
28
TextRendered.MeasureText Method
TextRendered.MeasureText Method
MeasureText Example private void print_line_item(Graphics g, Order_Detail od, ref int y_pos)
{
Font f = new Font("Courier New", 10); int h = invoice_font.Height;
Brush b = invoice_brush;
Rectangle r;
Pen p = SystemPens.WindowText;
Size size;
String str = " "; int space; r = new Rectangle(50, y_pos, dataGridView1.Columns[0].Width, h); g.DrawString(od.Product.ProductName, f, b, r.X + 5, y_pos); g.DrawRectangle(p, r); r.X += dataGridView1.Columns[0].Width; r.Width = dataGridView1.Columns[1].Width; str = od.Product.UnitPrice.ToString("C"); size = TextRenderer.MeasureText(str, f); space = r.Width - size.Width - 10; g.DrawString(str, f, b, r.X + space, y_pos); g.DrawRectangle(p, r);
31
Ground Rules
You may work with one other person.
OK to work alone if you prefer.
If you do work as a pair
Both members are expected to contribute.
Submit a single program.
Both members should understand the program in detail.
It is OK to discuss the project, but ...
Do not share your work with other students.
Before or after submitting the project.
Do not copy any other student’s work.
Don’t look at anyone else’s program.
32
Ground Rules
Except for code currently posted on the class web site
Do not copy code from the Internet
or any other source.
Write your own code.
33
Submission
Project is due before 11:59 PM, Monday night, April 25.
Deliverables:
Entire project folder, zipped
Please use Windows “Send to” command to zip the folder.
Submit your project using the Blackboard Assignment for this class.
If done as a pair, only one member should submit the project.
Include both names in the assignment comments and in source file comments.
Other student submit just a comment with both names.
End of Presentation
34