速求c语言编简单通讯录源程序满足如下要求,

[复制链接]
查看11 | 回复2 | 2011-6-13 04:24:20 | 显示全部楼层 |阅读模式
设计内容:
1.确定能记录通讯录的数据结构,至少要有姓名、单位、电话等信息,它是
本程序的核心数据结构,定义为如下的结构体类型:
typedefstruct/*定义数据结构*/
{
charname[20];/*姓名*/
charunits[30];/*单位*/
chartele[30];/*电话*/

2
}ADDRESS;
2.程序应具有以下基本功能:
输入通讯记录:输入一个或几个通讯记录;
显示通讯录:在屏幕显示信息,每屏显示10条记录,按任意键继续显示下
10条;
按姓名查找记录:输入要查找的姓名,若找到,则显示该记录,若没找到,
提示无此人信息。
删除记录:输入姓名查找要删除的记录,若找到,提示是否确定删除,若
选择是,则删除该人信息,若选择否,则取消;若没找到,提示无此人信
息。
插入记录:在已有通讯录的某个姓名前插入一条新记录。
记录保存为文件:将记录保存到文件record.txt中;
从文件中读记录:从文件record.txt读出通讯录;
按序号查找记录:输入记录序号查找记录,若记录序号合法,则输出对应
记录,否则,提示该记录号不存在。
按姓名排序:按姓名排序;
快速查找记录:对按姓名排序过的记录进行折半查找;
文件复制:将record.txt复制到一个新文件(文件名由用户输入)中
3.如有时间,可为程序增加以下功能:
登录模块。该模块在进入主界面之前先执行,用于对进入系统的用户进行
身份验证,若用户输入正确的用户名及用户密码,则进入主界面,否则输
入超过3次错误则退出程序。处理方法:用户名及用户密码可保存在一文
件中,校验时从文件中读入数据进行校验。在系统中应增加一个用户管理
模块,在其中可新增用户,修改用户信息等。
系统帮助。显示开发者姓名、班级、开发完成日期、版本号和指导老师等
信息。
设计要求:
1.核心数据结构用到的结构体可采用数组存储,也可用动态内存分配和链表结
构。
2.使用文件进行存储和管理。可从文件中读取通讯录信息,或从键盘输入通讯
录信息;运行过程中如添加或删除记录时也可对文件进行存取;退出前可选择将信
息保存到文件中。
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要
注释清楚。对程序其它部分也进行必要的注释。
4.对系统进行功能模块分析、画出总流程图和各模块流程图。
5.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复
使用,最好使用菜单。
6.通过命令行相应选项能直接进入某个相应菜单选项的功能模块。
回复

使用道具 举报

