《C程序设计》课程期末大作业:个人手机通讯录

2024-12-14 13:59:31
推荐回答(1个)
回答1:

/ * 10.3.2源* /
/ ******的头文件(H)*********** /
的#include“stdio.h中”/ * I / O函数* /
#包括“stdlib.h中”/ *标准库函数* /
的#include“string.h中”/ *字符串函数* /
包括“CTYPE。 H“/ *字符处理函数* /
定义M 50 / *定义常量显示的记录数* /
typedef结构/ *定义数据结构* /
{
>
字符的名称[20]
/ *名称* /字符单位[30]; / *单元* /
字符长焦,[10];
/ *联系电话* /}地址;
/ ******以下的函数原型******* /
整数输入(地址T []); / *输入记录* / />虚空列表(地址T [],诠释n)/ *记录* /
无效搜索(地址T [],N); / *搜索名称记录* /
诠释删除(地址T [],N); / *删除记录* /
诠释添加(地址T [],N)/ *插入记录* /
无效保存(地址T [],INT N)/ *记录保存的文件* /
诠释负载(地址T []); / *读取文件记录* /
无效显示器(地址T []); / *查找序列号显示的记录* /
无效排序(地址T [],n)的排序的名字* / * /
的无效qseek(ADDRESS T [],INT N)/ *快速查找记录* /
无效副本(); / *复制文件* /
无效打印(ADDRESS温度)/ *显示一个单独的记录* /
INT找到(地址T [],INT N,字符的开始*******); / *查找函数* /
menu_select(); / *主菜单函数* /
/ ******的主要功能/
()
{
诠释;
地址ADR [M] / *定义一个结构体数组* /
int长度; / *保存记录长度* / / / *清屏* /
为(;} / *无限循环* /
{
Clrscr();开关(menu??_select())/ *调用主菜单函数的返回值整数的条件switch语句* /
{
情况下,0:长=输入(亩笑ADR);休息;/ *输入记录* /
案例1:名单(ADR,长度);打破; / *显示所有记录* /

案例迅正含2:搜索(ADR,长度);打破; / *查找记录* /
情况:长度=删除(ADR,长度);打破; / *删除记录* /
情况下,4:长度=加(ADR,长度);的纪录打破; / *插入* /
案例5:保存(ADR,长度);打破; / *保存文件* /
案例6:长度=负载(ADR);打破; / *读取该文件* /
案例7:显示器(ADR );突破; * /
/ *创纪录的情况下,通过串行排序(ADR,长度);打破; / *按名称排序* /
情况:qseek(ADR,长度);打破; / *快速查清销找记录* /
情况下,10:复制();打破; / *将文件* /
案例11:出口(0)/ *返回值11程序结束* / }
}
}
/ *菜单函数,该函数返回一个整数,代表所选的菜单项目* /

menu_select() {
个char [80];
诠释三;
gotoxy(1,25);/ *将光标移动到第25行,* /
输出( “按任意键进入菜单...... \ n”);/ *提示按任意键继续* /
的getch(); / *读入任何字符* / /> Clrscr(); / *清屏* /
gotoxy(1,1);
printf的(“******************* * MENU ********************* \ n \ n“);
printf的(”0。输入记录\ n“);
printf(“请1。列出文件\ n”);
printf的(“2。搜索记录名称\ n”);
printf的(“3。删除记录\ n”); BR /> printf(“请4。添加记录\?? n”);
printf的(“5。保存文件\ n”);
printf的(“6。加载文件\ n”); BR /> printf的(“7。显示记录的订单\ n”);
printf的(“8。排序的使新的文件\ n”);
printf的(“9。快速寻找记录\ n “);
printf的(”10。将该文件复制到新文件\ n“);
printf的(”11。退出\ n“);
printf的(”***** ****************************************** \ n“);
printf的(“\ n请输入你的专家在1-800 - (0至11):”); / *提示符下输入* /
scanf的(“%s的“); / *输入选择项* /
C = atoi的(S); / *输入字符串转换成整数* /
},而(C 11) / *选择的项目不是0到11之间的重量损失* /
回报的; / *返回选项的数量,主程序调用相应的函数* /}

