




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
二一一年 九 月设计要求题目三 通讯录管理系统任务:自学C语言中相关知识,设计出通讯录管理系统。要求如下所述:u 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;u 能够提供添加、删除和修改通讯录信息的功能,并给出确认是否保存或删除记录的提示信息;u 能够提供按姓名或电话等查询并显示相应记录信息;u 将通讯录保存在文件中;u 能够按表格方式输出通讯录信息。二、要求u 为了保证所有的数据可以长期被使用,要求程序能将相关数据存储在外部数据文件中,具体数据格式和文件名、路径等自定;u 根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后可返回到主菜单,继续选择其他功能执行。源程序要求书写规范,结构清晰。重点函数的重点变量,重点功能部分均要求给出清晰的程序注释。u 程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和修正。程序详解首先,定义结构体struct studentlong num;/用于存储学号char name20;/姓名int age;/年龄long telephone;/电话号码char adress40;/地址char E_mail30;/邮箱int QQ12;/增设的QQ一栏struct student *next;/用于存放下一级指针first;first为第一个节点,继而在其后动态的开创若干节点。以下是用于链表处理的各个函数:struct student * creat(struct student *p) /输入函数void printall(struct student * head) /显示所有记录struct student * delet(struct student *head) /删除函数struct student * insert(struct student *head) /插入函数struct student *searchbynum(struct student *head) /按学号查找struct student *searchbyname(struct student *head) /按姓名查找struct student *search(struct student *head) /查找函数menu_select() /选择函数以下是各个函数的详细说明:Creat()函数用于创建链表,其中以n记录节点的个数,并在创建时实现自加,以便于后面函数的处理,其循环输入的实现,依靠库函数malloc()和后面的while循环。Printall函数用于显示当前的的所有记录,依靠头指针找到链表首地址,有while循环实现所有记录的输出。Delet()函数用于删除某个记录,删除可以按姓名或学号这两种方式进行的,但本程序中没有这个功能即只可以按学号进行删除(因为学号唯一)。Insert()函数用于插入,同样以头指针找到链表的首地址,并将要插入的学号依次与各个节点中得num比较,然后按顺序将一个节点插入。Search()函数用于查找,查找函数提供了两种方式,即按姓名查找和按学号查找。在search()函数中可以按提示调用searchbyname()和searchbynum()。Menu_select() 函数用于提供函数选项,旨在简化主函数。流程图21主函数Menu_select()Printall()Search()Delet()Insert()Searchbyname()Searchbynum()Creat()12430此即为该程序的主流程图。源程序以下是详细的源程序及部分注释:#include#include#include#include#include#define NULL 0#define LEN sizeof(struct student)#define SHU %dn%sn%5dn%ldn%sn%sn%sint n;struct studentlong num;char name20;int age;long telephone;char adress40;char E_mail30;int QQ12;struct student *next;first;struct student * creat(struct student *p) /创建链表的函数,即输入函数struct student *head;struct student *p1,*p2;n=0; /先给n赋值0p1=p2=(struct student*) malloc(LEN);/强制类型转换printf(ttt* 请输入用户信息 *n);printf(ttt输入学号:n);scanf(%ld,&p1-num);printf(ttt输入姓名:n);scanf(%s,&p1-name);printf(ttt输入年龄:n);scanf(%d,&p1-age);printf(ttt输入电话:n);scanf(%ld,&p1-telephone);printf(ttt输入地址n);scanf(%s,&p1-adress);printf(ttt输入E-mail:n);scanf(%s,&p1-E_mail);printf(ttt输入QQn);scanf(%s,&p1-QQ);/40head=NULL;while(p1-num!=0)n=n+1; /实现n的自加,记录节点的个数if(n=1)head=p1;elsep2-next=p1;p2=p1;p1=(struct student *) malloc(LEN);printf(ttt* 请输入用户信息 *n);printf(ttt输入学号:n);scanf(%ld,p1-num);printf(ttt输入姓名:n);scanf(%s,p1-name);printf(ttt输入年龄:n);scanf(%d,p1-age);printf(ttt输入电话:n);scanf(%ld,p1-telephone);printf(ttt输入地址n);scanf(%s,p1-adress);printf(ttt输入E-mail:n);scanf(%s,p1-E_mail);printf(ttt输入QQn);scanf(%s,p1-QQ);p2-next=NULL;return 0;void printall(struct student * head) /显示所有记录struct student *p;printf(n全部的记录如下n:);p=head;doprintf(SHU,p-num,p-name,p-age,p-telephone,p-adress,p-E_mail,p-QQ);p=p-next;while(p!=NULL);/80struct student * delet(struct student *head)/删除函数long num;printf(请输入要删除的号码:n);scanf(%ld,&num);struct student *p1,*p2;if(head=NULL)printf(列表为空!n);return head;p1=head;while(num!=p1-num&p1-next!=NULL)p2=p1;p1-next;if(num=p1-num)if(p1=head)/要删除的节点为首节点head=p1-next;elsep2-next=p1-next;printf(delet:%dn,num);n=n-1;/节点减一elseprintf(%d 未找到该节点!n,num);return head;struct student * insert(struct student *head)/插入函数struct student *stud;struct student *p0,*p1,*p2;p1=head;p0=stud;/p0指向的是要插入的节点if(head=0)head=p0;p0-next=NULL;/120elsewhile(p0-nump1-num)&(p1-next!=NULL)p2=p1;p1=p1-next;if(p0-numnum)if(head=p1)head=p0;/插入到原来第一个节点之前elsep2-next=p0;p0-next=p1;/插入到p2所指的节点之后n=n+1;return head;struct student *searchbynum(struct student *head)/按学号查找long numb;printf(请输入要删除的号码:n);scanf(%ld,&numb);struct student *p;p=head;/147scanf(%ld,&numb);if(numb!=p-num)p=p-next;elseprintf(SHU,p-num,p-name,p-age,p-telephone,p-adress,p-E_mail,p-QQ);return head;struct student *searchbyname(struct student *head)/按姓名查找char a100;printf(请输入要查找的姓名:n);scanf(%s,a);struct student *p;p=head;scanf(%s,a);if(strcmp(a,p-name)!=0)p=p-next;elseprintf(SHU,p-num,p-name,p-age,p-telephone,p-adress,p-E_mail,p-QQ);return head;struct student *search(struct student *head)char choic;printf(ttt1-按电话号码查找 2-按姓名查找);printf(ttt请选择:);choic=getch();switch (choic) case 1:searchbynum(&first);break; case 2:searchbyname(&first);break; return head;int menu_select() char s80; int a;/定义整形变量 system(cls); printf(tt*欢迎进入通讯管理界面*nn); printf(ttt0. 输入记录n); printf(ttt1. 显示记录n); printf(ttt2. 查找n); printf(ttt3. 插入记录 n); printf(ttt4. 删除记录n); printf(ttt5. Quitn); printf(tt*nn);doprintf(Enter you choice(05):); scanf(%s,s); a=atoi(s); while (a5); return a; main()printf(tt*n); printf(tt*welcome to TONGXUNLU *n); printf(tt#code by 陈国警 #n); printf(tt*n); printf(按任意键进入主菜单n); getch(); int selectnum; /选择函数,提示选择各种链表处理函数。 while(1) selectnum = menu_select(); switch(selectnum) case 0:creat(&first);break;case 1: printall(&first); break;case 2: search(&first); break;case 3: insert(&first); break;case 4: delet(&first); break;case 5:printf(BYE BYE!n);system(pause); /系统暂停getchar(); exit(0); getchar(); return 0;以下是部分运行结果:初始化的界面选择界面:创建链表中的输入界面:查找中的提示界面:限于篇幅,运行结果就只列举这么多。上机总结这是自从学习C语言以来我编写过的最大的一个程序,编写的时候遇到了前所未有的困难。因为这个程序所涉及到的知识,全部是要靠自学掌握的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水痘病人的护理
- 展示设计中的平面构成2024091783课件
- 水电安装安全知识培训课件
- 二零二五年度高品质地砖批量供货合作协议
- 二零二五年度房屋租赁合同违约金上诉状制作
- 2025版教育机构临时用工人员服务协议书
- 2025版新能源汽车短期租赁借车协议书
- 2025版在线教育平台课程订购及服务合同
- 2025版公共建筑照明设备更新改造合同
- 2025版教育培训机构合作协议书下载
- 2025年医院血透室人员培训工作计划
- 2025年公务员考试时政热点必做题(附答案)
- 厨房刀具安全培训课件
- 护理烫伤不良事件分析及整改措施
- 执勤警示教育
- 供热企业运营管理制度
- 2025年外企德科人力资源服务招聘笔试参考题库含答案解析
- 生态环境综合整治工程项目投资估算
- CJ/T 341-2010混空轻烃燃气
- MSC:破解能源转型密码:中国清洁能源投资实践指南
- 存款代为保管协议书
评论
0/150
提交评论