正文

学生同学录管理系统2006-10-22 16:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/liuwg/19617.html

分享到:

[问题描述]

实现学生通讯录管理的几个操作功能(新建、插入、删除、从文件中读取、写入文件和查询、屏幕输出等功能)。通讯录中学生的信息有学号、姓名、出生日期、性别、电话和地址等。

[内容]

1、利用链式存储结构来实现

2、系统的菜单功能项如下:

1----新建学生通讯录

2----向学生通讯录插入学生信息

3----在通讯录删除学生信息

4----在文件中读取通讯录信息

5----向文件中写入学生通讯录信息

6----在通讯录中查询学生信息

7----在屏幕中输出全部学生信息

8----退出

代码如下:

//通讯录.h

#include<iostream>

#include<fstream>

#include<string>

#include<iomanip>

using namespace std;

struct DataType                              //定义所有信息

{

    char number[20];              //学号

    char name[20];                //姓名

    char birthday[20];            //生日

    char sex[6];                  //性别

    char telephone[10];           //电话号码

    char address[20];             //地址

};

struct student                           //定义学生信息

{

    DataType data;

    student *next;                

};

class txl

{

private:

    student *head;          //头指针

    student *currptr;       //当前指针

public:

    txl();

    ~txl();

    void Creat();                       //新建学生通讯录

    void Insert();                    //向学生通讯录插入学生信息

    void Delete();                    //在通讯录删除学生信息

    void WriteFile();             //从文件中读取通讯录的信息

    void ReadFile();                     //向文件写入学生通讯录信息

    void Search();                      //在通讯录中查询学生信息

    void Display();                    //在屏幕中输出全部学生信息

    void Exit();                       //退出

};

//通讯录.cpp

 

#include"通讯录.h"

txl::txl()                          //构造函数

{

    head=currptr=NULL;

};

txl::~txl()                         //释构函数

{

    student *temp=head;                  //释放空间

    while(temp)

    {

       delete temp;

    }

} 

 

//新建学生通讯录

//  功能:采用头插入的方式建琏,并询问是否保存到文件

//  参数:无

//返回值:无

void txl::Creat()                                  

{

    cout<<"你想要建立多少个学生的通讯录:";

    int i,n;

    cin>>n;   

    for(i=0;i<n;i++)                        //输入学生信息

    {

        currptr=new student;

       cout<<"请输入学生的学号:";

       cin>>currptr->data.number;

       cout<<"请输入学生的姓名:";

        cin>>currptr->data.name;

       cout<<"请输入学生的生日:";

       cin>>currptr->data.birthday;

       cout<<"请输入学生的性别:";

       cin>>currptr->data.sex;    

       cout<<"请输入学生的电话号码:";

       cin>>currptr->data.telephone;

       cout<<"请输入学生的地址:";

       cin>>currptr->data.address;

       currptr->next=head;                   //头插入建琏

       head=currptr;

    }

};

 

//向学生通讯录插入学生信息

//  功能:采用头插入的方式把结点插进去,并询问是否保存到文件

//  参数:无

//返回值:无

void txl::Insert()                            

{

    cout<<"你想要在哪个位置插入:";

    int k,n=0;                               //k记录插入位置,n记录琏表长度

    cin>>k;

    student *p=head,*q=NULL,*t=head;

    while(t)

    {

       t=t->next;

       n++;

    }

    if(k>n+1||k<1)                          //不存在此位置,不能存入

    {

       cout<<"此位置不合法";                             

    }

    else{

    currptr=new student;

    cout<<"请输入你要插入的学生的信息!"<<endl;              //需插入的学生信息

    cout<<"请输入学生的学号:";

    cin>>currptr->data.number;

    cout<<"请输入学生的姓名:";

    cin>>currptr->data.name;

    cout<<"请输入学生的生日:";

    cin>>currptr->data.birthday;

    cout<<"请输入学生的性别(male/female)";

    cin>>currptr->data.sex;    

    cout<<"请输入学生的电话号码:";

    cin>>currptr->data.telephone;

    cout<<"请输入学生的地址:";

    cin>>currptr->data.address;

    if(k==1)                                      //建琏

    {

       currptr->next=head;

       head=currptr;

    }

    else

    {

      for(int i=1;i<k;i++)

      {

       q=p;

       p=p->next;

      }

      q->next=currptr;

      currptr->next=p;

    }

    }

}

 

