正文

学生同学录管理系统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')   //使输入为yes或no     {        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; }

阅读(4138) | 评论(1)


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

评论

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