The main theme of this dissertation is the study of the lattice points in a
rational convex polyhedron and their encoding in terms of Barvinok's short rational
functions. The first part of this thesis looks into theoretical applications of these
rational functions to Optimization, Statistics, and Computational Algebra. The main theorem
on Chapter 2 concerns the computation of the \emph{toric ideal} $I_A$ of an integral $n
\times d$ matrix $A$. We encode the binomials belonging to the toric ideal $I_A$ associated
with $A$ using Barvinok's rational functions. If we fix $d$ and $n$, this representation
allows us to compute a universal Gr\"obner basis and the reduced Gr\"obner basis of the
ideal $I_A$, with respect to any term order, in polynomial time. We derive a polynomial
time algorithm for normal form computations which replaces in this new encoding the usual
reductions of the division algorithm. Chapter 3 presents three ways to use Barvinok's
rational functions to solve Integer Programs. The second part of the thesis is experimental
and consists mainly of the software package {\tt LattE}, the first implementation of
Barvinok's algorithm. We report on experiments with families of well-known rational
polytopes: multiway contingency tables, knapsack type problems, and rational polygons. We
also developed a new algorithm, {\em the homogenized Barvinok's algorithm} to compute the
generating function for a rational polytope. We showed that it runs in polynomial time in
fixed dimension. With the homogenized Barvinok's algorithm, we obtained new combinatorial
formulas: the generating function for the number of $5\times 5$ magic squares and the
generating function for the number of $3\times 3 \times 3 \times 3$ magic cubes as rational
functions.