//在通讯录删除学生信息

//  功能:删除结点,并询问是否从文件中删除(采用覆盖原有文件的形式)

//  参数:无

//返回值:无

void txl::Delete()                  

{

    if(head!=NULL)                      //琏表存在时就做删除操作

    {

       cout<<"你想要在哪个位置删除:";

       int k,n=0;                                 //k记录删除位置,n记录琏表长度

       student *p=head,*q=head->next,*t=head;

       cin>>k;

       while(t)

       {

         t=t->next;

         n++;

       }

       if(k>n||k<1)

          cout<<"This position don't exist!"<<endl;           //所要删除位置超出范围

       else

       {

          if(k==1)

             head=head->next;

          else

          {

              for(int i=1;i<k-1;i++)

              {

                 p=q;

                 q=q->next;

              }

              if(q==NULL)p=NULL;

              else

                 p->next=q->next;

          }

       }

    }

}

 

//向文件写入学生通讯录信息

//  功能:把琏表中的结点都保存到文件中

//  参数:琏表的一个结点

//返回值:无

void txl::WriteFile()                    

{

    student *s=head;

    ofstream fop;

    fop.open("通讯录.dat",ios::binary|ios::trunc);           //以二进制形式打开文件//覆盖原来的文件且重新保存删除后的内容

    if(!fop)

    {

       cout<<"通讯录.dat can't open!"<<endl;

       abort();

    }

    char Y_N;

    cout<<"Would you like to save it in file(Y/N)";    //询问是否保存到文件中

    cin>>Y_N;

    while(Y_N!='Y'&&Y_N!='y'&&Y_N!='N'&&Y_N!='n')   //使输入为yesno

    {

       cout<<"Please input 'Y' or 'N'";

       cin>>Y_N;

    }

    if(Y_N=='Y'||Y_N=='y')                              //保存

    {

       while(s)

       {

           while(fop.write((char *)&s->data,sizeof(s->data)))

           {

              s=s->next;

              flush(cout);

           }

       }

       cout<<"Successfully Save File!"<<endl;

    }

    fop.close();

}

 

//从文件中读取通讯录的信息

//  功能:从文件中读取内容,并建琏

//  参数:无

//返回值:无

void txl::ReadFile()                     

{

    currptr=new student;

    ifstream fip("通讯录.dat",ios::in|ios::binary);              //以二进制形式打开文件

    while(fip.read((char *)&currptr->data,sizeof(currptr->data)))

    {

       currptr->next=head;

       head=currptr;

       currptr=new student;

    }

    fip.close();

    delete currptr;

}

 

//在通讯录中查询学生信息

//  功能:按姓名或学号的形式查找

//  参数:无

//返回值:无

void txl::Search()                     

{

    cout<<"你可以通过以下方式查询:"<<endl;

    cout<<"1、按学号查询"<<endl;

    cout<<"2、按姓名查询"<<endl;

    cout<<"你想要按什么方式查询(1 or 2)";

    char ch;

    cin>>ch;

    cout<<"你要查询的信息是:";

    while(ch!='1'&&ch!='2')

    {

       cout<<endl;

       cout<<"操作错误,请重新输入:";

       cin>>ch;

    }

    student *cu=head;

    if(ch=='1')                                    //按学号查询

    {

       char num[20];

       cin>>num;

       while(cu!=NULL)

       {

           if(strcmp(cu->data.number,num)==0)     //判断是否是所查学号

           {

              cout<<"你要找的学生信息为:"<<endl;

              cout<<cu->data.number<<"   "<<cu->data.name<<"   "<<cu->data.birthday<<"   "<<cu->data.sex<<"   "

                  <<cu->data.telephone<<"   "<<cu->data.address<<endl;

              break;

           }

           cu=cu->next;

       }

       if(cu==NULL)

           cout<<"不存在这个学生!"<<endl;

    }

    else                                           //按姓名查询

    {

       char na[20];

       cin>>na;

       while(cu!=NULL)

       {

           if(strcmp(cu->data.name,na)==0)          //判断是否是所查姓名

           {

              cout<<"你要找的学生信息为:"<<endl;

              cout<<cu->data.number<<"    "<<cu->data.name<<"   "<<cu->data.birthday<<"   "<<cu->data.sex<<"   "

                  <<cu->data.telephone<<"   "<<cu->data.address<<endl;

              break;

           }

           cu=cu->next;

       }

       if(cu==NULL)                                     //查询不到

           cout<<"不存在这个学生!"<<endl;

    }

}

 

