473,387 Members | 1,516 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

Design of C++ Periodic table project

Hi there,
I am looking to design a project using C++

The main objective of the project is to display details of periodic
table elements such as periodic element name, properties(such as atomic
number and atomic mass) for each periodic number entered by user. I am
thinking to input all the data regarding each periodic element number
in form of class.

Please give your opinion on the correct design method for the same.

Thanks

Nishant

Mar 16 '06 #1
5 8855
Hi,

I thiink you already made your design yourself:

You need a map from periodic number to element class so a stl map from
unsigned long to a class 'Element'

CElement
{
private:
// Your element data
public
// Bunch of get and set functions
Get();
};
std::map<unsigned long, CElement> periodiclist;

Or

CPeriodicNumber
{
...
operator <( const CPeriodicNumber& PeriodicNumber )const;
{
//...
}
};

std::map<CPeriodicNumber, CElement> PeriodicList;

Fill in the details,et voila.
Regards, Ron AF Greve

http://moonlit.xs4all.nl

<ni*******@rediffmail.com> wrote in message
news:11*********************@e56g2000cwe.googlegro ups.com...
Hi there,
I am looking to design a project using C++

The main objective of the project is to display details of periodic
table elements such as periodic element name, properties(such as atomic
number and atomic mass) for each periodic number entered by user. I am
thinking to input all the data regarding each periodic element number
in form of class.

Please give your opinion on the correct design method for the same.

Thanks

Nishant

Mar 17 '06 #2

<ni*******@rediffmail.com> wrote in message
news:11*********************@e56g2000cwe.googlegro ups.com...
| Hi there,
| I am looking to design a project using C++
|
| The main objective of the project is to display details of periodic
| table elements such as periodic element name, properties(such as atomic
| number and atomic mass) for each periodic number entered by user. I am
| thinking to input all the data regarding each periodic element number
| in form of class.
|
| Please give your opinion on the correct design method for the same.
|
| Thanks
|
| Nishant
|

That should be fairly simple. Start by creating a class that stores one
element with the appropriate components required.

i) class might be simply called Element with the following components:
a) name could be a std::string
b) atomic number could be an unsigned integer
c) atomic mass could be a double

Then determine what constructors and operators as well as member functions
you'll need. Then test it. If you cannot store a single Element, how the
hell are you going to store an entire periodic table?

#include <iostream>
#include <ostream>
#include <deque> // an STL container - double ended queue
#include <iterator> // for std::ostream_iterator
#include <algorithm> // for std::copy

class Element
{
std::string name; // why not symbol too
unsigned number;
double mass;
public:
// parametized ctor
Element(std::string s, unsigned n, double m)
: name(s), number(n), mass (m) { }
// copy ctor
Element(const Element& copy)
{
name = copy.name;
number = copy.number;
mass = copy.mass;
}
// d~tor
~Element() { }
// assignment operator
Element& operator=(const Element& rhv)
{
if(&rhv == this) return *this; // paranoia check
name = rhv.name;
number = rhv.number;
mass = rhv.mass;
return *this;
}
// friend operator<<
friend
std::ostream&
operator<<(std::ostream& os, const Element& e)
{
os << e.number << "\t";
os << e.name.c_str() << ", mass = ";
os << e.mass << std::endl;
return os;
}
}; // class Element

int main()
{
std::deque< Element > de;
de.push_back(Element("Hydrogen", 1, 1.00794)); // copies
de.push_back(Element("Helium", 2, 4.00260));
de.push_back(Element("Lithium", 3, 6.941));

std::copy( de.begin(),
de.end(),
std::ostream_iterator< Element >(std::cout) );

return 0;
}

/*
1 Hydrogen, mass = 1.00794
2 Helium, mass = 4.0026
3 Lithium, mass = 6.941
*/

Once that is achieved, what container would you want the periodic table to
be composed of? A std::map? How will you provide the dataset? a file stream?
etc... The possibilities are endless.

The step-by-step approach at developing this specific project (the periodic
table) is simple enough to help you gain the knowledge you seek and then
some.
If your knowledge of C++ is not quite at par: Consider researching a few
topics.

Topics:
a) encapsulation
b) constructors and initialisation lists
c) references
d) the rule of three
e) templates
f) streams (like std::ostream)
g) iterators
h) algorithms
i) sequential STL containers (vector, list, deque, etc)
j) associative STL containers (map, set, multimap, etc)

There is no need to delve into inheritance yet. At least not until some
smart-a** starts arguing that some elements are non-metallic, some noble
gasses, then metals and yet others radio-active. hmmm.

Mar 17 '06 #3

"Peter_Julian" <pj@antispam.codigo.ca> wrote in message
news:Rb*******************@news20.bellglobal.com.. .
|
| <ni*******@rediffmail.com> wrote in message
| news:11*********************@e56g2000cwe.googlegro ups.com...
| | Hi there,
| | I am looking to design a project using C++
| |
| | The main objective of the project is to display details of periodic
| | table elements such as periodic element name, properties(such as atomic
| | number and atomic mass) for each periodic number entered by user. I am
| | thinking to input all the data regarding each periodic element number
| | in form of class.
| |
| | Please give your opinion on the correct design method for the same.
| |
| | Thanks
| |
| | Nishant
| |
|
| That should be fairly simple. Start by creating a class that stores one
| element with the appropriate components required.
|
| i) class might be simply called Element with the following components:
| a) name could be a std::string
| b) atomic number could be an unsigned integer
| c) atomic mass could be a double
|
| Then determine what constructors and operators as well as member functions
| you'll need. Then test it. If you cannot store a single Element, how the
| hell are you going to store an entire periodic table?
|
| #include <iostream>
| #include <ostream>

