计算机软件基础课程设计电话本.docx

上传人:b****8 文档编号:9961632 上传时间:2023-02-07 格式:DOCX 页数:52 大小:525.92KB
下载 相关 举报
计算机软件基础课程设计电话本.docx_第1页
第1页 / 共52页
计算机软件基础课程设计电话本.docx_第2页
第2页 / 共52页
计算机软件基础课程设计电话本.docx_第3页
第3页 / 共52页
计算机软件基础课程设计电话本.docx_第4页
第4页 / 共52页
计算机软件基础课程设计电话本.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

计算机软件基础课程设计电话本.docx

《计算机软件基础课程设计电话本.docx》由会员分享,可在线阅读,更多相关《计算机软件基础课程设计电话本.docx(52页珍藏版)》请在冰豆网上搜索。

计算机软件基础课程设计电话本.docx

计算机软件基础课程设计电话本

电话簿管理系统课程设计报告

 

---------

 

编写人:

xxx

同组成员:

XXX(课程设计负责人)

XXX

完成日期:

2011-12-14

辅导教师:

XXX

批阅日期:

分数:

 

一、功能描述:

本电话簿主要由数组实现,由如下八个模块组成:

1、输入模块:

主要完成将通讯信息存入线性表的工作。

2、修改模块:

主要完成修改电话簿中的信息的工作。

3、插入模块:

主要完成插入新信息的工作。

4、删除模块:

主要完成删除不需要的信息的工作。

5、查询模块:

主要完成查找信息的工作。

6、输出模块:

主要完成在屏幕上显示信息的工作。

7、保存模块:

主要完成保存已经输入信息的工作。

8、文件读入模块:

主要完成从已保存的文档中读取信息的工作。

9、登录模块:

主要用于实现电话簿系统密码登录的功能。

结构示意图如下:

二、总体设计:

1、功能模块设计:

(1)、主函数执行流程:

分析:

本电话簿管理系统总的执行流程如图1所示!

判断键入数值时:

选择1:

执行输入函数,实现从键盘输入数据的功能;

选择2:

执行查找函数,实现在已输入的数据中查询特定信息的功能;

选择3:

执行修改函数,实现修改已输入数据中的某些信息的功能;

选择4:

执行输出函数,实现在屏幕上显示已输入的数据信息的功能;

选择5:

执行插入函数,实现在已输入数据基础上插入新的数据的功能;

选择6:

执行删除函数,实现删除某些已输入的数据的功能;

选择7:

执行存储函数,实现把已输入数据保存在文档中的功能;

选择8:

执行读入函数,实现从已保存的文档中读入数据的功能;

选择0:

表示退出系统,实现系统的安全退出。

(2)、输入模块流程:

分析:

本电话簿系统的信息输入功能由main()函数调用input输入函数完成,执行流程如图2!

由do-while结构完成其循环,开始先比较数组中实际数据长度和系统允许的最大长度,判断数组中的空间是否已满,若满则退出输入函数到主菜单,方便用户删除;若未满则提示让用户输入信息,输入完一条信息后进行一次判断,让用户选择是否继续输入,是则继续执行输入函数,否则退出输入到主菜单。

(3)、查找模块流程:

分析:

本电话簿系统的信息查询功能由main()函数调用seachname、seachtel、seachqq、seachadd等四个函数,分别实现由姓名查询、由电话查询、由qq查询、由地址查询等查询功能。

执行流程如图3!

可通过不同信息部分查询,选择不同查询方式,则输入相应的要查数据,通过for循环逐条比较输入信息与数组中已存信息,若有相同的,则输出相应的那条信息,否则退出循环到选择操作,可选择继续查询或者退出查询到主菜单。

(4)、修改模块流程:

分析:

本电话簿系统的信息修改功能由main()函数调用recompose修改函数完成,可分别修改姓名、电话、QQ、地址等。

用户输入要查询的姓名,通过for循环逐条比较输入信息与数组中已存信息,若有相同的,则提示并选择要修改信息的相应部分,直接输入新信息;若找不到相应信息或执行完上一次修改,则进入选择操作,可选继续修改操作或回到主菜单。

(5)、输出模块:

本电话簿系统的信息输出功能由main()函数调用output输出函数完成。

由for循环逐条将已输入的信息显示在屏幕上。

