电话簿管理系统课程设计
- 格式:doc
- 大小:568.00 KB
- 文档页数:26
Visual C++ 课程设计实验报告题目:电话薄管理班级:07102003学号:0710200310姓名:曹哲指导老师:何新2008年9月实验题目: 5-5 电话薄管理一、课程设计要求:功能介绍:一个电话薄管理小程序。
利用文本文件存储电话薄数据,具有添加、删除、显示和查询联系人号码的功能。
(1) 将电话薄数据和相应的函数封装在类中,改写程序使之结构化。
(2) 增加记录修改功能,能选择修改用户的姓名、电话。
(3) 增加录入时间的显示及存储。
(4) 增加缺省的查询方式,即查询时只输入姓名的首字母,所有符合这一条件的电话资料均在屏幕上显示。
平定难易等级:A级。
二、程序设计思想(相关问题解决办法):类封装成类是首先遇到的问题,我根据课程设计书上的提示,通过看书和与同学讨论,最后比较清楚地明白了类的封装方法。
我在封装时,在类中定义了一些内联函数,并且把函数都定义为公有成员,这样可以方便类外的函数使用成员数据。
书上的参考程序与我的稍有不同。
增加时间这个是通过互联网学到的,利用time.h。
3)增加修改功能我定义了friend_node::modify_record 函数,用来修改用户的姓名、电话。
在函数中,我运用了if-else,switch等语句并对函数进行了重载。
并且本程序可以选择修改,姓,名,电话。
首字母查询这是一个比较难解决的问题,我使用了与全名查找基本相同的函数,我只要求姓相同,全名查找要求姓和名全部相同。
我在这个的解决上还存在一些问题,这证明程序还是不够完善。
这说明我对指针的使用还不够好。
三、课程设计心得:本来打算选计算器,后来觉得计算器编起来没什么意思,就换成了这个难一点儿的电话薄管理。
在程序编写过程中,我发现,不只是难了一点儿。
但是,有难度才有挑战,才有乐趣,不是么?看到源程序,立马被其拥有的函数的数量震撼了。
把它们封装起来费了我不少精力。
但是,看着它们由零散的函数变为整齐的类,就如同看到C语言向C++语言进化。
一.程序功能简介一个基本的电话簿管理程序,具有插入、删除、显示、修改和查询联系人电话码的功能。
主菜单如右图所示,每个菜单项功能如下:1.增加记录菜单:请输入用户姓名,如果该用户已经存在则添加失败,否则,输入用户的电话号码,进行添加。
2.修改某条记录:请输入用户姓名,如果没有该用户显示“该用户不存在”信息,否则,输出原电话号码,然后输入新的电话号码,进行修改。
3.删除记录:输入用户姓名,进行删除(删除时要进行确认)。
4.查询:输入用户姓名,进行查找。
5.排序:根据子菜单,选择不同的排序方式。
6.显示:逐屏显示(每屏显示10条记录)。
7.全删:进行全部删除(要确认)。
二.课程设计要求请选择以下功能1- 增加记录2- 修改记录3- 删除记录4- 查找(按姓名)5- 排序6- 显示记录1.用汉化菜单实现。
2.提供按姓名查询电话号码的功能。
3.显示功能(提供逐屏显示的功能,每屏显示10条记录)。
4.删除和修改时要进行确认。
5.将电话簿记录以文件的形式存在磁盘上;每次操作时将电话簿调出,操作完毕后存盘。
三.课程设计说明1.程序采用数组数据结构实现。
2.用类来实现数据的封装。
四.参考数据结构1.“电话簿”称为用户信息表,用数组实现。
用户信息表由若干用户信息构成,每个用户信息是一个数组元素。
2.“user.txt”是一个文件,用于保存“用户信息表”中的信息。
当系统启动时,从该文件中读入信息,当退出系统时,将“用户信息表”中的信息写到该文件中。
该文件中信息存放形式如下:ZhangHong 5221369LiLi 84891112ZhaoQiang 5221498其中name(姓名)占20列phone_num(电话号码)占12列五.具体功能及实现定义Fphone类,通过其私有成员数组name[20]和phone[12]分别记录用户姓名与电话号码,定义UserDatabase类记录用户信息,通过公有成员函数实现对数据的操作。
学生通讯录管理系统课程设计一、引言学生通讯录管理系统是一种能够有效管理学生通信信息的软件工具。
在当今信息化社会中,为了更好地维护学生通信信息和便于学校管理,设计一个高效、实用的学生通讯录管理系统至关重要。
本文将围绕学生通讯录管理系统的设计与实现展开讨论。
二、需求分析1. 用户需求•管理员需要能够对学生信息进行增删查改操作;•学生要能够方便地修改个人信息;•教师需要便捷地查看学生信息;•系统需要有良好的用户权限管理机制。
2. 功能需求•学生信息管理:包括学生基本信息的录入、修改和删除。
•通讯录管理:实现学生通讯录的管理和分类。
•查询功能:实现对学生信息的快速查询。
•权限管理:分管理员和普通用户,管理员有更高的权限控制。
三、系统设计1. 系统架构学生通讯录管理系统采用典型的客户-服务器架构,后端基于MySQL数据库存储学生信息,前端通过Web页面进行展示和操作。
2. 数据库设计设计数据库表格包括:学生信息表(包括学号、姓名、性别、年级等字段)、用户表、通讯录表等。
3. 页面设计•登录页面:对用户进行身份验证。
•学生信息管理页面:实现对学生基本信息的增删查改。
•通讯录管理页面:实现通讯录的分类和管理。
四、系统实现1. 环境配置•使用Python语言编写后端代码。
•前端采用HTML、CSS、JavaScript。
•数据库采用MySQL。
2. 实现步骤1.搭建后端框架,实现数据的增删查改功能。
2.设计前端页面,实现用户交互和数据展示。
3.进行系统测试和优化。
五、功能演示1. 登录功能输入正确的用户名和密码,用户可以成功登录系统。
2. 学生信息管理管理员可以添加、删除、修改学生信息,普通用户只能查看。
3. 通讯录管理实现对通讯录的添加、分类和管理。
六、总结与展望通过本次学生通讯录管理系统课程设计,我学到了如何进行系统设计、数据库设计和前后端分离开发的方法。
未来,还可以进一步改进系统功能,增加权限管理模块、优化界面交互等,使系统更加稳健和实用。
通讯录管理系统课程设计报告系统存储结构一、引言通讯录管理系统是一种方便快捷地存储和管理联系人信息的应用程序。
在该系统中,数据的存储结构至关重要,它直接关系到系统的性能和稳定性。
本文将介绍通讯录管理系统的系统存储结构设计,包括数据的组织方式、存储介质选择等内容。
二、存储结构设计1. 数据的组织方式在通讯录管理系统中,联系人信息是系统中最主要的数据之一。
为了高效地存储和管理这些信息,我们选择采用数据库的方式进行组织。
数据库将联系人信息按照一定的结构进行组织和存储,方便系统对数据的检索和更新。
2. 数据库的选择在选择数据库时,我们考虑到系统的使用特点和性能要求,最终选择了关系型数据库。
关系型数据库具有良好的数据一致性和完整性,能够满足系统的数据管理需求。
同时,支持 SQL 查询语言的特性也使得对数据进行灵活的操作成为可能。
3. 数据表设计在关系型数据库中,数据是以表的形式进行存储的。
针对通讯录管理系统的需求,我们设计了以下几张表:•用户表:用于存储系统的用户信息,包括用户名、密码等;•联系人表:用于存储用户的联系人信息,包括姓名、电话号码、邮箱地址等;•分组表:用于将联系人进行分类管理,方便用户对联系人信息进行组织。
每张表之间通过外键进行关联,确保数据的一致性和完整性。
三、存储介质选择除了数据库存储外,系统还需要选择适当的存储介质来保存一些系统配置信息和用户的登录状态等数据。
我们选择了文件系统作为存储介质,将这些数据以文件的形式进行存储。
四、存储结构的优化为了提高系统的性能和响应速度,我们对存储结构进行了一定的优化。
主要包括以下几点:•索引设计:对关键字段建立索引,加快检索速度;•归档策略:定期对系统中的数据进行归档,减少存储空间的占用;•缓存机制:使用缓存技术对频繁访问的数据进行缓存,减少数据库访问的频率。
五、总结系统存储结构的设计对于通讯录管理系统的性能和稳定性具有重要影响。
通过合理选择数据库和存储介质,并对存储结构进行优化,可以有效提高系统的用户体验和响应速度。
课程设计说明书设计名称:程序设计语言强化课程设计题目:电话簿管理系统学生姓名:专业:班级:学号:指导教师:日期:年月日课程设计任务书专业年级班一、设计题目(一)学生成绩排名(二)根据条件进行学生成绩排名(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)(四)学生成绩文件管理(五)一个综合系统(电话簿管理系统)二、主要内容2.1学生成绩排名采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。
2.2 根据条件进行学生成绩排名在函数中进行10个学生成绩从高到低排名,再改进函数,进行n个学生成绩从高到低排名, 排名方式根据函数的style参数进行,如style为‘a'按升序排,style为' d ' 按降序排。
(a:ascending 升,d:descending 降)编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。
2.3链表的操作(链表的建立,访问,删除链表指定结点,增加结点)建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。
删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。
2.4学生成绩文件管理定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 1 ,3 , 5 ,7,9个学生的数据。
2.5 一个综合系统(电话簿管理系统)数据库的主要数据包括:姓名、工作单位、电话号码、E-mail地址。
电话簿管理系统课程设计(总20页)-CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除电话簿管理系统VER1.0系别:计算机科学与技术系电子信息科学与技术2班专业(班级):姓名徐楚奇学号指导教师:赵翔完成日期:2014年11月7日目录摘要 (3)第一章前言 (4)第二章电话簿管理系统介绍 (5)2.1流程图 (5)2.2程序编写概要 (6)第三章主要功能实现 (7)3.1删除功能设计 (7)3.2添加功能设计 (7)第四章源程序 (9)第五章总结心得 (23)致谢 (24)参考文献 (24)摘要本次课程设计的题目是个人通讯录管理系统,要求将程序中所输人的联系人姓名、电话、QQ、MSN和地址信息这些数据以文本的方式保存,并且能够对所储存的联系人信息进行显示、查询、修改、删除等功能。
本文通过利用模块化程序设计思想,使用单链表和结构体等编写出的可以实现存储、打印、删除等功能的电话簿管理系统。
通过完成这个课程设计让我们熟悉并掌握在c语言中使用结构体、单链表,指针,函数,和模块化设计思想。
关键词结构体,链表,指针,函数第一章前言在前面我们学习了c语言的一些基础知识对c语言有了初步的认识和了解,为了让我们更加全面地了解c语言程序设计的步骤和方法,在老师的指导下我们进行了一次综合实训。
设计一个简单的电话簿管理系统,可以存储,删除等电话号码。
为了方便使用DEV-C++来编写程序,可以添加汉字备注方便理解程序。
根据前面所学的单链表、指针、函数、结构体等知识在使用模块化设计思想去编写。
设计“通讯录管理系统”使其具有数据插入、修改、删除、显示和查询等功能。
使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。
使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。
使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。
目录摘要 (2)一、课程设计目的 (3)二、课程设计内容 (3)三、总体设计 (3)四、详细设计 (5)(1)数据结构设计 (5)(2)模块接口设计 (5)(3)部分函数细节 (6)五、调试与测试 (9)(1)调试过程中的主要问题 (9)(2)测试结果的分析与讨论 (9) (12)六.实习总结 (14)参考文献 (15)致谢辞 (16)附录:源程序代码 (17)摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以电话簿能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及,人们的生活摆脱了传统式的电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。
这就需要有一个使用的电话簿管理系统,用户可以方便的通过自己电脑的电话簿管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
电话簿管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
关键字:信息(Information)电话簿管理系统(The Management of Telephone Book)一、课程设计目的通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,学会设计数据结构。
其中包括对结构数组、链表和数据结构等知识的运用。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容设计一个实用的电话簿管理系统,能以简便高效的方式对电话簿进行管理,具体要示:电话簿信息包括:姓名,电话。
(1)更新:能插入、删除电话簿信息。
.(2)浏览:能够查看所有的电话簿信息。
(3)查询:能实现指定姓名信息查询。
(4)修改:能修改指定的电话簿信息。
电话簿管理系统一.程序功能:电话簿管理系统要求实现一个电话薄系统的基本管理功能,包括录入、删除、查找、和导入/导出功能等。
1.创建电话簿;2.#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>struct telebook{ char num[4];char name[10];char phonenum[15];char email[20];struct telebook *next;};typedef struct telebook TeleBook;int menu_select();TeleBook *s;TeleBook *Create();void Display(TeleBook *head);TeleBook *Insert(TeleBook *head,TeleBook *s);TeleBook *Insert_a_record(TeleBook *head);TeleBook *Delete(TeleBook *head,char *num);TeleBook *Delete_a_record(TeleBook *head);TeleBook *Query(TeleBook *head,char *num);void Query_a_record(TeleBook *head);TeleBook *AddfromText(TeleBook *head,char *filename);void WritertoText(TeleBook *head,char *filename);void Quit(TeleBook *head);TeleBook *DeleteSame(TeleBook *head);int menu_select(){ char c;do {system("cls");printf("1. Create List\n");printf("2. Display All Record\n");printf("3. Insert a Reacord\n");printf("4. Delete a Reacord\n");printf("5. Query\n");printf("6. Add Records from a Text File\n");printf("7. Write to a Text File\n");printf("8. Delete the Same Record\n");printf("0. Quit\n");printf("Give your choice (0-8):\n");c=getchar();}while(c<'0'||c>'8');return(c-'0');}TeleBook *Create(){ TeleBook *s,*head=NULL;char c='Y';printf("create an increasing list...\n");printf("please input num,name,phonenum,email\n");while(c=='Y'||c=='y'){ s=(TeleBook *) malloc(sizeof(TeleBook));system("pause");gets(s->num);gets(s->name);gets(s->phonenum);gets(s->email);head=Insert(head,s);printf("Do you want to continue to input :(Y/N)?\n");c=getchar();}return(head);}void Display(TeleBook *head){ TeleBook *p;int i=0;p=head;printf("output list: \n ");printf("num\tname\tphonenum\temail\n");while(p!=NULL){ printf("%s\t%s\t%s\t%s\n",p->num,p->name,p->phonenum,p->email);p=p->next;if(++i%10==0){ printf("\n");system("pause");system("cls");}}}TeleBook *Insert(TeleBook *head,TeleBook *s) { TeleBook *p1,*p2;if(head==NULL){ head=s;s->next=NULL;return(head);}p2=p1=head;while(strcmp(s->num,p1->num)>0 && p1->next!=NULL){ p2=p1; p1=p1->next; }if(strcmp(s->num,p1->num)<=0){ s->next=p1;if(head==p1) head=s;else p2->next=s;}else {p1->next=s;s->next=NULL;}return(head);}TeleBook *Insert_a_record(TeleBook *head){ TeleBook *p;p=(TeleBook *) malloc(sizeof(TeleBook));printf("Please input the new Num,Name,Phonenum,Email\n");getchar();gets(p->num);gets(p->name);gets(p->phonenum);gets(p->email);head=Insert(head,p);printf("Insert success!!\n");printf("%s\n%s\n%s\n%s\n",p->num,p->name,p->phone num,p->email);return(head);}TeleBook *Delete(TeleBook *head,char *num){ TeleBook *p1,*p2;if(head==NULL){ printf("List is null\n" );return(NULL);}p1=head;while(strcmp(p1->num,num)!=0 && p1->next!=NULL){ p2=p1;p1=p1->next;}if(strcmp(p1->num,num)==0){ if(p1==head) head=p1->next;else p2->next=p1->next;printf("The num %s is deleted.\n",p1->num);free(p1);}elseprintf("The num %s is not found.\n",num);return(head);}TeleBook *Delete_a_record(TeleBook *head) { char c;char num[20];printf("Do you want to delete?(y/n)\n");getchar();c=getchar();if(c=='y'||c=='Y')printf("please input num=\n");getchar();gets(num);head=Delete(head,num);printf("delete success!\n");return(head);}TeleBook *Query(TeleBook *head,char *num) { TeleBook *p;p=(TeleBook *) malloc(sizeof(TeleBook));p=head;while(p!=NULL){ if(strcmp(p->num,num)==0) return(p);p=p->next;}return(NULL);}void Query_a_record(TeleBook *head){ char num[10];TeleBook *p;p=(TeleBook *) malloc(sizeof(TeleBook));printf("Please input the num you want to search\n");getchar();gets(num);p=Query(head,num);if(p==NULL) printf("Fail!\n");else{ printf("Search Success!\n");printf("Num:%s\nName:%s\nPhonenum:%s\nEmail:%s\ n",p->num,p->name,p->phonenum,p->email);}}TeleBook *AddfromText(TeleBook *head,char *filename){ FILE *fp;printf("Please input the filename you want.....\n");getchar();gets(filename);fp=fopen(filename,"r");if(fp==NULL){ printf("Can't open the file!\n");getchar();exit(1); }while(feof(fp)==0){ TeleBook *s;s=(TeleBook *) malloc(sizeof(TeleBook));fscanf(fp,"%s%s%s%s",s->num,s->name,s->phonenum,s ->email);head=Insert(head,s);}fclose(fp);printf("Add success\n");return(head);}void WritertoText(TeleBook *head,char *filename){ TeleBook *p;FILE *fp;printf("Please input the filename you want to output.....\n");getchar();gets(filename);if((fp=fopen(filename,"w"))==NULL){ printf("Can't open ");exit(0);}p=head;printf("Output list:\n");while(p!=NULL){ fprintf(fp,"%s\t%s\t%s\t%s\n",p->num,p->name,p->p honenum,p->email);p=p->next;}fclose(fp);printf("Write Successful!\n");}void Quit(TeleBook *head){ TeleBook *p;char c;printf("Do you want to exit? (Y or N)\n");getchar();c=getchar();if(c=='Y'||c=='y'){ while(head!=NULL){ p=head;head=head->next;free(p);}}}TeleBook *DeleteSame(TeleBook *head) { TeleBook *p;TeleBook *p1,*p2;if(head==NULL){ printf("List is null\n");return(NULL);}for(p=head;p!=NULL;p=p->next)for(p2=p,p1=p->next;p1!=NULL;p2=p1,p1=p1->next) {if(strcmp(p->name,p1->name)==0&&strcmp(p->phonenu m,p1->phonenum)==0&&strcmp(p->email,p1->email)= =0){ p2->next=p1->next;free(p1);printf("Delete Success\n");}}return(head);}void main() { TeleBook *head=NULL;printf("\t ******TeleBook*******\n");for(;;){ switch(menu_select()){case 1:printf("\tCreate List\n");head=Create();system("pause");break;case 2:printf("\tDisplay All Record\n");Display(head);system("pause");break;case 3:printf("\tInsert a Reacord\n");head=Insert_a_record(head);system("pause");break;case 4:printf("\tDelete a Reacord\n");head=Delete_a_record(head);system("pause");break;case 5:printf("\tQuery\n");Query_a_record(head);system("pause");break;case 6:printf("\tAdd Records from a Text File\n"); head=AddfromText(head,"filename");system("pause");break;case 7:printf("\tWrite to a Text File\n"); WritertoText(head,"filename"); system("pause");break;case 8:printf("\tDelete the Same Record\n"); head=DeleteSame(head);system("pause");break;case 0:printf("Goodbye!\n");Quit(head);system("pause");exit(0); }}}。
电话簿系统课程设计一、课程目标知识目标:1. 让学生理解电话簿系统的基本概念,掌握其数据结构和操作方法。
2. 使学生能够运用所学知识,设计并实现一个简单的电话簿系统。
3. 帮助学生了解电话簿系统在实际应用中的功能需求,如添加、删除、查询和修改联系人信息。
技能目标:1. 培养学生运用编程语言(如Python)实现电话簿系统的能力。
2. 提高学生分析问题、解决问题的能力,使其能够针对电话簿系统进行需求分析和功能设计。
3. 培养学生团队协作和沟通表达的能力,能够就电话簿系统的设计与同伴进行有效讨论。
情感态度价值观目标:1. 激发学生对计算机科学和信息技术的兴趣,培养其主动探索新知识的热情。
2. 培养学生认真负责、严谨细致的学习态度,使其认识到细节在软件开发中的重要性。
3. 引导学生关注信息技术对社会生活的影响,使其认识到电话簿系统等应用在实际生活中的价值。
课程性质:本课程为信息技术学科的教学内容,旨在通过电话簿系统设计与实现,帮助学生掌握编程语言和数据结构的基础知识,培养其解决实际问题的能力。
学生特点:考虑到学生所在年级,已具备一定的计算机操作基础和编程知识,对新鲜事物充满好奇心,但可能缺乏实际项目经验。
教学要求:结合学生特点,注重理论与实践相结合,以项目为导向,引导学生主动参与,培养其动手实践能力和团队协作精神。
在教学过程中,关注学生个体差异,给予个性化指导,确保课程目标的实现。
二、教学内容1. 电话簿系统的基本概念:介绍电话簿系统的定义、功能、应用场景,引导学生理解其与现实生活的联系。
2. 数据结构基础:回顾线性表、字典等基本数据结构,为学生实现电话簿系统提供知识储备。
3. 编程语言选择:以Python为例,讲解其在电话簿系统中的应用,如列表、字典的使用,函数的定义等。
4. 电话簿系统功能设计:分析添加、删除、查询、修改联系人信息等功能的实现方法,引导学生进行需求分析和功能规划。
5. 编程实践:指导学生运用Python编程实现电话簿系统,包括数据存储、功能模块划分、代码编写等。
1.设计内容:电话薄管理程序存储的数据包括:人名,工作单位,电话号码和E-mail地址有如下功能:1)加入一个新的电话号码2)删除一个电话号码3)显示保存的已有的电话号码4)修改功能5)排序功能(按电话号码,按姓名字母顺序)6)查询功能(按人名查电话号码,按电话号码查人名)要求:1)程序运行开始,首先显示一个命令菜单。
用户选择那条命令,就调用那项功能。
2)显示数据时,一页显示不下,可以分页显示。
1、设计目的通过本次课程设计了解指针、函数、文件、链表等在实际中的具体应用及他们各自特点,并通过这次实习能达到熟练应用c语言来编辑一些简单的可以在生活中使用的程序的目的,而且学会添加、删除、修改、排序、查找、显示等功能在c语言下的实现。
2、3、程序代码#include<stdio.h> /*标准输入输出库*/#include<conio.h> /*界面处理库*/#include<stdlib.h> /*标准库*/#include<string.h> /*处理字符串函数库*/char filename[20]="E:\\tx123.txt";struct phone /*定义结构体变量*/{char name[10]; /*存放姓名*/char mobile[15]; /*存放手机号码*/char phone[15]; /*存放家庭电话*/char company[20]; /*存放工作单位*/char add_Email[20]; /*存放Email地址*/struct phone *next; /*存放下一个节点的地址*/};typedef struct phone tel; /*重命名*/tel *head=NULL;int z=1,x=1; /*标记量x,z*/void showmenu(); /*显示功能菜单*/void add( ); /*控制添加记录*/void creat(); /*添加记录并按姓名排序*/void modify(); /*修改记录函数*/void searchshow(); /*查找功能显示*/tel *search(); /*查找菜单*/tel *searchname(); /*按人名查找*/tel *searchmob(); /*按手机号码查找*/tel *searchph(); /*按家庭号码查找*/void del(); /*删除记录函数*/void show(); /*显示全部记录*/void save(); /*保存函数*/void openfile(); /*输出文件到链表*/void fre(); /* 释放链表空间*/void showmenu() /*显示功能菜单*/{ int i;clrscr();for(i=0;i<80;i++)printf("%c",14);printf("\n\t\t********************************************\n"); printf("\t\t\t欢迎使用通讯录管理系统");printf("\n\t\t********************************************\n"); printf("\n\n\t\t\t******请选择你的操作******\n");printf("\t\t\t +-------------------------------+\n");printf("\t\t\t | 1 增加记录|\n");printf("\t\t\t | 2 修改记录|\n");printf("\t\t\t | 3 查找记录|\n");printf("\t\t\t | 4 删除记录|\n");printf("\t\t\t | 5 显示全部记录|\n");printf("\t\t\t | 0 退出|\n");printf("\t\t\t +-------------------------------+\n");printf("\n\n\t注意!!输入电话号码或Email要在英文状态下,中文状态无法输入!!\n\n"); printf("请在0--6选择:\n");for(i=0;i<80;i++)printf("%c",14);}void add( ) /*控制添加记录*/{int x=1;printf("开始添加纪录,在添加记录过程中按0 停止添加\n");while(x!=0){do{ creat();printf("操作完成\n");break;}while(1);printf("按0结束添加!!按其他数字键,继续添加!!!\n");scanf("%d",&x);if(x==0){ save();system("cls");}}}void creat() /*添加记录并按姓名排序*/{ int i;tel *new,*p1,*p2;new=(tel *)malloc(sizeof(tel));aa: printf("\t\t\t请输入姓名:");scanf("%s",new->name);printf("\t\t\t请输入工作单位:");scanf("%s",new->company);printf("\t\t\t请输入手机号码:");scanf("%s",new->mobile);printf("\t\t\t请输入家庭电话:");scanf("%s",new->phone);printf("\t\t\t请输入Email地址:");scanf("%s",new->add_Email);p1=head; /*将头指针赋给变量p1*/if(head!=NULL) /*先判断是否有记录*/do{if((strcmp(p1->mobile,new->mobile))==0||(strcmp(p1->phone,new->phone))==0){printf("记录已经存在\n");printf("\n%-10s%-20s%-15s%-15s%-20s\n",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email);printf("是否继续添加?1 继续添加\t其他数字键重新输入\n");scanf("%d",&i);if(i==1)break;elsegoto aa;}p1=p1->next;}while(p1!=NULL);p1=head;if(head==NULL) /*检测是否为空链表*/{head=new; /*链表为空,插入的结点作为第一个结点*/new->next=NULL;}else{while((p1->next!=NULL)&&(strcmp(p1->name,new->name)<0)){ p2=p1;p1=p1->next;}if((strcmp(p1->name,new->name)>0)){if(head==p1){ new->next=head;head=new;}else{ p2->next=new;new->next=p1;}}else{ p1->next=new;new->next=NULL;}}}void modify() /*修改记录函数*/ { tel *new=search();if(z==0);else if(x==0);else if(z==0&&x==0);else{ if(new==NULL){printf("请输入新纪录:\n");printf("\t\t\t请输入姓名:");scanf("%s",head->name);printf("\t\t\t请输入工作单位:"); scanf("%s",head->company);printf("\t\t\t请输入手机号码:"); scanf("%s",head->mobile);printf("\t\t\t请输入家庭电话:"); scanf("%s",head->phone);printf("\t\t\t请输入Email地址:"); scanf("%s",head->add_Email); save();}else{printf("请输入新纪录:\n");printf("\t\t\t请输入姓名:");scanf("%s",new->name);printf("\t\t\t请输入工作单位:"); scanf("%s",new->company);printf("\t\t\t请输入手机号码:"); scanf("%s",new->mobile);printf("\t\t\t请输入家庭电话:"); scanf("%s",new->phone);printf("\t\t\t请输入Email地址:"); scanf("%s",new->add_Email);save();}}printf("\n\n");printf("\t\t\t按任意键继续");getch();system("cls");}void searchshow() /*查找功能显示*/{ int i;clrscr();for(i=0;i<80;i++)printf("%c",16);printf("\n\t\t********************************************\n"); printf("\n\n\t\t\t******请选择你的操作******\n");printf("\t\t\t +-------------------------------+\n");printf("\t\t\t | 1 按人名查找|\n");printf("\t\t\t | 2 按手机号码查找|\n");printf("\t\t\t | 3 按家庭号码查找|\n");printf("\t\t\t +-------------------------------+\n");printf("\n\t\t********************************************\n"); printf("请在1--3选择:\n");for(i=0;i<80;i++)printf("%c",17);}tel *search() /*查找菜单*/{ int i;tel *p1=NULL,*p2=NULL,*p=NULL;searchshow();loop:scanf("%d",&i);if(i>=1&&i<=3)switch(i){case 1:p2=searchname();break;case 2:p2=searchmob();break;case 3:p2=searchph();break;}else{printf("选择错误,请重新选择\n\n");goto loop;}p1=head;while(p1!=NULL){if((strcmp(p1->name,p2->name))==0||(strcmp(p1->mobile,p2->mobile))==0||(strcmp(p1->phone,p2->phone))==0){printf("找到记录:\n");printf("%-10s%-20s%-15s%-15s%-20s\n","姓名","工作单位","手机号码","电话号码","家庭住址");printf("\n%-10s%-20s%-15s%-15s%-20s",p1->name,p1->company,p1->mobile,p1->phone,p1->a dd_Email);getch();break;}p=p1;p1=p1->next;}if(p1==NULL){printf("\t\t\t电话本中无此记录\n\n");printf("\t\t是否重新进行?按1 继续\t\n");scanf("%d",&i);if(i==1){free(p2);goto loop;}}return p;}tel *searchname() /*按人名查找*/{tel *p2=NULL;printf("\t\t请输入姓名:");p2=(tel *)malloc(sizeof(tel));scanf("%s",p2->name);return p2;}tel *searchmob() /*按手机号码查找*/{ tel *p2=NULL;printf("\t\t请输入手机号码:");p2=(tel *)malloc(sizeof(tel));scanf("%s",p2->mobile);return p2;}tel *searchph() /*按家庭号码查找*/{ tel *p2=NULL;printf("\t\t请输入家庭电话:");p2=(tel *)malloc(sizeof(tel));scanf("%s",p2->phone);return p2;}void del() /*删除记录函数*/{tel *p2=search();int i;if(z==0);else if(x==0);else if(z==0&&x==0);else if(p2==NULL){printf("\n\n\n确实要删除吗?\t按1 删除\t按其他数字保留!!\n"); scanf("%d",&i);if(i==1)head=head->next;save();printf("\t\t\t按任意键返回\n");getch();system("cls");}else{printf("\n\n\n确实要删除吗?\t按1 删除\t按其他数字保留!!\n"); scanf("%d",&i);if(i==1){p2->next=p2->next->next;save();}printf("\t\t\t按任意键返回\n");getch();system("cls");}}void show() /*显示全部记录*/{ tel *p1=NULL;clrscr();if(head==NULL) /*判断是否是空链表*/{printf("\n\t\t\t电话簿中没有记录,请输入纪录后,在使用本能!\n");printf("\t\t\t按任意键返回\n");getch();return;}p1=head;printf("\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~\n");printf("%-10s%-20s%-15s%-15s%-20s\n","姓名","工作单位","手机号码","电话号码","E_mail 地址");printf("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~\n");do{printf("%-10s%-20s%-15s%-15s%-20s",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email);p1=p1->next;}while(p1!=NULL);printf("\t\t\t按任意键返回\n");getch();system("cls");}void save() /*保存函数*/{tel *p1=NULL;FILE *fp;if((fp=fopen(filename,"w"))==NULL){printf("不能打开文件\n");return ;}p1=head;for(;p1!=NULL;p1=p1->next){fprintf(fp,"%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email);}printf("操作完毕\n");fclose(fp);}void openfile() /*输出文件到链表*/{FILE *fp;tel *p1=NULL,*p2=NULL;head=NULL;if((fp=fopen(filename,"r"))==NULL) /*打开文件*/{ /*文件不存在,表明第一次使用本电话簿*/ printf("\n\t\t\t********这是一个新电话簿*********\n");return ;}while(!feof(fp) ) /*循环读取文件数据*/{p1=(tel*)malloc (sizeof(tel));fscanf(fp,"%s%s%s%s%s\n",p1->name,p1->company,p1->mobile,p1->phone,p1->add_Email); if(head==NULL){head=p1;p1->next=NULL;p2=p1;}else{p2->next=p1;p1->next=NULL;p2=p1;}}fclose(fp);}void fre() /* 释放链表空间*/{tel *p=head;while(head!=NULL){head=head->next;free(p);p=head;}free(head);}main(){int x;openfile(); /*读取文件到链表*/textbackground(4);/*设置背景颜色*/textcolor(0); /*设置字体颜色*/while(1) /*设置循环条件为真*/{showmenu(); /*显示各个功能*/fflush(stdin); /*刷新缓存区,即清除上一次的存储数据*/printf("请作出您的选择:");scanf("%d",&x);if(x>=0&&x<=5){switch(x){ clrscr();case 1:add();break; /*添加记录函数*/case 2:modify();break; /*修改记录函数*/case 3:search();break; /*查找记录函数*/case 4:del();break; /*删除记录函数*/case 5:show();break; /*显示全部记录*/case 0:fre();printf("\n\t\t欢迎再次使用通讯录管理系统,再见!\n\n");exit(0); /*程序正常退出*/}}else printf("\n\n选择错误,请再次选择!\n");}}4、运行结果具体运行结果见实际操作5、分析与讨论大体上设计的程序与要求符合,但在分页程序的设计上,虽然我们设计出了较简单的可行的分页程序,可是在糅合进主程序时我们遇到了问题,主要是添加记录后显示的结果中始终带有乱码,这里可能是因为主程序的复杂性使输入、输出的数据格式与分页程序中的无法相匹配。
目录摘要 (2)一、课程设计目的 (3)二、课程设计内容 (3)三、总体设计 (3)四、详细设计 (5)(1)数据结构设计 (5)(2)模块接口设计 (5)(3)部分函数细节 (6)五、调试与测试 (9)(1)调试过程中的主要问题 (9)(2)测试结果的分析与讨论 (9) (12)六.实习总结 (14)参考文献 (15)致谢辞 (16)附录:源程序代码 (17)摘要日益繁多的人际交往使得我们很难搞清楚与每个人之间的联系方式,特别是对于做经常出差的人来说更是难,所以电话簿能够便捷的给我们带来所需要的相关信息。
而随着计算机的普及,人们的生活摆脱了传统式的电话簿,越来越多的靠计算机来帮助人们记住这些事情,极其简便。
这就需要有一个使用的电话簿管理系统,用户可以方便的通过自己电脑的电话簿管理系统,来随时查阅自己所需要的信息,而不必再大费周折去翻开那繁琐的记事本。
电话簿管理系统是一个专门针对储存用户联系方式以及一些简单个人信息的实用管理系统,它方便了用户对众多客户、朋友、同事等个人信息的储存和快速查阅的功能,大大减少了查找过程的时间。
关键字:信息(Information)电话簿管理系统(The Management of Telephone Book)一、课程设计目的通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。
通过课程设计,学会设计数据结构。
其中包括对结构数组、链表和数据结构等知识的运用。
通过课程设计,提高程序开发功能,能运用合理的控制流程编写清晰高效的程序。
通话课程设计,培养分析问题、解决实际问题的能力。
二、课程设计内容设计一个实用的电话簿管理系统,能以简便高效的方式对电话簿进行管理,具体要示:电话簿信息包括:姓名,电话。
(1)更新:能插入、删除电话簿信息。
.(2)浏览:能够查看所有的电话簿信息。
(3)查询:能实现指定姓名信息查询。
(4)修改:能修改指定的电话簿信息。
(5)添加:可以添加想要的信息。
(6)保存和打印:能保存和打印电话簿信息。
(7)退出:可以随意退出程序。
三、总体设计1、模块化设计为实现系统功能,本程序主要分为九个模块。
它们分别为:输入一个信息、删除一个信息、查询一个信息、读取查找插入一个信息、查找、添加,修改一个信息,列出所有的信息、退出该程序。
这五个函数再通过主函数调用分别得以实现。
主函数,首先提供了程序运行时的友好界面,列出了清单,提供用户做出选择,以便决定使用电话簿的哪种功能。
然后,通过执行多分支选择语句——switch语句,分别实现其它各个函数的调用功能。
其它各个函数的功能分别如下:(1)create 建立电话簿(2)delete删除电话号码(3)print 打印电话簿(4) save 保存电话簿(5)load 读取电话簿文件(6)search 查找电话号码(7)append 添加新的电话号码(8)modify 修改电话号码(9)exit 退出电话号码簿2、模块调用图四、详细设计(1)数据结构设计本程序中,运用了多种数据结构。
首先对于通讯录中各项详细信息的记录用了结构数组的形式,然后又运用链表动态地分配内存单元,通过指针的后移,把多个数据连成一个链,形成一个链表。
对于主要数据结构的举例如下:结构数组:strut tel{char name[10];char tel [11];char s[11];};链表:ID * next;ID *creat(){ID *head,*p1,*p2;void save(ID * head);ID*temp;ID*deleter(ID*head);ID *append(ID *head);ID *modify(ID *head);(2)模块接口设计由于本程序中大部分运用了链表这一数据结构,函数中存在很多指针,所以这个程序中被调用的函数都是空类型的,但这并没有影响最终结果的输出,反而使得函数调用的过程更加简便。
本程序执行的入口是main函数,然后在main函数中首先调用了creat函数,这就实现了对通讯录中的数据进行录入。
接下来用switch语句实现对各个函数的调用。
通过对链表的使用,可以使得每一次的函数调用都能得到返回值。
最后,再从main函数中结束整个程序的运行。
(3)部分函数细节print函数,功能:打印用户已经输入过的电话信息,系统若无法读取原信息,则给用户相关提示:“当前链表为空,请先创建新的链表或者加载文件”。
void print(ID*head){ID*temp;temp=head;system("cls");printf("姓名:\t电话号码:\n");if(head==NULL){printf("当前链表为空,请先创建新的链表或者加载文件\n");}elsewhile(temp!=NULL){printf("%s\t%s\n",temp->name,temp->tel);temp=temp->next;}}search 函数,用户通过提示输入待查姓名的首字母,系统会根据用户输入内容做判断,并给出相应的提示:"对不起,未能找到符合条件的记录”,或"查找完毕,是否重新查询?void search(ID *head){printf("欢迎使用查找功能,只需要输入待查姓名的首字母:\n"); ID* p;int flag,searchflag=1;char c,choice;while(searchflag){flag=0;printf("请输入需要查找姓名的首字母:\n");scanf("%c",&c);getchar();p=head;while(p!=NULL){if(p->name[0]==c){printf("姓名:%s\t电话号码:%s\n",p->name,p->tel);flag=1;}p=p->next;}if(flag==0)printf("对不起,未能找到符合条件的记录\n");printf("查找完毕,是否重新查询?Y/N?");scanf("%s",&choice);getchar();if(choice=='Y'||choice=='y'){searchflag=1;}else{searchflag=0; system("cls"); }}}五、调试与测试(1)调试过程中的主要问题由于本程序是分模块设计的,所以运行时选择完任务并且执行完任务后,又会继续回到用户选择界面,供用户继续选择任务并执行任务。
对于本程序的调试运行,总体上情况良好。
但是,其中也出现了一些小问题。
我发现的主要问题有:对于本程序来说不能实现保存,程序在下一次运行的时候便要从新输入。
(2)测试结果的分析与讨论用户界面:共九个函数,用户根据数字提示进行操作。
图5-1创建电话簿图5-2 打印电话簿图5-3保存电话簿图5-4 读取电话簿图5-5删除电话号码图5-6 插入新号码图5-7查找电话号码图5-8 修改电话号码图5-9六.实习总结课程设计是培养学生综合运用所学知识 ,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好C语言课程设计是十分必要的。
通过三周的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次真真的做程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是通讯录管理系统的课程设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。
更加是第一次做课程设计,所以第一天下午在机房做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。
可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。
又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。
无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!参考文献[1]郭有强,《C语言程序设计》,清华大学出版社。
[2]谭浩强,《C程序设计》,清华大学出版社。
[3]刘振安,孙忱,刘燕君,《C程序设计课程设计》,机械工业出版社。
[4]汪诗林,《数据结构算法与应用》,机械工业出版社。
致谢辞在这次课程设计的撰写过程中,我得到了很多人的帮助。
首先我要感谢我的老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次课程设计的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。
同时也感谢学院为我提供良好的做毕业设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学!附录:源程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<ctype.h>#include<mem.h>#include<conio.h>#define ID struct telstruct tel{char name[10];char tel [11];ID * next;};int total=0;ID *creat(){ID *head,*p1,*p2;void save(ID * head);char saveflag;head=p1=p2=NULL;printf("欢迎使用\n");while(1){p1=(ID*)malloc(sizeof(ID));printf("请输入姓名,以#作为结束标志\n");scanf("%s",p1->name);if(strcmp(p1->name,"#")==0){if(total==0){printf("您输入了0条记录,单链表没有创建\n");free(p1);return(head);}else{break;}}printf("请输入电话号码:\n");scanf("%s",p1->tel);if(head==NULL){head=p1;p2=p1;}else{p2->next=p1;p2=p1;}total++;}p2->next=NULL;free(p1);printf("新建电话簿成功,共有%d个联系人,是否存盘?Y/N",total); getchar();scanf("%c",&saveflag);if(saveflag=='y'||saveflag=='Y')save(head);elseprintf("请在推出程序之前,保存当前的工作!\n");return head;}void print(ID*head){ID*temp;temp=head;system("cls");printf("姓名:\t电话号码:\n");if(head==NULL){printf("当前链表为空,请先创建新的链表或者加载文件\n");}elsewhile(temp!=NULL){printf("%s\t%s\n",temp->name,temp->tel); temp=temp->next;}}void save(ID*head){FILE *fp;ID*t;if((fp=fopen("tel.txt","w"))==NULL){printf("文件打开失败!\n");getch();exit(1);}printf("正在保存文件,请稍后...\n");t=head;while(t!=NULL){fwrite(t,sizeof(ID),1,fp);t=t->next;}fclose(fp);printf("文件保存成功!\n");}ID * load(){FILE *fp;ID *t1,*t2,*head=NULL;char ch;if((fp=fopen("tel.txt","r"))==NULL){printf("文件打开失败!没有该文件\n");getch();//exit(1);return(head);}ch=fgetc(fp);if(ch==EOF){printf("文件为空,请重新建立一个电话簿\n");return (head);}else{printf("文件正在读取中...\n");rewind(fp);}t1=(ID *) malloc(sizeof(ID));head=t1;while(!feof(fp)){if(fread(t1,sizeof(ID),1,fp)!=1)break;t1->next=(ID *)malloc(sizeof(ID));t2=t1;t1=t1->next;}t2->next=NULL;fclose(fp);printf("文件读取完毕\n");return head;}void search(ID *head){printf("欢迎使用查找功能,只需要输入待查姓名的首字母:\n"); ID* p;int flag,searchflag=1;char c,choice;while(searchflag){flag=0;printf("请输入需要查找姓名的首字母:\n");scanf("%c",&c);getchar();p=head;while(p!=NULL){if(p->name[0]==c){printf("姓名:%s\t电话号码:%s\n",p->name,p->tel); flag=1;}p=p->next;}if(flag==0)printf("对不起,未能找到符合条件的记录\n");printf("查找完毕,是否重新查询?Y/N?");scanf("%s",&choice);getchar();if(choice=='Y'||choice=='y'){searchflag=1;}else{searchflag=0;system("cls");}}}ID*deleter(ID*head){ID*p,*q;char s[11],choice;system("cls");printf("请输入要删除的电话号码:\n");scanf("%s",s);q=p=head;while(strcmp(p->tel,s)&&p!=NULL){q=p;p=p->next;}if(p==NULL)printf("\n对不起,记录中没有电话号码:%s\n",s);else{printf("姓名:%s\t 电话号码:%s\n",p->name,p->tel); printf("是否删除?Y/N");scanf("%s",&choice);getchar();if(choice=='Y'||choice=='y'){printf("按任意键删除...\n");getch();if(p==head)head=p->next;elseq->next=p->next;free(p);printf("\n 已经删除了电话号码:%s\n",s);printf("请保存文件!(按4保存文件)\n");}elsesystem("cls");}return(head);}ID *append(ID *head){ID *temp,*p1,*p2;printf("插入操作开始!!!\n");temp=(ID *)malloc(sizeof(ID));printf("请输入姓名:\n");scanf("%s",temp->name);getchar();printf("请输入电话号码:\n");scanf("%s",temp->tel);getchar();if (head==NULL){head=temp;temp->next=NULL;}else{p1=head;while(p1!=NULL){p2=p1;p1=p1->next;}p2->next=temp;temp->next=p1;}printf("插入成功");total++;return (head);}ID *modify(ID *head){ID *p1,*p2;int mode;char str[10];printf("请输入要修改记录的姓名:");scanf("%s",str);getchar();p1=head;while( p1!=NULL){if(strcmp(p1->name,str)==0){printf("1.姓名:%s\t2.电话号码:%s\n",p1->name,p1->tel); printf("请选择要修改选项:\n");scanf("%d",&mode);getchar();if(mode==1){printf("请输入修改后的姓名\n");scanf("%s",p1->name);getchar();}else if(mode==2){printf("请输入修改后的电话号码\n");scanf("%s",p1->tel);getchar();}elseprintf("输入有误!\n");break;}p2=p1;p1=p1->next;}if(p1==NULL)printf("未找到符合要求的记录!\n");return head;}int main(){ID *head=NULL;int choice;while(1){printf("\t*************电话簿管理系统*************\n"); printf("\t**\t1 create 建立新的电话簿 ** \n"); printf("\t**\t2 deleter 删除电话号码 ** \n"); printf("\t**\t3 print 打印电话簿 ** \n"); printf("\t**\t4 save 保存电话簿 ** \n"); printf("\t**\t5 load 读取电话簿文件 ** \n"); printf("\t**\t6 search 查找电话号码 ** \n"); printf("\t**\t7 append 添加新的电话号码 ** \n");printf("\t**\t8 modify 修改电话号码 ** \n"); printf("\t**\t9 exit 退出电话号码簿 ** \n"); printf("\t*************电话簿管理系统*************\n"); printf("\t\t请选择1-9之间的操作:\n");scanf("%d",&choice);getchar();switch(choice){case 1: head=creat();break;case 2: head=deleter(head);break;case 3: print(head);break;case 4: save(head);break;case 5: head=load();break;case 6: search(head);break;case 7: head=append(head);break;case 8: head=modify(head);break;case 9: exit(0);break;default:printf("选择错误,请输入1-9之间的数字进行选择\n"); }}return 0;}蚌埠学院本科学生课程设计任务书注:任务书由指导教师填写。