千问 | 2011-6-13 04:24:20 | 显示全部楼层
#includeiostream
#includefstream
#includestring
#includeconio.h
#includeWindows.h
//#includewindows.h
usingnamespacestd;
stringID;//具有唯一性
classPerson
{
protected:
        stringNo;//学号
        stringAge;
        charName[20];//姓名
        charpostcode[45];//邮政编码
        charaddress[60];//家庭住址
        stringTel;//联系方式
        Person*next;
public:
        Person(stringID,char*Name,char*postcode,char*address,stringAge,stringTel)
        {
                strcpy(this-Name,Name);
        strcpy(this-postcode,postcode);
                strcpy(this-address,address);
                this-Tel=Tel;
                this-No=ID;
                this-Age=Age;
        }
        friendclassManage;
};
classManage
{
private:
        Person*person;
public:
        Manage()
        {
                person=0;
                Load();
        }
        ~Manage()
        {
                Person*p;
                p=person;
                while(p)
                {
                        p=p-next;
                        deleteperson;
                        person=p;
                }
                person=0;
        }
        voidFind(charName[20]);//按姓名查找
        voidFind(stringID);//按编号查找
        voidAdd();//添加加信息
        voidDelete();//删除信息
        voidModify(stringID);//修改信息
        voidQuery();//查询信息
        voidLook();//预览
        voidSave();//保存数据
        voidLoad();//读入数据
        voidDesTory();
        voidOutput(Person*p)
        {
                cout\"\\t\\t学号:\"p-Noendl;
                cout\"\\t\\t姓名:\"p-Nameendl;
                cout\"\\t\\t邮编地址:\"p-postcodeendl;
                cout\"\\t\\t家庭住址:\"p-addressendl;
                cout\"\\t\\t联系电话:\"p-Telendl;
                coutendl;
        }
};
voidManage::Add()
{
        system(\"cls\");
        Person*p,*p2;//新结点指针
        stringNo,Age,Tel;
        charName[20],postcode[45],address[60];
        charc;
        cout\"\\n**新增学生通讯录**\\n\";
        //输入学生信息
        cout\"输入学号:\\t\";
        cinNo;
        coutendl;
        {
                Person*p1;
                p1=person;
                while(p1)
                {       
                        if(p1-No==No)
                        {
                                break;
                        }
                        else
                        {
                                p1=p1-next;
                        }
                }
                if(p1!=NULL)
                {
                        cout\"该学号已存在,是否修改该学生信息(Y/N)\"endl;
                        cinc;
                        if(toupper(c)==\'Y\')
                        {
                                cout\"该学生信息为:\"endl;
                                Find(No);
                                coutendl;
                                Modify(No);
                                return;
                        }
                        else
                                return;
                }
        }
        cout\"输入姓名:\\t\";
        cinName;
        coutendl;
        cout\"输入邮编地址:\\t\";
        cinpostcode;
        coutendl;
        cout\"输入家庭住址:\\t\";
        cinaddress;
        coutendl;
        cout\"输入年龄:\\t\";
        cinAge;
        coutendl;
        cout\"输入联系方式:\\t\";
        cinTel;
        coutendl;
        p=newPerson(No,Name,postcode,address,Age,Tel);
        p-next=0;
        //学生结点加入链表
        if(person)//若已经存在结点
        {
                p2=person;
                while(p2-next)//查找尾结点
                {
                        p2=p2-next;
                }
                p2-next=p;//连接
        }
        else//若不存在结点(表空)
        {
                person=p;//连接
        }
        system(\"cls\");
        cout\"\\t\\t\\t***添加成功***\\n\"endl;
        cout\"是否继续添加(Y/N)\"endl;
        cinc;
        if(toupper(c)==\'Y\')
                        {
                                Add();
                                return;
                        }
        else
                return;
}
voidManage::Delete()//删除人员
{
        system(\"cls\");
        charc;
        stringNo;
        cout\"\\n**删除信息**\\n\";
        cout\"输入要删除的学生ID:\\t\";
        cinNo;
        coutendl;
        //查找要删除的结点
        Person*p1,*p2;
        p1=person;
        while(p1)
        {
                if(p1-No==No)
                        break;
                else
                {
                        p2=p1;
                        p1=p1-next;
                }
        }
        //删除结点
        if(p1!=NULL)//若找到结点,则删除
        {
                cout\"所要删除的学生的信息如下:\\n\"endl;
                Output(p1);
                cout\"确定是否删除(Y/N):\";
                cinc;
                if(toupper(c)!=\'Y\')
                        return;
        //        system(\"pause\");
                if(p1==person)//若要删除的结点是第一个结点
                {
                        person=p1-next;
                        deletep1;
                }
                else//若要删除的结点是后续结点
                {
                        p2-next=p1-next;
                        deletep1;
                }
                cout\"\\t\\t***删除成功***\\n\";
                cout\"是否继续删除(Y/N)\"endl;
                cinc;
                if(toupper(c)==\'Y\')
                        {
                                Delete();
                                return;
                        }
                else
                        return;
        }
        else//未找到结点
                cout\"未找到该学生!\\n\";
        getch();
}
voidManage::Modify(stringID)
{
        Person*p1;
        charc;
        p1=person;
        while(p1)
        {
                if(p1-No==ID)
                        break;
                else
                {
                        p1=p1-next;
                }
        }
        if(p1!=NULL)//若找到结点
        {
                system(\"cls\");
                cout\"所要修改的学生的信息如下:\\n\"endl;
                Output(p1);
                do
                {
                        cout\"1.修改姓名2.修改邮编3.修改住址4.修改年龄5.修改电话号码6.退出修改\\n\"endl;
                        cout\"请选择(1-5)要修改的信息\\n\"endl;
                        cinc;
                        if(c!=\'6\')
                        cout\"请输入新的信息:\";
                        switch(c)
                        {
                        case\'1\':cinp1-Name;break;
                        case\'2\':cinp1-postcode;break;
                        case\'3\':cinp1-address;break;
                        case\'4\':cinp1-Age;break;
                        case\'5\':cinp1-Tel;break;
                        default:break;
                        }
                }while(c!=\'6\');
                        system(\"cls\");
                        cout\"\\t***修改成功***\\n\"endl;
        cout\"是否继续修改(Y/N):\"endl;
        cinc;
        if(toupper(c)==\'Y\')
        {
                cout\"请输入要修改人员的ID:\";
                cinID;
                coutendl;
                Modify(ID);
                return;
        }
        else
                return;
        }
        else//未找到结点
                cout\"未找到该学生!\\n\";
        getch();//暂停
}
voidManage::Look()
{
                //设置字体颜色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED|FOREGROUND_GREEN);
        system(\"cls\");
        Person*p1;
        intcount=0;
        charc;
        p1=person;
        while(p1)
        {
                cout\"ID:\"p1-No\"\\t姓名:\"p1-Nameendl;
                count;
                        p1=p1-next;
        }
        if(count!=0)
        {
                cout\"\\n\\t\\t预览成功!!!\\n\"endl;
                cout\"查询详细信息(Y/N):\";
                cinc;
                        if(toupper(c)==\'Y\')
                        {
                                Query();
                                return;
                        }
                        else
                                return;
        }
        else
        {
                cout\"尚未创建通讯录,是否创建(Y/N)\"endl;
                cinc;
                        if(toupper(c)==\'Y\')
                        {
                                Add();
                                return;
                        }
                        else
                                return;
        }
}

voidManage::Save()//数据写入到文件
{
        ofstreamfPerson(\"Person.txt\",ios::out);
        charc;
        cout\"\\n保存数据,是否继续?[Y/N]:\";
        cinc;
        if(toupper(c)!=\'Y\')
                return;
        Person*p=person;
        while(p)
        {
                fPersonp-No\"\"p-Name\"\"p-postcode\"\"p-address\"\"p-Age\"\"p-Telendl;
                p=p-next;
        }
        fPerson.close();
        cout\"\\n保存成功...\\n\";
        system(\"pause\");
}
voidManage::Load()//数据读入
{
        ifstreamfPerson;
        Person*p=person;
        stringNo,Age,Tel;
        charName[20],postcode[45],address[65];
        fPerson.open(\"person.txt\",ios::in);
        fPersonNoNamepostcodeaddressAgeTel;
       
        while(fPerson.good())
        {
                p=newPerson(No,Name,postcode,address,Age,Tel);
                p-next=0;
                //员工结点加入链表
                if(person)//若已经存在结点
                {
                        Person*p2;
                        p2=person;
                        while(p2-next)//查找尾结点
                        {
                                p2=p2-next;
                        }
                        p2-next=p;//连接
                }
                else//若不存在结点(表空)
                {
                        person=p;//连接
                }
                fPersonNoNamepostcodeaddressAgeTel;
        }
        fPerson.close();
}
voidManage::Find(stringID)
{
        Person*p1;
        p1=person;
        while(p1)
        {       
                if(p1-No==ID)
                        break;
                else
                {
                        p1=p1-next;
                }
        }
        if(p1!=NULL)
        {
                Output(p1);
        }
        else
                cout\"未找到该学生\"endl;
}

voidManage::Find(charName[20])
{
        Person*p1;
        intcount=0;
        p1=person;
        while(p1)
        {
                if(strcmp(p1-Name,Name)==0)
                {
                        count;
                        Output(p1);
                }
                        p1=p1-next;
        }
        if(count)
        {
                cout\"\\t查询成功!!!\"endl;
                cout\"\\n共找到\"count\"个名字为★\"Name\"★的同学\\n\"endl;
        }
        else
                cout\"\\n\\t\\t未找到该学生!!!\\n\"endl;
}
voidManage::Query()
{
        charc;
        stringID,Tel;
        charName[20];
        do{
                cout\"1.按学号查找2.按名字查找3.按电话号码查找4.退出查找\"endl;
                cinc;
        //        system(\"cls\");
                coutendl;
                switch(c)
                {
                case\'1\':{
                        cout\"输入学号ID:\";
                        cinID;
                        Find(ID);
                                };break;
                case\'2\':{
                        cout\"输入姓名Name:\";
                        cinName;
                        Find(Name);
                                };break;
                case\'3\':{
                        cout\"输入电话号码Tel\"endl;
                        cinTel;
                        Find(Tel);
                        };break;
                case\'4\':break;
                default:cout\"输入有误请重新输入!!!\\n\"endl;
                }
        }while(c!=\'1\'
        cout\"\\t\\t\\t***查找成功***\\n\"endl;
        cout\"是否继续查找(Y/N)\"endl;
        cinc;
        if(toupper(c)==\'Y\')
                        {
                                Query();
                                return;
                        }
        else
                return;
                system(\"pause\");
}

voidManage::DesTory()
{        //设置字体为红色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_RED);
        charc;
        system(\"cls\");
        cout\"\\n\\t\\t\\t**清除信息**\\n\";
        cout\"警告:\\n清除通讯录信息会导致您保存的信息完全消失!!!\\n\"endl;
        cout\"★是否决定清除通讯录信息(Y/N):\"endl;
        cinc;
                        if(toupper(c)!=\'Y\')
                                return;
        cout\"请再次确认(Y/N)\"endl;
        cinc;
        if(toupper(c)!=\'Y\')
                                return;
        else
        {
                Person*p;
                p=person;
                while(p)
                {
                        p=p-next;
                        deleteperson;
                        person=p;
                }
                person=0;
        //        ofstreamfPerson(\"person.txt\");
        //        fPerson.close();
        }
        system(\"pause\");
}

intmain(void)
{
        Managem;
        intc;
        do
        {
                //设置字体为蓝色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|
FOREGROUND_BLUE);
                system(\"cls\");
                cout\"==========================================\"endl;
                cout\"\\t1.新增通讯录\\t\"endl;
                cout\"\\t2.删除通讯录\\t\"endl;
                cout\"\\t3.修改通讯录\\t\"endl;
                cout\"\\t4.查询详细信息\\t\"endl;
                cout\"\\t5.保存数据\\t\"endl;
                cout\"\\t6.清除通讯录\\t\"endl;
                cout\"\\t7.预览通讯录\\t\"endl;

                cout\"==========================================\"endl;
                cout\"0-退出\\t请选择(1-7):\";
                cinc;
                switch(c)
                {
                case1:m.Add();break;
                case2:m.Delete();break;
                case3:{
                        system(\"cls\");
                        cout\"请输入要修改人员的ID:\";
                        cinID;
                        coutendl;
                        m.Modify(ID);
                                };break;
                case4:{
                        system(\"cls\");
                        m.Query();
                                };break;
                case5:m.Save();break;
                case6:m.DesTory();break;       
                case7:m.Look();break;
                default:break;
                }
        }while(c!=0);
        chars;
        cout\"\\n★是否要保存您的所有操作(Y/N):\"endl;
        cins;
        if(toupper(s)==\'Y\')
                m.Save();
        return0;
}
回复

使用道具 举报

千问 | 2011-6-13 04:24:20 | 显示全部楼层
这是什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行