流程:

开始→输出信息→结束输出操作

(6)、插入模块流程:

分析:

本电话簿系统的信息插入功能是由main()函数调用Insert插入函数完成执行的,流程如图5!

用户输入要插入的新信息,输入要在哪个名字后插入信息,for循环逐条查询该名字是否存在,若在,则将其向后复制一位,并把新信息插入其原来位置;否则把新信息存放在最后位置。

信息数加一,完成插入操作,进入选择操作,可选继续插入操作或回到主菜单。

(7)、删除模块流程:

分析:

本电话簿系统的信息删除功能是由main()函数调用desl删除函数完成的,流程如图6。

用户输入要删除信息的名字,for循环查找该信息,若找到相同的,则把该条信息后的信息向前复制,覆盖掉原信息,完成删除。

若没找到或已完成删除操作,则进入选择操作,可选继续删除或退出删除进入主界面菜单。

(8)、存储模块流程:

分析:

本电话簿系统的信息保存功能是由main()函数调用WriteToFile信息保存函数实现的,简易流程如图7!

程序试图创建一个tel.txt文档,之后打开该文档,若成功打开则说明文档创建成功,则for循环逐条把数组中的信息存入到该文档中,信息存储成功;否则说明文档创建失败。

不管是信息保存成功或是保存失败,结束保存操作,退回到主菜单。

(9)、文件读取模块流程:

分析:

本电话簿系统的信息读取功能是由main()函数调用ReadFromFile函数实现的,简易流程如图8,。

程序试图打开tel.txt文档,判断是否存在该文档,若存在,则把文档中的信息逐条输入到数组中,文件读取成功;若不存在,提示文件读取失败。

不管文件读取成功或是读取失败,都结束文件读入操作,退回到主菜单。

2、数据结构设计:

(1)电话簿信息数据结构体:

structADDRESS//定义数据结构

{charname[20];//姓名

chartel[20];//电话

charqq[11];//QQ号

charadd[20];//地址

}DHB[10];

(2)、

2、函数功能描述:

(1)、输入:

input

函数原型:

voidinput(structADDRESSDHB[])//输入函数

