通讯录的设计.docx
《通讯录的设计.docx》由会员分享,可在线阅读,更多相关《通讯录的设计.docx(12页珍藏版)》请在冰豆网上搜索。
![通讯录的设计.docx](https://file1.bdocx.com/fileroot1/2023-2/6/9c708b80-c14d-4694-96be-ed0470e7b708/9c708b80-c14d-4694-96be-ed0470e7b7081.gif)
通讯录的设计
一.设计目的:
通过完成本课题,进一步熟悉C语言的基本知识,并掌握数据结构的一些基本算法思想,掌握C语言的文件操作(包括从磁盘读入和向磁盘写入内容),进一步熟悉指针的用法,数组的建立运用和函数的调用等。
运用〈〈数据结构〉〉中的算法思想作数据结构,结合C语言基本知识,编写一个通讯录管理系统。
以把所学数据结构知识应用到实际软件开发中去。
二.设计的主要任务:
基本要求与内容:
①输入信息(Enter()):
调用此函数用以输入数据到内存中,此过程包括建立相应的链表或相应的数组,便于读取
②显示信息(Display()):
用以显示输入的数据,包括从内存中读出和从磁盘中读出
③查找(Search()):
以姓名作为关键字查找要找的信息
④删除信息(Delete()):
用以删除选定的输入信息(姓名作为关键字)
⑤存盘(Save()):
调用此函数将内存中的数据保存至磁盘中
⑥插入记录(Load()):
调用此函数用以将之前保存在磁盘的内容读入到内存中或显示到屏幕上
注:
本课题中输入的数据应包括以下几项信息:
姓名(NAME)性别(AGE)地址(CITY)电话(TELE)QQ号码(QQ)E-MAIL地址(E-MAILQQ)
三.基本要求:
要求随时能够插入一条记录或删除修改某条记录查询每一个同学的通讯记录并且能对这些记录进行排序。
通讯录的每一条信息包括姓名单位电话!
(字符数组)输入功能:
可以一次完成若干条信息的输入显示功能:
完成全部通讯录信息的显示(一屏最多显示10条超过十条应能够自动分屏显示)查找功能:
完成按姓名查找通讯信息删除功能:
完成按姓名删除通讯信息应提供一个界面来调用各个功能调用界面和各个功能的操作界面应尽可能清晰美观!
四.问题分析:
此程序主要运用到了文本文件的打开和读取,文件中存取信息的格式为结构体数组,一个主函数下面分为六个子函数,用户可在汉语的提醒下进行有关操作,此程序运行的前提是必须首先在编译器的子文件中建立一个文本文件,则可以在运行程序的过程中对这个文本文件进行相关读取。
读取文件是通过(fp=fopen(filename”w”))==NULL等语句来完成,文件内数据的位置是有主函数中定义的指针fp来找的,在此函数中还用到了循环语句while在加上(!
feof(fp))语句用于查找文件中的数据。
此程序没用到链表,故语言简单,但用文件的方法来创建一个通讯录有其不足之处,在总结中将一一说明。
1,段定义(segment)
1)代码段(datasegment)
变量的定义和预置:
datasegment
〈学生通讯录界面信息变量〉
〈出错信息变量〉
〈变量
结构体定义(studentstruc)
studentstruc
numdb00
namedb15dup(?
)
addressdb50dup(?
)
studentends
宏定义(名字macro
.......
endm)
showmacroaddress;界面显示
light_m1macroa;光标位置
light_m2macro
light_m3macro
clearmacro;当前显示页面上滚
clear1macro
clear2macro
again_1macro;空格
newlinemacro;换行
show_itemmacroaddress;显示信息
localnext1next2
getinmacroaddresscount;读入信息
locallp1lp2input_endexit
2)数据段定义
codesegment
mainprocfar
assumecs:
codeds:
dataes:
data
3)start
start:
movaxdata
movdsax
movah0
moval3
int10h
通讯录界面(show)
选择操作:
添加(i)
删除(d)
查询(q)
列表(排序)(l)
退出(e)
具体操作:
insertprocnear;插入
queryprocnear;查询
deleteprocnear;删除
listprocnear;游览列表
4)codeends;程序结束
endstart
五.总体设计:
⑴数据结构
依据给定的通讯录信息和数据格式,链表结点必须用结构实现。
结构类型的层次结构:
typedefstruct/*定义数据结构*/
);
charname[20];/*姓名*/
charsex[20];/*性别*/
charage[20];/*年龄*/
charnumber;/*学号*/
charunits[20];/*单位*/
chartele[12];/*电话*/
charqq[10];/*qq号码*
charE_Mail;/*邮箱*/
}
⑵模块划分
主函数
main()
输入记录
enter(ADDRESSt[]);
显示记录
voidlist(ADDRESSt[]intn);
按姓名查找显示记录
voidsearch(ADDRESSt[]intn);
删除记录
intdelete(ADDRESSt[]intn);
插入记录
intadd(ADDRESSt[]intn);
记录保存为文件
voidsave(ADDRESSt[]intn);/
从文件中读记录
intload(ADDRESSt[]);
按序号查找显示记录
voiddisplay(ADDRESSt[]);
按姓名排序
voidsort(ADDRESSt[]intn);
快速查找记录
voidqseek(ADDRESSt[]intn);
文件复制
voidcopy();
显示单条记录
voidprint(ADDRESStemp);
查找函数
intfind(ADDRESSt[]intnchar*s);
主菜单函数
intmenu_select();
⑶程序总体框架
六.编写源代码:
源程序代码:
#include"conio.h"
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"ctype.h"
#defineM50
typedefstruct
{
charname[15];
charsex[4];
charage[4];
charnumber[20];
charunits[15];
chartele[20];
charqq[15];
charE_Mail[10];
}
ADDRESS;
intenter(ADDRESSt[]);
voidlist(ADDRESSt[]intn);
voidsearch(ADDRESSt[]intn);
intdelete(ADDRESSt[]intn);
intadd(ADDRESSt[]intn);
voidsave(ADDRESSt[]intn);
intload(ADDRESSt[]);
voiddisplay(ADDRESSt[]);
voidsort(ADDRESSt[]intn);
voidqseek(ADDRESSt[]intn);
voidcopy();
voidprint(ADDRESStemp);
intfind(ADDRESSt[],intn,char*s);
intmenu_select();
main()
{
inti;
ADDRESSadr[M];
intlength;
clrscr();
while
(1)
switch(menu_select())
{
case0:
length=enter(adr);break;
case1:
list(adrlength);break;
case2:
search(adrlength);break;
case3:
length=delete(adrlength);break;
case4:
length=add(adrlength);break;
case5:
save(adrlength);break;
case6:
length=load(adr);break;
case7:
display(adr);break;
case8:
sort(adrlength);break;
case9:
qseek(adrlength);break;
case10:
copy();break;
case11:
exit(0);
}
}
menu_select()
{
chars[80];
intc;
textbackground(15);
textcolor
(2);
gotoxy(2612);
cprintf("DZ0503Names");
gotoxy(2514);
cprintf("YichengZhang");
textbackground(15);
textcolor(4);
gotoxy(125);
cprintf("pressanykeyentermenu......\n");
getch();
clrscr();
gotoxy(11);
textbackground(15);
textcolor
(2);
cprintf("****************DZ0503Names*******************\n\n");
printf("");
printf("0.Enterrecord\n");
printf("1.Listthefile\n");
printf("2.Searchrecordonname\n");
printf("3.Deletearecord\n");
printf("4.addrecord\n");
printf("5.Savethefile\n");
printf("6.Loadthefile\n");
printf("7.displayrecordonorder\n");
printf("8.sorttomakenewfile\n");
printf("9.Quickseekrecord\n");
printf("10.copythefiletonewfile\n");
printf("11.Exit\n");
cprintf("**********************************************\n");
do{
printf("\nEnteryouchoice(0~11):
");
scanf("%s"s);
c=atoi(s);
}while(c11);
returnc;
}
intenter(ADDRESSt[])
{
intin;
char*s;
clrscr();
printf("\npleaseinputnum\n");
scanf("%d"&n);
printf("pleaseinputrecord\n");
printf("\n\n*******************DZ0503NamesAddress******************\n");
printf("\n\t\name:
");
printf("\n\tex:
");
printf("\n\t\age:
");
printf("\n\t\number:
");
printf("\n\t\units:
");
printf("\n\t\tele:
");
printf("\n\t\qq:
");
printf("\n\t\E_Mail:
");
printf("------------------------------------------------\n");
}
voidlist(ADDRESSt[]intn)
{
inti;
clrscr();
printf("\n\n*******************DZ0503NamesAddress******************\n");
printf("name\n");
printf("sex\n");
printf("age\n");
printf("number\n");
printf("units\n");
printf("tele\n");
printf("qq\n");
printf("E_Mail\n");
printf("------------------------------------------------\n");
returnn;
{
printf("Pressanykeycontinue...\n");
getch();
}
printf("************************end*******************\n");
}
voidsearch(ADDRESSt[]intn)
{
chars[20];
inti;
clrscr();
printf("pleasesearchname\n");
scanf("%s"s);
i=find(tns);
if(i>n-1)
printf("notfound\n");
else
print(t[i]);
}
voidprint(ADDRESStemp)
{
clrscr();
printf("\n\n********************************************\n");
printf("name\n");
printf("sex\n");
printf("age\n");
printf("number\n");
printf("units\n");
printf("tele\n");
printf("qq\n");
printf("E_Mail\n");
printf("------------------------------------------------\n");
printf("%-20s%-30s%-10s\n"temp.name);