//在屏幕中输出全部学生信息

//  功能:输出琏表的每一个内容

//  参数:无

//返回值:无

void txl::Display()                   

{

    if(head==NULL)

       cout<<"通讯录里没有内容!\n\n";

    else{

    student *k=head;

    cout<<setiosflags(ios::left)<<setw(10)<<"学号"<<setiosflags(ios::left)<<setw(10)<<"姓名"

       <<setiosflags(ios::left)<<setw(10)<<"生日"<<setiosflags(ios::left)<<setw(6)<<"性别"

       <<setiosflags(ios::left)<<setw(10)<<"电话号码"<<setiosflags(ios::left)<<setw(10)

       <<"地址"<<endl;                  //设置左对齐输出

    while(k)

    {

        cout<<setiosflags(ios::left)<<setw(10)<<k->data.number<<setw(10)<<setiosflags(ios::left)

           <<k->data.name<<setw(10)<<setiosflags(ios::left)<<k->data.birthday<<setw(6)

           <<setiosflags(ios::left)<<k->data.sex<<setw(10)<<setiosflags(ios::left)

           <<k->data.telephone<<setw(10)<<setiosflags(ios::left)<<k->data.address<<endl;

       k=k->next;

    }

    cout<<endl;

    }

}

//  功能:告知结束运行系统

//  参数:无

//返回值:无

void txl::Exit()                       //退出

{

    WriteFile();            //询问是否保存对文件的修改

    cout<<"感谢使用本系统!"<<endl;

    exit(1);                 //命令整个程序退出;

}

//main.cpp

#include<iostream>

#include"通讯录.h"

using namespace std;

int main()

{

    cout<<"****************欢迎使用学生通讯录管理系统****************"<<endl;

        cout<<"#========================================================#"<<endl;

    cout<<"#*********在这个管理系统中,我们可以做以下的操作*********#"<<endl;

    cout<<"#*********1、新建学生通讯录******************************#"<<endl;

    cout<<"#*********2、向学生通讯录插入学生信息********************#"<<endl;

    cout<<"#*********3、在通讯录删除学生信息************************#"<<endl;

    cout<<"#*********4、在通讯录中查询学生信息**********************#"<<endl;

    cout<<"#*********5、在屏幕中输出全部学生信息********************#"<<endl;

    cout<<"#*********6、退出(并保存修改)****************************#"<<endl;

    cout<<"#========================================================#"<<endl;

    char ch;

    txl t;

    t.ReadFile();                          //读取文件里的信息

    cout<<"已从文件中读取内容了!\n";

    do{

        cout<<"********************************************************\n";

       cout<<"**1、新建//2、插入//3、删除//4、查询//5、显示//6、退出**"<<endl;

       cout<<"********************************************************\n";

       cout<<"What do you want to do:";

        cin>>ch;

        while(ch>'6'||ch<'1')                                 //使选择范围在1~6

       {

           cout<<"Error operation!Please input again:";

           cin>>ch;

       }

       switch(ch)

       {

       case '1':t.Creat();break;                     //1、新建学生通讯录

       case '2':cout<<"现在学生的信息如下:"<<endl;

           t.Display();

           t.Insert();break;          //2、向学生通讯录插入学生信息

        case '3':cout<<"现在学生的信息如下:"<<endl;

           t.Display();

           t.Delete();break;           //3、在通讯录删除学生信息                                   

        case '4':cout<<"现在学生的信息如下:"<<endl;

           t.Display();

           t.Search();break;                       //5、在通讯录中查询学生信息

        case '5':t.Display();break;                     //6、在屏幕中输出全部学生信息

        case '6':t.Exit();break;                        //7、退出

       }

    }while(1);

    return 0;

}

阅读(4052) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册