综合课程设计报告

更新时间:2024-06-20 00:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

通信录查询系统

课程设计说明书

课程设计名称: 软件综合程序设计

课程设计题目: 通信录查询系统

学 院 名 称: 信息工程学院

专业: 电子信息工程 班级:

学号: 姓名:

评分: 教师:

20 14 年 02 月28 日

1

通信录查询系统

摘要

本次设计的目的是为了设计一个能够便捷使用的通讯录查找系统,如果将这个系统应用到手机或者其他电子设备中,可以方便地实现存储、查找、删除联系人等的功能,为通信录管理提供方便。实现该系统主要是用C语言实现,程序一开始声明了一个结构体类型struct Info,通信录的成员name,sex,city,phone,youbian则是结构体的一个个成员,通过变量info调用各个成员实现成员信息管理。程序的主要实现分为七大模块:添加账户,修改账户,添加联系人信息,修改联系人信息,删除联系人信息,浏览联系人信息,查询联系人,退出系统。而实现这七个功能则是使用switch-case语句连接选择。本程序是以多文件的形式编译而成,达到了通信录方便快捷、人机友好的效果。

关键字: 通信录 C 结构体 人机友好

2

通信录查询系统

目 录

前 言 ........................................................................................... 错误!未定义书签。 第一章 设计要求 ......................................................................................................... 6 第二章 系统的组成与设计原理 ................................................................................. 7

2.1系统的组成 ................................................................................................... 7 2.2系统的设计原理 ........................................................................................... 7 第三章 系统的概要设计 ............................................................................................. 8

3.1 系统的层次结构图 ...................................................................................... 8 3.2 系统方案比较分析与选择 .......................................................................... 8 第四章 详细设计 ......................................................................................................... 9

4.1程序流程图 ................................................................................................... 9

4.1.1 添加账户 ......................................................................................... 9 4.1.2主程序 ............................................................................................ 10 4.1.3输入信息 ........................................................................................ 10 4.1.4浏览信息 ........................................................................................ 11 4.1.5查找信息 ........................................................................................ 11 4.1.6修改信息 ........................................................................................ 12 4.1.7删除信息 ........................................................................................ 12 4.2 核心代码 .................................................................................................... 13

4.2.1结构体类型的声明 ........................................................................ 13 4.2.2添加账户信息 ................................................................................ 13 4.2.3主程序 ............................................................................................ 15 4.2.3输入联系人信息 ............................................................................ 16 4.2.4浏览信息 ........................................................................................ 18 4.2.5查询信息 ........................................................................................ 19 4.2.6修改信息 ........................................................................................ 24 4.2.7删除信息 ........................................................................................ 27 4.2.8主函数 ............................................................................................ 30

第五章 调试及测试结果与分析 ............................................................................... 32

3

通信录查询系统

5.1运行的结果 ................................................................................................ 32 5.2 调试程序的方法与技巧 ............................................................................ 36 5.3程序出现的故障及原因,解决方案 ......................................................... 37 第六章 结论 ............................................................................................................... 37 参考文献 ..................................................................................................................... 38 附录 ............................................................................................................................. 40

附录1系统各功能界面 ................................................................................... 40 附录2 程序清单及注释 .................................................................................. 43

4

通信录查询系统

前 言

随着现代电子产品的发展,应用系统或软件也显得重要。特别是现在信息量超大的时代,

对于信息的管理是一个很热门的话题,也有很多技术投入进去,比如java,C#,C++,面向对象,数据库access,SQL等,它们基本上实现了对信息的不同性需求的管理,但是随着时代的进步,需求的不断增加,我们对那些技术不断地探索与改进就显得尤为的重要。

对于上述的相关技术,功能是很好的实现了,但现在的人类讲究的是你给出的管理界面符不符合他们的头脑思考方式,这就涉及到一个人机友好的问题。当然解决这个问题不是特别难,但还是需要我们去思考,满足市场需求。首先要人机友好,我们可以想到,一个自己的通信录是不能随便被他人看到,以防实现各种操作,这样我们就得实现一个登陆账户的问题,在这里采用的是用户自己设置一个账户,一旦登陆就得验证是否符合,安全性大大提高。用户登陆后要实现什么操作,你的给出他一个界面,这里就给出了7个操作功能,这7个功能是在相同的地位,我们采用switch-case语句来连接,只要你输入你所要完成功能的数字,就可以实现相关的功能。

目前,人机友好和环保,低碳都是时代的引领者,该电子通讯录系统没有使用纸张,人机界面很简易,不耗资源,做到了环保,人机友好,低碳,符合当今的时代发展。这个系统使用户能够方便快捷的使用存储和查找等优势功能,且具有较高的安全性,能够有效保护用户联系人资料。

