用c++写的简易学生通讯录

        昨天我一大学室友找到我说他亲戚要个学生通讯录程序,一定要c++来写,而他是学Java的,对c++的基本语法都忘干净了。因为我是做c方面开发的,所以问我能不能搞定。虽然我也半年多没用c++写过东西了,但作为室友怎么能拒绝呢,再个看了下他的需求感觉挺简单的(没涉及到数据库操作),于是就应承下来了。

        他给我的需求是这样的:

        学生通讯录系统
        学生通信录信息包括:姓名、学号、年龄、性别、家庭住址、联系电话、寝室号等信息。
        系统以菜单方式工作,使之能提供以下功能::
        学生通信录信息的输入
        学生的通信录信息删除和修改
        学生的通信录信息查询和统计功能
        学生的通信录信息输出显示 
        而且数据都保存在内存中;

        我在Linux下用了半上午时间给他写了个简易的通讯录程序,下面我把代码贴出来,希望可以给那些大一大二想写这个程序的同学一点思路。其中不规范的地方还望大家指出了(因为为了尽快完成功能,所以一些规范就没太注意),谢谢!
#include
#include //主要是用到exit()退出进程函数 
#include//字符串头文件

#define NoFind -1
#define NoOperation -2
#define Fill  -3
#define Exist -4

using namespace std;

class student
{
  public:
    void printStudent(); // print a student information

    void setName();
    string getName();
    
    void setId();
    unsigned int getId();

    void setAge();
    unsigned int getAge();

    void setSex();
    char getSex(); 

    void setAddr();
    string getAddr();

    void setPhone();
    string getPhone();

    void setRoom();
    string getRoom();

  private:
    string name;
    unsigned int  id;
    unsigned int  age;
    char sex;
    string addr;
    string phone;
    string room;
};

void student::setId()
{
  cout<<"Id:";
  cin>>id;
}

unsigned int student::getId()
{
  return id;
}

void student::setName()
{
  cout<<"Name:";
  cin>>name;
}

string student::getName()
{
  return name;
}

void student::setAge()
{
  cout<<"Age:";
  cin>>age;
}

unsigned int student::getAge()
{
  return age;
}

void student::setSex()
{
  cout<<"Sex:";
  cin>>sex;
}

char student::getSex()
{
  return sex;
}

void student::setAddr()
{
  cout<<"Addr:";
  cin>>addr;
}

string student::getAddr()
{
  return addr;
}

void student::setPhone()
{
  cout<<"Phone:";
  cin>>phone;
}

string student::getPhone()
{
  return phone;
}

void student::setRoom()
{
  cout<<"Room:";
  cin>>room;
}

string student::getRoom()
{ 
  return room;
}

void student::printStudent()
{
  cout<<"Id:"<>select;

	switch(select)
	{
		case 1:
			cout<<"please enter the student Id:";
			cin>>id;
		    break;
		case 2:
			cout<<"please enter the student Name:";
			cin>>name;
			break;
		case 3:
			return NoOperation;
		case 4:
			cout<<"exit process!"<>yORn;
	if(!(('y' == yORn) || ('Y' == yORn)))
		return 0;

	if( -1 == (index = getArrayFree()) )
	{
		cout<<"The contacts filled!"<>select;

		switch(select)
		{
			case 1://下面循环要判断id(学号)是否重合,如果重合就再选择一个学号,直到没有重合的
				while((count-1))
				{
					buff[index].s.setId();
					count = isExist(buff[index].s.getId());
					if(count >= 2) cout<<"id is exist!"<"<>number;
	 
		if(7 == number) 
		  return;   
        if((1 <= number)&&(7 > number))
			select(number);
		sleep(1);
	 }
}


int main(int argc, char **argv)
{
   menu();
   return 0;
}
        程序基本就是这样的,在Linux系统上测试通过,没问题。在其他系统上应该没有大问题,如果有的话就是头文件的问题(听室友说在mac上sleep()函数是没有的,Windows下要添加一个头文件,具体什么头文件需要的可以百度下);
        程序还有个问题,就是在menu()函数中输入值给number时,如果你输入字符就会出现死循环(这个死循环不是因为while(1)造成的,如果正常死循环,每循环一次就会等待用户输入一个值),在我预计中不会出现这个问题的,因为输入字符也是转化成ascii码,然后也会被剔除的。可惜,不是这样,我打印了下number(当输入字符A时),结果却是0,而不是64;还有当输入学生信息时,如果在id输入时,不小心输入名字时(其实就是字符串)也会出现未知的错误。查了资料说是c++中类型不能混用,本应该要有防止这种失误操作的处理方法,但我实验了下,没成功,如果谁有好的办法希望可以告诉我一声,共同学习嘛。谢谢!
         转载请注明作者和原文出处,原文地址: http://blog.csdn.net/yuzhihui_no1/article/details/43530445

你可能感兴趣的:(C语言)