C语言课程设计参考模型一《电子通讯管理系统》Word格式.docx
《C语言课程设计参考模型一《电子通讯管理系统》Word格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计参考模型一《电子通讯管理系统》Word格式.docx(13页珍藏版)》请在冰豆网上搜索。
qingxuanzhexuhao:
"
);
choose=getch();
/*函数getch()的功能是从键盘上读入一个单独的字符,字符不回显在屏幕上*/
switch(choose)
{case'
1'
:
mycreate();
break;
case'
2'
mydisplay();
3'
mysearch();
4'
mymodify();
5'
myadd();
6'
mydelete();
7'
mysort();
0'
default:
printf("
\n%c为非法选项!
\n"
choose);
}
if(choose=='
)break;
\n要继续选择吗(Y/N)?
{yes_no=getche();
}while(yes_no!
='
Y'
&
&
yes_no!
='
y'
N'
n'
}while(yes_no=='
||yes_no=='
}
voidmyprint()/*显示菜单界面*/
{clrscr();
\n\n\n\n\n\n"
------------------------------------------------------------\n"
|请输入选项编号(0~7):
|\n"
|-------------------------------------------------------------|\n"
|1---创建通讯录|\n"
|2---显示通讯录|\n"
|3---查询通讯录|\n"
|4---修改通讯录|\n"
|5---添加通讯录|\n"
|6---删除通讯录|\n"
|7---排序通讯录|\n"
|0---退出|\n"
/*定义创建通讯录的函数*/
voidmycreate()
{inti=1;
structstudenttemp;
FILE*fp;
/*定义fp为文件指针*/
fp=fopen("
D:
\\lyc\\jilu.dat"
"
w"
if(fp==NULL){printf("
\n打开文件失败!
return;
\n请输入第1个记录:
学号(用#结束输入):
"
do
{gets(temp.num);
}while(strcmp(temp.num,"
)==0);
姓名(用#结束输入):
gets(temp.name);
电话号码(用#结束输入):
gets(temp.tel);
while(temp.num[0]!
#'
temp.name[0]!
temp.tel[0]!
)
{fprintf(fp,"
%23s%15s%15s\n"
temp.num,temp.name,temp.tel);
/*向以fp为指针的文件中写数据*/
i++;
\n请输入第%d个记录:
i);
学号(用#结束输入):
{gets(temp.num);
姓名(用#结束输入):
电话号码(用#结束输入):
fclose(fp);
/*定义显示通讯录的函数*/
voidmydisplay()
{intn=0;
r"
if(fp==NULL)
{printf("
clrscr();
学号姓名电话号码\n"
while(feof(fp)==0)
{fscanf(fp,"
/*从以fp为指针的文件中读数据*/
%23s%15s%15s\n"
n++;
if(n==0)
\n文件中无记录!
else
\n文件中共有%d个记录!
n);
/*定义查询通讯录的函数*/
voidmysearch()
{charc;
\n按学号查询(h),还是按姓名查询(m)?
c=getche();
if(c=='
h'
||c=='
H'
)sch_num(fp);
/*按学号查询*/
elseif(c=='
m'
M'
)sch_name(fp);
/*按姓名查询*/
elseprintf("
\n非法字符!
/*定义按学号查询通讯录的函数*/
voidsch_num(FILE*fp)
{intflag=0,n=0;
chartempnum[10];
\n请输入要查询记录的学号:
gets(tempnum);
&
temp.num,&
temp.name,&
temp.tel);
if(strcmp(tempnum,temp.num)==0)
{if(flag==0)
flag=1;
if(n==0)printf("
elseif(flag==0)printf("
\n文件中无此人!
/*定义按姓名查询通讯录的函数*/
voidsch_name(FILE*fp)
{
intflag=0,n=0;
chartempname[10];
\n请输入要查询记录的姓名:
gets(tempname);
if(strcmp(tempname,temp.name)==0)
{if(flag==0)printf("
学号姓名电话号码\n"
/*定义修改通讯录的函数*/
voidmymodify()
intn=0;
structstudent*find,temp,record[100],*p;
/*最多100个记录*/
if(fp==NULL){printf("
p=record;
p->
num,p->
name,p->
tel);
p++;
n++;
fclose(fp);
if(n==0){printf("
\n请输入要修改记录的学号:
gets(temp.num);
for(p=record;
p<
record+n;
p++)
if(strcmp(temp.num,p->
num)==0)
{find=p;
}/*find记住修改记录的位置*/
if(p==record+n)
\n无此人!
\n请输入正确的学号:
请输入正确的姓名:
请输入正确电话号码:
if((strcmp(temp.num,p->
num)==0)&
(p!
=find))
\n学号重复,要重新输入吗(Y/N)?
{c=getche();
}while(c!
c!
putchar('
\n'
break;
{*find=temp;
/*find指向需修改记录的位置*/
}while(c=='
fp=fopen("
if(fp==NULL){printf("
fprintf(fp,"
/*定义添加通讯录的函数*/
voidmyadd()
intn=0;
structstudenttemp,record[N],*p;
\n请输入新记录的学号:
请输入新记录的姓名:
请输入新记录的电话号码:
c!
putchar('
if(p==record+n){*p=temp;
if(fp==NULL)
record+n+1;
/*定义删除通信录的函数*/
voidmydelete()
\n按学号删除(h),还是按姓名删除(m)?
)del_num(fp);
/*按学号删除*/
)del_name(fp);
/*按姓名删除*/
/*定义按学号删除通信录的函数*/
voiddel_num(FILE*fp)
{chartempnum[10];
structstudentrecord[N],*p,*k;
\n请输入要删除记录的学号:
for(k=record;
k<
k++)
if(strcmp(tempnum,k->
num)==0)break;
/*找到要删除记录结束循环*/
if(k<
record+n)/*提前结束循环,说明找到次人*/
for(p=k;
k+n-1;
p++)/*向左移一位,相当于删除记录*/
*p=*(p+1);
for(p=record;
record+n-1;
/*定义按姓名删除通讯录的函数*/
voiddel_name(FILE*fp)
{chartempname[10];
\n请输入要删除记录的姓名:
k++)
if(strcmp(tempname,k->
name)==0)break;
if(k<
record+n)
p++)/*删除记录*/
elseprintf("
/*定义排序通讯录的函数*/
voidmysort()
\n按学号排序(h),还是按姓名排序(m)?
)sort_num();
/*按学号排序*/
)sort_name();
/*按姓名排序*/
/*定义按学号排序通讯录的函数*/
voidsort_num()
{inti,j,k,n=0;
charc;
structstudentrecord[N],*p,temp;
\n按升序(s),还是按降序(j)?
s'
S'
)/*按学号的升序排列*/
for(i=0;
i<
n-1;
i++)/*选择法排序*/
{k=i;
for(j=i+1;
j<
n;
j++)
if(strcmp((p+k)->
num,(p+j)->
num)>
0)k=j;
temp=*(p+k);
*(p+k)=*(p+i);
*(p+i)=temp;
elseif(c=='
j'
J'
)/*按学号的降序排列*/
num)<
else{printf("
{fprintf(fp,"
/*定义按姓名排序通讯录的函数*/
voidsort_name()
inti,j,k,n=0;
\n按生序(s)还是按降序(j)?
c=getche();
)/*按姓名的升序排列*/
name,(p+j)->
name)>
)/*按姓名的降序排列*/
name)<
0)k=j;
\\lyc\\j