/ ***输入记录的参数数组,结构,函数值的返回类型为整数表示记录长度* /
整数输入(地址T [])
{
我的n;
的char *;
Clrscr(); / *清晰的画面* /
printf的(“\ n请输入数\ n”); / *消息* /
scanf函数( “%D”,&N); / *输入的记录数* /
printf的(“请输入记录\ n”); / *提示记录* /
printf的(“名称单位+ 852-39622829 \ n“);
printf的(”; ---------------------------------- -------------- \ n“);
为(i = 0; I {
scanf函数(”% s%s的%“,T [I]。名称,T [i]的单位,T [i]的远程); / *输入记录* /
输出(----------- ----------------------------------- \ n“);
}
回报N; / *返回的记录数* /
}
/ *记录,参数是一个数组,记录的记录数* /
无效列表(地址T [],廉政n )
{
我;
clrscr();
printf的(“\ n \ n ****************** *地址****************** \ n“);
printf(”请名称单位电话\ n“);
printf的(”--- --------------------------------------------- \ n“);
(i = 0; printf的(“%-20S%的30岁%-10S \ n”,T [I]。名称,T [I]单位,T [i]的远摄);
((i +1)%10 == 0)/ *判断是否输出10 * /
{
printf的(“新闻任意键继续... \ n“); / *消息* /
的getch(); / *按任意键继续* /
}
printf的(”***** *******************结束******************* \ n“);
} BR /> / *查找的记录* /
无效搜索(地址T [],INT)
{
个char [20]; / *保存找到的名称字符串* /
; / *保存找到的序列号节点* /

Clrscr(); / *清屏* /
printf的(“请搜索名称\ n“);
scanf的(”%s“); / *输入要查找姓名* /
我发现(T,N,S); / *调用查找功能,整数* /
倘(i> n-1个整数i的值大于N-1)/ *如果没有找到* /
printf的(“没有找到\ n “);
其他
(T []); / *找到,来电显示功能记录* /

}
/ *指定了一个记录/
无效打印(地址:TEMP)
{
Clrscr();
printf的(“\ n \ n ************** ****************************** \ n“);
printf(”请名称单位电话\ n“);
printf(“请------------------------------------------- ----- \ n“);
printf的(”%-20S%10%的30岁\ n“,temp.name,temp.units,temp.tele);
printf的(” **********************结束*********************** \ n“)
}
/ *查找函数参数是一个数组,记录,记录的数量和名称的S * /
INT找到(地址T [],整数N,字符* S) BR /> {

为(i = 0; /> {
(STRCMP(S,T [i]的。名)== 0)/ *创纪录的名称和比较的名称等于* /
返回; / *等于回报记录下的标签,该方案在提前结结束* /
}
回报我; / *返回i的值* /
}
/ *删除功能参数阵列记录的记录数* /
删除(ADDRESS T [],INT)
{
个char [20]; / *要删除记录的名称* / BR />诠释CH = 0;
INT I,J;
printf的(“请删除的名称\ n”); / *消息* /
scanf函数(“%s”,S) ;/ *输入名称* /
我找到(T,N,S); / *调用find函数* /
(N-1)/ *如果i> N- 1年多的长度数组* /
printf的(“没有发现不删除\ n”); / *没有找到要删除的记录* /
其他
{
>打印(T []); / *调用输出函数记录信息* /
printf的(“你确定删除它(1/0)\ n”); / *确认您要删除* /
scanf的(“%d”,&CH)/ *输入一个整数0或1 * /
如果(CH == 1)/ *确认删除整数1 * / BR /> {
为(J = I +1,J {
使用strcpy( T [J-1]。名称,T [J]。名); / *创纪录的副本的名称在以前的文章中* /
使用strcpy(T [J-1]。单位,T [J 。单位); / *拷贝后,一个记录单元,前一个* /
使用strcpy(T [j-1]。望远,T [J]。远程);记录电话之前* / / *复制后
}
N - / *记录数减1 * /
}
}
返回n / *返回的记录数* / }
/ *插入记录函数的参数数组的结构和数量的记录* /
诠释添加(地址T [] N)/ *插入功能,结构数组的参数和的记录数* /
{
地址的温度; / *新插入的记录信息* /
INT I,J;
printf的(“请输入记录\ n”);
printf的(“********************** ************************** \ n“);
printf(”请名称单位电话\ n“);
printf(“请----------------------------------------------- --- \ n“);
scanf的(”%s%s%S“,temp.name,temp.units,temp.tele”); / *输入插入信息* /
/> printf(“请--------------------------------------------- --- \ n“);
printf的(”请输入查找名称\ n“);
scanf函数(”%S“,S); / *输入插入位置的名称* /
I =(T,N,S); / *调用查找,确定插入的位置* /
(J = N-1,J> =; - )/ *从去年开始,节点向后移动一个* /

使用strcpy(T [j +1的名称,T [J]。名); / *名称的当前记录复制到一个* / /> STRCPY(T [j +1]中的单位,T [j]的单位); / *将当前记录的单位* /
在一个使用strcpy(T [j +1]中,远程,吨[J 。远程); / *当前记录的电话复制到* /
}
使用strcpy(T [I]。名称,临时名称); / *名称的新插入的记录复制到我个位置* /
使用strcpy(T []单位,temp.units); / *复制新插入的记录单位的第i个位置* /
STRCPY(T [i]的远程temp.tele); / *将新插入的记录,调用第i个位置* /
N + +; / *的记录数加1 * /
返回n; / *返回的记录数* /
}
/ *保存功能,结构数组的参数的记录数* /
无效的保存(地址T [],N)
> {
我的
FILE * FP / *指针指向文件* /
((FP =打开(“record.txt,”WB“))== NULL) / *打开文件,并判断它是否是正常* /

{
printf的(“无法打开文件\ n”);/ *不公开* /
出口(1)/ *退出* /
}
printf的(“\ nSaving文件\ n”); / *输出信息* /
fprintf(FP,“%d”的,正); / *号的记录写入文件* /
fprintf(FP,“\ r \ n”); / *换行写入文件* /
(i = 0; I < N;我+ +)
{
fprintf(FP,“%-20S%-30S%-10S”,T [I]。名称,T []的单位,T [i]的远程) ;/ *写入记录的格式* /
fprintf(FP,“\ r \ n”); / *换行写入到文件中* /
}
FCLOSE(FP); / *关闭文件* /
printf的(“****保存成功*** \ n”); / *保存成功* /
}
/ *读入功能参数是一个结构体数组* /
负载(ADDRESS T [])
{
我的n FILE * FP
; / *指向该文件的指针* /
((FP = FOPEN(的“record.txt”,“包”))== NULL)/ *打开文件* /
{
printf的(“无法打开文件\ N“); / *不能打开* /
出口(1); / *退出* /
}
fscanf(FP,”%d“,&N); / *读到的记录数* /
(i = 0; fscanf(FP,“%20S%30岁%10”,T [i]的名称,T [i]的单位,T [i]的。远程); / *读入的记录格式* /
FCLOSE(FP); / *关闭文件* /
printf的(“您已经成功从文件中读取数据!\ n“); / *保存成功* /
返回n / *返回的记录数* /

}
/ *连续记录功能* /
无效显示器(地址T [])

{
int的ID,正
FILE * FP / *指针指向文件* /
((FP = FOPEN(的“record.txt”,“包”))== NULL)/ *打开文件* /
{
printf的(“不能打开的文件\ n“); / *不能打开文件* /
出口(1); / *退出* /

}
printf的(”请输入订单号。 \ n“); / *显示信息* /
scanf的(”%d“,&ID); / *输入序列号* /
fscanf(FP,”%d“,& N); / *从文件中读取的记录数* /
(ID> = 0 && ID
FSEEK(FP(ID-1)* sizeof(ADDRESS)的,1); / *记录位置移动文件指针* /
([ID]); / *调用显示输出功能的记录* /
printf的(“\ r \ n”;};
}
其他
printf的(“%d号记录!!\ n “,身份证); / *如果序列号是不合理的显示信息* /
FCLOSE(FP); / *关闭文件* /
}
/ *排序函数,参数结构数组的记录数* /
无效排序(地址T [],INT)
{
INT I,J,标志;
地址温度; / *临时变量做交换数据* /
(i = 0; I {
标志= 0; / *设置标志位来判断是否交换* / BR />(J = 0; J ((STRCMP(T [J]。名称,T [j +1]中的名字))> 0)/ *比较大小* /
{
标志= 1;
temp.name T [J]。名称使用strcpy(); / *交换记录* /
使用strcpy(temp.units ,T [j]的单位);
的strcpy(temp.tele,T [J]远程);
使用strcpy(T [J]。名称,T [j +1]中的名称); BR /> STRCPY(T [J]。单位,T [j +1]中。单位);
的strcpy(T [J]。远程,T [j +1]中。远程);
STRCPY (T [j +1]中的名字,temp.name);
STRCPY(T [J + 1]。单位,temp.units);
使用strcpy(T [j +1]中。远程, temp.tele);
}
(标志== 0)打破; / *如果该标志被设置为0,表示的交换周期还没有结束* / }
printf(“请排序sucess!\ n”); / *排序成功* /
}
/ *快速查找,参数是数组的结构和数量的记录* /
的无效qseek(地址的T [],INT)
{
个char [20];
INT L,R,M;
printf的(“ \ n请排序前qseek!\ n“); / *提示您确认发现之前的纪录是排序* /
printf的(”请输入您的名字的qseek \ n“); / *提示输入* /
scanf函数(“%s”); / *输入搜索名称* /
L = 0,R = N-1; / *设置左边框边框和右边框的初始值* / BR />(L <= R)/ *当左保证金<=右框线* /
{
M =(L + R)/ 2; / *计算的中间位置* / BR />(STRCMP(T [M]。名称,s)== 0)/ *中间节点名称“字段中比较判处等于* /
{
打印(吨[M] )/ *如果他们是平等的,然后调用打印功能显示记录信息* /
回报; / *返回* /
}
(STRCMP(T [M]。名称, S)<0)/ *如果中间节点* /
L = M +1; / *的左边距* /
其他
R = M-1; / *否则,中间节点上,右边距* /
}
(L> R)/ *如果左边距为大于正确的边界* /
printf的(“没有找到\ n “); / *没有找到* /
}
/ *复制文件* /
无效的副本()
{
字符OUTFILE [20]; / *目标文件名* /
INT I,N;
地址温度[M] / *定义临时变量* /
FILE * SFP全要素生产率; / *定义的点文件指针/
Clrscr,();/ *清屏* /
((SFP =打开(“record.txt”包“))== NULL)/ *打开日志文件* /
{
printf的(“无法打开文件\ n”); / *不能打开的文件信息* /
退出(1); / *退出* / }
printf的(“请输入OUTFILE名称,例如C:\ \ F1 \ \ te.txt:\ n”); / *消息* /
scanf的(“%s”,OUTFILE); / *输入目标文件名* /
如果((TFP =打开(OUTFILE,“WB”))== NULL)/ *打开目标文件* /
{
输出( “无法打开文件\ n”); / *显示无法打开的文件信息* /
出口(1)/ *退出* /

}
fscanf (SFP,“%d”,&N); / *读取文件的记录数* /
fprintf(TFP,“%D”,N);/ *写入目标文件的数量* / BR /> fprintf(TFP,“\ r \ n”); / *写换行* /
(i = 0; {
fscanf( SFP,“%20S%30多岁了%10s \ n”,临时[i]的名称,温度[i]的单位,
温度[I]。远程); / *读入的记录* / 温度[i]的单位,TEMP [我长焦)/ *写入记录* / /> fprintf(TFP,“\ r \ n”); / *写换行* /
}
FCLOSE(SFP); / *关闭源文件* /
FCLOSE(TFP ); / *关闭目标文件* /
printf的(“你已经成功复制文件!\ n”); / *成功复制。 * /}