您的当前位置:首页正文

基于c语言的通讯录管理系统设计与实现

2020-08-26 来源:爱go旅游网
《高级语言程序设计》 ——基于c语言的通讯录管理系统的

姓 名: 学 号: 指导老师:系 别:专业班级:设计与实现

王炳旭 1216F0610119 孟芸

信息工程系 计科F1201班 《高级语言程序设计》课程设计任务书

设计题目 设计内容及要求: 1.设计内容 输入功能:记录信息并保存文件中。 显示功能:输出文件中所有信息。 查找功能:查询所需通讯信息。 删除功能:删除无用信息。 2.设计要求  建立通讯录信息,信息包含姓名、性别、班级、电话,保存在文件中;  能够输出文件中所有通讯录信息。  能够提供按姓名、班级或性别查询信息;  能够提供按姓名删除通讯录信息的功能; 时间安排: 九月:选择自己所要设计的程序,查阅书籍、网上查询,收集所需资料解决疑惑。 十月:开始编写程序,不断分析。 十一月:代码实现,程序能够运行。 十二月:写报告,完成课程设计。 基于c语言的通讯录管理系统的设计与实现 设计环境: VC++6.0 实现目标: 能够提供查询和删除通讯录信息的功能; 能够提供按姓名或班级、性别查询; 能将通讯录保存在文件中; 能够输出通讯录信息。 《高级语言程序设计》课程设计教师评阅成绩表

系名称:信息工程系 学 号 指导教师 1216F0610姓名 119 孟芸 王炳旭 专业 计算机科学与技术 教师评阅 平均得分 设计题目 基于c语言的通讯录管理系统的设计与实现 指导教 师评语 指导教师对课程设计评分 指导教师评语及得分 评分项 目分值 调研制定题查目、撰写整任务书15 资10 查究阅理料学习态度与规范要求10 数据处论文(设计、创作)理、文合计 质量和创新意识 字表达100 55 10 得分 指导教 师签名 此表由教师填写

《高级语言程序设计》课程设计承诺书

设计题目 基于c语言的通讯录管理系统的设计与实现 姓 名 学 号 指导教师 孟芸 王炳旭 1216F0610119 所学专业 计算机科学与技术 完成时间 2013年 11 月 18 日 姓名职称 承诺内容: 1.本设计是学生 在指导教师 的指导下独立完成的,没有抄袭、剽窃他人成果,没有请人代做,若在论文(设计、创作)的各种检查、评比中被发现有以上行为,愿按学校有关规定接受处理,并承担相应的法律责任。 备注: 学生签名: 指导教师签名: 年 月 日 年 月 日 目录

1.引言 -------------------------------------------------------- 0

1.1设计内容 ---------------------------------------------- 1 1.2设计任务及具体要求 ------------------------------------ 1 1.3系统环境 ---------------------------------------------- 2 2.总体设计 ---------------------------------------------------- 2

2.1系统功能简介 ------------------------------------------ 2 2.2总体程序框图 ------------------------------------------ 2 2.3各个模块之间的主要关系 -------------------------------- 2 3.详细设计 ---------------------------------------------------- 3

3.1各个模块的程序流程图及运行界面 ------------------------ 3 3.2关键代码分析说明 -------------------------------------- 4 3.3程序使用说明 ------------------------------------------ 4 4.总结 -------------------------------------------------------- 5 致谢 ----------------------------------------- 错误!未定义书签。 参考文献 ------------------------------------------------------ 5 附录 ---------------------------------------------------------- 6

1.引言

当今时代,计算机已经成为人们生活中不可或缺的一部分,它打破了地域时间限制,改变了人们的工作和生活方式。通讯录系统能

方便用户的需求,满足用户迅速、准确的查找修改或者删除联系人信息,把各个联系人信息以文档保存。本文介绍了简易通讯录管理系统在VC++6.0环境下的实现过程:系统的分析,功能模块的设计,系统的流程图及运行界面。此系统的主要管理的信息由:联系人的姓名、班级、性别、电话号码,加深对c++语言程序设计的理解,提高算法设计的能力,锻炼编程的能力。用c++语言编程一个通讯录管理系统软件,要求能实现通讯录管理系统中的增加信息,删除信息,显示通讯里的所有信息,按名字查询信息,保存通讯录,退出系统。

