CSC 216 Programming Concepts - Java

The second course in computing, intended for computer science majors. Emphasis is placed on interpretation of inductive definitions (functions and data types); testing strategies; specification and implementation of finite-state machine; encapsulation; polymorphism; inheritance; class invariants; and resource management. 4 credit hours


• Prerequisite

A C- or better in CSC116 Introduction to Computing (or equivalent) is a required prerequisite for this course. As a student, you are expected to know and understand the material covered in CSC116, and only a minimal amount of time will be spent on a brief refresh of this information. Calculus I which is offered as MA 141 by the Department of Mathematics at North Carolina State University.

• Course Objectives

CSC 216 is the second course in computing, intended for majors and students in the Computer Science Certificate Program. Emphasis is placed on interpretation of inductive definitions (functions and data types); testing strategies; specification and implementation of finite-state machine; encapsulation; polymorphism; inheritance; class invariants; and resource management.

This is a course on the fundamentals of computer science and programming using Java. Students taking this course are expected to have an understanding of loops, conditional logic, objects, classes, file I/O, arrays, and the basics of Java GUIs (swing and/or AWT).

Upon satisfactory completion of this course, you should be able to:

  • Describe the utility of inheritance, abstract classes, interfaces, and polymorphism in object-oriented systems, and design and implement programs that use these language features.
  • Identify the phases of a simple model of the software life cycle and employ these phases in developing software.
  • Describe basic design modeling techniques, including UML class diagrams,  and indicate how and when to use them.
  • Identify and compare the  basic kinds of software testing, describe when to use each method, and design and implement test code.
  • Navigate and extract information from the Java API and employ the Javadoc tool to construct internal documentation of source code.
  • Design and implement a finite state machine.
  • Identify when recursion is useful and design and implement recursive algorithms and simple recursive data structures.
  • Construct and use a stack, queue, array-based list, linked list, and a simple binary tree.
  • Proficiently use an IDE (Eclipse) and version control system (GitHub).

• Course Requirements

Grading and Course Work

Your final grade will be based on the following scheme:



Guided Project 1


Guided Project 2


Guided Project 3


Labs (12 different labs) 10%

Project 1: Black Box Test Plan, Design Document


Project 1: Solution code and JUnit tests


Project 2: Black Box Test Plan, Design Document


Project 2: Solution code and JUnit tests


Project 3: Black Box Test Plan, Design Document


Project 3: Solution code and JUnit tests


Test 1


Test 2


Final Exam


You cannot make up missed tests or exams without an official university excuse. Furthermore, we will not accept late programming assignments (except as described below) without an official university excuse.

Code and Submission Tools. You must use Eclipse for project/code development and NC State's GitHub for submission of your work. Eclipse is an industrial-strength Integrated Development Environment (IDE) that incorporates many of the tools that you will use this semester. GitHub is a web application around Git, which is a version control system. You will submit all non-test/non-exam work for grading to instructor supplied repositories in NC State's GitHub. This includes both code and ancillary documents. The initial labs and guided projects have copious information/tutorials on how to use Eclipse and GitHub.

Guided Projects. Guided Projects will introduce you to several tools to facilitate learning software engineering skills, specifically Eclipse, JUnit, GitHub, Jenkins, FindBugs, PMD, CheckStyle, Subversion, and EclEmma. There are three guided projects, with the second building on the first and the third building on the second.

Labs. There are twelve labs for the semester. Each deals with a specific course topic. Most labs are due the week following their presentations in the lecture material. The due date/time for each lab is given in the syllabus. All submissions will be to GitHub, and all will be graded automatically by Jenkins. In calculating your lab average, we will drop your lowest two lab grades.

Programming Projects. There are three full programming assignments. Each assignment is divided into two parts. Part 1 is devoted to design and black-box test plans. Part 2 is devoted to implementing the design that we supply and unit testing your code. For each project, we supply the instructor design immediately after the Part 1 due date. You have approximately 2 weeks from that time to submit your code for Part 2.

You must electronically submit all project deliverables by the published deadlines and follow the specified formats, submission instructions, and naming conventions. All projects (except Design Proposals and Rationales for Part 1) will be accepted up to 48 hours late. You will lose 1 point every 2 hours the project is late, up to 24 points. No submissions will be accepted after the 48 hour late window without a university excused absence. No late submissions will be accepted through email.

Feedback. Jenkins is a continuous integration program that will automatically compile and test your programs (both with your tests and the teaching staff tests) and provide style feedback. Your grade for Part 2 of each project as well as each lab will be calculated from the last GitHub submission you make before the deadline (even if Jenkins runs after the deadline for that submission) plus additional points for acceptance tests, FindBugs issues, and other related rubric items. The style deductions as derived from Jenkins feedback may be modified by the teaching staff when they manually inspect your code and comments.

Working Individually. All projects must be developed individually rather than as group projects. All programs are to be you own work. See the "Academic Integrity" section of the syllabus for further details.

Grade Appeals. If you feel an assignment was graded improperly, write a request for regrade and explain the basis of your belief. First discuss the grade with the TA who graded the assignment. If you are still unsatisfied with the answer, submit the assignment to the instructor for a regrade. All regrade requests must be submitted to the instructor no later than 2 weeks after the assigned was returned to you. All grade requests for Project 3 must be made at least one day prior to the final exam.

Time and Effort: You are expected to view the taped lectures, read the online course lecture material, and do the non-graded exercises. You should remain current with the course schedule. In addition to reading the html lectures and viewing the videos, expect to spend on average 10 to 16 hours per week preparing and working on graded assignments. In some weeks, especially those around project deadlines, you may spend more than that amount of time. Please plan ahead and use your time wisely. Do NOT wait until the last minute to complete programming projects!!!

Final Grades

In order to pass the course with a letter grade, you must have a 60+weighted average on the exams and you must have a 60+ weighted average on the remaining graded material (projects, labs).

In order to pass the course with a C- or better, you must have a 65+ weighted average on the exams and you must have a 65+ average on the programming assignments and labs.

Subject to the "average" conditions above, your final grade will be determined according to the following table, where X is your overall weighted average for projects and final exam.


Letter Grade

98 <= X <= 100


92 <= X < 98

90 <= X < 92


88 <= X < 90


82 <= X < 88

80 <= X < 82


78 <= X < 80


72 <= X < 78

70 <= X < 72


68 <= X < 70


62 <= X < 68

60 <= X < 62


X < 60

Credit Only and Audit students

The grade of "CR" will be awarded to a student taking the course for credit-only who passes the course with a grade of 70.0 or higher.

Audit students do not need to meet any requirements in order to earn a grade of AU..

• Textbook

The primary, up-to-date, consistent source of information for this course is the lecture notes posted on this site. You are expected to read them and understand them thoroughly. You are also expected to do all of the practice exercises. Videos to go with this course are available at the Engineering Online website. The video tapes are being made anew in a live class this semester, and they will be available as soon as possible after each actual taping.

Textbook: Building Java Programs (2nd Ed) by Reges and Stepp. You likely already have a copy of this from CSC 116.

Note that most introductory Java textbooks provide a convenient source of extra help and reference. Of course, the web is an excellent place to look for help with the Java language and programming practices as well.

• Computer and Internet Requirements

NCSU and Engineering Online have recommended minimum specifications for computers. For details, click here.

• Instructor

Dr. Jo E Perry
Engineering Online
NCSU Campus
Raleigh, NC 27695

James C Tetterton                                                              
Engineering Online
NCSU Campus
Raleigh, NC 27695