5

通信录查询系统

第一章 设计要求

基本要求: 设计散列表实现通讯录查找系统。

(1) 设每个记录有下列数据项:电话号码、用户名、地址; (2) 从键盘输入各记录,分别以电话号码为关键字建立散列表; (3) 查找并显示给定电话号码的记录; (4) 通讯录信息文件保存;

提高要求:1、主函数根据选单的选项调用各函数,并完成相应的功能。

2、要求人机界面友好,使用图形化界面;

6

通信录查询系统

第二章 系统的组成与设计原理

2.1系统的组成

本系统主要是应用C语言实现对通信录的管理。子函数有yunxing(),xiugai(),tianjia(),deletes(),search(),modify(),biaoti(),bye(),liulan(),inputnewfo(),主函数有main(),通过主函数对子函数的调用,完成该系统功能。

2.2系统的设计原理

该系统设计主要是根据主函数调用各个子函数完成相应的功能。首先要一个菜单选单,在这里用了一个调用选择模块,输入不同的数字调用不同的子函数,实现相应的功能。在进入选单之前要进行账号验证,确保了安全性。程序先声明了一个结构体类型struct Info以及name,sex,city,phone,youbian成员变量,通过定义结构体变量info等引用成员变量,从而实现了每个联系人各项信息的管理。主函数main()开始调用tianjia()获取一个账户,从而开始建立一个通信录,调用yunxing()进入管理信息选单,之后就是通过返回值进入zhuchengxu()函数,执行信息的修改,输入,删除,查询,退出系统等功能,完成本次课设任务要求。

7

通信录查询系统

第三章 系统的概要设计

3.1 系统的层次结构图

账号验主菜单 添浏查修删修退 图3.1 层次结构图

3.2 系统方案比较分析与选择

方案一是采用面向对象的C++,窗体的实现还有MFC,考虑到人机界面友好,就开始尝试使用MFC来做,按照层次结构图是可以很好地展现一个信息管理的管理界面。不仅可以按按钮,而且还涉及其他的控件、菜单,数据库的使用,功能实现一目了然。

方案二是采用C语言,涉及到文本和结构体方面的知识,程序就是通过一个个子程序的调用来实现主菜单下的子功能,思考程序的代码比较简单易懂,敲写熟悉,错误率低。

最近学习的面向对象和窗体等知识远远不够实现本次课设需求,查阅资料要使用MFC实现要达到需求功能需要SQL语句,还有一些类的使用,但均不是很熟练,没有信心可以在课设期间实现题目要求,因此方案一被放弃,改用C语言的方案二。

8

通信录查询系统

第四章 详细设计

4.1程序流程图

4.1.1 添加账户

