C++实现学生通讯录管理系统

来源:互联网 发布:p2p无线监控软件 编辑:程序博客网 时间:2024/05/16 05:56

学生通讯录管理系统

本人是一个在校大学生,在读大二,最近做了一个C++课程设计学生通讯录管理系统,以实现学生各种信息(学号,姓名,联系方式等)的录入加载保存修改删除等。欢迎大家交流指点技术。

学生通讯录管理系统课程设计报告(点击进入下载页)

  • 使用C++编写,简单通俗

 
- 菜单栏

Markdown及扩展

  • UML图

自己画的UML图

源代码

两个类Addressbook和person

#include <iostream>#include <fstream>#include <string>#include <iomanip>using namespace std;int Enterflag=0;           //定义输入次数的全局变量class person{protected:    int firstname;          //学号前缀    int Num;                //学号    char name[40];          //姓名    char sex[10];           //性别    int age;                //年龄    char tel[20];           //电话    char email[60];         //邮箱    char postcode[10];      //邮编    char IDnumber[30];      //身份证号    person *mynext;         //下一个学生指针public:    person();    person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[]);    person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[],person *next);    int getfirstname();    int getNum();    char *getname();    char *getsex();    int getage();    void getage(int ag);    char *gettel();    char *getemail();    char *getpostcode();    char *getIDnumber();    person *getnext();    void setnext(person *next);    void output();};person::person(){    Num=0;    firstname=0;    strcpy(name,"");    strcpy(sex,"");    age=0;    strcpy(tel,"");    strcpy(email,"");    strcpy(postcode,"");    strcpy(IDnumber,"");    mynext=NULL;}person::person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[]){    Num=pNum;    firstname=pfirstname;    strcpy(name,pname);    strcpy(sex,psex);    age=page;    strcpy(tel,ptel);    strcpy(email,pemail);    strcpy(postcode,ppostcode);    strcpy(IDnumber,pIDnumber);    mynext=NULL;}person::person(int pNum,int pfirstname,char pname[],char psex[],int page,char ptel[],char pemail[],char ppostcode[],char pIDnumber[],person *next){    Num=pNum;    firstname=pfirstname;    strcpy(name,pname);    strcpy(sex,psex);    age=page;    strcpy(tel,ptel);    strcpy(email,pemail);    strcpy(postcode,ppostcode);    strcpy(IDnumber,pIDnumber);    mynext=next;}int person::getNum(){    return Num;}int person::getfirstname(){    return firstname;}char *person::getname(){    return name;}char *person::getsex(){    return sex;}int person::getage(){    return age;}void person::getage(int ag){    age=ag;}char *person::gettel(){    return tel;}char *person::getemail(){    return email;}char *person::getpostcode(){    return postcode;}char *person::getIDnumber(){    return IDnumber;}person *person::getnext(){    return mynext;}void person::setnext(person *next){    mynext=next;} void person::output(){    cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;    cout<<setw(12)<<"学号"<<setw(20)<<"姓名"<<setw(9)<<"性别"<<setw(8)<<"年龄";    cout<<setw(8)<<"电话"<<setw(22)<<"邮箱"<<setw(16)<<"邮编"<<setw(12)<<"身份证号"<<endl;    cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;    cout<<setw(14)<<firstname<<setw(4)<<Num<<setw(15)<<name<<setw(7)<<sex<<setw(8)<<age;    cout<<setw(13)<<tel<<setw(26)<<email<<setw(8)<<postcode<<setw(20)<<IDnumber<<endl;    cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;}class AddressBook{private:    person *myfirst;            //指向联系人人员的指针public:    AddressBook();    AddressBook(int npNum,int firstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[]);    ~AddressBook();    void displayRecord();       //显示记录    bool queryRecord();         //查询记录    bool queryRecord(int firstname,int  fNum);    //有参查询函数,学号查询    void addRecord();           //添加或新建记录    void input(int number,int firstname);     //键盘读入新成员信息、    void insert(int npNum,int firstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[]);    //成员链表插入新成员信息    bool update();              //修改记录    bool removeRecord();        //删除记录    void saveRecords();         //保存记录    void loadRecords();         //读取记录    void clear();               //清空当前通讯录};AddressBook::AddressBook(){    myfirst=NULL;}AddressBook::AddressBook(int npNum,int npfirstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[]){    myfirst=new person(npNum,npfirstname,npname,npsex,npage,nptel,npemail,nppostcode,npIDnumber);}AddressBook::~AddressBook(){    person *next=myfirst,*temp;    while(next!=NULL)    {        temp=next;        next=next->getnext();        delete temp;    }    myfirst=NULL;}//添加或新建记录void AddressBook::addRecord(){    int tempnum,tempfirstname,number1,number2;    char flag[5];    person *per=myfirst;    if(per==NULL)    {        cout<<"目前没有学生通讯录信息,请键盘输入添加(Y)或直接返回程序主菜单(N):";        cin>>flag;        while(1)        {            if(strcmp(flag,"Y\0")==0)            {                while(1)                {                    cout<<"请输入学生的学号前缀:";                    cin>>tempfirstname;                    if(tempfirstname<0)                    {                        cout<<"输入错误,请重新输入!";                        continue;                    }                    break;                }                while(1)                {                    cout<<"请输入学生的尾号后4位:";                    cin>>tempnum;                    if(tempnum<1000||tempnum>9999)                    {                        cout<<"输入错误,请重新输入!";                        continue;                       }                    else                    {                        input(tempnum,tempfirstname);                        cout<<"是否继续添加(Y/N):";                        cin>>flag;                        if((strcmp(flag,"N\0")==0))                        return;                         addRecord();                    }                }            }            else if((strcmp(flag,"N\0")==0))            {                Enterflag=0;                return;            }            else            {                cout<<"输入错误,请键盘输入添加(Y)或直接返回程序主菜单(N):";                cin>>flag;                continue;            }           }    }    else    {        cout<<"目前已有的学生信息:"<<endl;        displayRecord();        cout<<"学号前缀是否与最后一个同学相同?(Y/N):";        cin>>flag;        while(1)        {            if(strcmp(flag,"N\0")==0)            {                while(strcmp(flag,"N\0")==0)                {                    cout<<"请输入学生的学号前缀:";                    cin>>tempfirstname;                    if(tempfirstname<0)                    {                        cout<<"输入错误,请重新输入!";                        continue;                    }                    break;                }                while(strcmp(flag,"N\0")==0)                {                    cout<<"请输入学生的尾号后4位:";                    cin>>tempnum;                    if(tempnum<1000||tempnum>9999)                    {                        cout<<"输入错误,请重新输入!";                        continue;                       }                    input(tempnum,tempfirstname);                    break;                      }                break;            }            else if(strcmp(flag,"Y\0")==0)            {                while(strcmp(flag,"Y\0")==0)                {                    cout<<"请输入学生的尾号后4位:";                    cin>>tempnum;                    if(tempnum<1000||tempnum>9999)                    {                        cout<<"输入错误,请重新输入!";                        continue;                       }                    break;                      }                if(per->getnext()==NULL)                {                    number1=per->getfirstname();                    input(tempnum,number1);                }                else                {                    while(per->getnext()!=NULL)                        per=per->getnext();                    number2=per->getfirstname();                    input(tempnum,number2);                }            }            break;        }    }}//显示记录void AddressBook::displayRecord(){    person *head=myfirst;    cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;    cout<<setw(12)<<"学号"<<setw(20)<<"姓名"<<setw(9)<<"性别"<<setw(8)<<"年龄";    cout<<setw(8)<<"电话"<<setw(22)<<"邮箱"<<setw(16)<<"邮编"<<setw(12)<<"身份证号"<<endl;    int i=0;     while(head!=NULL)    {        i++;        cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;        cout<<setw(14)<<head->getfirstname()<<setw(4)<<head->getNum()<<setw(15)<<head->getname()<<setw(7)<<head->getsex()<<setw(8)<<head->getage();        cout<<setw(13)<<head->gettel()<<setw(26)<<head->getemail()<<setw(8)<<head->getpostcode()<<setw(20)<<head->getIDnumber()<<endl;        head=head->getnext();    }    cout<<"--------------------------------------------------------------------------------------------------------------------"<<endl;    cout<<"目前总共有"<<i<<"个学生数据"<<endl;}//清空当前通讯录void AddressBook::clear(){    person *head=myfirst;    person *fhead=head;    ofstream fout("addressbook.txt",ios::trunc);    while(head!=NULL)    {        fhead=head->getnext();        delete head;        head=fhead;    }    myfirst=NULL;    fout.close();    cout<<"数据清除完毕!\n";}//查询记录,有参,学号bool AddressBook::queryRecord(int stufirstid,int foNum){    person *head=myfirst;    person *fhead=head;    while(head!=NULL)    {        if(head->getfirstname()==stufirstid&&head->getNum()==foNum)        {               head->output();            return true;        }        else        {            fhead=head;            head=head->getnext();        }    }    return false;}//查询记录,无参bool AddressBook::queryRecord(){    int stuid,stufirstid,k;    char stustr[60];    person *head=myfirst;    person *fhead=head;    while(1)    {        cout<<"请确定使用何种方法查找学生信息.\n1.姓名 2.学号:";        cin>>k;        if(k!=1&&k!=2)        {               cout<<"输入错误,请重新输入!";            continue;        }        switch(k)        {        case 1:            {                cout<<"请输入学生的姓名:";                cin>>stustr;                if(head==NULL)                {                    cout<<"本校暂无学生信息!"<<endl;                    return false;                }                else                {                    while(head!=NULL)                    {                        if(strcmp(head->getname(),stustr)==0)                        {                            head->output();                            if(head->getnext()==NULL)                            return true;                        }                            fhead=head;                            head=head->getnext();                    }                    cout<<"本校无此学生信息!"<<endl;                    return false;                }            }            break;        case 2:            {                cout<<"请输入学生的学号前缀:";                cin>>stufirstid;                cout<<"请输入学生的学号尾号后4位:";                cin>>stuid;                if(head==NULL)                {                    cout<<"本校暂无学生信息!"<<endl;                    return false;                }                else                {                    while(head!=NULL)                    {                        if(head->getfirstname()==stufirstid&&head->getNum()==stuid)                        {                            head->output();                            return true;                        }                        else                        {                            fhead=head;                            head=head->getnext();                        }                    }                    cout<<"本校无此学生信息!"<<endl;                    return false;                }            }            break;        }    }}//键盘读入新成员信息、void AddressBook::input(int number,int firstname){    int page;    char pname[40],psex[10],ptel[20],pemail[60],ppostcode[10],pIDnumber[30];    cout<<"请输入学号为"<<firstname<<number<<"的信息:"<<endl;    cout<<"姓名:";    cin>>pname;    cout<<"性别:";    cin>>psex;    cout<<"年龄:";    cin>>page;    cout<<"电话号码:";    cin>>ptel;    cout<<"邮箱:";    cin>>pemail;    cout<<"邮编:";    cin>>ppostcode;    cout<<"身份证号:";    cin>>pIDnumber;    insert(number,firstname,pname,psex,page,ptel,pemail,ppostcode,pIDnumber);}//成员链表插入新成员信息void AddressBook::insert(int npNum,int npfirstname,char npname[],char npsex[],int npage,char nptel[],char npemail[],char nppostcode[],char npIDnumber[]){    person *pers=myfirst;    if(pers==NULL)        myfirst=new person(npNum,npfirstname,npname,npsex,npage,nptel,npemail,nppostcode,npIDnumber);    else    {        while(pers->getnext()!=NULL)            pers=pers->getnext();        pers->setnext(new person(npNum,npfirstname,npname,npsex,npage,nptel,npemail,nppostcode,npIDnumber,pers->getnext()));    }}//修改记录bool AddressBook::update(){    int number,number2;    char flag[5];    person *head=myfirst;    person *fhead=head;    cout<<"请输入要修改的学生学号前缀:";    cin>>number;    cout<<"请输入要修改的学生学号尾号后4位:";    cin>>number2;    if(head==NULL)    {        cout<<"本校目前没有学生!"<<endl;        return false;    }    else         while(head!=NULL)        {            if(head->getfirstname()==number&&head->getNum()==number2)            {                cout<<"您要修改的学生信息如下:"<<endl;                head->output();                while(1)                {                    int i;                    float newnumber;                    char newtxt[60];                    cout<<"请输入要修改的信息项,“.”提示输入:";                    cout<<"1.姓名 2.性别 3.年龄 4.电话 5.邮箱 6.邮编 7.身份证号\n";                    cout<<".";                    cin>>i;                    switch(i)                    {                    case 1:                        {                            cout<<"请输入学生姓名:\n";                            cout<<".";                            cin>>newtxt;                            strcpy(head->getname(),newtxt);                            queryRecord(number,number2);                        }                        break;                    case 2:                        {                            cout<<"请输入学生性别:\n";                            cout<<".";                            cin>>newtxt;                            strcpy(head->getsex(),newtxt);                            queryRecord(number,number2);                        }                        break;                    case 3:                        {                            cout<<"请输入学生年龄:\n";                            cout<<".";                            cin>>newnumber;                            head->getage(newnumber);                            queryRecord(number,number2);                        }                        break;                    case 4:                        {                            cout<<"请输入学生新的电话:\n";                            cout<<".";                            cin>>newtxt;                            strcpy(head->gettel(),newtxt);                            queryRecord(number,number2);                        }                        break;                    case 5:                        {                            cout<<"请输入学生新的邮箱:\n";                            cout<<".";                            cin>>newtxt;                            strcpy(head->getemail(),newtxt);                            queryRecord(number,number2);                        }                        break;                    case 6:                        {                            cout<<"请输入学生新的邮编:\n";                            cout<<".";                            cin>>newtxt;                            strcpy(head->getpostcode(),newtxt);                            queryRecord(number,number2);                        }                        break;                    case 7:                        {                            cout<<"请输入学生正确的身份证号:\n";                            cout<<".";                            cin>>newtxt;                            strcpy(head->getIDnumber(),newtxt);                            queryRecord(number,number2);                        }                        break;                    default:                        return false;                    }                    cout<<"是否继续修改(Y/N):";                    cin>>flag;                    if(strcmp(flag,"Y\0")==0)                        continue;                    else                    {                        return true;                    }                }            }            else            {                head=head->getnext();                fhead=head;            }        }        cout<<"本校没有这样一个学生!"<<endl;        return false;}//删除记录bool AddressBook::removeRecord(){    int stuid,stufirstid;    person *head=myfirst;    person *fhead=head;    cout<<"请输入学生的学号前缀:";    cin>>stufirstid;    cout<<"请输入学生的学号尾号后4位:";    cin>>stuid;    if(head==NULL)    {        cout<<"错误!无学生可以删除!"<<endl;        return false;    }    else if(head->getfirstname()==stufirstid&&head->getNum()==stuid)    {        myfirst=myfirst->getnext();        cout<<"学号为"<<stufirstid<<stuid<<"的学生被删除成功!"<<endl;        delete head;        return true;    }    else    {        head=head->getnext();        while(head!=NULL)        {            if(head->getfirstname()==stufirstid&&head->getNum()==stuid)            {                fhead->setnext(head->getnext());                cout<<"学号为"<<stufirstid<<stuid<<"的学生已被删除\n";                delete head;                return true;            }            fhead=head;            head=head->getnext();        }        cout<<"要删除的学生不存在,无法删除!"<<endl;        return false;    }}//保存记录void AddressBook::saveRecords(){    ofstream fout("addressbook.txt");    person *pe=myfirst;    while(pe)    {        fout<<pe->getfirstname()<<"\t"<<pe->getNum()<<"\t"<<pe->getname()<<"\t"<<pe->getsex()<<"\t"<<pe->getage()<<"\t"<<pe->gettel()<<"\t"<<pe->getemail()<<"\t"<<pe->getpostcode()<<"\t"<<pe->getIDnumber()<<"\n";        pe=pe->getnext();    }    fout.close();    cout<<"数据保存完毕!\n";  }//读取记录void AddressBook::loadRecords(){    int Num,age,firstname;                //学号    char name[40],sex[10],tel[20],email[60],postcode[10],IDnumber[30];    ifstream fin("addressbook.txt");    int i=0;    while(fin>>firstname>>Num>>name>>sex>>age>>tel>>email>>postcode>>IDnumber)    {        insert(Num,firstname,name,sex,age,tel,email,postcode,IDnumber);        i++;    }    if(i==0)    {        cout<<"加载失败,目前文档内没有数据!"<<endl;        fin.close();    }    else    {        fin.close();        cout<<"已成功加载"<<i<<"行数据"<<endl;        displayRecord();    }}void main(){    AddressBook target;    int i;    system("color e");    while(1)    {        cout<<"    =======================欢迎使用学生通讯录管理系统======================"<<endl;        cout<<"    请输入一个数字选择操作项,以.提示输入,以回车符号结束:                   "<<endl;        cout<<"    1.添加或新建学生的通讯联系方式信息。  addRecord()               无参数!"<<endl;        cout<<"    2.显示学生的通讯联系方式的记录。      displayRecord()           无参数!"<<endl;        cout<<"    3.修改一个学生的通讯联系方式信息。    update()                  无参数!"<<endl;        cout<<"    4.删除一个学生的通讯联系方式信息。    removeRecord()            无参数!"<<endl;        cout<<"    5.查询指定学生的通讯联系方式信息。    queryRecord()             无参数!"<<endl;        cout<<"    6.加载文件中学生通讯联系方式信息。    loadRecords()             无参数!"<<endl;        cout<<"    7.保存记录。                       saveRecords()             无参数!"<<endl;        cout<<"    8.清除所有记录。                    clear()                   无参数!"<<endl;        cout<<"    9.退出学生通讯录管理系统!            Exit()                    无参数!"<<endl;        cout<<"    ======================================================================="<<endl;        cout<<".";        cin>>i;        if(i<1||i>9)        {            cout<<"输入错误,请重新输入!"<<endl;            continue;        }        if(!(i==9||i==6||i==1)&&Enterflag==0)         // 如果第一次输入函数不是建立、打开或退出,则重新输入        {            cout<<"请先建立或者从文件载入一组联系方式信息!"<<endl;            continue;        }        Enterflag=1;        switch(i)        {        case 1: target.addRecord();            break;        case 2: target.displayRecord();            break;        case 3: target.update();            break;        case 4: target.removeRecord();            break;        case 5: target.queryRecord();            break;        case 6: target.loadRecords();            break;        case 7: target.saveRecords();            break;        case 8: target.clear();            break;        case 9:            exit(1);        }           }}
0 0