1.1设计内容

通讯录管理系统设计内容:

输入功能:记录信息并保存文件中。 显示功能:输出文件中所有信息。 查找功能:查询所需通讯信息。 删除功能:删除无用信息。

1.2设计任务及具体要求

1.设计任务:自学C语言中相关知识,设计出通讯录管理系统。 2.设计要求:

 建立通讯录信息,信息包含姓名、性别、班级、电话,保存在文件中;  能够输出文件中所有通讯录信息。  能够提供按姓名、班级或性别查询信息;  能够提供按姓名删除通讯录信息的功能; 时间安排:

九月:选择自己所要设计的程序,查阅书籍、网上查询,收集所需资料解决疑惑。

十月:开始编写程序,不断分析。

十一月:代码实现,程序能够运行。 十二月:写报告,完成课程设计。

1.3系统环境

VC++6.0

2.总体设计

2.1系统功能简介

该通讯录管理系统分为以下四个功能:

1.输入功能:可以添加通讯录记录,选择添加人数,依次输入姓名、班级、性别、电话号码后,提示信息保存成功,按任意键会返回主菜单。 2.显示功能:可以输出所有通讯录里的记录。

3.查找功能:可以选择姓名、班级、性别三种方式查询信息。所输入信息不存在时,提示该信息不存在,返回主菜单。

4.删除功能:在显示的所有通讯录信息里,输入要删除通讯录信息的姓名,即删除成功。

5.退出:结束运行,退出程序。

2.2总体程序框图

该通讯录系统共有四个功能模块。打开程序之后,先进入主菜单,根据需求选择功能,分别有输入、显示、查找、删除。输入功能可以添

加通讯录记录,选择添加人数,依次输入姓名、班级、性别、电话号码。显示功能可以输出所有通讯录里的记录。查找功能可以选择姓名、班级、性别三种方式查询信息。删除功能可以删除无用的信息。

图2-1 总流程图

2.3各个模块之间的主要关系

该系统用下面四个功能模块编写,每个模块执行不同的功能,体现了模块化设计的思想。下面四个模块都是利用C语言文件,向文件中追加数据、读取、查询数据和删除数据。

输入:用fopen()建立一个文本文件,然后用fwrite()向其中输入数据,再用fclose()函数关闭并保存文件。

显示:通过循环依次输出文件中的数据,即输出所有通讯录里的信息。

查找:为了满足用户的实际需求,设计了三种查询方式,可以用姓名、性别、班级三种方式查找通讯录记录。这里用到strcmp()函数,通过比较字符串是否相同来判别是否找到相关信息,找到后,就把文件中的数据赋给对应的变量,再把变量所带的值输出到屏幕上。

删除:输入你要删除的人的姓名后,系统会自动删除文件中的记录。

3.详细设计

3.1各个模块的程序流程图及运行界面

1.输入模块

在主菜单选择1,进入输入界面,按显示输入记录人数和信息,信息有姓名、班级、性别、电话号码,数据可以自动从内存保存到文件中。如图3.1-2。显示信息保存成功后,输入任意键返回主菜单。 图3-1 输入流程图

图3-2 输入运行界面 2.显示模块

用户进入显示功能,显示功能利用循环显示文件中所有信息,所有信息显示成功后,会提示所有信息显示成功,若文件中没有信息,显示信息不存在,输入任意键可以返回主菜单。如图3-3。 图3-3 显示流程图

图3.1-4 显示运行界面 3.查找模块

进入查找界面,选择要查找信息的方式,有姓名、班级、姓名。输入条件,用strcmp()函数通过比较字符串是否相同来判别是否找到相关信息,

找到则显示此所有信息,未找到显示“该信息不存在”。如下图

3-5。

输入任意键可以返回主菜单。

图3-5 查找流程图 根据班级查找信息:

图3-6 根据性别查找信息:

图3-7 根据姓名查找信息:

图3-8 4.删除模块

在主菜单选择4,进入删除功能,根据自动显示的文件中的所有信息,输入要删除信息的姓名,就可以在文件中永久删除此信息,若删除成功显示删除信息成功。

