C语言课程设计通讯录实验报告
通讯录管理系统c语言课程设计报告(一)

通讯录管理系统c语言课程设计报告(一)通讯录管理系统C语言课程设计报告1. 简介通讯录管理系统是一款基于C语言开发的软件,旨在帮助用户方便地存储、查找、编辑和删除联系人信息。
本报告将对该系统的功能和设计进行详细介绍。
2. 系统功能通讯录管理系统具备以下主要功能:•添加联系人:用户可以输入联系人的姓名、电话号码、电子邮件等信息,并将其添加到通讯录中。
•查找联系人:用户可以根据姓名或电话号码等方式,快速查找通讯录中的联系人信息。
•编辑联系人:用户可以修改通讯录中已有联系人的信息,如电话号码、电子邮件等。
•删除联系人:用户可以从通讯录中删除特定联系人。
•显示通讯录:用户可以查看通讯录中的所有联系人信息。
•退出系统:用户可以选择退出通讯录管理系统。
3. 系统设计数据结构通讯录管理系统主要使用以下数据结构存储联系人信息:•结构体:定义了一个联系人的数据结构,包括姓名、电话号码、电子邮件等字段。
•数组:用于存储多个联系人信息,构成通讯录。
数组的每个元素对应一个联系人的结构体。
主要函数添加联系人函数void addContact(struct Contact contacts[], int *num Contacts)•功能:向通讯录中添加一个联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts的指针。
•输出:无。
查找联系人函数void searchContact(struct Contact contacts[], int n umContacts)•功能:根据用户提供的关键词在通讯录中查找联系人。
•输入参数:通讯录数组contacts、通讯录中联系人数量numContacts。
•输出:无。
编辑联系人函数void editContact(struct Contact contacts[], int num Contacts)•功能:根据用户选择的联系人在通讯录中编辑联系人信息。
c语言通讯录实验报告

c语言通讯录实验报告C语言通讯录实验报告一、实验目的通讯录是我们日常生活中常用的工具,可以帮助我们管理联系人信息。
本次实验旨在通过使用C语言编写一个简单的通讯录程序,加深对C语言的理解和运用。
二、实验环境本次实验使用的开发环境是Visual Studio Code,编程语言为C语言。
三、实验过程1. 通讯录数据结构设计在开始编写程序之前,我们需要先设计好通讯录的数据结构。
通讯录的基本信息包括姓名、电话号码和电子邮件地址。
我们可以使用结构体来表示一个联系人的信息,然后使用数组来存储多个联系人的信息。
2. 程序主体框架设计接下来,我们需要设计程序的主体框架。
首先,我们可以定义一个数组来存储通讯录中的联系人信息。
然后,我们可以使用一个循环来提供用户操作的选项,比如添加联系人、查找联系人、删除联系人等。
用户可以通过输入相应的数字来选择不同的操作。
3. 添加联系人功能在程序中添加联系人的功能可以通过用户输入联系人的姓名、电话号码和电子邮件地址来实现。
我们可以通过循环遍历通讯录数组,找到第一个空闲的位置,将新的联系人信息存储到该位置。
4. 查找联系人功能查找联系人的功能可以通过用户输入联系人的姓名来实现。
我们可以通过遍历通讯录数组,逐个比较联系人的姓名,找到匹配的联系人并输出其详细信息。
5. 删除联系人功能删除联系人的功能可以通过用户输入联系人的姓名来实现。
我们可以通过遍历通讯录数组,找到匹配的联系人并将其从数组中删除。
6. 修改联系人功能修改联系人的功能可以通过用户输入联系人的姓名来实现。
我们可以通过遍历通讯录数组,找到匹配的联系人,并允许用户修改其电话号码和电子邮件地址。
7. 显示通讯录功能显示通讯录的功能可以通过遍历通讯录数组,逐个输出联系人的详细信息来实现。
四、实验结果经过编写和调试,我们成功实现了一个简单的C语言通讯录程序。
用户可以通过输入相应的数字来选择不同的操作,包括添加联系人、查找联系人、删除联系人、修改联系人和显示通讯录。
C语言课程设计通讯录实验报告

太原学院计算机工程系课程设计报告课程名称:数据结构课程设计姓名:苏建花学号: 20140903336专业班级:计算机工程系网络三班指导教师:翟婷婷2015年12 月30日计算机工程系课程设计报告课程名称:C语言课程设计成绩:课程设计题目:通讯录管理系统指导教师:(签名):班级:网络14-3班姓名:苏建花学号:20140903328目录(参考)1. 设计目的与要求 (X)1.1 题目与设计要求 (X)1.2 本程序涉及的知识点 (X)2. 功能设计 (X)2.1总体设计 (X)2.2详细设计 (X)3. 程序实现 (X)3.1程序实现时应考虑的问题 (X)3.2 XX模块核心代码 (X)4.测试分析 (X)4.1 测试结果及分析 (X)4. 总结 (X)参考文献 (X)1、设计目的与要求这次课程设计的目的在于:1.熟练的掌握C语言课程中所学的理论知识,并对其进行应用;2.通过综合C语言的基本知识来解决实际问题;3.加强分析和解决问题的能力;4.提高实践动手能力,将知识化为实际成果1.1 题目与设计要求(1)题目:通讯录(2)设计要求a、建立通讯录信息,信息至少包含姓、名、电话号码、住址、分类(如同事、朋友、同学、家人等)等。
b、该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、姓氏方式查找。
c、将通讯录保存在文件中。
d、能够输出通讯录中的信息。
1.2 本程序设计的知识点(1)采用结构体数组。
struct Person{char a[16];char s[16];char d[16];char f[24];struct Person *next;}stu;(2)运用函数之间的调用主函数可以调用子函数,子函数之间可以相互调用,子函数不能调用主函数,主函数可以多次调用一个子函数,也可以一次调用多个子函数。
(3)利用指针变量struct Person *head;struct Person *p1,*p22 、功能设计添加:添加通讯录记录修改:修改通讯录记录删除:删除通讯录记录查找:查询通讯录记录显示:显示通讯录记录统计:统计通讯录数目2.1需求分析信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或姓氏进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。
c语言通讯录管理系统课程设计报告

