c语言程序设计简单的通讯录系统实验报告
- 格式:doc
- 大小:78.00 KB
- 文档页数:7
西安郵電學院高级语言课程设计报告书系部名称通信工程学院学生姓名张博专业名称电子信息科学与技术班级电科0901班学号04092018指导教师夏虹2010年11月22日至时间2010年12月03日实验题目个人通讯录管理系统一、实验目的设计一个个人通讯录管理系统,拥有对数据的各种操作功能,实现对通讯录的管理,从而巩固C语言程序设计二、实验内容个人通讯录管理系统需求分析个人通讯录管理系统总体设计个人通讯录管理系统详细设计个人通讯录管理系统模块设计个人通讯录管理系统系统集成个人通讯录管理系统测试运行三、需求分析对于一个通用的个人通讯录管理系统而言,用户首先要能够对通讯录中的数据进行录入,删除,更新和输出等操作,其次要求对通讯录中的数据进行查找操作。
根据上述分析,在后面给出该个人通讯录的主要实现功能。
⏹信息录入:即创建一个存储通讯录信息的数据结构,有用户从键盘上录入信息,或从数据表文件中导入到该数据结构中。
⏹信息更新:对数据结构中已有的信息进行修改,并将结果保存在数据结构中。
⏹信息删除:删除数据结构中无用的信息,并将解雇保存在无数据结构中。
⏹信息查询;针对用户输入的目标值,在数据结构中查找对应的记录,并将其输出到用户屏幕。
⏹信息导入:将某文件中的信息导入到创建的数据结构中,提高数据的输入效率。
⏹信息导出:将数据结构中的记录导出到文件中,已永久保存下来。
信息输出:将数据结构中的信息或指定的信息输出到用户屏幕中。
四、概要设计1.数据类型dnode *p,*rear,*q; /*定义指针结点*/const char USER[]={'w','a','l','d','e','n'},PASSWORD[]={'4','1','6','9','5','3'}; /*定义用户密码*/int OK=1,i; /*用作循环变量或返回值*/FILE *fp; /*定义文件指针*/ 2、数据结构说明/*data structure*/typedef struct txl{char name[20]; /*成员姓名,为通讯录管理的对象*/char sex[4]; /*性别,可用于快速类别查询,区别数据成员*/ char city[20]; /*所在城市,可用于快速类别查询,区别数据成*/ char province[20]; /*省别*/char qq[11]; /*QQ号,管理查询主信息*/char phone number[11]; /*对象电话号,管理查询主信息*/}dtxl; /*建立通讯录信息结构体*/typedef struct dlnode{dtxl data; /*定义数据域*/struct dlnode*prior; /*前驱指针*/struct dlnode*next; /*后继指针*/}dnode; /*建立双向链表结构体*/程序中定义的数据类型——结构体(各个成员的作用)3、模块功能说明信息录入功能模块:实现用户从键盘输入数据存储对应字段或该数据成员中,并检查输入的合法性。
实验报告实验名称:学生通信录管理系统实验项目性质:综合性、设计性所涉及课程:C语言课程设计计划学时:实验学时4一、实验目的综合考察学生本学期对C语言的掌握程度。
二、实验内容1.编写一个可以把学生信息写入文件的函数creact(),采用动态链表。
2.编写一个可以增加新成员的函数add1()。
3编写一个可以查询确定学生的函数search1()。
4编写一个可以删除确定学生的函数del1()。
5编写一个可以修改确定学生的函数modify1()。
6编写一个可以打开通信录的函数open1( )。
附录:search1函数调用searchnum和searchname函数,分别为按学号和按名字查询。
del函数调用delname和deltel函数,分别为按名字和按电话删除。
modify1函数调用modifynum和modifyname函数,分别为按学号和按名字找到修改。
open1函数调用sorttel和sortname函数,分别为按电话和按名字从小到大的顺序打开。
三、实验(设计)仪器设备和材料清单1.硬件:PC机2.软件:Turbo C 2.0/Turbo C++3.0四、实验要求设计一个《学生通讯录管理系统》,在动态链表程序的基础上,设计要求如下(必须使用结构体和动态链表等数据结构)1建立文件存储文件使用指定文件名或默认文件名;可以不保存输入记录,但需要确认是否保存输入记录如果已有文件,只能在其后追加;新增记录可以不存入原文件中,以可以用原来的文件覆盖内存的内容;可以将多个个文件记录合并到一个文件中;2文件的存取和显示可以单独存取文件;可以随时显示内存中记录的全部内容;可以直接存取默认文件或指定文件;3删除记录可以按“姓名”或“电话”方式删除记录并更新内存链表内容;能给出被删除的信息,输出没有找到的信息;如果已经是空表,上出时应给出信息并返回主菜单;如果没有要删除的信息,输出没有找到的信息;删除操作仅限于内存,只有执行记录时,才能覆盖原记录;4查询记录可以按“姓名”或“电话”或“宿舍”方式查询记录能给出查询记录的信息;如果查询的信息不存在,输出没有找到的信息;5 整体功能a可以随时检索、删除、或增加新记录,保存或取消新的记录 b使姓名可由16位字符和数字的混合编码组成c使电话号码可由18位字符和数字组成d将输出信息加上输出信息信息栏,例如姓名电话性别年龄生日宿舍李四 1234 男 21 7月1日东二333e使用菜单实现功能的正确的选择f 所有节点信息都是动态生成。
毕业论文(设计)论文(设计)题目:通讯录管理系统二级学院:计算机学院学科专业:信息管理专业学号:姓名:班级:试点本科三班指导教师:论文提交时间: 2011年3月教务处制2011年3 月13 日毕业论文(设计)内容介绍论文(设计)题目通讯录管理系统选题时间2010年12月完成时间2011年3月论文(设计)字数4685关键词通信录信息管理,管理信息系统,数据库论文(设计)题目的来源、理论和实践意义:课题来源:本课题是来自辅导老师的提议和日常所学内容的总结,使用 MICROSOFT公司的 VISUAL C++6.0开发工具,利用其提供的各种面向对象的开发工具,在短时间内未系统建立应用原形,并不断进行修正和改进。
理论依据:1、VISUAL C++的上机学习及实践。
2、、数据库原理的课程内容。
3、学校所开课程的学习以及领悟,理论及实践相结合。
实践意义:通过实践证实了通讯录管理系统的重要性,突显了通讯录管理系统是我们日常生活中不可缺少的一部分。
论文(设计)的主要内容及创新点:本文论述了通讯录系统的整个开发过程,包括系统分析、系统设计、系统实现等方面。
实现对通讯录信息的增、删、改、查等功能,以多文档界面形式实现。
通过对通讯录管理系统必要性和可行性的介绍阐述他的作用,并应用大量图例进行说明,使表达的内容更加清楚易于理解,整体更加简明。
附:论文(设计)本人签名:2011 年 3 月13 日通讯录管理系统 (4)摘要 (4)Abstract (5)引言 (6)一、设计系统的必要性和可行性 (7)1.1设计系统的必要性 (7)1.2设计系统的可行性 (7)1.1.1经济可行性 (7)1.1.2技术可行性 (7)二、系统总体设计 (8)2.1题目要求 (8)2.2需求分析 (8)2.3总体设计 (8)2.3.1系统总体功能单元: (8)2.3.2系统总体流程图(局部): (9)三、详细设计 (10)3.1通讯录信息输入模块 (10)3.2信息浏览及排序模块 (11)3.3通讯录查询模块 (12)3.4通讯录的更改 (14)3.5通讯录及文件操作 (16)四、系统功能的实现与运行 (18)4.1个人档案数据维护表单 (18)4.2通讯信息数据维护表单 (18)4.3个人信息数据查询表单 (19)4.4 个人通讯录报表 (20)4.5系统登录表单 (20)4.6设计系统主菜单 (21)4.7系统主界面表单 (22)4.8连编 (22)五、结论 (23)七、参考文献 (24)通讯录管理系统摘要通信录信息管理系统是用计算机管理电子通信录的一种计算机应用技术的创新,在计算机还未普及之前通信管理都是由联系人采用名片,笔录手工记帐的方式来操作的.现在一般的通信录管理都是采用计算机作为工具的实用的计算机通信录管理程序来帮助人们进行更有效的通信录信息管理。
太原学院计算机工程系课程设计报告课程名称:数据结构课程设计姓名:苏建花学号: 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语言知识,并培养学生的实践能力和解决问题的能力。
实验要求:设计一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验原理:通讯录程序的数据结构可以设计为一个结构体数组,每个元素表示一个联系人,结构体包含姓名、电话号码、地址等信息。
通过使用不同的函数实现不同的功能,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
实验步骤:1. 定义一个结构体类型,包含姓名、电话号码和地址等信息。
2. 声明并实现各个功能函数,如添加联系人函数addContact()、删除联系人函数deleteContact()、查找联系人函数searchContact()等。
3. 在主函数中使用循环菜单来实现用户的各种操作选择。
4. 将联系人信息保存到文件中,实现数据的持久化存储。
5. 编译并运行程序,验证程序的正确性和功能完整性。
实验结果:通过实验,成功设计并实现了一个通讯录程序,能够实现添加联系人、删除联系人、查找联系人、修改联系人信息等基本功能,并能够将联系人信息保存到文件中,实现数据的持久化存储。
实验总结:本实验通过设计一个通讯录程序,加深了对结构体、函数和文件操作等C语言知识的理解和掌握,同时也培养了解决问题的能力和实践能力。
通过实验,我进一步理解了结构体的定义和使用、函数的声明和调用、文件的打开和关闭等操作。
在实验过程中,我也遇到了一些问题,如如何优化查找联系人的算法、如何处理文件打开失败的情况等,通过思考和调试逐步解决了这些问题。
实验过程中的问题和解决方法不仅加深了对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语言进行程序设计是时代的要求,也是计算机工作者的一项基本功。
太原学院计算机工程系课程设计报告课程名称:数据结构课程设计姓名:苏建花学号: 20140903336专业班级:计算机工程系网络三班指导教师:翟婷婷2015年12 月30日计算机工程系课程设计报告课程名称:C语言课程设计课程设计题目:通讯录管理系统目录(参考)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语言的基本数据类型、运算符、控制结构。
–学习C语言函数的定义与调用。
–掌握结构体、文件操作等高级C语言特性。
2.技能目标:–能够运用C语言实现简单的数据结构,如链表、数组。
–培养学生使用C语言进行程序设计的能力,能够独立完成程序编写、调试与优化。
–学会使用C语言实现文件操作,包括文件的读取与写入。
3.情感态度价值观目标:–培养学生对计算机科学的兴趣,增强其自主学习的动力。
–通过项目实践,培养学生的团队协作能力和解决问题的能力。
–引导学生理解技术对生活的影响,培养其对技术发展的责任感。
二、教学内容教学内容选取C语言编程的核心知识点,结合通讯录管理系统的实例进行讲解。
具体内容包括:1.C语言基础:数据类型、变量、运算符、控制结构。
2.函数:函数定义、调用、参数传递、返回值。
3.数据结构:数组、链表、栈和队列。
4.文件操作:文件读写、文件指针。
5.通讯录管理系统实现:结构体定义、系统功能实现、项目管理。
三、教学方法结合C语言特点和通讯录管理系统实例,采用以下教学方法:1.讲授法:系统讲解C语言基础知识和通讯录管理系统的设计理念。
2.案例分析法:通过分析典型代码案例,让学生理解程序设计逻辑。
3.实验法:学生在实验室进行编程实践,巩固理论知识。
4.讨论法:分组讨论问题,培养学生的团队协作和沟通能力。
四、教学资源1.教材:《C程序设计语言》(K&R)、《C Primer Plus》。
2.参考书:《C语言编程思想》、《C语言实践》。
3.多媒体资料:教学PPT、在线编程教程、视频讲解。
4.实验设备:计算机、网络环境、编程环境(如Code::Blocks、VisualStudio)。
五、教学评估本课程的教学评估将综合考虑学生的平时表现、作业、考试等方面,以全面、客观、公正地评价学生的学习成果。
C语言通讯录课程设计报告一、设计题目设计一个简单的通讯录管理系统,要求实现以下功能:1. 添加联系人信息;2. 删除联系人信息;3. 修改联系人信息;4. 查找联系人信息;5. 显示所有联系人信息。
二、设计要求1. 使用C语言实现,不得使用任何图形界面库;2. 使用结构体来表示联系人信息,每个联系人包括姓名、电话、邮箱等基本信息;3. 使用文件存储联系人信息,每次程序运行时从文件中读取联系人信息,程序结束时将联系人信息写入文件。
三、设计实现1. 定义联系人信息结构体:```ctypedef struct {char name[20];char phone[20];char email[30];} Contact;```2. 定义文件操作函数:```cvoid save_contacts(Contact contacts[], int size) { FILE *fp = fopen("contacts.txt", "w");if (fp == NULL) {printf("Failed to open file.\n");return;}for (int i = 0; i < size; i++) {fprintf(fp, "%s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].email);}fclose(fp);}void load_contacts(Contact *contacts, int *size) {FILE *fp = fopen("contacts.txt", "r");if (fp == NULL) {*size = 0;return;}fscanf(fp, "%d", size);for (int i = 0; i < *size; i++) {fscanf(fp, "%s %s %s", contacts[i].name, contacts[i].phone, contacts[i].email);}fclose(fp);}```3. 实现通讯录管理功能:```cint main() {Contact contacts[100];int size = 0;char choice;do {printf("\n--- Main Menu ---\n");printf("1. Add contact\n");printf("2. Delete contact\n");printf("3. Modify contact\n");printf("4. Search contact\n");printf("5. Display all contacts\n");printf("6. Exit\n");printf("Please choose an option: ");scanf("%c", &choice);switch (choice) {case '1': // Add contactadd_contact(contacts, &size); break;case '2': // Delete contactdelete_contact(contacts, size); break;case '3': // Modify contactmodify_contact(contacts, size);break;case '4': // Search contactsearch_contact(contacts, size);break;case '5': // Display all contactsdisplay_contacts(contacts, size);break;case '6': // Exit programsave_contacts(contacts, size); // Save contacts before exitbreak;default: // Invalid option choice, display error message and return to main menuprintf("Invalid option choice.\n");break;}} while (choice != '6'); // Exit program when option 6 is chosen or when user types 'q' instead of a number choice.以上就是关于c语言通讯录课程设计报告的介绍,欢迎补充。
C语言程序设计实训报告课程名称 C语言程序设计实训课题名称通讯录管理专业软件工程班级 K软件151学号姓名指导教师2016年 1 月 1 日汽车工业学院科技学院C语言程序设计实训任务书课程名称 C语言程序设计实训课题通讯录管理专业班级软件工程学生学号指导老师审批一、设计容与设计要求1.设计容:设计课题:通讯录管理一、问题描述:该设计实现对通讯录得管理功能,具体包括从键盘输入通讯录的信息、从指定的文件中读入通讯录的信息、按查询通讯录的信息、按分类查询通讯录的信息、删除指定的通讯录的信息、将通讯录信息保存在指定的文件中等。
二、功能要求:1)能从键盘输入通讯录的信息(增加,输入时需要能检查该的通讯录的记录是否已经存在,如果存在,需要询问是否是覆盖还是增加,需要判断输入的类型是否存在)2)能从指定的文件中读入通讯录的信息3)能按查询通讯录的信息4)能按分类查询通讯录的信息5)能删除指定的通讯录的信息6)能将通讯录信息保存在指定的文件中7)所有数据符合实际应用要求2.设计要求:1)设计正确,方案合理。
2)界面友好,使用方便。
3)程序精炼,结构清晰。
4)上机演示。
3.设计报告要求:课程设计报告格式如下:1)正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体,行距为22。
2)正文的容:课题的主要功能、课题的功能模块的划分、主要功能的实现、程序调试、总结、附件(所有程序的源代码,要求对程序写出必要的注释)。
3)课程设计报告装订顺序:封面、任务书、目录、正文、评分、程序清单附件。
二、进度安排汽车工业学院科技学院2015年12月 20 日目录1 系统需求分析 (6)2 概要设计 (6)3 详细设计 (6)4 系统测试 (14)5 课程设计总结 (15)1 系统需求分析本系统首先设计出了主函数,然后根据去要实现的功能分别设计,添加、显示、删除、查找、修改功能的子函数。
在现实的函数设计过程中首先运用文件的读取等必要的知识通过把文件的容读取到存然后打印出来。
c语言程序设计——简单的通讯录系统(实验报告)
1 / 7
C
语言课程设计报告书
实验题目 通讯录管理系统
一、 实验目的
通过进行计算机实践,更加系统地理解和掌握C语言的基本概念、语言特
点和编程技巧。利用系统提供的标准函数和自定义函数进行程序设计,培养利用
C语言设计综合程序的能力。
二、 实验内容
在熟练掌握C语言的基本知识:数据类型(整形、实型、字符型、指针、数
组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);
程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即
函数的使用)等。进一步掌握各种函数的应用。
三、 需求分析
本学通讯录管理系统包含输入信息,显示信息,查询信息, 修改信息,追加
信息,删除信息,修改密码,七大功能.其中查询模块又分为按姓名查找,按号码
查找.
输入信息(Input)
显示信息(Output)
查询信息(Look)
修改信息(Change)
追加信息(Add)
删除信息(Delete)
修改密码(Key)
四. 概要设计
1. 系统分析
功能模块图:总目录以及下属的各个模块,这样可以使得程序的书写脉络清晰
流畅。
c语言程序设计——简单的通讯录系统(实验报告)
2 / 7
程序结构图
2、模块功能说明
输入信息模块: 调用input()录入用户的通讯信息。
输出信息模块: 调用output()建立循环,输出全部通讯录信息。
查询信息模块:调用look()函数按照姓名、号码等通讯信息进行查找
追加信息模块:调用Add()追加通讯录信息
修改信息模块:调用change()函数按照姓名、号码、地址等通讯信息进行选择
性的修改
删除信息模块: 调用delete()函数删除一条通讯录信息
修改密码模块:调用save_key()函数核对两次输入的新密码若相同保存新密码
通讯录管理系统
密码界面
主界面
输入信息
显示信息
查询信息
修改信息
追加信息
删除信息
修改密码
退出并保存
c语言程序设计——简单的通讯录系统(实验报告)
3 / 7
于key.txt。
保存模块:调用 save()函数对最终所保留的信息进行保存,保存于friend.txt。
五. 详细设计及运行结果
主程序流程图
开始
输入密码
输
入
信
息
主 选 界 面
显
示
信
息
修改信息 追加信息 删
除
信
息
修改密码 查询信息 退
出
并
保
结束
错误
正确
c语言程序设计——简单的通讯录系统(实验报告)
4 / 7
查询模块流程图
信息查询
功能选择
选择1 选择2 选择3 选择4 按姓名查询
按电话号码查询
按手机号码查询
返回主界面
否
否
否
否
否
是
是
是
是
结束
c语言程序设计——简单的通讯录系统(实验报告)
5 / 7
密码修改模块流程图
密码修改
是否修改
输入a
输入b
是否一致
密码为a
结束
c语言程序设计——简单的通讯录系统(实验报告)
6 / 7
六、调试情况,设计技巧及体会
个人总结
经两周的程序设计就要走向尾声了,这两周的实践让我获益匪浅,不但复习
了以前学习过的知识,还学会了很多新东西新内容,最重要的是提升了自己从历
小做起,把握全局的能力。如果说学习C语言的知识是“点”,那么这次程序设
计就是“点成线”甚至“线成面”的过程。虽然现在来看,我的知识掌握情况还
只是停留在浅尝辄止、只知皮毛的阶段,但是现在我已经有了继续提升的信心与
决心。
下面对自己近两周的学习实践做以总结。
然而,程序设计本身就是一项精密细致的工作,从第一步做起是必须的。在
细致复习了《C语言程序设计》的所学内容之后,我借鉴课后例题“超市商品管
理系统”的范例构建出了程序的骨架和结构,确定了大的方向,之后一个模块一
个模块设计,积少成多,最终完成设计。
作为一个初学者,我在编程过程中出现了很多问题,经过了很长时间的调试
才将最终程序完成,下面列举具体问题。
起初程序没法在下次运行时提取数据,而且输入数目也有限。经过改进,我
定义一个静态变量h加以限定长度并在程序结束时将h单独保存,这两个问题就
同时解决了。
另外程序运行过程中有些提示信息总是一闪而过,经查阅,在需要停滞语句
后加入sleep()函数使其得以保留一段时间,而希望在模块退出前保留页面可
以追加一句getch()。
虽然程序设计完成了,但是我仍然存在着问题,比如没能实现密码用*输入,
比如程序依然不够美观。今后,我会继续努力,实现自我的提升!
任何事情都没有一夜成功的,任何事情都需要步步为营,踏实苦干。本次程
序设计既是对我技能的提高,也是对我人生认识的升华。今后,我将更加努力,
c语言程序设计——简单的通讯录系统(实验报告)
7 / 7
更上一层楼!
参考文献:《C语言程序设计》(第二版) 王曙燕 科学出版社
七、源程序清单(略,详见电子版实验报告*在tubor C环境下运行)