MUSTAFA ILHAN'S CLASS PROJECTS AT CSU, CHICO • OBJECT ORIENTED PROGRAMMING PROJECTS - Class schedule tool: Implemented an object-oriented C++ program called schedtool which generates index files either on RAM or secondary storage that contains information about the classes, instructors, building, room number etc. about the courses offered each semester on campus. Using these index files, the program can process various queries, such as; basic information of the course, listing all courses taught by a particular professor, all courses offered by a department and so on. Later, extended the schedtool program to facilitate a crude form of advising by using the graph class in the C++ STL. Depending on a student's major, course prerequisite chart, list of courses the student has taken, and a set of schedule files, the schedtool program has the capability to recommend a list of courses that a student can choose from to register for. The program was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Implemented a C++ object-oriented program to simulate the operation of a store. The input data for the store is read from an external file. There are two checkers in a store that handle the customers and there's a line in the check out area to be used by customers if the two checkers are busy. The line in the checkout area is constructed with an unbounded queue using pointers. The store is represented as a class and the checkers, the customer array and the queue are the data members of the class. Each customer arrives to the checkout area at a specific time and has a specific transaction time provided in the data file. The program reports all actions taken by customers, such as the arrival to the line/checkers, departure and so on. The store closes if all customers are checked out and time is greater than 50. Program was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Implemented a C++ object-oriented program that will check for the balance of open and close brackets against each other in a given file to the program as an argument. This is a very simple version of a compiler, but it only checks the open-close brackets. In order to implement the program the C++ STL vector is used to contain each line of the program as data field and stack class to hold characters as data. The whole compiler is represented as a class and the vector and the stack is the data members of the class. After the execution, the program reports whether the file successfully compiles (has matching brackets) or not. Program was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Implemented a C++ object-oriented program that represents a simple line editor (like Unix line editor ed) that can run on Unix platform or a terminal emulator program like cygwin. The lines in the text file are linked to each other using a doubly-linked list which is an ADT. The user can either edit an existing file or create a new file. When the program runs, it prompts the user with the available command options, and the user can enter new lines, advance the line pointer in the buffer to move back and forth between lines and display all the lines (the whole file), delete lines and quit the editor program. Right before the program quits, it writes all the lines in the buffer (this is the data portion of the doubly-linked list) to the external file. Program was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Implemented a C++ object-oriented program that simulates a fictitious library. The data such as, the catalog number, title, author and the status of the book is read from an external file upon the startup of the program. All the books in the library are represented in the C++ class catalog and each book as a struct. Once the program data is read, the user is prompted to enter a command to query the library database. The user can also check out and return books. User is prompted to enter commands until she decides to quit the program. Program was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Java Peer to Peer Instant Chat application: Participated in a group project that developed a J2ME chat application that can run on multiple platforms like desktop/laptop computers and mobile devices such as PDA. The application, installed on each device, maintains a buddy list that represents other users to establish a live page 1 of 4 chat. There is an external server called DServer that the devices can connect and ask for each buddies' IP address. If the IP address of the buddy is found on the DServer, the device can attempt to connect the other buddy's device directly. When a device makes a query for a buddy at the DServer, if the device's IP is not yet “registered” in the DServer database, it is entered as a new row, or if the IP address is different than the existing one, then the IP address of the device is updated. This way, since most IP addresses today are assigned dynamically, the latest IP address of the device will be maintained on the DServer. My part for the group project was to develop the DServer and the client modules on the chat devices to make the queries for establishing the connection. I also handled the code for file I/O when the devices are turned on and off. My part of this Java program was developed on Windows machine using Cygwin terminal emulator, and on Unix platform using JDK javac compiler. - Library Management System: Implemented an object-oriented Java GUI application that represents a simple library. The application reads the data from external files that have serialized objects, or it can start from scratch. The librarian (user) can add/remove books or add/remove patrons to the library and check in, check out books. When the librarian decides to shut down the system for the day, all data is stored by serializing the objects to external files. The program was developed on Windows platform using cygwin terminal emulator and compiler was jdk 1.5 javac. - Implemented a C++ object-oriented application called appbook. It represents an appointment book that organizes the appointments for the user. The program reads the existing appointments from an external data file or it can start from scratch if no file is provided on command line. Upon start of the program, it prompts the user some commands and the user can continue processing these commands until it quits the appbook. The user can create new appointment for a specific date and time, cancel an existing appointment or change its description or date and time; the user can check the appointments for a specific day and so on. When the program quits it stores all the appointments to an external file, so that the next time it can start the last version of the appbook. Program was developed on Windows platform with cygwin terminal emulator using GNU g++ compiler. - Implemented a C++ object-oriented application called Tunes Archive, that stores and manages CD collections for the user. The program reads its data from an external file and upon termination writes back to the file. The user can add new music collections, CD's; display some statistics from the collections, remove items from collections and so on. Program was developed on Windows platform with cygwin terminal emulator using GNU g++ compiler. • UNIX SYSTEMS / NETWORK PROGRAMMING PROJECTS - Unix file transfer utility: Implemented a socket based Unix network utility called rcp, that can remotely copy files and directories over the network from one server to another, and can process multiple requests concurrently by using POSIX threads. Developed own network protocol to be used in network communication. The processing occurs recursively, so if there are directory structures within a single directory, the whole directory structure is processed from top to bottom. Program was developed using C language; and it was developed on SunOS 5.8 (Unix) platform using GNU gcc compiler. - Fictitious Fast Food shop: Implemented a multi-threaded simulation using semaphores to synchronize the POSIX threads that represent the customers and employee in a fast food shop. Two employee are trying to accept and process the orders of the customers which come to a fast food shop and leave after they receive their order. Since only 2 employee have to deal with multiple customers at the same time, -in which case, there are usually more than 2 customers in the shop and some are waiting in line-, semaphores were utilized in order to synchronize the simulation; that is, an employee will perform a task and after finishing it, she will move to another task in order to satisfy all customers' needs fairly. Program was developed using C language on SunOS page 2 of 4 5.8 (Unix) platform using GNU gcc compiler. - Peer to peer instant chat: Implemented a client-server chat program using connectionless UDP communication. The server UDP program runs on the host and waits for messages on a port. The client program sends messages to that port number on host the server stub is running. No connection is established in the communication and it is asynchronous, which means, both sides are not required to work in lock-steps. Once the client sends the first message, the server gets to know the client and can send back messages. Program was developed using C language on SunOS 5.8 (Unix) platform using GNU gcc compiler. - Implemented a simplified version of the internet super-server inetd, which supports TCP services only. inetd listens on several ports for service requests from various connections from the same host or other hosts. Implemented also some basic services, such as; display the current users on server, generate characters, service that outputs the date and time on the server and so on. When a request is made from client side for a service from server, inetd listens and accepts the incoming request on the matching socket and forks a new child that will handle the request. Program was developed using C language on SunOS 5.8 (Unix) platform using GNU gcc compiler. - Implemented a simple socket-based client and server program, which the server will check whether the data sent by the client is “out of bound” data or not. The client can be executed on the same host the server is running or from a different host. When the server starts running, it will listen on a specific port for incoming connections. The client establishes connection with the server specifying the host name and the port. Once the connection is established between client and server, the client sends regular and out-of-bound data that the server checks the data and prints out the data, its byte length and whether it's OOB data. Program was developed using C language on SunOS 5.8 (Unix) platform using GNU gcc compiler. - Implemented a simple Unix interactive shell program called fish (Fantastically Insane Shell) which works similar to the common Unix shells. fish is also able to execute programs in the background like ksh and reports the user when the background process finishes execution. Program was developed using C language on SunOS 5.8 (Unix) platform using GNU gcc compiler. - Multi-thread bridge simulator: Implemented C++ program, using POSIX threads, that simulates car traffic on a two-lane north-south road that contains a bridge. The cars travel from north to south or vice-versa. The bridge on the road has only one lane, which means there can only pass one car at time towards one direction. In order to prevent accidents on the bridge, there are 2 traffic lights on both ends of the bridge that will synchronize the traffic. The program simulates the traffic lights and the cars crossing the bridge. The cars can take random amount of time over the bridge and there can be more than one car passing the bridge at a time, as long as they travel the same direction, but the cars cannot pass each other. Northbound and southbound cars are specified by the user running the program. Semaphores were used to represent the two traffic lights to synchronize the car threads. Program was developed using C++ language and it was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Implemented a simple Unix shell program called shell that can process Unix pipelines and file redirections besides simple Unix commands. The shell can handle up to 100 commands piped together on one command line, and each command can handle up to 100 arguments. Program was developed using C language on SunOS 5.8 (Unix) platform using GNU gcc compiler. - Socket based chat program: Implemented a server based two person chat program using sockets for communication. Once the server starts running on one host, it waits for two clients to establish connection and after the connection is established and sockets are set up, the two clients can communicate each other through the server. That is, the server receives the message from one client and passes it to the other, and vice-versa. The chat page 3 of 4 is asynchronous, that is the client does not need to wait for a response before sending another message to the other client. When one client closes the connection the other client terminates too. The server waits for two other client chat users to establish new connection. Program was developed using C++ language on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Implemented a rudimentary version of the Unix find utility using Unix system calls. Program recursively searches for a given target in a directory tree specified by user and reports the pathname of the target if found. Program was developed using C++ language and it was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. • OTHER PROJECTS - RMI (Remote Method Invocation) application: Implemented a simple client-server Java RMI application that the client remotely executes Unix commands on server side and the server sends the results back to the client. This is an interactive Unix command line application; the server starts executing and waits for requests from client applications. The clients might be from the same host or different hosts over the network. The server can handle only one client at a time. The program was developed on SunOS 5.8 (Unix) platform using jdk 1.5 javac compiler. - Implemented a C++ program called sortalgo, that compares the execution times of the sorting algorithms like selection, insertion, bubble, exchange sorts for a given number of elements. Program was developed on SunOS 5.8 (Unix) platform using GNU g++ compiler. - Database Design: Designed and implemented a functional database schema modeled on a fictitious library using Relational Database. The database was built, populated, queried and modified manually using SQL statements on Oracle 8i database server running at instructor's office. Later in the course, created custom forms, reports and GUI for data input/output. Mustafa Ilhan E-mail: milhan@ecst.csuchico.edu page 4 of 4