c语言通讯录管理系统课程设计报告报告标题:C语言通讯录管理系统课程设计报告1. 引言本报告旨在介绍并分析本次课程设计所涉及到的C语言通讯录管理系统的设计与实现过程。
2. 设计目标•开发一个功能完善的通讯录管理系统•实现基本的通讯录管理功能,包括添加、删除、查询、修改联系人信息等•提供良好的用户交互界面,方便用户使用该系统•提高系统的效率和稳定性,确保数据的安全性3. 系统设计概述本通讯录管理系统基于C语言开发,主要包括以下几个模块: - 用户管理模块:实现用户注册、登录、退出等功能 - 联系人管理模块:实现联系人的增删改查等功能 - 数据存储模块:使用文件系统进行数据的读写操作数据结构设计本系统使用了以下数据结构: - 用户结构体:包含用户名、密码等信息 - 联系人结构体:包含姓名、电话号码、地址等信息功能模块设计•用户管理模块:提供用户注册、登录、退出等功能•联系人管理模块:提供联系人的添加、删除、查询、修改等功能•数据存储模块:实现数据的读取与保存功能4. 实现细节用户管理模块•注册功能:获取用户输入的用户名和密码,存储到用户数据文件中•登录功能:根据用户输入的用户名和密码,从用户数据文件中验证登录信息•退出功能:退出当前用户,返回系统主界面联系人管理模块•添加联系人功能:获取用户输入的联系人信息,存储到联系人数据文件中•删除联系人功能:根据用户输入的联系人姓名,从联系人数据文件中删除对应的联系人信息•查询联系人功能:根据用户输入的关键词,从联系人数据文件中查找匹配的联系人信息•修改联系人功能:根据用户输入的联系人姓名,从联系人数据文件中修改对应的联系人信息数据存储模块•读取数据功能:从文件中读取用户和联系人的数据•保存数据功能:将用户和联系人的数据保存到文件中5. 测试与优化本系统在开发过程中进行了多次测试和优化,确保系统的稳定性和功能完善性。
通过模拟用户的操作,检测系统的响应速度、功能是否正常等,并对系统进行了性能调优和bug修复。
C语言课程设计通讯录实验报告

C语言课程设计通讯录实验报告实验目的:本实验旨在通过设计一个通讯录程序,加深理解和掌握结构体、函数和文件操作等C语言知识,并培养学生的实践能力和解决问题的能力。
实验要求:设计一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验原理:通讯录程序的数据结构可以设计为一个结构体数组,每个元素表示一个联系人,结构体包含姓名、电话号码、地址等信息。
通过使用不同的函数实现不同的功能,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
实验步骤:1. 定义一个结构体类型,包含姓名、电话号码和地址等信息。
2. 声明并实现各个功能函数,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
3. 在主函数中使用循环菜单来实现用户的各种操作选择。
4. 将联系人信息保存到文件中,实现数据的持久化存储。
5. 编译并运行程序,验证程序的正确性和功能完整性。
实验结果:通过实验,成功设计并实现了一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验总结:本实验通过设计一个通讯录程序,加深了对结构体、函数和文件操作等C语言知识的理解和掌握,同时也培养了解决问题的能力和实践能力。
通过实验,我进一步理解了结构体的定义和使用、函数的声明和调用、文件的打开和关闭等操作。
在实验过程中,我也遇到了一些问题,如如何优化查找联系人的算法、如何处理文件打开失败的情况等,通过思考和调试逐步解决了这些问题。
实验过程中的问题和解决方法不仅加深了对C 语言的理解,也提高了解决问题的能力。
通讯录管理系统--C语言程序设计实习报告

C 语言课程设计题目:通讯录管理系统设计者:院系:数理学院专业:信息与计算科学班号:123111学号:***********指导教师:***2012年6月29日1.题目要求通讯录管理系统是具有数据插入、更新、删除、显示和查询功能的电话簿管理程序。
(1)数据包括姓名、工作单位、电话号码和E-MAIL地址等。
(2)可对记录中的姓名和电话号码进行更新。
(3)可增加和删除记录。
(4)可显示所有的保存的记录。
(5)可按姓名或电话号码进行查询。
2.需求分析1.信息记录要存放到文件中,要实现文件的输入、输出功能;2.实现数据的添加、删除、更新和显示,要提供输入、删除、更新和显示功能;3.要实现按人名或电话号码进行查询,因而要提供查找功能;4.应该提供键盘式选择菜单以实现功能选择。
5.采用模块化,由上到下的设计方法,通过数字选择菜单功能,上级菜单可进入下级菜单,下级菜单可返回上级菜单。
3.总体设计根据上面得需求分析,系统有菜单选择、数据输入、数据查找、数据更新、数据的存储等功能。
可以将系统设计分为四大模块,即显示、查找、更新(包括增加和删除)和退出,如图1所示。
其中,主要功能是显示、查询和更新三个模块。
4.详细设计4.1主函数主函数设计比较简洁,只提供输入、功能处理和输出部分得函数调用。
其中各功能模块采用菜单方式选择。
另外,菜单部分也可以写出函数。
具体流程图如图2所示。
【程序】main(){int n,w;do{puts("***************通讯录管理系统***************\n");puts("********************菜单********************\n");puts("1.显示通讯录\n");puts("2.查找\n");puts("3.更新\n");puts("4.退出\n");puts("********************************************\n");printf("选择功能(1-4):");scanf("%d",&n);if(n<1||n>4){w=1;getchar();}else {w=0;}}while(w==1);switch(n) /*选择功能*/{case 1:list();break; /*列出通讯录*/ case 2:find();break; /*查找*/case 3:choose();break; /*更新通讯录*/ case 4:printf("谢谢使用!\n\n"); /*退出*/ }}4.2各功能模块设计★数据结构通讯录的数据信息:姓名、工作单位、电话号码、E-MAIL均采用字符型数组,用结构体的形式,把各信息作为结构的成员。
c语言通讯录管理系统课程设计报告

