您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > C++课设(电话簿管理系统)
南京航空航天大学C++程序设计课程设计报告课设题目:简单电话簿管理学生姓名:庞成山指导教师:沈国华日期:2011/6/20一.程序主要功能:(写出程序完成的主要功能)1-增加记录输入用户姓名,若用户已存在,则添加失败,否则,输入用户电话号码,进行添加。2-修改记录输入用户姓名,如果没有该用户,显示“该用户不存在”信息,否则输出原电话号码,然后输入新的电话号码,进行修改。3-删除记录输入用户姓名,进行删除,删除时要确认。4-查找(按姓名)输入用户姓名,进行查找。5-排序根据子菜单,选择不同的排序方式。6-显示记录逐屏显示,每屏显示10条记录。7-全删进行全部删除,要确认。0-退出二.说明:(写出对题目的分析,设计中遇到的主要问题及解决方法,对设计的感想和心得。分析题目1、进行菜单设计练习。2、将要编写的各条程序的函数头写出来。3、将定义的类‘classFphone’补充完整。4、逐步完善主菜单中各个功能,输出各个功能的名称,即将各个子菜单先输出来。5、在主函数中依次完善各子菜单的功能,根据各功能所要调用的函数及其要求在类‘UserDatabase’中补充其成员函数。6、最后,将自己的程序运行结果与课设共享材料中的可执行程序逐步比较,完善#includefstream.h#includeiostream.h#includeiomanip.h#includestring.h#includestdlib.h#includectype.h#defineM20#defineN12classFphone//类的定义,包括:姓名和电话号码{charname[M];charphone_num[N];public:Fphone(char*NAME=,char*NUM=){strcpy(name,NAME);strcpy(phone_num,NUM);}char*getname()//获取姓名{return(name);}char*getphone_num()//获取电话号码{return(phone_num);}voidsetname(char*NAME)//设置姓名{strcpy(name,NAME);}voidsetphone_num(char*NUM)//设置电话号码{strcpy(phone_num,NUM);}voiddisp()//输出用户信息{cout姓名name''电话号码phone_numendl;}};classUserDatabase{intnElem;//用户信息表中的元素个数intMaxu;//最多的用户Fphone*user;//指向用户信息的指针public:UserDatabase(intn=10)//构造函数,初始化用户信息表,将user.txt文件中数据读到User[]中{nElem=0;Maxu=100;user=newFphone[100];ifstreaminfile;infile.open(user.txt,ios::in);for(inti=0;(!infile.eof());i++){infileuser[i].getname()user[i].getphone_num();nElem++;}infile.close();}Fphone*getuser()//获得指向用户的指针{returnuser;}~UserDatabase()//析构函数,将user[]写入user.txt文件中{ofstreamout;Fphone*p=NULL;p=user;out.open(user.txt,ios::out,filebuf::sh_none);for(inti=0;inElem;i++){outsetw(20)((p+i)-getname())setw(15)((p+i)-getphone_num())endl;}delete[]user;out.close();}voidclear()//删除所有用户信息{nElem=0;cout已全部删除endl;}voidadd_record(char*na,char*ph_num)//添加用户信息,插入用户后仍按升序排列{if(nElem==0){nElem++;user-setname(na);user-setphone_num(ph_num);}elseif(nElemMaxu){for(inti=nElem-1;i=0;i--){if(strcmp((user+i)-getname(),na)0){(user+i+1)-setname(((user+i)-getname()));(user+i+1)-setphone_num(((user+i)-getphone_num()));}elsebreak;}(user+i+1)-setname(na);(user+i+1)-setphone_num(ph_num);nElem++;}}voiddelete_record(Fphone*p,intk)//删除用户信息{for(inti=k;inElem;i++){user[i]=user[i+1];}nElem--;cout已删除!endl;}voidmodify_record(Fphone*p,char*ph_num)//修改用户信息{p-setphone_num(ph_num);}Fphone*query(char*na)//按姓名查找顺序查找,这里也可以用折半查找{Fphone*p=user;inti=0;while(1){if(strcmp(p-getname(),na)==0)returnp;p++;if(i++==nElem)break;}return(NULL);}voidsorta_name()//按姓名升序排序插入排序法{Fphonet;inti,j;for(i=1;inElem;i++){t=user[i];for(j=i-1;j=0&&(strcmp(t.getname(),user[j].getname())0);j--){strcpy(user[j+1].getname(),user[j].getname());strcpy(user[j+1].getphone_num(),user[j].getphone_num());}strcpy(user[j+1].getname(),t.getname());strcpy(user[j+1].getphone_num(),t.getphone_num());}}voidsorta_phonenum()//按电话号码升序排序选择排序法{inti,j,k;Fphonet;for(i=0;inElem-1;i++){k=i;for(j=i+1;jnElem;j++)if(strcmp(user[j].getphone_num(),user[k].getphone_num())0)k=j;if(k!=i){strcpy(t.getname(),user[k].getname());strcpy(t.getphone_num(),user[k].getphone_num());strcpy(user[k].getname(),user[i].getname());strcpy(user[k].getphone_num(),user[i].getphone_num());strcpy(user[i].getname(),t.getname());strcpy(user[i].getphone_num(),t.getphone_num());}}}voidsort_name()//按姓名降序排序,将排成升序的对象数组逆向放置{sorta_name();inti,j;Fphonet;for(i=0,j=nElem-1;ij;i++,j--){strcpy(t.getname(),user[i].getname());strcpy(t.getphone_num(),user[i].getphone_num());strcpy(user[i].getname(),user[j].getname());strcpy(user[i].getphone_num(),user[j].getphone_num());strcpy(user[j].getname(),t.getname());strcpy(user[j].getphone_num(),t.getphone_num());}}voidsort_phonenum()//按电话号码降序排序冒泡排序法{inti,j;Fphonet;for(i=0;inElem-1;i++)for(j=0;jnElem-1-i;j++)if(strcmp(user[j].getphone_num(),user[j+1].getphone_num())0){strcpy(t.getname(),user[j].getname());strcpy(t.getphone_num(),user[j].getphone_num());strcpy(user[j].getname(),user[j+1].getname());strcpy(user[j].getphone_num(),user[j+1].getphone_num());strcpy(user[j+1].getname(),t.getname());strcpy(user[j+1].getphone_num(),t.getphone_num());}}voiddisp()//输出所有用户信息{inti,n=0;coutsetw(20)姓名setw(20)电话号码endl;for(i=0;inElem;i++){coutsetw(20)(user+i)-getname()setw(20)(user+i)-getphone_num()endl;n++;if(n%10==0){system(pause);system(cls);}}coutendl;}};intmenu_select();voidmain(){UserDatabases;cout----------------------------------------------endl;coutendl;coutendl;cout欢迎使用电话簿管理系统endl;coutendl;coutendl;cout----------------------------------------------endl;system(pause);for(;;){switch(menu_select()){case1:{system(cls);charNAME[20],NUM[12];cout**********************************endl;coutendl;cout增加记录endl;coutendl;cout**********************************endl;cout请输入用户姓名:;cinNAME;if(s.query(NAME))cout该用户已存在,添加失败!endl;else{cout请输入用户的电话号码:;cinNUM;s.add_record(NAME,NUM);s.sorta_name();cout添加成功!endl;}system(pause);break;}case2:{system(cls);charNAME[20],NUM[12];Fphone*p;cout**********************************endl;coutendl;cout修
本文标题:C++课设(电话簿管理系统)
链接地址:https://www.777doc.com/doc-6372778 .html