1、计算机软件基础课程设计电话本电话簿管理系统课程设计报告- 编写人: xxx 同组成员:XXX(课程设计负责人)XXX 完成日期: 2011-12-14 辅导教师: XXX 批阅日期: 分数: 一、功能描述:本电话簿主要由数组实现,由如下八个模块组成:1、 输入模块:主要完成将通讯信息存入线性表的工作。2、 修改模块:主要完成修改电话簿中的信息的工作。3、 插入模块:主要完成插入新信息的工作。4、 删除模块:主要完成删除不需要的信息的工作。5、 查询模块:主要完成查找信息的工作。6、 输出模块:主要完成在屏幕上显示信息的工作。7、 保存模块:主要完成保存已经输入信息的工作。8、 文件读入模块:主
2、要完成从已保存的文档中读取信息的工作。9、 登录模块:主要用于实现电话簿系统密码登录的功能。结构示意图如下:二、总体设计:1、功能模块设计:(1)、主函数执行流程:分析:本电话簿管理系统总的执行流程如图1所示!判断键入数值时:选择1:执行输入函数,实现从键盘输入数据的功能;选择2:执行查找函数,实现在已输入的数据中查询特定信息的功能;选择3:执行修改函数,实现修改已输入数据中的某些信息的功能;选择4:执行输出函数,实现在屏幕上显示已输入的数据信息的功能;选择5:执行插入函数,实现在已输入数据基础上插入新的数据的功能;选择6:执行删除函数,实现删除某些已输入的数据的功能;选择7:执行存储函数,实
3、现把已输入数据保存在文档中的功能;选择8:执行读入函数,实现从已保存的文档中读入数据的功能;选择0:表示退出系统,实现系统的安全退出。(2)、输入模块流程:分析:本电话簿系统的信息输入功能由main()函数调用input输入函数完成,执行流程如图2!由do-while结构完成其循环,开始先比较数组中实际数据长度和系统允许的最大长度,判断数组中的空间是否已满,若满则退出输入函数到主菜单,方便用户删除;若未满则提示让用户输入信息,输入完一条信息后进行一次判断,让用户选择是否继续输入,是则继续执行输入函数,否则退出输入到主菜单。(3)、查找模块流程:分析:本电话簿系统的信息查询功能由main()函数
4、调用seachname、seachtel、seachqq、seachadd等四个函数,分别实现由姓名查询、由电话查询、由qq查询、由地址查询等查询功能。执行流程如图3!可通过不同信息部分查询,选择不同查询方式,则输入相应的要查数据,通过for循环逐条比较输入信息与数组中已存信息,若有相同的,则输出相应的那条信息,否则退出循环到选择操作,可选择继续查询或者退出查询到主菜单。(4)、修改模块流程:分析:本电话簿系统的信息修改功能由main()函数调用recompose修改函数完成,可分别修改姓名、电话、QQ、地址等。用户输入要查询的姓名,通过for循环逐条比较输入信息与数组中已存信息,若有相同的,
5、则提示并选择要修改信息的相应部分,直接输入新信息;若找不到相应信息或执行完上一次修改,则进入选择操作,可选继续修改操作或回到主菜单。(5)、输出模块: 本电话簿系统的信息输出功能由main()函数调用output输出函数完成。由for循环逐条将已输入的信息显示在屏幕上。流程:开始输出信息结束输出操作(6)、插入模块流程:分析:本电话簿系统的信息插入功能是由main()函数调用Insert插入函数完成执行的,流程如图5!用户输入要插入的新信息,输入要在哪个名字后插入信息,for循环逐条查询该名字是否存在,若在,则将其向后复制一位,并把新信息插入其原来位置;否则把新信息存放在最后位置。信息数加一,
6、完成插入操作,进入选择操作,可选继续插入操作或回到主菜单。(7)、删除模块流程:分析:本电话簿系统的信息删除功能是由main()函数调用desl删除函数完成的,流程如图6。用户输入要删除信息的名字,for循环查找该信息,若找到相同的,则把该条信息后的信息向前复制,覆盖掉原信息,完成删除。若没找到或已完成删除操作,则进入选择操作,可选继续删除或退出删除进入主界面菜单。(8)、存储模块流程:分析:本电话簿系统的信息保存功能是由main()函数调用WriteToFile信息保存函数实现的,简易流程如图7!程序试图创建一个tel.txt文档,之后打开该文档,若成功打开则说明文档创建成功,则for循环逐
7、条把数组中的信息存入到该文档中,信息存储成功;否则说明文档创建失败。不管是信息保存成功或是保存失败,结束保存操作,退回到主菜单。(9)、文件读取模块流程:分析:本电话簿系统的信息读取功能是由main()函数调用ReadFromFile函数实现的,简易流程如图8,。程序试图打开tel.txt文档,判断是否存在该文档,若存在,则把文档中的信息逐条输入到数组中,文件读取成功;若不存在,提示文件读取失败。不管文件读取成功或是读取失败,都结束文件读入操作,退回到主菜单。2、数据结构设计:(1)电话簿信息数据结构体:struct ADDRESS /定义数据结构char name20; /姓名 char t
8、el20; /电话 char qq11; /QQ号 char add20; /地址DHB10;(2)、2、函数功能描述:(1)、输入:input函数原型:void input(struct ADDRESS DHB)/输入函数 int c;do if(q=MAX)/比较实际信息数与允许加入的最大信息数,若两者相等,则说明空间已满 printf(n信息储存已满,需要删除其中的一些信息,才能执行输入操作!n); return; printf(输入机主的姓名:);/输入机主的姓名 scanf(%s,&DHBq.name); printf(输入机主的电话:);/输入机主的电话 scanf(%s,&DHB
9、q.tel); printf(输入机主的QQ:);/输入机主的qq scanf(%s,&DHBq.qq); printf(输入机主的地址:);/输入机主的地址 scanf(%s,&DHBq.add); q+; printf(想继续执行输入操作请按1(否则按其它数字):);/提示信息 scanf(%d,&c);while(1=c);参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(2)、查询:(a)、 seachname函数原型:void seachname(struct ADDRESS DHB)/按姓名查询 int i; char name20;/要查询的姓名
10、printf(输入要查询的姓名:);/提示信息 scanf(%s,name); for(i=0;iq-1) /如果iq-1超过了数组的长度 printf(没有找到要查询的信息!n); /显示没找到要查询的记录 else printf( 姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n,DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/显示出查询的结果 参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(b)、seachtel函数原型:void seachtel(struct ADDRESS DHB)/按电话查询
11、int i; char tel20;/要查询的姓名 printf(输入要查询的电话:);/提示信息 scanf(%s,tel); for(i=0;iq-1) /如果iq-1超过了数组的长度 printf(没有找到要查询的信息!n); /显示没找到要查询的记录 else printf( 姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n,DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/显示出查询的结果 参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(c)、seachqq函数原型:void seachqq(str
12、uct ADDRESS DHB)/按qq查询 int i; char qq20;/要查询的qq printf(输入要查询的qq:);/提示信息 scanf(%s,qq); for(i=0;iq-1) /如果in-1超过了数组的长度 printf(没有找到要查询的信息!n); /显示没找到要查询的记录 else printf( 姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n, DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/显示出查询的结果 参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(d)、seacha
13、dd函数原型:void seachadd(struct ADDRESS DHB)/按地址查询 int i; char add20;/要查询的地址 printf(输入要查询的地址:);/提示信息 scanf(%s,add); for(i=0;iq-1) /如果in-1超过了数组的长度 printf(没有找到要查询的信息!n); /显示没找到要查询的记录 else printf( 姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n, DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/显示出查询的结果 参数含义:ADDRESS:用户定义的数据结构DH
14、B:用户定义的数组,用于存放信息(3)、修改:recompose函数原型:void recompose(struct ADDRESS DHB)/修改函数 int c; do int i,a; char name20; /要修改记录的名字 printf(输入要修改机主的姓名:);/提示信息 scanf(%s,name); for(i=0;iq-1) /如果iq-1超过了数组的长度 printf(没有找到要修改的信息!n); /显示没找到要删除的记录 else printf(修改姓名请按1:n);/提示信息 printf(修改电话请按2:n);/提示信息 printf(修 改qq请 按3:n);/
15、提示信息 printf(修改地址请按4:n);/提示信息 printf(请选择(14):);/提示信息 scanf(%d,&a); if(a=1) printf(输入新的姓名:n);/输出机主的姓名 scanf(%s,&DHBi.name); if(a=2) printf(输入新的电话:n);/输出机主的电话 scanf(%s,&DHBi.tel); if(a=3) printf(输入新的qq:n);/输出机主的qq scanf(%s,&DHBi.qq); if(a=4) printf(输入新的地址:n);/输出机主的地址 scanf(%s,&DHBi.add); printf(如果想继续执行
16、修改操作请按1(否则按其它数字):);/提示信息 scanf(%d,&c); while(1=c);参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(4)、输出:output函数原型:void output(struct ADDRESS DHB)/输出函数 int i; for(i=0;iq;i+) printf( 姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n, DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/输出通讯录的信息 参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信
17、息(5)、插入:Insert函数原型:void Insert(struct ADDRESS DHB,char name)/插入函数,参数为结构体数组和记录数int c;do struct ADDRESS temp; /新插入记录信息 char name15;/要插入的名字 int i=1,j; printf(输入要插入的姓名:);/输入机主的姓名 scanf(%s,temp.name); printf(输入要插入的电话:);/输入机主的电话 scanf(%s,temp.tel); printf(输入要插入的QQ:);/输入机主的qq scanf(%s,temp.qq); printf(输入要插
18、入的地址:);/输入机主的地址 scanf(%s,temp.add); printf(请输入到那个名字之前:n); /提示信息 scanf(%s,name);/输入姓名 for(i=0;iq-1) /如果iq-1超过了数组的长度 printf(没有找到要插入的位置!n); /显示没找到要插入的位置 else printf(姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n,DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/显示出插入的位置 for(i=0;i=i;j-) strcpy(DHBj+1.name,DHBj.name); /当前记录的
19、机主姓名拷贝到后一条 strcpy(DHBj+1.tel,DHBj.tel); /当前记录的机主电话拷贝到后一条 strcpy(DHBj+1.qq,DHBj.qq); /当前记录的机主qq拷贝到后一条 strcpy(DHBj+1.add,DHBj.add); /当前记录的机主地址拷贝到后一条 strcpy(DHBj+1.name,temp.name);/当要插入的机主姓名拷贝到j+1位置 strcpy(DHBj+1.tel,temp.tel);/当要插入的机主电话拷贝到j+1位置 strcpy(DHBj+1.qq,temp.qq);/当要插入的机主qq拷贝到j+1位置 strcpy(DHBj+
20、1.add,temp.add);/当要插入的机主地址拷贝到j+1位置 q+;/记录数加 printf(插入成功);/提示信息 printf(n如果想继续执行添加操作请按1(否则按其它数字):);/提示信息 scanf(%d,&c); while(1=c);参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(6)、删除:desl函数原型:void desl(struct ADDRESS DHB,char name)/删除函数int c; do char name15; int i,j; printf(请输入删除的名字:n); /提示信息 scanf(%s,name)
21、;/输入姓名 for(i=0;iq-1) /如果iq-1超过了数组的长度 printf(没有找到要删除的信息!n); /显示没找到要删除的记录 else printf(姓名:%-15s 电话:%-12s QQ:%-12s 住址:%-15s n , DHBi.name,DHBi.tel,DHBi.qq,DHBi.add);/输出机主的信息 for(j=i+1;jq;j+) strcpy(DHBj-1.name,DHBj.name); /将后一条记录的姓名拷贝到前一条 strcpy(DHBj-1.tel,DHBj.tel); /将后一条记录的电话拷贝到前一条 strcpy(DHBj-1.qq,DH
22、Bj.qq); /将后一条记录的qq拷贝到前一条 strcpy(DHBj-1.add,DHBj.add); /将后一条记录的地址拷贝到前一条 q-; /记录数减1 printf(删除成功!n); printf(如果想继续执行删除操作请按1(否则按其它数字):); /提示信息 scanf(%d,&c); while(1=c);参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(7)、储存:WriteToFile函数原型:int ReadFromFile(struct ADDRESS DHB) /读入函数 FILE *fp; /指向文件fp int i; if (fp
23、=fopen(tel.txt,r)=NULL) /判断是否存在需要打开的文件 printf(电话簿不存在,需重新建立!n);/提示信息 return 0; for(i=0;!feof(fp);i+) fread(&DHBi,sizeof(struct ADDRESS ),1,fp); /把文件中的信息读入到数组中 fclose(fp); printf(信息读取成功!n);/提示信息 return i-1;参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息(8)、读取:ReadFromFile函数原型:void WriteToFile(struct ADDRESS
24、DHB) /信息保存函数 FILE *fp; /指向文件fp int i; if (fp=fopen(tel.txt,w+)=NULL) /判断是否存在文件若不存在则新建 printf(不能打开文件!n); /提示信息 return; for (i=0;iq;i+) if (fwrite(&DHBi,sizeof(struct ADDRESS),1,fp)!=1) /将数组中信息读入到所创建的文件中 printf(写入文件错误!n); /提示信息 fclose(fp); printf(文件保存成功!n);参数含义:ADDRESS:用户定义的数据结构DHB:用户定义的数组,用于存放信息三、程序实
25、现:源代码分析:(1)、程序预处理:#include #include #include#include#include#define MAX 50 /自定义结构体struct ADDRESS /定义数据结构char name20;/姓名 char tel20;/电话 char qq11;/QQ号 char add20;/地址DHB10;int q=0,c=0;/初始化q分析:加载头文件,定义数据结构体,定义数组,定义各个变量并初始化。(2)、主函数:void main() int i,c; char name20; system(color E0);/确定字幕及字体的颜色 /-实现登录功能- char szUser20 = 0; char *PUser=user;/设置用户名 char *Pword=1234;/设置密码 char chPwd5; int flag_u=0,j=0,flag_p=0; while(flag_u=0|flag_p=0) j=0; printf(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1