如下图3-9。

图3-9 删除流程图

图3-10 删除运行界面

3.2关键代码分析说明

1.结构体的创建:

结构体(structure)是一个或多个相同数据类型或不同数据类型的变量集合在一个名字下的用户自定义说明。为了增强程序的可读性,使程序更简洁,c程序员经常用typedef为结构体类型定义一个更简单、直观、有意义和可读性更好的别名。 typedef struct address {

char name[20];/* 姓名 */ char clas[20];/*班级 */ char sex[10];/* 性别 */

char tel[20]; /* 电话号码 */ }ADDRESS;/*结构体*/

ADDRESS adr[N],temp[N];

起初我创建结构体是typedef struct address{}ADDRESS adr[N];这是错误的,没有真正明白结构体的知识。通过我上网查询,除了上边的一种方法,还可以struct address{};typedef struct address ADDRESS;ADDRESS adr[N];typedef是把结构名重命,换成一个简单的。 2.文件 打开文件

if((fp=fopen(\"f:\\\\通讯录.txt\ {

printf(\"打开文件失败! 请按任意键返回主菜单!\\n\"); scanf(\"%s\ system(\"cls\"); main(); } 读取文件

while(!feof(fp)) {

fread(&temp[m],sizeof(ADDRESS),1,fp); m++; } 关闭文件

fclose(fp);

这是一个重要的知识点,也是我最弱的一点,我通过询问我的指导老师学会并掌握。我们要把信息从内存保存到文件中,再从文件中把信息读取到内存,只有在内存中才可以修改信息。 fp=fopen(\"f:\\\\通讯录.txt\文件名字和文件地点可以自己设置。a是添加的意思,不清除文件中本有的信息,w则是重写文件中的信息。

3.3程序使用说明

随着网络与信息技术的发展,人们的联系人越来越多,需要联系的人逐渐增多,需要记录的 信息也逐渐增多。以前是将这些信息手写到通讯录中,这很容易造成信息的丢失,而且查找起来

很不方便。

本系统主要实现同学信息的管理,包括同学信息的添加、查询和删除,及一些辅助功能。

4.总结

通讯录管理系统能够较好的管理我们的通讯录记录。

在编写过程中,我逐步了解到程序模块化设计的思想含义。模块化思维就是编程任何一个功能模块或者函数的时候,要多想一些,不要局限于完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大地避免重复性的工作。

另外,我们要重视程序中的算法,算法是程序的灵魂,我们要学习先进的算法,来提高自己的编程能力。

在整个程序的设计中,语法的错误还是比较容易检查出来,但是对于那些逻辑思维问题方面的缺陷不易查出,因此常常出现系统提示没有错误但是仍然不能够正常运行的境况,尽管有很多不足之处,但我在整个系统程序设计的过程中,我可以感受到自己对C语言有了一定的掌握,对整体的把握度也提高了很多。

通过这次课程设计,我对c语言有了更深的了解,增强了程序的编写能力,提高了专业知识,对程序的模块化观念也更加清晰。在程序的运作和调试过程中,出现了很多错误,通过请教指导老师和自己反复的复习课本知识以及参考课外书籍,不停地修改和调试,我终于完成了这个程序。

致谢

历时将近三个月的时间终于将通讯录课程设计完成,从课题的选择到最终完成,孟芸老师始终都给予了我细心的指导和不懈的支持。在编写程序的过程中遇到了无数的困难和障碍,都在老师和同学的帮助下解决了。另外,在校图书馆查找资料的时候,图书馆的老师也给我提供了很多方面的支持与帮助。也要感谢这篇报告所涉及到的各位学者,本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成此次课程设计。

尤其要强烈感谢我的指导老师——孟芸老师,她作为一名优秀的、经验丰富的教师,具有丰富的专业知识和实践经验,她对我进行了无私的指导和帮助,不厌其烦的帮助我进行程序的修改和改进,并对我提出严格要求,引导我不断开阔思路,使我增长了知识,锻炼了心态,培养了良好的习惯。

在此向帮助和指导我的孟芸老师表示最衷心的感谢!

参考文献

[1] 郭翠英.c语言课程设计案例精编.北京市三里河路6号.中国水利水电出版社

[2]苏小红,孙志刚.c语言大学实用教程学习指导(第三版).北京市海淀区万寿路173信箱.电子工业出版社

[3] 明日科技.c语言项目案例分析.北京清华大学学研大厦A座.清

华大学出版社

[4]苏小红,孙志刚.c语言大学使用教程(第三版).北京市海淀区万寿路173信箱.电子工业出版社

附录

源程序

1.头文件

#include \"stdio.h\" #include \"stdlib.h\" #include \"string.h\" #define N 100

int i,j;/* 定义全局变量 */ typedef struct address {

char name[20];/* 姓名 */ char clas[20];/*班级 */ char sex[10];/* 性别 */

char tel[20]; /* 电话号码 */ }ADDRESS;/*结构体*/

ADDRESS adr[N],temp[N]; /* 函数声明 */ int main();

void enter();/*输入模块*/ void search();/*查找模块*/ void del();/*删除模块*/

void display();/*显示模块*/ void xingming(); void banji(); void xingbie(); 2.主菜单

#include \"xu.h\" int main() {

int n;

system(\"cls\");

printf(\"\\n\\\\ 通讯录主菜单\\n\\n\\n\"); printf(\"\\n\\\\ 1.输入信息\\n\"); printf(\"\\n\\\\ 2.显示信息\\n\"); printf(\"\\n\\\\ 3.查找信息\\n\"); printf(\"\\n\\\\ 4.删除信息\\n\"); printf(\"\\n\\\\ 0.退出\\n\");

printf(\"\\n\\请选择执行编号:\"); scanf(\"%d\ switch(n) {

case 1:enter();break; case 2:display();break; case 3:search();break; case 4:del();break; case 0:exit(0); } }

3.输入界面

/*函数功能:输入信息

函数参数:字符变量q表示代数 函数返回值:无*/ #include \"xu.h\" void enter() {

char q; FILE *fp;

system(\"cls\");

printf(\"输入记录人数:\"); scanf(\"%d\

printf(\"\\n\\n输入记录信息\\n\");

printf(\"name\\clas\\sex\\tel\\n\\n\"); for(i=0;iprintf(\"----------------------------------------------------\\n\\n\");

scanf(\"%s %s %s %s\);

printf(\"----------------------------------------------------\\n\\n\"); }

fp=fopen(\"f:\\\\通讯录.txt\ for(i=0;ifwrite(&adr[i],sizeof(ADDRESS),1,fp); }

fclose(fp);

printf(\"信息保存成功!\\n\\n\"); printf(\"请输入任意键返回:\"); scanf(\"%s\ system(\"cls\");

main(); }

4.显示界面

/*函数功能:显示文件所有信息 函数参数:字符变量q表示代数 函数返回值:无*/ #include \"xu.h\" void display() {

FILE *fp; char q; int m=0;

system(\"cls\");

if((fp=fopen(\"f:\\\\通讯录.txt\ {

printf(\"打开文件失败! 请按任意键返回主菜单!\\n\"); scanf(\"%s\ system(\"cls\"); main(); }

while(!feof(fp)) {

fread(&temp[m],sizeof(ADDRESS),1,fp); m++; }

fclose(fp);

for(i=0;iprintf(\"%s %s %s %s\\n\\n\].tel);

printf(\"所有信息显示成功!\\n\\n\\n\");

printf(\"请输入任意键返回主菜单进行其他操作:\"); scanf(\"%s\ system(\"cls\"); main(); }

5.查找界面

/*函数功能:查找信息

函数参数:常量m表示次数,字符变量q表示代数 函数返回值:无*/ #include \"xu.h\" void search() {

char s[20]; char q;

FILE *fp;

int flag=0,m=0,z; system(\"cls\");

printf(\"\\\1.按姓名查找\\n\\n\\\2.按班级查找\\n\\n\\\3.按性别查找\\n\\n\");

printf(\"\\\请选择查找方式\\\"); scanf(\"%d\ switch(z) {

case 1:xingming();break; case 2:banji();break; case 3:xingbie();break; } }

void xingming() {

char s[20]; char q; FILE *fp;

int flag=0,m=0,z; system(\"cls\");

if((fp=fopen(\"f:\\\\通讯录.txt\ {

printf(\"打开文件失败! 请按任意键返回主菜单!\\n\"); scanf(\"%s\ system(\"cls\"); main(); }

while(!feof(fp)) {

fread(&temp[m],sizeof(ADDRESS),1,fp); m++; }

fclose(fp);

printf(\"请输入查找信息的姓名:\"); scanf(\"%s\ for(i=0;iif(strcmp(temp[i].name,s)==0) {

flag=1;

printf(\"name\\clas\\sex\\tel\\n\\n\");

printf(\"%s\\%s\\%s\\%s\\n\\n\\n\x,temp[i].tel);

} }

if(flag==0)

printf(\"该姓名不存在!\\n\\n\"); printf(\"请输入任意键返回:\"); scanf(\"%s\ main(); }

void banji() {

char s[20]; char q; FILE *fp;

int flag=0,m=0,z; system(\"cls\");

if((fp=fopen(\"f:\\\\通讯录.txt\ {

printf(\"打开文件失败! 请按任意键返回主菜单!\\n\"); scanf(\"%s\ system(\"cls\"); main(); }

while(!feof(fp)) {

fread(&temp[m],sizeof(ADDRESS),1,fp); m++; }

fclose(fp);

printf(\"请输入查找信息的班级:\"); scanf(\"%s\

for(i=0;iif(strcmp(temp[i].clas,s)==0) {

flag=1;

printf(\"name\\clas\\sex\\tel\\n\\n\");

printf(\"%s\\%s\\%s\\%s\\n\\n\\n\x,temp[i].tel); } }

if(flag==0)

printf(\"该信息不存在!\\n\\n\"); printf(\"请输入任意键返回:\"); scanf(\"%s\

main(); }

void xingbie() {

char s[20]; char q; FILE *fp;

int flag=0,m=0,z; system(\"cls\");

if((fp=fopen(\"f:\\\\通讯录.txt\ {

printf(\"打开文件失败! 请按任意键返回主菜单!\\n\"); scanf(\"%s\ system(\"cls\"); main(); }

while(!feof(fp)) {

fread(&temp[m],sizeof(ADDRESS),1,fp); m++; }

fclose(fp);

printf(\"请输入查找信息的性别:\"); scanf(\"%s\

for(i=0;iif(strcmp(temp[i].sex,s)==0)/*比较字符串是否相等*/ {

flag=1;

printf(\"name\\clas\\sex\\tel\\n\\n\");

printf(\"%s\\%s\\%s\\%s\\n\\n\\n\mp[i].sex,temp[i].tel); } }

if(flag==0)

printf(\"该信息不存在!\\n\\n\"); printf(\"请输入任意键返回:\"); scanf(\"%s\ main(); }

6.删除界面

/*函数功能:删除信息

函数参数:常量m表示次数,常量k表示循环,字符变量q表示代数 函数返回值:无*/

#include \"xu.h\" void del() {

int flag=0,k,m=0; char s[20]; char q; FILE *fp;

system(\"cls\");

if((fp=fopen(\"f:\\\\通讯录.txt\ {

printf(\"打开文件失败! 请按任意键返回主菜单!\\n\"); scanf(\"%s\ system(\"cls\"); main(); }

while(!feof(fp)) {

fread(&temp[m],sizeof(ADDRESS),1,fp); m++; }

fclose(fp);

for(i=0;iprintf(\"%s %s %s %s\\n\\n\].tel);

printf(\"请输入删除信息的姓名:\"); scanf(\"%s\

for(i=0;iif(strcmp(temp[i].name,s)==0)/*比较字符串是否相等*/ {

flag=1;

for(k=i;ktemp[k]=temp[k+1];

printf(\"删除信息成功\\n\\n\"); }

m--; }

fp=fopen(\"f:\\\\通讯录.txt\ for(i=0;ifwrite(&temp[i],sizeof(ADDRESS),1,fp); }

fclose(fp);

printf(\"请输入任意键返回:\");

scanf(\"%s\main();}

因篇幅问题不能全部显示,请点此查看更多更全内容