- 一、简介
- 二、分析题目
- 三、头文件
- 四、结构体、六大功能与主函数
- 1、定义结构体
- 2、增加信息
- 3、删除信息
- 4、修改信息
- 5、查询信息
- 6、信息排序
- 7、显示所有信息
- 8、主函数
- 五、其他
- 附完整代码
题目:设计一个同学通讯录系统
功能:主菜单、增加、删除、修改、查询、排序、显示等
二、分析题目根据题目要求设计一个包含主菜单、增加、删除、修改、查询、排序、显示等功能的通讯录系统,所以我们可以考虑用函数实现每一个功能,并且构造一个结构体来实现通讯录系统信息存储。
因此,程序的基本结构就是:
#include//万能头文件 #include //定义了Windows的所有资料型态、函数调用、资料结构和常数识别字,它们是Windows文件中的一个重要部分 #include //c++对标准c字符串处理函数的c++增强
每次编写C++程序的第一步就是先添加头文件,一般情况下万能头文件
struct addresslist //结构体定义
{
char num[15]; //学号
char name[15]; //姓名
char tel[15]; //手机号码
char qq[15]; //QQ号
char wx[15]; //微信号
char sex; //性别M/F
int age; //年纪
char mailbox[30];//电子邮箱地址
};
根据信息的类型定义相对应的数据类型即可
注意为信息留下足够的空间
void add(addresslist student[],int &number) //该函数用于同学信息的增加
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
int num1;
cout<<"请输入要增加的同学信息个数:";
cin>>num1;
for(int i=number;i>student[i].num;
cout<<"请输入第"<>student[i].name;
cout<<"请输入第"<>student[i].tel;
cout<<"请输入第"<>student[i].qq;
cout<<"请输入第"<>student[i].wx;
cout<<"请输入第"<>student[i].sex;
while(1)//此函数用于判定用户输入的是否是有效性别信息
{
if(student[i].sex=='M'||student[i].sex=='m'||student[i].sex=='F'||student[i].sex=='f')
break;
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"请正确输入第"<>student[i].sex;
}
}
cout<<"请输入第"<>student[i].age;
cout<<"请输入第"<>student[i].mailbox;
while(1)//此函数用于判定用户输入的是否是有效邮箱地址
{
int j=0,x=1;
for(j=0;j>student[i].mailbox;
continue;
}
break;
}
cout<>yon;
if(yon=='1')
lis(student, number);
}
该函数主要是使用cin输入信息,其他的判断语句用于对输入信息格式的正确与否进行检查。
第一个循环用于多个信息的录入,即选择该功能之后可以连续录入多条信息,避免每一次都需要从主菜单选择增加信息功能再录入的重复操作。
void del(addresslist student[],int &number) //该函数用于同学信息的删除
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否删除同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法删除!" ;
cout<>num3;
while(1)
{
if(num3<=number && num3>0)
{
for(int i=num3;i>num3;
}
}
cout<<"信息删除已完成,是输入“1”显示同学信息n其他数字键不显示同学信息n";
void lis(addresslist student[],int &number);
char yon;
cin>>yon;
if(yon=='1')
lis(student, number);
}
}
在删除信息之前,要先显示通讯录中是否有信息可以删除;确定有则显示出目前的所有信息,接下来就是选择要删除的信息进行删除,实现的方法就是用后面的信息对前面的信息进行覆盖并将通讯录总人数-1
4、修改信息void edi(addresslist student[],int &number) //该函数用于同学信息的修改
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否修改同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法修改!" ;
cout<>num5;
while(1)//该循环用于修改同学各项信息
{
if(num5<=number && num5>0)
{
int j;
j=num5-1;
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>x;
while(x!=9)
{
while(x>9)
{
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>x;
if(x>0&&x<=9)
break;
}
if(x==9)
break;
else
{
switch(x)//该选择用于修改同学各项信息
{
case 1:cout<<"请输入该同学的学号:";
cin>>student[j].num;
break;
case 2:cout<<"请输入该同学的姓名:";
cin>>student[j].name;
break;
case 3:cout<<"请输入该同学的手机号码:";
cin>>student[j].tel;
break;
case 4:cout<<"请输入该同学的QQ号:";
cin>>student[j].qq;
break;
case 5:cout<<"请输入该同学的微信号:";
cin>>student[j].wx;
break;
case 6:cout<<"请输入该同学的性别(M/F):";
cin>>student[j].sex;
while(1)
{
if(student[j].sex=='M'||student[j].sex=='m'||student[j].sex=='F'||student[j].sex=='f')
break;
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"请正确输入该同学的性别(M/F):";
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cin>>student[j].sex;
}
}
break;
case 7:cout<<"请输入该同学的年纪:";
cin>>student[j].age;
break;
case 8:cout<<"请输入该同学的电子邮箱:";
cin>>student[j].mailbox;
while(1)//此函数用于判定用户输入的是否是有效邮箱地址
{
int s=0,x=1;
for(s=0;j>student[j].mailbox;
continue;
}
break;
}
break;
}
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>x;
}
}
break;
}
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"输入错误,请重新选择:";
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cin>>num5;
}
}
cout<<"n信息修改已完成,输入“1”显示同学信息n其他数字键不显示同学信息n";
char yon;
cin>>yon;
if(yon=='1')
lis(student, number);
}
}
同理,修改信息也需要原本已经有录入信息才能进行。实现方法就是将新输入的信息赋予到对应的信息并注意信息的格式是否正确
5、查询信息void fin(addresslist student[],int &number) //该函数用于同学信息的查找
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否查找同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法查询!" ;
cout<>num4;
while(1)//该循环用于查找同学信息
{
if(num4==1||num4==2)
{
if(num4==1)//该判断用于学号查找
{
int i;
cout<<"请输入学号:";
cin>>stud.num;
for(i=0;i>stud.name;
for(i=0;i>num4;
}
}
}
}
查找即是在已有信息中进行搜索,实现方法就是用判断A==B?进行查找,本例只写出用姓名和学号进行查找,除此之外其他信息也是同样可以进行对比查找的
6、信息排序void sor(addresslist student[],int &number) //该函数用于同学信息的排序
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否进行同学信息排序
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法排序!" ;
cout<>num2;
while(num2!=4)//该循环用于各种排序
{
while(num2>4)
{
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>num2;
if(num2>0&&num2<5)
break;
}
if(num2==4)
break;
if(num2==1||num2==2||num2==3)
{
for(int i=0;istudent[j+1].age)
z=1;
else
z=-1;
}
if(z>=0)
{
stud=student[j];
student[j]=student[j+1];
student[j+1]=stud;
}
}
}
break;
}
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"输入错误,请重新选择:";
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cin>>num2;
}
}
cout<<"信息排序已完成,输入“1”显示同学信息n其他数字键不显示同学信息n";
void lis(addresslist student[],int &number);
char yon;
cin>>yon;
if(yon=='1')
lis(student, number);
}
}
信息排序的原理是基于数字大小或ASCII码进行比较大小,我们只需要将要对比的信息进行>、<判断,然后用冒泡法等排序即可
7、显示所有信息void lis(addresslist student[],int &number) //该函数用于同学信息的显示
{
if(number==0)//判断通讯录是否为空,能否显示同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法显示!" ;
cout<
显示信息是所有函数中最简单的了,只需要cout信息就可以,但要注意信息显示的间距等美观问题
8、主函数
int main()
{
addresslist student[100];
int number=0,n;
for(int c=0;c<24;c++)
{
Sleep(100);
SetConsoleColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout<<"* ";
}
cout<<'n';
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
Sleep(200);
cout<<" xx班 :学生通讯录管理系统n";
Sleep(200);
cout<<" 设计者 xxxn";
for(int c=0;c<24;c++)
{
Sleep(100);
SetConsoleColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout<<"* ";
}
cout<<'n';
system("pause"); //该行与下一行用于刷新界面
system("cls");
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ===================================================n";
cout<<" = 欢迎使用通讯录管理系统 =n";
cout<<" = Welcome To the Address Book Management System =n";
cout<<" ===================================================n";
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>n;
while(1)
{
while(n==0||n>7)
{
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>n;
if(n>0 && n<=7)
break;
}
if(n==7)
break;
else if(n==1||n==2||n==3||n==4||n==5||n==6)
{
switch(n)
{
case 1:add(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 2:del(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 3:edi(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 4:fin(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 5:sor(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 6:lis(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
}
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>n;
}
}
system("pause");
system("cls");
SetConsoleColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout<
主函数是实现结构体初始化,通讯录系统进入退出设计以及功能函数调用
五、其他
在通讯录系统设计的过程,对于C++基础知识的掌握程度越来越高,并且在这个过程中也能不断的学习吸收新知识,增加对编程的兴趣。虽然这个系统很简陋,也可能存在错误,但最终还是能够实现题目的要求并有一些小看点,这也算是对C++这门课程换上一个句号,但在编程学习路上只是一个小节点,还会继续努力的,fighting!
看点:为只有黑白两色的显示增加色彩
实现的代码函数:
BOOL SetConsoleColor(WORD wAttributes) //该函数用于修改字体颜色
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
return FALSE;
return SetConsoleTextAttribute(hConsole, wAttributes);
}
附完整代码
#include //万能头文件
#include //定义了Windows的所有资料型态、函数调用、资料结构和常数识别字,它们是Windows文件中的一个重要部分
#include //c++对标准c字符串处理函数的c++增强
using namespace std;
BOOL SetConsoleColor(WORD wAttributes) //该函数用于修改字体颜色
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
return FALSE;
return SetConsoleTextAttribute(hConsole, wAttributes);
}
struct addresslist //结构体定义
{
char num[15]; //学号
char name[15]; //姓名
char tel[15]; //手机号码
char qq[15]; //QQ号
char wx[15]; //微信号
char sex; //性别M/F
int age; //年纪
char mailbox[30];//电子邮箱地址
};
void add(addresslist student[],int &number) //该函数用于同学信息的增加
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
int num1;
cout<<"请输入要增加的同学信息个数:";
cin>>num1;
for(int i=number;i>student[i].num;
cout<<"请输入第"<>student[i].name;
cout<<"请输入第"<>student[i].tel;
cout<<"请输入第"<>student[i].qq;
cout<<"请输入第"<>student[i].wx;
cout<<"请输入第"<>student[i].sex;
while(1)//此函数用于判定用户输入的是否是有效性别信息
{
if(student[i].sex=='M'||student[i].sex=='m'||student[i].sex=='F'||student[i].sex=='f')
break;
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"请正确输入第"<>student[i].sex;
}
}
cout<<"请输入第"<>student[i].age;
cout<<"请输入第"<>student[i].mailbox;
while(1)//此函数用于判定用户输入的是否是有效邮箱地址
{
int j=0,x=1;
for(j=0;j>student[i].mailbox;
continue;
}
break;
}
cout<>yon;
if(yon=='1')
lis(student, number);
}
void del(addresslist student[],int &number) //该函数用于同学信息的删除
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否删除同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法删除!" ;
cout<>num3;
while(1)
{
if(num3<=number && num3>0)
{
for(int i=num3;i>num3;
}
}
cout<<"信息删除已完成,是输入“1”显示同学信息n其他数字键不显示同学信息n";
void lis(addresslist student[],int &number);
char yon;
cin>>yon;
if(yon=='1')
lis(student, number);
}
}
void edi(addresslist student[],int &number) //该函数用于同学信息的修改
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否修改同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法修改!" ;
cout<>num5;
while(1)//该循环用于修改同学各项信息
{
if(num5<=number && num5>0)
{
int j;
j=num5-1;
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>x;
while(x!=9)
{
while(x>9)
{
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>x;
if(x>0&&x<=9)
break;
}
if(x==9)
break;
else
{
switch(x)//该选择用于修改同学各项信息
{
case 1:cout<<"请输入该同学的学号:";
cin>>student[j].num;
break;
case 2:cout<<"请输入该同学的姓名:";
cin>>student[j].name;
break;
case 3:cout<<"请输入该同学的手机号码:";
cin>>student[j].tel;
break;
case 4:cout<<"请输入该同学的QQ号:";
cin>>student[j].qq;
break;
case 5:cout<<"请输入该同学的微信号:";
cin>>student[j].wx;
break;
case 6:cout<<"请输入该同学的性别(M/F):";
cin>>student[j].sex;
while(1)
{
if(student[j].sex=='M'||student[j].sex=='m'||student[j].sex=='F'||student[j].sex=='f')
break;
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"请正确输入该同学的性别(M/F):";
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cin>>student[j].sex;
}
}
break;
case 7:cout<<"请输入该同学的年纪:";
cin>>student[j].age;
break;
case 8:cout<<"请输入该同学的电子邮箱:";
cin>>student[j].mailbox;
while(1)//此函数用于判定用户输入的是否是有效邮箱地址
{
int s=0,x=1;
for(s=0;j>student[j].mailbox;
continue;
}
break;
}
break;
}
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>x;
}
}
break;
}
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"输入错误,请重新选择:";
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cin>>num5;
}
}
cout<<"n信息修改已完成,输入“1”显示同学信息n其他数字键不显示同学信息n";
char yon;
cin>>yon;
if(yon=='1')
lis(student, number);
}
}
void fin(addresslist student[],int &number) //该函数用于同学信息的查找
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否查找同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法查询!" ;
cout<>num4;
while(1)//该循环用于查找同学信息
{
if(num4==1||num4==2)
{
if(num4==1)//该判断用于学号查找
{
int i;
cout<<"请输入学号:";
cin>>stud.num;
for(i=0;i>stud.name;
for(i=0;i>num4;
}
}
}
}
void sor(addresslist student[],int &number) //该函数用于同学信息的排序
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
if(number==0)//判断通讯录是否为空,能否进行同学信息排序
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法排序!" ;
cout<>num2;
while(num2!=4)//该循环用于各种排序
{
while(num2>4)
{
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>num2;
if(num2>0&&num2<5)
break;
}
if(num2==4)
break;
if(num2==1||num2==2||num2==3)
{
for(int i=0;istudent[j+1].age)
z=1;
else
z=-1;
}
if(z>=0)
{
stud=student[j];
student[j]=student[j+1];
student[j+1]=stud;
}
}
}
break;
}
else
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"输入错误,请重新选择:";
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
cin>>num2;
}
}
cout<<"信息排序已完成,输入“1”显示同学信息n其他数字键不显示同学信息n";
void lis(addresslist student[],int &number);
char yon;
cin>>yon;
if(yon=='1')
lis(student, number);
}
}
void lis(addresslist student[],int &number) //该函数用于同学信息的显示
{
if(number==0)//判断通讯录是否为空,能否显示同学信息
{
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
cout<<"通讯录为空无法显示!" ;
cout<>n;
while(1)
{
while(n==0||n>7)
{
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>n;
if(n>0 && n<=7)
break;
}
if(n==7)
break;
else if(n==1||n==2||n==3||n==4||n==5||n==6)
{
switch(n)
{
case 1:add(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 2:del(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 3:edi(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 4:fin(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 5:sor(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
case 6:lis(student, number);//参数为同学录结构数组及通讯录中已有人数。
system("pause");
system("cls");
break;
}
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout<<" ============================================================"<>n;
}
}
system("pause");
system("cls");
SetConsoleColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
cout<