#include <string> // duh !!

| #include <deque> // an STL container - double ended queue
| #include <iterator> // for std::ostream_iterator
| #include <algorithm> // for std::copy
|
<snip>

Mar 17 '06 #4
posted:
Hi there,
I am looking to design a project using C++

The main objective of the project is to display details of periodic
table elements such as periodic element name, properties(such as atomic
number and atomic mass) for each periodic number entered by user. I am
thinking to input all the data regarding each periodic element number
in form of class.

Please give your opinion on the correct design method for the same.

Thanks

Nishant

Here's how I'd go about it:

First of all, the Periodic Table is composed of Elements, so it'd be handy
if we had an object type called "Element". What info do we need about an
element? Just the amount of protons in the nucleus of an atom of the
element, therefore:

class Element
{
private:

unsigned const amount_protons;

const char* const full_name;

const char* const short_name;
public:

Element( unsigned const a, const char* const b, const char* const c)
: protons_in_nucleus(a), full_name(b), short_name(c) {}

unsigned AtomicNumber() const { return amount_protons; }
};
From here, there's two alternative routes you can take. We could make
"Carbon" as follows:

Element carbon(6, "Carbon", "C");
In the above case, "carbon" is a single object. This would probably make
sense for your particular project. Also, you may want to specify the average
atomic weight of an atom of the element.
Or... if it were a more elaborate Chemistry program, we could make "Carbon"
a type, as follows:

class Carbon : public Element
{
public:

Carbon() : Element(6, "Carbon", "C") {}
};
From here, we could go on to define the concept of Carbon-12. There's
another two alternatives... we could make the Carbon-12 isotope as an
object:

Carbon carbon_twelve(6);
//Let's pretend its constructor takes the quantity of neutrons
Or, we could make it a class:
class Carbon_Twelve : public Carbon
{
//...
}
but before we got that far, we could make an "Isotope":

class Isotope : public Element
{
public:

unsigned GetQuantityNeutrons() const;
};

And then have:

class Carbon_Twelve : public Isotope
{
//...
};
And finally we can make an individual atom:

class Atom
{
private:
Element element;
unsigned amount_neutrons;

//...
};

And also go on to define an "Ion":

class Ion : public Atom
{
public:

//...
}
Best thing to do is sit down with a pencil and a lots of sheets of paper and
try to come up with some good relationships, meaningful reasons for deriving
"Atom" from "Ion", or vice versa.

There's more than one way to solve this problem -- you just have to find a
way you like.
-Tomás

Mar 17 '06 #5
ni*******@rediffmail.com wrote:
Hi there,
I am looking to design a project using C++

The main objective of the project is to display details of periodic
table elements such as periodic element name, properties(such as atomic
number and atomic mass) for each periodic number entered by user. I am
thinking to input all the data regarding each periodic element number
in form of class.

Please give your opinion on the correct design method for the same.

Thanks

Nishant


Whatever you do with the rest of the program, I definitely recommend
NOT to hardcode the numerical values (of the elements in the periodic
table) in your code. If you store all of those values in a seperate
file, you will be able to edit/append things easily without recompiling
the code all the time. You just have to make sure that that file is
not tampered with by the user.

Mahurshi Akilla

Mar 17 '06 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

36
by: Andrea Griffini | last post by:
I did it. I proposed python as the main language for our next CAD/CAM software because I think that it has all the potential needed for it. I'm not sure yet if the decision will get through, but...
20
by: Karl Smith | last post by:
I heard a rumour that Opera succeeded where none have before, and implemented the tables described in HTML4 and CSS2. So I thought I'd try it out with the well known Periodic Table. ...
9
by: sk | last post by:
I have an applicaton in which I collect data for different parameters for a set of devices. The data are entered into a single table, each set of name, value pairs time-stamped and associated with...
0
by: allyn44 | last post by:
Hello, I have a situation where I have to create 20 labels for each instance of an ID-each of the 20 labels has a different test number on it but needs the same id and one of 3 project names--for...
10
by: BlueDolphin | last post by:
I'm not sure if this is a question or more of a rant... but I'm looking for some input on this from other developers out there. How often has the following happened to you and how have you dealt...
17
by: tshad | last post by:
Many (if not most) have said that code-behind is best if working in teams - which does seem logical. How do you deal with the flow of the work? I have someone who is good at designing, but...
8
by: Brett | last post by:
I have a form with a Form1_Load() Subprocedure and no other code. For some reason, the design view does not come up. If I add a new form, the design view does come up. The form does appear when...
1
by: nishantxl | last post by:
Hi there, I am looking to design a project using C++ The main objective of the project is to display details of periodic table elements such as periodic element name, properties(such as atomic...
12
by: nyathancha | last post by:
Hi, I have a question regarding best practices in database design. In a relational database, is it wise/necessary to sometimes create tables that are not related to other tables through a...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.