计算机专业第一次课程设计好难啊,求解大神帮忙解答~
1、通讯录管理系统:该系统通过文本菜单进行操作,功能包括:创建通讯录、显示记录、查询记录添加记录、删除记录和记录排序等,各功能模块均采用独立的函数来表示,通过主函数直接或是间接调用。
(1)程序如下:
#define N 5
#include <stdio.h>
#include <string.h>
#include <conio.h>
void myprint();
void mycreat(char numtel[N][10],char nametel[N][10],char tel[N][10]);
void mydisplay(char numtel[N][10],char nametel[N][10],char tel[N][10]);
void mysearch(char num[N][10],char name[N][10],char tel[N][10]);
void mymodify(char num[N][10],char name[N][10],char tel[N][10]);
void myadd(char num[N][10],char name[N][10],char tel[N][10]);
void mydelete(char num[N][10],char name[N][10],char tel[N][10]);
void mysort(char num[N][10],char name[N][10],char tel[N][10]);
void sch_num(char num[N][10],char name[N][10],char tel[N][10]);
void sch_name(char num[N][10],char name[N][10],char tel[N][10]);
void main()
{
char choose,yes_no ;
char num[N][10],name[N][10],tel[N][10];
do
{
myprint(); / *显示菜单 */
printf(" ");
choose=getchar();
switch(choose)
{
case '1' :
mycreat(num,name,tel);
break ;
case '2' :
mydisplay(num,name,tel);
break ;
case '3' :
mysearch(num,name,tel);
break ;
case '4' :
mymodify(num,name,tel);
break ;
case '5' :
myadd(num,name,tel);
break ;
case '6' :
mydelete(num,name,tel);
break ;
case '7' :
mysort(num,name,tel);
break ;
case '0' :
break ;
default :
printf("\n %c为非法选项!\n",choose);
}
if(choose=='0')
break ;
printf("\n 要继续选择吗(Y/N)?\n");
do
{
yes_no=getchar();
} while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
} while(yes_no!='Y'||yes_no!='y');
}
void myprint( )
{ // 显示菜单
printf("\n\n\n\n\n\n\n");
printf(" \n");
printf(" 请输入选项编号(0--7) \n");
printf(" 1---创建通讯录 \n");
printf(" 2---显示通讯录 \n");
printf(" 3---查询通讯录 \n");
printf(" 3---查询通讯录 \n");
printf(" 5---添加通讯记录 \n");
printf(" 6---删除通讯记录 \n");
printf(" 7---排通讯记录 \n");
printf(" 0---退出 \n");
printf(" \n");
}
void mycreat(char num[N][10],char name[N][10],char tel[N][10])
{ // 创建通讯录
int i ;
for(i=0;i<N;i++)
{
printf("\n");
printf("请输入第%d个记录:\n",i+1);
printf("学号:");
do
{
gets(num[i]);
}while(strcmp(num[i],"")==0); /* 学号不能为空 */
printf("姓名:");
gets(name[i]);
printf("电话号码:");
gets(tel[i]);
}
return ;
}
void mydisplay(char num[N][10],char name[N][10],char tel[N][10])
{ // 显示学生的各项信息
int i ;
printf(" 学号 姓名 电话号码 \n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
void mysearch(char num[N][10],char name[N][10],char tel[N][10])
{ // 查询方式的选择
char c ;
mydisplay(num,name,tel);
printf("按学号查询(h),还是按姓名查询(m)?");
c=getchar();
if(c=='h'||c=='H')
sch_num(num,name,tel);
else if(c=='m'||c=='M')
sch_name(num,name,tel);
else printf("\n非法字符!\n");
}
void sch_num(char num[N][10],char name[N][10],char tel[N][10])
{ // 按学号查询
int i,flag=0 ;
char nm[10];
printf("\n请输入要查询记录的学号:");
gets(nm);
for(i=0;i<N;i++)
if(strcmp(nm,num[i])==0)
{
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
flag=1 ;
}
if(flag==0)
printf("无此人!\n");
}
void sch_name(char num[N][10],char name[N][10],char tel[N][10])
{ // 按姓名查询
int i,flag=0 ;
char nam[10];
printf("\n请输入要查询记录的姓名:");
gets(nam);
for(i=0;i<N;i++)
if(strcmp(nam,name[i])==0)
{
printf(" 学号 姓名 电话号码\n");
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
flag=1 ;
}
if(flag==0)
printf("无此人!\n");
}
void mymodify(char num[N][10],char name[N][10],char tel[N][10])
{ // 修改模块
int i ;
char nam[10];
printf(" 学号 姓名 电话\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
printf("请输入要修改记录的姓名:");
gets(nam);
for(i=0;i<N;i++)
if(strcmp(nam,name[i])==0)
break ;
if(i==N)
printf("无此人!\n");
else
{
printf("请输入正确的学号:");
do
{ gets(num[i]); } while(strcmp(num[i],"")==0);
printf("请输入正确的姓名:");
gets(name[i]);
printf("请输入正确的电话号码:");
gets(tel[i]);
printf(" 学号 姓名 电话\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
}
void myadd(char num[N][10],char name[N][10],char tel[N][10])
{ // 添加学生信息模块
int i=0,n ;
char c ;
char tempnum[10],tempname[10],temptel[10];
printf("添加前的记录:\n");
printf(" 学号 姓名 电话号码\n");
while(strcmp(num[i],"")!=0
{
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
i++;
}
n=i ;
do
{
printf("请输入新记录的学号:\n");
do
{
gets(tempnum);
} while(strcmp(tempnum,"")==0); /* 学号不能为空 */
printf("请输入新记录的姓名:\n");
gets(tempname);
printf("请输入新记录的电话号码:\n");
gets(temptel);
for(i=0;i<n;i++)
if(strcmp(tempnum,num[i])==0||strcmp(temptel,tel[i])==0)
{
printf("学号或电话号码重,要重新输入吗(Y/N)?");
c=getchar();
putchar('\n');
break ;
}
if(i==n)
{
strcpy(num[i],tempnum);
strcpy(name[i],tempname);
strcpy(tel[i],temptel);
printf("添加后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<n+1;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
break ;
}
} while(c=='y'||c=='Y');
}
void mydelete(char num[N][10],char name[N][10],char tel[N][10])
{ // 删除模块
int i,x ;
char c,nm[10],nam[10];
printf("删除前的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N;i++
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
printf("按学号删除(h),还是按姓名删除(m)?");
c=getchar();
if(c=='h'||c=='H')
{
printf("\n请输入要删除记录的学号:\n");
gets(nm);
for(x=0;x<N;x++)
if(strcmp(nm,name[x])==0)
break ; /* 说明提前结束循环,找到人 */
if(x<N)
{
for(i=x;i<N-1;i++)
{
strcpy(num[i],num[i+1]);
strcpy(name[i],name[i+1]);
strcpy(tel[i],tel[i+1]);
}
printf("删除后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N-1;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
else
printf("无此人\n");
}
else
if(c=='m'||c=='M')
{
printf("\n请输入要删除记录的姓名:\n");
gets(nam);
for(x=0;x<N;x++)
if(strcmp(nam,name[x])==0)
break ;
if(x<N)
{
for(i=x;i<N-1;i++)
{
strcpy(num[i],num[i+1]);
strcpy(name[i],name[i+1]);
strcpy(tel[i],tel[i+1]);
}
printf("删除后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N-1;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
else
printf("无此人\n");
}
else
printf("\n非法字符\n");
}
void mysort(char num[N][10],char name[N][10],char tel[N][10])
{ // 排序模块
int j,i,k ;
char c1,c2,temp[10];
printf("排序前的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
printf("按学号排序(h),还是按姓名排序(m)?");
c1=getchar();
if(c1=='h' || c1=='H')
{
printf("\n按升序排序(s),还是按降序排序(j)?");
c2=getchar();
if(c2=='s'||c2=='S')
{
for(i=0;i<N-1;i++)
{
k=i ;
for(j=i;j<N;j++)
if(strcmp(name[k],name[j])<0)
k=j ;
strcpy(temp,num[k]);
strcpy(num[k],num[i]);
strcpy(num[i],temp);
strcpy(temp,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],temp);
strcpy(temp,tel[k]);
strcpy(tel[k],tel[i]);
strcpy(tel[i],temp);
}
printf("排序后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
else if(c2=='j' || c2=='J')
{
for(i=0;i<N-1;i++)
{
k=i ;
for(j=0;j<N;j++)
if(strcmp(name[k],name[j])<0)
k=j ;
strcpy(temp,num[k]);
strcpy(num[k],num[i]);
strcpy(num[i],temp);
strcpy(temp,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],temp);
strcpy(temp,tel[k]);
strcpy(tel[k],tel[i]);
strcpy(tel[i],temp);
}
printf("排序后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
else printf("\n非法字符\n");
}
else if(c1=='m' || c1=='M') /* 按姓名排序 */
{
printf("\n按升序排序(s),还是按降序排序(j)?");
c2=getchar();
if(c2=='s'||c2=='S')
{
for(i=0;i<N-1;i++)
{
k=i ;
for(j=0;j<N;j++)
if(strcmp(name[k],name[j])<0)
k=j ;
strcpy(temp,num[k]);
strcpy(num[k],num[i]);
strcpy(num[i],temp);
strcpy(temp,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],temp);
strcpy(temp,tel[k]);
strcpy(tel[k],tel[i]);
strcpy(tel[i],temp);
}
printf("排序后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
else if(c2=='j'||c2=='J')
{
for(i=0;i<N-1;i++)
{
k=i ;
for(j=i;j<N;j++)
if(strcmp(name[k],name[j])<0)
k=j ;
strcpy(temp,num[k]);
strcpy(num[k],num[i]);
strcpy(num[i],temp);
strcpy(temp,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],temp);
strcpy(temp,tel[k]);
strcpy(tel[k],tel[i]);
strcpy(tel[i],temp);
}
printf("排序后的记录:\n");
printf(" 学号 姓名 电话号码\n");
for(i=0;i<N;i++)
printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}
else printf("\n非法字符!\n");
}
else printf("\n非法字符!\n");
}
(2)编译直到程序无错误;
(3)运行;
(4)查看运行结果。