面向对象程序设计
C++大作业
题目:C++通信录
专业:计算机科学与技术
班级:信息A1611
组号:第一小组
内容:
(1)输入信息; (2)显示信息;
(3)删除记录; (4)查询、修改记录;
(5)界面优化等;
3.void add(); /*增加记录。增加一条联系人记录,通过依次调用set_name(),set_sex(),set_phone(),set_email()等函数实现*/
4.void modify();/*修改记录。输入名字,循环比较找出对应记录。若无则输出没有此人,若有则调用四个set_xxxx()函数输入*/
5.void del_one();/*删除某人记录。输入名字,循环比较找出对应记录。若无则输出没有此人,若有循环覆盖删除此记录*/
二、主功能函数外的功能函数:
void welcome()/*打印出欢迎页面*/
void first_menu();/*打印出主菜单页面*/
int menu();/*将用户选择转化为数字返回。调用first_menu()打印主菜单,通过用户的输入,返回数值作为调用功能的依据。若输入错误,再次循环*/
void work();/*根据用户选择的功能调用相应的功能函数。调用menu()函数,调用数字相对应的功能函数。不断循环,直至选择退出函数*/
void main();/*函数的逻辑顺序操作与选择等*/
小组长 戴志超
学号 |
姓名 |
主要任务 |
占比 |
等级 |
1 |
蒋伟杰 |
主功能函数3,增加函数void add();的编写 |
8% |
B |
2 |
万明 |
主功能函数5,删除某人void del_one();的编写 |
8% |
B |
3 |
陈欣 |
与丰金诚共同参与主功能函数4,修改信息void modify();的编写 |
9% |
A |
4 |
施婷婷 |
主函数1,显示所有人 void show_all();的编写 |
9% |
B |
5 |
戴志超 |
程序整理汇总,调试结果汇总,主函数与外部功能函数void welcome,thanks_for_use,menu();的编写等 |
16% |
A |
6 |
张理宇 |
主功能函数2,搜查信息void search_name();的编写 |
9% |
B |
7 |
赵玉梅 |
程序功能说明的文档编写 |
8% |
B |
8 |
丰金诚 |
与陈欣共同参与主功能函数4,修改信息void modify();的编写 |
9% |
B |
9 |
汪阳东 |
心得体会编写,调试结果汇总,主函数参与,帮助组员查找错误 |
7% |
C |
10 |
龚华 |
界面设计,主功能函数main();编写 |
10% |
A |
11 |
肖地洋 |
心得体会编写,主函数参与,帮助组员查找错误 |
7% |
C |
欢迎界面:
主界面:
增加联系人:(以2个为例)
显示所有人:(也可以只显示某一个)
修改某人信息:(按名字查找并修改,后显示)
删除某人:(按名字删除并显示)
五、源代码:
#include
#include
#include
#include
#include
using namespace std;
int Num; //联系人总数
class Person{ //建立联系人的类
//private成员如下
private:
char name[20];
char sex[10];
char phone[20];
char email[30];
public:
char* get_name();
char* get_sex();
char* get_phone();
char* get_email();
void set_name();
void set_sex();
void set_phone();
void set_email();
void show();
~Person(){};
};
Person people[300]; //定义对象数组
//功能函数声明
void show_all();
void search_name();
void add();
void modify();
void del_one();
void welcome();
void first_menu();
int menu();
//类内函数,返回name
char* Person::get_name(){
return name;
}
//类内函数,返回sex
char* Person::get_sex(){
return sex;
}
//类内函数,返回phone
char* Person::get_phone(){
return phone;
}
//类内函数,返回email
char* Person::get_email(){
return email;
}
//类内函数,设置name
void Person::set_name(){
memset(name,'\0',20); //memset设置格式
cin>>name;
}
//类内函数,设置sex
void Person::set_sex(){
memset(sex,'\0',10);
cin>>sex;
}
//类内函数,,设置phone
void Person::set_phone(){
memset(phone,'\0',20);
cin>>phone;
}
//类内函数,,设置email
void Person::set_email(){
memset(email,'\0',30);
cin>>email;
}
//类内函数,打印全部私有成员
void Person::show(){
cout<<"name:"< cout<<"sex:"< cout<<"phone:"< cout<<"email:"< } //增加一位联系人 void add(){ cout<<"name:"< people[Num].set_name(); cout<<"sex:"< people[Num].set_sex(); cout<<"phone:"< people[Num].set_phone(); cout<<"email:"< people[Num].set_email(); cout<<"输入成功!"< Num++; cout<<"按任意键继续..."< getch(); } //修改联系人 void modify(){ char a[20],s; int flag_find=0,i; cout<<"请输入要修改的名字:"< cin>>a; for(i=0;i if(!strcmp(people[i].get_name(),a)){ //采用strcmp函数比较查找出来的名字与输入的名字是否相同 cout<<"此联系人详细信息如下"< people[i].show(); //调用show函数显示该联系人的所有信息 cout<<"是否要修改姓名?(y/n)"< cin>>s; if(s=='y'||s=='Y'){ cout<<"name:"; //调用set函数,确认修改时使用memset函数按字节对内存块进行初始化,相当于清零操作 people[i].set_name(); } cout<<"是否要修改性别?(y/n)"< cin>>s; if(s=='y'||s=='Y'){ cout<<"sex:"; people[i].set_sex(); } cout<<"是否要修改电话?(y/n)"< cin>>s; if(s=='y'||s=='Y'){ cout<<"phone:"; people[i].set_phone(); } cout<<"是否要修改邮箱?(y/n)"< cin>>s; if(s=='y'||s=='Y'){ cout<<"email:"; people[i].set_email(); } cout< flag_find=1; //修改好后将flag立为1做标志 } } if(flag_find==0){ cout<<"对不起,没有此人!"< } cout<<"按任意键继续..."< getch(); //将读取的字符返回 } //删除一个联系人 void del_one(){ char a[20],c; int flag_find=0,i,j; cout<<"输入要删除的名字:"< cin>>a; for(i=0;i if(!strcmp(people[i].get_name(),a)){ cout<<"此联系人详细信息如下"< people[i].show(); cout<<"是否要删除?(y/n)"< cin>>c; if(c=='Y'||c=='y'){ for(j=i;j strcpy(people[j].get_name(),people[j+1].get_name()); strcpy(people[j].get_sex(),people[j+1].get_sex()); strcpy(people[j].get_phone(),people[j+1].get_phone()); strcpy(people[j].get_email(),people[j+1].get_email()); } memset(people[Num-1].get_name(),'\0',20); memset(people[Num-1].get_sex(),'\0',10); memset(people[Num-1].get_phone(),'\0',20); memset(people[Num-1].get_email(),'\0',30); Num--; } flag_find=1; cout< } } if(flag_find==0){ cout<<"对不起,没有此人!"< }else{ cout< } cout<<"请按任意键继续..."< getch(); } //打印所有联系人 void show_all(){ int i,flag_stop=0; char c; for(i=0;i cout<<"此联系人详细信息如下"< people[i].show(); } cout<<"此系统共有"< if(flag_stop==0) cout<<"全部信息已输出!"< cout< cout<<"请按任意键继续..."< getch(); } //搜索联系人 void search_name(){ char a[20]; int i,flag_find=0; cout<<"请输入您要查询的人名:"< cin>>a; for(i=0;i if(!strcmp(people[i].get_name(),a)){ cout<<"此联系人详细信息如下"< people[i].show(); flag_find=1; } } if(flag_find==0){ cout<<"对不起,没有此人!"< }else{ cout< } cout<<"请按任意键继续..."< getch(); } void welcome(){ printf(" \n"); printf(" **************************\n"); printf(" **欢迎使用通讯录管理系统**\n"); printf(" **************************\n"); printf(" \n"); printf(" -------按任意键继续-------\n"); printf(" \n"); printf(" "); getch(); //读取字符但不显示 system("cls"); //system函数 清屏 } void first_menu(){ system("cls"); cout<<" 主菜单 "< cout<<"----------------------------"< cout<<"查询F 增加A 修改M 删除D "< cout<<"----------------------------"< } int menu(){ char s,t; int choice; while(true){ while(true){ first_menu(); cin>>s; switch(s){ case 'F': cout<<"a 显示全部信息"< cin>>t; if(t=='a'||t=='A'){ choice=1; }else if(t=='b'||t=='B'){ choice=2; }else{ choice=0; } break; case 'f': cout<<"a 显示全部信息"< cin>>t; if(t=='a'||t=='A'){ choice=1; }else if(t=='b'||t=='B'){ choice=2; }else{ choice=0; } break; case 'A': choice=3; break; case 'a': choice=3; break; case 'M': choice=4; break; case 'm': choice=4; break; case 'D': cout<<"a 删除某人信息"< cin>>t; if(t=='a'||t=='A'){ choice=5; } else{ choice=0; } break; case 'd': cout<<"a 删除某人信息"< cin>>t; if(t=='a'||t=='A'){ choice=5; } else{ choice=0; } break; default :{ cout<<"输入错误,请重新选择功能!"< cout<<"按任意键继续..."< getch(); } } if(s=='F'||s=='f'||s=='A'||s=='a'||s=='M'||s=='m'||s=='D'||s=='d'){ break; } } if(choice==0){ cout<<"输入错误,请重新选择功能!"< cout<<"按任意键继续..."< getch(); }else{ break; } } return choice; } int main() { welcome();//调用欢迎界面 int choice; while(true){ choice=menu(); switch(choice){ case 1: show_all(); break; case 2: search_name(); break; case 3: add(); break; case 4: modify(); break; case 5: del_one(); break; } } return 0; } 六、总结: 程序优点: 1.较为完善的做出了通讯录的功能,达到了基本要求。 2.流畅的交互界面,考虑到许多误操作并给予提示。 3.灵巧运用节点跳转,写有许多flag,case等选择,条理清晰。 4.所有信息均以char类型存储,十分的统一,且没有使用顺序表的那些算法操作去增删改查,而是另辟蹊径的运用字符型的特点,使用字符数组,总体思路便于理解。 5.小组自学新知识点,尝试运用memset函数设置字符的初始格式,方便快捷。 (memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘/0’;例:char a[100];memset(a, '/0', sizeof(a));) 程序缺点: 1.代码的可重用性不足,没有用到函数模板。 2.功能不够有特色,是为简单的增删改查,没有涉及到文件的存储读写等操作,且目前只考虑到姓名、性别、电话、邮箱。个人认为此四项最为重要,其余项用处不大且占用代码空间。可以后期写生日、备注等项。