收藏 分销(赏)

通讯录管理程序-c++大作业.doc

上传人:丰**** 文档编号:4770202 上传时间:2024-10-12 格式:DOC 页数:15 大小:95.50KB
下载 相关 举报
通讯录管理程序-c++大作业.doc_第1页
第1页 / 共15页
通讯录管理程序-c++大作业.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述
同济大学 二○一一~二○一二 学年第 二 学期 交通运输工程学院 课程设计报告书 课程名称: C/C++语言课程设计 班 级: 4班 学 号: 1151220 姓 名: 王琎晨 指导教师: 孙丽君 二○一二 年 六 月 一. 需求分析 程序名称:通讯录管理程序。 程序功能概括: 1) 添加:即增加一个人的记录到通信录中 2) 显示:即在屏幕上显示所有通信录中的人员信息,应能分屏显示。 3) 查询:可根据姓名查找某人的相关信息,若找到显示其姓名、地址、电话号码和邮政编码。 4) 修改:可修改一个人的除姓名外其它信息。 5) 分类并显示:可将人员进行分组,例如分为家人,朋友,同事等,选择分组后,只显示该分组内的信息 6) 装入:即将文件中的信息读入程序。 7) 存储:即将通讯录信息保存在一个文件中。 8) 删除:删除通讯录中的联系人。 程序意义:通讯录管理系统针对手机中对联系人的添加,删除等操作,方便用户使用通讯录,起到便利作用。 二. 概要设计 系统核心功能: Ø 添加联系人 Ø 显示所有联系人信息 Ø 查询联系人并显示 Ø 删除联系人 Ø 分组并显示 Ø 修改联系人信息 功能框图: 通讯录管理 载入数据 分组并显示 查询联系人 删除联系人 显示联系人 插入联系人 保存数据 分组显示 组内添加联系人 创建新组 功能描述: Ø 插入联系人:通过键盘输入联系人的姓名,电话号码,地址,邮政编码等信息,存入通讯录中。 Ø 显示联系人:在屏幕上分行显示所有联系人的信息。 Ø 删除联系人:通过输入需要删除的联系人的姓名删除该联系人。 Ø 查询联系人:通过输入需要查询的联系人的姓名查询该联系人。 Ø 载入数据:从文件读出数据。 Ø 保存数据:将数据保存入文件。 Ø 分组并显示:1.创建新组:创建新的分类。 2.组内添加联系人:将联系人添加入该组。 3:。分组显示:在屏幕上分组显示联系人。 三. 详细设计 本程序用了如下课本中没有的函数,使界面简洁明了。 getch()//键盘任意输入 system(“CLS”)//清屏 如下为完整程序: #include"iostream.h" #include"string.h" #include"iomanip" #include"stdlib.h" #include"stdio.h" #include"conio.h" #include"iomanip.h" struct ben//定义结构 { char name[20]; char address[80]; char num[20]; char you[10]; char fen[10]; struct ben *next; }; struct ben *head=NULL;//定义全局变量 char *lei[20]; int i(0); void csh() { for(int i=0;i<20;i++) lei[i]=NULL; } void menu(); void duru()//读入数据 { system("CLS"); FILE *fp; if((fp=fopen("txl.txt","r+"))==NULL) { cout<<"can't open file"; exit(1); } head=new ben; struct ben *newben; struct ben *tail; tail=head; while(!feof(fp)) { newben=new ben; fread(newben,sizeof(ben),1,fp); tail->next=newben; tail=newben; } tail->next=NULL; cout<<"读取文件成功"<<endl; fclose(fp); cout<<"返回主菜单请安任意键"<<endl; getch(); menu(); } void baocun()//保存数据 { system("CLS"); FILE *fp; if((fp=fopen("txl.txt","r+"))==NULL) { cout<<"can't open file"; exit(1); } if(head==NULL) cout<<"内容空,无需保存"<<endl; else { struct ben*p=head->next; while(p!=NULL) { fwrite(p,sizeof(ben),1,fp); p=p->next; } cout<<"保存成功"<<endl; } cout<<"返回主菜单请安任意键"<<endl; getch(); menu(); } void tianjia()//添加联系人 { char n; do { system("CLS"); struct ben *newben; newben=new ben; strcpy(newben->fen,"wu"); cout<<"请输入姓名"<<endl; cin>>newben->name; cout<<"请输入地址"<<endl; cin>>newben->address; cout<<"请输入电话号码"<<endl; cin>>newben->num; cout<<"请输入邮政编码"<<endl; cin>>newben->you; if(head==NULL) { head=new ben; head->next=newben; newben->next=NULL; } else { newben->next=head->next; head->next=newben; } cout<<"添加完成,若想继续添加请按1,返回主菜单请按任意键"<<endl; n='0'; cin>>n; }while(n=='1'); system("CLS"); menu(); } void print()//输出通讯录列表 { system("CLS"); struct ben *p=head; if(head==NULL) { cout<<"联系人为空,回到主页请按任意键"<<endl; getch(); menu(); } else { p=p->next; cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl; while(p!=NULL) { cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p->you<<endl; p=p->next; } cout<<"输出完毕,返回主菜单请按任意键"<<endl; getch(); menu(); } } void change()//修改联系人信息 { system("CLS"); if(head==NULL) { cout<<"联系人为空,回到主页请按任意键"<<endl; getch(); menu(); } else { struct ben *p=head->next; cout<<"请输入修改人的姓名"<<endl; char name1[20]; cin>>name1; while(p!=NULL&&strcmp(name1,p->name)) p=p->next; if(p!=NULL) { cout<<"进行修改"<<endl; cout<<"请输入地址"<<endl; cin>>p->address; cout<<"请输入电话号码"<<endl; cin>>p->num; cout<<"请输入政编码"<<endl; cin>>p->you; cout<<"修改成功"<<endl; cout<<"返回主菜单请按任意键"<<endl; getch(); menu(); } else { cout<<"不存在此人,返回主菜单请按任意键"<<endl; getch(); menu(); } } } void cz()//创建类 { system("CLS"); char j; if(head==NULL) { cout<<"联系人为空,回到主页请按任意键"<<endl; getch(); menu(); } else { cout<<"请输入您要创建的新组"<<endl; char s[10]; cin>>s; lei[i]=new char[10]; strcpy(lei[i],s); i++; do { system("CLS"); cout<<"请选择要您要添加入该类的人(输入人名)"<<endl; struct ben *p=head->next; cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<setw(10)<<"分类"<<endl; while(p!=NULL) { cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p->you<<setw(10)<<p->fen<<endl; p=p->next; } p=head->next; char name2[20]; cin>>name2; while(p!=NULL&&strcmp(name2,p->name)!=0) p=p->next; if(p!=NULL) { strcpy(p->fen,s); cout<<"已成功将"<<p->name<<"添加入"<<s<<"中"<<endl; } else cout<<"不存在这个人"<<endl; cout<<"继续添加请按1.后退请按2.返回主菜单请按其它键."<<endl; cin>>j; }while(j=='1'); if(j=='2')cz(); else { menu(); } } } void zt()//在类中添加联系人 { system("CLS"); int x(0); for(x=0;x<20;x++) { if(lei[x]==NULL)break; } if(x==0) { cout<<"木有类,返回添加类请按任意键"<<endl; getch(); cz(); } char d; do {system("CLS"); d=0; for(int j=0;j<x;j++) cout<<j+1<<" : "<<lei[j]<<" "; cout<<"请选择添加的组"<<endl; int k; cin>>k; cout<<"您要添加的组为"<<lei[k-1]<<endl; cout<<"情输入您要添加的人"<<endl; struct ben *p=head->next; cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<setw(10)<<"分类"<<endl; while(p!=NULL) { cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p->you<<setw(10)<<p->fen<<endl; p=p->next; } p=head->next; char name2[20]; cin>>name2; while(p!=NULL&&strcmp(name2,p->name)!=0) p=p->next; if(p!=NULL) { strcpy(p->fen,lei[k-1]); cout<<"已成功将"<<p->name<<"添加入"<<lei[k-1]<<"中"<<endl; } else cout<<"不存在这个人"<<endl; cout<<"继续添加请按1.返回主菜单请按其他它键."<<endl; cin>>d; }while(d=='1'); menu(); } void lx()//分类显示 { system("CLS"); if(head==NULL) {cout<<"通讯录为空,返回主菜单请按任意键"<<endl; getch(); menu(); } int x(0); for(x=0;x<20;x++) { if(lei[x]==NULL)break; } if(x==0) { cout<<"木有类,返回主菜单请按任意键"<<endl; getch(); menu(); } else { for(int m=0;m<x;m++) { struct ben *p=head->next; cout<<lei[m]<<endl; cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl; while(p!=NULL) { if(strcmp(p->fen,lei[m])==0) { cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p->you<<endl; } p=p->next; } cout<<endl; } cout<<"返回主菜单请任意键"<<endl; getch(); menu(); } } void fenlei()//分类显示总表 { system("CLS"); cout<<"1.创建新组"<<endl; cout<<"2.分组添加"<<endl; cout<<"3.分类显示"<<endl; cout<<"4.返回主菜单"<<endl; char c; cin>>c; switch (c) { case '1':csh();cz(); break; case '2':zt(); break; case '3':lx(); break; case '4':menu(); default:cout<<"wrong"; } } void shanchu()//删除联系人 { if(head==NULL)cout<<"通讯录为空"<<endl; else { char k='0'; do { system("CLS"); cout<<"请选择要您要删除的人(输入人名)"<<endl; struct ben *p=head->next,*q; q=head; cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl; while(p!=NULL) { cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p->you<<endl; p=p->next; } p=head->next; char name2[20]; cin>>name2; while(strcmp(p->name,name2)!=0&&p!=NULL) { p=p->next; q=p; } if(p!=NULL) { q->next=p->next; delete(p); } else cout<<"木有这个人"<<endl; cout<<"继续删除请按1.回到主菜单请按其它键"<<endl; cin>>k; }while(k=='1'); getch(); menu(); } } void search()//查询联系人 { char n; do { system("CLS"); cout<<"请输入查询人的姓名"<<endl; char name1[20]; struct ben *p=head; if(p==NULL) { cout<<"联系人为空,回到主页请按任意键"<<endl; getch(); menu(); } else p=p->next; cin>>name1; while(p!=NULL&&strcmp(p->name,name1)!=0) { p=p->next; } if(p!=NULL) { cout<<"姓名"<<setw(10)<<"地址"<<setw(10)<<"电话号码"<<setw(10)<<"邮政编码"<<endl; cout<<p->name<<setw(10)<<p->address<<setw(10)<<p->num<<setw(10)<<p->you<<endl; } else cout<<"木有此人"<<endl; cout<<"继续查询请按1,回到主页面请按任意键"; n='0'; cin>>n; }while(n=='1'); system("CLS"); menu(); } void menu()//主菜单 { system("CLS"); cout<<" 欢迎使用通讯录系统"<<endl; cout<<"1.添加联系人"<<endl; cout<<"2.显示联系人信息"<<endl; cout<<"3.查询联系人"<<endl; cout<<"4.修改联系人信息"<<endl; cout<<"5.分组并显示"<<endl; cout<<"6.载入数据"<<endl; cout<<"7.保存电话本"<<endl; cout<<"8.删除联系人"<<endl; cout<<"9.退出"<<endl; char choose; do{ cin>>choose; switch(choose) { case '1':tianjia(); break; case '2':print(); break; case '3':search(); break; case '4':change(); break; case '5':fenlei(); break; case '6':duru(); break; case '7':baocun(); break; case '8':shanchu(); break; case '9':exit(1); break; default:cout<<"请输入正确数字"<<endl; } }while(choose!='8'); } void main()//主函数 { menu(); } 四. 调试分析过程描述 1、 本程序采用结构链表类型结合功能函数的方式运行,代码简单易懂。 2、 本程序中大量调用menu()函数,简便了函数。 3、 system("cls")这个功能是我自己从网上学到的,其作用是“清屏”,即可以避免内容冗长的现象,使每次执行功能时界面干净明了。 4、 程序的小问题:当页面显示按任意键返回主菜单时,若定义的变量为int,则会陷入死循环,应定义为char。 五. 课程设计小结 通过本次C++大作业的设计与编写,让我基本掌握了结构类型、函数、条件语句等内容的用法,学会了编写一些较为简易的管理系统。C++其实还包括很多比较精深的内容,但即使只是掌握了一些较为基础的技能,就能编出工资管理系统这种比较成熟的管理系统,可见C++在人们日常的应用中扮演着十分重要的作用。因此以此次大作业为契机,我决定好好巩固自己所学过的一切C++的重要知识,并在条件允许的条件下继续深入学习,了解这个神奇且强大的C++世界!
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服