C语言通讯录管理系统课程设计报告一、引言通讯录管理系统是一种常见的实用性软件,用于记录和管理个人或组织的联系人信息。
本文档旨在介绍一种基于C语言开发的通讯录管理系统的设计与实现。
通过本系统,用户可以方便地添加、删除、搜索和编辑联系人信息,实现了通讯录的基本功能。
二、系统需求分析本通讯录管理系统的主要功能包括: 1. 添加联系人:用户可以添加联系人的姓名、电话号码、邮箱等信息。
2. 删除联系人:用户可以根据联系人的姓名或电话号码删除对应的联系人信息。
3. 查找联系人:用户可以根据联系人的姓名或电话号码查找对应的联系人信息。
4. 修改联系人:用户可以修改已存在联系人的信息。
5. 显示所有联系人:用户可以查看通讯录中所有的联系人信息。
三、系统设计1. 数据结构设计为了实现通讯录管理系统,我们需要设计适当的数据结构来存储联系人信息。
在本设计中,使用结构体数组来表示每个联系人的信息,其中每个结构体包含姓名、电话号码、邮箱等成员变量。
struct Contact {char name[50];char phoneNumber[20];char email[50];};2. 功能模块设计本系统主要包含以下几个功能模块:a. 添加联系人模块用户可以选择添加新的联系人,输入姓名、电话号码和邮箱等信息后,系统将在通讯录中添加新的联系人。
b. 删除联系人模块用户可以根据输入的姓名或电话号码查找对应的联系人信息,并选择删除对应的联系人。
c. 查找联系人模块用户可以根据输入的姓名或电话号码查找对应的联系人信息,并在界面上显示查询结果。
d. 修改联系人模块用户可以根据输入的姓名或电话号码查找对应的联系人信息,并选择修改对应的联系人。
e. 显示所有联系人模块用户可以选择显示通讯录中所有的联系人信息,在界面上进行展示。
3. 系统框架设计本系统的整体框架如下:1. 主菜单显示2. 根据用户的选择,进入对应的功能模块四、系统流程图下图展示了通讯录管理系统的整体流程:主菜单 -> 用户选择功能模块 -> 执行对应模块功能五、代码实现以下为通讯录管理系统的部分核心代码实现,完整代码可参考附录部分。
通讯录C语言程序设计报告书