开始 您还没有帐号请输请设置密码: N strcmp(news.a,num.zhanY strcmp(num.mima,newsY 进入主结束 图4.1 添加账户流程图

9

账号有N 密码有 通信录查询系统

4.1.2主程序

开始 请输入你要选 1 输浏2 查3 4 修5 删6 N 7 修退结束 图4.2 主程序流程图

4.1.3输入信息

开始 输入想继续输Y 退出输保存信息N

图4.3 输入信息流程图

10

通信录查询系统

4.1.4浏览信息

开i=0 i=i+输出联系图4.4浏览信息流程图

4.1.5查找信息

开flag N 1

通信录查询系统 图4.5查找流程图

4.1.6修改信息

开请输入要修信息Y 更改Y 继续更N 退出更

图4.6 修改信息流程图

4.1.7删除信息

N 修改开始 请输入要删删除N 信息Y 删Y 删除继续删Y 图4.7删除信息流程图

12

N 退出删

通信录查询系统

4.2 核心代码

4.2.1结构体类型的声明

struct Info//声明结构体类型struct Info {

char name[30];//联系人姓名 char sex[7];//联系人性别 char city[50];//联系人城市 char phone[12];//联系人号码 char youbian[10];//联系人邮编 };

4.2.2添加账户信息

void tianjia() //添加账号函数 码时设置原始密码// {

FILE *fp;

struct zhang zhanghao; int i=0;char c; char mima[20];

//没有原始账号密

if((fp=fopen(\向yuanlai.txt添

加数据并使fp指向此文件 {

13

通信录查询系统

printf(\无法打开\\n\如果打开时出错就输出“无法打

开”的信息 }

printf(\您还没有帐号请输入申请账号:\\n\scanf(\printf(\请输入~密码:\\n\

while((c=getch())!=13) /*用getch()读入的回车值为getch(); exit(1);

13*/

{if (c!='\\b' && c!='\\t' && i<20) {mima[i]=c; putchar('*'); i++; } if (c=='\\b' && i>0)

{printf(\ i--; } /*输出内容为退格,空格,退格;

擦掉一个字符*/ }

14

}

mima[i]='\\0';

strcpy(zhanghao.mima,mima);

fwrite(&zhanghao,sizeof(zhanghao),1,fp); fclose(fp);

通信录查询系统

4.2.3主程序

void zhuchengxu() { int n;

//调用选择模块

printf(\请输入你要实现的功能(1~7):\\n\scanf(\while(1) {

if(n>7||n<1) {

printf(\输入有误!请重新输入(1~7):\scanf(\

} }

else

break;

switch(n)//选择对应的功能 {

case 1:{inputnewfo();break;}

case 2:{liulan();break;} case 3:{search();break;} case 4:{modify();break;}

15

通信录查询系统

}

}

case 5:{deletes();break;} case 6:{xiugai();break;} case 7:{bye();break;}

4.2.3输入联系人信息

void inputnewfo() //输入的通信信息 {

struct Info info;//定义结构体变量info FILE * fp; char ch; char temp[10];

if((fp=fopen(\通信信息.txt\为读写打开通信信息.txt {

printf(\无法打开 通信信息.txt\\n\提示信息 getch(); exit(1);

} do {

printf(\姓名:\

16

通信录查询系统

printf(\性别:(m/f)\

if(!strcmp(temp,\//设置当temp变量的值为M或者

m时对于性别输出为male

strcpy(info.sex,\

else if(!strcmp(temp,\

strcpy(info.sex,\

else if(!strcmp(temp,\设置当temp变量的值为F或

者f时性别输出为female

strcpy(info.sex,\

else if(!strcmp(temp,\

strcpy(info.sex,\

else if(!strcmp(temp,\

strcpy(info.sex,\ else if(!strcmp(temp,\ strcpy(info.sex,\

else

strcpy(info.sex,\当输入不为F,M,f,m时用

error代替

printf(\电话:\ printf(\城市:\ printf(\邮编:\

fwrite(&info,sizeof(info),1,fp);//向fp所指向的文件(通

17

通信录查询系统

信信息.txt)写入数据

printf(\继续输入请按Y, 退出输入请按N\\n\ ch=getchar(); getchar();

}while(ch=='Y'||ch=='y'); fclose(fp); }

4.2.4浏览信息

void liulan() //浏览通信录信息 {

struct Info info; 定义结构体变量info

FILE * fp;

int i=0;

if((fp=fopen(\通信信息.txt\从通信信

息.txt文件读出数据 {

printf(\无法打开 通信信息.txt\\n\

getch(); exit(1); }

while(fread(&info,sizeof(info),1,fp)==1)//每读出一条联系人

信息就打开一次文件

18

通信录查询系统

}

{ }

fclose(fp);//关闭文件 i++;//i记录联系人的数量 printf(\

printf(\姓名:%6s \ printf(\性别:%7s \ printf(\电话:s \ printf(\城市:%8s \ printf(\邮编:%7s \ printf(\

4.2.5查询信息

void search() //信息的查询// {

struct Info info; FILE * fp;

int flag;

int total=0; //记录符合条件的个数 char ch[15]; char a;

if((fp=fopen(\通信信息.txt\

19

通信录查询系统

{

printf(\无法打开通信信息.txt\\n\

getch(); exit(1); }

do {

rewind(fp);

printf(\请输入你要查询的方式:1、同城市查询 2、姓名查询3、电话查询\\n\ while(1) {

scanf(\为提示信息的标号变量 if(flag<1||flag>3)

printf(\输入信息有误--->请重新输入(1~3):\\n\

else }

switch(flag) { case 1:{

printf(\请输入你要查询的城市名称:\\n\按

20

break;

通信录查询系统

城市名称查询

scanf(\ total=0;

while(fread(&info,sizeof(info),1,fp)==1) {

if(strcmp(ch,info.city)==0) {

total++;

printf(\

姓名\性别\电话\城市\邮编\

printf(\,info.phone,info.city,info.youbian);

}

}

if( total==0) printf(\所查找的不存在\\n\查

找的记录条数为0,提示“查找的不存在”

printf(\查找完毕!\\n\ break;

}

case 2:{

printf(\请输入你要查询的姓名:\\n\按姓名

21

通信录查询系统

查询

scanf(\ total=0;

while(fread(&info,sizeof(info),1,fp)==1) {

if(strcmp(ch,info.name)==0) {

total++;

printf(\姓

名\性别\电话\城市\邮编\

printf(\,info.phone,info.city,info.youbian); 上

printf(\查找完毕!\\n\ break;

}

}

if( total==0) printf(\所查找的不存在\\n\同

}

case 3:{

printf(\请输入你要找的电话号码:\\n\按号

22

通信录查询系统

码查询

scanf(\ total=0;

while(fread(&info,sizeof(info),1,fp)==1) {

if(strcmp(ch,info.phone)==0) {

total++;

printf(\

电话\姓名\性别\城市\邮编\

printf(\me,info.sex,info.city,info.youbian); 上 }

printf(\是否继续查找 Y是继续查找 N是退出查

23

}

}

if( total==0) printf(\所查找的不存在\\n\同

printf(\查找完毕!\\n\ break;

}

通信录查询系统

找:\\n\ }

4.2.6修改信息

}

getchar();a=getchar(); getchar();

while(a=='Y'||a=='y'); fclose(fp);

void modify() //信息修改// {

struct Info info;//定义结构体Info变量info FILE * fp1,*fp2;//定义文本指针fp1,fp2 int flag; char ch[10]; char f; char temp[10]; do {

if((fp1=fopen(\通信信息.txt\读出通信

信息.txt的信息并使fp1指向此文件 {

printf(\无法打开通信信息,请检查!\getch();

24

通信录查询系统

}

exit(1);

if((fp2=fopen(\修改后的信息.txt\向修

改后的信息.txt写入信息并使fp2指向此文件 { }

printf(\请输入你想修改的信息:\\n\gets(ch); flag=0;

while(fread(&info,sizeof(info),1,fp1)==1)//若读出的信息printf(\无法打开通信信息,请检查!\getch(); exit(1);

不为空就修改 {

if(strcmp(ch,info.name)==0) {

printf(\姓名\\t\\t性别\\t\\t城市\\t\\t电话\\t\\t邮编\\n\

printf(\

x,info.city,info.phone,info.youbian);

printf(\输入你要改的信息:\\n\

25

通信录查询系统

printf(\姓名:\printf(\性别:\

if(!strcmp(temp,\

strcpy(info.sex,\

else if(!strcmp(temp,\ strcpy(info.sex,\ else if(!strcmp(temp,\

strcpy(info.sex,\

else if(!strcmp(temp,\

strcpy(info.sex,\

else if(!strcmp(temp,\

strcpy(info.sex,\ else if(!strcmp(temp,\ strcpy(info.sex,\

else

strcpy(info.sex,\ }

fwrite(&info,sizeof(info),1,fp2);//向修改后的信息.txt

26

printf(\城市:\printf(\电话:\printf(\邮编:\flag=1;

通信录查询系统

写入修改信息 }

fclose(fp1); fclose(fp2); if(flag==1) {

printf(\提示修改成功 remove(\通信信息.txt\

rename(\修改后的信息.txt\通信信息.txt\把修改

后的信息文本重命名为通信信息文本 }

4.2.7删除信息

} else

printf(\

printf(\继续修改,按Y 退出修改,按 N\\n\f=getchar();getchar();

}while(f=='y'||f=='Y');

void deletes() //删除信息 {

struct Info info; FILE * fp1,*fp2;

27

通信录查询系统

int flag; char ch[10]; char f; char k; do {

if((fp1=fopen(\通信信息.txt\读出通信信

息.txt的信息并使fp1指向此文件 { }

if((fp2=fopen(\存入信息.txt\向存入信printf(\无法打开该文件!\getch(); exit(1);

息.txt写入信息并使fp2指向此文件 { } flag=0;

printf(\输入你要删除的信息的姓名:\\n\

28

printf(\无法打开该文件!\getch(); exit(1);

通信录查询系统

gets(ch);

while(fread(&info,sizeof(info),1,fp1)==1)//若读出的信息

不为空就删除 手

机:%s\\n\

printf(\是否要删除该信息?\\n删除输Y,不删除输 {

if(strcmp(ch,info.name)==0) {

printf(\姓名:%s 性别:%s 城市:%s 邮编:%s

n:\\n\确定是否删除

k=getchar();getchar(); if(k=='Y'||k=='y') { } else {

flag=1;

fwrite(&info,sizeof(info),1,fp2); } else {

29

}

通信录查询系统

}

printf(\要删除的未找到!\\n\fwrite(&info,sizeof(info),1,fp2);

}

fclose(fp1); fclose(fp2); if(flag==1) {

printf(\删除成功!\\n\remove(\通信信息.txt\

rename(\存入信息.txt\通信信息.txt\把存入的信

息文本重命名为通信信息文本 }

4.2.8主函数

}

else printf(\删除失败!\

printf(\继续删除按Y,退出删除按N\\n\f=getchar();getchar();

}while(f=='y'||f=='Y');

int main() {

30

通信录查询系统

char f; FILE *fp; int a;

if((fp=fopen(\将fopen函数的返回值赋给指针变量fp

tianjia(); //调用添加账号函数

a=yunxing();//将yunxing()的返回值赋给a if(a==1)//当账号和密码验证正确时进入菜单选单 { do{

system(\ biaoti();

zhuchengxu();//调用zhuchengxun函数,执行通信录的

增删改查等功能 }

31

printf(\是否留在查询系统:按Y继续;按N退出\\n\

f=getchar();getchar(); } else

printf(\账号密码错误!\}while(f=='y'||f=='Y');

return(0);

通信录查询系统

第五章 调试及测试结果与分析

5.1运行的结果

图5.1 设置账号并进入通信录选单

图 5..2 文本写入信息

图5.3 浏览通信录

32

通信录查询系统

图5.4 增加联系人

图5.5 添加后的保存

33

通信录查询系统

图5.6 查找联系人

图5 .7修改联系人

34

通信录查询系统

图5.8 修改后的通信录

图5.9 删除联系人

35

通信录查询系统

图5.10 修改账号

图 5.11 修改账号后的文本变化

图5.12 退出通信录

图 5.13 生产的文件

图 5.14 运行结束后的文件

5.2 调试程序的方法与技巧

本次课设的程序是用VC6.0调试的,一开始根据流程图编写源代码,但是难免会有错误,通过不断地去单独实现某一项功能,,看看程序运行结果是否与程序需求相符,不符合则去看看判断语句是否出错,内外循环是否分清楚了,要是还不行就看看结构体变量是否引用成员正确,文件读写方式是否应用对,

36

通信录查询系统

基本上以上几个点就可以保证程序的完整运行。

5.3程序出现的故障及原因,解决方案

刚开始粗略的按照流程图编写代码,由于学过的C语言用的时间不是很长,也不够熟练,在查询资料时有人应用了结构体编写,简单明了,通俗易懂,层次分明,然后就结构体那方面的知识不是很熟练,复习了一个下午就开始编写,对于主程序那段,由于要用到switch-case语句,这个倒是比较简单的实现了,就是文件实现对信息的保存有点困难,特别是fp指向文件不是很熟悉,所以生产的文件出现了乱码现象,,后来查询说是文件不能用txt格式,二进制文件在不能那样打开的,得改成十进制才不会乱码,可是更改了还是会有部分乱码,最后只能把文件改成.dat格式,然后通过txt格式打开文件,最后解决了一个生产文件乱码的问题。还有就是在给出提示信息的时候,按道理,判断语句执行后就要给出提示,可是假如一条信息不存在,它就会显示多条(取决于保存信息的数量)提示信息,那样会显得很奇怪,于是去看那个子函数的循环功能是如何实现的,发现每次打开文件就会判断一次,给出判断提示信息,于是给出了一个break语句,终止整个循环,就不会出现多次重复提示了。

第六章 结论

通过本次课设,对C语言的应用及能力有了一个深层的提升。本次课设主要是实现一个通信录查询系统,,平常大家使用手机的通信录很方便,但这次自己真正动手来设计一个这样的管理系统就显得很吃力,因为好多学过的东西

37

通信录查询系统

都是理论性的,实践能力比较差。但是还是学到了很多,比如以前上课很晕乎的文件,一个结构体对多个成员的调用及灵活使用,还有循环的内外,这些都是通过这次设计得到了加强与熟练的。当然实现这个查询系统有很多方法,特别是人机结合方面在本次课设中显得比较死板,所以这些不足都是值得大家思考,不管是在软件还是硬件领域,需要不断地探索。在这次设计中获得的最大的收获就是以后真的要加强动手编写程序的能力,不但要写得出来,而且要能够达到设计需求的才是真正的学到了知识,现在临近毕业,更加要对这些基础设计动手做,为今后的就业打好一个基础。

参考文献

[1]谭浩强,C程序设计.北京:清华大学出版社,2010.6

[2]张忠帅,VC++2008专题应用程序开发实例精讲.北京:电子工业

38

通信录查询系统

出版社,2008.10

[3]明日科技,Visual C++项目开发实例学习手册.北京:人民邮电出版社,2008.8

39

通信录查询系统

附录

附录1系统各功能界面

图1.1 设置账号并进入通信录选单功能界面

图1.2浏览通信录界面

图1.3 增加联系人界面

40

本文来源:https://www.bwwdw.com/article/p343.html

Top