This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
May be kinda dumb, but how about a network based "voting machine" system?
Create, esentially, two applications:
1) a voting terminal 2) a central vote server
The vote server could be initialized on one machine to prepare network service for the terminals to connect in, establish connection to one or several database files that contain lists of candidates, races, propositions, maybe even a "help" system for voters at the terminal.
The terminal could be started passing it the IP of the server, some notion of "where this server is" ( a zip code, a district, something reasonable ). On initialization it would contact the server, presenting it's location and requestiong a ballot template that might be tailored to that specific location or district. It could then prepare itself and allow voters to "log in" in some manner (phony voter reg number or something that would OF COURSE not be recorded with the vote!!!). Then it would present the ballot, allow the user to make their selections, then click a submit button. The terminal would then transmit the voter's tab to the server, perhaps even preserving a copy locally for safety/tab counting purposes, then clear itself and wait for the next voter.
Back on the server, the server would be accepting the voter's data, storing it in a database. It could also serve the help text to the terminals or that could certainly be done at the terminal as well. Then, when the voting period is complete, the server could tabulate the votes and create a report naming the race winners and propositions passed/defeated.
This would allow you to exercise:
1) good ol' OO analysis and design concepts, 2) GUI design, 3) database design, (note: if you can't database for any reason maybe serialize or otherwise have the server "save" the votes in a local file and have it retrieve the votes for tabulation later!) 4) network based communication, 5) some form of report generation, 6) threading, (in both the server and the terminal emulation), 7) based on your choices, you could design it to use serialization by network, XML, or any "roll your own" protocol, 8) packaging for deployment.
Just an idea....
(edited because I forgot to mention.... the idea is that the server be deployed on one machine, and the terminals could be distributed on the same machine or even different machines on the local net. That way you could use a school lab, fire up the server and walk around to or have others help you go to the different terminals to "vote" and then demo the ending tabulation at the server machine.)
[ July 31, 2007: Message edited by: Bob Ruth ] [ July 31, 2007: Message edited by: Bob Ruth ]
SCJP - 86% - June 11, 2009
My professor had a contest earlier in the year for who could make the best program. Alot of the judging was based on aesthetic appeal.
So if you're interested in using graphics, a game might be fun. I made a memory game (very overdone, though). Another girl made a room modeling system where a user could specify the size of a room and select furniture objects that could be rotated and dragged around the room. The winner made a version of "Collapse" that had different levels of difficulty.