{

intc;

do{

if(q==MAX)//比较实际信息数与允许加入的最大信息数,若两者相等,则说明空间已满

{

printf("\n信息储存已满,需要删除其中的一些信息,才能执行输入操作!

\n");

return;

}

printf("输入机主的姓名:

");//输入机主的姓名

scanf("%s",&DHB[q].name);

printf("输入机主的电话:

");//输入机主的电话

scanf("%s",&DHB[q].tel);

printf("输入机主的QQ:

");//输入机主的qq

scanf("%s",&DHB[q].qq);

printf("输入机主的地址:

");//输入机主的地址

scanf("%s",&DHB[q].add);

q++;

printf("想继续执行输入操作请按1(否则按其它数字):

");//提示信息

scanf("%d",&c);

}

while(1==c);

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(2)、查询:

(a)、seachname

函数原型:

voidseachname(structADDRESSDHB[])//按姓名查询

{

inti;

charname[20];//要查询的姓名

printf("输入要查询的姓名:

");//提示信息

scanf("%s",name);

for(i=0;i

{

if(strcmp(name,DHB[i].name)==0)//输入的姓名和待比较的姓名是否相等

break;

}

if(i>q-1)//如果i>q-1超过了数组的长度

printf("没有找到要查询的信息!

\n");//显示没找到要查询的记录

else

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//显示出查询的结果

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(b)、seachtel

函数原型:

voidseachtel(structADDRESSDHB[])//按电话查询

{

inti;

chartel[20];//要查询的姓名

printf("输入要查询的电话:

");//提示信息

scanf("%s",tel);

for(i=0;i

{

if(strcmp(tel,DHB[i].tel)==0)//输入的电话和待比较的电话是否相等

break;

}

if(i>q-1)//如果i>q-1超过了数组的长度

printf("没有找到要查询的信息!

\n");//显示没找到要查询的记录

else

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//显示出查询的结果

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(c)、seachqq

函数原型:

voidseachqq(structADDRESSDHB[])//按qq查询

{

inti;

charqq[20];//要查询的qq

printf("输入要查询的qq:

");//提示信息

scanf("%s",qq);

for(i=0;i

{

if(strcmp(qq,DHB[i].qq)==0)//输入的qq和待比较的qq是否相等

break;

}

if(i>q-1)//如果i>n-1超过了数组的长度

printf("没有找到要查询的信息!

\n");//显示没找到要查询的记录

else

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//显示出查询的结果

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(d)、seachadd

函数原型:

voidseachadd(structADDRESSDHB[])//按地址查询

{

inti;

charadd[20];//要查询的地址

printf("输入要查询的地址:

");//提示信息

scanf("%s",add);

for(i=0;i

{

if(strcmp(add,DHB[i].add)==0)//输入的地址和待比较的姓名是否相等

break;

}

if(i>q-1)//如果i>n-1超过了数组的长度

printf("没有找到要查询的信息!

\n");//显示没找到要查询的记录

else

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//显示出查询的结果

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(3)、修改:

recompose

函数原型:

voidrecompose(structADDRESSDHB[])//修改函数

{

intc;

do{

inti,a;

charname[20];//要修改记录的名字

printf("输入要修改机主的姓名:

");//提示信息

scanf("%s",name);

for(i=0;i

{

if(strcmp(name,DHB[i].name)==0)//比较输入要修改的姓名与已输入的姓名

break;

}

if(i>q-1)//如果i>q-1超过了数组的长度

printf("没有找到要修改的信息!

\n");//显示没找到要删除的记录

else

{

{

printf("修改姓名请按1:

\n");//提示信息

printf("修改电话请按2:

\n");//提示信息

printf("修改qq请按3:

\n");//提示信息

printf("修改地址请按4:

\n");//提示信息

printf("请选择(1~4):

");//提示信息

scanf("%d",&a);

if(a==1)

{

printf("输入新的姓名:

\n");//输出机主的姓名

scanf("%s",&DHB[i].name);

}

if(a==2)

{

printf("输入新的电话:

\n");//输出机主的电话

scanf("%s",&DHB[i].tel);

}

if(a==3)

{

printf("输入新的qq:

\n");//输出机主的qq

scanf("%s",&DHB[i].qq);

}

if(a==4)

{

printf("输入新的地址:

\n");//输出机主的地址

scanf("%s",&DHB[i].add);

}

}

}

printf("如果想继续执行修改操作请按1(否则按其它数字):

");//提示信息

scanf("%d",&c);

}

while(1==c);

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(4)、输出:

output

函数原型:

voidoutput(structADDRESSDHB[])//输出函数

{

inti;

for(i=0;i

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//输出通讯录的信息

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(5)、插入:

Insert

函数原型:

voidInsert(structADDRESSDHB[],charname[])//插入函数,参数为结构体数组和记录数

{

intc;

do{

structADDRESStemp;//新插入记录信息

charname[15];//要插入的名字

inti=1,j;

{

printf("输入要插入的姓名:

");//输入机主的姓名

scanf("%s",temp.name);

printf("输入要插入的电话:

");//输入机主的电话

scanf("%s",temp.tel);

printf("输入要插入的QQ:

");//输入机主的qq

scanf("%s",temp.qq);

printf("输入要插入的地址:

");//输入机主的地址

scanf("%s",temp.add);

}

printf("请输入到那个名字之前:

\n");//提示信息

scanf("%s",name);//输入姓名

for(i=0;i

{

if(strcmp(name,DHB[i].name)==0)//比较输入的与实际信息是否相同

break;

}

if(i>q-1)//如果i>q-1超过了数组的长度

printf("没有找到要插入的位置!

\n");//显示没找到要插入的位置

else

{

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//显示出插入的位置

for(i=0;i

{

if(strcmp(name,DHB[i].name)==0)//输入的姓名和待比较的姓名是否相等

break;

}

for(j=q-1;j>=i;j--)

{

strcpy(DHB[j+1].name,DHB[j].name);//当前记录的机主姓名拷贝到后一条

strcpy(DHB[j+1].tel,DHB[j].tel);//当前记录的机主电话拷贝到后一条

strcpy(DHB[j+1].qq,DHB[j].qq);//当前记录的机主qq拷贝到后一条

strcpy(DHB[j+1].add,DHB[j].add);//当前记录的机主地址拷贝到后一条

}

{

strcpy(DHB[j+1].name,temp.name);//当要插入的机主姓名拷贝到j+1位置

strcpy(DHB[j+1].tel,temp.tel);//当要插入的机主电话拷贝到j+1位置

strcpy(DHB[j+1].qq,temp.qq);//当要插入的机主qq拷贝到j+1位置

strcpy(DHB[j+1].add,temp.add);//当要插入的机主地址拷贝到j+1位置

}

q++;//记录数加

printf("插入成功");//提示信息

}

printf("\n如果想继续执行添加操作请按1(否则按其它数字):

");//提示信息

scanf("%d",&c);

}

while(1==c);

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(6)、删除:

desl

函数原型:

voiddesl(structADDRESSDHB[],charname[])//删除函数

{

intc;

do{

charname[15];

inti,j;

printf("请输入删除的名字:

\n");//提示信息

scanf("%s",name);//输入姓名

for(i=0;i

{

if(strcmp(name,DHB[i].name)==0)//输入的姓名和待比较的姓名是否相等

break;

}

if(i>q-1)//如果i>q-1超过了数组的长度

printf("没有找到要删除的信息!

\n");//显示没找到要删除的记录

else

{

printf("姓名:

%-15s电话:

%-12sQQ:

%-12s住址:

%-15s\n",DHB[i].name,DHB[i].tel,DHB[i].qq,DHB[i].add);//输出机主的信息

for(j=i+1;j

{

strcpy(DHB[j-1].name,DHB[j].name);//将后一条记录的姓名拷贝到前一条

strcpy(DHB[j-1].tel,DHB[j].tel);//将后一条记录的电话拷贝到前一条

strcpy(DHB[j-1].qq,DHB[j].qq);//将后一条记录的qq拷贝到前一条

strcpy(DHB[j-1].add,DHB[j].add);//将后一条记录的地址拷贝到前一条

}

q--;//记录数减1

printf("删除成功!

\n");

}

printf("如果想继续执行删除操作请按1(否则按其它数字):

");//提示信息

scanf("%d",&c);

}

while(1==c);

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(7)、储存:

WriteToFile

函数原型:

intReadFromFile(structADDRESSDHB[])//读入函数

{

FILE*fp;//指向文件fp

inti;

if((fp=fopen("tel.txt","r"))==NULL)//判断是否存在需要打开的文件

{

printf("电话簿不存在,需重新建立!

\n");//提示信息

return0;

}

for(i=0;!

feof(fp);i++)

fread(&DHB[i],sizeof(structADDRESS),1,fp);//把文件中的信息读入到数组中

fclose(fp);

printf("信息读取成功!

\n");//提示信息

returni-1;

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

(8)、读取:

ReadFromFile

函数原型:

voidWriteToFile(structADDRESSDHB[])//信息保存函数

{

FILE*fp;//指向文件fp

inti;

if((fp=fopen("tel.txt","w+"))==NULL)//判断是否存在文件若不存在则新建

{

printf("不能打开文件!

\n");//提示信息

return;

}

for(i=0;i

if(fwrite(&DHB[i],sizeof(structADDRESS),1,fp)!

=1)//将数组中信息读入到所创建的文件中

{

printf("写入文件错误!

\n");//提示信息

}

fclose(fp);

printf("文件保存成功!

\n");

}

参数含义:

ADDRESS:

用户定义的数据结构

DHB[]:

用户定义的数组,用于存放信息

 

三、程序实现:

源代码分析:

(1)、程序预处理:

#include

#include

#include

#include

#include

#defineMAX50//自定义结构体

structADDRESS//定义数据结构

{charname[20];//姓名

chartel[20];//电话

charqq[11];//QQ号

charadd[20];//地址

}DHB[10];

intq=0,c=0;//初始化q

分析:

加载头文件,定义数据结构体,定义数组,定义各个变量并初始化。

(2)、主函数:

voidmain()

{

inti,c;

charname[20];

system("colorE0");//确定字幕及字体的颜色

//-------------------实现登录功能-------------------

{

charszUser[20]={0};

char*PUser="user";//设置用户名

char*Pword="1234";//设置密码

charchPwd[5];

intflag_u=0,j=0,flag_p=0;

while(flag_u==0||flag_p==0)

{

j=0;

printf("

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1