1、C+课程设计报告简单通讯录管理 南京航空航天大学C+语言程序设计课程设计实验报告 题目: 通讯录管理系统 班级: 学号: 姓名: 成绩: 指导教师: 日期: xxxx年 xx月xx日 一、课题名称:简单通讯录管理二、程序功能:一个简单的通讯录管理程序 ,具有插入、删除、显示、修改和查询联系人通讯方式等功能。三、课题分析;本课程设计的数据有每个人的学号、姓名、办公室号码、住宅号码、手机号码和Email地址,可以进行排序,同时为了减少执行“添加”、“删除”等过于复杂和繁琐的操作,采用单向链表来进行数据的存储和操作。同时需要一个文本文件来存储联系人信息,数据可从该文本文件中导出。同时也可以从程序中导
2、出数据,从而保存!为了方便,进行了汉化。四、设计中的问题与解决方法:1.需要整体构思,先期的准备工作很重要。2.写程序时尽量考虑充分,否则调试时会很难受的。3.关于指针数组和二维数组的区别,额,还得看看。4.函数还是自己怎么顺手怎么写,不要硬套格式。五、对设计的感想和心得:第一次写程序让我苦不堪言,前前后后折腾了两个星期。尤其是调试,天!不说啥了。写程序是一回事,调试是另一码事,有时候就是个小问题导致程序各种崩溃。唉,确实找错需要灵感。但最终在细心检查下,发现啦。最终写完后,感觉如释重负。写一个“正常”的程序,不容易啊。六、原程序代码 #include#include#include#incl
3、ude#include#includeclass AddrList;class Node char ID20; char Name20; char OfficePhone20; char HomePhone20; char MobilePhone20; char Email20; Node *Next;public:Node(char* id=0,char *name=0,char* op=0,char* hp=0,char *mp=0,char *email=0,Node *next=NULL) strcpy(ID,id); strcpy(Name,name); strcpy(OfficeP
4、hone,op); strcpy(HomePhone,hp); strcpy(MobilePhone,mp); strcpy(Email,email); Next=next; void Show() coutsetw(12)IDsetw(6) Name setw(12) OfficePhone setw(12) HomePhonesetw(12)MobilePhonesetw(20)EmailNext) x2=x1; x2-Next=p; p-Next=NULL; else HeadPtr=p,p-Next=NULL; Node * AddrList:LookUp(char *name) /按
5、姓名查找结点,返回该结点指针 Node* x=HeadPtr; while(x!=NULL & strcmp(x-Name,name)!=0) x=x-Next; if(x) return x; else return 0;void AddrList:Delete(char *name) /删除指定姓名的结点 Node* x1=HeadPtr; Node *x2=x1; while(strcmp(x2-Name,name)!=0 & x2!=NULL) x1=x2;x2=x2-Next; if(x1!=x2) if(x2) x1-Next=x2-Next; delete x2; cout已删除
6、endl; else cout未找到,请确认后再输入Next;delete x2;int AddrList:Sort(int T_T) /按用户指定的关键字重新排序 switch(T_T) case 1: Node* x=HeadPtr,*t; if(!HeadPtr) return 0; int m=0,n=0; Node *p100=0; while(x) pm=x;m+;x=x-Next; n=m; int i, j, k; for (i=0; in-1; i+) k=i; for (j=i+1; jName,pk-Name)=0) k=j; t=pk; pk=pi; pi=t; Hea
7、dPtr=p0; i=0; while(iNext=pi+1; i+; pi-Next=NULL; Tag=1; break; case 2: Node* x=HeadPtr,*t; if(!HeadPtr) return 0; int m=0,n=0; Node *p100=0; while(x) pm=x;m+;x=x-Next; n=m; int i, j, k; for (i=0; in-1; i+) k=i; for (j=i+1; jID,pk-ID)=0) k=j; t=pk; pk=pi; pi=t; HeadPtr=p0; i=0; while(iNext=pi+1; i+;
8、 pi-Next=NULL; Tag=2; break; int AddrList:ShowAll() /显示全部结点,每10个显示一屏 Node* x=HeadPtr; if(x); else return 0; int i=1; while(1) cout setw(12)学号setw(6) 姓名 setw(12) 办公电话 setw(12) 家庭电话setw(12) 移动电话setw(20)电子邮件endl; while(iShow(); i+; if(x=x-Next); else break; system(pause); i=1; if(x); else break; AddrLi
9、st:AddrList() /释放链表空间 Node *x1=HeadPtr; Node *x2=x1; while(x2=x2-Next) delete x1; x1=x2; delete x2; void AddrList:CreateList(char *filename) /从二进制文件中读入数据,构造链表 char a30=0,b30=0,c30=0,d30=0,e30=0,f30=0; ifstream in(filename,ios:binary); while(ina) inbcdef; AddSort(a,b,c,d,e,f); in.close();void AddrLis
10、t:CreateFromTxt(char *filename) /从 文本文件中读入数据,构造链表 char a30,b30,c30,d30,e30,f30; ifstream in(filename); while(ina) inbcdef; AddSort(a,b,c,d,e,f); void AddrList:WriteToFile(char *filename) /将链表中数据写入指定的二进制文件 Node *p=HeadPtr; ofstream out(filename,ios:binary); outID ; outName ; outOfficePhone ; outHomeP
11、hone ; outMobilePhone ; outEmailNext) outID ; outName ; outOfficePhone ; outHomePhone ; outMobilePhone ; outEmail ; out.close();void AddrList:WriteToTxtFile(char *filename) /将链表写到文本文件中 Node *x=HeadPtr; ofstream out(filename,ios:binary); out setw(12)学号setw(6) 姓名 setw(12) 办公电话 setw(12) 家庭电话setw(12) 移动
12、电话setw(20)E-mailendl; outsetw(12)IDsetw(6) Name setw(12) OfficePhone setw(12) HomePhonesetw(12)MobilePhonesetw(20)EmailNext) outsetw(12)IDsetw(12) Name setw(12) OfficePhone setw(12) HomePhonesetw(12)MobilePhonesetw(12)Emailendl; out.close();void DisplayMenu() /显示菜单 int i; char *menu= , , , , *小巧通讯录管
13、理系统* , , 1. 新增一个联系人 , 2. 删除一个联系人, 3. 显示所有联系人, 4. 查找联系人, 5. 更改联系人记录, 6. 从TXT文档中增加记录, 7. 导出联系人到Txt文档, 8. 排序, 9. 退出, , * , _ 欢迎使用 _ , NULL ; system(cls); for(i=0;menui;i+) cout menuiendl; cout 请选择(1-9) :;void add(AddrList &addrlist) /按当前Tag标志插入结点,插入结点后,链表仍然保持升序 system(cls); char a30,b30,c30,d30,e30,f30
14、; cout 添加记录endl *endl 请输入一个联系人数据endl; cout 学号setw(6) 姓名 setw(12) 办公电话 setw(12) 家庭电话setw(12) 移动电话setw(20)电子邮件abcdef; addrlist.AddSort(a,b,c,d,e,f); cout添加完成endl; system(pause);void del(AddrList &addrlist) /删除一个结点 system(cls); char p30; cout 删除记录endl *endl 请输入一个联系人的姓名 p; addrlist.Delete(p); cout删除完成en
15、dl; system(pause);void showall(AddrList &addrlist) /显示所有结点 system(cls); cout 显示所有联系人 endl *endl; if(addrlist.ShowAll() ; else cout空记录!endl; system(pause);void query(AddrList &addrlist) /按姓名查找一个结点 system(cls); char name30; Node *p; cout 查找联系人 endl *endl 请输入一个联系人的姓名 name; if(p=addrlist.LookUp(name) co
16、ut setw(12)学号setw(6) 姓名 setw(12) 办公电话 setw(12) 家庭电话setw(12) 移动电话setw(20)电子邮件endlsetw(12)IDsetw(12) Name setw(12) OfficePhone setw(12) HomePhonesetw(12)MobilePhonesetw(12)Emailendl; else cout未找到endl; system(pause); void modify(AddrList &addrlist) /修改一个结点 system(cls); char name30; Node *p; cout 修改联系人
17、endl *endl 请输入一个联系人的姓名 name; if(p=addrlist.LookUp(name) cout请输入修改后的联系人endl; cout 学号setw(6) 姓名 setw(12) 办公电话 setw(12) 家庭电话setw(12) 移动电话setw(20)电子邮件p-IDp-Namep-OfficePhonep-HomePhonep-MobilePhonep-Email; cout修改完成endl; else cout未找到endl; system(pause);void addfromtxtfile(AddrList &addrlist) /从正文文件增加记录 s
18、ystem(cls); char filename30; cout 从TXT文档中增加记录 endl *endl 请输入要加入的文件名 filename; addrlist.CreateFromTxt(filename); cout载入完成endl; system(pause);void writetotxtfile(AddrList &addrlist) /将链表写到正文文件中 system(cls); char filename30; cout 导出联系人到Txt文档 endl *endl 请输入要导出的文件名 filename; addrlist.WriteToTxtFile(filen
19、ame); cout导出完成endl; system(pause);void sort(AddrList &addrlist) / 按姓名或学号排序 system(cls); int T_T; int choice=0; switch(addrlist.Tag) case 0: cout此文档未排序endl;break; case 1: cout此文档已按姓名排序,将按另一种方式排序endl;break; case 2: cout此文档已按学号排序,将按另一种方式排序endl;break; cout请输入排序方式:1.姓名2.学号T_T; if(addrlist.Sort(T_T) cout已排序endl; else coutch; if (ch
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1