c语言课程设计通讯录管理系统Word文件下载.docx
- 文档编号:21113199
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:20
- 大小:88.11KB
c语言课程设计通讯录管理系统Word文件下载.docx
《c语言课程设计通讯录管理系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言课程设计通讯录管理系统Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
#include"
stdio.h"
/*I/O函数*/
stdlib.h"
/*标准库函数*/
string.h"
/*字符串函数*/
ctype.h"
/*字符操作函数*/
#defineM50/*定义常数表示记录数*/
}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);
/*查找函数*/
沈阳大学
课程设计说明书NO.3
intmenu_select();
/*主菜单函数*/
/******主函数开始*******/
main()
inti;
ADDRESSadr[M];
/*定义结构体数组*/
intlength;
/*保存记录长度*/
clrscr();
/*清屏*/
for(;
;
)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
case0:
length=enter(adr);
break;
/*输入记录*/
case1:
list(adr,length);
/*显示全部记录*/
case2:
search(adr,length);
/*查找记录*/
case3:
length=delete(adr,length);
case4:
length=add(adr,length);
break;
case5:
save(adr,length);
/*保存文件*/
case6:
length=load(adr);
/*读文件*/
case7:
display(adr);
/*按序号显示记录*/
case8:
sort(adr,length);
case9:
qseek(adr,length);
case10:
copy();
/*复制文件*/
case11:
exit(0);
/*如返回值为11则程序结束*/
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
课程设计说明书NO.4
menu_select()
chars[80];
intc;
gotoxy(1,25);
/*将光标定为在第25行,第1列*/
printf("
pressanykeyentermenu......\n"
);
/*提示压任意键继续*/
getch();
/*读入任意字符*/
gotoxy(1,1);
********************MENU*********************\n\n"
printf("
0.Enterrecord\n"
1.Listthefile\n"
2.Searchrecordonname\n"
3.Deletearecord\n"
4.addrecord\n"
5.Savethefile\n"
6.Loadthefile\n"
7.displayrecordonorder\n"
8.sorttomakenewfile\n"
9.Quickseekrecord\n"
10.copythefiletonewfile\n"
11.Quit\n"
***********************************************\n"
do{
\nEnteryouchoice(0~11):
"
/*提示输入选项*/
scanf("
%s"
s);
/*输入选择项*/
c=atoi(s);
/*将输入的字符串转化为整型数*/
课程设计说明书NO.5
}while(c<
0||c>
11);
/*选择项不在0~11之间重输*/
returnc;
/*返回选择项,主程序根据该数调用相应的函数*/
/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
intenter(ADDRESSt[])
inti,n;
char*s;
\npleaseinputnum\n"
/*提示信息*/
%d"
&
n);
/*输入记录数*/
pleaseinputrecord\n"
/*提示输入记录*/
nameunittelephone\n"
------------------------------------------------\n"
for(i=0;
i<
n;
i++)
%s%s%s"
t[i].name,t[i].units,t[i].tele);
----------------------------------------------\n"
returnn;
/*返回记录条数*/
/*显示记录,参数为记录数组和记录条数*/
voidlist(ADDRESSt[],intn)
\n\n*******************ADDRESS******************\n"
课程设计说明书NO.6
printf("
%-20s%-30s%-10s\n"
if((i+1)%10==0)/*判断输出是否达到10条记录*/
Pressanykeycontinue...\n"
/*压任意键继续*/
************************end*******************\n"
/*查找记录*/
voidsearch(ADDRESSt[],intn)
chars[20];
/*保存待查找姓名字符串*/
/*保存查找到结点的序号*/
pleasesearchname\n"
/*输入待查找姓名*/
i=find(t,n,s);
/*调用find函数,得到一个整数*/
if(i>
n-1)/*如果整数i值大于n-1,说明没找到*/
notfound\n"
else
print(t[i]);
/*找到,调用显示函数显示记录*/
/*显示指定的一条记录*/
voidprint(ADDRESStemp)
课程设计说明书NO.7
\n\n********************************************\n"
temp.name,temp.units,temp.tele);
**********************end***********************\n"
/*查找函数,参数为记录数组和记录条数以及姓名s*/
intfind(ADDRESSt[],intn,char*s)
i++)/*从第一条记录开始,直到最后一条*/
if(strcmp(s,t[i].name)==0)/*记录中的姓名和待比较的姓名是否相等*/
returni;
/*相等,则返回该记录的下标号,程序提前结结束*/
/*返回i值*/
/*删除函数,参数为记录数组和记录条数*/
intdelete(ADDRESSt[],intn)
/*要删除记录的姓名*/
intch=0;
inti,j;
pleasedeletedname\n"
/*输入姓名*/
课程设计说明书NO.8
/*调用find函数*/
n-1)/*如果i>
n-1超过了数组的长度*/
nofoundnotdeleted\n"
/*显示没找到要删除的记录*/
/*调用输出函数显示该条记录信息*/
Areyousuredeleteit(1/0)\n"
/*确认是否要删除*/
ch);
/*输入一个整数0或1*/
if(ch==1)/*如果确认删除整数为1*/
for(j=i+1;
j<
j++)/*删除该记录,实际后续记录前移*/
strcpy(t[j-1].name,t[j].name);
/*将后一条记录的姓名拷贝到前一条*/
strcpy(t[j-1].units,t[j].units);
/*将后一条记录的单位拷贝到前一条*/
strcpy(t[j-1].tele,t[j].tele);
/*将后一条记录的电话拷贝到前一条*/
n--;
/*记录数减1*/
/*返回记录数*/
/*插入记录函数,参数为结构体数组和记录数*/
intadd(ADDRESSt[],intn)/*插入函数,参数为结构体数组和记录数*/
ADDRESStemp;
/*新插入记录信息*/
/*确定插入在哪个记录之前*/
课程设计说明书NO.9
pleaseinputrecord\n"
************************************************\n"
--------------------------------------------------\n"
/*输入插入信息*/
pleaseinputlocatename\n"
/*输入插入位置的姓名*/
/*调用find,确定插入位置*/
for(j=n-1;
j>
=i;
j--)/*从最后一个结点开始向后移动一条*/
strcpy(t[j+1].name,t[j].name);
/*当前记录的姓名拷贝到后一条*/
strcpy(t[j+1].units,t[j].units);
/*当前记录的单位拷贝到后一条*/
strcpy(t[j+1].tele,t[j].tele);
/*当前记录的电话拷贝到后一条*/
strcpy(t[i].name,temp.name);
/*将新插入记录的姓名拷贝到第i个位置*/
strcpy(t[i].units,temp.units);
/*将新插入记录的单位拷贝到第i个位置*/
strcpy(t[i].tele,temp.tele);
/*将新插入记录的电话拷贝到第i个位置*/
n++;
/*记录数加1*/
/*保存函数,参数为结构体数组和记录数*/
voidsave(ADDRESSt[],intn)
FILE*fp;
/*指向文件的指针*/
if((fp=fopen("
record.txt"
"
wb"
))==NULL)/*打开文件,并判断打开是否正常*/
课程设计说明书NO.10
cannotopenfile\n"
/*没打开*/
exit
(1);
/*退出*/
\nSavingfile\n"
/*输出提示信息*/
fprintf(fp,"
n);
/*将记录数写入文件*/
\r\n"
/*将换行符号写入文件*/
%-20s%-30s%-10s"
/*格式写入记录*/
fclose(fp);
/*关闭文件*/
****savesuccess***\n"
/*显示保存成功*/
/*读入函数,参数为结构体数组*/
intload(ADDRESSt[])
rb"
))==NULL)/*打开文件*/
/*不能打开*/
fscanf(fp,"
/*读入记录数*/
课程设计说明书NO.11
%20s%30s%10s"
/*按格式读入记录*/
/*关闭文件*/
Youhavesuccessreaddatafromfile!
!
\n"
/*按序号显示记录函数*/
voiddisplay(ADDRESSt[])
intid,n;
))==NULL)/*打开文件*/
/*不能打开文件*/
Enterordernumber...\n"
/*显示信息*/
id);
/*输入序号*/
/*从文件读入记录数*/
if(id>
=0&
&
id<
n)/*判断序号是否在记录范围内*/
fseek(fp,(id-1)*sizeof(ADDRESS),1);
/*移动文件指针到该记录位置*/
print(t[id]);
/*调用输出函数显示该记录*/
no%dnumberrecord!
\n"
id);
/*如果序号不合理显示信息*/
课程设计说明书NO.12
/*排序函数,参数为结构体数组和记录数*/
voidsort(ADDRESSt[],intn)
inti,j,flag;
/*临时变量做交换数据用*/
flag=0;
/*设标志判断是否发生过交换*/
for(j=0;
n-1;
j++)
if((strcmp(t[j].name,t[j+1].name))>
0)/*比较大小*/
flag=1;
strcpy(temp.name,t[j].name);
/*交换记录*/
strcpy(temp.units,t[j].units);
strcpy(temp.tele,t[j].tele);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].units,t[j+1].units);
strcpy(t[j].tele,t[j+1].tele);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].units,temp.units);
strcpy(t[j+1].tele,temp.tele);
if(flag==0)break;
/*如果标志为0,说明没有发生过交换循环结束*/
sortsucess!
/*显示排序成功*/
}
课程设计说明书NO.13
/*快速查找,参数为结构体数组和记录数*/
voidqseek(ADDRESSt[],intn)
intl,r,m;
\nPleasesortbeforeqseek!
/*提示确认在查找之前,记录是否已排序*/
pleaseenternameforqseek\n"
/*提示输入*/
/*输入待查找的姓名*/
l=0;
r=n-1;
/*设置左边界与右边界的初值*/
while(l<
=r)/*当左边界<
=右边界时*/
m=(l+r)/2;
/*计算中间位置*/
if(strcmp(t[m].name,s)==0)/*与中间结点姓名字段做比较判是否相等*/
print(t[m]);
/*如果相等,则调用print函数显示记录信息*/
return;
/*返回*/
if(strcmp(t[m].name,s)<
0)/*如果中间结点小*/
l=m+1;
/*修改左边界*/
r=m-1;
/*否则,中间结点大,修改右边界*/
if(l>
r)/*如果左边界大于右边界时*/
/*显示没找到*/
/*复制文件*/
voidcopy()
课程设计说明书NO.14
charoutfile[20];
/*目标文件名*/
ADDRESStemp[M];
/*定义临时变量*/
FILE*sfp,*tfp;
/*定义指向文件的指针*/
/*清屏*/
if((sfp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 通讯录 管理 系统