一、实践的目的和要求加深对C语言课程所学知识的理解,进一步巩固C语言算法规则.学会编制结构清晰.风格良好.数据结构适当的C程序,从而具备解决综合性问题的能力.二、内容在熟练掌握C语言的基础知识:数据类型(整型.实型.字符型.指针.数组.结构等);运算类型(算术运算.逻辑运算.自增自减运算.赋值运算等);程序结构(顺序结构.判断选择结构.循环结构);大程序的功能分解方法(即函数的使用)等.进一步掌握各种函数的应用以及文件的读写操作等.三、实验任务:通讯录设计要求:实现菜单设计,使用数据文件保存和修改,应用结构体和指针功能要求:通讯录信息生成,存储,查询,修改,插入,删除,打印等.四、设计思路1.通讯录的主要信息包括:编号,姓名,性别,联系电话.住址,邮编.2.用结构体数组来存储信息,有Data_Input函数来实现信息的录入,用Data_Show函数来显示打印信息,用Data_Sreach函数来查找信息,用Data_Insert函数来插入信息,用Data_Alter 函数来修改信息,用Data_Delete函数来删除信息,用Data_Save函数来保存信息,用Exit函数来退出通讯录.3.小组分工,每个人分配几个函数,按情况进行分配任务.五、程序代码#include<string.h>/*字符函数和字符串函数*/#include<conio.h>/*字符模式函数(调用getch()函数)*/#include<stdio.h>/*输入输出函数*/int i;struct friend/*电子通讯录结构定义*/{char num[5]; /*编号*/char name[11]; /*名字*/char sex[2]; /*性别*/char phone[12]; /*电话*/char address[26]; /*地址*/char post_num[11]; /*邮编*/}friends[50];FILE *fp;void Data_load() /*数据载入函数*/{int j;fp=fopen("friend.txt","r+"); /*打开文件friend.txt*/if(fp==NULL) /*判断是否存在friend.txt,如果不存在则创建*/{ fp=fopen("friend.txt","w");i=0;}else{for(i=0;i<50;i++){ j=fgetc(fp);if(j==EOF) /*判断是否到了文件尾*/return;fseek(fp,i*sizeof(struct friend),0);fread(&friends[i],sizeof(struct friend),1,fp); /*从文件中读取一条记录*/ }}}void Menu_Select() /*显示菜单界面*/{printf(" \n");printf(" \n");printf(" \n");printf(" Address Book Management System \n");printf(" \n");printf(" ======================\n");printf(" 1.Address book data Entry\n"); /*数据输入*/ printf(" 2.Address Book data Show\n"); /*数据显示*/ printf(" 3.Address Book data Search\n"); /*数据查找*/ printf(" 4.Address Book data Alter\n"); /*数据修改*/ printf(" 5.Address Book data Insert\n"); /*数据插入*/ printf(" 6.Address Book data Delete\n"); /*数据删除*/ printf(" 7.Address Book data Save\n"); /*数据保存*/ printf(" 0.Exit\n"); /*退出*/ printf(" ======================\n");printf( " Please chioce 0-7 \n\n");}int Data_check(int k,char ID[5]) /*检查通讯录中是否存在相同ID或ID输入格式错误*/ {int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}void Data_Input() /*数据输入函数*/ {char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("************************************************************************\n"); printf(" ******************* Add Address Book Information***********************\n");printf("************************************************************************\n"); printf("************************************************************************\n");}for(;i<50;i++){do{switch(yes_no){case'1': /*如果输入为'1',则进行数据输入*/ printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25)Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends [i].address,friends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/ {printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\n Storage full!\n\n");break;case'0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/ if(yes_no=='0') /*如果输入'0'则退出输入函数*/{i++;break;}}}int The_Size(char a[],char b[]) /*比较两个ID的大小*/ {int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t;}void Data_Show() /*数据输出函数*/ {int j,k;char m;struct friend t;printf("********************************************************************\n");printf(" No. Name Sex Phone AddressZip_Code \n");printf("********************************************************************\n");for(j=0;j<i-1;j++) /*对数据进行排序*/ {for(k=0;k<i-1-j;k++){if(The_Size(friends[k].num,friends[k+1].num)==1){t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++) /*数据输出*/{printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,friends[j ].sex,friends[j].phone,friends[j].address,friends[j].post_num);m=getch();if(m==’’)break;}printf("\n\n There are %d data in the book .\n\n",i); }void Data_Search() /*数据查找函数*/{char k;int j,a,b;char ID[5];char NAME[11];printf("Search by No. : 1\n");printf("Search by name : 2\n");k=getch();switch(k){case'1': /*按ID查找*/a=0;printf("\n\n Please enter the No.\n\n");scanf("%s",ID);for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0){a++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,frien ds[j].sex,friends[j].phone,friends[j].address,friends[j].post_num);}}if(a==0)printf(" Do not have to find the No.!\n\n");break;case'2': /*按姓名查找*/b=0;printf("\n\n Please enter the Name\n\n");scanf("%s",NAME);for(j=0;j<i+1;j++){if(strcmp(NAME,friends[j].name)==0){b++;printf(" No. Name Sex Phone Address Zip_Code \n");printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,friends[j ].sex,friends[j].phone,friends[j].address,friends[j].post_num);}}if(b==0)printf(" Do not have to find the Name!\n\n");break;default:printf("\n\n Error!\n");break;}}void Data_Insert() /*数据插入函数*/{if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){char ID[5];int k=0;printf("Please enter the No. that you want to insert.\n");scanf("%s",ID);Data_check(k,ID);printf("%d",Data_check(k,ID)); /*检查所需插入的ID是否已存在,如果存在重新输入*/while(Data_check(k,ID)>0){printf("The No. already exists Or The No. isn't correct, pleasere-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID); /*插入数据*/ printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[i].name,friends[i].sex,friends[i].phone,friends[i].a ddress,friends[i].post_num);i++;}}void Data_Delete() /*数据删除函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. need to be deleted\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){for(;k<i;k++) /*删除位置前的元素顺序前移*/{friends[k]=friends[k+1];}printf("\n\n Delete success!\n\n");i=i-1;}}void Data_Alter() /*修改函数*/{int k,t=0;char ID[5];printf("\n\n Please enter the No. to be Amended\n\n");scanf("%s",ID);for(k=0;k<i;k++){if(strcmp(friends[k].num,ID)==0){t++;break;}}if(t==0)printf("\n\n The No. does not Exist!\n\n");if(t>0){strcpy(friends[k].num,ID);printf(" ****** Name(10) Sex(M/F) Phone(11) Address(30)Zip_Code(10)*******\n");scanf("%s%s%s%s%s",friends[k].name,friends[k].sex,friends[k].phone,friends[k].a ddress,friends[k].post_num);printf("\n\n Alter Success!\n\n");}}void Data_Save() /*数据保存函数*/{int j;fp=fopen("friend.txt","w");for(j=0;j<=i-1;j++){fwrite(&friends[j],sizeof(struct friend),1,fp);}printf("\n\n Save Success!\n\n");}void Exit() /*退出函数*/{char flag;printf(" Save or Not? (Y/N)\n"); /*判断是否保存*/do{flag=getch();switch(flag){case'Y': /*保存*/Data_Save();break;case'y': /*保存*/Data_Save();break;case'N':break;case'n':break;}}while(flag!='Y'&&flag!='y'&&flag!='N'&&flag!='n');}void main(){char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case'1': Data_Input(); break; /*输入*/case'2': Data_Show(); break; /*显示*/case'3': Data_Search(); break; /*查找*/case'4': Data_Alter(); break; /*修改*/case'5': Data_Insert(); break; /*插入*/case'6': Data_Delete(); break; /*删除*/case'7': Data_Save(); break; /*保存*/case'0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');六、函数说明本人所写函数为: Data_check , Data_Input, The_Size, Data_Show,main.以下为各函数的功能说明,代码以及流程图:Data_check:本函数的功能是判断输入的编号是否以存在及格式是否正确.首先定义一个整型形参,一个字符数组形参.首先判断编号的首位是否为0,如果为0则整型形参赋值为1.反之没有动作,然后判断编号内是否含义字母及其他字符,如果有则整型形参自增,反之没有动作,在使用strcmp判断输入的编号在原文件中是否以存在,如果存在则整型形参自增.最后返回整型形参的值.源代码:/*检查通讯录中是否存在相同ID或ID输入格式错误*/int Data_check(int k,char ID[5]){int j;if(ID[0]=='0')k=1;for(j=0;ID[j]!='\0';j++){if(ID[j]>'9'||ID[j]<'0')k++;}for(j=0;j<i+1;j++){if(strcmp(ID,friends[j].num)==0)k++;}return k;}流程图:Data_Input:首先判断储存是否已满,如果满了,则提示是否回到主菜单,如果没满,则提输入信息,然后调用Data_check函数,判断编号是否已经存在以及格式是否正确.如果均无误则提示是否继续输入信息,反之则重新输入编号直到编号无误为止.如果输入信息后,储存变满,则提示储存已满,不再提示是否继续输入.最后提示是否回到主菜单.源代码:void Data_Input() /*数据输入函数*/{char yes_no='1';char ID[5];int k=0;if(i>=50)printf("\n\n Storage full!\n\n");if(i<50){printf("************************************************************************\n"); printf(" ******************* Add Address Book Information***********************\n");printf("************************************************************************\n"); printf("************************************************************************\n");}for(;i<50;i++){do{switch(yes_no){case '1': /*如果输入为'1',则进行数据输入*/printf(" ****** No.(4) Name(10) Sex(M/F) Phone(11) Address(25)Zip_Code(10)*******\n");scanf("%s%s%s%s%s%s",ID,friends[i].name,friends[i].sex,friends[i].phone,friends [i].address,friends[i].post_num);Data_check(k,ID);while(Data_check(k,ID)>0) /*检查输入的ID是否已存在,如果存在重新输入*/{printf("The No. already exists Or The No. isn't correct, please re-enter\n");scanf("%s",ID);Data_check(k,ID);}strcpy(friends[i].num,ID);if(i<49){printf("\n\n Whether to be continue? Y(1)/N(0) \n\n");yes_no=getch();}if(i>=49)printf("\n\n Storage full!\n\n");break;case '0':break;default:yes_no=getch();}}while(yes_no!='1'&&yes_no!='0'); /*如果输入的不是'1'或'0'则重新输入*/ if(yes_no=='0') /*如果输入'0'则退出输入函数*/{i++;break;}}}流程图:The_Size:首先定义两个字符数组形参,一个整型变量.首先利用strlen比较两个字符数组的长度,如果前者长于后者,整型变量赋值为1如果前者短于后者,整型变量赋值为-1,如果两者长度相等,则再利用strcmp比较两个字符数组的大小,如果前者大于后者,则整型变量赋值为1,如果前者小于后者,则整型变量赋值为-1,如果两者大小相等,则整型变量赋值为0.最后返回整型变量的值.源代码:int The_Size(char a[],char b[]) /*比较两个ID的大小*/{int j,t;if((j=strlen(a)-strlen(b))>0) t=1;if((j=strlen(a)-strlen(b))<0) t=-1;if((j=strlen(a)-strlen(b))==0){ if(strcmp(a,b)>0) t=1;if(strcmp(a,b)<0) t=-1;if(strcmp(a,b)==0) t=0;}return t; }流程图:Data_Show:首先调用The_Size函数再利用冒泡法对通讯录的信息根据编号进行排列.然后再对信息进行输出,输出完一条信息后按空格停止打印,按其他任意键继续打印下一条.然后输出通讯录中信息的条数,最后提示是否回到主菜单源代码:void Data_Show() /*数据输出函数*/{ int j,k;char m;struct friend t;printf("********************************************************************\n");printf(" No. Name Sex Phone Address Zip_Code \n");printf("********************************************************************\n");for(j=0;j<i-1;j++) /*对数据进行排序*/{ for(k=0;k<i-1-j;k++){ if(The_Size(friends[k].num,friends[k+1].num)==1){ t=friends[k];friends[k]=friends[k+1];friends[k+1]=t;}}}for(j=0;j<i;j++) /*数据输出*/{ printf("%4s %10s %4s %11s %20s %10s\n",friends[j].num,friends[j].name,frien ds[j].sex,friends[j].phone,friends[j].address,friends[j].post_num);m=getch();if(m==' ')break;}printf("\n\n There are %d data in the book .\n\n",i);} 流程图:main:调用Menu_Selec函数打印出主菜单.利用switch实现对菜单功能的选择.利用do-while来实现功能选择是输入不正确的纠错.源代码:void main(){char choose,yes_no;Data_load();do{Menu_Select();choose=getch();switch(choose){case'1': Data_Input(); break; /*输入*/case'2': Data_Show(); break; /*显示*/case'3': Data_Search(); break; /*查找*/case'4': Data_Alter(); break; /*修改*/case'5': Data_Insert(); break; /*插入*/case'6': Data_Delete(); break; /*删除*/case'7': Data_Save(); break; /*保存*/case'0': Exit(); break; /*退出*/default : printf(" Error!\n");}if(choose=='0')break;printf(" Would you like to be continue? (Y/N)\n");do{yes_no=getch();}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');if(yes_no=='N'||yes_no=='n'){Exit();break;}}while(yes_no!='Y'||yes_no!='y');流程图:七、程序调试1.启动程序2.输入数据3.显示数据4.查找数据5.修改数据6.插入数据7.删除数据8.保存数据9.退出八、实验心得C语言是国内外广泛使用的计算机语言,学会、学好、使用C语言进行程序设计是时代的要求,也是计算机工作者的一项基本功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
太原学院计算机工程系课程设计报告课程名称:数据结构课程设计姓名:苏建花专业班级:计算机工程系网络三班指导教师:翟婷婷2015年12 月30日计算机工程系课程设计报告课程名称:C语言课程设计课程设计题目:通讯录管理系统班级:网络14-3班姓名:苏建花学号:目录(参考)1.设计目的与要求 (X)1.1题目与设计要求 (X)1.2本程序涉及的知识点 (X)2.功能设计 (X)2.1总体设计 (X)2.2详细设计 (X)3.程序实现 (X)3.1程序实现时应考虑的问题 (X)3.2 XX模块核心代码 (X)4.测试分析 (X)4.1 测试结果及分析 (X)4.总结 (X)参考文献 (X)1、设计目的与要求这次课程设计的目的在于:1.熟练的掌握C语言课程中所学的理论知识,并对其进行应用;2.通过综合C语言的基本知识来解决实际问题;3.加强分析和解决问题的能力;4.提高实践动手能力,将知识化为实际成果1.1 题目与设计要求(1)题目:通讯录(2)设计要求a、建立通讯录信息,信息至少包含姓、名、电话号码、住址、分类(如同事、朋友、同学、家人等)等。
b、该系统提供添加、删除、修改和查找功能,其中按姓名方式删除、修改,按姓名、姓氏方式查找。
c、将通讯录保存在文件中。
d、能够输出通讯录中的信息。
1.2 本程序设计的知识点(1)采用结构体数组。
struct Person{char a[16];char s[16];char d[16];char f[24];struct Person *next;}stu;(2)运用函数之间的调用主函数可以调用子函数,子函数之间可以相互调用,子函数不能调用主函数,主函数可以多次调用一个子函数,也可以一次调用多个子函数。
(3)利用指针变量struct Person *head;struct Person *p1,*p22 、功能设计添加:添加通讯录记录修改:修改通讯录记录删除:删除通讯录记录查找:查询通讯录记录显示:显示通讯录记录统计:统计通讯录数目2.1需求分析信息记录要存放到文件中去,因而要实现文件的输入输出操作;要实现数据的插入、删除、修改和显示功能,因而要实现插入、删除、修改和显示操作;要实现按人名或姓氏进行查询的功能,因而要提供查找操作;另外还应该提供键盘式选择菜单以实现功能选择。
2.2 总体设计整个系统可设计分为数据插入模块、数据修改模块、数据删除模块、数据显示模块、数据查询模块和数据统计模块2、32.3.12.3.22.3.22.3.42.3.5删除通讯录通过数组中该位置之后的数据存放位置向前移一位来实现删除功能,其流程图如下:2.3.6查找通讯录通过数组位置查找相关信息实现查找功能,其流程图如下:2.3.7(假设w=1)流程图如下:2.3.83、程序实现3、11234.5. 6.7功能调试; 8.完成系统总结报告以及系统使用说明书。
注:各函数之间的调用关系,如下图所示: 退出函数流程图3、2源代码及说明(见附加)4、 测试分析4.1 测试结果及分析(以下列操作为例)进入系统后,系统会出现如下图:显示输入账号和密码:输入账号和密码后会进入主菜单页码:在主菜单中输入1后,选择要操作的文件,选择同学,输入要添加的个数,输入姓 名 电话号码 地址,结果如下图:在主菜单中输入2后,输入要修改人的姓名。
系统找到后会提示输入新的姓 名电话号码 地址,结果如下图:在主菜单中输入3后,选择要操作的文件,选择查找的方式,。
结果如下图在主菜单中输入4后,输入要操作的文件,然后输入要删除的人的姓 名,结果如下图:在主菜单中输入5后,选择要操作的文件,会显示出此文件中所有的信息,结果如下图: main 函数 Tianjia() tongji() chazhao() shanchu() xianshi()xiugai() Menu() 调用在主菜单中输入6后,输入要操作的文件,系统会统计出此文件中的总数,结果如下图在主菜单中输入7后,“会显示谢谢您的使用,请按任意键退出”。
在运行的过程中曾出现,每执行完一个操作返回主菜单後就无法再继续执行接下来的操作,后来我从网上搜了一下,当执行system("cls");时会清除屏幕,然后我就在多次的修改中将程序中多余的system("cls");语句删除后,程序终于可以正常运行。
而且编译时会出现如下信息,但好在不影响程序的正常运行。
5、总结这个课题是设计一个通讯录系统,该通讯系统能够较好的管理好我们的通讯录记录,具有添加、修改、查找、删除、显示和统计的功能,但是该系统依旧有漏洞,此程序必须按照系统提示的操作来执行,而且还有部分的功能缺陷,例如用户无法自行修改用户名和密码,必须使用系统分配的数据登陆系统。
功能也不是很齐全,没有排序功能,没有加密功能,还需要进一步的更新,才能达到更好地效果。
从刚开始的不只如何下手到最后看到自己的程序按自己的想法运行,心里时不时的有一种喜悦我在编写过程中,逐步的了解了程序模块化设计的思想含义。
在整个程序设计的过程中语法的错误还是比较容易检查的,但是对于那些逻辑思维的问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。
此外编程是一项高精度需求的工作,所以我们要有规范化,标准化的代码编写习惯。
良好的编写习惯,不但有助于代码的纠错,也有助于各功能负责人员之间的协同合作。
我们还要有模块化思维能力,模块化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大的避免重复性的工作。
另外我们要重视程序的算法,在程序中,算法是灵魂,我们要努力学习各种先进的算法,提高自己的编程能力。
而在这个过程中,我更深的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,同时学会了一些调试一个较长程序的基本方法,提高了书写程序设计开发文档的能力(书写课程设计报告)。
参考文献1、谭浩强着.C程序设计(第四版).北京:清华大学出版社,20102、谭浩强着.C程序设计(第四版)学习辅导.北京:清华大学出版社,20103、 3.C编写组编.常用C语言用法速查手册.北京:龙门书局,19954、[2]刘振安.C语言程序设计[M].机械工业出版社,2007附加:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<windows.h>#define LEN sizeof(struct Person)void tianjia(); //对调用的函数进行声明void tongji();void shanchu();void chazhao();void xianshi();void xiugai();FILE *fp;struct Person //声明一个结构体类型struct Person{char a[16];char s[16];char d[16];char f[24];struct Person *next;}stu;////////////////////////////////////////////主菜单void menu(){int i=0;printf("********************************************************************* **********\n");printf("* \t\t1添加通讯录*\n");printf("* \t\t2修改通讯录*\n");printf("* \t\t3查找通讯录*\n");printf("* \t\t4删除通讯录*\n");printf("* \t\t5显示通讯录*\n");printf("* \t\t6统计通讯录*\n");printf("* \t\t7退出通讯录*\n");printf("********************************************************************* **********\n");printf("\t\t\t 请输入操作1-7,以Enter结束\n\t\t\t\t");while(i==0){scanf("%d",&i);switch(i) //用switch函数实现多分支选择结构{case 1:tianjia();break;case 2:xiugai();break;case 3:chazhao();break;case 4:shanchu();break;case 5:xianshi();break;case 6:tongji();break;case 7:printf("\t\t\t谢谢您的使用,请按任意键退出....\n");getchar();break;default:printf("\t\t 您的输入有误,请重新输入,并以Enter结束\n");menu();}}}///////////////////////////////////////////////////////////////////////////// ////1添加void tianjia(){int w=0;int i=0,n;struct Person *head;//定义指针变量struct Person *p1,*p2;printf("\t\t请输入要操作的通讯录文件 1 同学 2 家人 3 同事 4 朋友:\n\t\t\t");while(w==0){scanf("%d",&w);if(w==1) //建立同学文件{if((fp=fopen("tongxue.txt","a"))==NULL){ fp=fopen("tongxue.txt","w+");printf("\t\t\t同学文件已建立");}else printf("\t\t\t\t同学文件已存在\n");}else if(w==2) //建立家人文件{ if((fp=fopen("jiaren.txt","a"))==NULL){ fp=fopen("jiaren.txt","w+");printf("\t\t\t家人文件已建立");}else printf("\t\t\t\t家人文件已存在\n");}else if(w==3) //建立同事文件{if((fp=fopen("tongshi.txt","a"))==NULL){ fp=fopen("tongshi.txt","w+");printf("\t\t\t同事文件已建立");}else printf("\t\t\t\t同事文件已存在\n");}else if(w==4) //建立朋友文件{if((fp=fopen("pengyou.txt","a"))==NULL){ fp=fopen("pengyou.txt","w+");printf("\t\t\t朋友文件已建立");}else printf("\t\t\t\t朋友文件已存在\n");}else {printf("\t\t\t您的输入有误,请重新输入");w=0;}}printf("\t\t\t\t请输入添加的个数\n\t\t\t");scanf("%d",&n);p2=malloc(LEN);while(i<n) //运用while函数循环执行函数体{p1=malloc(LEN);if(i==0) head=p1;else p2->next=p1;printf("\t\t\t请输入以下信息,并以Enter结束\n");printf("\t\t\t姓名电话号码地址\n\t\t\t");scanf("%s%s%s%s",p1->a,p1->s,p1->d,p1->f);p2=p1;i++;}p2->next=NULL;while(head!=NULL){fprintf(fp,"%-16s%-16s%-16s%-24s\n",head->a,head->s,head->d,head->f); head=head->next;}fclose(fp);menu();}///////////////////////////////////////////////////////////////////////////// /2修改void xiugai(){ int i=0,w=0;long offset;char a[16],s[16],d[16],f[24];struct Person *p;printf("\t\t请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t");while(w==0){scanf("%d",&w);if(w==1){if((fp=fopen("tongxue.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("tongxue.txt","w+");printf("\t\t同学文件已建立\n");}else printf("\t\t\t同学文件已存在\n")}else if(w==2){if((fp=fopen("jiaren.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("jiaren.txt","w+");printf("\t\t家人文件已建立\n");}else printf("\t\t家人文件已存在\n");}else if(w==3){if((fp=fopen("tongshi.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("tongshi.txt","w+");printf("\t\t同事文件已建立\n");}else printf("\t\t\t同事文件已存在\n");}else if(w==4){fp=fopen("pengyou.txt","r+");if((fp=fopen("pengyou.txt","r+"))==NULL){ fp=fopen("pengyou.txt","w+");printf("\t\t朋友文件已建立\n");}else printf("朋友文件已存在");}else{printf("\t\t\t输入错误,请重新输入\n");w=0;}}printf("\t\t请输入要修改人的姓名:\n\t\t\t");scanf("%s%s",a,s);p=malloc(LEN);while(!feof(fp)){ offset=ftell(fp);fscanf(fp,"%s%s%s%s\n",p->a,p->s,p->d,p->f);if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)){ printf("\t\t\t已找到记录:\n%-16s%-16s%-16s%-16s\n",p->a,p->s,p->d,p->f);i=1;break;}}if(i==1){ printf("\t\t\t请输入新的姓名号码地址:\n\t\t\t");scanf("%s%s%s%s",a,s,d,f);fseek(fp,offset,0);fprintf(fp,"%-16s%-16s%-16s%-24s\n",a,s,d,f);printf("\t\t\t恭喜,已修改成功!\n");}elseprintf("\t\t\t无此相关信息\n")fclose(fp);menu();}///////////////////////////////////////////////////////////////////////////// ///3查找void chazhao(){char a[16],s[16],d[16 ],f[24],m[16],n[16];int w=0,e=0;printf("\t\t请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t");while(w==0){scanf("%d",&w);if(w==1){if((fp=fopen("tongxue.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("tongxue.txt","w+");printf("\t\t\t同学文件已建立\n");}else printf("\t\t\t同学文件已存在\n");}else if(w==2){if((fp=fopen("jiaren.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("jiaren.txt","w+");printf("\t\t\t家人文件已建立\n");}else printf("\t\t\t家人文件已存在\n");}else if(w==3){if((fp=fopen("tongshi.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("tongshi.txt","w+");printf("\t\t\t同事文件已建立\n");}else printf("\t\t\t同事文件已存在\n");}else if(w==4){ fp=fopen("pengyou.txt","r+");if((fp=fopen("pengyou.txt","r+"))==NULL){ printf("\t\t\t请先添加数据\n");menu(); fp=fopen("pengyou.txt","w+");printf("\t\t\t朋友文件已建立\n");}else printf("\t\t\t朋友文件已存在\n");}else {printf("\t\t\t输入错误,请重新输入\n");w=0;}}printf("\t\t请输入查找方式 1:按姓氏查找 2:按姓名查找\n\t\t\t"); while(e==0){scanf("%d",&e);if(e==1) //按姓氏查找{ printf("\t\t\t请输入姓氏:\n");scanf("%s",m);printf("\t\t\t查找结果如下:\n姓\t\t名\t\t电话\t\t地址\n\n");while(feof(fp)==0){fscanf(fp,"%s%s%s%s\n",a,s,d,f);if(strcmp(a,m)==0)printf("%-16s%-16s%-16s%-24s\n",a,s,d,f;}}else if(e==2) //按姓名查找{printf("\t\t\t请输入姓\t名:\n");scanf("%s%s",m,n);printf("\t\t\t查找结果如下:\n姓\t\t名\t\t电话\t\t地址\n\n");while(feof(fp)==0){fscanf(fp,"%s%s%s%s\n",a,s,d,f);if(strcmp(a,m)==0&&strcmp(s,n)==0)printf("%-16s%-16s%-16s%-24s\n",a,s,d,f);}}else {printf("你想干嘛,重新输入吧!1按姓氏查找 2按姓名查找");e=0;}}fclose(fp);menu();}////////////////////////////////////////////////////////////////////////////4删除void shanchu(){int i=0,w=0;long offset;char a[16],s[16],d[16],f[24];struct Person *p;printf("\t\t请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t");while(w==0){scanf("%d",&w);if(w==1){if((fp=fopen("tongxue.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("tongxue.txt","w+");printf("\t\t\t同学文件已建立\n");}else printf("\t\t\t同学文件已存在\n");}else if(w==2){if((fp=fopen("jiaren.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("jiaren.txt","w+");printf("\t\t\t家人文件已建立\n");}else printf("\t\t\t家人文件已存在\n");}else if(w==3){if((fp=fopen("tongshi.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("tongshi.txt","w+");printf("\t\t\t同事文件已建立\n");}else printf("\t\t\t同事文件已存在\n");}else if(w==4){fp=fopen("pengyou.txt","r+");if((fp=fopen("pengyou.txt","r+"))==NULL){ printf("\t\t\t请添加数据\n");menu();fp=fopen("pengyou.txt","w+");printf("\t\t\t朋友文件已建立\n");}else printf("\t\t\t朋友文件已存在\n");}else{ printf("\t\t\t您的输入有误,请重新输入");w=0;}}printf("\t\t\t请输入要修改人的姓名:\n\t\t\t");scanf("%s%s",a,s);p=malloc(LEN);while(!feof(fp)){ offset=ftell(fp);fscanf(fp,"%s%s%s%s\n",p->a,p->s,p->d,p->f);if((strcmp(a,p->a)==0)&&(strcmp(s,p->s)==0)){ printf("\t\t\t已找到记录:\n%-16s%-16s%-16s%-16s\n",p->a,p->s,p->d,p->f);i=1;break;}}if(i==1) //找到信息,确认删除{fseek(fp,offset,0);fprintf(fp,"%-16s%-16s%-16s%-24s\n","","","","");printf("\t\t\t恭喜,已删除成功!\n");}else printf("\t\t\t好像没有此记录\n");fclose(fp);menu();}////////////////////////////////////////////////////////////////////////////5显示void xianshi(){char a[20],s[20],d[20],f[20]; //足够大int w=0;printf("请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t");while(w==0){scanf("%d",&w);if(w==1){if((fp=fopen("tongxue.txt","r+"))==NULL){ fp=fopen("tongxue.txt","w+");printf("\t\t请先添加信息\n");printf("\t\t\t请先添加数据\n");menu();}else printf("\t\t\t同学文件已存在\n");}else if(w==2){if((fp=fopen("jiaren.txt","r"))==NULL){ fp=fopen("jiaren.txt","w+");printf("\t\t\t请添加数据\n");menu();}else printf("\t\t\t家人文件已存在\n");}else if(w==3){if((fp=fopen("tongshi.txt","r+"))==NULL){ fp=fopen("tongshi.txt","w+");printf("\t\t\t请添加数据\n");menu();}else printf("\t\t\t同事文件已存在\n");}else if(w==4){fp=fopen("pengyou.txt","r+");if((fp=fopen("pengyou.txt","r+"))==NULL){ fp=fopen("pengyou.txt","w+");printf("\t\t\t请添加数据\n");menu();}else printf("\t\t\t朋友文件已存在\n");}else {printf("\t\t\t您的输入有误,请重新输入");w=0;}}while(feof(fp)==0){fscanf(fp,"%s%s%s%s\n",a,s,d,f);printf("%-16s%-16s%-16s%-24s\n",a,s,d,f);}fclose(fp);menu();//返回主菜单继续接下来的操作}///////////////////////////////////////////////////////////////////////////// //6统计void tongji(){ int w=0,i=0;char a[20],s[20],d[20],f[20];printf("请输入要操作的通讯录文件 1同学 2家人 3同事 4朋友:\n\t\t\t");while(w==0){scanf("%d",&w);if(w==1){if((fp=fopen("tongxue.txt","r+"))==NULL){ printf("\t\t\t总数是0个,请先添加数据\n");menu();fp=fopen("tongxue.txt","w+");printf("\t\t同学文件已建立\n");}else printf("\t\t\t同学文件已存在\n");}else if(w==2){if((fp=fopen("jiaren.txt","r+"))==NULL){ printf("\t\t\t总数是0个,请先添加数据\n");menu();fp=fopen("jiaren.txt","w+");printf("\t\t家人文件已建立\n");}else printf("\t\t\t家人文件已存在\n");}else if(w==3){if((fp=fopen("tongshi.txt","r+"))==NULL){ printf("\t\t\t总数是0个,请先添加数据\n");menu();fp=fopen("tongshi.txt","w+");printf("\t\同事文件已建立\n");}else printf("\t\t\t同事文件已存在\n");}else if(w==4){ fp=fopen("pengyou.txt","r+");if((fp=fopen("pengyou.txt","r+"))==NULL){ printf("\t\t\t总数是0个,请先添加数据\n");menu();fp=fopen("pengyou.txt","w+");printf(",朋友文件已建立");}else printf("朋友文件已存在");}else {printf("\t\t\t输入错误,请重新输入");w=0;} }while(feof(fp)==0){fscanf(fp,"%s%s%d%s",a,s,&d,f);i++;}printf("\n\t\t\t总数是%d个\n",--i);fclose(fp);menu();}///////////////////////////////////////////////////////////////////////////// /主函数#include<stdio.h>int main() //定义主函数{ //主函数体开始char a[20],b[20],c[20]="admin",d[20]="asd1244"; //设置密码printf("\n\n\n\n\n\n\n\n"); //欢迎界面system("COLOR 27"); //定义页面颜色printf("\t*****Welcome to use the address book management system*****\n");printf("\n");printf("\t*****************欢迎使用通讯录管理系统********************\n");printf("\n");printf("\n\n\n\t\t\t\t经常联系,问问彼此,最近你过得好吗?\n");printf("\n");printf("\t\t\t\t愿亲情、爱情、友情永不凋零!\n");printf("\n\n\n\n\n\n\\n\t\t\t\t litter Copyright litter.All rights reserved\n\n\n");Sleep(3000);("cls");printf("\n\n\n\\n\n\n\n\n\n\n\n\n\t\t(Please enter your user name)请输入用户名:\n\n\n\n\n\n\t\t\t\t");scanf("%s",a);printf("\n\n\n\n\t(Please input your password)请输入密码:\n\t\t\t\t");scanf("%s",b);if((strcmp(a,c)==0)&&(strcmp(b,d)==0)) //为什么改为a[20]就不行呢{printf("\n\n\n(The user name and password are correct, welcome to use)用户名和密码正确,欢迎使用\n");Sleep(1000);system("cls");}else{printf("(Password mistake, please press any key to exit)密码错误,请按任意键退出\n");exit(0);}system("COLOR 37");menu();}。