Computer Science Course Projects

Implementation of Keyboard, Text Screen and Dynamic Memory Drivers by MIPS assemble language.

Project is divided into two parts:

  • The first part, Keyboard and Text Screen drivers, is an implementation of C language functions: GETCHAR, PUTCHAR, SCANF and PRINTF. (SPIM file: CS273_P1.s)
  • The second part, Dynamic Memory Drivers, is an implementation of C language functions MALLOC and FREE. (SPIM file: CS273_P2.s)

A self-contained simulator PCSpim Version  7.2 was used to run and test MIPS assemble language.


Design, implementation, and testing of a complete version of the 5-card draw variant of poker.

The project was done in a team of two and we developed a complete Java Poker game as a part of an object-oriented software development course.

The following tools for software development had been used:

  • Eclipse 3.3.0 - as an integrated development environment (IDE) for Java 1.5 programming
  • JUnit  as a part of Eclipse Workbench to write test code classes.
  • University version control system (SVN) to manage the team work.
  • NetBeans IDE to simplify the construction of an interactive graphic user interface (GUI) instead of programming directly in Java  SWING / Java Foundation Classes (JFC)
  • Javadoc  to generate documentation in HTML format from Java source code.



Simple Network File System

Programming project is implemented step by step and written in C programming language with extensive use of GDB as debugging tool:

Milestone 1:  Disk emulator with buffer cache

  • Provides an interface to an abstract disk that can be treated as an array of sectors or blocks of fixed size.
  • Abstract disk is implemented as a file on the real disk, so the data you store in the abstract disk is persistent across program invocations.
  • Implement an in-memory buffer cache to facilitate faster access to the slow disk blocks where the buffer cache will maintain the most recently used disk blocks in a memory

Milestone 2:  Simple File System

  • Design and implement a “Simple File System” suitable for use on a stand-alone machine in a single-process, single-user environment.
  • File system maintains data structures both in memory and on disk.
  • Disk data structures manage the space on the disk and help allocate the space in an intelligent manner.

Milestone 3:  Simple Network File System

  • Has a file server and a file client.
  • File client and file server can run on different machines.
  • File client connects to the file server and provides access to the storage that is managed by the file server.
  • File client is be able to connect to multiple file servers simultaneously
  • File server is a combination of a TCP server and a file system.


Setting up multiple IP networks and services using GINI toolkit and programming GINI routers to enable IP multicast support.

McGill toolkit for constructing User-Level Micro Internets

GINI  is toolkit for constructing User-Level Micro Internets that is developed at MCGill University by Advanced Networking Research Laboratory (ANRL)  
User-Level  Micro Internets (ULMI) are virtual networks that are  overlaid on the Internet that accurately replicate selected functionalities of the Internet at the user level to enable easy, safe, and high performance experimentation without administrative privileges

The project as a part of senior undergraduate/ first year graduate course was done thought two milestones in a team of two:   

Milestone 1 - Configuring and Observing Internets:

  • Single and Multiple LAN IP Networks
    •  Studying the following concepts:  addressing, address resolution process, packet routing, routers and basic operations supported by LANs and Routers
    • Using network diagnostic tools such as ping, tethereal , ifconfig and route  to visualization the packet flow and to troubleshoot the connectivity.
  • Domain Name Services
    • Studying  the following concepts over  the  multiple LAN IP : naming, name resolution process, reverse name resolution and DNS spoofing
  • Simple Mail Transport Protocol
    • Configure and test an email delivery system on the multiple LAN IP
    • Configure the Sendmail Server and get familiar with how an email is sent, delivered, and received on Internet, and how SMTP protocol works on the Internet.

Milestone 2IP Multicasting:

  • Internet Group Management Protocol (IGMP)
    • Project description :

Consider the multicast scenario, where several machines are connected to a router. Suppose some these machines are listeners and one of the machines is a sender.
The listeners should “subscribe” to the multicast group and they will receive all the data that was sent by the sender to the multicast group.

    • Enhance the router to handle IGMP packets, so that hosts could join the  multicast group by sending IGMP report and that router distributes the messages  to all registered hosts
  • Distance Vector Multicast Routing Protocol - DVMRP (dense mode)
    • Project description :

Implement a simplified dense-mode Protocol independent multicast protocol where the static routing tables should be used to determine whether an incoming packet used the best reverse path. If a router receives a packet via an interface that is not in the shortest reverse path, it will drop the packet and send a prune message to the upstream router.


Interlibrary book reservation system for public or private library sector

The programming project objective was to develop and build a database application for a real-world domain.

We did the project, in a team of three, step by step with four milestones:

Milestone 1: Entity-Relationship Modeling

  • choose an application domain -  “A library book reservation system”
  • half-formal specification of the database to build.
  • design an entity-relationship diagram (ER) for the database, and translate it into the relational model.

Milestone 2: Database Creation

  • to refine your schema that all relation are in Boyce-Codd Normal Form(BCNF)
  • create your database using MySQL
  • develop a substantial amount of data for your database and load it into your relations using the SQL load command. 
  • to create the data, write a program in PHP that creates large files of records in a format acceptable to the loader
  • data generated and loaded should be on the order of:
    • two relations with 4000 to 5000 tuples
    • one additional relation with hundreds of tuples

Milestone 3: Database Querying

  • write five queries using the SELECT-FROM-WHERE construct of SQL
  • write five data modification commands for your application
  • create two views on top of your database schema
  • add two CHECK constraints to relations of your database schema
  • write three MySql triggers

Milestone 4: Writing Application Program

  • build a “user-friendly”, interactive application program front end using PHP:

    - the program should consist of a continuous loop in which:

    • A list of at least five alternative options is offered to the user. An additional alternative should be quit.
    • The user selects an alternative.
    • The system prompts the user for appropriate input values.
    • The system accesses the database to perform the appropriate queries and/or modifications.
    • Data or an appropriate acknowledgement is returned to the user.

- program should follow the following guidelines:

    • program's options should include both queries and modifications.
    • some of program's options should contain more than one SQL statement.
    • program must handle errors appropriately.
  • write one stored procedure to perform operations on your project database
  • additionally :
    • Compute some aggregate value from a relation and use that value to modify values in that or another relation.
    • Create a new relation and load it with values computed from one or more existing relations.
    • Enforce a constraint by searching your database for violations and fixing them in some way.
  • create at least two useful indexes for your project database, and run your most complex queries from the project on a large database with the indexes and without the indexes, and measure the time in both cases.