Project #5 - Windows Blog Client -30%
PART 1 (2%) - due by midnight, U Feb 12
PART 2 (28%) - due by midnight, U Feb 19

Please read the class programming standards and the GUI testlist.

Deduction for lateness is 10% per day for 5 days, then no credit.  Start early!

Version 2.0 last updated 08/07/2006

Using Microsoft Visual C#, write a blog client that adheres to all specifications of the standard Windows application from Project 1.  This project is divided into two parts:

  1. PART 1
    Turn in a prototype (I don't care how it looks) that:
    1. displays the entire Blogs table from the Blinky database (follow the database connect tutorial for the Blinky database and the Blogs table)
    2. calls the Blinky web service to verify that user "Gayle" (with password="gayle") exists
    3. displays your name on the window somewhere
  2. PART 2 - Turn in the full blog client.

GRADING CRITERION for PART 2:

85% correct execution, including performance
15% coding practices, documentation, etc.

My prototype client (download here) is shown below.  Your client must implement at least the same functionality as my client, and your client needs to load faster than mine.


 
DISCLAIMER: Prototypes are not guaranteed to be stable or well designed, and your client may look different.
 

Michael Richmans' client (download here) performs much better than mine.  It is simple to use and looks like this:


 
DISCLAIMER: Prototypes are not guaranteed to be stable or well designed, and your client may look different.

  You may also get ideas from Wesley Rosenblum's client (and you could use his images).

RULES:

  1. Required features are 1) user login, 2) registering a new user, 3) displaying blogs and their replies, 4) posting a new blog, and 5) replying to an existing blog.
  2. The client should have features similar to the three sample clients provided above.
    DISCLAIMER: Prototypes are not guaranteed to be stable or well designed, and your client may look different.  Part of your job is to design a good, intuitive user interface for your client. 
  3. Please only display a user if that user has at least one blog. The Richman and Rosenblum clients implement this feature.
  4. The client will send SQL queries directly to the database when reading blogs, but to write to the database or ask about username/passwords, the client must use the Blinky web service.
  5. The client should remember that last user's name who logged on, but it should not store user passwords.
  6. Passwords must not be displayed in plain text.  (HINT: Look up the PasswordChar property of the TextBox control.)
  7. The client should allow reading of blogs without making the user log in, but must require a valid login for posting or replying.
  8. Your name must appear in the client's About form, and please display the executable name and the short version number in all Window titles.
  9. The blog client should refresh any view it is keeping that would be changed by a new post or new reply submitted from this client. It should also offer an explicit refresh option for any view being displayed.
  10. When a user logs in, both the DisplayName and the UserID must be visible somewhere on the form (to resolve possible ambiguities in DisplayNames).  If the DisplayName is blank or empty, display UserID where DisplayName would normally appear.
  11. There are some pitfalls and performance issues you should handle.   Michael Richman's client shows particularly good performance.
  12. My blog prototype incorrectly displays the UserID field rather than the DisplayName field.  Only if DisplayName is null should you display the UserId field.  Unfortunately, the database does not enforce non-null DisplayName so you should check in every case.  Your client should not allow a user to enter create a UserId without also creating a DisplayName, but again unfortunately, some clients have done this in the past.
  13. You should show DisplayName instead of UserID if possible; if no DisplayName exists (i.e., it's null), then you must use the UserID for a DisplayName.

READING FROM THE DATABASE:

  1. The Database Spec describes the Blinky database structure.
  2. The SQL tutorial shows how to query the Blinky database.  The Query Tester program lets you verify that your SQL query syntax will work.
  3. The database connection instructions show how to connect your project to the Blinky database.  The tutorial is for the sample NorthWind database, but the same login and password work for reading from the Blinky database (which is also on the same server).

USING THE WEB SERVICE:

  1. View the Blinky web service specification and read its code.
  2. See the tutorial Using the Blinky Web Service.

SAMPLE CODE AND OTHER SUGGESTIONS:

  1. The sample BlogBrowser project uses the web-browser control (AxWebBrowser, instead of RichTextBox) to display blogs and illustrates embedding files as resources, SQL, and use of the splitter control.
  2. Check out the code in the BlinkySampleCode project, which describes how to use a TreeView control, how to access the Blinky database, and how to use the web service.
  3. For help with the TreeView control, I recommend Petzold (in Towne 217 and at Weiss Tech House); see pp 1060-1070 on TreeView.  My prototype client could have used a Splitter control to good advantage.

GOALS:

  1. To practice programming a Windows application which reads from a database.
  2. To practice using a web service.
  3. To practice designing a more complex, but (hopefully friendly, graphical user interface.

GETTING HELP:
If you need help, try (in preferred order):

  • posting to the Discussion Group in Blackboard
  • call or find me or a TA
  • send email (last resort)

TURN-IN:
The turn-in procedure for programming assignments is as follows:

  1. Create a folder with your emailID as its name.  The folder I would create would be pgpalmer; yours will be different.  Place your Visual Studio solution and project, and all related files, into this folder.
  2. Test your copied program thoroughly to make sure it works.
  3. When fully tested, zip up the entire folder, including all files underneath the folder.  NOTE: Please do not use the "save full path info" option.
  4. Test unarchiving the zip file to make sure it produces all your files and directories, but in whatever folder the person unzipping chooses (such as, on the Desktop).
  5. If correct, log into Blackboard and turn in the zip file (via file upload in your web browser).  Be sure to select "Send File" (and not "Add File") in Blackboard's Drop Box.

Visitors: Hit Counter